Securiser serveur dedie

De Free 4 Funs
Révision de 31 janvier 2015 à 16:03 par Let's Go (discuter | contributions) (Configuration Fail2Ban)

Aller à : navigation, rechercher

Introduction

C'est le casse tête principale des administrateurs ayant un serveur dédié, comment se protéger au mieux !


Installation Fail2Ban

Si vous n'avez pas Fail2Ban d'installer, faites ceci ROOT :

 apt-get install fail2ban -y

ou

 aptitude install fail2ban -y

Configuration Fail2Ban

Warning.png Pensez à faire des sauvegardes des fichiers que vous modifiez !
Warning.png Nous utilisons l'éditeur nano donc pour sauvegarder une modification, faites CTRL + O puis Entrée.


 cp /etc/fail2ban/jail.conf{,.defaut}
 cp /etc/fail2ban/fail2ban.conf{,.defaut}


Le fichier fail2ban.conf ne sera pas expliquez dans ce tutoriel car nous n'en voyons pas l'utilité.


Maintenant, comment paramétrer toutes ces variables ?

  • ignoreip = 127.0.0.1/8 Icon11.gif Ajouter votre IP si vous avez la chance d'avoir une IP fixe, ceci aura pour effet de ne pas vous bannir en cas de mauvaise manipulation.
  • bantime = 600 Icon11.gif Durée du bannissement en cas d'échec.
  • maxretry = 3 Icon11.gif Nombre d'erreurs maximales pouvant être atteints avant d'être ban.
  • destemail = root@localhost Icon11.gif Adresse mail recevant les notifications des bans.
  • action = %(action_)s Icon11.gif devra être remplacé par action = %(action_mwl)s ou action = %(action_mw)s si la variable destmail est modifié.

Voici la configuration que j'utilise personnellement :

 ignoreip = 127.0.0.1/8
 bantime  = 604800
 findtime = 3600
 maxretry = 3

Vous pouvez coupler la variable bantime à findtime (par défaut, fixé à 10 minutes) cependant faites attention avec l'utilisateur de cette valeur car elle peut nuire aux performances de votre serveur vu qu'elle analyse en approfondi les logs. La solution la plus adaptée est de choisir un grand 'findtime' et un très grand 'bantime' : 3600 et 86400, ou encore 86400 et 604800 comme le montre ma configuration ci-dessus.

Il faudra modifier le numéro du port SSH dans le jail si il n'écoute pas sur le port 22.

Rechercher le jail ssh et remplacer la ligne :

 port     = ssh

par

 port     = VOTRE_PORT


Regardons comment activer les différents services, prenons l'exemple du jail ssh-ddos : Par défaut :

 [ssh-ddos]
 enabled  = false
 port     = ssh
 filter   = sshd-ddos
 logpath  = /var/log/auth.log
 maxretry = 6

Remplacer false par true pour activer le jail puis redémarrez Fail2Ban (service fail2ban restart ou invoke-rc.d fail2ban restart).


Liste des jails pouvant être activés :

  • pam-generic
  • xinetd-fail
  • ssh-ddos

Si vous avez un serveur web sous apache, activer les jails le concernant. Si vous avez un serveur FTP, activer le jail en conséquence.
Si vous avez un serveur web Nginx, il vous faudra ajouter ses jails :


[nginx-auth]
enabled = true
filter = nginx-auth
action = iptables-multiport[name=NoAuthFailures, port="http,https"]
logpath = /var/log/nginx*/*error*.log
bantime = 600 # 10 minutes
maxretry = 6

[nginx-login]
enabled = true
filter = nginx-login
action = iptables-multiport[name=NoLoginFailures, port="http,https"]
logpath = /var/log/nginx*/*access*.log
bantime = 600 # 10 minutes
maxretry = 6

[nginx-badbots]
enabled = true
filter = apache-badbots
action = iptables-multiport[name=BadBots, port="http,https"]
logpath = /var/log/nginx*/*access*.log
bantime = 86400 # 1 day
maxretry = 1

[nginx-noscript]
enabled = true
action = iptables-multiport[name=NoScript, port="http,https"]
filter = nginx-noscript
logpath = /var/log/nginx*/*access*.log
maxretry = 6
bantime = 86400 # 1 day

[nginx-proxy]
enabled = true
action = iptables-multiport[name=NoProxy, port="http,https"]
filter = nginx-proxy
logpath = /var/log/nginx*/*access*.log
maxretry = 0
bantime = 86400 # 1 day

Maintenant, nous allons déclarer les fichiers de configuration des nouveaux jails dans /etc/fail2ban/filter.d/ :

Créer les fichiers suivants en copiant le code donné ci-dessous :

nginx-proxy.conf

nano -w /etc/fail2ban/filter.d/nginx-proxy.conf

 #Proxy filter /etc/fail2ban/filter.d/nginx-proxy.conf:
 #
 # Block IPs trying to use server as proxy.
 #
 # Matches e.g.
 # 192.168.1.1 - - "GET http://www.something.com/
 #
 [Definition]
 failregex = ^<HOST> -.*GET http.*
 ignoreregex =

nginx-noscript.conf

nano -w /etc/fail2ban/filter.d/nginx-noscript.conf

 # Noscript filter /etc/fail2ban/filter.d/nginx-noscript.conf:
 #
 # Block IPs trying to execute scripts such as .php, .pl, .exe and other funny scripts.
 #
 # Matches e.g.
 # 192.168.1.1 - - "GET /something.php
 #
 [Definition]
 failregex = ^<HOST> -.*GET.*(\.php|\.asp|\.exe|\.pl|\.cgi|\scgi)
 ignoreregex =

nginx-auth.conf

nano -w /etc/fail2ban/filter.d/nginx-auth.conf

 #
 # Auth filter /etc/fail2ban/filter.d/nginx-auth.conf:
 #
 # Blocks IPs that fail to authenticate using basic authentication
 #
 [Definition]
 failregex = no user/password was provided for basic authentication.*client: <HOST>
       user .* was not found in.*client: <HOST>
       user .* password mismatch.*client: <HOST>
 ignoreregex =

nginx-login.conf

nano -w /etc/fail2ban/filter.d/nginx-login.conf

 #
 # Login filter /etc/fail2ban/filter.d/nginx-login.conf:
 #
 # Blocks IPs that fail to authenticate using web application's log in page
 #
 # Scan access log for HTTP 200 + POST /sessions => failed log in
 [Definition]
 failregex = ^<HOST> -.*POST /sessions HTTP/1\.." 200
 ignoreregex =
 

source de cette configuration

Les logs de Fail2Ban sont dans le répertoire /var/log/fail2ban.


Interface Web pour Fail2Ban

Les commandes Fail2Ban

Les principales commandes à retenir :

  • fail2ban-client start
  • fail2ban-client stop
  • fail2ban-client reload
  • fail2ban-client status

Pour avoir une liste plus complète, exécuter fail2ban-client en SSH.