Debian
Strongswan IPSEC 隧道以一種方式阻止流量
我已經在 debian 9 機器上使用 strongswan 建立了一個有效的站點到站點 IPSEC 隧道。但是,我對流量應該如何工作有一個要求:站點 A 上的網路可以將數據包發送到站點 B 網路並接收確認。站點 B 只能在連接打開時與站點 A 通信。基本上,站點 A 可以訪問站點 B,但站點 B 無法訪問站點 A。基礎架構架構如下:
SITE A SITE B NetA--------------GatewayA------Internet------GatewayB-----------------NetB A.A.A.A/24 A.A.A.254 pub.lic.ip.A pub.lic.ip.B B.B.B.254 B.B.B.B/24
我只能訪問站點 A。站點 B 在客戶端。
現在我需要限制從站點 B 到站點 A 的訪問。我首先將 iptables 放在 GatewayA 上,以便基本上接受來自站點 B 的 ESTABLISHED 和 RELATED 數據包並丟棄其他所有數據包。這是我的 iptables :
sudo iptables -L FORWARD Chain FORWARD (policy DROP) target prot opt source destination ACCEPT all -- B.B.B.B/24 A.A.A.A/24 state RELATED ACCEPT all -- B.B.B.B/24 A.A.A.A/24 state ESTABLISHED DROP all -- B.B.B.B/24 A.A.A.A/24 policy match dir in pol ipsec proto esp ACCEPT all -- B.B.B.B/24 A.A.A.A/24 policy match dir in pol ipsec reqid 2 proto esp ACCEPT all -- A.A.A.A/24 B.B.B.B/24 policy match dir out pol ipsec reqid 2 proto esp
sudo iptables -L INPUT Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- B.B.B.B/24 A.A.A.A/24 state RELATED ACCEPT all -- B.B.B.B/24 A.A.A.A/24 state ESTABLISHED DROP all -- B.B.B.B/24 A.A.A.A/24 policy match dir in pol ipsec proto esp ACCEPT all -- B.B.B.B/24 A.A.A.A/24 policy match dir in pol ipsec reqid 2 proto esp
在這裡,每個表上的前 3 條規則是手動編輯的,接下來的規則是由 strongswan/ipsec 設置的。在測試環境中,我可以從站點 A ping 到站點 B,但不能從站點 B 到站點 A,這正是我想要的。
me@gatewayA:~$ ping A.A.A.1 PING A.A.A.1 (A.A.A.1) 56(84) bytes of data. 64 bytes from A.A.A.1: icmp_seq=1 ttl=63 time=2.25 ms 64 bytes from A.A.A.1: icmp_seq=2 ttl=63 time=1.32 ms 64 bytes from A.A.A.1: icmp_seq=3 ttl=63 time=1.28 ms 64 bytes from A.A.A.1: icmp_seq=4 ttl=63 time=1.56 ms 64 bytes from A.A.A.1: icmp_seq=5 ttl=63 time=1.45 ms
me@gatewayB:~$ ping B.B.B.1 PING B.B.B.1 (B.B.B.1) 56(84) bytes of data.
現在,出於某種原因,我需要重新啟動 ipsec :
sudo ipsec restart
現在我檢查我的 iptables :
sudo iptables -L FORWARD Chain FORWARD (policy DROP) target prot opt source destination ACCEPT all -- B.B.B.B/24 A.A.A.A/24 policy match dir in pol ipsec reqid 2 proto esp ACCEPT all -- A.A.A.A/24 B.B.B.B/24 policy match dir out pol ipsec reqid 2 proto esp ACCEPT all -- B.B.B.B/24 A.A.A.A/24 state RELATED ACCEPT all -- B.B.B.B/24 A.A.A.A/24 state ESTABLISHED DROP all -- B.B.B.B/24 A.A.A.A/24 policy match dir in pol ipsec proto esp
sudo iptables -L INPUT Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- B.B.B.B/24 A.A.A.A/24 policy match dir in pol ipsec reqid 2 proto esp ACCEPT all -- B.B.B.B/24 A.A.A.A/24 state RELATED ACCEPT all -- B.B.B.B/24 A.A.A.A/24 state ESTABLISHED DROP all -- B.B.B.B/24 A.A.A.A/24 policy match dir in pol ipsec proto esp
如您所見,重新啟動 ipsec 更改了 iptables,現在我可以雙向 ping。
所以我想知道是否有任何方法可以實現我想要的,即限制從站點 B 到站點 A 的訪問,而不影響從站點 A 到站點 B 的通信。也許有一種方法可以在 strongswan 配置中定義 iptables,或者可能更改 iptables 規則的優先級,以便它們在重新啟動時保持順序。
正如 ecdsa 所指出的,我只需要
leftfirewall=no
輸入 ipsec.conf 以便 iptables 可以具有我想要的行為。