Ipsec

如何使用 ip6tables 阻止傳入的 ESP 流量

  • April 23, 2019

當我的主機收到 IPsec 流量時,我想測試我的防火牆配置,我也想知道如何處理它(首先放棄它)。

出於測試原因,我部署了兩個容器(啟用了 ipv6),然後我使用 scapy 創建了一個 ESP 數據包(取自:https ://github.com/secdev/scapy/blob/master/test/ipsec .uts#L2730):

p = IPv6()
p.dst="fe80::42:acff:fe10:ee04"
p /= TCP(sport=45012, dport=80)
p /= Raw('testdata')
p = IPv6(raw(p))
sa = SecurityAssociation(ESP, spi=0x222, crypt_algo='NULL', crypt_key=None, auth_algo='NULL', auth_key=None)
e = sa.encrypt(p)

我想添加一個防火牆規則來丟棄這個數據包。

我目前的配置是:

# ip6tables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -d fe80::42:acff:fe10:ee04/64 -i eth0 -p esp -j DROP
-A INPUT -d fe80::/64 -i eth0 -p esp -j DROP
-A INPUT -m ipv6header --header esp --soft -j DROP

我也試過這個,但失敗了:

# ip6tables -A INPUT -m esp --espspi 546 -j DROP
ip6tables: Invalid argument. Run `dmesg' for more information.

但是我還沒有找到一種方法來做到這一點。我的 tcpdump 顯示數據包已收到:

# tcpdump -i eth0 dst fe80::42:acff:fe10:ee04 -vvv
14:16:33.971545 IP6 (hlim 64, next-header ESP (50) payload length: 40) fe80::42:acff:fe10:ee03 > b4f9f118b0e7: ESP(spi=0x00000222,seq=0x1), length 40

一些重要資訊:

# uname -r
5.0.8-1.el7.elrepo.x86_64
# cat /etc/system-release
CentOS Linux release 7.5.1804 (Core)
# ip6tables -V
ip6tables v1.4.21

您不能使用 tcpdump 來確定防火牆是否在工作,因為它會在 iptables 處理數據包之前接收數據包。

相反,您可以編寫記錄感興趣的流量的 iptables 規則,或者您可以檢查每個規則的規則命中計數器以查看流量​​是否命中它們。

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