[[ Автозагрузка правил iptables на Ubuntu Server 20.04 ]]

Ubuntu

Автозагрузка правил iptables на Ubuntu Server 20.04

Ubuntu 20.04
iptables-persistent 1.0.14

После перехода системы настройки интерфейсов с ifupdown на netplan, перестали работать прежние способы загрузки правил iptables.
Скрипты в /etc/network/if-pre-up.d/ больше не выполняются, как и в других if-up.d, if-down.d директориях.
Пока ещё остается возможность вернуть систему ifupdown, но этого делать не будем.

Рассмотрим несколько вариантов - это написание простого systemd сервиса и использование готового netfilter-persistent



Установка iptables-persistent

Тут стоит пояснить, что netfilter-persistent это базовый пакет.
This package provides a loader for netfilter configuration using a plugin-based architecture.
По сути это скрипт который вызывается через systemd сервис и запускает уже другие скрипты названные plugin'ами.

А уже пакет iptables-persistent содержит plugin'ы (скрипты) для работы с iptables

/usr/share/netfilter-persistent/plugins.d/15-ip4tables
/usr/share/netfilter-persistent/plugins.d/25-ip6tables

Установка

sudo apt-get install iptables-persistent

На предложение сохранить текущие правила для IPv4, а затем IPv6 - выбираем No

 ┌───────────────────────────────────────────────────────────────┤ Configuring iptables-persistent ├───────────────────────────────────────────────────────────────┐
 │                                                                                                                                                                 │
 │ Current iptables rules can be saved to the configuration file /etc/iptables/rules.v4. These rules will then be loaded automatically during system startup.      │
 │                                                                                                                                                                 │
 │ Rules are only saved automatically during package installation. See the manual page of iptables-save(8) for instructions on keeping the rules file up-to-date.  │
 │                                                                                                                                                                 │
 │ Save current IPv4 rules?                                                                                                                                        │
 │                                                                                                                                                                 │
 │                                                 <Yes>                                                    <No>                                                   │
 │                                                                                                                                                                 │
 └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

Производим настройку iptables, например добавим правило

iptables -A INPUT -s 2.2.2.2 -j DROP

после этого сохраним текущие правила

netfilter-persistent save

Проверяем сохраненные правила

cat /etc/iptables/rules.v4

Для сохранения скрипт выполняет команду

iptables-save > /etc/iptables/rules.v4

Обзор настроек

/etc/default/netfilter-persistent

# Очищает правила iptables в случает остановки сервиса.
# т.е. выполнение команды netfilter-persistent stop (хотя это alias к команде flush)
# netfilter-persistent flush по-прежнему будет работать
FLUSH_ON_STOP=0

# Не сохранять правила iptables.
# Т.е. netfilter-persistent save просто перестает сохранять правила.
# Но в чем смысл такой опции, я не понял.
#IPTABLES_SKIP_SAVE=yes
#IP6TABLES_SKIP_SAVE=yes

# Не сохранять ipset'ы
# Актуально с пакетом ipset-persistent
#IPSET_SKIP_SAVE=yes

# По умолчанию перед загрузкой существующие правила iptables очищаются.
# Можно отключить очищение, будет выполняться iptables-restore --noflush
#IPTABLES_RESTORE_NOFLUSH=yes
#IP6TABLES_RESTORE_NOFLUSH=yes

Теперь можно перезагрузиться и проверить.



Создаем свой systemd сервис

Это простой и рабочий способ запустить скрипт для настройки iptables при старте операционной системы.
Для себя вижу плюсом данного способа то, что установка правил происходит bash скриптом, что дает больше возможностей.

Создаем скрипт для настройки, содержимое исключительно для примера:

/root/bin/iptables-set.sh

#!/bin/bash
set -eu
##############################################################
# ACL
##############################################################
BLACK_LIST="
62.210.202.0/24
195.154.170.0/24
"

##############################################################
# INPUT
##############################################################
# Бан по IP
for IP in ${BLACK_LIST}; do
  iptables -A INPUT -i enp5s0 -s ${IP} -j DROP
done

chmod +x /root/bin/iptables-set.sh

Создаем файл сервиса

/etc/systemd/system/iptables-set.service

[Unit]
Description=setup iptables configuration
DefaultDependencies=no
Wants=network-pre.target systemd-modules-load.service local-fs.target
Before=network-pre.target
After=systemd-modules-load.service local-fs.target

[Service]
Type=oneshot
ExecStart=/root/bin/iptables-set.sh

[Install]
WantedBy=multi-user.target

Активируем сервис

systemctl daemon-reload
systemctl enable iptables-set

Применим конфигурацию

systemctl restart iptables-set

Так же можно перезагрузиться и проверить.






Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
97 +3 = 
 
howto/ubuntu/ubuntu20.04_iptables_at_startup.txt · Последнее изменение: 2023/06/01 12:32 — lexa
Gentoo Linux Gentoo Linux Driven by DokuWiki