shell脚本-DOS攻击防范(自动屏蔽攻击IP)
shell脚本-DOS攻击防范(自动屏蔽攻击IP)
原理:
找出异常ip
通过获取服务器access.log日志信息,获取时间在每分钟之内每个ip访问的次数来判断此ip是否是DOS攻击。
grep $(date +%d/%b/%Y:%H:%M) 过滤得到没分钟之内的page被访问的信息
awk '{a[$1]++}END{for (i in a)print i,a[i]}' 再通过awk命令过滤得到每分钟访问page的ip和次数
示例:
[root@localhost /]# grep $(date +%d/%b/%Y:%H:%M) /usr/local/nginx/logs/access.log | awk '{a[$1]++}END{for (i in a)print i,a[i]}' 192.168.70.1 2
再限制一下次数(例如60次)只取ip:
grep $(date +%d/%b/%Y:%H:%M) /usr/local/nginx/logs/access.log | awk '{a[$1]++}END{for (i in a)if(a[i] > 60)print i}'
屏蔽异常ip
先查看iptables中有没有对该ip的屏蔽,如果没有则执行屏蔽
if [
iptables -vnL | grep -c "$IP"
-eq 0 ]; then
iptables -I -s $IP -j DROP
shell脚本
#!/bin/bash
DATE=$(date +%d/%b/%Y:%H:%M)
LOG_FILE=/usr/local/nginx/logs/access.log
ABNORMAL_IP=`tail -n5000 $LOG_FILE | grep $DATE |awk '{a[$1]++}END{for(i in a)if(a[i] > 60)print i}'`
for IP in $ABNORMAL_IP; do
if [ `iptables -vnL | grep -c "$IP"` -eq 0 ]; then
iptables -I -s $IP -j DROP
echo "$(date + '%F_%T') $IP" >> /tmp/drop_ip.log
fi
done
iptables命令补充说明
查看规则
iptables [参数]
- -L 表示查看当前表的所有规则,默认查看的是 filter 表,如果要查看 nat 表,可以加上 -t nat 参数。
- -n 表示不对 IP 地址进行反查,加上这个参数显示速度将会加快。
- -v 表示输出详细信息,包含通过该规则的数据包数量、总字节数以及相应的网络接口。
iptables命令语法
iptables [-t table] COMMAND [chain] MATCH -j ACTION
规则管理-COMMAND
-A, --append chain rule-specification: 追加新规则于指定链的尾部;
-I, --insert chain [rulenum] rule-specification : 插入新规则于指定链的指定位置,默认为首部;
-R, --replace chain rulenum rule-specification : 替换指定的规则为新的规则;
-D, --delete chain rulenum : 根据规则编号删除规则,用–line-numbers查看;匹配的条件或标准-MATCHMATCH匹配条件包括通用匹配条件和扩展匹配条件
通用匹配条件
-s, --source address[/mask][,…] : 检查报文的源IP地址是否符合此处指定的范围,或是否等于此处给定的地址;
-d, --destination address[/mask][,…] : 检查报文的目标IP地址是否符合此处指定的范围,或是否等于此处给定的地址;
-p, --protocol protocol : 匹配报文中的协议,可用值tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh 或者 “all”, 亦可以数字格式指明协议;
-i, --in-interface name : 限定报文仅能够从指定的接口流入;only for packets entering the INPUT, FORWARD and PREROUTING chains.
-o, --out-interface name : 限定报文仅能够从指定的接口流出;for packets entering the FORWARD, OUTPUT and POSTROUTING chains.-j ACTION------操作动作,ACCEPT、DROP、REJECT
ACCEPT : 接受
DROP : 忽略
REJECT : 拒绝
iptables补充说明主要参考:[第二篇:CentOS7 iptables命令使用详情_centos7查看报文_hard-cly的博客-CSDN博客](https://blog.csdn.net/weixin_47554522/article/details/120196797?ops_request_misc={"request_id"%3A"168996413216800227431683"%2C"scm"%3A"20140713.130102334.."}&request_id=168996413216800227431683&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-120196797-null-null.142v90control,239v3insert_chatgpt&utm_term=centos7 iptables命令&spm=1018.2226.3001.4187)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!