Fail2Ban

Fail2ban est un logiciel génial, qui permet de sécuriser un peu plus votre serveur.

Comment ?

Il lit les logs de certains service et bannit les IP qui ont obtenu le plus grand nombre d’échec !

Avec la mutliplication des services comme le login pour administrer votre serveur web, postfix etc…. vous êtes exposé à des risques.

Pour bannir automatique des  IP dans un temps donné, c’est Fail2Ban qu’il vous faut !

 

# dnf install fail2ban

 

Dans Fail2ban, il y un fichier de conf et des filtres. Les filtres par défaut suffisent, néanmoins vous pouvez en créer pour certains services.

 

CONFIGURATION

 

 

Éditez le fichier de conf de Fail2ban.

 

# nano /etc/fail2ban/jail.conf
# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
# $Revision: 747 $
#

# The DEFAULT allows a global definition of the options. They can be override
# in each jail afterwards.

[DEFAULT]

# « ignoreip » can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1 192.168.0.240/28

# « bantime » is the number of seconds that a host is banned.
bantime = 600

# A host is banned if it has generated « maxretry » during the last « findtime »
# seconds.
findtime = 600

# « maxretry » is the number of failures before a host get banned.
maxretry = 3

# « backend » specifies the backend used to get files modification. Available
# options are « gamin », « polling » and « auto ». This option can be overridden in
# each jail too (use « gamin » for a jail and « polling » for another).
#
# gamin: requires Gamin (a file alteration monitor) to be installed. If Gamin
# is not installed, Fail2ban will use polling.
# polling: uses a polling algorithm which does not require external libraries.
# auto: will choose Gamin if available and polling otherwise.
backend = auto

# This jail corresponds to the standard configuration in Fail2ban 0.6.

# The mail-whois action send a notification e-mail with a whois request
# in the body.

[ssh-iptables]

enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=root, sender=fail2ban@mail.com]
logpath = /var/log/secure
maxretry = 5

[dovecot-iptables]

enabled = true
filter = dovecot-pop3imap
action = iptables-multiport[name=dovecot-pop3imap, port= »pop3,pop3s,imap,imaps », protocol=tcp]
sendmail-whois[name=DOVECOT, dest=root, sender=fail2ban@mail.com]
logpath = /var/log/secure
maxretry = 5

[proftpd-iptables]

enabled = false
filter = proftpd
action = iptables[name=ProFTPD, port=ftp, protocol=tcp]
sendmail-whois[name=ProFTPD, dest=you@mail.com]
logpath = /var/log/proftpd/proftpd.log
maxretry = 6

# This jail forces the backend to « polling ».

[sasl-iptables]

enabled = false
filter = sasl
backend = polling
action = iptables[name=dovecot, port=pop, protocol=tcp]

sendmail-whois[name=dovecot, dest=root@samn0.fr]
logpath = /var/log/maillog

# Here we use TCP-Wrappers instead of Netfilter/Iptables. « ignoreregex » is
# used to avoid banning the user « myuser ».

[ssh-tcpwrapper]

enabled = false
filter = sshd
action = hostsdeny
sendmail-whois[name=SSH, dest=you@mail.com]
ignoreregex = for myuser from
logpath = /var/log/sshd.log

# This jail demonstrates the use of wildcards in « logpath ».
# Moreover, it is possible to give other files on a new line.

[apache-tcpwrapper]

enabled = false
filter = apache-auth
action = hostsdeny
logpath = /var/log/apache*/*error.log
/home/www/myhomepage/error.log
maxretry = 6

# The hosts.deny path can be defined with the « file » argument if it is
# not in /etc.

[postfix-tcpwrapper]

enabled = false
filter = postfix
action = hostsdeny[file=/not/a/standard/path/hosts.deny]
sendmail[name=Postfix, dest=you@mail.com]
logpath = /var/log/postfix.log
bantime = 300

# Do not ban anybody. Just report information about the remote host.
# A notification is sent at most every 600 seconds (bantime).

[vsftpd-notification]

enabled = false
filter = vsftpd
action = sendmail-whois[name=VSFTPD, dest=root@samn0.fr]
logpath = /var/log/vsftpd.log
maxretry = 5
bantime = 1800

# Same as above but with banning the IP address.

[vsftpd-iptables]

enabled = true
filter = vsftpd
action = iptables[name=VSFTPD, port=ftp, protocol=tcp]
sendmail-whois[name=VSFTPD, dest=root@samn0.fr]
logpath = /var/log/vsftpd.log
maxretry = 5
bantime = 1800

# Ban hosts which agent identifies spammer robots crawling the web
# for email addresses. The mail outputs are buffered.

[apache-badbots]

enabled = false
filter = apache-badbots
action = iptables-multiport[name=BadBots, port= »http,https »]
sendmail-buffered[name=BadBots, lines=5, dest=you@mail.com]
logpath = /var/www/*/logs/access_log
bantime = 172800
maxretry = 1

# Use shorewall instead of iptables.

[apache-shorewall]

enabled = false
filter = apache-noscript
action = shorewall
sendmail[name=Postfix, dest=you@mail.com]
logpath = /var/log/apache2/error_log

# Ban attackers that try to use PHP’s URL-fopen() functionality
# through GET/POST variables. – Experimental, with more than a year
# of usage in production environments.

[php-url-fopen]

enabled = false
port = http,https
filter = php-url-fopen
logpath = /var/www/*/logs/access_log
maxretry = 1

# A simple PHP-fastcgi jail which works with lighttpd.
# If you run a lighttpd server, then you probably will
# find these kinds of messages in your error_log:
# ALERT â tried to register forbidden variable âGLOBALSâ
# through GET variables (attacker ‘1.2.3.4’, file ‘/var/www/default/htdocs/index.php’)
# This jail would block the IP 1.2.3.4.

[lighttpd-fastcgi]

enabled = false
port = http,https
filter = lighttpd-fastcgi
# adapt the following two items as needed
logpath = /var/log/lighttpd/error.log
maxretry = 2

# This jail uses ipfw, the standard firewall on FreeBSD. The « ignoreip »
# option is overridden in this jail. Moreover, the action « mail-whois » defines
# the variable « name » which contains a comma using «  ». The characters  » are
# valid too.

[ssh-ipfw]

enabled = false
filter = sshd
action = ipfw[localhost=192.168.0.1]
sendmail-whois[name= »SSH,IPFW », dest=you@mail.com]
logpath = /var/log/auth.log
ignoreip = 168.192.0.1

# These jails block attacks against named (bind9). By default, logging is off
# with bind9 installation. You will need something like this:
#
# logging {
# channel security_file {
# file « /var/log/named/security.log » versions 3 size 30m;
# severity dynamic;
# print-time yes;
# };
# category security {
# security_file;
# };
# };
#
# in your named.conf to provide proper logging.
# This jail blocks UDP traffic for DNS requests.

[named-refused-udp]

enabled = false
filter = named-refused
action = iptables-multiport[name=Named, port= »domain,953″, protocol=udp]
sendmail-whois[name=Named, dest=you@mail.com]
logpath = /var/log/named/security.log

ignoreip = 168.192.0.1

# This jail blocks TCP traffic for DNS requests.

[named-refused-tcp]

enabled = false
filter = named-refused
action = iptables-multiport[name=Named, port= »domain,953″, protocol=tcp]
sendmail-whois[name=Named, dest=you@mail.com]
logpath = /var/log/named/security.log
ignoreip = 168.192.0.1

 

Pour commencer, ignorer les IP pour lesquelles ces règle ne s’applique pas. Localhost et votre réseau locale par exemple.

 

#ignoreip = 127.0.0.1 192.168.0.240/28

 

Une Jail se décompose ainsi :

  • [LE NOM DE LA REGLE]
  • enabled ou disabled
  • port (sur lequel le service repose)
  • filter (le nom du filtre Fail2ban)
  • logpath (le chemin du log afin que Fail2ban l’analyse)
  • maxretry (le nombre de fois où une IP peut recommencer

 

Nous allons donc créer une règle manuellement par exemple WordPress afin de bannir toutes les IP désireuses de se connecter à ma page d’administration.

Règle WORDPRESS

 

 

WordPress est géré par Apache, donc les logs de connexions c’est Apache qui les fournit.

Par conséquent, éditez le fichier /etc/fail2ban/jail.conf et ajoutez y ces éléments :

 

 

[wordpress]
enabled = true
port = http,https
filter = wordpress
logpath = /var/log/httpd/www.samn0.fr-ssl-access.log
maxretry = 3

 

On passe donc au filtre WordPress

Filtre WORDPRESS

 

 

# nano /etc/fail2ban/filter.d/wordress.conf
#[Definition]
failregex = ^<HOST> -.*POST /wp-login.php HTTP.*
ignoreregex =

 

 

En fait dans le filtre, nous mettons les mots clés issus des fichiers de log.

  • <HOST> : Adresse IP du visiteur
  • /wp-login.php : Page de connexion de WordPress

C’est tout ce que nous avons à éditer.

 

Nous allons démarrer le service Fail2ban.

 

# systemctl start fail2ban

 

 

Pour vérifier que Fail2ban fonctionne bien, nous allons taper cette commande :

 

#fail2ban-client status wordpress
Status for the jail: wordpress
|- Filter
| |- Currently failed: 0
| |- Total failed: 843
| `- File list: /var/log/httpd/www.samn0.fr-ssl-access.log
`- Actions
|- Currently banned: 0
|- Total banned: 146
`- Banned IP list:

 

Je crois que cela parle de lui même, de l’importance que Fail2ban occupe sur votre serveur !

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.