小心灵学院
欢迎您的光临

使用Fail2Ban保护Linux、Nginx、wordpress简单高效的保护策略

Fail2Ban 是一种入侵防御软件框架,可以保护计算机服务器免受暴力攻击。它以 Python 编程语言编写,能够在 POSIX 系统上运行,该系统具有本地安装的数据包控制系统或防火墙的接口,例如 iptables 或 TCP Wrapper。

使用Fail2Ban保护Linux、Nginx、wordpress简单高效的保护策略

配置监控模块

Fail2Ban的配置模块非常的简单,默认的配置已经写好了很多实用模块,我们直接调用即可。

cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Fail2Ban 会自动读取 .local 文件的配置,然后再增量地读取 conf 配置,这样就避免了更新它时你辛辛苦苦写好的配置被覆盖掉了。

然后我们编辑jail.local添加我们自定义的监控模块

vim /etc/fail2ban/jail.local

首先我们先对默认规则 [DEFAULT] 进行一些适量修改

bantime = 3600 #默认是 10 分钟,这个是说要 ban 多久,我们改长一点
#下面这两个是说在多长时间内失败多少次就被屏蔽,
#比如这个是在 3600 秒内失败 6 次就被屏蔽
findtime = 3600
maxretry = 6

接下来就是添加我们的监狱配置了,默认配置信息中并没有内置 Nginx ,只有 Apache:

# 保护Linux,防止远程SSH爆破
[ssh-iptables]
enabled = true
filter  = sshd
action  = iptables[name=SSH, port=26568, protocol=tcp]
logpath = /var/log/secure

# HTTP 验证防暴力破解
[nginx-http-auth]
enabled  = true
filter  = nginx-http-auth
port    = http,https
logpath  = /data/wwwlogs/access.log
 
#屏蔽恶意爬虫
[nginx-badbots]
enabled  = true
port    = http,https
filter  = nginx-badbots
logpath  =  /data/wwwlogs/access.log
maxretry = 2
 
#避免恶意请求网站目录结构
[nginx-nohome]
enabled  = true
port    = http,https
filter  = nginx-nohome
logpath  =  /data/wwwlogs/access.log
maxretry = 2
 
#避免 nginx 被他人用于反向代理
[nginx-noproxy]
enabled  = true
port    = http,https
filter  = nginx-noproxy
logpath  =  /data/wwwlogs/access.log
maxretry = 2

#防范 WordPress 暴力破解登录请求
[wp-login]
enabled = true
port = http,https
filter = wp-login
maxretry = 10
findtime = 60
bantime = 43600
logpath  =  /data/wwwlogs/access.log

#防止 WordPress 受到 xmlrpc.php CC 攻击
[xmlrpc]
enabled = true
port = http,https
filter = xmlrpc
logpath  = /data/wwwlogs/access.log
bantime = 43600
maxretry = 1
findtime  = 5

注意将logpath修改为自己的Nginx日志路径,Fail2Ban本质上是一款防火墙外挂,仅作为日志分析使用,根据设置的监控模块及相应规则,向防火墙传递参数,使防火墙把恶意ip拦截。

上述配置中 logpath 是指日志文件的路径的(如: /data/wwwlogs/access.log),需要注意的是这里可以指定多个日志文件的,具体格式如下:

logpath  = /data/wwwlogs/www.wanvi.net.log
           /data/wwwlogs/v.ixmu.net.log
           /data/wwwlogs/ixmu.net.log
           /data/wwwlogs/dl.ixmu.net.log

一行一条日志路径,Fail2Ban读取时会自动过滤多余空格。

配置监控模块规则

监控模块我们在上面我们已经完成了配置,监控模块有了,还需要配置模块相应的规则,让模块正确匹配内容,从中筛选出需要的部分。

模块规则使用正则进行匹配,这里使用到最近本的正则,花上半个小时基本入门了,如果要匹配精深的规则,请认真学习正则表达式。

Fail2ban模块规则放在/etc/fail2ban/filter.d目录下

cd /etc/fail2ban/filter.d

在这个目录下,存放这所有规则文件,一个配置名一个文件,有多少个文件就有多少个规则,这些规则被上文中监狱配置里 filter 字段调用。

保护Linux,防止远程SSH爆破,sshd.conf已经内置了,无需单独添加。

这个规则是存在的,我们在规则中加一行配置,来过滤除了账号密码错误外,空白账号或者密码的错误:

vim nginx-http-auth.conf
[Definition] failregex = ^ \[error\] \d+#\d+: \*\d+ user "\S+":? (password mismatch|was not found in ".*"), client: , server: \S+, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"\s*$ ^ \[error\] \d+#\d+: \*\d+ no user/password was provided for basic authentication, client: , server: \S+, request: "\S+ \S+ HTTP/\d+\.\d+", host: "\S+"\s*$ ignoreregex =

过滤爬虫的规则是有现成的,所以我们只需要改个名就可以了;

cp apache-badbots.conf nginx-badbots.conf

屏蔽恶意请求网站目录结构

vim nginx-nohome.conf
#添加如下规则进行匹配
 [Definition]
 failregex = ^ -.*GET .*/~.*
 ignoreregex =

屏蔽 nginx 被他人用于反向代理

vim nginx-noproxy.conf
#添加如下规则进行匹配
 [Definition]
 failregex = ^ -.*GET http.*
 ignoreregex =

防范 WordPress 暴力破解登录请求

vim wp-login.conf
#添加如下规则进行匹配
[Definition]
failregex = ^ -.* /wp-login.php.* HTTP/1\.."
ignoreregex =

防止 WordPress 受到 xmlrpc.php CC 攻击

vim xmlrpc.conf
#添加如下规则进行匹配
[Definition]
failregex = ^ .*POST .*xmlrpc\.php.*
ignoreregex =

至此,Fail2Ban 保护Linxu、Nginx、WordPress 基本算是完成了,最后不要忘记重启Fail2ban服务。

service fail2ban restart

效果查看

使用tail命令查看Fail2Ban的运行日志

从日志我们可以看出150.138.26.216.79/78.81、58.22.206.234/119.188.116.15这5个IP都触发了filter规则并被Fail2Ban成功捕获,进入观察中。

你还可以查看防火墙规则,观察哪些ip已经被ban了

iptables --list -n

小结

Fail2Ban的功能非常丰富,你可以通过查看filter.d目录下预置的规则进行学习,从中筛选出你需要的规则,进行直接调用。如果你有编程基础,懂的正则表达式的书写,那么恭喜你,你可以使用Fail2Ban定制属于自己的个性化安全策略。

赞(0)
未经许可不得转载:小心灵学院 » 使用Fail2Ban保护Linux、Nginx、wordpress简单高效的保护策略
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址