Какой наилучший способ перейти с использования iptables на nftables?

Как настроить правило в nftables для блокировки ANY запросов в DNS, аналогично тому, как это сделано в вашем примере с использованием iptables? 

Указание кода ваших попыток создания подобного правила поможет ускорить получение необходимой помощи.
  • 7 февраля 2024 г. 8:08
Ответы на вопрос 2
Переход с использования 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`. Пожалуйста, испытайте любые правила в тестовой среде до того, как применять их в продакшн.
Воспользуйся iptables-nft - у неё такой же синтаксис, как у классической iptables: 

Похожие вопросы