Aller au contenu principal
Blog@sp
CAPTCHA
2 + 10 =
Trouvez la solution de ce problème mathématique simple et saisissez le résultat. Par exemple, pour 1 + 3, saisissez 4.
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Main navigation

  • Accueil
CAPTCHA
11 + 5 =
Trouvez la solution de ce problème mathématique simple et saisissez le résultat. Par exemple, pour 1 + 3, saisissez 4.
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Fil d'Ariane

  1. Accueil

Défense supplémentaire du serveur grâce à l'outil Fail2ban

L'outil Fail2ban permet de bannir pendant un certain temps des adresses IP qui ont essayé plusieurs fois de suite, sans succès, de s'authentifier à l'un ou l'autre des services réseau installés sur le serveur ou bien tentées d'exploiter une faille repérée par le module "mod_security" d'Apache par exemple.

Fail2ban a été installé par le script d'installation de la solution iRedMail avec des règles prédéfinies qui se trouvent dans le dossier "/etc/fail2ban/jail.d" sous la forme de fichiers se terminant par l'extension ".local".

Défense du serveur Apache

On va se baser sur ces fichiers pour créer de nouvelles règles pour protéger notre serveur Apache des attaques. On va commencer par copier l'ensemble des sections concernant Apache qui apparaissent dans le fichier "/etc/fail2ban/jail.conf" dans un nouveau fichier nommé "/etc/fail2ban/jail.d/apache.conf". A noter qu'il faut ajouter la ligne "enabled = true" pour chaque section afin que la règle associée soit prise en compte.

On peut augmenter la valeur de la variable "bantime" (le temps de banissement d'une IP) soit de façon générale en modifiant la variable qui apparait dans le fichier "/etc/fail2ban/jail.local", soit individuellement en écrivant explicitement la variable et sa valeur sous chaque service.

On pourra également, de la même façon, modifier la valeur de "maxretry" (le nombre maximal d'essais infructueux autorisés avant bannissement) et "findtime" (l'intervalle de temps durant lequel on comptabilise les essais infructueux consécutifs par une même adresse IP).

Suivant cela, voici à quoi peut ressembler notre nouveau fichier "/etc/fail2ban/jail.d/apache.conf" :

[apache-auth]
backend     = polling
journalmatch=
enabled     = true
filter      = apache-auth
logpath     = /var/log/apache2/error.log
action      = nftables-multiport[name=apache-auth, port="80,443,25,587,465,110,995,143,993,4190", protocol=tcp]
              banned_db[name=apache-auth, port="80,443,25,587,465,110,995,143,993,4190", protocol=tcp]
findtime    = 1h
bantime     = 120h
maxretry    = 2
[apache-noscript]
backend     = polling
journalmatch=
enabled     = true
filter      = apache-noscript
logpath     = /var/log/apache2/error.log
action      = nftables-multiport[name=apache-noscript, port="80,443,25,587,465,110,995,143,993,4190", protocol=tcp]
              banned_db[name=apache-noscript, port="80,443,25,587,465,110,995,143,993,4190", protocol=tcp]
findtime    = 1h
bantime     = 120h
maxretry    = 2
[apache-overflows]
backend     = polling
journalmatch=
enabled     = true
filter      = apache-overflows
logpath     = /var/log/apache2/error.log
action      = nftables-multiport[name=apache-overflows, port="80,443,25,587,465,110,995,143,993,4190", protocol=tcp]
              banned_db[name=apache-overflows, port="80,443,25,587,465,110,995,143,993,4190", protocol=tcp]
maxretry    = 2
[apache-nohome]
backend     = polling
journalmatch=
enabled     = true
filter      = apache-nohome
logpath     = /var/log/apache2/error.log
action      = nftables-multiport[name=apache-nohome, port="80,443,25,587,465,110,995,143,993,4190", protocol=tcp]
              banned_db[name=apache-nohome, port="80,443,25,587,465,110,995,143,993,4190", protocol=tcp]
maxretry    = 2
[apache-botsearch]
backend     = polling
journalmatch=
enabled     = true
filter      = apache-botsearch
logpath     = /var/log/apache2/error.log
action      = nftables-multiport[name=apache-botsearch, port="80,443,25,587,465,110,995,143,993,4190", protocol=tcp]
              banned_db[name=apache-botsearch, port="80,443,25,587,465,110,995,143,993,4190", protocol=tcp]
maxretry = 2
[apache-modsecurity]
backend     = polling
journalmatch=
enabled   = true
filter      = apache-modsecurity
logpath     = /var/log/apache2/error.log
action      = nftables-multiport[name=apache-modsecurity, port="80,443,25,587,465,110,995,143,993,4190", protocol=tcp]
              banned_db[name=apache-modsecurity, port="80,443,25,587,465,110,995,143,993,4190", protocol=tcp]
maxretry    = 2
[apache-shellshock]
backend     = polling
journalmatch=
enabled     = true
filter      = apache-shellshock
logpath     = /var/log/apache2/error.log
action      = nftables-multiport[name=apache-shellshock, port="80,443,25,587,465,110,995,143,993,4190", protocol=tcp]
              banned_db[name=apache-shellshock, port="80,443,25,587,465,110,995,143,993,4190", protocol=tcp]
maxretry    = 1

On redémarre Fail2ban en exécutant la commande suivante (vérifier les erreurs éventuellement rencontrées en regardant dans le fichier "/var/log/syslog") :

# sudo systemctl restart fail2ban

Défense du serveur Nginx

On crée le fichier "/etc/fail2ban/filter.d/nginx-403.conf" dans lequel on met le contenu suivant :

[Definition]
failregex = <HOST> -.*"(GET|POST).*HTTP/[0-9]+(.[0-9]+)?" 403 .*

On crée ensuite le fichier "/etc/fail2ban/filter.d/nginx-404.conf" dans lequel on met ce contenu :

[Definition]
failregex = <HOST> -.*"(GET|POST).*HTTP/[0-9]+(.[0-9]+)?" 404 .*

Et enfin, on crée le fichier "/etc/fail2ban/filter.d/nginx-429.conf" dans lequel on met le contenu ci-dessous :

[Definition]
failregex = <HOST> -.*"(GET|POST).*HTTP/[0-9]+(.[0-9]+)?" 429 .*

Pour finir, on crée le fichier "/etc/fail2ban/jail.d/nginx-4xx.conf" avec le contenu suivant qui va entre autre bloquer les connexions qui ont engendré 3 fois de suite une erreur HTTP 403 (accès refusé) en une heure, 7 fois une erreur 404 (page non trouvée) en 15 minutes et 10 fois une erreur 429 (nombre de connexions trop élevé) en une heure :

[nginx-403]
backend     = polling
journalmatch=
enabled     = true
filter      = nginx-403
logpath     = /var/log/nginx/access.log
action      = nftables-multiport[name=nginx-403, port="80,443,25,587,465,110,995,143,993,4190", protocol=tcp]
              banned_db[name=nginx-403, port="80,443,25,587,465,110,995,143,993,4190", protocol=tcp]
findtime    = 1h
bantime     = 120h
maxretry    = 3
[nginx-404]
backend     = polling
journalmatch=
enabled     = true
filter      = nginx-404
logpath     = /var/log/nginx/access.log
action      = nftables-multiport[name=nginx-404, port="80,443,25,587,465,110,995,143,993,4190", protocol=tcp]
              banned_db[name=nginx-404, port="80,443,25,587,465,110,995,143,993,4190", protocol=tcp]
findtime    = 15m
bantime     = 120h
maxretry    = 7
[nginx-429]
backend     = polling
journalmatch=
enabled     = true
filter      = nginx-429
logpath     = /var/log/nginx/access.log
action      = nftables-multiport[name=nginx-429, port="80,443,25,587,465,110,995,143,993,4190", protocol=tcp]
              banned_db[name=nginx-429, port="80,443,25,587,465,110,995,143,993,4190", protocol=tcp]
findtime    = 1h
bantime     = 120h
maxretry    = 10

On n'oublie pas de redémarrer Fail2ban :

# sudo systemctl reload fail2ban

Liens transversaux de livre pour Défense supplémentaire du serveur grâce à l'outil Fail2ban

  • Configurer les serveurs et proxy web (Apache, Varnish et Nginx)
  • Haut
  • Rendre légitime le serveur d'e-mails avec SPF, DKIM et DMARC

Commentaires

À propos des formats de texte
CAPTCHA
1 + 0 =
Trouvez la solution de ce problème mathématique simple et saisissez le résultat. Par exemple, pour 1 + 3, saisissez 4.
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Book navigation

  • Paquets à installer avant de lancer le script d'installation de la solution iRedMail
  • Ports réseau à ouvrir sur le serveur
  • Configurer les noms de domaine
  • Lancement du script d'installation de la solution iRedMail
  • Créer un ou des certificats SSL
  • Configurer les serveurs et proxy web (Apache, Varnish et Nginx)
  • Défense supplémentaire du serveur grâce à l'outil Fail2ban
  • Rendre légitime le serveur d'e-mails avec SPF, DKIM et DMARC
  • Accès aux outils installés par la solution iRedMail et mises à jour
  • Message d'absence, filtres sur les e-mails et configuration du compte de messagerie côté utilisateur
  • Solution de stockage en ligne auto-hébergée ownCloud couplée à la solution bureautique web Collabora Online
  • Configurer un serveur et des clients VPN et mettre en place un site web privé
RSS feed