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

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

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

UPDATE

Я создал службу systemd, как описано здесь, и она работает нормально.

[Unit]
Description = Apply iptables rules 

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

[Install]
WantedBy=network-pre.target
3
задан 31 May 2018 в 10:53
2 ответа

Я столкнулся с множеством проблем с iptables, запускаемым в местоположениях if-up. По мере того, как мой сценарий 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 для блокировки всех сетевых соединений. Это означает, что ничего не может произойти, пока служба не запустится.

0
ответ дан 3 December 2019 в 07:50

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

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

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

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

      [Единица]
    Описание = Применить правила iptables
    
     [Обслуживание]
    Тип = oneshot
    ExecStart = / bin / sh -c 'iptables-restore 
  3. Включите службу следующим образом:

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

     sudo iptables -L
     
0
ответ дан 3 December 2019 в 07:50

Теги

Похожие вопросы