Home » Ошибки » Настройка firewalld при работе с openvpn

Настройка firewalld при работе с openvpn

Настраивал подключение centos серверов к openvpn серверу и столкнулся с неожиданной ошибкой, с которой провозился около часа, пока не нашел решение. Суть в том, что не получалось добавить tun интерфейс в зону trusted в настройках firewalld. Все простые и очевидные решения не подходили. Статья будет в тему вопроса, почему я не использую firewalld, а продолжаю писать правила в классическом iptables.

У меня есть openvpn сервер и пачка других серверов с centos, которые надо объединить приватной сетью между собой. Настроил сервер по своей же статье — настройка openvpn. Подключил клиентов к серверу, они нормально видят друг друга, сеть работает. Дальше нужно было отключить некоторые сервисы из публичной сети и разрешить их работу только через openvpn. Задача простейшая — закрываем доступ к определенным портам из интернета, разрешаем все в сети openvpn, которая использует tun интерфейс.

Для справки приведу все команды, которыми пользовался, может кому-то пригодится. Покажу на примере сервиса мониторинга zabbix, который использует tcp порт 10050. Для начала сморим список всего, что разрешено на фаерволе:

# firewall-cmd --permanent --list-all

public
 target: default
 icmp-block-inversion: no
 interfaces: 
 sources: 
 services: ssh dhcpv6-client http https
 ports: 22987/tcp 8070/tcp 80/tcp 443/tcp 8890/tcp 8891/tcp 8893/tcp 8894/tcp 5222/tcp 5223/tcp 10050/tcp
 protocols: 
 masquerade: no
 forward-ports: 
 source-ports: 
 icmp-blocks: 
 rich rules:

У меня получился такой список. Мне нужно отключить службу ssh и 10050/tcp порт. Они не нужны в публичной сети. Заодно уберем dhcpv6-client, он тоже не нужен. Отключаем:

# firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client
# firewall-cmd --permanent --zone=public --remove-service=ssh
# firewall-cmd --permanent --zone=public --remove-port=10050/tcp

Сохраняем правила:

# firewall-cmd --reload

Теперь мне нужно добавить всю vpn сеть в список доверенных сетей, чтобы не открывать отдельно каждый порт. Для начала смотрим список активных сетей в данный момент:

# firewall-cmd --get-active-zones

bx_trusted
 sources: 193.121.174.217/32
public
 interfaces: eth0

bx_trusted создает bitrixenv после установки на сервер. В данном случае не принципиально. Нам нужно добавить еще одну активную зону trusted с интерфейсом tun0. Нет ничего проще:

# firewall-cmd --permanent --zone=trusted --add-interface=tun0

The interface is under control of NetworkManager and already bound to 'trusted'
The interface is under control of NetworkManager, setting zone to 'trusted'.
success

Двоякое чувство. Сначала написали подозрительное сообщение, потом сказали, что success. Проверяю еще раз список активных зон — ничего не изменилось. Дальше пошел в гугль. Тема популярна, решение тоже предлагается, в том числе где-то на сайте redhat. Либо отключите управление NetworkManager сетевым интерфейсом, либо явно пропишите зону для интерфейса. Делается все это в конфигурационном файле в директории /etc/sysconfig/network-scripts. Делается это либо так:

NM_CONTROLLED=no

либо вот так:

ZONE=trusted

Все бы хорошо, но интерфейс tun0 поднимается после запуска openvpn клиента и конфигурационного файла у него нет. Более того, если в консоли запустить nmtui — утилиту NetworkManager для управления сетью, там вы тоже не найдете tun. Ситуация странная и неоднозначная. Мне изначально хотелось все сделать, сохранив дефолтную установку системы — не отключать NetworkManager и Firewalld. Время от времени я получаю информацию о том, что это удобно и надо привыкать к новым средствам, которые сделаны, чтобы облегчить жизнь системных администраторов.

Я честно пытался себе облегчить жизнь, но в итоге не выдержал и отключил NetworkManager:

# systemctl stop NetworkManager
# systemctl disable NetworkManager
# systemctl restart network

После этого снова добавил tun0 в зону trusted:

# firewall-cmd --permanent --zone=trusted --add-interface=tun0
success

Никаких подозрительных сообщений не получил. Сохранил правила firewalld:

# firewall-cmd --reload

И проверил, применились ли изменения:

# firewall-cmd --get-zone-of-interface=tun0
trusted

# firewall-cmd --get-active-zones
bx_trusted
 sources: 193.121.174.217/32
public
 interfaces: eth0
trusted
 interfaces: tun0

Все в порядке. На всякий случай проверим сами правила iptables:

# iptables -L -v -n | grep tun
 0 0 FWDI_trusted all -- tun0 * 0.0.0.0/0 0.0.0.0/0 
 0 0 FWDO_trusted all -- * tun0 0.0.0.0/0 0.0.0.0/0 
 0 0 IN_trusted all -- tun0 * 0.0.0.0/0 0.0.0.0/0

Теперь точно все в порядке. Для проверки перезагрузил сервер. Все настройки сохранились, туннель поднялся, сервисы заработали через openvpn.

Это не первая ситуация, когда я трачу время на то, чтобы решить проблему с firewalld. Я искренне не понимаю, чем он удобнее классических правил iptables. Мне достаточно один раз посмотреть скрипт конфигурации iptables, чтобы увидеть всю картину, быстро что-то добавить или изменить и применить изменения. И такой ерунды, как в приведенном мной примере никогда не было. Все работает четко и понятно.

А как вы считаете NetworkManager и Firewalld лучше и удобнее традиционных средств управления сетью и фаерволом? Я в упор не вижу простоты и удобства. Точно так же не вижу удобства ip в сравнении с ifconfig и netstat. К ip я уже привык, как к замене ifconfig, сетью управляю только через ip. Но вот вывод аналогичной информации netstat через ip получается менее наглядным и удобным. По прежнему использую netstat.

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Помогла статья? Есть возможность отблагодарить автора

8 комментариев

  1. Владимир

    NetworkManager выключаю всегда.

    Firewalld оставляю редко, когда ничего особо там не нужно настраивать, например, максисум порт/сервис открыть.
    Чаще всего перехожу на shorewall. Легко вносить изменения. Цепочки генерируются сами. Очень нравится.

    ifconfig не использую.

    netstat использую=)

    • Самое интересное, что я читал рекомендации по подготовке к сертификации redhat и там рекомендуют использовать и NetworkManager и Firewalld. Якобы это сокращает время, затраченное на настройки, так как интерфейсы более удобные и продуманные, можно сэкономить время. У меня были мысли подготовиться к сдаче экзаменов, но вот это все мне просто не хочется учить, так как я вижу, что в моей работе мне это не помогает, там вообще много всего надо выучить, что в целом не имеет большого смысла, так как в работе ты шпаргалками пользуешься. В итоге не хочется тратить время на изучение бесполезных вещей, которые потом будешь отключать.

      • Владимир

        Ну не знаю как NM может ускорить и упростить… Скорее наоборот=)

        • Идея такая, что gui интерфейсы быстрее текстовых. Соответственно, через NM настройки делать быстрее, чем править конфиги руками.

  2. Сталкивался с ситуацией когда после удаления/отключения NM не мог интерфейс перенести в определенную зону, точнее переносилось без ключа —permamnet, а если использовать этот ключ — по после перезагрузки интерфейс был в «старой» зоне (файлы в /etc/sysconfig/network-scripts редактировал в ручную тоже — не помогало). Причем такая ситуация была на нескольких серверах. Помогло включение NM и команда по аналогии с » nmcli c mod eth1 connection.zone external «

Добавить комментарий

Ваш e-mail не будет опубликован.