Hello !
Newsoo devient de plus en plus la cible de bruteforce pour tenter de poster du spam à travers le serveur de news. Chaque identification demande une requête SQL et le serveur devenait de plus en plus sollicité, bref je sors le bazooka et je vous le montre !
Le système est le suivant :
1. L'application génère un log spécifique aux identifications ratées (vous pouvez créer un log pour n'importe quoi, il faut que ça repose sur le critère que vous souhaitez sanctionner).
2. Fail2Ban garde un oeil sur le fichier de log avec le filtre qui va bien.
3. S'il y a trop de tentatives avec la même IP durant un laps de temps défini, c'est Fail2Ban qui gère l'entrée en firewall, et aussi la sortie une fois la sanction expirée.
1. Générer le log
import logging
logging.basicConfig(filename='/var/log/newsoo-badpwd.log',level=logging.WARNING,format='%(asctime)s %(message)s')
logging.warning('news1 server: ([email protected]'+self.ip+') [WARNING] Authentication failed for user ['+self.user+':'+password+']')
Après quelques fausses tentatives, le fichier "/var/log/newsoo-badpwd.log" se remplit :
2016-02-23 22:22:53,711 news1 server: ([email protected]) [WARNING] Authentication failed for user [cedric:test]
2. Le filtre Fail2Ban
## /etc/fail2ban/filters.d/newsoo-badpwd.conf
[INCLUDES]
before = common.conf
[Definition]
# Error message specified in multiple languages
__errmsg = (?:Authentication failed for user)
failregex = ^%(__prefix_line)s([email protected]<HOST>) [WARNING] %(__errmsg)s [.+]s*$
## /etc/fail2ban/jail.conf
...
[newsoo-badpwd]
enabled = true
filter = newsoo-badpwd
logpath = /var/log/newsoo-badpwd.log
port = 119,443,563,1337
protocol = tcp
bantime = 300
maxretry = 3
Après un redémarrage de fail2ban, constatez que le firewall est prêt à recevoir les règles
# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-newsoo-badpwd tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 119,443,563,1337
fail2ban-ssh tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 22
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain fail2ban-newsoo-badpwd (1 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0
Chain fail2ban-ssh (1 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0
Et voilà, vous avez un système de ban totalement automatisé et efficace
Adaptez-le, copiez-le, diffusez-le, partagez-le (en me mentionnant). Bisous !