Linux 관리자의 중요한 임무는 불법적인 공격이나 접근으로부터 서버를 보호하는 것입니다. 기본적으로 Linux 시스템에는 iptables, UFW(Uncomplicated Firewall), CSF(ConfigServer Security Firewall) 등과 같이 잘 구성된 방화벽이 함께 제공되어 다양한 공격을 방지할 수 있습니다.
인터넷에 연결된 모든 기계는 악의적인 공격의 잠재적인 대상입니다. 서버에 대한 무단 액세스를 완화하는 데 사용할 수 있는 Fail2Ban이라는 도구가 있습니다.
Fail2Ban[1]은 무차별 공격으로부터 서버를 보호하는 침입 방지 소프트웨어입니다. Python 프로그래밍 언어로 작성되었습니다. Fail2Ban은 인증 로그 파일을 기반으로 작동하며 기본적으로 /var/log/auth.log, /var/log/apache/access.log 등과 같은 모든 인증 로그 파일을 검사하고 악성을 차단합니다. 너무 많은 비밀번호 실패 등 IP에 플래그를 지정하여 취약점 및 기타 징후를 찾습니다.
보통 Fail2Ban은 특정 기간 동안 IP 주소를 거부하는 방화벽 규칙을 업데이트하는 데 사용됩니다. 또한 이메일 알림도 보냅니다. Fail2Ban은 ssh, apache, nginx, squid, names, mysql, nagios 등과 같은 다양한 서비스에 대한 많은 필터를 제공합니다.
Fail2Ban은 허위 인증 시도 속도를 줄일 수 있지만 취약한 인증의 위험을 제거할 수는 없습니다. 이는 서버가 무차별 대입 공격을 방지하기 위해 사용하는 보안 조치 중 하나일 뿐입니다.
Fail2Ban은 이미 대부분의 Linux 배포판에 패키지되어 있으므로 배포판의 패키지 관리자를 사용하여 설치하면 됩니다.
Debian/Ubuntu의 경우 APT-GET 명령 [2] 또는 APT 명령 [3]을 사용하여 설치하세요.
으아악Fedora의 경우 DNF 명령[4]을 사용하여 설치하세요.
으아악CentOS/RHEL의 경우 EPEL 라이브러리 [5] 또는 RPMForge [6] 라이브러리를 활성화하고 YUM 명령 [7]을 사용하여 설치합니다.
으아악Arch Linux의 경우 Pacman 명령[8]을 사용하여 설치하세요.
으아악openSUSE의 경우 Zypper 명령 [9]을 사용하여 설치하세요.
으아악默认情况下,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
위 내용은 Fail2Ban을 사용하여 무차별 대입 공격으로부터 서버를 보호하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!