Сохранение и миграция с ufw на iptables-persistent
Здравствуйте, я некомпетентен.
До сих пор я использовал ufw для простой настройки брандмауэра, но я хотел управлять им на уровне конфигурации для более легкой миграции, как pf.conf, поэтому я установил iptables-persistent.
Похоже, есть даже патч ядра, позволяющий использовать pf, но заставлять себя использовать его до такой степени неправильно, и это также означало бы избегание iptables, поэтому я выбрал этот подход.
Установка
iptables, вероятно, уже установлен, поэтому я установлю только iptables-persistent.
Кстати, ufw будет автоматически удален из-за конфликта, поэтому давайте заранее проверим существующие правила.
sudo apt install iptables-persistent
Минимальное использование netfilter-persistent
Чтобы сохранить текущие правила в /etc/iptables/
sudo netfilter-persistent save
Чтобы перезагрузить, используя текущие настройки /etc/iptables/
sudo netfilter-persistent reload
Кстати, если вы выполните save, не выполнив reload, то будут сохранены текущие правила, и написанные вами настройки будут потеряны, так что будьте осторожны.
Настройка
Настройки получились такими.
Довольно жестко, что iptables удаляет все комментарии и переносы строк при save...
# cat rules.v4
# Generated by iptables-save v1.8.9 (nf_tables) on Sat Oct 11 16:27:52 2025
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [18:1900]
:TCP - [0:0]
:UDP - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i 127.0.0.1/32 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -j ACCEPT
-A INPUT -i wg0 -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
COMMIT
# Completed on Sat Oct 11 16:27:52 2025
Что касается правил разрешения, они в основном разрешают доступ для локальных интерфейсов и интерфейсов WireGuard.
В основном я скопировал их из Arch Wiki.
Простой межсетевой экран с отслеживанием состояния - ArchWiki
Это потому, что
Если не добавить -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT, то, например, ответ от команды curl не вернется, поэтому, похоже, необходимо явно направлять установленные соединения в отдельное правило. Я снова осознал, что сила pf заключается в том, что он хорошо справляется с таким управлением состоянием, и это был день, когда мне снова захотелось погладить pf.
До скорой встречи.
Кстати, IPv6 нет
# cat rules.v6
# Generated by ip6tables-save v1.8.9 (nf_tables) on Sat Oct 11 17:37:50 2025
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Sat Oct 11 17:37:50 2025
С наилучшими пожеланиями.