Переход с использования iptables на nftables состоит из следующих шагов:
1. Изучение `nftables`:
- Прежде всего, ознакомьтесь с основами `nftables`, так как синтаксис и подход к работе с правилами отличаются от iptables.
- Изучите официальную документацию `nftables`: https://wiki.nftables.org/wiki-nftables/index.php/Main_Page
2. Установка `nftables` и удаление `iptables`:
- Установите `nftables` через менеджер пакетов вашего дистрибутива.
- Удалите или отключите `iptables`. Во многих современных дистрибутивах оба пакета могут быть установлены одновременно, но рекомендуется полностью перейти на `nftables` для избежания конфликтов.
3. Переносим правила из iptables в nftables:
- Можно использовать скрипт `iptables-translate`, который идёт в комплекте с `nftables`, чтобы помочь перевести правила `iptables` в синтаксис `nftables`.
- Пример использования скрипта: `iptables-save | iptables-translate`
- `iptables-translate` не гарантирует 100% корректной конвертации, поэтому важно внимательно проверить и при необходимости вручную отредактировать полученные правила.
4. Настройка и запуск `nftables`:
- Сделайте бекап существующих правил `iptables`.
- Настройте правила `nftables` в соответствии с вашими требованиями. Возможно, вам потребуется написать новые правила с нуля, если перевод с `iptables` оказался неудачным.
- Включите и запустите сервис `nftables`.
Правило `nftables` для блокировки ANY запросов в DNS:
```sh
nft add rule ip filter input udp dport 53 \
th dport set 0x0035 th sport set 0x0035 \
udp payload offset 10 size 2 @th load 2b \
bitwise 0xffff = 0x00ff \
counter drop comment "drop DNS any requests"
```
Объяснение скрипта:
- `nft add rule` добавляет новое правило.
- `ip` указывает протокол версии IP, `filter` имя цепочки, а `input` цель цепочки.
- `udp dport 53` соответствует запросам, направленным к серверу DNS на порт 53.
- `th` работает с заголовками транспортного уровня (TCP или UDP).
- `udp payload` указывает на поле Length в сообщении DNS (10 байт от начала UDP пакета), затем проверяется через `bitwise` на соответствие типу запроса ANY (значение 0xFF).
- `counter drop` подсчитывает пакеты, соответствующие правилу, и отбрасывает их.
- `comment` добавляет описание правила для лучшей читаемости.
Примечание: Скрипт выше является примерным и может требовать адаптации под вашу конкретную ситуацию и версию `nftables`. Проверьте это правило на точное соответствие вашему случаю использования и версии `nftables`. Пожалуйста, испытайте любые правила в тестовой среде до того, как применять их в продакшн.