Как заблокировать входящий трафик ESP с помощью ip6tables
Я хотел бы проверить конфигурацию своего брандмауэра, когда трафик IPsec получен на моем хосте, и я также хотел бы знать, как с ним справиться (сначала отбросьте его).
По причинам тестирования я развернул два контейнера (с включенным ipv6), а затем создаю пакет ESP с использованием scapy (взято с: 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, которые регистрируют интересующий трафик, или вы можете проверить счетчики посещений для каждого правила, чтобы увидеть, попадает ли на них трафик.