Я настраиваю сервер OpenVPN на Debian.
У меня настроен сервер, и клиенты могут подключаться — им назначаются IP-адреса в диапазоне 10.11.22.0/24.
У меня в файле server.conf есть следующее:
client-to-client
status /var/log/openvpn-status.log
verb 3
server 10.11.22.0 255.255.255.0
# This ensures Internet-bound traffic to-from clients can pass through the VPN
push "redirect-gateway def1"
push "dhcp-option DNS (my DNS address)"
У меня включена переадресация ip (установлена в /etc/sysctl.conf
)
Думаю нужно добавить правило NAT в iptables, наверное вида
iptables -t nat -A POSTROUTING -s 10.11.22.0/24 -o eth0 -j MASQUERADE
(исправления приветствуются!)
Мой вопрос: куда должно идти это правило, чтобы оно сохранялось (переживало перезагрузки)?
Я предполагаю, что в идеальном мире правило будет добавлено, когда VPN-сервер появится, и удалено, когда он выйдет из строя, но сервер все равно настроен на автоматический запуск в systemctl, так что это, вероятно, не имеет значения.
Я просто хочу сделать это в нужном месте, чтобы другой сисадмин не удивился и смог его найти.
Никки Лок
1 ответ
В общем, брандмауэр должен быть независим от VPN. В Debian им можно было управлять (сохранять и восстанавливать) с помощью netfilter-persistent
а также iptables-persistent
пакеты (оба обязательны).
Однако можно запускать любые команды при запуске или выключении сервера OpenVPN, для чего он имеет интерфейс сценариев. В этом случае не используйте netfilter-persistent
& iptables-persistent
иначе ваш брандмауэр может раздуться (рассмотрите следующий сценарий: скрипт добавил правило, затем фаерволл сохранен, затем скрипт удалил правило, перезагрузился — брандмауэр загрузился сохранен состояние с правилом, затем скрипт запускается и добавляет еще один правило; после нескольких повторов вы увидите несколько одинаковых правил в брандмауэре).
Во-первых, добавьте в конфигурацию OpenVPN:
script-security 2
up /etc/openvpn/add-rule.sh
down sudo /etc/openvpn/remove-rule.sh
script-security
необходим для запуска скриптов вообще.
Скорее всего у вас не root user
и/или group
в конфигурации сервера (что хорошо!), так что ваш down
script будет выполняться с правами этого пользователя/группы. Поэтому вам нужно снова получить привилегии, чтобы иметь возможность удалить правило. Создать файл /etc/sudoers.d/openvpn-remove-rule
который содержит следующую строку, которая позволит этому пользователю выполнить указанную команду:
<user> ALL=(ALL) NOPASSWD: /etc/openvpn/remove-rule.sh
(заменять <user>
с любым пользователем, установленным в конфигурации OpenVPN, вероятно nobody
). затем chmod 0400 /etc/sudoers.d/openvpn-remove-rule
иначе sudo откажется его загружать.
Объяснение зачем нужен скрипт а не просто поместить вызов команды iptables через sudo прямо в конфигурацию OpenVPN. Короче: безопасность.
С другой стороны, up
Команда запускается до сброса привилегий root, но для согласованности я предлагаю использовать и для нее сценарий.
Содержимое этих сценариев очевидно, просто введите команды iptables, которые необходимо запускать при запуске и выключении сервера. (В принципе там можно использовать любые команды, не только iptables.) Сделать оба скрипта исполняемыми.
Читать man openvpn
для справки о его интерфейсе сценариев.
Никита Киприянов