Настройка OpenVPN для использования Firewalld вместо iptables в Centos 7

14

Мне нужно настроить OpenVPN на Centos 7, используя firewalld.

Я использовал iptables в Centos 6.5, и мне нужно было добавить только следующие строки /etc/sysconfig/iptables:

-A POSTROUTING -s "10.0.0.0/24" -o "wlan0" -j MASQUERADE 
-A FORWARD -p tcp -s 10.0.0.0/24 -d 0.0.0.0/0 -j ACCEPT 
run the command: echo 1 > /proc/sys/net/ipv4/ip_forward 
open port 443.
Fxbaez
источник

Ответы:

31

Используйте firewall-cmdкоманду.

Предполагая, что вы открываете брандмауэр до OpenVPN в зоне по умолчанию, выполните следующие команды. Если вы запускаете его в зоне не по умолчанию, добавьте --zone=<zone>к командам.

Примечание. Если вы используете publicзону по умолчанию для внешнего сетевого адаптера, то ваш петлевой интерфейс также может быть замаскирован (в зависимости от версии, на которой firewalldвы работаете), что может вызвать проблемы, если вы используете службу (например, MySQL), к которой осуществляется доступ на местном уровне.

Сначала перечислите, что открыто в данный момент:

# firewall-cmd --list-services
http https ssh

Далее добавьте openvpnсервис:

# firewall-cmd --add-service openvpn
success

Быстрая проверка:

# firewall-cmd --list-services
http https openvpn ssh

Вышесказанное позволит openvpnработать, что вы можете сейчас проверить. Тем не менее, это не будет продолжаться в течение перезапусков. Чтобы сделать его постоянным, добавьте --permanentопцию:

# firewall-cmd --permanent --add-service openvpn`
success

Обратите внимание, что эта последняя команда не открывает порт до следующего перезапуска, поэтому вам нужно использовать обе команды.

Наконец, добавьте маскарад:

# firewall-cmd --add-masquerade
success

И сделать его постоянным после перезагрузки:

# firewall-cmd --permanent --add-masquerade
success

Подтверди это:

# firewall-cmd --query-masquerade
yes

Обратите внимание, что если ваше входящее соединение OpenVPN находится в другой зоне, чем ваше интернет-соединение, маскарад должен быть последним, и вам нужно будет использовать эту --zone=<zone>опцию с --add-masqueradeкомандами.

garethTheRed
источник
Как вы говорите, что определение сервиса openvpn в firewalld? Например, как вы можете убедиться, что он разрешает openvpn через TCP 443?
Кристофер
@Christopher - Сервисные файлы находятся в /lib/firewalld/services/. В вашем случае это будет openvpn.xmlв этом каталоге. Пользовательские услуги входят в /etc/firewalld/services. Обратите внимание, что порт по умолчанию для openvpn - UDP/1194.
garethTheRed
1
Благодарю. У меня была проблема, и я подумал, что это может быть пожар. Единственное, что я сделал в отличие от приведенных выше инструкций, было использование «https» вместо «openvpn» в качестве имени службы для добавления. Оказывается, проблема была не в огне. Я просто тупил и забыл правильно настроить мой клиент, чтобы использовать «tun» вместо «tap». Приведенные выше инструкции работают отлично.
Кристофер
1
Я заметил проблему с добавлением маскарада ко всей зоне. Это пытается NAT мои подключения к интерфейсу обратной связи, когда я запускаю другие службы на локальном хосте. Я хотел бы ограничить маскировку только 10.8.0.0/16. Есть идеи, как вы можете это сделать?
Кристофер
1
Эта ошибка может быть причиной. По сути, если вашей зоной по умолчанию является publicзона, то она маскирует петлевой интерфейс. Оказывается, ранее я установил зону по умолчанию external, поэтому никогда не сталкивался с проблемой, которую вы видите. Попробуйте переместить службы и адаптер в другую зону, чтобы посмотреть, поможет ли это. Дайте мне знать :-)
garethTheRed