前言:
fail2ban可以监视你的系统日志,然后匹配日志的错误信息执行相应的屏蔽动作。利用的是fail2ban+Firewalld来防爆破。
安装:
1、检测firewalld防火墙状态:
#查看Firewalld状态 systemctl status firewalld #启动firewalld systemctl start firewalld #设置开机启动 systemctl enable firewalld.service
启用Firewalld后会禁止所有端口连接,因此请务必放行常用的端口,以免被阻挡在外,以下是放行SSH端口(22)示例,供参考:
#放行22端口 firewall-cmd --zone=public --add-port=80/tcp --permanent #重载配置 firewall-cmd --reload #查看已放行端口 firewall-cmd --zone=public --list-ports
2、安装fail2ban:
fail2ban可以监控系统日志,并且根据一定规则匹配异常IP后使用Firewalld将其屏蔽,尤其是针对一些爆破/扫描等非常有效。
#CentOS内置源并未包含fail2ban,需要先安装epel源 yum -y install epel-release #安装fial2ban yum -y install fail2ban-all #设置开机启动 systemctl enable fail2ban.service
安装成功后fail2ban配置文件位于/etc/fail2ban,其中jail.conf为主配置文件,相关的匹配规则位于filter.d目录,其它目录/文件一般很少用到,如果需要详细了解可自行搜索。
一定要安装fail2ban-all ,安装fail2ban会导致无法开启邮件通知的功能.
3、配置规则:
新建jail.local来覆盖fail2ban的一些默认规则:
#新建配置 vi /etc/fail2ban/jail.local #默认配置 [DEFAULT] ignoreip = 127.0.0.1/8 bantime = 86400 findtime = 600 maxretry = 5 #这里banaction必须用firewallcmd-ipset,这是fiewalll支持的关键,如果是用Iptables请不要这样填写 banaction = firewallcmd-ipset action = %(action_mwl)s backend = auto
参数说明:
ignoreip:IP白名单,白名单中的IP不会屏蔽,可填写多个以(,)分隔 bantime:屏蔽时间,单位为秒(s) findtime:时间范围 maxretry:最大次数 banaction:屏蔽IP所使用的方法,上面使用firewalld屏蔽端口 action:采取的行动
4、开启邮件通知:(选择)
不需要安装第三方的邮件工具,直接使用系统自带的mail即可。
配置步骤参考:https://www.gaoyaxuan.net/blog/337.html
然后在jail.local 文件中的[DEFAULT] 标签下添加
action = %(action_mwl)s #收件人地址 destemail = xxxxx@qq.com # 使用哪个发送邮件命令,可以选mail或sendmail mta = mail
action 参数默认只会发送ip,
%(action_mw)s - 将禁止主机并使用whois报告发送邮件。 使用的是: /etc/fail2ban/action.d/mail-whois.conf
%(action_mwl)s - 将禁止主机,提供whois信息以及日志文件中的所有相关信息。使用的是: /etc/fail2ban/action.d/mail-whois-lines.conf
修改IP查询信息,修改 /etc/fail2ban/action.d/mail-whois-common.conf 里面的_whois
[DEFAULT] #original character set of whois output will be sent to mail program _whois = /bin/curl http://ip-api.com/json/<ip>?lang=zh-CN
注意: 谁用https的网站解析IP,curl 一定要加-L 参数,要不然邮件中不会显示IP信息的
防止SSH爆破:
假设你的ssh还是使用的是22端口.
修改jail.local这个配置文件,在后面追加如下内容:
[sshd] enabled = true filter = sshd port = 22 action = %(action_mwl)s logpath = /var/log/secure
参数说明:
[sshd]:名称,可以随便填写 filter:规则名称,必须填写位于filter.d目录里面的规则,sshd是fail2ban内置规则 port:对应的端口 action:采取的行动 logpath:需要监视的日志路径
到这一步,我们jail.local的规则看起来可能像下面这样子:
[DEFAULT] ignoreip = 127.0.0.1/8 bantime = 86400 findtime = 600 maxretry = 5 banaction = firewallcmd-ipset action = %(action_mwl)s backend = auto [sshd] enabled = true filter = sshd port = 22 action = %(action_mwl)s logpath = /var/log/secure
上面的配置意思是如果同一个IP,在10分钟内,如果连续超过5次错误,则使用Firewalld将他IP ban了。输入systemctl start fail2ban启动fail2ban来试试效果。
使用另一台服务器不断尝试连接SSH,并且不断的将密码输入错误,你会发现连续超过5次后直接连不上,说明IP被ban了,可以输入:
fail2ban-client status sshd
查看被ban的IP,如下截图。
解除被banIP:
fail2ban-client set sshd unbanip 58.218.188.146
防止MySQL被爆破:
1、为MySQL添加error_log
找到配置文件/etc/my.cnf,如果找不到 find / -type f -name 'my.cnf'全局查找即可.
将错误日志参数写入配置文件
[mysqld_safe] log-error=/etc/log/mysqld.log log-warning = 2
注意写个shell,定时分割/清理日志文件.
2. 修改jail.local这个配置文件,在后面追加如下内容:
[mysqld] enabled = true port = 3306 filter = mysqld-auth logpath = /etc/log/mysqld.log
如果是用宝塔安装的MySQL,跳过第一步修改配置文件, 把第二步的logpath 替换成 logpath = /www/server/data/*.err
参考:
https://blog.csdn.net/hbmovie/article/details/80402027
还没有评论,来说两句吧...