iptables与shell脚本—实现IP自动封堵

Linux搭建httpd服务
首先我们先介绍如何在Linux中搭建静态网站,方便后面我们进行测试,如果没有httpd服务,先进行yum源下载

yum install httpd -y

之后我们写入网页内容,举例如下:

echo hello world > /var/www/html/1.html

最后关闭防火墙,重启httpd服务

systemctl stop firewall
systemctl restart httpd

在浏览器中输入Linux本机IP查看,也可以在Linux中curl xxx.xxx.xxx.xxx查看
在这里插入图片描述
编写shell脚本,将一分钟访问量大于10次的IP进行封堵(只是为了便于测试)
vim test1 进入vim模式进行脚本编写

#!/bin/bash
# 日志文件路径
logfile=/var/log/httpd/
last_minutes=1 
# 开始时间1分钟之前(这里可以修改,如果要几分钟之内攻击次数多少次,这里可以自定义)
start_time=`date -d"$last_minutes minutes ago" +"%d/%m/%Y:%H:%M:%S"`
echo $start_time
# 结束时间现在
stop_time=`date +"%d/%m/%Y:%H:%M:%S"`
echo $stop_time
cur_date="`date +%d/%m/%Y`"
echo $cur_date
# 过滤出单位之间内的日志并统计最高ip数,请替换为你的日志路径
tac $logfile/access.log | awk -v st="$start_time" -v et="$stop_time" '{t=substr($4,2);if(t>=st && t<=et){print $1}}' |sort | uniq -c | sort -nr > $logfile/log_ip_top10
#ip_top=`cat $logfile/log_ip_top10 | head -1 | awk '{print $1}'`
# 出现横杠使用sed去掉第一行
#sed -i '1d' $logfile/log_ip_top10    
# 单位时间[1分钟]内单ip访问次数超过200次的ip记录到getip.txt
ip=`cat $logfile/log_ip_top10 | awk '{if($1 > 10)print $2}'` 
for line in $ip
do
echo $line >> $logfile/getip.txt
echo $line
iptables -I INPUT -p tcp  -m multiport --dport 80,443 -s $line -j DROP
done

之后对test1文件进行提权
chmod +x test1 //让文件拥有被执行的权限
进入vim /etc/crontab //修改/etc/crontab这种方法只有root用户能用,这种方法更加方便与直接直接给其他用户设置计划任务,而且还可以指定执行shell等等,crontab -e这种所有用户都可以使用,普通用户也只能为自己设置计划任务
在这里插入图片描述
之后 crontab /etc/crontab //进行激活
我们进入本机apache页面不断的进行刷新
在这里插入图片描述
我们通过Linux上查看定义log_ip_10,发现访问的IP为192.168.174.1,不断访问次数为56次
在这里插入图片描述
查看防火墙成功封堵IP
在这里插入图片描述
通过查看access_log,查看日志,发现登录情况
在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值