如何编写 IPTables 策略来影响组中的多个范围?

如何编写 IPTables 策略来影响组中的多个范围?

我正在尝试在所有端口上阻止整个互联网,但允许多个范围在特定端口上连接。我希望此规则集也适用于出站连接(使用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

相关内容