如何做网站外部链接,班级网站制作建设的设计和作用,一个网站如何产生流量,wordpress字号修改在网络安全日益受到重视的今天#xff0c;如何有效防范恶意流量和攻击成为了每个网站管理员必须面对的问题。恶意流量不仅会影响网站的正常运行#xff0c;还可能导致服务器崩溃#xff0c;给网站带来不可估量的损失。为了应对这一问题#xff0c;我们特别推出了一款实用的…在网络安全日益受到重视的今天如何有效防范恶意流量和攻击成为了每个网站管理员必须面对的问题。恶意流量不仅会影响网站的正常运行还可能导致服务器崩溃给网站带来不可估量的损失。为了应对这一问题我们特别推出了一款实用的Bash脚本能够自动封禁请求量异常的IP并在半小时后恢复正常时解除封禁。下面让我们一起来详细了解一下这个脚本的工作原理和使用方法吧
脚本概述
这款脚本通过分析Web访问日志自动找出请求量异常的IP地址并利用iptables进行封禁。当IP在半小时后恢复正常时脚本会自动解除封禁。这样既能有效防范恶意流量又能避免误封正常用户的IP。
完整脚本
#!/bin/bash ################################################################################ #####根据web访问日志封禁请求量异常的IP如IP在半小时后恢复正常则解除封禁 ################################################################################ ####logfile/data/log/access.log#显示一分钟前的小时和分钟d1date -d -1 minute %H%Md2date %Mipt/sbin/iptablesips/tmp/ips.txtblock(){#将一分钟前的日志全部过滤出来并提取IP以及统计访问次数grep $d1: $logfile|awk {print $1}|sort -n|uniq -c|sort -n $ips #利用for循环将次数超过100的IP依次遍历出来并予以封禁for i in awk $1100 {print $2} $ipsdo $ipt -I INPUT -p tcp --dport 80 -s $i -j REJECT echo date %F-%T $i /tmp/badip.log done}unblock(){ #将封禁后所产生的pkts数量小于10的IP依次遍历予以解封 for a in $ipt -nvL INPUT --line-numbers |grep 0.0.0.0/0|awk $210 {print$1}|sort -nr do $ipt -D INPUT $a done $ipt -Z}#当时间在00分以及30分时执行解封函数if [ $d2 -eq 00 ] || [ $d2 -eq 30 ]then #要先解再封因为刚刚封禁时产生的pkts数量很少 unblockblockelseblockfi
脚本详解 设置日志文件路径和工具路
logfile/data/log/access.log ipt/sbin/iptables ips/tmp/ips.txt
这里我们设置了Web访问日志文件的路径、iptables工具的路径以及一个临时文件用于存储提取出的IP地址和访问次数。 提取并封禁异常IP
在block函数中脚本首先通过grep和awk命令提取出一分钟前的日志中的IP地址并统计每个IP的访问次数。然后利用awk命令筛选出访问次数超过100的IP地址并通过iptables进行封禁。
block() { grep $d1: $logfile|awk {print $1}|sort -n|uniq -c|sort -n $ips for i in awk $1100 {print $2} $ips do $ipt -I INPUT -p tcp --dport 80 -s $i -j REJECT echo date %F-%T $i /tmp/badip.log done }
这段代码的工作原理如下 使用grep命令从日志文件中提取出包含特定时间戳的行。 通过awk命令提取IP地址并使用sort和uniq命令进行排序和去重。 再次使用awk命令筛选出访问次数超过100的IP地址。 利用iptables的-I INPUT命令将这些IP地址添加到INPUT链的开头并设置REJECT策略阻止这些IP地址的访问请求。 将被封禁的IP地址和时间戳记录到/tmp/badip.log文件中以便后续跟踪和审查。 解封恢复正常的IP
在unblock函数中脚本通过iptables查看当前INPUT链的规则找出那些被封禁后产生的数据包数量小于10的IP地址并予以解封。
unblock() { for a in $ipt -nvL INPUT --line-numbers |grep 0.0.0.0/0|awk $210 {print $1}|sort -nr do $ipt -D INPUT $a done $ipt -Z }
这段代码的工作原理如下 使用iptables -nvL INPUT --line-numbers命令查看INPUT链的详细规则和行号。 通过grep命令筛选出目标地址为0.0.0.0/0的规则即那些被封禁的IP地址。 使用awk命令提取出数据包数量小于10的规则的行号。 利用iptables的-D INPUT命令将这些规则从INPUT链中删除从而解封对应的IP地址。 最后使用iptables -Z命令将iptables的计数器清零。 定时执行解封和封禁操作
脚本的最后部分是一个条件判断语句用于在特定的时间每小时的00分和30分执行解封操作并在其他时间执行封禁操作。这样可以确保被封禁的IP地址在半小时后恢复正常访问。
使用方法 将以上脚本保存为一个文件例如block_unblock_ips.sh。 为脚本添加执行权限chmod x block_unblock_ips.sh。 将脚本添加到cron定时任务中以便每小时自动执行。例如在crontab文件中添加以下行0,30 * * * * /path/to/block_unblock_ips.sh。这将确保脚本在每小时的00分和30分执行一次。 根据需要调整脚本中的日志文件路径、iptables路径以及其他相关配置。 运行脚本并观察其效果。如果发现误封或漏封的情况可以适当调整访问次数的阈值或其他相关参数。
结语
这款自动封禁和解封异常IP的脚本为网站管理员提供了一个有效的工具来应对恶意流量和攻击。通过合理的配置和使用可以大大降低恶意流量对网站的影响提高网站的安全性和稳定性。希望这款脚本能成为您网站安全防护的有力武器