fail2ban
关于fail2ban¶
Fail2ban 可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是调用防火墙屏蔽) 如:当有人在试探你的 HTTP、SSH、SMTP、FTP 密码,只要达到预设的次数,fail2ban 就会调用防火墙屏蔽这个 IP,而且可以发送 e-mail 通知系统管理员。
Fail2ban 由 python 语言开发,基于 logwatch、gamin、iptables、tcp-wrapper、shorewall 等。发送邮件需要安装 postfix 或 sendmail。
Fail2Ban具有开箱即用的特性,标准配置附带了Apache、Lighttpd、sshd、vsftpd、qmail、Postfix和Courier邮件服务器的过滤器。过滤器是由Python正则表达式定义的,熟悉正则表达式的开发人员可以方便地对其进行定制。一个过滤器和一个动作的组合被称为“jail”(监狱),是用来阻止恶意访问者对特定网络服务的访问。以及随软件分发的示例,可能会为创建访问日志文件的任何面向网络的过程创建一个“监狱”。考虑到现实的场景中,可能已为本机的防火墙配置了规则。Fail2Ban仅添加和删除其自己的规则-常规的iptables 的规则将保持不变。
- 代码库: https://github.com/fail2ban/fail2ban
下面以centos7为例,安装配置fail2ban,以防止服务器ssh服务被暴力攻击。
安装¶
- yum安装
yum install fail2ban
- 使用rpm包安装
wegt https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/f/fail2ban-0.11.2-3.el7.noarch.rpm wegt https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/f/fail2ban-firewalld-0.11.2-3.el7.noarch.rpm wegt https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/f/fail2ban-sendmail-0.11.2-3.el7.noarch.rpm wegt https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/f/fail2ban-server-0.11.2-3.el7.noarch.rpm rpm -ivh fail2ban-0.11.2-3.el7.noarch.rpm fail2ban-firewalld-0.11.2-3.el7.noarch.rpm fail2ban-sendmail-0.11.2-3.el7.noarch.rpm fail2ban-server-0.11.2-3.el7.noarch.rpm
- 下载源码包安装
# https://github.com/fail2ban tar xvfj fail2ban-1.0.1.tar.bz2 cd fail2ban-1.0.1 sudo python setup.py install
配置¶
Fail2Ban安装包中含有一个名为jail.conf的默认配置文件。 升级Fail2Ban时,该文件将被覆盖。
这里推荐的方法是将jail.conf文件复制到一个名为jail.local的文件中。 我们将定制的的配置更改存入jail.local中。这个文件在升级过程中将保持不变。 Fail2Ban启动时会自动读取这jail.conf与jail.local这两个配置文件。
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
vim /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh,33322
logpath = %(sshd_log)s
backend = %(sshd_backend)s
bantime = 10m
maxretry = 10
ignoreip = 127.0.0.1 192.168.11.0/255.255.255.0
- port 服务,如果不是标注端口,需要加上端口号
- ignoreip 指定不禁止的 IP 地址或主机名列表。
- bantime 指定禁止主机的秒数(即有效禁止持续时间)。
- maxretry 指定禁止主机之前的故障数。
- backend 指定用于修改日志文件的后端。
更多解释见 man jail.conf
启动服务
$ systemctl enable fail2ban
$ systemctl start fail2ban
$ systemctl status fail2ban.service
● fail2ban.service - Fail2Ban Service
Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2022-11-28 11:01:23 CST; 7s ago
Docs: man:fail2ban(1)
Process: 24790 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
Main PID: 24793 (fail2ban-server)
Tasks: 5
CGroup: /system.slice/fail2ban.service
└─24793 /usr/bin/python2 -s /usr/bin/fail2ban-server -xf start
Nov 28 11:01:23 login02 systemd[1]: Starting Fail2Ban Service...
Nov 28 11:01:23 login02 systemd[1]: Started Fail2Ban Service.
Nov 28 11:01:23 login02 fail2ban-server[24793]: Server ready
常用命令及日志¶
fail2ban-client restart
重启发fail2ban服务fail2ban-client reload
修改配置文件后reloadfail2ban-client start sshd
开启jail,如sshd
fail2ban-client stop sshd
停用jail,如sshd
fail2ban-client status
查看fail2ban运行状态及相关jail,可以看到这里有个jailsshd
$ fail2ban-client status Status |- Number of jail: 1 `- Jail list: sshd
fail2ban-client status sshd
查看具体jail的状态,如sshd
$ fail2ban-client status sshd Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 0 | `- Journal matches: _SYSTEMD_UNIT=sshd.service + _COMM=sshd `- Actions |- Currently banned: 0 |- Total banned: 0 `- Banned IP list:
fail2ban-client get sshd banip
查看被封禁的IPfail2ban-client set sshd unbanip 192.168.1.8
手动解禁IPfail2ban-client set sshd banip 192.168.1.8 192.168.1.9
手动封禁IPfail2ban-client unban --all
解禁所有IP使用iptables命令查看被封禁的IP
$ iptables -L -n Chain INPUT (policy ACCEPT) target prot opt source destination f2b-sshd tcp -- 0.0.0.0/0 0.0.0.0/0 multiport dports 22,33322 . . . Chain f2b-sshd (1 references) target prot opt source destination REJECT all -- 192.168.1.8 0.0.0.0/0 reject-with icmp-port-unreachable RETURN all -- 0.0.0.0/0 0.0.0.0/0
fail2ban日志中可以查看登录异常的IP
/var/log/fail2ban.log
$ tail /var/log/fail2ban.log 2022-11-28 11:39:28,276 fail2ban.filter [3439]: INFO [sshd] Found 192.168.1.8 - 2022-11-28 11:39:28 2022-11-28 11:39:33,627 fail2ban.filter [3439]: INFO [sshd] Found 192.168.1.8 - 2022-11-28 11:39:33 2022-11-28 11:39:39,463 fail2ban.filter [3439]: INFO [sshd] Found 192.168.1.8 - 2022-11-28 11:39:39 2022-11-28 11:39:47,015 fail2ban.filter [3439]: INFO [sshd] Found 192.168.1.8 - 2022-11-28 11:39:47 2022-11-28 11:39:52,011 fail2ban.filter [3439]: INFO [sshd] Found 192.168.1.8 - 2022-11-28 11:39:52 2022-11-28 11:39:52,285 fail2ban.actions [3439]: NOTICE [sshd] Ban 192.168.1.8
man fail2ban-client
可查看更多用法
本站总访问量 次