使用 iptables 設定 NAT 過濾行為

使用 iptables 設定 NAT 過濾行為

我使用此規則來配置 SNAT:

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

我想指定一個規則來過濾掉不是發送到發起會話的內部位址和連接埠的封包。此外,為了從特定外部端點接收封包,內部端點必須先將封包傳送到該特定外部端點的 IP 位址。

例子:

位於 NAT 後面的具有內部 IP 和連接埠 (X:x) 的電腦開啟與 IP Y 的伺服器的連線。所有其他連接都將被刪除。

答案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

相關內容