# ---------------- # iptables blacklist # https://serverfault.com/questions/273324/how-to-make-iptables-rules-expire#answer-537382 (Glen) # netfilter iptables DROP temporaire after event iptables dispose d'une méthode permettant d'ajouter automatiquement des adresses IP à une liste si les conditions définies par l'utilisateur sont remplies. J'utilise ce qui suit pour éviter les tentatives de piratage automatisées sur mon port SSH : $ iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name ssh --seconds 60 --reap -j DROP Cela permet de limiter les tentatives automatisées d'accès au serveur en limitant les tentatives de connexion à partir de la même adresse IP à une toutes les 60 secondes. Si vous souhaitez autoriser un nombre défini de tentatives dans un laps de temps, par exemple 4 en 5 minutes, et en cas d'échec, les mettre sur liste noire pendant une période plus longue, par exemple 24 heures, vous pouvez procéder comme suit : $ iptables -X black $ iptables -N black $ iptables -A black -m recent --set --name blacklist -j DROP $ iptables -X ssh $ iptables -N ssh $ iptables -I ssh 1 -m recent --update --name blacklist --reap --seconds 86400 -j DROP $ iptables -I ssh 2 -m recent --update --name timer --reap --seconds 600 --hitcount 4 -j black $ iptables -I ssh 3 -m recent --set --name timer -j ACCEPT $ iptables -A INPUT -p TCP --dport ssh -m state --state NEW -j ssh Ci-dessus, nous créons 2 chaînes : « ssh » et « black », ainsi que 2 listes : « timer » et « blacklist ». En bref : la dernière chaîne illustrée ci-dessus est la « porte » d'accès à la chaîne ssh. - La règle 1 de la chaîne ssh vérifie si l'IP source est dans la liste "blacklist". Si c'est le cas, la connexion est abandonnée et le compteur de 24 heures de la liste noire est redémarré. Si la règle 1 est fausse, alors on passe à la règle 2. - La règle 2 de la chaîne ssh vérifie si l'IP source a fait plus de 4 tentatives de connexion en 5 minutes. Si c'est le cas, elle envoie le paquet à la chaîne "black" où il est ajouté à la liste "blacklist". La chaîne "black" abandonne alors la connexion, et c'est fini. - La règle 3 de la chaîne "ssh" n'est atteinte que si les règles 1 et 2 sont fausses. Si c'est le cas, le paquet est ACCEPTÉ et l'IP source est ajoutée à la liste "timer" afin que nous puissions surveiller la fréquence des tentatives de connexion. L'option « --reap » indique au noyau de rechercher dans la liste et de purger tous les éléments qui sont plus anciens que la limite de temps définie ; 5 minutes pour la liste « timer » et 24 heures pour la liste « blacklist ». Remarque : les espaces supplémentaires servent à la lisibilité et sont facultatifs dans votre script shell. # ---------- # Limiter le nombre de sessions tcp par client sur un port donné # https://blog.bashy.eu/2011/04/limiter-le-nombre-de-sessions-tcp-par-ip-ou-sous-reseau/ (Bashy) Pour ssh, je limite à 3 le nombre de sessions tcp par IP (avec une policy à DROP par défaut) : $ iptables -A INPUT -p tcp --syn --dport 22 -m connlimit ! --connlimit-above 3 -j ACCEPT On pourrait très bien permettre seulement 10 connexions ssh sur le sous-réseau /24 de la source comme suivant : $ iptables -A INPUT -p tcp --syn --dport 22 -m connlimit ! --connlimit-above 10 --connlimit-mask 24 -j ACCEPT Avec une telle règle, si 198.51.100.2 ouvre 3 connexions ssh, il reste à toute la plage IP 198.51.100.0-198.51.100.255 7 connexions possibles. # ----------- # Firewall ICMPv6 - IPv6 : Pare-feu GNU/Linux # http://howto.zw3b.fr/linux/securite/comment-faire-un-reseau-ipv6-firewall-icmpv6 (LAB3W.ORJ) # Limiter à 1 ping par minute pour tout un bloc source IPv6::/64 (18,446,744,073,709,551,616 address IPv6::/128) $ ip6tables -I INPUT -s 2001:c010:beef:abcd:/64 -p icmpv6 --icmpv6-type 128/0 -m hashlimit --hashlimit-name ICMP --hashlimit-above 1/minute --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-srcmask 64 -j DROP # Limiter a un ping par seconde par IPv6::/128 $ ip6tables -I INPUT -p icmpv6 --icmpv6-type echo-request -m hashlimit --hashlimit-name ICMP --hashlimit-above 1/second --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-srcmask 128 -j DROP # ----------- # Conntrack sur Linux : comment ça marche # https://www.malekal.com/conntrack-sur-linux-comment-ca-marche/ # Conntrack pour tracking connexion est un composant de la pile réseau et Netfilter qui permet de suivre les connexions réseaux. # Notamment avec Conntrack vous pouvez facilement suivre l’état des connexions réseaux (NEW, ESTABLISHED, RELATED et INVALID). # Enfin, cela permet de rendre le pare-feu Linux en mode stateful firewall. # Ainsi, on peut utiliser l’état et suivi de connexion dans Iptables pour affiner les règles de pare-feu.