在服务器里的日志里,经常可以发现有很多未经授权却在不停的尝试登录我们服务的记录,比如ssh,postfix,vsftpd。
以前,我自己写个脚本,自动分析这些日志,把对应的暴力破解的IP加入到防火墙里进行管理,经常改来改去很是麻烦,直到我发现了一个叫Fail2ban的软件。
[root@mytest ~]# yum install epel-release [root@mytest ~]# yum -y --enablerepo=epel install fail2ban
接下来就是设置了,主要配置在/etc/fail2ban/jail.conf里,但是一般不要修改这个文件,因为一旦更新,就给你覆盖了,推荐的方法是新建一个文件/etc/fail2ban/jail.local,把自己需要的配置参数和要监控的服务写到这个文件里,下面是一些主要配置参数:
[root@mytest ~]# vim /etc/fail2ban/jail.local #共通配置段 [DEFAULT] #白名单 ignoreip = 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 #ban的时间长度(秒) bantime = 3600 #判定时间(秒) findtime = 300 #最大失败次数 maxretry = 3 #上面三个参数结合起来就是,5分钟内3次登陆失败的IP禁止登陆1小时。 #对于再犯者的处理,也就是说已经ban了它一次了,如果解封后,还继续尝试登录的话: [recidive] #日志地址,fail2ban要从这个文件的记录来查询是不是再犯 logpath = /var/log/fail2ban.log #禁止的行为 banaction = %(banaction_allports)s #ban的时间长度(秒) bantime = 604800 #判定时间(秒) findtime = 86400 #上面三个参数结合起来就是,在1天之内有再犯的IP就禁止登陆任何端口1周。 #邮件通知设定 #警告通知邮件发给谁 比如系统管理员的邮箱 destemail = admin@example.com #发信者 sender = fail2ban@example.com #下面就是要监控的服务,比如sshd,postfix,vsftpd等等,这些常见的服务配置在/etc/fail2ban/jail.conf #里有,你服务器配置了这个服务并且需要监控的话,直接复制过来加上enabled = true即可, #如果没有你需要的服务,你也可以参照相同的方式添加你要监控的服务。 #需要注意的是,下面这些服务配置里的logpath参数,这个参数定义了服务的日志路径, #因为fail2ban是从日志的记录来进行操作的,所以如果你的服务日志不是系统默认路径, #那就需要在这里修改成你自定义或者修改后的日志文件地址,否则会启动失败。 [sshd] enabled = true port = ssh logpath = %(sshd_log)s backend = %(sshd_backend)s [postfix] enabled = true port = smtp,465,submission logpath = %(postfix_log)s backend = %(postfix_backend)s [postfix-sasl] enabled = true port = smtp,465,submission,imap3,imaps,pop3,pop3s logpath = %(postfix_log)s backend = %(postfix_backend)s [vsftpd] enabled = true port = ftp,ftp-data,ftps,ftps-data logpath = %(vsftpd_log)s
保存退出,现在我们启动fail2ban,并把它设置成开机自启动。
[root@mytest ~]# systemctl start fail2ban [root@mytest ~]# systemctl enable fail2ban Created symlink from /etc/systemd/system/multi-user.target.wants/fail2ban.service to /usr/lib/systemd/system/fail2ban.service.
现在我们来确认一下我们监控的服务,比如sshd
[root@mytest ~]# 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:
如果需要即时解封被ban的某个ip,比如解封”IP地址1.1.1.1被禁用sshd服务的,使用如下命令即可:
[root@mytest ~]# fail2ban-client set sshd unbanip 1.1.1.1