Команда iptables в Ubuntu 22.04 не работает

Вопрос или проблема

Совершенно нов для netfilter, в данный момент я запускаю приложение, которое использует три интерфейса eth0/eth1/eth2, мое приложение будет работать на двух серверах, и они оба могут общаться между собой через свои собственные интерфейсы (eth0/eth1/eth2)

В Ubuntu 18.04 (версия ядра 4.*) я просто использовал команды iptables, чтобы разорвать связь между ними.

В 22.04 (версия ядра 6.2.*) я использую те же команды iptables, чтобы разорвать связь между двумя серверами, но все не работает так, как ожидалось (код моего приложения остался без изменений) — у моего приложения есть механизм, который сообщает, доступен ли соседний сервер или нет — в 22.04 с примененными правилами iptables он по-прежнему сообщает, что другой сервер доступен (в 18.04 это было не так).

Я вижу, что многое изменилось в отношении того, как сетевой трафик может фильтроваться между двумя версиями ядра (больше инструментов в более новой версии).

Я удалил ufw, чтобы избежать конфликтов с nftables, одно наблюдение: когда я применял правило, на мгновение моё приложение сообщало, что соседний сервер недоступен, и вдруг это изменялось на доступный, что-то переопределяет правило, я не уверен.

Теперь я ищу помощь здесь, чтобы увидеть, что я пропустил…

-A INPUT -s x.x.x.x/32 -d y.y.y.y/32 -i eth2 -j DROP
-A INPUT -s x.x.x.y/32 -d y.y.y.x/32 -i eth1 -j DROP
-A INPUT -s x.x.y.y/32 -d y.y.x.x/32 -i eth0 -j DROP

-A OUTPUT -s y.y.y.y/32 -d x.x.x.x/32 -o eth2 -j DROP
-A OUTPUT -s y.y.y.x/32 -d x.x.x.y/32 -o eth1 -j DROP
-A OUTPUT -s y.y.x.x/32 -d x.x.y.y/32 -o eth0 -j DROP

Примечание: Все мои правила добавлены в цепочку, чтобы убедиться, что они имеют приоритет над всем остальным.

Chain INPUT (policy DROP)
target     prot opt source               destination
DROP       all  --  xxxx  yyyy
DROP       all  --  zzzz  AAAA
DROP       all  --  BBBB  CCCC

В Ubuntu 22.04 nftables используется по умолчанию.

Что нового в безопасности для Ubuntu 22.04 LTS?

nftables как бэкенд для брандмауэра по умолчанию

Брандмауэр на Linux состоит из двух компонентов – механизма брандмауэра в ядре Linux и инструментов, используемых для его настройки из пользовательского пространства. Ядро Linux традиционно поддерживало две разные подсистемы для политик брандмауэра – iptables / xtables и новые nftables. nftables приносит значительные преимущества как с точки зрения производительности, так и гибкости при создании и развертывании правил брандмауэра, особенно для систем с двойным стеком IPv4/IPv6. Традиционный инструмент управления пользовательским пространством iptables теперь настраивает бэкенд ядра nftables, в то время как новый инструмент пользовательского пространства nft также присутствует, чтобы позволить создание более гибких правил, не поддерживаемых традиционной парадигмой iptables.

Вы можете перевести правила iptables в nft с помощью iptables-translate и ipt6ables-translate, например:

iptables-translate -A INPUT -s x.x.x.x/32 -d y.y.y.y/32 -i eth2 -j DROP

см. страницу man для получения дополнительных деталей

Вернуться к iptables.

Используйте следующую команду, чтобы увидеть и изменить приоритет:

update-alternatives --config iptables 

пример вывода:

  Selection    Path                       Priority   Status
------------------------------------------------------------
* 0            /usr/sbin/iptables-nft      20        auto mode
  1            /usr/sbin/iptables-legacy   10        manual mode

Установите наивысший приоритет для iptables:

sudo update-alternatives --install /usr/bin/iptables iptables /usr/sbin/iptables-nft 30

Установите его по умолчанию:

sudo update-alternatives  --set iptables /usr/sbin/iptables-legacy

Отключите UFW и nft:

sudo systemctl disable --now ufw 
sudo systemctl disable --now nftables
sudo apt install iptables-persistent
sudo systemctl enable --now iptables

Ответ или решение

Проблемы с iptables в Ubuntu 22.04: Решение и Советы

Когда вы переходите на новую версию операционной системы, такой как Ubuntu 22.04 с ядром версии 6.2.*, могут возникнуть проблемы с конфигурацией сетевых фильтров. В данном случае вы столкнулись с проблемой: правила iptables, которые использовали в Ubuntu 18.04, не ведут себя так, как предполагалось. Вам необходимо понять, как новая система управления сетевыми фильтрами влияет на ваш сетевой трафик, и что можно сделать для решения этой проблемы.

Причины неработающих правил iptables

  1. nftables как новый стандарт: Начиная с Ubuntu 22.04, в системе используется nftables в качестве стандартного механизма для управления фильтрацией трафика. Это означает, что ваши команды iptables могут не работать, как ожидается, так как они фактически управляют nftables через совместимость.

  2. Конфликты с UFW и nftables: Если UFW (Uncomplicated Firewall) активен, он может переопределять ваши правила iptables. Даже если вы отключили UFW, необходимо убедиться, что никакие другие службы сетевой фильтрации не влияют на вашу конфигурацию.

  3. Порядок правил: Несмотря на ваши попытки вставить правила в начало цепей, существует вероятность, что другие правила имеют более высокий приоритет. Это может произойти, если не все правила явно указаны.

Шаги для устранения проблемы

  1. Проверка активного механизма фильтрации:
    Чтобы проверить, какой механизм фильтрации активен, воспользуйтесь командой:

    update-alternatives --config iptables

    Если вы видите, что используется iptables-nft, вам нужно будет изменить его на iptables-legacy, чтобы ваши старые правила iptables работали.

  2. Переключение на iptables-legacy:
    Если вы решили использовать классические правила iptables, выполните следующие команды:

    sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
  3. Проверка nftables:
    Параллельно с iptables вы можете использовать nftables, который является более современным инструментом. Чтобы перевести ваши правила:

    iptables-translate -A INPUT -s x.x.x.x/32 -d y.y.y.y/32 -i eth2 -j DROP

    Это позволит вам получить эквивалентное правило для nftables.

  4. Отключение UFW и nftables:
    Если вы не используете UFW и хотите полностью избавиться от nftables, выполните следующие команды:

    sudo systemctl disable --now ufw
    sudo systemctl disable --now nftables
  5. Проверка активных правил:
    После внесения изменений проверьте ваши текущие правила:

    iptables -L -n -v

    Убедитесь, что правила применились и что они выглядят таким образом, как вы ожидали.

  6. Тестирование связи:
    После внесения изменений протестируйте, действительно ли ваше приложение теперь не может обнаружить соседний сервер.

Заключение

Переход на новую версию Ubuntu может потребовать значительных изменений в вашей сетевой конфигурации. Понимание работы механизма фильтрации и наложение правил в соответствии с новым стандартом nftables является ключевым моментом для решения ваших проблем с сетевым трафиком. Следуя описанным шагам, вы сможете вновь настроить вашу сетевую безопасность и добиться необходимого результата.

Оцените материал
Добавить комментарий

Капча загружается...