凌飞阁

获取中...

/p>

fail2ban—不止是个CC攻击防御工具(支持宝塔魔改nginx)

此文由Rat's Blog率先发布,我修改后支持宝塔魔改的nginx添加~更适合新手 挂了CDN的网站不适合此教程

原文传送门

介绍

        对于个人小型站点来说~如何防御CC攻击一直是个让人头痛的问题~比较常见的防御方式就是宝塔面板自带的防火墙,张戈大佬的CCkiller脚本了~不过宝塔防火墙一个月需要不少的费用~cckiller因为制作年代较为久远并不支持目前centos7自带的Firewalld~以前我都是先卸载firewalld然后安装iptables后再配置cckiller作为防卫工具~但是最近我换的VPS服务商的机器不知为什么没法安装iptables~只好另寻他法~在Rat's的博客上找到一款比cckiller更为强大的配合firewalld使用的防御工具~他不但能防御cc攻击,还能防止端口扫描爆破~除了内置的无数规则外,还支持自建规则~不可谓不强大~下面给大家讲讲如何为你的网站配置fail2ban~

准备工作

        首先你需要确定你的系统使用的是firewalld而不是iptables~如果你的系统没有启用firewalld则需要先启用firewalld。并把你当前使用的端口添加到firewalld放行
1.查看当前系统是否启用了iptables
systemctl status iptabeles
2.如果启用的iptables先关闭~
systemctl stop iptables
3.查看firewalld的状态
systemctl status firewalld
4、启动firewalld并设置自启
启动:systemctl start firewalld
自启systemctl enable firewalld.service
5、如果之前iptables的状态是启用,这里记得关闭iptables的自启~
chkconfig iptables off

切记将你现在使用的端口添加到firewalld放行!包括但不限于/网站http端口、网站https端口、SSH端口、宝塔或其他面板入口端口、你之前开启的其他端口

放行方法如下:以80端口为例,permanent 永久放行
firewall-cmd --zone=public --add-port=80/tcp --permanent
所有端口放行完毕后需要重载firewalld
firewall-cmd --reload
查询已开放的端口~
firewall-cmd --zone=public --list-ports

安装fail2ban

CentOS内置源并未包含fail2ban,需要先安装epel源
yum -y install epel-release
安装fial2ban
yum -y install fail2ban
安装成功后fail2ban配置文件位于/etc/fail2ban,其中jail.conf为主配置文件,相关的匹配规则位于filter.d目录,其它目录/文件一般很少用到,如果需要详细了解可自行搜索。

配置fail2ban规则~

先新建一个nginx日志匹配规则
vi /etc/fail2ban/filter.d/nginx-cc.conf
填写如下内容

[Definition]
failregex = <HOST> -.*- .*HTTP/1.* .* .*$
ignoreregex =

新fail2ban建配置文件
vi /etc/fail2ban/jail.local
输入以下内容

[DEFAULT]
ignoreip = 127.0.0.1/8
bantime  = 86400
findtime = 600
maxretry = 5
banaction = firewallcmd-ipset
action = %(action_mwl)s


[sshd]
enabled = true
filter  = sshd
port    = 填入你的SSH端口
action = %(action_mwl)s
logpath = /var/log/secure


[nginx-cc]
enabled = true
port = http,https
filter = nginx-cc
action = %(action_mwl)s
maxretry = 40
findtime = 30
bantime = 300
logpath = 填入你的nginx access日志路径。

通过查询nginx的配置文件nginx.conf可以找到你的nginx access路径~
比如我的配置文件位置:/www/server/nginx/conf
access路径/www/wwwlogs/access.log
针对使用宝塔平台的,此处需要修改宝塔网站配置
在配置面板——网站——设置——配置文件中 最下方的
access_log /dev/null改成 access_log /www/wwwlogs/access.log;或者 宝塔默认的access_log /www/wwwlogs/域名.log;
然后重启nginx 清空log文件 访问你的网站后 查看log文件是否有刚才的访问记录 有多个站点的,可以将所有站点设置成同一log文件
因为每次访问都会被写入此log时间长了会占用很大的空间,所以我们需要定期清理,使用宝塔建立一个每天执行的命令 以我的log位置为例
sed -i '1,10000d' /www/wwwlogs/www.jdonkey.club.log
此命令会清除此log前10000行的内容
在部分环境上清除log后会导致log不能正常写入,重启nginx即可
所以还要在清除log的计划任务后加上一个重启nginx的计划任务
systemctl restart nginx
没有面板的使用crontab命令 网上很多教程 这里不做说明

配置说明

sshd:名称,可以随便填写
filter:规则名称,必须填写位于filter.d目录里面的规则,sshd是fail2ban内置规则
port:对应的端口
action:采取的行动
logpath:需要监视的日志路径
此处设置为
10分钟内连接SSH达到5次错误此IP将被BAN24小时

CC
maxretry 请求次数 即同一IP在一定时间内的请求次数
findtime 就是上面所说的一定时间内~
bantime 超过此次数后阻挡该IP的时间 单位秒
这里请根据自己情况自行设置~

重启fail2ban让设置生效
systemctl restart fail2ban

常用命令

启动
systemctl start fail2ban
停止
systemctl stop fail2ban
开机启动
systemctl enable fail2ban
查看被ban IP(CC攻击)
fail2ban-client status nginx-cc
查看被ban IP(SSHD端口扫描)
fail2ban-client status sshd

删除被ban IP

fail2ban-client set sshd delignoreip 192.168.111.111

查看日志

tail /var/log/fail2ban.log

版权声明 ▶ 本网站名称:凌飞阁
▶ 本文链接:https://llingfei.com/217.html
▶ 部分图片/文章来源于网络,版权归原作者所有。如有侵权,请联系站长进行核实删除。
▶ 转载本站文章请注明出处!!

评论 4

  1. 我旅游回来啦!
    为什么,网站这么卡😂
    cckiller、Nginx防火墙和这个一起装会发生什么🌚

    左岸 2019-04-09    回复
    • 不会发生什么……不卡吧 之前用的nodecache的CDN可卡死了 我换回CF了

      fly 2019-04-09    回复
  2. 这篇源文章并不是萌鼠大佬的,萌鼠大佬也是转发xiaoz,在萌鼠大佬的结尾处有来源链接的

    gated0 2019-08-24    回复
    • 是的……小Z也是我好友 还是老乡呢

      fly-L 2019-08-27    回复