Служба “netfilter-persistent” не может быть запущена.

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

При запуске “netfilter-persistent” он завершает работу с ошибкой:

10 мая 19:41:53 debian systemd[1]: Запуск постоянной конфигурации netfilter...
-- Тема: Юнит netfilter-persistent.service начал запуск
-- Определено: systemd
-- Поддержка: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Юнит netfilter-persistent.service начал запуск.
10 мая 19:41:53 debian netfilter-persistent[3099]: run-parts: выполняется /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
10 мая 19:41:53 debian netfilter-persistent[3099]: run-parts: /usr/share/netfilter-persistent/plugins.d/15-ip4tables завершился с кодом 2
10 мая 19:41:53 debian netfilter-persistent[3099]: run-parts: выполняется /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
10 мая 19:41:53 debian systemd[1]: netfilter-persistent.service: основной процесс завершился, код=завершился, статус=1/ОШИБКА
10 мая 19:41:53 debian systemd[1]: Не удалось запустить постоянную конфигурацию netfilter.
-- Тема: Юнит netfilter-persistent.service завершился с ошибкой

Это следующий скрипт, упомянутый в выводе ошибки:

#!/bin/sh

# Этот файл является частью netfilter-persistent
# (был iptables-persistent)
# Авторское право (C) 2009, Симон Рихтер <[email protected]>
# Авторское право (C) 2010, 2014 Джонатан Уилтшир <[email protected]>
#
# Эта программа является свободным программным обеспечением; вы можете распространять ее и/или
# изменять на условиях GNU General Public License,
# как это опубликовано Фондом свободного программного обеспечения, либо версии 3
# Лицензии, либо (по вашему выбору) любой более поздней версии.

exit 0

set -e

rc=0

load_rules()
{
        # загрузка правил IPv6
        if [ ! -f /etc/iptables/rules.v6 ]; then
                echo "Предупреждение: пропуск IPv6 (нет правил для загрузки)"
                exit 0
        else
                ip6tables-restore < /etc/iptables/rules.v6 2> /dev/null
                if [ $? -ne 0 ]; then
                        rc=1
                fi
        fi
}

save_rules()
{
        # сохранение правил IPv6
        # нужно как минимум загрузить ip6table_filter:
        /sbin/modprobe -q ip6table_filter
        if [ ! -f /proc/net/ip6_tables_names ]; then
                log_action_cont_msg "Предупреждение: пропуск IPv6 (модули не загружены)"
        elif [ -x /sbin/ip6tables-save ]; then
                touch /etc/iptables/rules.v6
                chmod 0640 /etc/iptables/rules.v6
                ip6tables-save > /etc/iptables/rules.v6
                if [ $? -ne 0 ]; then
                        rc=1
                fi
        fi
}

flush_rules()
{
        if [ ! -f /proc/net/ip6_tables_names ]; then
                echo "Предупреждение: пропуск IPv6 (модуль не загружен)"
        elif [ -x /sbin/ip6tables ]; then
                for param in F Z X; do /sbin/ip6tables -$param; done
                for table in $(cat /proc/net/ip6_tables_names)
                do
                        /sbin/ip6tables -t $table -F
                        /sbin/ip6tables -t $table -Z
                        /sbin/ip6tables -t $table -X
                done
                for chain in INPUT FORWARD OUTPUT
                do
                        /sbin/ip6tables -P $chain ACCEPT
                done
        fi
}

case "$1" in
start|restart|reload|force-reload)
        load_rules
        ;;
save)
        save_rules
        ;;
stop)
        # Почему? потому что если используется stop, фаервол сбрасывается на переменное
        # количество времени во время обновлений пакетов, оставляя машину уязвимой
        # Также не всегда желательно сбрасывать во время очистки
        echo "Автоматический сброс отключен, используйте \"flush\" вместо \"stop\""
        ;;
flush)
        flush_rules
        ;;
*)
    echo "Использование: $0 {start|restart|reload|force-reload|save|flush}" >&2
    exit 1
    ;;
esac

exit $rc

Быстрое исправление

В моем случае была испорченная строка с -j ULOG в файле /etc/iptables/rules.v4. Удаление этой строки и повторный запуск apt-get upgrade исправили проблему для меня.

Как отлаживать

Ошибка здесь:

10 мая 19:41:53 debian netfilter-persistent[3099]: run-parts: /usr/share/netfilter-persistent/plugins.d/15-ip4tables завершился с кодом 2

Вы можете запустить это от имени root для отладки:

/usr/share/netfilter-persistent/plugins.d/15-ip4tables start

После проверки исходного кода /usr/share/netfilter-persistent/plugins.d/15-ip4tables это была подозрительная ошибочная команда:

/sbin/iptables-restore < /etc/iptables/rules.v4 2> /dev/null

Вы можете запустить это отдельно:

/sbin/iptables-restore -v < /etc/iptables/rules.v4

Сообщенная испорченная строка была бесполезной, поэтому я просто запустил строки в оболочке с префиксом iptables, чтобы получить что-то полезное. Например, для строки

-A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 22 -j ACCEPT

вы можете запустить

iptables -A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 22 -j ACCEPT

В моем случае проблема проявлялась только при загрузке, когда я вручную выполнял iptables-restore < /etc/iptables/rules.v4, все работало.

Так что я сделал, чтобы выяснить, что не так, я изменил метод load_rules в /usr/share/netfilter-persistent/plugins.d/15-ip4tables, чтобы записывать в журнал.

код до:

load_rules()
{
        # загрузка правил IPv4
        if [ ! -f /etc/iptables/rules.v4 ]; then
                echo "Предупреждение: пропуск IPv4 (нет правил для загрузки)"
        else
                /sbin/iptables-restore < /etc/iptables/rules.v4 2> /dev/null
                if [ $? -ne 0 ]; then
                        rc=1
                fi
        fi
}

после:

load_rules()
{
        # загрузка правил IPv4
        if [ ! -f /etc/iptables/rules.v4 ]; then
                echo "Предупреждение: пропуск IPv4 (нет правил для загрузки)"
        else
                /sbin/iptables-restore -v < /etc/iptables/rules.v4 2>> /var/log/netfilter-debug
                if [ $? -ne 0 ]; then
                        rc=1
                fi
        fi
}

вывод, который я получил в /var/log/netfilter-debug:

iptables-restore: строка 48 не удалась

так я знал, где искать. Интересно, что проблемная строка была COMMIT… все еще исследую, почему это так.

На нашей установке Debian 12 ни одно из предложенных решений не сработало, и после некоторых изменений мы выяснили, что firewalld загружен, но неактивен.

Тем не менее, firewalld импортировал правила из своего набора правил по умолчанию (только 3 правила P Accept), что означало, что netfilter-persistent не работает (что было правдой, потому что NFP был неактивен).

Поэтому мы удалили и очистили Firewalld, перезагрузили, и все заработало нормально без каких-либо изменений конфигурации.

apt remove –auto-remove firewalld && apt purge firewalld && rm -rf /etc/firewalld

Пожалуйста, любой, кто сталкивался с аналогичным случаем или решением, прокомментируйте.

С уважением,
Джордж

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

Ошибка запуска службы "netfilter-persistent"

Введение

Служба netfilter-persistent предназначена для сохранения и восстановления правил фильтрации пакетов для iptables и ip6tables в системах Linux. При запуске этой службы могут возникать различные ошибки, и одна из наиболее распространенных заключается в том, что она не запускается из-за проблем с конфигурационными правилами. В данном статье мы рассмотрим причины, по которым служба может не запускаться, пути диагностики проблемы, а также возможные решения.

Описание проблемы

При попытке запустить службу netfilter-persistent, вы можете столкнуться с сообщением об ошибке, подобным следующему:

May 10 19:41:53 debian netfilter-persistent[3099]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
May 10 19:41:53 debian netfilter-persistent[3099]: run-parts: /usr/share/netfilter-persistent/plugins.d/15-ip4tables exited with return code 2
May 10 19:41:53 debian netfilter-persistent[3099]: systemd[1]: netfilter-persistent.service: main process exited, code=exited, status=1/FAILURE

Это означает, что скрипт, который отвечает за загрузку правил из файла /etc/iptables/rules.v4, завершился с ошибкой.

Поиск причин

Ваша проблема может быть вызвана следующими факторами:

  1. Неисправные правила в файлах конфигурации: Например, правила, содержащие -j ULOG, могут вызвать сбои.
  2. Проблемы с модулями ядра: Убедитесь, что необходимые модули, такие как ip_tables и ip6_tables, загружены.
  3. Конфликт с другими системами управления сетевым трафиком: Наличие firewalld на вашей системе может препятствовать правильной работе netfilter-persistent.

Диагностика проблемы

Чтобы выявить источник проблемы, выполните следующие шаги:

  1. Запустите скрипт для отладки вручную:

    /usr/share/netfilter-persistent/plugins.d/15-ip4tables start

    Это отображает более точные сообщения об ошибках.

  2. Проверьте файл правил iptables на наличие ошибок:

    /sbin/iptables-restore -v < /etc/iptables/rules.v4

    Обратите внимание на выданные ошибки и неверные строки.

  3. Если при загрузке службы нет сообщений об ошибках, попробуйте временно изменить функцию load_rules в 15-ip4tables, чтобы записывать вывод в лог:

    /sbin/iptables-restore -v < /etc/iptables/rules.v4 >> /var/log/netfilter-debug

Решение проблемы

Вот несколько шагов для устранения неполадок:

  1. Исправьте некорректные правила: Проверьте строки в файле /etc/iptables/rules.v4 и уберите или исправьте неправильные команды.

  2. Удаление конфликта с firewalld: Если firewalld установлен, он может конфликтовать с netfilter-persistent. Вы можете удалить его с помощью следующих команд:

    apt remove --auto-remove firewalld
    apt purge firewalld
    rm -rf /etc/firewalld
  3. Перезагрузите службу:

    systemctl restart netfilter-persistent
  4. Проверка статуса службы:

    systemctl status netfilter-persistent

Заключение

Ошибка запуска службы netfilter-persistent может быть вызвана различными проблемами, начиная от неправильных правил в конфигурационных файлах и заканчивая конфликтами с другими установленными пакетами. Проведение диагностики, исправление ошибок и возможная деинсталляция конфликтующих программ помогут решить возникшую проблему. Убедитесь, что ваша система защищена, и сетевые правила правильно загружаются при каждой перезагрузке.

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

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