Linux Shell脚本教程:根据Web访问日志封禁和解封请求量异常的IP地址

在本篇文章中,我们将探讨一个在Linux系统管理中非常实用的Shell脚本编写任务,即如何编写一个脚本来根据Web访问日志封禁请求量异常的IP,并在半小时后若IP恢复正常则解除封禁。

这样的脚本对于防范DDoS攻击等网络攻击非常有用。

图片[1]-Linux Shell脚本教程:根据Web访问日志封禁和解封请求量异常的IP地址-不念博客

脚本设计思路

在设计这个Shell脚本时,我们主要需要处理以下几个部分:解析Web访问日志,封禁异常IP,定时解除封禁。

  • 解析Web访问日志:我们需要解析Web服务器的访问日志,找出请求量异常的IP,这可以通过awksort命令配合来实现。
  • 封禁异常IP:找出异常IP后,我们需要使用iptables来封禁这些IP。
  • 定时解除封禁:封禁后,我们需要设置一个定时任务,在半小时后解除封禁,这可以通过at命令来实现。

脚本编写

由于该任务涉及到的内容较多,我们分为两个脚本来实现。

一个是用来封禁异常IP的ban_ip.sh,另一个是用来解除封禁的unban_ip.sh

以下是封禁异常IP的ban_ip.sh

#!/bin/bash

# 定义请求量阈值
threshold=1000

# 解析Web访问日志,找出请求量超过阈值的IP
ip_list=$(awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | awk -v t=$threshold '{if($1>t)print $2}')

# 封禁异常IP
for ip in $ip_list
do
    iptables -I INPUT -s $ip -j DROP
    # 在半小时后解除封禁
    echo "iptables -D INPUT -s $ip -j DROP" | at now + 30 minutes
done

以下是解除封禁的unban_ip.sh,这个脚本会被at命令调用:

#!/bin/bash

# 解析参数,获取要解除封禁的IP
ip=$1

# 解除封禁
iptables -D INPUT -s $ip -j DROP

脚本测试

将上述两个脚本保存为ban_ip.shunban_ip.sh,并赋予其执行权限chmod +x ban_ip.sh unban_ip.sh

然后你可以直接运行ban_ip.sh来封禁异常IP,并在半小时后解除封禁。

结语

在Linux系统管理中,根据Web访问日志封禁和解封请求量异常的IP是一项非常重要的任务。

© 版权声明
THE END