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

如何使用 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

答案1

您不能使用 tcpdump 来确定防火墙是否正常工作,因为它在 iptables 处理数据包之前接收数据包。

相反,您可以编写 iptables 规则来记录感兴趣的流量,或者可以检查每个规则的规则命中计数器以查看流量​​是否正在命中它们。

相关内容