Securiser serveur dedie : Différence entre versions
(→Installation Fail2Ban) |
(→Configuration Fail2Ban) |
||
| Ligne 16 : | Ligne 16 : | ||
=<font color="blue">Configuration Fail2Ban</font>= | =<font color="blue">Configuration Fail2Ban</font>= | ||
| + | |||
| + | [[Fichier:Warning.png]] Pensez à faire des sauvegardes des fichiers que vous modifiez ! | ||
| + | [[Fichier: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 [[Fichier: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 [[Fichier:icon11.gif]] Durée du bannissement en cas d'échec. | ||
| + | * maxretry = 3 [[Fichier:icon11.gif]] Nombre d'erreurs maximales pouvant être atteints avant d'être ban. | ||
| + | * destemail = root@localhost [[Fichier:icon11.gif]] Adresse mail recevant les notifications des bans. | ||
| + | * action = %(action_)s [[Fichier: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.<br /> | ||
| + | Si vous avez un serveur web Nginx, il vous faudra ajouter ses jails : | ||
| + | |||
| + | <br /><code>[nginx-auth]<br /> | ||
| + | enabled = true<br /> | ||
| + | filter = nginx-auth<br /> | ||
| + | action = iptables-multiport[name=NoAuthFailures, port="http,https"]<br /> | ||
| + | logpath = /var/log/nginx*/*error*.log<br /> | ||
| + | bantime = 600 # 10 minutes<br /> | ||
| + | maxretry = 6<br /> | ||
| + | |||
| + | [nginx-login]<br /> | ||
| + | enabled = true<br /> | ||
| + | filter = nginx-login<br /> | ||
| + | action = iptables-multiport[name=NoLoginFailures, port="http,https"]<br /> | ||
| + | logpath = /var/log/nginx*/*access*.log<br /> | ||
| + | bantime = 600 # 10 minutes<br /> | ||
| + | maxretry = 6<br /> | ||
| + | |||
| + | [nginx-badbots]<br /> | ||
| + | enabled = true<br /> | ||
| + | filter = apache-badbots<br /> | ||
| + | action = iptables-multiport[name=BadBots, port="http,https"]<br /> | ||
| + | logpath = /var/log/nginx*/*access*.log<br /> | ||
| + | bantime = 86400 # 1 day<br /> | ||
| + | maxretry = 1<br /> | ||
| + | |||
| + | [nginx-noscript]<br /> | ||
| + | enabled = true<br /> | ||
| + | action = iptables-multiport[name=NoScript, port="http,https"]<br /> | ||
| + | filter = nginx-noscript<br /> | ||
| + | logpath = /var/log/nginx*/*access*.log<br /> | ||
| + | maxretry = 6<br /> | ||
| + | bantime = 86400 # 1 day<br /> | ||
| + | |||
| + | [nginx-proxy]<br /> | ||
| + | enabled = true<br /> | ||
| + | action = iptables-multiport[name=NoProxy, port="http,https"]<br /> | ||
| + | filter = nginx-proxy<br /> | ||
| + | logpath = /var/log/nginx*/*access*.log<br /> | ||
| + | maxretry = 0<br /> | ||
| + | bantime = 86400 # 1 day<br /></code> | ||
| + | |||
| + | 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''' | ||
| + | |||
| + | <code>nano -w /etc/fail2ban/filter.d/nginx-proxy.conf</code> | ||
| + | |||
| + | #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''' | ||
| + | |||
| + | <code>nano -w /etc/fail2ban/filter.d/nginx-noscript.conf</code> | ||
| + | |||
| + | # 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''' | ||
| + | |||
| + | <code>nano -w /etc/fail2ban/filter.d/nginx-auth.conf</code> | ||
| + | |||
| + | # | ||
| + | # 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''' | ||
| + | |||
| + | <code>nano -w /etc/fail2ban/filter.d/nginx-login.conf</code> | ||
| + | |||
| + | # | ||
| + | # 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 = | ||
| + | |||
| + | |||
| + | [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">Les commandes Fail2Ban</font>= | ||
| + | |||
| + | 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. | ||
Version du 31 janvier 2015 à 15:55
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
Pensez à faire des sauvegardes des fichiers que vous modifiez !
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
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
Durée du bannissement en cas d'échec. - maxretry = 3
Nombre d'erreurs maximales pouvant être atteints avant d'être ban. - destemail = root@localhost
Adresse mail recevant les notifications des bans. - action = %(action_)s
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 =
Les logs de Fail2Ban sont dans le répertoire /var/log/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.