Назад | Перейти на главную страницу

Как заблокировать входящий трафик 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

Вы не можете использовать tcpdump, чтобы определить, работает ли брандмауэр, потому что он получает пакеты до того, как iptables их обработает.

Вместо этого вы можете написать правила iptables, которые регистрируют интересующий трафик, или вы можете проверить счетчики попаданий правил для каждого правила, чтобы узнать, не попадает ли в них трафик.