使用IPtables+IPset屏蔽禁止国外IP访问-与脚本小子SayGoodBye

作者博客上的地址:点击此处

前言

近期笔者在东南沿海某数据中心托管的服务器上经常出现ssh爆破登陆警告,Nginx日志中也出现不少脚本小子的试探痕迹。虽然不对安全构成太大的威胁,但看起来实在难受。与托管方联系,对方称今年6月后不再提供路由保护 ::aru:unhappy::

无奈只能自己动手,丰衣足食。

屏蔽思想

从APNIC处获取全球IPv4数据,使用IPtables添加CN部分IP到ACCEPT规则中,其余DROP。因为逐条添加和加载文件会造成IPtables规则数过多,影响大并发性能,故转为使用IPset构建IP集合。

具体操作(以CentOS6为例)

安装IPset

直接使用yum install ipset安装即可

使用IPSet创建IP集合

ipset create mainland hash:net maxelem 65536
其中mainland是自己定义的IP集合名称,可修改成你自己的名称

编写脚本自动执行更新APNIC数据到IP集合

脚本内容如下

#!/usr/bin/env bash
wget --no-check-certificate -O- 'http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest' | awk -F\| '/CN\|ipv4/ { printf("%s/%d\n", $4, 32-log($5)/log(2)) }' > /home/mainland.txt
ipset flush mainland
while read ip; do
    ipset add mainland $ip
done < /home/mainland.txt
ipset save chnroute > /home/mainland.conf

假设脚本保存在/home/mainland.sh
给可执行权限chmod +x /home/mainland.sh

设置Crontab定时每天零点更新一次IP集合

crontab -e
添加一行
0 0 * * * /home/mainland.sh

配置IPtables限制访问

假设需要放通8888端口的TCP和UDP大陆访问

iptables -A INPUT -m set --match-set mainland src -p tcp --dport 8888 -j ACCEPT
iptables -A INPUT -m set --match-set mainland src -p udp --dport 8888 -j ACCEPT
iptables -A INPUT -p tcp --dport 8888 -j DROP
iptables -A INPUT -p udp --dport 8888 -j DROP
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 项目上线之后,经常会被一些爬虫盯上,这些IP产生大量高频请求,导致带宽流量异常,对服务器造成负荷。针对这种问题可以...
    BrainYi阅读 2,585评论 0 51
  • ipset是什么?ipset是iptables的扩展,它允许你创建 匹配整个地址集合的规则。而不像普通的iptab...
    化城阅读 2,513评论 0 0
  • 提起老友,我不禁想起平明,我的初中同学,已是一位故友。 一起读初中时,我们是同桌。当时在农村,平明家境算比较好的了...
    种豆南山上阅读 484评论 0 8
  • 雷泼莱拉 她有一个平民的名字,叫克莱岑莎-安娜-阿罗依佳-冯肯胡泊,今年三十九岁,生在齐勒塔尔一个小山村里,是个...
    精神灿烂阅读 615评论 0 0
  • ...。。。...。。。...
    延小狼阅读 116评论 0 0