云主机被攻击,流量被占满了。
查看了nginx日志后,发现有个user agent头为test攻击
咨询了云主机那边有没有办法禁止非法user agent头,他们说不行,看来只得用服务器来禁了。
nginx配置文件里面加上,禁止非get/post/head请求
- if ($request_method !~ ^(GET|HEAD|POST)$ ) {
- return 444;
- }
不过发现这样不行,于是使用下面的方法
- if ($http_user_agent ~ "test") {
- return 403;
- }
于是好了,所有的请求变成403了
不过万一他改了test头怎么办呢,看来还得彻底一点,把肉鸡ip都给禁了
写了个deny_text.sh
- #!/bin/bash
- awk -F"-" '/test/ {print $1}' /usr/local/nginx/logs/access.log |sort -nr|uniq -c |sort -n|awk '{print $1"="$2}'>/home/fw/bad_ip_tmp.txt
- sort /home/fw/bad_ip_tmp.txt|uniq >/home/fw/bad_ip.txt
- DEFINE="2"
- for i in $(cat /home/fw/bad_ip.txt)
- do
- NUM=`echo $i |awk -F"=" '{print $1}'`
- IP=`echo $i|awk -F"=" '{print $2}'`
- if [ $NUM -ge $DEFINE ];
- then
- iptables -L -n|grep $IP > /dev/null
- if [ $? -gt 0 ];
- then
- #iptables -I INPUT -s $IP -j DROP
- iptables -A INPUT -s $IP -p tcp --dport 80 -j DROP
- fi
- fi
- done
意思是从nginx日志里面找到相关的ip,把ip记录到一个文件里。
最后开启iptables,配置一下
- /sbin/iptables -A INPUT -s 116.100.11.206 -p tcp --dport 80 -j DROP
把这些ip加进去,禁止掉80端口的访问。