拦截相同IP连接数过大的会话请求

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了拦截相同IP连接数过大的会话请求相关的知识,希望对你有一定的参考价值。

拦截相同IP连接数过大的会话请求


系统环境:Centos 6.5 x64


   为避免Linux主机遭受攻击,需要定时查看主机上的会话连接数。对于同一IP会话数过高的,肯定判断为不正常。可以通过shell脚本定时把不正常的IP加入进防火墙中,来DROP掉它。


[[email protected] ssh]# vi /etc/ssh/blockip


#!/bin/bash

#auto drop IP ,IP address greater than 10

#by authors evanli 2017-6-15

ip_regex="[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{1,3}"

netstat -na --tcp| grep ESTABLISHED | awk ‘{ if ( index($4,":"‘"$port_num"‘"") ) print $5}‘ | awk -F ‘:‘ ‘{print $1}‘ | sort > /var/log/IPLIST

IP_ADDR=`tail -n 100 /var/log/IPLIST | egrep -o  $ip_regex | sort -nr | uniq -c | awk ‘$1>=10 {print $2}‘`

IPTABLES_CONF=/etc/sysconfig/iptables

for i in `echo $IP_ADDR`

do

        cat $IPTABLES_CONF |grep $i >/dev/null

if

        [ $? -ne 0 ];then

        sed -i "5 a -A INPUT -s $i/32 -j DROP" $IPTABLES_CONF

else

        echo "This is $i is exist in iptables,please exit ....."

fi

done


给脚本可执行权限

[[email protected] ssh]# chmod +x /etc/ssh/blockip


添加到排程任务,每30分钟执行一次

[[email protected] ssh]# vi /etc/crontab

*/30 * * * * root /etc/ssh/blockip



脚本说明:

1、首先生成所有连接数IP的文件/var/log/IPLIST

2、在IPLIST文件中统计出现数次大于10的IP。awk ‘$1>=10 (此10数字可修成你需要的数字)

3、将出现数次大于10的IP加入到防火墙DROP掉。

4、判断防火墙中是否存在该IP,如果有了,出现提示This is IP is exist in iptables,please exit .....

5、vi /etc/sysconfig/iptables 查看DROP掉的IP是否有加入进来。

6、查检没问题,最后需要重起防火墙,设定才会生效。


附件为脚本,可以直接运行


以上脚本测试完成于2017.06.15,by evan.li



本文出自 “虚拟化应用” 博客,转载请与作者联系!

以上是关于拦截相同IP连接数过大的会话请求的主要内容,如果未能解决你的问题,请参考以下文章

Nginx限制并发连接数

redis连接数过高排查

小记TCP keepalive

服务器防止并发连接脚本(基于iptables)

如何解决memcached连接数过高导致后续连接失败的问题

ORA-12516 TNS: 监听程序找不到符合协议堆栈要求的可用处理程序