Ipsec
如何使用 ip6tables 阻止傳入的 ESP 流量
當我的主機收到 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 規則,或者您可以檢查每個規則的規則命中計數器以查看流量是否命中它們。