使用 iptables 配置 NAT 过滤行为

使用 iptables 配置 NAT 过滤行为

我使用此规则来配置 SNAT:

iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 193.49.142.107:4000

我想指定一个规则来过滤掉不是发往发起会话的内部地址和端口的数据包。此外,为了从特定外部端点接收数据包,内部端点必须首先将数据包发送到该特定外部端点的 IP 地址。(NAT 地址相关过滤)

例子:

位于 NAT 后面的具有内部 IP 和端口 (X:x) 的计算机打开与 IP Y 的服务器的连接。因此,根据规则,我必须能够仅允许来自 IP 地址 Y 且发往 (X: X)。所有其他连接都将被删除。

答案1

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -P FORWARD -j DROP
iptables -A FORWARD -o eth1 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -m state --state ESTABLISHED -j ACCEPT

这些规则有什么作用?

  1. -A POSTROUTING -o eth1 -j MASQUERADE当数据包离开您的网络时隐藏您的内部 IP
  2. -P FORWARD -j DROP将 FORWARD 链的默认策略设置为 DROP
  3. -A FORWARD -o eth1 -m state --state NEW,ESTABLISHED -j ACCEPT允许新的和已建立的 FORWARD 连接出去
  4. -A FORWARD -i eth1 -m state --state ESTABLISHED -j ACCEPT只允许建立 FORWARD 连接

上述规则假设您使用此设备作为网关/防火墙,连接eth1到您的 WAN 并eth0连接到您的 LAN。

补充阅读:后路由和 IP 伪装

编辑

要配置“条件”端口转发:

按源端口

iptables -A PREROUTING -t nat -i eth1 -p tcp --sport [trusted_source_port] --dport [external_port] -j DNAT --to [internal_ip]:[internal_port]
iptables -A FORWARD -p tcp -d [internal_ip] --dport [internal_port] -j ACCEPT

按源IP

iptables -A PREROUTING -t nat -i eth1 -p tcp -s [trusted_source_ip] --dport [external_port] -j DNAT --to [internal_ip]:[internal_port]
iptables -A FORWARD -p tcp -d [internal_ip] --dport [internal_port] -j ACCEPT

相关内容