ban在英文中是禁止的意思,而“非ban即选”是王者荣耀中选英雄的用的术语,表示很重要的意思。Fail2ban 是一款保护Linux服务器免受攻击的软件,字面意思Fail to ban 是失败则禁止的意思,工作原理是监控日志,如果日志中太多失败尝试则禁止相应IP访问服务器。
Fail2ban 是基于python开发的,github 项目地址为:
https://github.com/fail2ban/fail2ban
Fail2ban是通过监控日志发现攻击者IP然后调用 iptables 添加拒绝策略对攻击者IP进行封堵。
大部分Linux发行版都带了Fail2ban,我们只需要安装并启动服务即可启用Fail2ban。
Ubuntu下安装:
sudo apt-get update && apt install -y fail2ban
CentOS下安装:
sudo yum install -y epel-release && yum install -y fail2ban
启动服务:
sudo systemctl enable fail2bansudo systemctl stop fail2bansudo systemctl start fail2ban
使用默认配置即可对大部分系统日志进行监控,我们可以尝试使用错误密码连接服务器看fail2ban是如何工作的。
当使用 ssh 使用错误密码多次连接服务器,在/var/log/auth.log 中会有连接失败记录
$ grep Failed /var/log/auth.logsshd[181134]: Failed password for root from 192.168.10.200 port 51959 ssh2sshd[181279]: Failed password for root from 192.168.10.200 port 51960 ssh2sshd[181279]: Failed password for root from 192.168.10.200 port 51960 ssh2
此时 fail2ban 监控到多次失败,于是对来访IP实行禁止
$ tail -f var/log/fail2ban.logINFO Log rotation detected for var/log/auth.logINFO [sshd] Found 192.168.10.200INFO [sshd] Found 192.168.10.200INFO [sshd] Found 192.168.10.200INFO [sshd] Found 192.168.10.200INFO [sshd] Found 192.168.10.200NOTICE [sshd] Ban 192.168.10.200
从日志中可以看到 fail2ban 对攻击者IP实行了禁止动作,在 iptables 中可以看到相应的规则:
$ iptables -nLChain INPUT (policy ACCEPT)target prot opt source destinationf2b-sshd tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 22Chain f2b-sshd (1 references)target prot opt source destinationREJECT all -- 192.168.10.200 0.0.0.0/0 reject-with icmp-port-unreachableRETURN all -- 0.0.0.0/0 0.0.0.0/0
fail2ban 实际执行的动作为:
iptables -N f2b-sshdiptables -I INPUT -p tcp -m multiport --dports 22 -j f2b-sshdiptables -A f2b-sshd -j RETURNiptables -I f2b-sshd -s 192.168.10.200/32 -j REJECT --reject-with icmp-port-unreachable
我们可以模拟执行上述规则,如果需要删除测试的链,执行命令为:
iptables -F f2b-sshdiptables -D INPUT 1iptables -X f2b-sshd
当超过监控时长攻击者没有再发现攻击,此时 fail2ban 会在 iptables 中取消禁止。
$ tail -f var/log/fail2ban.logNOTICE [sshd] Unban 192.168.10.200
fail2ban 监控的日志文件为:
$ cat /etc/fail2ban/paths-debian.conf[DEFAULT]syslog_mail = /var/log/mail.logsyslog_mail_warn = /var/log/mail.warnsyslog_authpriv = /var/log/auth.logsyslog_user = /var/log/user.logsyslog_ftp = /var/log/syslogsyslog_daemon = /var/log/daemon.logsyslog_local0 = /var/log/messagesapache_error_log = /var/log/apache2/*error.logapache_access_log = /var/log/apache2/*access.logexim_main_log = /var/log/exim4/mainlogproftpd_log = var/log/proftpd/proftpd.log
如果需要人工检查入侵痕迹,这些日志目录也是检查项之一。
全文完。
如果转发本文,文末务必注明:“转自微信公众号:生有可恋”。
文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




