Avec les iptables du noyau complètement vides ( iptables -F
), cela fera ce que vous demandez:
# iptables -A INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -s 127.0.0.0/8 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j DROP
Cela signifie que toutes les adresses LAN sont autorisées à parler au port TCP 22, que localhost reçoit la même considération (oui, 127. * pas seulement 127.0.0.1), et les paquets de toutes les autres adresses ne correspondant pas à ces deux premières règles sont déposés sans cérémonie dans le seau à mors . Vous pouvez utiliser REJECT
au lieu de DROP
si vous souhaitez un rejet actif (TCP RST) au lieu de faire du port TCP 22 un trou noir pour les paquets.
Si votre LAN n'utilise pas le bloc 192.168.0. *, Vous devrez naturellement changer l'IP et le masque sur la première ligne pour correspondre au schéma IP de votre LAN.
Ces commandes peuvent ne pas faire ce que vous voulez si votre pare-feu a déjà des règles configurées. (Dites en iptables -L
tant que root pour le savoir.) Ce qui arrive fréquemment, c'est que l'une des règles existantes saisit les paquets que vous essayez de filtrer, de sorte que l'ajout de nouvelles règles n'a aucun effet. Bien que vous puissiez utiliser -I
au lieu de -A
la iptables
commande pour épisser de nouvelles règles au milieu d'une chaîne au lieu de les ajouter, il est généralement préférable de savoir comment les chaînes sont remplies au démarrage du système et de modifier ce processus afin que vos nouvelles règles soient toujours installées dans le bon ordre.
RHEL 7+
Sur les systèmes de type RHEL récents, la meilleure façon de le faire est d'utiliser firewall-cmd
ou son équivalent GUI. Cela indique au firewalld
démon du système d'exploitation ce que vous voulez, c'est-à-dire ce qui remplit et manipule réellement ce que vous voyez via iptables -L
.
RHEL 6 et versions antérieures
Sur les anciens systèmes de type RHEL, la façon la plus simple de modifier les chaînes de pare-feu lors de la commande est de modifier /etc/sysconfig/iptables
. Les outils de pare-feu GUI et TUI du système d'exploitation sont plutôt simplistes, donc une fois que vous commencez à ajouter des règles plus complexes comme celle-ci, il est préférable de revenir à de bons vieux fichiers de configuration. Attention, une fois que vous commencez à le faire, vous risquez de perdre vos modifications si vous utilisez les outils de pare-feu du système d'exploitation pour modifier la configuration, car il peut ne pas savoir comment gérer des règles artisanales comme celles-ci.
Ajoutez quelque chose comme ça à ce fichier:
-A RH-Firewall-1-INPUT -p tcp --dport 22 -s 192.168.0.0/24 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 22 -s 127.0.0.0/8 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 22 -j DROP
Lorsque vous l'ajoutez, c'est la partie la plus délicate. Si vous trouvez une ligne dans ce fichier qui parle --dport 22
, remplacez-la simplement par les trois lignes ci-dessus. Sinon, il devrait probablement précéder la première ligne existante se terminant par -j ACCEPT
. En règle générale, vous devrez vous familiariser avec le fonctionnement d' iptables , auquel point le bon point d'insertion sera évident.
Enregistrez ce fichier, puis dites service iptables restart
de recharger les règles du pare-feu. Assurez-vous de le faire lorsque vous êtes connecté à la console, au cas où vous mettriez du doigt les modifications! Vous ne voulez pas vous verrouiller hors de votre machine lorsque vous êtes connecté via SSH.
La similitude avec les commandes ci-dessus n'est pas une coïncidence. La plupart de ce fichier se compose d'arguments de la iptables
commande. Les différences par rapport à ce qui précède sont que la iptables
commande est supprimée et que le INPUT
nom de la chaîne devient la chaîne spéciale spécifique à RHEL RH-Firewall-1-INPUT
. (Si vous souhaitez examiner le fichier plus en détail, vous verrez plus tôt dans le fichier où ils ont essentiellement renommé la INPUT
chaîne. Pourquoi? Impossible de dire.)