Допустим, у меня есть пара серверов в DigitalOcean, и я хочу, чтобы они общались друг с другом.
DigitalOcean предлагает соединение WAN и соединение LAN. Проблема в том, что оба они небезопасны. WAN - это Интернет, а LAN используется всеми, у кого есть компьютер (VPS) в DigitalOcean.
Итак, я хочу заблокировать все, кроме нескольких портов, таких как 53, 80, 443, в глобальной сети. Это стандартная процедура.
Тогда, возможно, у меня есть MySQL на другом компьютере, поэтому я хочу открыть порт 3306 для IP-адреса 10.1.1.1 (примеры IP-адресов, на самом деле не действующие в DigitalOcean.)
Теперь моя проблема в том, что мне нужны правила брандмауэра быть на месте до запуска любого интерфейса.
auto eth0 eth1
iface eth0 inet static
address 8.8.8.2 # some Internet address
netmask 255.255.255.255
gateway 8.8.8.1 # some Internet address
dns-nameservers 8.8.8.8 8.8.4.4
pre-up /etc/network/firewall
iface eth1 inet static
address 10.1.1.1
netmask 255.0.0.0
pre-up /etc/network/firewall
Я решил добавить предварительную настройку
к обоим интерфейсам. Таким образом, я уверен, что он запускается раньше любого из них, это также означает, что сценарий будет запускаться дважды.
Это способ сделать это? Или есть лучший способ иметь эквивалент pre-up
, который будет глобальным для всех интерфейсов?
Примечание: ОС - это Ubuntu 16.04.1, последняя доступная версия.
Я действительно нашел решение, так как я использую Ubuntu 16.04 и у нас есть systemd, я просто создал скрипт snapinitfirewall.service
и установил его на свой код межсетевого экрана.
# Documentation available at:
# https://www.freedesktop.org/software/systemd/man/systemd.service.html
[Unit]
Description=Snap! Websites firewall initialization
Before=network.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/etc/network/firewall
#ExecStop=... -- why would you ever want to remove your firewall rules?
[Install]
WantedBy=multi-user.target
# vim: syntax=dosini
/ etc / network / firewall
- это сценарий, который восстанавливает все правила сразу при загрузке.
Поскольку у меня есть другой служебный файл для этого одного пакета (то есть один пакет, предлагающий две службы), я должен включить следующую строку, чтобы убедиться, что инициализация включена и выполняется при перезагрузке:
systemctl -q enable snapinitfirewall
Это гораздо лучший подход, чем с помощью возможности pre-up
, поскольку вы можете быть уверены, что она будет запущена до запуска сети.
Для тех, кого интересует больше, проект snapfirewall находится на github.