nftables вместо iptables

Настройка, программирование, распределённые вычисления

Модераторы: Olej, bellic, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

nftables вместо iptables

Непрочитанное сообщение Olej » 25 окт 2023, 20:49

Переход с iptables на nftables. Краткий справочник
4 окт 2021 в 12:00
В Debian теперь нет iptables. Во всяком случае, по умолчанию.

Узнал я об этом, когда на Debian 11 ввёл команду iptables и получил “command not found”. Сильно удивился и стал читать документацию. Оказалось, теперь нужно использовать nftables.

Хорошие новости: одна утилита nft заменяет четыре прежних — iptables, ip6tables, ebtables и arptables.

Плохие новости: документация (man nft) содержит больше 3 тысяч строк.

Чтобы вам не пришлось всё это читать, я написал небольшое руководство по переходу с iptables на nftables. Точнее, краткое практическое пособие по основам nftables. Без углубления в теорию и сложные места. С примерами.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

nftables вместо iptables

Непрочитанное сообщение Olej » 25 окт 2023, 21:09

Для облегчения перехода можно конвертировать правила iptables в nftables с помощью утилит iptables-translate, iptables-restore-translate, iptables-nft-restore и т.п. Утилиты находятся в пакете iptables, который нужно установить дополнительно.

После чего возьмём какую-нибудь команду и пропустим её через iptables-translate.

Код: Выделить всё

olej@esprimop420:~$ cat /etc/debian_version 
12.1
Уже установлено?

Код: Выделить всё

olej@esprimop420:~$ aptitude search iptables | grep ^i
i A iptables - administration tools for packet filtering and NAT
Установлен автоматически:

Код: Выделить всё

olej@esprimop420:~$ aptitude show iptables 
Пакет: iptables                                  
Версия: 1.8.9-2
Состояние: установлен
Установлен автоматически: да
Мультиархитектура: сторонняя
Приоритет: необязательный
Раздел: net
Сопровождающий: Debian Netfilter Packaging Team <pkg-netfilter-team@lists.alioth.debian.org>
Архитектура: amd64
Размер в распакованном виде: 2.466 k
Зависит: libip4tc2 (= 1.8.9-2), libip6tc2 (= 1.8.9-2), libxtables12 (= 1.8.9-2), netbase (>= 6.0), libc6 (>= 2.34), libmnl0
         (>= 1.0.3-4~), libnetfilter-conntrack3 (>= 1.0.6), libnfnetlink0 (>= 1.0.2), libnftnl11 (>= 1.1.5)
Рекомендует: nftables
Предлагает: firewalld, kmod
Ломает: iptables-nftables-compat (< 1.6.2~)
Заменяет: iptables-nftables-compat (< 1.6.2~)
Описание: administration tools for packet filtering and NAT
 The iptables/xtables framework has been replaced by nftables. You should consider migrating now. 
 
 iptables is the userspace command line program used to configure the Linux packet filtering and NAT ruleset. It is targeted
 towards systems and networks administrators. 
 
 This package contains several different utilities, the most important ones: 
 
 iptables-nft, iptables-nft-save, iptables-nft-restore (nft-based version) 
 
 iptables-legacy, iptables-legacy-save, iptables-legacy-restore (legacy version) 
 
 ip6tables-nft, ip6tables-nft-save, ip6tables-nft-restore (nft-based version) 
 
 ip6tables-legacy, ip6tables-legacy-save, ip6tables-legacy-restore (legacy version) 
 
 arptables-nft, arptables-nft-save, arptables-nft-restore (nft-based version) 
 
 ebtables-nft, ebtables-nft-save, ebtables-nft-restore (nft-based version)
Домашняя страница: https://www.netfilter.org/
Метки: admin::configuring, implemented-in::c, interface::commandline, network::firewall, protocol::ethernet, protocol::ip,
       protocol::tcp, protocol::udp, role::program, role::shared-lib, scope::utility, security::firewall, use::monitor,
       works-with::network-traffic

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

nftables вместо iptables

Непрочитанное сообщение Olej » 25 окт 2023, 21:13

Olej писал(а):
25 окт 2023, 21:09
Уже установлено?

Код: Выделить всё

olej@esprimop420:~$ aptitude search nftables
p   golang-github-google-nftables-dev                            - Go library to interact with Linux nftables                             
p   libnftables-dev                                              - Development files for libnftables                                      
i   libnftables1                                                 - Netfilter nftables high level userspace API library                    
p   miniupnpd-nftables                                           - UPnP and NAT-PMP daemon for gateway routers - nftables backend         
i   nftables                                                     - настройка правил фильтрации пакетов (проект Netfilter)                 
p   python3-nftables                                             - nftables/libnftables python3 module                                    
v   python3-pyroute2.nftables                                    -                                                                        

Код: Выделить всё

olej@esprimop420:~$ aptitude show nftables
Пакет: nftables                                  
Версия: 1.0.6-2+deb12u2
Состояние: установлен (1.0.6-2+deb12u1), доступно обновление (1.0.6-2+deb12u2)
Установлен автоматически: нет
Приоритет: важный
Раздел: net
Сопровождающий: Debian Netfilter Packaging Team <pkg-netfilter-team@lists.alioth.debian.org>
Архитектура: amd64
Размер в распакованном виде: 180 k
Зависит: libnftables1 (= 1.0.6-2+deb12u2), libc6 (>= 2.34), libedit2 (>= 3.1-20130611-0)
Рекомендует: netbase
Предлагает: firewalld
Описание: настройка правил фильтрации пакетов (проект Netfilter)
 Инфраструктура классификация сетевых пакетов в пространстве ядра, состоящая из специальной виртуальной машины и консольной
 утилиты nft. Она использует существующие подсистемы Netfilter, такие как hook, система отслеживания соединений (connection
 tracking), NAT, очереди в пространстве пользователя, подсистема журналирования. 
 
 nftables служит заменой iptables, ip6tables, arptables и ebtables. 
 
 Программное обеспечение проекта Netfilter и nftables в частности применяются для организации совместного использования
 интернет-соединения, межсетевого экрана, учёта IP, прозрачного прокси, нестандартной маршрутизации и управления трафиком. 
 
 Для работы требуется ядро Linux >= 3.13, однако рекомендуется версия >= 4.14.
Домашняя страница: https://www.netfilter.org/

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

nftables вместо iptables

Непрочитанное сообщение Olej » 25 окт 2023, 21:31

После чего возьмём какую-нибудь команду и пропустим её через iptables-translate. Например, из такой команды:

Код: Выделить всё

root@esprimop420:~# which iptables
/usr/sbin/iptables

Код: Выделить всё

root@esprimop420:~# which iptables-translate
/usr/sbin/iptables-translate
Эти простейшие команды видны только от root - из-за $PATH, как я понимаю...
Преобразование команд iptables в nftables сделаю на примере реальных команд из темы туннели сквозь Интернет (3 правила):

Код: Выделить всё

olej@esprimop420:~$ sudo iptables -A FORWARD -i enp3s0 -o ipip6 -j ACCEPT

olej@esprimop420:~$ sudo iptables -A FORWARD -i ipip6 -o enp3s0 -j ACCEPT

olej@esprimop420:~$ sudo iptables -t nat -A POSTROUTING -o enp3s0 -j MASQUERADE
Теперь это должно стать:

Код: Выделить всё

root@esprimop420:~# iptables-translate -A FORWARD -i enp3s0 -o ipip6 -j ACCEPT
nft 'add rule ip filter FORWARD iifname "enp3s0" oifname "ipip6" counter accept'

root@esprimop420:~# iptables-translate -A FORWARD -i ipip6 -o enp3s0 -j ACCEPT
nft 'add rule ip filter FORWARD iifname "ipip6" oifname "enp3s0" counter accept'

root@esprimop420:~# iptables-translate -t nat -A POSTROUTING -o enp3s0 -j MASQUERADE
nft 'add rule ip nat POSTROUTING oifname "enp3s0" counter masquerade'

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

nftables вместо iptables

Непрочитанное сообщение Olej » 25 окт 2023, 21:33

Olej писал(а):
25 окт 2023, 21:31
Преобразование команд
Детально:

Код: Выделить всё

root@esprimop420:~# iptables-translate --help
iptables-translate v1.8.9 (nf_tables)

Usage: iptables-translate -[ACD] chain rule-specification [options]
       iptables-translate -I chain [rulenum] rule-specification [options]
       iptables-translate -R chain rulenum rule-specification [options]
       iptables-translate -D chain rulenum [options]
       iptables-translate -[LS] [chain [rulenum]] [options]
       iptables-translate -[FZ] [chain] [options]
       iptables-translate -[NX] chain
       iptables-translate -E old-chain-name new-chain-name
       iptables-translate -P chain target [options]
       iptables-translate -h (print this help information)

Commands:
Either long or short options are allowed.
  --append  -A chain		Append to chain
  --check   -C chain		Check for the existence of a rule
  --delete  -D chain		Delete matching rule from chain
  --delete  -D chain rulenum
				Delete rule rulenum (1 = first) from chain
  --insert  -I chain [rulenum]
				Insert in chain as rulenum (default 1=first)
  --replace -R chain rulenum
				Replace rule rulenum (1 = first) in chain
  --list    -L [chain [rulenum]]
				List the rules in a chain or all chains
  --list-rules -S [chain [rulenum]]
				Print the rules in a chain or all chains
  --flush   -F [chain]		Delete all rules in  chain or all chains
  --zero    -Z [chain [rulenum]]
				Zero counters in chain or all chains
  --new     -N chain		Create a new user-defined chain
  --delete-chain
            -X [chain]		Delete a user-defined chain
  --policy  -P chain target
				Change policy on chain to target
  --rename-chain
            -E old-chain new-chain
				Change chain name, (moving any references)

Options:
    --ipv4	-4		Nothing (line is ignored by ip6tables-restore)
    --ipv6	-6		Error (line is ignored by iptables-restore)
[!] --protocol	-p proto	protocol: by number or name, eg. `tcp'
[!] --source	-s address[/mask][...]
				source specification
[!] --destination -d address[/mask][...]
				destination specification
[!] --in-interface -i input name[+]
				network interface name ([+] for wildcard)
 --jump	-j target
				target for rule (may load target extension)
  --goto      -g chain
			       jump to chain with no return
  --match	-m match
				extended match (may load extension)
  --numeric	-n		numeric output of addresses and ports
[!] --out-interface -o output name[+]
				network interface name ([+] for wildcard)
  --table	-t table	table to manipulate (default: `filter')
  --verbose	-v		verbose mode
  --wait	-w [seconds]	maximum wait to acquire xtables lock before give up
  --line-numbers		print line numbers when listing
  --exact	-x		expand numbers (display exact values)
[!] --fragment	-f		match second or further fragments only
  --modprobe=<command>		try to insert modules using this command
  --set-counters -c PKTS BYTES	set the counter during insert/append
[!] --version	-V		print package version.
Тут важно "перетасование" команд-опций по группам, в скобках [...]

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

nftables вместо iptables

Непрочитанное сообщение Olej » 25 окт 2023, 21:43

Olej писал(а):
25 окт 2023, 21:31
Теперь это должно стать:

Код: Выделить всё

root@esprimop420:~# nft 'add rule ip filter FORWARD iifname "enp3s0" oifname "ipip6" counter accept'

root@esprimop420:~# nft 'add rule ip filter FORWARD iifname "ipip6" oifname "enp3s0" counter accept'

root@esprimop420:~# nft 'add rule ip nat POSTROUTING oifname "enp3s0" counter masquerade'

Код: Выделить всё

root@esprimop420:~# nft list table ip filter
table ip filter {
	chain FORWARD {
		type filter hook forward priority filter; policy accept;
		iifname "enp3s0" oifname "ipip6" counter packets 0 bytes 0 accept
		iifname "ipip6" oifname "enp3s0" counter packets 0 bytes 0 accept
		iifname "enp3s0" oifname "ipip6" counter packets 0 bytes 0 accept
		iifname "ipip6" oifname "enp3s0" counter packets 0 bytes 0 accept
	}
}
В nftables нет обязательных предопределённых таблиц, как в iptables. Вы сами создаёте нужные вам таблицы. И называете их, как хотите.
Может так?:

Код: Выделить всё

root@esprimop420:~# iptables-translate -N POSTROUTING
nft add chain ip filter POSTROUTING

Код: Выделить всё

root@esprimop420:~# nft add chain ip filter POSTROUTING

root@esprimop420:~# nft 'add rule ip nat POSTROUTING oifname "enp3s0" counter masquerade'

Код: Выделить всё

root@esprimop420:~# nft list table ip filter
table ip filter {
	chain FORWARD {
		type filter hook forward priority filter; policy accept;
		iifname "enp3s0" oifname "ipip6" counter packets 0 bytes 0 accept
		iifname "ipip6" oifname "enp3s0" counter packets 0 bytes 0 accept
		iifname "enp3s0" oifname "ipip6" counter packets 0 bytes 0 accept
		iifname "ipip6" oifname "enp3s0" counter packets 0 bytes 0 accept
	}

	chain POSTROUTING {
	}
}
:?:

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

nftables вместо iptables

Непрочитанное сообщение Olej » 25 окт 2023, 23:54

iptables против nftables: в чем разница?
23 декабря 2019
Nftables разработан в Netfilter, одной и той же организации, которая в настоящее время поддерживает IPTables. Он был создан для решения проблем с настройкой iptables, а именно масштабируемости и производительности.
Nftables имеет другой и гораздо более простой синтаксис, чем iptables. Давайте будем честными, синтаксис iptables всегда был неясен и требовал дополнительных усилий для изучения. К счастью для тех, кто мигрирует с iptables, nftables по-прежнему принимает старый синтаксис.

Вы также можете использовать утилиту iptables-translate, которая будет принимать команды iptables и преобразовывать их в эквивалент nftables. Это простой способ увидеть разницу между двумя синтаксисами.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

nftables вместо iptables

Непрочитанное сообщение Olej » 25 окт 2023, 23:56

Olej писал(а):
25 окт 2023, 20:49
В Debian теперь нет iptables.
Далеко не только Debian...

Код: Выделить всё

[olej@xenix ~]$ lsb_release -a
LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	Fedora
Description:	Fedora release 38 (Thirty Eight)
Release:	38
Codename:	ThirtyEight

Код: Выделить всё

[olej@xenix ~]$ dnf list installed nftables
Установленные пакеты
nftables.x86_64                                            1:1.0.5-2.fc38                                             @fedora

Код: Выделить всё

[olej@xenix ~]$ dnf list installed iptables
Ошибка: Совпадений среди пакетов не найдено
[olej@xenix ~]$ 
И:

Код: Выделить всё

olej@nvme:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Linuxmint
Description:	LMDE 6 (faye)
Release:	6
Codename:	faye

Код: Выделить всё

olej@nvme:~$ cat /etc/debian_version 
12.1

Код: Выделить всё

olej@nvme:~$ aptitude search nftables | grep ^i
i  libnftables1 - Netfilter nftables high level userspace API library
i  nftables - настройка правил фильтрации пакетов (проект Netfilter)

Код: Выделить всё

olej@nvme:~$ aptitude search iptables | grep ^i
i  iptables - administration tools for packet filtering and NAT
Но:

Код: Выделить всё

olej@R420:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Linuxmint
Description:	Linux Mint 21.2
Release:	21.2
Codename:	victoria

Код: Выделить всё

olej@R420:~$ aptitude search nftables 
p   libnftables-dev                                                              - Development files for libnftables                                                     
p   libnftables1                                                                 - Netfilter nftables high level userspace API library                                   
p   miniupnpd-nftables                                                           - UPnP and NAT-PMP daemon for gateway routers - nftables backend                        
p   nftables                                                                     - Program to control packet filtering rules by Netfilter project                        
p   python3-nftables                                                             - nftables/libnftables python3 module                                                   
p   python3-pyroute2.nftables                                                    - Python3 Netlink library - nftables                                                    

Код: Выделить всё

olej@R420:~$ aptitude search iptables 
p   arno-iptables-firewall                                                       - single- and multi-homed firewall script with DSL/ADSL support                         
p   golang-github-coreos-go-iptables-dev                                         - Go bindings for iptables utility                                                      
i   iptables                                                                     - утилита для фильтрации сетевых пакетов и NAT                                          
p   iptables:i386                                                                - утилита для фильтрации сетевых пакетов и NAT                                          
p   iptables-converter                                                           - convert iptables-commands from a file to iptables-save format                         
p   iptables-converter-doc                                                       - convert iptables-commands from a file to iptables-save format - doc                   
p   iptables-netflow-dkms                                                        - iptables target which generates netflows                                              
p   iptables-persistent                                                          - boot-time loader for netfilter rules, iptables plugin                                 
p   libiptables-chainmgr-perl                                                    - Perl extension for manipulating iptables policies                                     
p   libiptables-parse-perl                                                       - Perl extension for parsing iptables firewall rulesets                                 
p   mcollective-plugins-iptables                                                 - mcollective plugin for iptables                                                       
p   miniupnpd-iptables                                                           - UPnP and NAT-PMP daemon for gateway routers - legacy iptables backend                 
p   python-iptables-doc                                                          - documentation for the python-iptables library                                         
p   python3-iptables                                                             - Python bindings for iptables (Python 3 interface)           

Ответить

Вернуться в «Сети»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 13 гостей