Iptables

使用 iptables 設置 firwall 以僅允許 VPN

  • September 21, 2016

我將 IPredator VPN 與 openVPN 一起使用,我想確保如果連接斷開,我不會在沒有 VPN 的情況下從網際網路送出數據。我聽說我可以用 iptables 和一個範圍來做到這一點。我怎樣才能做到這一點?以及如何找出我的 VPN 分配給我的 IP 範圍?

在開始您的 VPN 之前,請先複製netstat -rnifconfig -a. 啟動您的 VPN,這兩個命令的差異將告訴您 VPN 根據路由創建哪些網路,以及為您分配了哪些 IP 以獲得這些網路的可見性。您還需要獲取提供 VPN 的伺服器的 IP(否則VPN 伺服器的流量將無法到達)。我還假設您的 VPN 伺服器使用udp而不是tcp,如果確實使用tcp,您將需要更新第二條規則以反映這一點。

一旦你有了這些,你就可以OUTPUT在 iptables 中添加規則來設置你的主機可以看到的內容

iptables -F OUTPUT
iptables -I OUTPUT -d VPNSERVER -p udp -j ACCEPT -m comment --comment "Allow traffic to VPN SERVER"
iptables -I OUTPUT -s VPNIP -d VPNNETWORK/CIDR -j ACCEPT -m comment --comment "Allow all traffic to VPN newtork"
iptables -I OUTPUT -j DROP -m comment --comment "Drop all other traffic"

iptables -F OUTPUT刷新您現有的規則,請注意這一點,但必須按照您最初提出的問題進行操作。

VPNSERVER將是您的 vpn 伺服器的 ip。 VPNIP將是 VPN 分配給您的 IP。 VPNNETWORK/CIDR將是出現在netstat -rn類似的路由網路10.1.0.0/24

在調試這些規則時,記錄被丟棄的內容可能會很方便,因為某些協議可能需要一些額外的按摩:

iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables-Dropped: " --log-level 4 

這應該足以阻止OUTBOUND從您的 PC 到 Internet 的流量,並且只允許到 VPN 伺服器及其提供的網路的流量。

OP 指出 Arch Linux 不附帶netstator ifconfig。在這種情況下,替代方案是:

ip addr show將向您顯示界面,並向ip route show您顯示您擁有的路線。

引用自:https://unix.stackexchange.com/questions/88034