自动屏蔽一些恶意IP

本文最后更新于2014年7月5日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

之前看到过一篇文章:VPS 屏蔽扫描网站的IP 里面讲了一些VPS如何屏蔽恶意IP的访问的方法和技巧,比较受用,但是其中提到的那个Perl脚本不知道是不是我对Perl不够熟悉导致不会配置的原因,在我这儿没什么效果{当然也和我这blog本来就没什么人会来恶意攻击有关,因为不值得浪费攻击资源在我这小blog上,o(╯□╰)o},而我自己也一直想写个脚本实现和之前的屏蔽指定国家的IP的功能,不过一直没找到切入点和方法,后来在我经常使用的用awk统计命令top10的时候想到了方法,再加上慢慢搜索awk的一些编程范例,折腾了一下就出了个大概的方案,感觉还行,但现在没这条件测试(没攻击流量过来,当然我也不希望有,感谢大家也不这么做),先放脚本上来吧:

#!/bin/bash

IPTABLES=/sbin/iptables
log_file = "/path/to/access.log"
error_block = 10
expire_time = 7200

#tail --follow=$log_file
awk '/ 404 /{status404[$1]++}; END {for (IP in status404) print status404[IP]"t", IP}' $log_file | sort -nr | awk '{if($1>$error_block) {print $2}}' | tee 404_ipList.txt

for ip in 404_ipList.txt
do
	echo "blocking $ip"
	$IPTABLES -A INPUT -s $ip -j DROP
done

# after $expire_time seconds, you can empty the 404_ipList.txt

#---------------------------#
#awk '{if($9 ~ /404/){status404[$1]++}} END {for (IP in status404) print status404[IP]"t", IP}' $log_file | sort -nr | awk '{if($1>$error_block) {print $2}}' | tee 404_ipList.txt

#awk '{if($9==404){status404[$1]++}} END {for (IP in status404) print status404[IP]"t", IP}' $log_file | sort -nr | awk '{if($1>$error_block) {print $2}}' | tee 404_ipList.txt
过程中出现的一些问题:

awk ‘if($9==404){status404[$1]++}; END {for (IP in status404) print status404[IP]”t”, IP}’ /path/to/access.log | sort -nr | awk ‘{if($1>10) {print $2}}’ | tee 404_ipList.txt

在执行上面的命令时总是报错:
awk: ^ syntax error

后来我到处找awk的if语句的语法,对比了一下也没发现明显的错误(当然也和别处没有直接对应的例子有关),然后我试着对这个if判断语句及后面的操作这一整体添加大括号,果然就没事了,看来良好的编程习惯真的是有助于减少错误的概率啊!
awk ‘{if($9==404){status404[$1]++}} END {for (IP in status404) print status404[IP]”t”, IP}’ /path/to/access.log | sort -nr | awk ‘{if($1>10) {print $2}}’ | tee 404_ipList.txt

====

改进了之后的一个版本(添加了一个白名单):
#!/bin/bash

IPTABLES=/sbin/iptables
log_file = "/path/to/access.log"
error_block = 10

#tail --follow=$log_file
awk '/ 404 /{status404[$1]++}; END {for (IP in status404) print status404[IP]"t", IP}' $log_file | sort -nr | awk '{if($1>$error_block) {print $2}}' | tee 404_ipList.txt

whitelist=$(last | grep -Ev '^$|mosh|reboot|wtmp' | awk '{print $3}' | sort | uniq | xargs)

for ip in 404_ipList.txt
do
	if ! $(echo ${whitelist} | grep -wq ${ip}); then
		echo "blocking ${ip}"
		$IPTABLES -I INPUT -s ${ip}/32 -p tcp -m tcp --dport 80 -j DROP
	fi
done
一些参考资料:

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/411.html

《自动屏蔽一些恶意IP》上的3个想法

  1. Pingback: awk学习_2 | ASPIRE
  2. 每周业务情报|黑产新工具之IP魔盒:IP攻防新挑战
    https://mp.weixin.qq.com/s/Mn2jjpDirD1hJfxIrfu1Ng
    `
    众所周知,IP资源是黑产进行规模化攻击的核心资源,在永安在线的过往报告中大量讨论了黑产为了绕过IP检测,使用代理IP、秒拨IP等技术进行攻击。

    根据永安在线长期的研究,得知这类IP本质上还是家庭宽带、数据中心等IP,通过一定的技术手段,在一定时间内都可以将IP和设备进行关联标记。

    但随着攻防对抗的升级,黑产将视线转移到更为隐蔽的基站IP上。近日,永安在线发现一款可让PC设备使用基站IP的工具,黑产称它为“IP魔盒”。

    我们总结了IP魔盒拥有以下特征:
    1) 关联用户多:一个基站IP背后会关联着大量的用户群体,如果对IP进行拦截,极易误杀正常用户,影响用户体验,导致用户流失。
    2) 切换IP简单:仅需要通过打开关闭飞行模式,即可实现IP切换。
    3) 成本较低:据我们统计一般全国物联网卡,开卡价格为4-6元,10G流量价格仅需要15元。
    4) 海量IP池:经测试一张全国物联网卡可以获取至少17个段的IP,且分布在不同的地区。

    因为IP魔盒获取IP的特殊方式,它在IP量、攻击效率、价格成本、检测方式、部署成本各个方面都大大优于秒拨IP和代理IP。
    `

发表评论

邮箱地址不会被公开。 必填项已用*标注