我有一个网络拓扑:
[C1]-[R1]-[R2]-[C2]
C1-R1 网络为 192.168.100.0/24
R1-R2 网络为 10.9.8.0/30
R2-C2 网络为 192.168.200.0/24
我需要做的是通过将一些 iptables 规则应用到 R2 来使 C2 能够连接到 C1。同时我不希望 C1 连接到 C2。我尝试创建一些 FORWARD 链规则,但就是无法使其正常工作。
有没有简单的方法可以让它工作?
以下是 iptables -L -v 的内容:
链输入(策略丢弃 5 个数据包,372 字节)
数据包字节目标协议选择加入退出源目标
链转发(策略丢弃 4 个数据包,240 字节)
数据包字节目标协议选择加入退出源目标
5 420 拒绝所有 -- 任何 enp0s3 任何位置任何位置
状态 NEW 拒绝 - 带有 icmp 端口不可达
链输出(策略丢弃 5 个数据包,560 字节)
数据包字节目标协议选择加入退出源目标
答案1
尝试状态或 conntrack 模块。
iptables -A FORWARD -o $IFACE -m state --state NEW -j REJECT
$IFACE
R2 上连接 C2 的接口在哪里。
这样,来自 C1 的建立新连接的数据包将被拒绝。从 C2 到 C1 的数据包不受此规则影响。
编辑:由于您的 FORWARD 链具有策略 DROP,因此您还需要允许数据包向相反方向传输的规则,例如:
iptables -A FORWARD -i $IFACE -j ACCEPT
iptables -A FORWARD -o $IFACE -m state ! --state NEW -j ACCEPT