Кажется, что в Linux уже есть модуль для nftables nf_xfrm, который содержит некоторый код о reqid, однако на странице руководства нет его описания.
Итак, как перевести следующую команду в nftables?
iptables -D FORWARD -s 10.0.0.1/32 -i eth0 -m policy --dir in --pol ipsec --reqid 1 --proto esp -j ACCEPT
столы версия 0.9.0 была выпущено 2018-06-08, более года назад, и эта функция недоступна в этой версии. Доступно только тестирование после декапсулирования.
ОБНОВИТЬ: Выпущен nftables 0.9.1 на 2019-06-24, так что можно надеяться, что он скоро будет упакован в любимый дистрибутив.
Поддержка ядра для дополнительной обработки ipsec в столы был добавлен в версии 4.201. На стороне пользователя соответствующая поддержка дополнительных функций ipsec был добавлен в основные ветки git около 21.09.2018 для libnftnl 2,3 и nftables 4,5,6.
Последний патч - это то, что предоставляет reqid:
src: add ipsec (xfrm) expression Это позволяет сопоставить адреса туннеля / свеклы ipsec в состоянии xfrm, связанном с пакетом, ipsec идентификатор запроса и SPI.
Примеры:
ipsec in ip saddr 192.168.1.0/24 ipsec out ip6 daddr @endpoints ipsec in spi 1-65536
(Ну, нет примера для идентификатора запроса или соответствующего базового протокола, который может не быть реализован, см. Позже)
Итак, чтобы иметь возможность использовать эту функцию, в настоящее время по крайней мере это необходимо:
Если OP iptables правило было добавлением, а не удалением (что в настоящее время может быть выполнено в nftables только используя ручка ключевое слово) это должно переводиться в это (включая шаблон):
nft add table ip filter
nft add 'chain ip filter forward { type filter hook forward priority filter; policy accept; }'
nft add rule ip filter forward ip saddr 10.0.0.1 iifname "eth0" ipsec in reqid 1 accept
Я не добавил meta ipsec exists
перед ipsec in reqid 1
: тестирование reqid должен потребовать и, таким образом, протестировать, уже подвергался декапсуляции ipsec.
Что, похоже, не доступно и не упоминается в документации эквивалентен --proto esp
, поэтому я не мог это выразить.
Если соответствие протоколу esp действительно При необходимости можно представить, что использование метки на внешнем пакете конверта должно сделать это, зная, что метка сохраняется после декапсуляции:
nft add table ip filter
nft add 'chain ip filter input { type filter hook input priority filter; policy accept; }'
nft add 'chain ip filter forward { type filter hook forward priority filter; policy accept; }'
nft add rule ip filter input ip protocol esp meta mark set 1
nft add rule ip filter forward meta mark 1 ip saddr 10.0.0.1 iifname "eth0" ipsec in reqid 1 accept
Отказ от ответственности: будьте осторожны, проверялся только синтаксис (с использованием столы из git commit 01e5c6f0ed0315046537612f5a80e506d37a7f8e). На самом деле это не было проверено IPSec. Вероятно, также есть правило, которое нужно добавить для 4500 / UDP для ESP, инкапсулированного в UDP.
1 netfilter: nf_tables: добавить выражение xfrm
2 expr: rt: поддержка соответствия ipsec
3 expr: добавить поддержку xfrm
4 src: rt: добавить поддержку, чтобы проверить, будет ли маршрут выполнять преобразование ipsec
5 src: переименовать meta secpath в meta ipsec
6 src: добавить выражение ipsec (xfrm)