Centos7下安装Fail2ban 配合Nginx防止CC攻击
1185 字
6 分钟
Centos7下安装Fail2ban 配合Nginx防止CC攻击
Fail2ban简介
- Fail2ban可以监视你的系统日志,然后匹配日志的错误信息(正则式匹配)执行相应的屏蔽动作(一般情况下是调用防火墙屏蔽),如<当有人在试探你的http>当有人在试探你的http>、SSH、SMTP、FTP密码,只要达到你预设的次数,fail2ban就会调用防火墙屏蔽这个IP,而且可以发送e-mail通知系统管理员,是一款很实用、很强大的软件!
- Fail2ban由python语言开发,基于logwatch、gamin、iptables、tcp-wrapper、shorewall等。如果想要发送邮件通知道,那还需要安装postfix或sendmail。
- 在外网环境下,有很多的恶意扫描和密码猜测等恶意攻击行为,使用Fail2ban配合iptables,实现动态防火墙是一个很好的解决方案。
功能和特性
- 支持大量服务。如sshd,apache,qmail,proftpd,sasl等等
- 支持多种动作。如iptables,tcp-wrapper,shorewall(iptables第三方工具),mail notifications(邮件通知)等等。
- 在logpath选项中支持通配符
- 需要Gamin支持(注:Gamin是用于监视文件和目录是否更改的服务工具)
- 需要安装python,iptables,tcp-wrapper,shorewall,Gamin。如果想要发邮件,那必需安装postfix或sendmail
安装Fail2ban
yum install -y epel-releaseyum install -y fail2ban-
目录结构
Terminal window /etc/fail2ban/action.d #动作文件夹,内含默认文件。iptables以及mail等动作配置/etc/fail2ban/fail2ban.conf #定义了fai2ban日志级别、日志位置及sock文件位置/etc/fail2ban/filter.d #条件文件夹,内含默认文件。过滤日志关键内容设置/etc/fail2ban/jail.conf #主要配置文件,模块化。主要设置启用ban动作的服务及动作阀值/etc/rc.d/init.d/fail2ban #启动脚本文件
关闭防火墙、安装iptables
从CentOS7(RHEL7)开始,官方的标准防火墙设置软件从iptables变更为firewalld。 因此,为了使Fail2ban与iptables联动,需禁用自带的firewalld服务,同时安装iptables服务。
-
停止和禁用自带的firewalld服务。
Terminal window systemctl stop firewalldsystemctl disable firewalld -
安装iptables
Terminal window yum install -y iptablesyum install -y iptables-services -
为了记录iptables防火墙丢弃的数据包到日志文件,还需修改/etc/rsyslog.conf文件
vim /etc/rsyslog.conf
#填入以下内容。kern.* /var/log/iptables.log
#启rsyslog服务service rsyslog restart
#还需对日志文件每隔一段时间(一周)进行切割,所以需要编辑/etc/logrotate.d/syslog文件。vim /etc/logrotate.d/syslog
#填入以下内容/var/log/iptables.log- 重启iptables
service iptables saveservice iptables restart- 查看iptables现有规则
iptables -L -n-
脚本说明
Terminal window iptables -P INPUT ACCEPT #表示先允许所有的输入通过防火墙,以防远程连接断开iptables -F #表示清空所有默认规则iptables -X #表示清空所有自定义规则iptables -Z #表示将所有计数器归0iptables -A INPUT -i lo -j ACCEPT #表示允许来自于lo接口(本地访问)的数据包iptables -A INPUT -p tcp --dport 22 -j ACCEPT #表示开放22端口(SSH)iptables -A INPUT -p tcp --dport 80 -j ACCEPT #表示开放80端口(HTTP)iptables -A INPUT -p tcp --dport 443 -j ACCEPT #表示开放443端口(HTTPS)iptables -P INPUT DROP #表示其他入站一律丢弃iptables -P OUTPUT ACCEPT #表示所有出站一律通过iptables -P FORWARD DROP #表示所有转发一律通过iptables -A INPUT -s 192.168.0.1/24 -j ACCEPT #添加可信任网段192.168.0.1/24,接受其所有请求iptables -I INPUT -s 192.168.0.1 -j DROP #封停一个IP:192.168.0.1iptables -A INPUT -p tcp -s 192.168.0.1 -j ACCEPT #添加可信任ip:192.168.0.1,接受其所有TCP请求iptables -I INPUT -p tcp -s 192.168.0.1 --dport 3306 -j ACCEPT #添加可信任ip:192.168.0.1,接受其对某个端口:3306的所有TCP请求iptables -A INPUT -p tcp -j LOG --log-prefix "iptables denied" #表示所有被丢弃的包都会被记录到/var/log/iptables.log文件中,且每条记录会以”iptables denied”作为前缀iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #表示允许接受本机请求之后的返回数据
配置Fail2ban 这里只配置[nginx-cc]模块,其它需求自行百度
- 新建jail.local来覆盖Fail2ban在jail.conf的默认配置
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localvim /etc/fail2ban/jail.local-
新增[nginx-cc]模块
Terminal window [nginx-cc]enabled = trueport = http,httpsfilter = nginx-ccaction = %(action_mwl)smaxretry = 5findtime = 60bantime = 30logpath = /usr/local/nginx/logs/access.log#配置意思是如果在60s内,同一IP达到5次请求,则将其IP ban 30s,上面只是为了测试,请根据自己的实际情况修改。logpath为nginx日志路径 -
新建一个nginx日志匹配规则
vim /etc/fail2ban/filter.d/nginx-cc.conf
#填写如下内容[Definition]failregex = <HOST> -.*- .*HTTP/1.* .* .*$ignoreregex =- 重启fail2ban
systemctl restart fail2ban-
查看配置是否生效
Terminal window fail2ban-client status -
fail2ban 其它命令
Terminal window systemctl start fail2ban #启动Fail2bansystemctl stop fail2ban #停止Fail2bansystemctl enable fail2ban #开机启动Fail2banfail2ban-client status nginx-cc #查看被ban IP,其中ssh-iptables为名称fail2ban-client set nginx-cc addignoreip IP地址 #添加白名单fail2ban-client set ssh-iptables delignoreip IP地址 #删除白名单iptables -L -n #查看被禁止的IP地址
参考
https://www.jianshu.com/p/4fdec5794d08
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
Centos7下安装Fail2ban 配合Nginx防止CC攻击
https://tianch.com.cn/posts/tutorials/centos7-xia-an-zhuang-fail2ban-pei-he-nginx-fang-zhi-cc-gong-ji/相关文章智能推荐
1
FRP v0.68.0 内网穿透完整教程
Nginx文档版本:v1.0 | 适用 FRP 版本:v0.68.0 | 更新日期:2026-07-31
2
Nginx 16连环问
Nginx作为一个后端程序员,Nginx也是必备技能之一哦,作为一个web服务器,Nginx的性能方面是很不错的。本文总结或16个知识点,或者面试题分享给大家,后续还会继续更新。
3
Nginx设置keepalive提升吞吐量
Nginxnginx 使用反向代理时 保持长连接
4
Nginx 反向代理最常见的三种用法
Nginx说到 大名鼎鼎的 Nginx, 大家肯定都不陌生,不管是做运维,做开发,还是做网络的都应该对他很熟悉。Nginx的功能很多,很强大,今天我主要是分享一下 Nginx 反向代理的常见用法。
5
Nginx解决跨域问题、配置静态防盗链
Nginx跨域问题的解决
随机文章随机推荐


