Мы предоставляем серверы с помощью шеф-повара, поэтому у нас одинаковая конфигурация для версий 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
Вот что я сделал:
Создайте шаблон сервиса так:
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
Включите сервис так:
sudo systemctl enable restore-iptables-rules.service
Перезагрузитесь и убедитесь, что правила были применены:
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 для блокировки всех сетевых соединений. Это означает, что ничего не может произойти, пока служба не запустится.