Comment autoriser certains IPS et bloquer toutes les autres connexions dans iptables?
Comment autoriser certains IPS et bloquer toutes les autres connexions dans iptables?
Réponses:
J'ai écrit un article de blog sur les règles de base d'Iptables pour l'utilisateur de bureau il y a longtemps et vous devriez probablement le lire, ainsi que son article lié sur la conception d'un pare-feu avec état . Mais pré noyau 2.6.39 (qui inclut ipset
et vous voudrez peut-être l'utiliser pour la liste blanche des IP si vous avez plus de 10 à ajouter à la liste blanche (où 10 est arbitraire)).
Commencez par gérer les états que nous savons que nous voulons accepter ou supprimer, et les interfaces.
iptables -P FORWARD DROP # we aren't a router
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP # Drop everything we don't accept
Si vous voulez juste faire une autorisation par IP uniquement, sans état
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
vous êtes susceptible de rencontrer des problèmes en faisant cela, et je suggère d'utiliser l'état pour vous faciliter la vie. Par exemple, ne pas autoriser -i lo
et -o lo
entraînera certainement des problèmes pour certaines applications.
iptables -F
cela censé effacer toutes les règles, je ne peux même pas faire de ping sur
Voici un exemple (non testé!) Qui bloque uniquement les connexions entrantes . Les connexions via l'interface de bouclage, provenant de 192.168.3.x, ICMP, ou vers le port SSH sont autorisées. Toutes les autres connexions sont rejetées.
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT
lo
dans l'exemple ci-dessus est exclu de la correspondance d'état et toujours autorisé.
La règle ci-dessous autorisera uniquement votre IP et bloquera toutes les autres IP sur le port 22 ou ssh. Testez avec un nouveau terminal avant de vous déconnecter.
iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j DROP
yourIPaddress
-je ajouter quelques adresses IP et plages? Et si j'utilise SSH sur un port non standard comme 2888, alors la commande changerait le 22
dans votre exemple en 2288
? En outre, cela bloquera-t-il également rsync, sftp, etc. sur ce serveur de toutes les adresses IP, à l'exception de celles autorisées?
-p tcp
est important ici car --dport
ne fonctionne pas sans lui. Je suggérerais également d'utiliser -j REJECT
au lieu de DROP
car REJECT
rend le port identique au port fermé et DROP
rend les paquets destinés à ce port troués noirs. En pratique, un attaquant distant peut détecter DROP
des ports configurés à partir de ports réellement fermés.
Voici un exemple de travail complet.
Fait également fonctionner les applications (re: mon commentaire sur le non-démarrage de keepass)