Назад | Перейти на главную страницу

Ubuntu 18.04 не загружает правила iptables после перезагрузки

Мы предоставляем серверы с помощью шеф-повара, поэтому у нас одинаковая конфигурация для версий Ubuntu 16.04 и 18.04. И такое же правило для восстановления правил iptables cat /etc/network/if-pre-up.d/iptables_load /sbin/iptables-restore < /etc/iptables/general но это не работает для Ubuntu 18.04.

Если я запускаю его вручную, он работает. Означает ли это, что этот скрипт не запускается при запуске?

ОБНОВИТЬ

Я создал сервис systemd, как это описано Вот и он отлично работает.

[Unit]
Description = Apply iptables rules 

[Service]
Type=oneshot
ExecStart=/etc/network/if-pre-up.d/iptables_load

[Install]
WantedBy=network-pre.target

Вот что я сделал:

  1. Перетащите свой iptables.rules в /etc/iptables.rules
  2. Создайте шаблон сервиса так:

    sudo nano /etc/systemd/system/restore-iptables-rules.service
    

    Скопируйте и вставьте это:

    [Unit]
    Description = Apply iptables rules
    
    [Service]
    Type=oneshot
    ExecStart=/bin/sh -c 'iptables-restore < /etc/iptables.rules'
    
    [Install]
    WantedBy=network-pre.target
    
  3. Включите сервис так:

    sudo systemctl enable restore-iptables-rules.service
    
  4. Перезагрузитесь и убедитесь, что правила были применены:

    sudo iptables -L
    

Я столкнулся с множеством проблем, связанных с запуском iptables в местах срабатывания. По мере того, как мой сценарий iptables становился все более сложным, тот факт, что он мог запускаться (в зависимости от точного местоположения сценария) для каждого интерфейса, стал проблемой, как и необходимость правильного сетевого интерфейса для работы, если такие вещи, как разрешение имени хоста, должны работать. Эти факторы вызывали медленную загрузку и сбои. Вы можете рассмотреть альтернативу - запустить сценарий iptables как службу systemd.

Это можно сделать, создав файл с именем, например, real_iptables.service в / etc / systemd / system / с таким содержимым, как:

[Unit]
Description=Set up the firewall
After=network.target

[Service]
Type=oneshot
ExecStart=/root/iptables

[Install]
WantedBy=multi-user.target

Фактический сценарий iptables, как вы можете видеть, находится в / root / iptables. Установите службу с помощью:

systemctl enable real_iptables
systemctl start real_iptables

Если служба включена, она будет запущена во время загрузки, но будет запущена только один раз. Если вы хотите быть полностью защищенным, можно поместить сценарий в /etc/network/if-up.d/, который использует iptables для блокировки всех сетевых соединений. Это означает, что ничего не может произойти, пока служба не запустится.