Securiser serveur dedie : Différence entre versions
(→Configuration Fail2Ban) |
|||
| Ligne 1 : | Ligne 1 : | ||
=<font color="blue">Introduction</font>= | =<font color="blue">Introduction</font>= | ||
| − | C'est le casse tête principale des administrateurs ayant un serveur dédié, comment se protéger au mieux !<br /> | + | C'est le casse tête principale des administrateurs ayant un serveur dédié, comment se protéger au mieux !<br /> Nous allons vous montrer comment se protéger au mieux dans ce tutoriel.<br /> |
| + | Voici une liste des logiciels qui seront installés et configuré : | ||
| + | * Fail2Ban, | ||
| + | * Fail2Web, | ||
| + | * Logwatch, | ||
| + | * Portsentry, | ||
| + | * Port Knocking, | ||
| + | * RKHunter | ||
| − | + | =<font color="blue">Fail2Ban</font>= | |
| − | =<font color="blue">Installation Fail2Ban</font>= | + | ==<font color="blue">Installation Fail2Ban</font>== |
Si vous n'avez pas Fail2Ban d'installer, faites ceci '''ROOT''' : | Si vous n'avez pas Fail2Ban d'installer, faites ceci '''ROOT''' : | ||
| Ligne 38 : | Ligne 45 : | ||
Voici la configuration que j'utilise personnellement : | Voici la configuration que j'utilise personnellement : | ||
ignoreip = 127.0.0.1/8 | ignoreip = 127.0.0.1/8 | ||
| − | bantime = 604800 | + | bantime = 604800 (réglé à -1, le ban sera de façon permanent) |
findtime = 3600 | findtime = 3600 | ||
maxretry = 3 | maxretry = 3 | ||
| Ligne 223 : | Ligne 230 : | ||
[Definition] | [Definition] | ||
failregex = PORT DENIED: .* SRC=<HOST> | failregex = PORT DENIED: .* SRC=<HOST> | ||
| − | |||
[http://snippets.aktagon.com/snippets/554-how-to-secure-an-nginx-server-with-fail2ban source de cette configuration] | [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'''. | Les logs de Fail2Ban sont dans le répertoire '''/var/log/fail2ban'''. | ||
| − | |||
| − | =<font color="blue">Les commandes Fail2Ban</font>= | + | ==<font color="blue">Les commandes Fail2Ban</font>== |
Les principales commandes à retenir : | Les principales commandes à retenir : | ||
| Ligne 240 : | Ligne 246 : | ||
* fail2ban-client status | * fail2ban-client status | ||
| − | Pour avoir une liste plus complète, exécuter '''fail2ban-client''' en SSH. | + | Pour avoir une liste plus complète, exécuter '''fail2ban-client'''. |
| + | |||
| + | |||
| + | ==<font color="blue">Débannir une IP avec Fail2Ban</font>== | ||
| + | |||
| + | Avant tout, vous devez vous assurez de l'adresse IP à débannir, faites : | ||
| + | iptables -t filter -L -n | ||
| + | |||
| + | Si toutefois, le résultat de la commande s'avère être trop longue dans le terminal, pensez à rediriger le résultat dans un fichier temp. | ||
| + | iptables -t filter -L -n > ipadeban.txt | ||
| + | |||
| + | |||
| + | La commande suivante permet de débannir une adresse IP cependant il faut respecter la syntaxe : | ||
| + | iptables -t filter -D NomChaine IDChaine | ||
| + | |||
| + | Sachez que la première IP présente aura pour ID = 1 puis incrémenter la valeur de 1 pour chaque adresse IP. | ||
| + | |||
| + | Exemple : | ||
| + | |||
| + | [[Fichier:Warning.png]] Pour effectuer un test, demander soit à un copain et assurez de pouvoir vous débannir | ||
| + | Pour ce tutoriel, je me suis fait bannir mon adresse IP pour que vous voyez comment ça se présentera : | ||
| + | |||
| + | iptables -t filter -L -n | ||
| + | Chain INPUT (policy ACCEPT) | ||
| + | target prot opt source destination | ||
| + | fail2ban-ssh tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 22 | ||
| + | Chain FORWARD (policy ACCEPT) | ||
| + | target prot opt source destination | ||
| + | Chain OUTPUT (policy ACCEPT) | ||
| + | target prot opt source destination | ||
| + | Chain fail2ban-ssh (1 references) | ||
| + | target prot opt source destination | ||
| + | DROP all -- MON_IP.rev.sfr.fr anywhere | ||
| + | RETURN all -- anywhere anywhere | ||
| + | |||
| + | [[Fichier:Warning.png]] L'adresse IP sera inversé, si votre IP est '''152.12.241.265''', la ligne sera : '''DROP all -- 265.241.12.152.rev.sfr.fr anywhere''', ceci n'est qu'un exemple, l'adresse IP utilisée a été écrite au hasard ! | ||
| + | |||
| + | Il s'offre à vous deux méthodes pour révoquer le bannissement, la première consistera à redémarrer la machine en espérant que votre et/ou vous n'avez pas configurer pour que le bannissement reste actif. | ||
| + | |||
| + | La seconde, pouvoir se connecter en SSH avec une IP différente de la votre (3G/4G, un copain etc... Les possibilités ne manquent pas !) | ||
| + | |||
| + | iptables -t filter -D fail2ban-ssh 1 | ||
| + | |||
| + | Vous devriez pouvoir vous connectez à votre machine ! | ||
| + | |||
| + | |||
| + | ==<font color="blue">Ban permanent avec Fail2Ban</font>== | ||
| + | |||
| + | Vous avez deux possibilités de bannir de façon permanente : | ||
| + | |||
| + | * dans '''/etc/fail2ban/jail.conf''', définissez la valeur de '''bantime''' à '''-1'''. | ||
| + | * utiliser une configuration qui bannira définitivement les personnes mal intentionnés. | ||
| + | |||
| + | On créer le fichier ''' /etc/fail2ban/action.d/iptables-repeater.conf''' : | ||
| + | |||
| + | <code>nano -w /etc/fail2ban/action.d/iptables-repeater.conf</code> | ||
| + | |||
| + | # Fail2ban configuration file | ||
| + | # | ||
| + | # Author: Phil Hagen <phil@identityvector.com> | ||
| + | # | ||
| + | [Definition] | ||
| + | # Option: actionstart | ||
| + | # Notes.: command executed once at the start of Fail2Ban. | ||
| + | # Values: CMD | ||
| + | # | ||
| + | actionstart = iptables -N fail2ban-REPEAT-<name> | ||
| + | iptables -A fail2ban-REPEAT-<name> -j RETURN | ||
| + | iptables -I INPUT -j fail2ban-REPEAT-<name> | ||
| + | # set up from the static file | ||
| + | cat /etc/fail2ban/ip.blocklist.<name> |grep -v ^\s*#|awk '{print $1}' | while read IP; do iptables -I fail2ban-REPEAT-<name> 1 -s $IP -j DROP; done | ||
| + | # Option: actionstop | ||
| + | # Notes.: command executed once at the end of Fail2Ban | ||
| + | # Values: CMD | ||
| + | # | ||
| + | actionstop = iptables -D INPUT -j fail2ban-REPEAT-<name> | ||
| + | iptables -F fail2ban-REPEAT-<name> | ||
| + | iptables -X fail2ban-REPEAT-<name> | ||
| + | |||
| + | # Option: actioncheck | ||
| + | # Notes.: command executed once before each actionban command | ||
| + | # Values: CMD | ||
| + | # | ||
| + | actioncheck = iptables -n -L INPUT | grep -q fail2ban-REPEAT-<name> | ||
| + | # Option: actionban | ||
| + | # Notes.: command executed when banning an IP. Take care that the | ||
| + | # command is executed with Fail2Ban user rights. | ||
| + | # Tags: <ip> IP address | ||
| + | # <failures> number of failures | ||
| + | # <time> unix timestamp of the ban time | ||
| + | # Values: CMD | ||
| + | # | ||
| + | actionban = iptables -I fail2ban-REPEAT-<name> 1 -s <ip> -j DROP | ||
| + | # also put into the static file to re-populate after a restart | ||
| + | ! grep -Fq <ip> /etc/fail2ban/ip.blocklist.<name> && echo "<ip> # fail2ban/$( date '+%%Y-%%m-%%d %%T' ): auto-add for repeat offender" >> /etc/fail2ban/ip.blocklist.<name> | ||
| + | # Option: actionunban | ||
| + | # Notes.: command executed when unbanning an IP. Take care that the | ||
| + | # command is executed with Fail2Ban user rights. | ||
| + | # Tags: <ip> IP address | ||
| + | # <failures> number of failures | ||
| + | # <time> unix timestamp of the ban time | ||
| + | # Values: CMD | ||
| + | # | ||
| + | actionunban = /bin/true | ||
| + | [Init] | ||
| + | # Defaut name of the chain | ||
| + | # | ||
| + | name = REPEAT | ||
| + | |||
| + | '''NOTE''' : Pensez à modifier '''root''' par votre adresse mail si vous recevez es notifications par mail. | ||
| + | |||
| + | On déclare notre nouvelle configuration dans '''/etc/fail2ban/jail.conf''', copier/coller ceci : | ||
| + | [ssh-repeater] | ||
| + | enabled = true | ||
| + | filter = sshd | ||
| + | action = iptables-repeater[name=ssh] | ||
| + | sendmail-whois[name=SSH-repeater, dest=root, sender=root] | ||
| + | logpath = /var/log/secure | ||
| + | maxretry = 21 | ||
| + | findtime = 31536000 | ||
| + | bantime = 31536000 | ||
| + | |||
| + | Redémarrer fail2ban puis vous pourrez appercevoir les IP bannies dans le fichier '''/etc/fail2ban/ip.blocklist.ssh'''. | ||
| + | |||
| + | |||
| + | [http://stuffphilwrites.com/2013/03/permanently-ban-repeat-offenders-fail2ban/ Source] | ||
| + | |||
| + | |||
| + | ==<font color="blue">Interface Web pour Fail2Ban</font>== | ||
| + | |||
| + | |||
| + | |||
| + | =<font color="blue">Logwatch</font>= | ||
| + | ==<font color="blue">Installation Logwatch</font>== | ||
| + | |||
| + | |||
| + | =<font color="blue">Portsentry</font>= | ||
| + | ==<font color="blue">Installation Portsentry</font>== | ||
| + | |||
| + | =<font color="blue">Port Knocking</font>= | ||
| + | ==<font color="blue">Installation Port Knocking</font>== | ||
| + | |||
| + | |||
| + | =<font color="blue">RKHunter</font>= | ||
| + | ==<font color="blue">Installation RKHunter</font>== | ||
Version du 2 février 2015 à 15:19
Sommaire
Introduction
C'est le casse tête principale des administrateurs ayant un serveur dédié, comment se protéger au mieux !
Nous allons vous montrer comment se protéger au mieux dans ce tutoriel.
Voici une liste des logiciels qui seront installés et configuré :
- Fail2Ban,
- Fail2Web,
- Logwatch,
- Portsentry,
- Port Knocking,
- RKHunter
Fail2Ban
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 (réglé à -1, le ban sera de façon permanent) 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>
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.
Débannir une IP avec Fail2Ban
Avant tout, vous devez vous assurez de l'adresse IP à débannir, faites :
iptables -t filter -L -n
Si toutefois, le résultat de la commande s'avère être trop longue dans le terminal, pensez à rediriger le résultat dans un fichier temp.
iptables -t filter -L -n > ipadeban.txt
La commande suivante permet de débannir une adresse IP cependant il faut respecter la syntaxe :
iptables -t filter -D NomChaine IDChaine
Sachez que la première IP présente aura pour ID = 1 puis incrémenter la valeur de 1 pour chaque adresse IP.
Exemple :
Pour effectuer un test, demander soit à un copain et assurez de pouvoir vous débannir
Pour ce tutoriel, je me suis fait bannir mon adresse IP pour que vous voyez comment ça se présentera :
iptables -t filter -L -n Chain INPUT (policy ACCEPT) target prot opt source destination fail2ban-ssh tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 22 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain fail2ban-ssh (1 references) target prot opt source destination DROP all -- MON_IP.rev.sfr.fr anywhere RETURN all -- anywhere anywhere
L'adresse IP sera inversé, si votre IP est 152.12.241.265, la ligne sera : DROP all -- 265.241.12.152.rev.sfr.fr anywhere, ceci n'est qu'un exemple, l'adresse IP utilisée a été écrite au hasard !
Il s'offre à vous deux méthodes pour révoquer le bannissement, la première consistera à redémarrer la machine en espérant que votre et/ou vous n'avez pas configurer pour que le bannissement reste actif.
La seconde, pouvoir se connecter en SSH avec une IP différente de la votre (3G/4G, un copain etc... Les possibilités ne manquent pas !)
iptables -t filter -D fail2ban-ssh 1
Vous devriez pouvoir vous connectez à votre machine !
Ban permanent avec Fail2Ban
Vous avez deux possibilités de bannir de façon permanente :
- dans /etc/fail2ban/jail.conf, définissez la valeur de bantime à -1.
- utiliser une configuration qui bannira définitivement les personnes mal intentionnés.
On créer le fichier /etc/fail2ban/action.d/iptables-repeater.conf :
nano -w /etc/fail2ban/action.d/iptables-repeater.conf
# Fail2ban configuration file
#
# Author: Phil Hagen <phil@identityvector.com>
#
[Definition]
# Option: actionstart
# Notes.: command executed once at the start of Fail2Ban.
# Values: CMD
#
actionstart = iptables -N fail2ban-REPEAT-<name>
iptables -A fail2ban-REPEAT-<name> -j RETURN
iptables -I INPUT -j fail2ban-REPEAT-<name>
# set up from the static file
cat /etc/fail2ban/ip.blocklist.<name> |grep -v ^\s*#|awk '{print $1}' | while read IP; do iptables -I fail2ban-REPEAT-<name> 1 -s $IP -j DROP; done
# Option: actionstop
# Notes.: command executed once at the end of Fail2Ban
# Values: CMD
#
actionstop = iptables -D INPUT -j fail2ban-REPEAT-<name>
iptables -F fail2ban-REPEAT-<name>
iptables -X fail2ban-REPEAT-<name>
# Option: actioncheck # Notes.: command executed once before each actionban command # Values: CMD # actioncheck = iptables -n -L INPUT | grep -q fail2ban-REPEAT-<name> # Option: actionban # Notes.: command executed when banning an IP. Take care that the # command is executed with Fail2Ban user rights. # Tags: <ip> IP address # <failures> number of failures #
NOTE : Pensez à modifier root par votre adresse mail si vous recevez es notifications par mail.
On déclare notre nouvelle configuration dans /etc/fail2ban/jail.conf, copier/coller ceci :
[ssh-repeater]
enabled = true
filter = sshd
action = iptables-repeater[name=ssh]
sendmail-whois[name=SSH-repeater, dest=root, sender=root]
logpath = /var/log/secure
maxretry = 21
findtime = 31536000
bantime = 31536000
Redémarrer fail2ban puis vous pourrez appercevoir les IP bannies dans le fichier /etc/fail2ban/ip.blocklist.ssh.
Interface Web pour Fail2Ban
Logwatch
Installation Logwatch
Portsentry
Installation Portsentry
Port Knocking
Installation Port Knocking
RKHunter
==Installation RKHunter==