Securiser serveur dedie : Différence entre versions

De Free 4 Funs
Aller à : navigation, rechercher
(Configuration Fail2Ban)
(Configuration Fail2Ban)
Ligne 64 : Ligne 64 :
 
   maxretry = 6
 
   maxretry = 6
  
Remplacer '''false''' par '''true''' pour activer le jail puis redémarrez Fail2Ban (service fail2ban restart ou invoke-rc.d fail2ban restart).
+
Remplacer '''false''' par '''true''' pour activer le jail puis redémarrez Fail2Ban ('''service fail2ban restart''' ou '''invoke-rc.d fail2ban restart''').
  
  
Ligne 74 : Ligne 74 :
 
Si vous avez un serveur web sous apache, activer les jails le concernant.
 
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.<br />
 
Si vous avez un serveur FTP, activer le jail en conséquence.<br />
Si vous avez un serveur web Nginx, il vous faudra ajouter ses jails :
+
Si vous avez un serveur web Nginx, vous pourrez ajouter ses jails dans '''/etc/fail2ban/jail.conf''':
  
 
<br /><code>[nginx-auth]<br />
 
<br /><code>[nginx-auth]<br />
Ligne 164 : Ligne 164 :
 
         user .* password mismatch.*client: <HOST>
 
         user .* password mismatch.*client: <HOST>
 
   ignoreregex =
 
   ignoreregex =
 +
 +
'''nginx-badbots.conf'''
 +
 +
<code>nano -w /etc/fail2ban/filter.d/nginx-badbots.conf</code>
 +
 +
  # Fail2Ban configuration file
 +
  # Author: Patrik 'Sikevux' Greco <sikevux@sikevux.se>
 +
  [Definition]
 +
  # Option: failregex
 +
  # Notes.: regex to match access attempts to setup.php
 +
  # Values: TEXT
 +
  failregex = ^<HOST> .*?"GET.*?\/setup\.php.*?" .*?
 +
  # Anti w00tw00t
 +
            ^<HOST> .*?"GET .*w00tw00t.* 400
 +
  # try to access to directory
 +
            ^<HOST> .*?"GET .*admin.* 403
 +
            ^<HOST> .*?"GET .*admin.* 404
 +
            ^<HOST> .*?"GET .*install.* 404
 +
            ^<HOST> .*?"GET .*dbadmin.* 404
 +
            ^<HOST> .*?"GET .*myadmin.* 404
 +
            ^<HOST> .*?"GET .*MyAdmin.* 404
 +
            ^<HOST> .*?"GET .*mysql.* 404
  
 
'''nginx-login.conf'''
 
'''nginx-login.conf'''
Ligne 179 : Ligne 201 :
 
   ignoreregex =
 
   ignoreregex =
 
    
 
    
 +
On peut bloquer le scan de port, éditez le fichier  '''/etc/fail2ban/jail.conf''' :
 +
  [portscan] 
 +
  enabled = true 
 +
  filter  = portscan 
 +
  action  = iptables[name=portscan] 
 +
  logpath = /var/log/messages 
 +
  maxretry = 3 
  
[http://snippets.aktagon.com/snippets/554-how-to-secure-an-nginx-server-with-fail2ban source de cette configuration]
+
On créer la configuration pour le jail '''portscan''':
  
Les logs de Fail2Ban sont dans le répertoire '''/var/log/fail2ban'''.
+
'''portscan.conf'''
  
 +
<code>nano -w /etc/fail2ban/filter.d/portscan.conf</code>
  
 +
  # Option: failregex
 +
  # Notes: Looks for attempts on ports not open in your firewall. Expects the
 +
  # iptables logging utility to be used. Add the following to your iptables
 +
  # config, as the last item before you DROP or REJECT:
 +
  # -A <chain_name> -j LOG --log-prefix "PORT DENIED: " --log-level 5 --log-ip-options --log-tcp-options --log-tcp-sequence
 +
  # This will place a notice in /var/log/messages about any attempt on a port that isn't open.
 +
  [Definition]
 +
  failregex = PORT DENIED: .* SRC=<HOST>
 +
 +
 +
 +
[http://snippets.aktagon.com/snippets/554-how-to-secure-an-nginx-server-with-fail2ban source de cette configuration]
 +
 +
Les logs de Fail2Ban sont dans le répertoire '''/var/log/fail2ban'''.
  
 
=<font color="blue">Interface Web pour Fail2Ban</font>=
 
=<font color="blue">Interface Web pour Fail2Ban</font>=

Version du 2 février 2015 à 13:46

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, vous pourrez ajouter ses jails dans /etc/fail2ban/jail.conf:


[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-badbots.conf

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

 # Fail2Ban configuration file
 # Author: Patrik 'Sikevux' Greco <sikevux@sikevux.se>
 [Definition]
 # Option: failregex
 # Notes.: regex to match access attempts to setup.php
 # Values: TEXT
 failregex = ^<HOST> .*?"GET.*?\/setup\.php.*?" .*?
 # Anti w00tw00t
           ^<HOST> .*?"GET .*w00tw00t.* 400
 # try to access to directory
           ^<HOST> .*?"GET .*admin.* 403
           ^<HOST> .*?"GET .*admin.* 404
           ^<HOST> .*?"GET .*install.* 404
           ^<HOST> .*?"GET .*dbadmin.* 404
           ^<HOST> .*?"GET .*myadmin.* 404
           ^<HOST> .*?"GET .*MyAdmin.* 404
           ^<HOST> .*?"GET .*mysql.* 404

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 =
 

On peut bloquer le scan de port, éditez le fichier /etc/fail2ban/jail.conf :

 [portscan]  
 enabled = true  
 filter  = portscan  
 action  = iptables[name=portscan]  
 logpath = /var/log/messages  
 maxretry = 3  

On créer la configuration pour le jail portscan:

portscan.conf

nano -w /etc/fail2ban/filter.d/portscan.conf

 # Option: failregex
 # Notes: Looks for attempts on ports not open in your firewall. Expects the
 # iptables logging utility to be used. Add the following to your iptables
 # config, as the last item before you DROP or REJECT:
 # -A <chain_name> -j LOG --log-prefix "PORT DENIED: " --log-level 5 --log-ip-options --log-tcp-options --log-tcp-sequence
 # This will place a notice in /var/log/messages about any attempt on a port that isn't open.
 [Definition]
 failregex = PORT DENIED: .* SRC=<HOST>


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.