首页 > 系统相关 >【Shell脚本】iptables 自动屏蔽访问网站频繁的IP

【Shell脚本】iptables 自动屏蔽访问网站频繁的IP

时间:2024-08-28 12:53:38浏览次数:5  
标签:iptables Shell grep IP ABNORMAL DATE INPUT

场景

恶意访问,安全防范

1)屏蔽每分钟访问超过200的IP

方法1:根据访问日志(Nginx为例)

#!/bin/bash  
DATE=$(date +%d/%b/%Y:%H:%M)  
ABNORMAL_IP=$(tail -n5000 access.log |grep $DATE |awk '{a[$1]++}END{for(i in a)if(a[i]>100)print i}')  
#先tail防止文件过大,读取慢,数字可调整每分钟最大的访问量。awk不能直接过滤日志,因为包含特殊字符。  
for IP in $ABNORMAL_IP; do  
    if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then  
        iptables -I INPUT -s $IP -j DROP    fidone  

方法2:通过TCP建立的连接

!/bin/bash

ABNORMAL_IP=$(netstat -an |awk '$4~/:80$/ && $6~/ESTABLISHED/{gsub(/:[0-9]+/,"",$5);{a[$5]++}}END{for(i in a)if(a[i]>100)print i}')

gsub是将第五列(客户端IP)的冒号和端口去掉

for IP in $ABNORMAL_IP; do
if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then
iptables -I INPUT -s $IP -j DROP
fi
done

2)屏蔽每分钟SSH尝试登录超过10次的IP

方法1:通过lastb获取登录状态:

微信搜索公众号:架构师指南,回复:架构师 领取资料 。

#!/bin/bash  
DATE=$(date +"%a %b %e %H:%M") #星期月天时分  %e单数字时显示7,而%d显示07  
ABNORMAL_IP=$(lastb |grep "$DATE" |awk '{a[$3]++}END{for(i in a)if(a[i]>10)print i}')for IP in $ABNORMAL_IP; do  
    if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then  
        iptables -I INPUT -s $IP -j DROP    fidone  

方法2:通过日志获取登录状态

#!/bin/bash  
DATE=$(date +"%b %d %H")  
ABNORMAL_IP="$(tail -n10000 /var/log/auth.log |grep "$DATE" |awk '/Failed/{a[$(NF-3)]++}END{for(i in a)if(a[i]>5)print i}')"  
for IP in $ABNORMAL_IP; do  
    if [ $(iptables -vnL |grep -c "$IP") -eq 0 ]; then  
        iptables -A INPUT -s $IP -j DROP          
        echo "$(date +"%F %T") - iptables -A INPUT -s $IP -j DROP" >>~/ssh-login-limit.log      
    fi  
done

标签:iptables,Shell,grep,IP,ABNORMAL,DATE,INPUT
From: https://www.cnblogs.com/o-O-oO/p/18384437

相关文章

  • 【Shell脚本】根据web访问日志,封禁请求量异常的IP,如IP在半小时后恢复正常,则解除封禁
    #!/bin/bash#####################################################################################根据web访问日志,封禁请求量异常的IP,如IP在半小时后恢复正常,则解除封禁####################################################################################lo......
  • 【Shell脚本】判断用户输入的是否为IP地址
    方法1:#!/bin/bashfunctioncheck_ip(){IP=$1VALID_CHECK=$(echo$IP|awk-F.'$1<=255&&$2<=255&&$3<=255&&$4<=255{print"yes"}')ifecho$IP|grep-E"^[0-9]{1,3}\.[0-9]{1,3}\......
  • 【Shell脚本】用户猜数字
    #!/bin/bash#脚本生成一个100以内的随机数,提示用户猜数字,根据用户的输入,提示用户猜对了,#猜小了或猜大了,直至用户猜对脚本结束。#RANDOM为系统自带的系统变量,值为0‐32767的随机数#使用取余算法将随机数变为1‐100的随机数num=$[RANDOM%100+1]echo"$n......
  • 【Shell脚本】批量修改文件名
    示例:#toucharticle_{1..3}.html#lsarticle_1.htmlarticle_2.htmlarticle_3.html把article改为bbs方法1:forfilein$(ls*html);domv$filebbs_${file#*_}#mv$file$(echo$file|sed-r's/.*(_.*)/bbs\1/')#mv$file$(ec......
  • 【Shell 脚本】检测两台服务器指定目录下的文件一致性
    #!/bin/bash######################################检测两台服务器指定目录下的文件一致性######################################通过对比两台服务器上文件的md5值,达到检测一致性的目的dir=/data/webb_ip=192.168.88.10#将指定目录下的文件全部遍历出来并......
  • 【Shell脚本】定时清空文件内容,定时记录文件大小
    #!/bin/bash#################################################################每小时执行一次脚本(任务计划),当时间为0点或12点时,将目标目录下的所有文件内#容清空,但不删除文件,其他时间则只统计各个文件的大小,一个文件一行,输出到以时#间和日期命名的文件中,需要考虑目标目录......
  • 【Shell脚本】检测网卡流量,并按规定格式记录在日志中
    #!/bin/bash########################################################检测网卡流量,并按规定格式记录在日志中#规定一分钟记录一次#日志格式如下所示:#2019-08-1220:40#ens33input:1234bps#ens33output:1235bps######################################......
  • 毕业设计——基于IPSec VPN的高可靠性中学校园网络设计与实现
    ​​​​​​​目录文章目录摘要1前言1.1研究背景 1.2国内外研究现状 1.3设计方法与思路 1.3.1设计方法2.需求分析2.1用户及网络需求分析2.1.1网络需求分析2.1.2用户信息需求2.1.3业务需求分析2.1.4应用需求分析2.2可行性分析 2.3现状分析 ......
  • 如何在 JMeter 中用前置处理器BeanShell PreProcessor获取系统当前日期?
    一、导读最近,艾兜兜儿正在用JMeter做压力测试和性能测试,接口测试字段需要日期,手动修改太麻烦,就想着自动获取系统当前日期,于是,就有了本文。来,和艾兜兜儿一起学习如何用 BeanShellPreProcessor获取自动日期吧。二、BeanShellPreProcessor获取系统当前日期操作流程:......
  • OpenCV Mat和IplImage访问像素的方法总结
    在opencv的编程中,遍历访问图像元素是经常遇到的操作,掌握其方法非常重要,无论是Mat类的像素访问,还是IplImage结构体的访问的方法,都必须扎实掌握,毕竟,图像处理本质上就是对像素的各种操作,访问元素就是各种图像处理算法的第一步。首先先看看图像的是怎么存储的。单通道图像多......