使用 iptables 過濾傳入的 Strongswan VPN 數據包
我在 Debian Squeeze 機器上使用 Strongswan VPN 伺服器。傳入的 VPN 客戶端獲得 192.168.99.0/24 子網的 IP。
由於我使用此 VPN 主要是在使用未加密的 WLAN 時進行加密,因此我正在使用 iptables 對 Internet 進行源 NAT。(我更喜歡源 NATing,因為伺服器有一個靜態 ipv4 地址。)
目前我正在使用以下 iptables 命令
# used for StrongSWAN iptables -t nat -I POSTROUTING -s 192.168.99.0/24 -o eth0 -j SNAT --to-source <public IP adress of server>
我的問題是:使用此規則時,從 192.168.99.0/24 子網傳入的每個流量現在都被接受和 NAT。我想更具體一點,這條規則只接受通過這個 VPN 隧道進入伺服器的流量。
在具有兩個網路設備的經典路由器設置中,我會檢查傳入設備以實現這一目標。Strongswan 中是否有類似的東西(例如虛擬網路設備)?
如何過濾掉通過隧道到達伺服器的數據包,以便僅對這些數據包進行 NAT?
您應該查看 iptables 的策略模組,它根據數據包與 IPsec 策略的關係來匹配數據包(請參閱
man 8 iptables
或man 8 iptables-extensions
了解詳細資訊)。如何最好地應用該模組實際上取決於您的防火牆的其餘部分是如何配置的以及您的確切要求是什麼。例如,將
INPUT
和FORWARD
鏈的預設(防火牆)策略設置為DROP
(通過 SSH 執行此操作時請注意,因為您可能會將您鎖定在您的機器之外),然後使用 strongSwan 的預設 updown 腳本(leftfirewall=yes
)基本上會完成與 IPsec 相關的所有操作隧道為您服務。該腳本將自動添加正確的輸入和轉發規則(使用策略模組),以僅允許通過 IPsec 隧道進出隧道子網的流量(實際上,對於道路勇士,僅允許分配的 IP,甚至不允許整個子網) .如果您不想執行上述操作,可以手動添加一些規則。使用以下選項,您可以匹配通過任何 IPsec 連接到達的數據包(用於
--dir in|out
指定方向):-m policy --dir in --pol ipsec
因此,如果您只是想丟棄來自所述子網且未通過 IPsec 到達的具有源 IP 的數據包,您可以添加以下規則:
iptables -A INPUT -s 192.168.99.0/24 ! -m policy --dir in --pol ipsec -j DROP iptables -A FORWARD -s 192.168.99.0/24 ! -m policy --dir in --pol ipsec -j DROP