之前看到过一篇文章: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
一些参考资料:
- Shell编程-awk – perlman – 博客园 http://www.cnblogs.com/softwaretesting/archive/2012/02/02/2335332.html
- AWK 简明教程 | 酷 壳 – CoolShell.cn http://coolshell.cn/articles/9070.html
- linux shell awk 流程控制语句(if,for,while,do)详细介绍http://www.cnblogs.com/chengmo/archive/2010/10/04/1842073.html
- linux awk 内置函数详细介绍(实例)http://www.cnblogs.com/chengmo/archive/2010/10/08/1845913.html
每周业务情报|黑产新工具之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。
`