Nginx+iptables动态封杀ip的恶意请求
背景:随着公司互联网项目越来越多,公司的系统已经在市面上逐渐引起了敌军的注意,慢慢的发现了多个地区不同ip向我们的系统接口恶意请求攻击!
本文章撰写的目的都是为了服务器安全着想
注意:请在先安装好iptables服务的前提下再进行相关操作,如果服务器本身运行了很多程序,再次添加iptables服务后可能会导致容器内部网络错误,一些拉闸的后果,请注意!!!如果是云服务器,我建议手动配置安全组策略,稳一手!当然也要修改接口加强手工验证!
#!/bin/bash
#yum install iptables-services -y
nginx_home=/mnt/work/nginx
log_path=/mnt/work/nginx/logs
/usr/bin/tail -n50000 $log_path/h5.xxx.cn.access.log \
|awk '$7 ~ "/admixx/apxx/sendSms" {print $1,$13} '\
|grep -i -v -E "google|yahoo|baidu|msnbot|FeedSky|sogou" \
|awk '{print $1}' |sort |uniq -c | sort -rn \
|awk '{if($1>150)print "deny "$2";"}'>$log_path/blockip.log
#向nginx主进程发信号重新打开日志
docker exec 81d1d6c8edf5 nginx -s reload
也可以通过分析nginx日志过滤出频繁访问IP,直接用iptables屏蔽这个!P,就用不着重启nginx了,并且屏蔽效果更好。
单个IP的命令是
iptables -I INPUT -s 124.115.0.199 -j DROP
封IP段的命令是
iptables -I INPUT -s 124.115.0.0/16 -j DROP
封整个段的命令是,
iptables -I INPUT -s 194.42.0.0/8 -j DROP
封几个段的命令是
iptables -I INPUT-s 61.37.80.0/24 -j DROP
iptables -I INPUT -s 61.37.81.0/24-j DROP
刚才不小心搞的自己都连不上了--!!!
iptables -I INPUT -p tcp --dport 443 -s 124.115.0.0/24 -j DROP
以后用这种只封80端口就行了,不会出问题!
iptables -I INPUT -p tcp --dport 80 -s 124.115.0.0/24 -j DROP
iptables -I INPUT -s 61.37.81.0/24 -j DROP
查看规则
iptables -L -n
解封 慎用!!!
iptables -F
清空
iptables -D INPUT 数字
允许 172.17.0.0/16 所有ip请求
iptables -A INPUT -s 172.17.0.0/16 -j ACCEPT
允许 10.42.0.0/16 所有ip请求
iptables -A INPUT -s 10.42.0.0/16 -j ACCEPT
允许 源地址 172.17.0.0/24 到目标地址172.17.0.0/24 端口5000的请求
iptables -I INPUT -s 172.17.0.0/24 -d 172.17.0.0/24 -p tcp --dport 5000 -j ACCEP
iptables -I DOCKER-USER INPUT -s 0.0.0.0/0 -d 172.17.0.0/24 -j ACCEPT
允许网卡
iptables -I DOCKER-USER -i eth0 -s 192.168.1.0/24 -j ACCEPT
##
iptables -I DOCKER-USER -s 0.0.0.0/0 -d 0.0.0.0/0 -j RETURN
评论区