美文网首页
使用IPtables+IPset屏蔽禁止国外IP访问-与脚本小子

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

作者: Raymond_Zhou | 来源:发表于2019-07-14 18:12 被阅读0次

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

    前言

    近期笔者在东南沿海某数据中心托管的服务器上经常出现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
    

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/hcjikctx.html