Regles pf pour bloquer le ssh bruteforcing et le deni de service

Packet filter, le parre feu d’OpenBSD (disponible et installé dans FreeBSD et NetBSD) nous offre des options de filtrage avancées.

Il est possible de contrer le ssh bruteforcing (tentative de trouver le mot de passe en testant une infinité de mots de passe) et le Déni de service (grand nombre de connexion à un serveur pour le faire exploser où empêcher les autres d’y accéder).

Pour celà il faut un peu jouer avec max-src-conn , max-src-conn-rate et les tables pf.

Voici un exemple commenté :

# Interface entrante
ext_if = "fxp0"
# On crée deux tables
table <ssh_abuse> persist
table <http_abuse> persist
# On bloque ceux qui sont dans la table sur les ports concernés
# Le 'quick' permet d'ignorer toute autre rêgle de filtrage 
# concernant ces paquets
block in quick on $ext_if proto tcp from <ssh_abuse> port ssh
block in quick on $ext_if proto tcp from <http_abuse> port http
# si on a plus de 2 connection toutes les 10 secondes sur
# le port ssh, on rajoute l'IP concernée dans la table ssh_abuse
pass in inet proto tcp to any port ssh flags S/SA keep state \
(max-src-conn-rate 2/10, overload <ssh_abuse> flush global)
# Si on a plus de 100 connection avec cet IP ou plus de 20 connexion
# en 5 secondes, alors on met l'IP concernée dans la table http_abuse
pass in inet proto tcp to any port http flags S/SA keep state \
(max-src-conn 100, max-src-conn-rate 20/5, overload <http_abuse> flush)