Каждый администратор Linux наверняка работал с iptables, давним брандмауэром Linux, который хорошо нам служил в течение многих лет. Но вы, возможно, еще не знакомы с nftables, новичком, намеревающимся предложить нам некоторые столь необходимые обновления и в конечном итоге заменить устаревший iptables.
Nftables разработан в Netfilter, одной и той же организации, которая в настоящее время поддерживает IPTables. Он был создан для решения проблем с настройкой iptables, а именно масштабируемости и производительности.
Помимо нового синтаксиса и некоторых обновлений, вы обнаружите, что он функционально очень похож на свой предшественника.
Другое оправдание для новой утилиты состоит в том, что инфраструктура iptables стала немного запутанной с iptables, ip6tables, arptables и ebtables, которые предоставляют разные, но схожие функции.
Например, просто неэффективно создавать правила IPv4 в iptables и правила IPv6 в ip6tables и поддерживать их синхронизацию. Nftables стремится заменить все это и быть централизованным решением.
Хотя nftables был включен в ядро Linux с 2014 года, в последнее время она набирает обороты, так как становится все более распространенным. В мире Linux изменения происходят медленно, и устаревшим утилитам часто требуется несколько лет или больше, чтобы постепенно отказаться от их обновленных аналогов.
Nftables становится рекомендуемым брандмауэром, и администраторы Linux должны обновить свои инструменты. Сейчас самое время изучить nftables и обновить существующую конфигурацию iptables.
Если вы годами пользуетесь iptables и не слишком взволнованы идеей изучения совершенно новой утилиты, не волнуйтесь, мы поможем вам в этой статье. Здесь мы рассмотрим различия между nftables и iptables и покажем примеры настройки правил брандмауэра в новом синтаксисе nftables.
В iptables есть три цепочки по умолчанию: ввод, вывод и пересылка. Эти три «цепочки» (и другие цепочки, если они у вас настроены) содержат «правила», и iptables работает путем сопоставления сетевого трафика со списком правил в цепочке. Если исследуемый трафик не соответствует ни одному правилу, в трафике будет использоваться политика цепочки по умолчанию (т. е. ACCEPT, DROP).
Nftables работает аналогично этому, с «цепями» и «правилами». Однако он не начинается с каких-либо базовых цепей, что делает настройку немного более гибкой.
Одна из областей неэффективности для iptables заключается в том, что все данные сети должны проходить одну или несколько из этих вышеупомянутых цепочек, даже если трафик не соответствует каким-либо правилам. Независимо от того, настроены ли у вас цепочки или нет, iptables все равно проверяет данные вашей сети на предмет их соответствия.
Nftables доступен во всех основных дистрибутивах Linux, и вы можете легко установить его, используя менеджер пакетов ваших дистрибутивов.
В дистрибутиве на основе Ubuntu или Debian вы можете использовать эту команду:
sudo apt install nftables
Чтобы убедиться, что nftables запускается автоматически при перезагрузке системы, выполните:
sudo systemctl enable nftables.service
Nftables имеет другой и гораздо более простой синтаксис, чем iptables. Давайте будем честными, синтаксис iptables всегда был неясен и требовал дополнительных усилий для изучения. К счастью для тех, кто мигрирует с iptables, nftables по-прежнему принимает старый синтаксис.
Вы также можете использовать утилиту iptables-translate, которая будет принимать команды iptables и преобразовывать их в эквивалент nftables. Это простой способ увидеть разницу между двумя синтаксисами.
Установите iptables-translate в дистрибутиве на основе Ubuntu и Debian с помощью этой команды:
sudo apt install iptables-nftables-compat
После установки вы можете передать синтаксис iptables команде iptables-translate, и она вернет эквивалентную команду nftables.
Давайте рассмотрим несколько примеров, чтобы вы могли увидеть, как эти команды отличаются друг от друга.
Эта команда заблокирует входящие соединения с IP-адреса 192.168.2.1:
linux@andreyex:~$ iptables-translate -A INPUT -s 192.168.2.1 -j DROP nft add rule ip filter INPUT ip saddr 192.168.2.1 counter drop
Давайте рассмотрим еще несколько примеров – обычные вещи, которые вы обычно вводите в iptables при усилении защиты сервера Linux.
linux@andreyex:~$ iptables-translate -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT nft add rule ip filter INPUT tcp dport 22 ct state new,established counter accept
Если вы хотите разрешить входящие SSH-соединения с 192.168.1.0/24:
linux@andreyex:~$ iptables-translate -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT nft add rule ip filter INPUT ip saddr 192.168.1.0/24 tcp dport 22 ct state new,established counter accept
Вот синтаксис для iptables и nftables:
linux@andreyex:~$ iptables-translate -A INPUT -i eth0 -p tcp --dport 3306 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT nft add rule ip filter INPUT iifname eth0 tcp dport 3306 ct state new,established counter accept
Чтобы разрешить трафик определенного типа f, вот синтаксис для обеих команд:
linux@andreyex:~$ iptables-translate -A INPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT nft add rule ip filter INPUT ip protocol tcp tcp dport { 80,443} ct state new,established counter accept
Как видно из этих примеров, синтаксис все еще очень похож на iptables, но команды немного более интуитивно понятны.
Опция «counter», присутствующая в приведенных выше примерах команды nft, указывает nftables подсчитывать количество раз, когда к правилу обращаются, как это делают iptables по умолчанию.
В nftables они являются необязательными и должны быть указаны.
nft add rule ip filter INPUT ip saddr 192.168.2.1 counter accept
Nftables имеет встроенные опции для экспорта вашей конфигурации. В настоящее время он поддерживает XML и JSON.
nft export xml
В этой статье мы объяснили, почему nftables является новым рекомендуемым выбором, когда речь идет о брандмауэрах Linux. Мы также перечислили много различий между старым iptables и более новым nftables, включая их функциональность и синтаксис.
В этой статье показано, почему стоит подумать об обновлении до nftables и о том, как начать работу с новым синтаксисом, с которым вам необходимо ознакомиться, чтобы успешно обновить старые правила iptables.
Если у вас есть вопросы или предложения, пожалуйста, дайте нам знать в комментариях.