Le blogouille de Caro et Nico

Entre famille, sport et aventures !

Lutte anti slowhack / botnet hack.

Bon alors… quand on gère des serveurs qui sont connectés sur internet, malgré le firewall, dès qu’on a une bonne série de services (SSH, FTPs, HTTPs, IMAPs, SMTPs, POP3s, etc…) on se retrouve avec un PAQUET de tentative d’intrusions, du genre plusieurs à la minute… à force cela devient fatiguant et fait tourner les machines pour rien.

En utilisant une bonne combinaison d’outils, on arrive à bien contenir les attaques basiques de type brute force venant de la même IP. En particulier avec les outils Fail2Ban et DenyHosts. Par contre depuis plusieurs mois je fait face à un nouveau type de problème, des milliers d’addresses IP différentes qui tentent toute une combinaison de login et mot de passe différents, genre « classique », mais à chaque fois, une seule unique IP tente une combinaison, puis quelques secondes après, c’est une autre IP qui tente une combinaison légèrement différente. Ca a l’air bien foutu, mais difficile à bloquer, en fait il y a quelques parades. 

Par exemple Dovecot logge se genre de choses

2017-11-12 14:44:08 auth-worker(7082): Info: sql(eleanor,101.187.110.152): unknown user (given password: password)

 

Et voilà l ‘adresse IP 101.187.110.152 qui tente la combinaison eleanor/password … je serais curieux de savoir ce qui se passe si ce script d’un botnet tombe sur un login valide, à priori je penche pour de l’envoi de spam.

En tout cas, voilà comment j’ai procédé pour limiter les ennuis :

Augmenté la fréquence de synchronisation de DenyHosts, à 5 minutes. Il y a une limite hardcodée de 50 hôtes à chaque sync, mais cela fait tout de même 15000 hôtes par jour à récupérer qui seront bloqués, en mettant un filet large de sélection, genre DOWNLOAD_THRESHOLD à 2 et SYNC_DOWNLOAD_RESILIENCY = 5h

Ensuite sur fail2ban, on peut mettre quelques filtres REGEX pour capturer ces tentatives de botnet sommes toutes basiques. Genre :

,<HOST>\): unknown user \(given password: 123456
,<HOST>\): unknown user \(given password: password
,<HOST>\): unknown user \(given password: web
,<HOST>\): unknown user \(given password: russ

Et en ajoutant quelques filtres sur les mots de passe basiques, on récupère un paquet d’adresse IP (j’en ai eu environ 70000 par jour !!) et avec un bon ban genre de plusieurs semaines, et ben voili voilou, bien tranquille, le nombre de de tentatives d’intrusions a complètement diminué, par un facteur 100.

Bon ban ! 

 

IMAP et SMTP, Proftpd en SSL

Mise à jour Mars 2017, avec l’arrivée de Let’sEncrypt

Mais que se passe-t-il en 2017 ? Les autorités de CA pètent les plombs ? Ernst & Young n’est pas capable d’auditer une autorité de certification correctement ? WhoSign n’est pas fiable, a de plus acheté StartSSL, donc voili voilou, on se retrouve avec Google v57 et Firefox qui ne font plus confiance à StartSSL, donc migration sur Let’sEncrypt. Et au passage l’autorité CA de Symantec se fait remonter les bretelles par Google…. cela doit faire plaisir à leurs clients !

Pour HTTPs, c’est un jeu d’enfant. Génération & Installation sur Apache en automatique avec Certbot pour Debian 8. Plié en 5 minutes.

Bon pour les mails en securisé SSL, on peut (doit) réutiliser les clefs de apache générées pour le serveur www.caronico.fr. On ne peut pas avoir différents hosts avec un serveur de classe 1. Par ailleurs le MX doit pointer sur www.caronico.fr. La documentation de Certbot est sur https://certbot.eff.org/docs/using.html#where-are-my-certificates

Les fichiers de certificats sont dans le dossier /etc/letsencrypt/live/www.caronico.fr

IMAP/POP3
Pour les clients IMAPs/POP3s, la configuration SSL se situe dans /etc/dovecot/dovecot.conf avec les références :

ssl_key =</etc/letsencrypt/live/www.caronico.fr/privkey.pem
ssl_cert =</etc/letsencrypt/live/www.caronico.fr/cert.pem
ssl_ca = </etc/letsencrypt/live/www.caronico.fr/chain.pem

SMTP

Pour SMTP c’est configuré dans /etc/postfix/main.cf avec les références :


smtpd_tls_cert_file = /etc/letsencrypt/live/www.caronico.fr/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/www.caronico.fr/privkey.pem
smtpd_tls_CAfile = /etc/letsencrypt/live/www.caronico.fr/chain.pem
smtpd_use_tls = yes

PROFTPD
Pour le serveur FTP en TLS, c’est ici dans le fichier TLS.CONF

TLSRSACertificateFile /etc/letsencrypt/live/www.caronico.fr/fullchain.pem
TLSRSACertificateKeyFile /etc/letsencrypt/live/www.caronico.fr/privkey.pem

Côté client.

Note pour le côté client, il faut prendre sécurité type « SSL » server, le server www.caronico.com et les ports 25 pour SMTP et 993 pour IMAPs.