firewalld: 抓取cc攻击ip用firewalld封禁
一,用firewalld添加ipset
创建新的ipset
[root@blog ~]# firewall-cmd --permanent --new-ipset=nginxcc --type=hash:ip
重新加载到内存
[root@blog ~]# firewall-cmd --reload
success
查看所有的ipset
[root@blog ~]# firewall-cmd --get-ipsets
nginxcc
用ipset,添加禁止访问的规则:
[root@blog ~]# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source ipset="nginxcc" drop'
success
添加富规则后查看效果:
[root@blog ~]# firewall-cmd --zone=public --list-rich-rules
rule family="ipv4" source ipset="nginxcc" drop
在ipset中测试添加一条ip:
[root@blog ~]# firewall-cmd --ipset=nginxcc --add-entry=13.57.12.210
success
测试结果:
[root@blog ~]# firewall-cmd --ipset=nginxcc --query-entry=13.57.12.210
yes
从被加ip地址的机器访问已无法访问
删除ip:
[root@blog firewalld]# firewall-cmd --ipset=nginxcc --remove-entry=13.57.12.210
success
测试结果:
[root@blog firewalld]# firewall-cmd --ipset=nginxcc --query-entry=13.57.12.210
no
从被加ip地址的机器访问已可以正常访问
二,用bash脚本抓取目标ip添加到集合中
#!/bin/bash
# 得到前一分钟的时间
time=`env LC_ALL=en_US.en date -d '1 minute ago' '+%e/%b/%G:%H:%M'`
# 文件的日志路径
log='/data/logs/nginxlogs/file_meet.access_log'
# 前一分钟出现的次数多于此阀值则会被block
maxCount=30
for line in `grep "$time" "$log" | awk '{print $1}' | sort -n | uniq -c | sort -rnk 1 | awk '{if ($1>'$maxCount') print $2}'`; do
echo "ip:$line"
firewall-cmd --ipset=nginxcc --add-entry="${line}";
done;
把脚本放到crontab中每隔几分钟运行即可
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
2023-08-28 百度:为vue站添加百度统计
2023-08-28 webman:用think-validate做验证器(v1.5.7)
2023-08-28 webman:自定义配置文件(v1.5.7)
2020-08-28 spring boot:spring security给用户登录增加自动登录及图形验证码功能(spring boot 2.3.1)
2020-08-28 spring boot:spring security用mysql数据库实现RBAC权限管理(spring boot 2.3.1)