![如何编写 IPTables 策略来影响组中的多个范围?](https://linux22.com/image/677012/%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%20IPTables%20%E7%AD%96%E7%95%A5%E6%9D%A5%E5%BD%B1%E5%93%8D%E7%BB%84%E4%B8%AD%E7%9A%84%E5%A4%9A%E4%B8%AA%E8%8C%83%E5%9B%B4%EF%BC%9F.png)
我正在尝试在所有端口上阻止整个互联网,但允许多个范围在特定端口上连接。我希望此规则集也适用于出站连接(使用REJECT
而不是DROP
),以防止身份攻击。
*filter
# Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT
# Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow all network traffic
-A INPUT -s 192.168.0.0/24 -j ACCEPT
-A INPUT -d 192.168.0.0/24 -j ACCEPT
# Allow all SSH
-A INPUT -p tcp --dport 22 -j ACCEPT
# Permitted web connections
-A INPUT -s 8.4.0.0/24 -p tcp --dport http -j ACCEPT
-A INPUT -s 8.8.0.0/24 -p tcp --dport http -j ACCEPT
-A INPUT -s 8.4.0.0/24 -p tcp --dport https -j ACCEPT
-A INPUT -s 8.8.0.0/24 -p tcp --dport https -j ACCEPT
-A OUTPUT -s 8.4.0.0/24 -p tcp --dport http -j ACCEPT
-A OUTPUT -s 8.8.0.0/24 -p tcp --dport http -j ACCEPT
-A OUTPUT -s 8.4.0.0/24 -p tcp --dport https -j ACCEPT
-A OUTPUT -s 8.8.0.0/24 -p tcp --dport https -j ACCEPT
# Reject all web not to or from a safe server
-A INPUT -p tcp --dport http -j DROP
-A INPUT -p tcp --dport https -j DROP
-A OUTPUT -p tcp --dport http -j REJECT
-A OUTPUT -p tcp --dport https -j REJECT
# Drop all other inbound - default deny unless explicitly allowed
-A INPUT -j DROP
-A FORWARD -j DROP
COMMIT
我的非常严格的策略的缺点是添加额外范围的冗长。每个范围需要四行策略才能起作用。入站/HTTP、入站/HTTPS、出站/HTTP、出站/HTTP。保持直截了当非常麻烦。
我希望它是这样的:
# Pseucode
*group webservers
8.8.0.0/24
8.4.0.0/24
*filter
-A INPUT -s webservers -p tcp --dport http -j ACCEPT
-A INPUT -s webservers -p tcp --dport http -j ACCEPT
-A OUTPUT -s webservers -p tcp --dport http -j ACCEPT
-A OUTPUT -s webservers -p tcp --dport http -j ACCEPT
有没有简单的方法可以实现这一点?
答案1
你可能想尝试使用ipset
如果你想
- 一次性存储多个IP地址或端口号,并通过iptables进行集合匹配;
- 动态更新针对 IP 地址或端口的 iptables 规则,而不会影响性能;
- 使用单个 iptables 规则表达基于复杂 IP 地址和端口的规则集,并受益于 IP 集的速度
那么 ipset 可能是适合您的工具。
值得注意的是:
IP 集是 Linux 内核中的一个框架,可以通过 ipset 实用程序进行管理
是的,该网站看起来好像自 1996 年以来就没有更新过。出于某种原因,计算机安全新闻来源和低级软件/固件项目网页看起来很多都是那样的。
答案2
您还可以尝试将来自特定范围的所有流量发送到自定义链,然后每个与端口相关的接受都变成一行:
iptables -N CUSTOM
iptables -I INPUT 1 -s 8.4.0.0/24 -j CUSTOM
iptables -I INPUT 2 -s 8.8.0.0/24 -j CUSTOM
etc.
iptables -A CUSTOM - p tcp --dport 80 -j ACCEPT
iptables -A CUSTOM - p tcp --dport 443 -j ACCEPT
etc.
CUSTOM
发送到链中的不匹配的源范围的数据包将与所有其余不需要的流量ACCEPT
一起返回到INPUT
链进行处理(即ping)。DROP