星期六 , 2020-10-24
首页 > 服务器管理 > CentOS下Fail2ban安装配置及防恶意扫描指南

CentOS下Fail2ban安装配置及防恶意扫描指南

网上总有那么一群恶人,天天没事干到处恶意扫描别人的网站找漏洞,而服务器资源也经常会因为这些恶意扫描而导致耗尽。比较常见的是CPU被很快拉到100%,进而造成网站无法访问,而系统在CPU占用100%后有时即使恶意扫描已停止了,但CPU还是下不来,这就会严重影响服务器稳定性和网站的在线率。所以我们有必要对这些恶意扫描进行拦截处理,维护服务器的稳定。

先简单介绍下fail2ban是什么。fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是调用防火墙屏蔽),如:当有人在试探你的SSH、SMTP、FTP密码,只要达到你预设的次数,fail2ban就会调用防火墙屏蔽这个IP,而且可以发送e-mail通知系统管理员,是一款很实用、很强大的软件!

通过服务器日志可以发现,恶意扫描通常会带来非常多的404错误记录,因此,我们可以用fail2ban来监控404错误记录。只要在一定时间范围内一个IP访问产生大量的404错误就必定是恶意扫描者的IP,找到了恶意扫描者后就需要拦截处理它。我们可以调用iptable防火墙把恶意扫描者IP加入防火墙拦截,从而实现拦截恶意扫描的目的。

Fail2ban配置说明:

一、如果无法yum install fail2ban自动安装,就必须先安装EPEL开放组件才能运行yum,可以通过以下方式安装EPEL:

选择适用版本的EPEL下载:
For CentOS 5.*:
sudo rpm -Uvh http://mirrors.kernel.org/fedora-epel/5/i386/epel-release-5-4.noarch.rpm

For CentOS 6.*:
sudo rpm -Uvh http://mirrors.kernel.org/fedora-epel/6/i386/epel-release-6-8.noarch.rpm

下载后运行如下命令安装:
yum repolist

二、已安装EPEL的,可以直接运行yum

1、直接在SSH中运行如下命令:
yum install fail2ban

2、安装完成后fail2ban位于这个目录中:
/etc/fail2ban
注意:需要先安装EPEL再安装fail2ban时,必须修改/etc/fail2ban/下fail2ban.conf文件中的logtarget=为:
logtarget = /var/log/fail2ban.log

3、jail.conf为参数设置文件,位于/etc/fail2ban目录下。需要加入新的规则时,必须将拦截的参数加入此文件,同时还需在/etc/fail2ban/filter.d创建一个对应的conf规则文件。

4、logpath:指的是用于监控恶意行为所对应的访问记录文件,webmin中是/var/log/virtualmin/domain.com_access_log。jail.conf文件中的所有logpath项必须对应相应log日志文件,否则就不起作用了。若在同一文件夹下有多个不同的log文件,可以使用wildcard来泛匹配,以下以webmin为例:

#Path to your logs
#To add all logs in a folder add Wildcard (*) expression
logpath = /var/log/virtualmin/*_access_log

若为多个不同文件夹下的不同log文件,只需换行添加不同的log文件地址就行了。例如:

logpath = /var/log/virtualmin/*_access_log
/var/log/apache/access_log
/var/log/etc/access_log

5、恶意扫描所造成的404错误log处理方法:
(1)、创建文件apache-404.conf于目录下:/etc/fail2ban/filter.d/
apache-404.conf需包含以下内容:


# Fail2Ban configuration file
#
# Author: Giuseppe Urso
#
# $Revision: 728 $
#

[Definition]

failregex = (?P[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) .+ 404 [0-9]+ "
ignoreregex =

(2)、打开/etc/fail2ban/jail.conf参数配置文件,并在最后一行添加如下404错误拦截代码:


[apache-404]

enabled = true
port = http,https
filter = apache-404
action = iptables-allports[name=apache-404] logpath = /var/log/virtualmin/*_access_log
bantime = 3600
findtime = 60
maxretry = 5

代码说明:以上代码的意思是只要1分钟内出现5次404错误就屏蔽拦截目标IP一小时。bantime是屏蔽恶意IP的时间是多久,findtime是查找404错误记录的时间点范围,maxretry是查找时间范围内有多少次404错误就拦截。

注意:maxretry = 值不宜设置过小,过小的值在自己网站本身有404错误内容存在时可能会造成误拦截正常访问用户,但值太大又会起不到拦截作用。一般建议设置为5,即最多出现5次404错误就立即拦截目标IP。

6. 设置Fail2ban为开机启动并立即启动命令:

chkconfig --level 23 fail2ban on && service fail2ban start

7、删除一个Fail2ban SSH规则命令:

iptables -D fail2ban-SSH -s 192.168.1.0 -j DROP

8、fail2ban相关命令:
#检查某个服务的过滤规则是否可以匹配某个日志文件
fail2ban-regex /var/log/secure /etc/fail2ban/filter.d/sshd.conf

#启动
service fail2ban start

#重启
service fail2ban restart (注意:每次修改配置文件必须执行restart命令。)

#关闭
service fail2ban stop

#查看状态

service fail2ban status
fail2ban-client status

#查看阻止状态
fail2ban-client status ssh-iptables

#查看日志
less /var/log/fail2ban.log

#查看iptables
iptables -L -n

至此,fail2ban已配置好,从此恶意扫描者再也没多少机会影响你的服务器稳定性了。但是,fail2ban也有自身缺陷,比如当扫描者扫描的文件是图片后缀文件造成大量404错误就无法调用防火墙拦截;当恶意扫描1秒内并发扫描多个文件时,所设置的maxretry值就会与实际不匹配,拦截可能会有稍许滞后。不过,总的来说,fail2ban还是可以拦截下来大部分的恶意扫描的。fail2ban用处还有很多,作用很大,甚至可以防DDOS攻击,你可以自己再进一步了解更多使用情况。

本文地址:http://www.wpzhinan.com/server/342.html
版权申明:除部分代码外,本站内容均为原创,转载请注明来源,违者必究侵权责任!