在写iptables规则的时候

  • 有些时候会有比较多的ip地址需要维护
  • 并且,有很多时候都是到达相同的目标端口的
  • 经常需要改写iptables规则,是不是觉得有些繁琐呢?

我们可以通过ipset来简化这一工作。

1. 安装ipset

1
yum install -y ipset

2. 创建一个onething.set文件

3. 创建一个hashset并导入办公网出口IP地址

1
2
ipset -R < onething.set
ipset list onething

4. iptables规则只需要一行

那么写iptables的时候,可以简化为:

-A RH-Firewall-1-INPUT -p tcp -m set --match-set onething src -m multiport --dports 2200,2201,2202 -j ACCEPT

提示:当你使用ipset -A onething 111.222.233.244/32这样子的命令行去添加一个ip的时候,并不需要重启iptables也会生效,这个对于动态控制IP访问来说很非常有用~

5. 设定开机自动恢复ipset

到目前为止,所有的ipset设定都只是在运行在内存中,一旦重启就失效了。 可以通过写一个systemd的形式去实现它

文件:/etc/systemd/system/ipset.service

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[Unit]
Description=ipset persistent rule service
Before=iptables.service
ConditionFileNotEmpty=/etc/sysconfig/ipset
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/sbin/ipset -exist -file /etc/sysconfig/ipset restore
ExecStop=/usr/sbin/ipset -file /etc/sysconfig/ipset save
[Install]
WantedBy=multi-user.target

允许开机执行:

1
2
systemctl daemon-reload
systemctl enable ipset

6)当前的规则写入文件

1
/usr/sbin/ipset -file /etc/sysconfig/ipset save

搞定,Enjoy。