В ветку linux-next, на базе которой будет сформировано ядро версии 3.13, добавлена новая реализация подсистемы пакетной фильтрации nftables. Разработка системы ведётся с 2009 года, её целью является замена подсистем iptables, ip6table, arptables и ebtables. Результата разработчики желают добиться путём сокращения количества (и дублей) кода уровня ядра, упрощения взаимодействия ядра и userspace-приложений, а также использования байт-кода для компилирования правил фильтрации и исполнения их в ядре.
Представленный для включения в ядро код подразумевает сосуществование старых и новой подсистем, поскольку nftables ещё требует доработки и тестирования.
Идея в целом позаимствована в реализациях Berkeley Packet Filters, применяемых в BSD-системах. При этом синтаксис пользовательских правил (утилиты nft) также напоминает синтаксис ipfw FreeBSD.
Например, для приёма icmp-сообщений echo-request, в командной строке (скрипте) необходимо набрать:
nft add rule filter input icmp type echo-request accept
Сводный список правил формируется как иерархическая блочная структура, чем-то напоминающая pf и npf:
# nft list table filter -n -a
table filter {
chain output {
table filter hook output priority 0;
ip protocol tcp counter packets 82 bytes 9680 # handle 8
ip saddr 127.0.0.1 ip daddr 127.0.0.6 drop # handle 7
}
}
# nft add rule filter output position 8 ip daddr 127.0.0.8 drop
# nft list table filter -n -a
table filter {
chain output {
table filter hook output priority 0;
ip protocol tcp counter packets 190 bytes 21908 # handle 8
ip daddr 127.0.0.8 drop # handle 10
ip saddr 127.0.0.1 ip daddr 127.0.0.6 drop # handle 7
}
}
>>> Подробности