vlambda博客
学习文章列表

【文末抽奖】自动拉黑IP的Shell脚本

前言

前两天参加面试,面试官问我:如果攻击方采用代理ip进行cc攻击,我们应该如何应急?

又喜由这个问题,引发了我的一些思考。

他假定的场景是网站没有任何防护措施(就是在互联网上裸奔),好吧,既然没有任何的防护,在应急的时候,能不能通过脚本自动分析web日志,根据访问量自动拉黑ip?


脚本介绍


脚本设计思路:通过计划任务统计单位时间内的IP访问量,设定一个阀值,访问量超过阀值就自动拉黑。

#!/bin/bash
#该脚本可以根据web日志的访问量,自动拉黑IP(加入计划任务,结合计划任务在固定时间段内执行,并根据该时间段内产生的日志进行分析)

#首先把日志保存到根目录一份,计算日志有多少行
line1=`wc -l /access_log|awk '{print$1}'`
cp /var/log/httpd/access_log /

#计算现有的日志有多少行
line2=`wc -l /var/log/httpd/access_log |awk '{print$1}'`

#根据上一次备份的日志和现在拥有的行数差值,作为单位时间内分析日志访问量
tail -n $((line2-line1)) /var/log/httpd/access_log|awk '{print$1}'|sort -n|uniq -c|sort >/1.txt

cat /1.txt|while read line
do
echo $line >/line
num=`awk '{print$1}' /line`

#设定阀值num,单位时间内操作这个访问量的ip会被自动拉黑
if (($num>12))
then
ip=`awk '{print$2}' /line`
firewall-cmd --add-rich-rule="rule family=ipv4 source address='${ip}' port port=80 protocol=tcp reject" --permanent
firewall-cmd --reload

fi
done

脚本测试


一台centos7虚拟机,搭建有http服务


1.Web可以正常访

2.启动虚拟机centos的防火墙


【文末抽奖】自动拉黑IP的Shell脚本


3.把脚本加入计划任务


【文末抽奖】自动拉黑IP的Shell脚本


4.用nikto模拟大量的访问


【文末抽奖】自动拉黑IP的Shell脚本


5.再访问可以看到本地的IP已经无法访问网页

【文末抽奖】自动拉黑IP的Shell脚本


【文末抽奖】自动拉黑IP的Shell脚本


7.我们也可以对在/etc/firewalld/zones/public.xml文件中对防火墙的规则进行直接操作,方便我们后期对拉黑的ip进行移除,修改等操作


【文末抽奖】自动拉黑IP的Shell脚本

总结:

这个脚本只是给出一个样例,里面的阀值num需要根据自己网站的访问量自行调整。也可以根据这个脚本来演化,比如基于访问特征拉黑ip,有兴趣的可以自己研究。


送书福利:


本次共四本书免费赠送:《企业信息安全建设与运维指南》

【文末抽奖】自动拉黑IP的Shell脚本

本书主要包括基础安全设施建设、安全自动化系统建设、业务安全体系建设3个部分。第一部分介绍当进入一个安全建设空白或基本为零的企业时,如何着手规划并一步步建成较为完善的安全体系;第二部分主要介绍安全自动化,帮助大家掌握开源的二次开发思路,设计适合企业自身特点的安全系统;第三部分介绍业务安全体系建设,包括互联网黑产攻击手法、风控系统建设方案和业务安全风险防控体系建设实践。

赠书规则

     为了感谢大家一直以来的关注与支持,会有书籍免费赠送【文末抽奖】自动拉黑IP的Shell脚本

     规则如下:

     3. 中奖者不满足条件1,视为放弃中奖资格。