2016年7月

一篇 Nginx DDos 防护脚本

参考网上的一些工具写的初始版本, 不过还蛮好用的,

就是容易误杀, 而且需要手动启动和配置. 

主题思路: 当 WEB 被打死之后会记录每条访问日志, 

    通过分析错误日志统计访问次数最多的IP然后 gank 他.

运行环境: Linux + ROOT权限

备注: awk '{print $19}' 这个 $19 代表着 IP 在错误日志中出现的位置, 

    如果日志的格式为 127.0.0.1 2016年7月31日 ...

    那么这个 $19 就要修改为 $1,是按照空格来区分的,

    如果要以 ',' 来区分的话. 把 awk '{print $19}' 修改为 awk -F ',' '{pring $19}' 即可


#!/bin/bash
#author: a.tm.k
#site: http://sys7em.info
# 通过监控 nginx 的服务器 error 日志发现 ddos 然后自动屏蔽攻击 IP
logFile=/var/log/nginx/web-error.log  // WEB 错误日志
tempMaxIp='0.0.0.0'
function checkIp(){
	maxIp=`tail -n 200 ${logFile}|awk '{print $19}'|sort|uniq -c|sort -n -k 1 -r|head -n 1|awk '{print $2}'`
	maxIp=${maxIp%,*}
	if [[ $tempMaxIp != $maxIp ]]; then
		iptables -A INPUT -s ${maxIp} -j DROP
		echo "Attack Ip ===> ${maxIp} As Join BlackList"
		tempMaxIp=$maxIp
#	else
#		echo "Attack Ip ===> ${maxIp} Is In BlackList"
	fi
}
function main(){
	while true
	do
	checkIp
	sleep 5
	done
}
main