如何将地址列表动态加载到 iptables 中?

Aji*_*ian 4 iptables

现在,我想为 iptables 动态加载一个 ip 列表文件。ip 列表文件是接受主机,默认为 drop 。例子,

iptables -A INPUT -p tcp --dport 1111 -s 2.2.2.2 -j ACCEPT
iptables -A INPUT -p tcp --dport 1111 -j DROP
iptables -A INPUT -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

我的意思是为某个人打开一个端口,但是ip列表是动态的,我是否可以像下面那样做,

iptables -A INPUT -p tcp --dport 1111 -s ip-list-file -j ACCEPT
iptables -A INPUT -p tcp --dport 1111 -j DROP
iptables -A INPUT -j ACCEPT

ip-list-file:
2.2.2.2
3.3.3.3 
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?谢谢你 。

==========================================

我看Iptables 规则有时会自动重置,我可以使用 -I,将规则插入链的头部。如何实现动态加载ip列表文件?

mgo*_*ven 5

您不能简单地为-s参数提供文件名。如果你只有几个地址(10s左右),可以用一个脚本来添加多个规则:

while read IP; do
    iptables -A INPUT -p tcp --dport 1111 -s $IP -j ACCEPT
done < ip-list-file
Run Code Online (Sandbox Code Playgroud)

如果你有很多地址,你应该使用ipset机制:

ipset create list0 iphash
while read IP; do
    ipset add list0 $IP
done < ip-list-file
iptables -A INPUT -p tcp --dport 1111 -m set --match-set list0 src
Run Code Online (Sandbox Code Playgroud)