自动禁用连接数高的IP
python代码
由于最近服务器受到大流量的攻击,于是写了该脚本。
#! /usr/bin/env python
# encoding: utf-8
import os, time
command = "/bin/netstat -antp|grep :80|awk ' ''{print $5}'|awk -F: '{print $1}'|sort -r|uniq -c|sort -n -k1 -r"
maxconn = 150
handle = os.popen(command)
for line in handle:
fields = line.strip().split(' ')
if len(fields) != 2:
continue
conn, ip = fields
# 由于我们使用的是nginx作为反向代理,访问apache,所以这里要加上127.0.0.1
if int(conn) > maxconn and ip != '127.0.0.1':
print(time.strftime('%Y-%m-%d %X'), conn, ip)
# 这里只会临时将ip拒绝,当重新启动iptables服务的时候失效
os.system('/sbin/iptables -I INPUT -s %s/24 -j DROP' % ip)
handle.close()
定时执行
将python文件加入crontab中即可。