Maison >Tutoriel système >Linux >Comment utiliser Fail2Ban pour protéger votre serveur contre les attaques par force brute
Une tâche importante des administrateurs Linux est de protéger le serveur contre les attaques ou les accès illégaux. Par défaut, les systèmes Linux sont livrés avec des pare-feu bien configurés, tels que iptables, Uncomplicated Firewall (UFW), ConfigServer Security Firewall (CSF), etc., qui peuvent empêcher diverses attaques.
Toute machine connectée à Internet est une cible potentielle d'attaques malveillantes. Il existe un outil appelé Fail2Ban qui peut être utilisé pour atténuer les accès non autorisés sur le serveur.
Fail2Ban[1] est un logiciel de prévention des intrusions qui protège les serveurs des attaques par force brute. Il est écrit en langage de programmation Python. Fail2Ban fonctionne sur la base des fichiers journaux d'authentification, par défaut, il analysera tous les fichiers journaux d'authentification, tels que /var/log/auth.log, /var/log/apache/access.log, etc., et interdira les logiciels malveillants. signale l'IP, comme un trop grand nombre de mots de passe échoués, à la recherche de vulnérabilités et d'autres signes.
Habituellement, Fail2Ban est utilisé pour mettre à jour les règles de pare-feu qui refusent les adresses IP pendant une période de temps spécifiée. Il envoie également des notifications par courrier électronique. Fail2Ban fournit de nombreux filtres pour divers services tels que ssh, apache, nginx, squid, approved, mysql, nagios, etc.
Fail2Ban peut réduire la vitesse des tentatives d'authentification incorrectes, mais il ne peut pas éliminer le risque d'une authentification faible. Ce n'est qu'une des mesures de sécurité utilisées par le serveur pour empêcher les attaques par force brute.
Fail2Ban est déjà fourni avec la plupart des distributions Linux, utilisez donc simplement le gestionnaire de packages de votre distribution pour l'installer.
Pour Debian/Ubuntu, utilisez la commande APT-GET [2] ou la commande APT [3] pour installer.
$ sudo apt install fail2ban
Pour Fedora, utilisez la commande DNF[4]pour installer.
$ sudo dnf install fail2ban
Pour CentOS/RHEL, activez la bibliothèque EPEL [5] ou la bibliothèque RPMForge [6] et installez-la à l'aide de la commande YUM [7].
$ sudo yum install fail2ban
Pour Arch Linux, utilisez la commande Pacman[8]pour installer.
$ sudo pacman -S fail2ban
Pour openSUSE, utilisez la commande Zypper[9]pour installer.
$ sudo zypper in fail2ban
默认情况下,Fail2Ban 将所有配置文件保存在 /etc/fail2ban/ 目录中。 主配置文件是 jail.conf,它包含一组预定义的过滤器。 所以,不要编辑该文件,这是不可取的,因为只要有新的更新,配置就会重置为默认值。
只需在同一目录下创建一个名为 jail.local 的新配置文件,并根据您的意愿进行修改。
# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
默认情况下,大多数选项都已经配置的很完美了,如果要启用对任何特定 IP 的访问,则可以将 IP 地址添加到 ignoreip 区域,对于多个 IP 的情况,用空格隔开 IP 地址。
配置文件中的 DEFAULT 部分包含 Fail2Ban 遵循的基本规则集,您可以根据自己的意愿调整任何参数。
# nano /etc/fail2ban/jail.local [DEFAULT] ignoreip = 127.0.0.1/8 192.168.1.100/24 bantime = 600 findtime = 600 maxretry = 3 destemail = 2daygeek@gmail.com
Fail2Ban 带有一组预定义的过滤器,用于各种服务,如 ssh、apache、nginx、squid、named、mysql、nagios 等。 我们不希望对配置文件进行任何更改,只需在服务区域中添加 enabled = true 这一行就可以启用任何服务。 禁用服务时将 true 改为 false 即可。
# SSH servers [sshd] enabled = true port = ssh logpath = %(sshd_log)s backend = %(sshd_backend)s
进行更改后,重新启动 Fail2Ban 才能生效。
[For SysVinit Systems] # service fail2ban restart [For systemd Systems] # systemctl restart fail2ban.service
你可以使用下面的命令来确认是否在防火墙中成功添加了Fail2Ban iptables 规则。
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination f2b-apache-auth tcp -- anywhere anywhere multiport dports http,https f2b-sshd tcp -- anywhere anywhere multiport dports 1234 ACCEPT tcp -- anywhere anywhere tcp dpt:1234 Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain f2b-apache-auth (1 references) target prot opt source destination RETURN all -- anywhere anywhere Chain f2b-sshd (1 references) target prot opt source destination RETURN all -- anywhere anywhere
我做了一些失败的尝试来测试这个。 为了证实这一点,我要验证 /var/log/fail2ban.log 文件。
2017-11-05 14:43:22,901 fail2ban.server [7141]: INFO Changed logging target to /var/log/fail2ban.log for Fail2ban v0.9.6 2017-11-05 14:43:22,987 fail2ban.database [7141]: INFO Connected to fail2ban persistent database '/var/lib/fail2ban/fail2ban.sqlite3' 2017-11-05 14:43:22,996 fail2ban.database [7141]: WARNING New database created. Version '2' 2017-11-05 14:43:22,998 fail2ban.jail [7141]: INFO Creating new jail 'sshd' 2017-11-05 14:43:23,002 fail2ban.jail [7141]: INFO Jail 'sshd' uses poller {} 2017-11-05 14:43:23,019 fail2ban.jail [7141]: INFO Initiated 'polling' backend 2017-11-05 14:43:23,019 fail2ban.filter [7141]: INFO Set maxRetry = 5 2017-11-05 14:43:23,020 fail2ban.filter [7141]: INFO Set jail log file encoding to UTF-8 2017-11-05 14:43:23,020 fail2ban.filter [7141]: INFO Added logfile = /var/log/auth.log 2017-11-05 14:43:23,021 fail2ban.actions [7141]: INFO Set banTime = 600 2017-11-05 14:43:23,021 fail2ban.filter [7141]: INFO Set findtime = 600 2017-11-05 14:43:23,022 fail2ban.filter [7141]: INFO Set maxlines = 10 2017-11-05 14:43:23,070 fail2ban.server [7141]: INFO Jail sshd is not a JournalFilter instance 2017-11-05 14:43:23,081 fail2ban.jail [7141]: INFO Jail 'sshd' started 2017-11-05 14:43:23,763 fail2ban.filter [7141]: INFO [sshd] Found 103.5.134.167 2017-11-05 14:43:23,763 fail2ban.filter [7141]: INFO [sshd] Found 103.5.134.167 2017-11-05 14:43:23,764 fail2ban.filter [7141]: INFO [sshd] Found 181.129.54.170 2017-11-05 14:43:23,764 fail2ban.filter [7141]: INFO [sshd] Found 181.129.54.170 2017-11-05 14:43:23,765 fail2ban.filter [7141]: INFO [sshd] Found 181.129.54.170 2017-11-05 14:43:23,765 fail2ban.filter [7141]: INFO [sshd] Found 181.129.54.170 2017-11-05 15:19:06,192 fail2ban.server [7141]: INFO Stopping all jails 2017-11-05 15:19:06,874 fail2ban.jail [7141]: INFO Jail 'sshd' stopped 2017-11-05 15:19:06,879 fail2ban.server [7141]: INFO Exiting Fail2ban 2017-11-05 15:19:07,123 fail2ban.server [8528]: INFO Changed logging target to /var/log/fail2ban.log for Fail2ban v0.9.6 2017-11-05 15:19:07,123 fail2ban.database [8528]: INFO Connected to fail2ban persistent database '/var/lib/fail2ban/fail2ban.sqlite3' 2017-11-05 15:19:07,126 fail2ban.jail [8528]: INFO Creating new jail 'sshd' 2017-11-05 15:19:07,129 fail2ban.jail [8528]: INFO Jail 'sshd' uses poller {} 2017-11-05 15:19:07,141 fail2ban.jail [8528]: INFO Initiated 'polling' backend 2017-11-05 15:19:07,142 fail2ban.actions [8528]: INFO Set banTime = 60 2017-11-05 15:19:07,142 fail2ban.filter [8528]: INFO Set findtime = 60 2017-11-05 15:19:07,142 fail2ban.filter [8528]: INFO Set jail log file encoding to UTF-8 2017-11-05 15:19:07,143 fail2ban.filter [8528]: INFO Set maxRetry = 3 2017-11-05 15:19:07,144 fail2ban.filter [8528]: INFO Added logfile = /var/log/auth.log 2017-11-05 15:19:07,144 fail2ban.filter [8528]: INFO Set maxlines = 10 2017-11-05 15:19:07,189 fail2ban.server [8528]: INFO Jail sshd is not a JournalFilter instance 2017-11-05 15:19:07,195 fail2ban.jail [8528]: INFO Jail 'sshd' started 2017-11-05 15:20:03,263 fail2ban.filter [8528]: INFO [sshd] Found 103.5.134.167 2017-11-05 15:20:05,267 fail2ban.filter [8528]: INFO [sshd] Found 103.5.134.167 2017-11-05 15:20:12,276 fail2ban.filter [8528]: INFO [sshd] Found 103.5.134.167 2017-11-05 15:20:12,380 fail2ban.actions [8528]: NOTICE [sshd] Ban 103.5.134.167 2017-11-05 15:21:12,659 fail2ban.actions [8528]: NOTICE [sshd] Unban 103.5.134.167
要查看启用的监狱列表,请运行以下命令。
# fail2ban-client status Status |- Number of jail: 2 `- Jail list: apache-auth, sshd
通过运行以下命令来获取禁止的 IP 地址。
# fail2ban-client status ssh Status for the jail: ssh |- filter | |- File list: /var/log/auth.log | |- Currently failed: 1 | `- Total failed: 3 `- action |- Currently banned: 1 | `- IP list: 192.168.1.115 `- Total banned: 1
要从 Fail2Ban 中删除禁止的 IP 地址,请运行以下命令。
# fail2ban-client set ssh unbanip 192.168.1.115
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!