Debian

使用 iptables 進行安全 NAT 設置

  • January 27, 2016

我有一個需要充當網際網路網關的 Debian 執行設備。最重要的是,我想提供一個防火牆,它不僅可以阻止入站流量,還可以阻止出站流量。我認為 iptables 應該能夠完成這項工作。

**問題:**我已經正確配置了 NAT(我認為?),但是一旦我將預設策略設置為 DROP 並添加規則以例如允許來自 LAN 內部的 HTTP 流量,HTTP 就不會通過。所以基本上我的規則似乎不起作用。

下面是我用於 iptables 的初始化腳本。該設備有兩個網卡,分別是 eth0(WAN 介面)和 eth1(LAN 介面)。

echo 1 > /proc/sys/net/ipv4/ip_forward

# Flush tables
iptables -F
iptables -t nat -F

# Set policies
iptables -P INPUT DROP
iptables -P OUTPUT DROP

# NAT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Allow outbound HTTP from LAN? 
iptables -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT

任何人都可以對此有所了解嗎?

已解決: Mike 建議使用 telnet 和 IP 而不是域名來測試 HTTP 流量,這導致了兩個發現:DNS 無法正常工作,出站過濾也無法正常工作(我可以 telnet 到埠 8080)。

因此,首先我添加了規則以允許 LAN 客戶端使用網關的服務,例如 DNS。(是的,別擔心,我將把範圍縮小到提供的服務)

iptables -A INPUT -i eth1 -d 172.16.0.1 -j ACCEPT
iptables -A OUTPUT -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

你會認為我現在可以進行 DNS 請求了。我實際上可以,但是請求超時,因為網關本身無法執行 DNS 請求。添加了出站 DNS 規則:

iptables -A OUTPUT -o eth0 -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp --dport 53 -j ACCEPT

最後,我將FORWARD鏈的預設策略設置為DROP. 我們又回到了第一方。

當我看到 Ram 的回復建議我允許現有連接的入站流量時,我正要發布更新。我也在OUTPUT上面的鏈上應用了這個原理。

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

所以現在它似乎完全按照我想要的方式工作。完整的腳本在這裡。謝謝!

您需要允許回复您的出站請求。

在收到對評論的回復後,我打算將此添加為答案,但看起來您遵循了我的構想……我注意到您在內部界面上不允許使用 DNS。祝您的服務好運。

引用自:https://serverfault.com/questions/399458