我使用此规则来配置 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
这些规则有什么作用?
-A POSTROUTING -o eth1 -j MASQUERADE
当数据包离开您的网络时隐藏您的内部 IP-P FORWARD -j DROP
将 FORWARD 链的默认策略设置为 DROP-A FORWARD -o eth1 -m state --state NEW,ESTABLISHED -j ACCEPT
允许新的和已建立的 FORWARD 连接出去-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