iptables-ipset仅允许国内访问---端口白名单

11 篇文章 0 订阅
2 篇文章 0 订阅

前言:

境外肉鸡攻击有点多,并业务无境外访问需求,IDC机房网络防火墙无法实现8K多条的china大陆地址导入;为实现仅china大陆地址访问,在业务端口如这里的80,使用iptables防火墙+ipset过滤实现访问控制,对于访问量不大的业务可考虑使用。

如需简单快捷的方式,搜本博“以错误路由方式禁止境外IP来访”篇 (缺点:主机也无法主动请求境外目标了)

创建ipset得到的备份文件,便于批量添加8k条地址

创建一个ipset

ipset create whitelist hash:net maxelem 1000000

加入一个名单ip

ipset add whitelist 9.9.9.9

查看已经ipset配置内容

ipset list

Name: whitelist
Type: hash:net
Revision: 3
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 16816
References: 0
Members:
9.9.9.9

将ipset规则保存到文件

ipset save whitelist -f whitelist.txt

查看备份内容

more whitelist.txt

create whitelist hash:net family inet hashsize 1024 maxelem 1000000
add whitelist 9.9.9.9

下载china大陆地址集合并处理格式

curl -# -O http://ftp.apnic.net/stats/apnic/delegated-apnic-latest

cat delegated-apnic-latest | awk -F '|' '/CN/&&/ipv4/ {print $4 "/" 32-log($5)/log(2)}'|cat >ip.txt

head -n 2 ip.txt

1.0.1.0/24
1.0.2.0/23

设置符合ipset备份文件格式

sed 's/^/&add whitelist /g' ip.txt > add-ip.txt

cat add-ip.txt >> whitelist.txt; cp whitelist.txt china_whitelist.txt

head -n 4 china_whitelist.txt

create whitelist hash:net family inet hashsize 1024 maxelem 65536
add whitelist 9.9.9.9
add whitelist 1.0.1.0/24
add whitelist 1.0.2.0/23

先删除前面创建的ipset

ipset destroy whitelist

导入ipset规则

ipset restore -f china_whitelist.txt

查看目前应用的ipset内容

ipset list | head -n 12

Name: whitelist
Type: hash:net
Revision: 3
Header: family inet hashsize 2048 maxelem 1000000
Size in memory: 126736
References: 0
Members:
202.118.64.0/18
223.212.0.0/15
103.217.56.0/22
150.242.184.0/22
43.246.76.0/22

去除名单ip

ipset del whitelist 9.9.9.9

导入完毕

禁用centos7firewalld,安装iptables

systemctl stop firewalld

systemctl disable firewalld

yum -y install iptables-services

systemctl start iptables

systemctl enable iptables

操作

service iptables status

service iptables stop

service iptables restart

iptables -F

先放行SSH,以免无法远程

iptables -I INPUT -p tcp --dport 22 -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

service iptables save

应用ipset规则实现端口访问白名单,禁止境外ip

iptables -A INPUT -p tcp --dport 80 -j DROP
iptables -I INPUT -m set --match-set whitelist src -p tcp --dport 80 -j ACCEPT

iptables -L -n

使用国内与境外地址分别测试通达性

curl -I http://ip+端口

如实现预期,保存规则永久生效

service iptables save

reboot重启ipset集合消失,并且导致iptables启动失败

因创建的 ipset 存于内存中

解决:

yum -y install ipset-service

systemctl enable ipset

ipset restore -f china_whitelist.txt

service ipset save

sed -i 's/IPSET_SAVE_ON_STOP="no"/IPSET_SAVE_ON_STOP="yes"/' /etc/sysconfig/ipset-config

带时间的玩法

创建默认ip生效时间为1天的ipset集合

ipset create timeout_list hash:net timeout 86400

ipset add timeout_list 1.9.9.9 #继承集合默认生存时间

ipset add timeout_list 2.9.9.9 timeout 3600 #生存时间为1小时

ipset add timeout_list 3.9.9.9 timeout 0 #生效时间无限

查看

ipset list timeout_list

Name: timeout_list
----
Header: family inet hashsize 1024 maxelem 65536 timeout 86400
----(像redis一样显示时间倒计时)
1.9.9.9 timeout 86372
3.9.9.9 timeout 0
2.9.9.9 timeout 3572
删除iptables规则

iptables -L -n --line-numbers

iptables -D INPUT 号码

删除ipset异常

ipset destroy whitelist

ipset v7.1: Set cannot be destroyed: it is in use by a kernel component

尝试清空ipset的ip条目再删除

ipset flush 清空成功,但删除操作还是失败

尝试关闭iptables再删除ipset

service iptables stop

ipset destroy whitelist

删除成功

ipset restore -f china_whitelist.txt

service iptables restart

添加连续ip范围到集合

ipset add a_list 1.1.2.1-1.1.2.64

ipset list a_list

Name: a_list
Members:
1.1.2.2/31
1.1.2.1
1.1.2.16/28
1.1.2.32/27
1.1.2.64
1.1.2.8/29
1.1.2.4/30

详细应用移步

参考文献

ipset详解 使用ipset提高iptables的控制效率 - 快乐嘉年华 - 博客园

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值