我目前已ipv4.ip_forward
启用在多个接口之间路由数据包。
我现在将系统扩展到 8 个接口,但我想限制接口/地址之间的路由。
一种选择是使用firewalld
,但我将其部署在旧版本的 RH 上,因此可以通过iptables
.
答案1
实际上iptables
非常适合限制这一点。这筛选允许或阻止数据包的表具有三个链。在每个链中,可以定义规则来匹配数据包,并在数据包匹配时触发操作。数据包匹配的规则链取决于数据包相对于正在iptables
运行的主机的方向:
INPUT
:发往本地主机的传入数据包OUTPUT
:来自本地主机的传出数据包FORWARD
:发往其他主机且需要转发的数据包
现在,例如,如果要转发一个数据包,并且在链中没有与其匹配的规则FORWARD
,则将根据政策在此链上设置,默认为:ACCEPT
。数据包将被允许通过。此命令将显示策略和规则(如果定义了其中任何一个):
iptables -t filter -vnL
该表使用 指定-t <table>
,filter
如果未指定,则为默认表,因此以下命令等效:
iptables -vnL
要阻止所有数据包转发,该链上的策略可以设置为REJECT
或DROP
如下
iptables -P FORWARD REJECT
FORWARD
现在,如果链中没有规则明确接受所有要转发的数据包,它们都会被拒绝。
对于内部流量,您可能需要一个REJECT
策略。这将立即通知客户端路径已关闭。您可能需要DROP
针对来自外部网络的流量制定规则。
为了明确允许某些数据包通过,规则被附加到这些链中,这些链按照定义这些规则的顺序与数据包进行匹配。例如,允许所有进入eth0
并基于路由的流量转发到eth1
:
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
例如,仅允许来自10.0.0.0/24
子网的数据包以相反方向通过:
iptables -A FORWARD -i eth1 -o eth0 -s 10.0.0.0/24 -j ACCEPT
有关所有参数的详细说明,请参阅iptables 联机帮助页和iptables 扩展联机帮助页。