Iptables
如何禁止區域網路內的PC進行DNS查詢?(在 PC -> VPN 網關場景中)
場景:我有 2 台 pc 在區域網路中通過乙太網相互連接,其中一台配置為網關,將另一台 pc 的流量通過隧道傳輸到 vpn 服務。一切似乎都有效。流量通過 vpn 服務進行隧道傳輸,當網關連接到 vpn 時,我也沒有 dns 洩漏。但是,如果我斷開 vpn 連接,那麼我本地網路上的另一台 pc 仍然可以以某種方式進行 dns 查詢,即使它無法與網際網路建立其他連接。
我怎樣才能避免這種情況發生?只有在建立 vpn 連接時才允許進行 dns 查詢。編輯:(並且僅通過vpn的dns伺服器。我相信,即使我在網關上配置了bind9伺服器,我也會在斷開vpn後立即通過我的isp的dns伺服器發出dns請求。雖然我可能是錯的。)
我在網關上所做的如下:我設置了 ipv4 轉發和一些 iptables 規則
sudo iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE sudo iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT sudo iptables -A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
我還安裝了一個 bind9 伺服器並將其配置為將 dns 查詢轉發到 vpns dns(因為我有 dns 洩漏)
我的猜測是我必須丟棄所有不遵守上述規則的網路流量
例如與
sudo iptables -P FORWARD DROP sudo iptables -P INPUT DROP
但這完全打破了我的聯繫。有任何想法嗎?
丟棄所有不進入 VPN 的 DNS 查詢。DNS 可以使用 UDP 埠 53 或 TCP 埠 53。
iptables -A FORWARD -i eth0 ! -o tun0 -p udp --dport 53 -j DROP iptables -A FORWARD -i eth0 ! -o tun0 -p tcp --dport 53 -j DROP
所有來自並希望通過除目標埠 53
eth0
以外的介面離開的數據包都將被丟棄。tun0
您可能希望在丟棄之前記錄數據包以分析它們。
您可能想要使用
REJECT
,而不是DROP
讓客戶知道不要等待答案。您可能希望丟棄或拒絕所有數據包,而不僅僅是埠 53,以阻止任何流量。