Prochaine révision | Révision précédente |
serveur:securiser [2015/10/09 21:55] – modification externe 127.0.0.1 | serveur:securiser [2020/04/04 20:37] (Version actuelle) – [Références] ajout d'un lien d2air |
---|
====== Sécuriser un serveur ====== | ====== Sécuriser un serveur ====== |
===== Fail2ban ===== | ===== Fail2ban ===== |
fail2ban lit les logs de divers serveurs (SSH, Apache, …) à la recherche d'erreurs d'authentification répétées et ajoute une règle iptables pour bannir l'adresse IP de la source. | [[ubuntufr>fail2ban]] lit les logs de divers serveurs (SSH, Apache, …) à la recherche d'erreurs d'authentification répétées et ajoute une règle iptables pour bannir l'adresse IP de la source. |
==== Installation ==== | ==== Installation ==== |
<code> | <code> |
apt-get install fail2ban | apt install fail2ban |
</code> | </code> |
==== Configuration ==== | ==== Configuration ==== |
Par rapport au blocage par défaut (600s), un blocage de 1h est bien plus réaliste (3600s), ou même 1 journée (86400s), ou pourquoi pas 1 semaine (604800s). Mais attention que changer le 'bantime' n'agit pas sur le 'findtime' qu'il faut également ajuster, car sinon le 'findtime' par défaut (10mn) est utilisé. L'inconvénient d'un (très ?) grand 'findtime' est qu'il pousse fail2ban à analyser de plus longs fichiers de log, et que ça peut être pénalisant du point de vue des performances, alors c'est à vous de voir. La solution est alors de choisir un grand 'findtime' et un très grand 'bantime' : 3600 et 86400, ou encore 86400 et 604800. | Par rapport au blocage par défaut (600s), un blocage de 1h est bien plus réaliste (3600s), ou même 1 journée (86400s), ou pourquoi pas 1 semaine (604800s). Mais attention que changer le 'bantime' n'agit pas sur le 'findtime' qu'il faut également ajuster, car sinon le 'findtime' par défaut (10mn) est utilisé. L'inconvénient d'un (très ?) grand 'findtime' est qu'il pousse fail2ban à analyser de plus longs fichiers de log, et que ça peut être pénalisant du point de vue des performances, alors c'est à vous de voir. La solution est alors de choisir un grand 'findtime' et un très grand 'bantime' : 3600 et 86400, ou encore 86400 et 604800. |
| |
Nous devons bien veiller à ajouter en liste blanche vos adresses IPs les plus communes, car l'erreur est humaine, donc il ne faudrait pas nous bloquer nous-même de l'accès à notre serveur. La liste 'ignoreip' est séparée d'espaces, donc si votre IP est xxx.xxx.xxx.xxx, copions le fichier jail.conf en jail.local et éditons ce fichier : | Nous devons bien veiller à ajouter en liste blanche vos adresses IPs les plus communes, car l'erreur est humaine, donc il ne faudrait pas nous bloquer nous-même de l'accès à notre serveur. La liste 'ignoreip' est séparée d'espaces, donc si votre IP est xxx.xxx.xxx.xxx, Il faut créer le fichier dans ''/etc/fail2ban/jail.d/custom.conf'' (ou un autre nom de votre choix) contenant : |
<code> | <file sh custom.conf> |
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local | |
vi /etc/fail2ban/jail.conf | |
</code> | |
<file sh jail.local> | |
[DEFAULT] | [DEFAULT] |
ignoreip = 127.0.0.1/8 xxx.xxx.xxx.xxx | ignoreip = 127.0.0.1/8 xxx.xxx.xxx.xxx |
bantime = 604800 | bantime = 604800 |
</file> | </file> |
| <note> |
| Il est déconseillé de modifier les fichiers de configuration /etc/fail2ban/fail2ban.conf et /etc/fail2ban/jail.conf (ils pourraient être écrasés par une mise à jour), car ces fichiers contiennent les configurations de base que nous pouvons surcharger au moyen d'un ou plusieurs fichiers enregistrés dans /etc/fail2ban/jail.d |
| |
| Le fichier /etc/fail2ban/jail.conf doit servir uniquement de référence et de documentation. |
| </note> |
=== Adapter la configuration à vos besoins === | === Adapter la configuration à vos besoins === |
Pour spécifier à fail2ban quels services il doit surveiller, éditons le fichier /etc/fail2ban/jail.local | Pour spécifier à fail2ban quels services il doit surveiller, éditons le fichier ''/etc/fail2ban/jail.d/custom.conf''. |
Dans la partie jail nous trouverons des blocs du type : | Dans la partie jail nous trouverons des blocs du type : |
<file sh jail.local> | <file sh jail.local> |
</code> | </code> |
Cette commande retournera le statut de la prison ''ssh'' ou de celle qui sera passée en paramètre avec le nombre de tentatives échouées et la liste des adresses IP bannies. | Cette commande retournera le statut de la prison ''ssh'' ou de celle qui sera passée en paramètre avec le nombre de tentatives échouées et la liste des adresses IP bannies. |
| |
Une variante de ''fail2ban-client statut'', qui permet un checklist des adresses IP bannies sur toutes les jails : | Une variante de ''fail2ban-client statut'', qui permet un checklist des adresses IP bannies sur toutes les jails : |
<code> | <code> |
Une expression régulière définit les lignes du log qui signalent une erreur d'authentification. Il est possible de spécifier via une regex des exceptions (par exemple pour ne pas bannir des IP spécifiques) . | Une expression régulière définit les lignes du log qui signalent une erreur d'authentification. Il est possible de spécifier via une regex des exceptions (par exemple pour ne pas bannir des IP spécifiques) . |
== Création d'une règle anti-w00tw00t == | == Création d'une règle anti-w00tw00t == |
Voici un exemple, pour bannir les désormais célèbres requêtes DFind w00tw00t. Dans le fichier ''/etc/fail2ban/jail.conf'' ajoutons : | Voici un exemple, pour bannir les désormais célèbres requêtes DFind w00tw00t. Dans le fichier ''/etc/fail2ban/jail.d/custom.conf'' nous ajoutons : |
<file sh jail.conf> | <file sh custom.conf> |
[apache-w00tw00t] | [apache-w00tw00t] |
enabled = true | enabled = true |
filter = apache-w00tw00t | filter = apache-w00tw00t |
action = iptables[name=Apache-w00tw00t,port=80,protocol=tcp] | action = iptables-multiport[name=Apache-w00tw00t,port="http,https",protocol=tcp] |
logpath = /var/log/apache*/*access.log | logpath = %(apache_access_log)s |
maxretry = 1 | maxretry = 0 |
| bantime = 864000 |
| findtime = 3600 |
</file> | </file> |
Notons que contrairement aux autres règles, celle-ci s'attaque au fichier de log des accès (/var/log/apache2/access*.log). | Notons que contrairement aux autres règles, celle-ci s'attaque au fichier de log des accès (/var/log/apache2/access*.log). |
Voici le fichier de règles ''/etc/fail2ban/filter.d/apache-w00tw00t.conf'' : | Voici le fichier de règles ''/etc/fail2ban/filter.d/apache-w00tw00t.conf'' : |
<file sh apache-w00tw00t.conf> | <file sh apache-w00tw00t.conf> |
[Definition] | |
| |
failregex = ^<HOST> -.*"GET \/w00tw00t\.at\.ISC\.SANS\.DFind\:\).*".* | failregex = ^<HOST> -.*"GET \/w00tw00t\.at\.ISC\.SANS\.DFind\:\).*".* |
| |
ignoreregex = | ignoreregex = |
</file> | </file> |
Testons maintenant si la règle s'applique bien en faisant : | Testons maintenant si la règle s'applique bien en faisant : |
<code> | <code> |
fail2ban-regex /var/log/apache2/access.log /etc/fail2ban/filter.d/apache-w00tw00t.conf | fail2ban-regex /var/log/apache2/error.log /etc/fail2ban/filter.d/apache-w00tw00t.conf |
</code> | </code> |
Si vous subissez ce genre d'attaque, vous pourrez voir en sortie de ce programme les adresses des spammeurs. Les règles iptables seront automatiquement crées en conséquence. | Si vous subissez ce genre d'attaque, vous pourrez voir en sortie de ce programme les adresses des spammeurs. Les règles ''iptables'' seront automatiquement créés en conséquence. |
== Création d'une règle contre les erreurs 404 == | == Création d'une règle contre les erreurs 404 == |
Une adresse IP à l'origine d'un nombre 404 est souvent la conséquence d'un scanner à la recherche de ressources, logiciels ou d'interfaces d'administration à exploiter. | Une adresse IP à l'origine d'un nombre important d'erreur 404 est souvent la conséquence d'un scanner à la recherche de ressources, logiciels ou d'interfaces d'administration à exploiter. |
<file sh jail.conf> | <file sh custom.conf> |
[apache-404] | [apache-404] |
| |
filter = apache-404 | filter = apache-404 |
action = iptables-multiport[name=apache-404, port="http,https"] | action = iptables-multiport[name=apache-404, port="http,https"] |
sendmail-whois-lines[name=apache-404, lines=5, dest=david@dair2.eu, sender=fail2ban@dair2.eu] | sendmail-whois-lines[name=apache-404, lines=5, dest=root@domaine.eu, sender=fail2ban@domaine.eu] |
logpath = /var/log/apache*/*access.log | logpath = %(apache_access_log)s |
bantime = 86400 | bantime = 86400 |
findtime = 3600 | findtime = 3600 |
maxretry = 10 | maxretry = 15 |
</file> | </file> |
<file sh apache-404.conf> | <file sh apache-404.conf> |
[Definition] | [Definition] |
failregex = (?P<host>[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) .+ 404 [0-9]+ " | failregex = ^<HOST> - .* "(GET|POST|HEAD).*HTTP.*" 404 .*$ |
ignoreregex = .*(robots.txt|favicon.ico) | ignoreregex = .*(robots.txt|favicon.ico|sitemap.xml|sitemap.xml.gz|jpg|jpeg|gif|png|svg) |
</file> | </file> |
== Création d'une règle contre la CVE-2012-1823 == | == Création d'une règle contre la CVE-2012-1823 == |
<file sh jail.conf> | <file sh custom.conf> |
[php-cve-2012-1823] | [php-cve-2012-1823] |
| |
action = iptables-multiport[name=php-cve-2012-1823, port="http,https"] | action = iptables-multiport[name=php-cve-2012-1823, port="http,https"] |
sendmail-whois-lines[name=php-cve-2012-1823, lines=5, dest=root@domaine.eu, sender=fail2ban@domaine.eu] | sendmail-whois-lines[name=php-cve-2012-1823, lines=5, dest=root@domaine.eu, sender=fail2ban@domaine.eu] |
logpath = /var/log/apache*/*access.log | logpath = %(apache_access_log)s |
bantime = 604800 | bantime = 604800 |
findtime = 86400 | findtime = 86400 |
failregex = ^<HOST> -.*"POST .*cgi.*\?%%2D%%64\+%%61%%6C%%6C%%6F%%77%%5F%%75%%72%%6C%%5F%%69%%6E%%63%%6C%%75%%64%%65%%3D%%6F%%6E\+%%2D%%64\+%%73%%61%%66%%65%%5F%%6D%%6F%%64%%65%%3D%%6F%%66%%66.*" | failregex = ^<HOST> -.*"POST .*cgi.*\?%%2D%%64\+%%61%%6C%%6C%%6F%%77%%5F%%75%%72%%6C%%5F%%69%%6E%%63%%6C%%75%%64%%65%%3D%%6F%%6E\+%%2D%%64\+%%73%%61%%66%%65%%5F%%6D%%6F%%64%%65%%3D%%6F%%66%%66.*" |
</code> | </code> |
| ===== Références ===== |
| * [[http://doc.ubuntu-fr.org/fail2ban|http://doc.ubuntu-fr.org/fail2ban]] |
| * [[https://www.fail2ban.org/wiki/index.php/FAQ_french|https://www.fail2ban.org/wiki/index.php/FAQ_french]] |
| * [[https://wiki.visionduweb.fr/index.php?title=Installer_et_utiliser_Fail2ban|https://wiki.visionduweb.fr/index.php?title=Installer_et_utiliser_Fail2ban]] |
| * [[https://reseau.developpez.com/tutoriels/fail2ban/|https://reseau.developpez.com/tutoriels/fail2ban/]] |
| * [[https://bobcares.com/blog/fail2ban-apache-404/|https://bobcares.com/blog/fail2ban-apache-404/]] |
| |