Я настраиваю сервер 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
скрипт будет выполняться с привилегиями этого пользователя/группы. Поэтому вам нужно снова получить привилегии, чтобы иметь возможность удалить правило. Создайте файл, /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
для ознакомления с интерфейсом сценариев.