Перейти к основному содержимому

Конфликт ufw и iptables-persistent в Ubuntu/Debian

·344 слов·2 минут
DevOps • Networks • Security • Infrastructure
Автор
DevOps • Networks • Security • Infrastructure
DevOps/Network/Infra Engineer, CyberSecurity Expert

При установке пакета ufw (uncomplicated firewall) пакетный менеджер автоматически удаляет пакеты iptables-persistent и netfilter-persistent:

apt install ufw

Removing iptables-persistent (1.0.20) ...
Removing netfilter-persistent (1.0.20) ...

Почему они конфликтуют
#

iptables-persistent - сохраняет правила iptables в файлы (/etc/iptables/rules.v4, /etc/iptables/rules.v6) и восстанавливает их при загрузке системы;
netfilter-persistent - сервис, который загружает сохранённые правила Netfilter при старте системы;
ufw - это надстройка над iptables, которая тоже управляет правилами Netfilter (iptables/nftables) и имеет свой собственный механизм сохранения;

Оба инструмента пытаются управлять одними и теми же правилами netfilter, что приводит к конфликтам. Если оставить оба механизма, они потенциально могут перезаписывать правила друг друга при загрузке или изменении конфигурации.

Последствия для администратора
#

Важные правила могут потеряться при перезагрузке, например, правило для NAT:

iptables -t nat -A POSTROUTING -s 10.200.0.0/24 -o eth0 -j MASQUERADE

Если добавить его после установки UFW, правило будет работать, но не сохранится после перезагрузки системы.

Решения
#

Вариант 1: Оставить UFW и добавить правила через него (рекомендуется для простых конфигураций)

# Добавить правило MASQUERADE в конфиг UFW
# Отредактировать /etc/ufw/before.rules
nano /etc/ufw/before.rules

# Добавить перед секцией "*filter":
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.200.0.0/24 -o eth0 -j MASQUERADE
COMMIT

# Затем перезагрузить UFW
ufw reload

Вариант 2: Вернуть iptables-persistent обратно с удалением UFW (для сложных конфигураций)

# Установить iptables-persistent, UFW сам удалится
apt install iptables-persistent

# Добавить правило и сохранить
iptables -t nat -A POSTROUTING -s 10.200.0.0/24 -o eth0 -j MASQUERADE
netfilter-persistent save
# или
iptables-save > /etc/iptables/rules.v4

Вариант 3: Использовать оба (не рекомендуется, но возможно)

# После установки UFW, создать скрипт загрузки
cat > /etc/network/if-up.d/iptables-nat << 'EOF'
#!/bin/sh
iptables -t nat -A POSTROUTING -s 10.200.0.0/24 -o eth0 -j MASQUERADE
EOF

chmod +x /etc/network/if-up.d/iptables-nat

Проверить текущее состояние
#

# Проверить, работает ли MASQUERADE сейчас
iptables -t nat -L -n -v

# Проверить статус UFW
ufw status

# Проверить, загружены ли сохраненные правила
iptables-save | grep MASQUERADE

Рекомендация
#

Если у вас простая конфигурация - оставьте UFW и добавьте правило в /etc/ufw/before.rules (Вариант 1).
Если у вас сложная конфигурация с множеством VPN/туннелей - верните iptables-persistent (Вариант 2), так как он дает более прямой контроль над правилами.

Related

Установка OpenVPN на Ubuntu
·560 слов·3 минут
Настройка Policy-based и Route-based VPN через strongSwan с swanctl
·860 слов·5 минут
Настройка IPSec между серверами Ubuntu (AWS) и Ubuntu (Azure)
·1519 слов·8 минут