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.)
La façon préférée de le faire est avec
iptables
. Il semble que cela ait été adéquatement couvert par d'autres, donc, pour être complet, je soulignerai une méthode de contrôle d'accès alternative qui est disponible pour de nombreux démons sur la plupart des distributions Linux. Cette méthode de contrôle d'accès est fournie par lalibwrap
bibliothèque.Pour vérifier si votre démon préféré est pris en
libwrap
charge, essayez d'exécuter ce qui suit:Si vous obtenez un résultat non vide, tel que
alors vous êtes définitivement prêt à partir.
Il est presque certain que votre
sshd
démon a unlibwrap
support, et il doit donc consulter les fichiers/etc/hosts.allow
et/etc/hosts.deny
pour le contrôle d'accès. En supposant que votre réseau local LAN est192.168.100.0/24
, vous pouvez refuser l' accès àsshd
tous les clients à l' exception de ceux sur l'hôte local ou sur le LAN local en mettant ce qui suit dans votre/etc/hosts.deny
fichier:Notez que cette méthode n'ouvre ni ne ferme les ports en soi. Il indique simplement aux démons qui utilisent cette méthode de contrôle d'accès s'ils doivent accepter ou rejeter les tentatives de connexion des clients qui correspondent aux modèles donnés.
Pour plus de détails, consultez les pages de manuel, en commençant par
hosts_access(5)
.la source
Si vous avez votre propre pare-feu basé sur Linux, vous feriez mieux de le configurer
iptables
, comme d'autres le décrivent ici. Si ce n'est pas le cas et que le pare-feu est votre routeur, la configuration par défaut empêche probablement déjà l'accès de l'extérieur, sauf si vous activez explicitement la redirection de port (comme je l'ai récemment décrit en réponse à cette question ).Pour plus de sécurité, vous pouvez utiliser un sous-réseau distinct pour les connexions LAN. Pour ce faire, pour chaque ordinateur, ajoutez une deuxième adresse IP qui serait utilisée uniquement dans le LAN et non par le routeur. Disons que l'ensemble du LAN utilise désormais des
192.168.0.xxx
adresses et que le routeur (passerelle, pare-feu) l'est192.168.0.1
. Ajoutez donc une deuxième adresse pour chaque ordinateur - par exemple:Ensuite, modifiez la
sshd
configuration pour utiliser uniquement cette adresse (afin qu'elle n'autorise pas les connexions à venir192.168.0.xxx
) - modifiez/etc/ssh/sshd_config
et modifiezListenAddress
celle de votre nouveau sous-réseau (192.168.5.1
dans l'exemple ci-dessus). C'est ça! Si vous ne configurez pas la passerelle pour acheminer la communication de ce sous-réseau, elle doit être séparée de l'extérieur.la source