netfilter-persistent

ipset як і iptabbles (ip6tables) працюють в пам'яті і не зберігаються на диск. Утиліта netfilter-persistent допомагає зберегти і відновити набори/правила до і після перезавантаження сервера.

Як працює ipset-persistent

В Ubuntu ipset-persistent входить у пакет iptables-persistent. Він:

  • при збереженні пише в /etc/iptables/ipsets

  • при завантаженні виконує ipset restore < /etc/iptables/ipsets

(аналогічно з iptables → /etc/iptables/rules.v4 і /etc/iptables/rules.v6).


Після встановлення у /usr/share/netfilter-persistent/plugins.d/ маємо два файли для відтврення правил iptables:

drwxr-xr-x 3 root root 4096 Sep 11 14:56 ../
-rwxr-xr-x 1 root root 2404 May 13  2023 15-ip4tables*
-rwxr-xr-x 1 root root 2471 May 13  2023 25-ip6tables*

Додамо плагін для відтворення наборів ipset

Файли з цієї директорії виконуються по черзі (run-parts), у порядку назв. Тобто якщо треба створити 10-ipset, він відпрацює раніше існуючих, щоб на момент відтворення правил iptables набори ipset вже існували.

nano /usr/share/netfilter-persistent/plugins.d/10-ipset
#!/bin/sh
### BEGIN INIT INFO
# Provides:          ipset
# Required-Start:
# Required-Stop:
# Default-Start:
# Default-Stop:
# Short-Description: Load and save ipset rules
### END INIT INFO

set -e

IPSET_SAVE="/etc/iptables/ipsets"

case "$1" in
    start)
        [ -f "$IPSET_SAVE" ] && ipset restore < "$IPSET_SAVE" || true
        ;;
    stop)
        ipset save > "$IPSET_SAVE"
        ;;
    save)
        ipset save > "$IPSET_SAVE"
        ;;
    restart|reload|force-reload)
        ;;
esac
chmod +x /usr/share/netfilter-persistent/plugins.d/10-ipset

Перевіряємо

systemctl restart netfilter-persistent
systemctl status netfilter-persistent

Керування

  • зберегти вручну поточні ipset-набори:

    sudo netfilter-persistent save

    це викличе ipset save > /etc/iptables/ipsets

  • відновити:

    sudo netfilter-persistent reload

    або просто перезавантажити сервер


Перевірка сервісу

systemctl status netfilter-persistent.service

Він стартує на multi-user.target і виконує restore автоматично.


Last updated