Блокировать все интернет-соединения, когда соединение OpenVPN отключается.

Вопрос или проблема

Мы используем OpenBSD 7.6 и имеем соединение OpenVPN, созданное с помощью pkg_add openvpn (openvpn-2.6.12) и записью этого в /etc/hostname.tun0 с перезагрузкой после сохранения:

up
!/usr/local/sbin/openvpn --daemon --config /etc/openvpn/my-config.ovpn

Наш публичный IP-адрес совпадает с адресом сервера OpenVPN при проверке (хорошо). Однако, когда соединение с сервером OpenVPN разрывается, интернет-трафик утечет из VPN, и вместо этого будет виден наш публичный IP-адрес (плохо).

Как мы можем настроить этот компьютер так, чтобы весь трафик, отправляемый на/из интернета, проходил исключительно через соединение OpenVPN, и если это соединение будет прервано/не подключено, любые попытки доступа в интернет блокировались?

  • ifconfig показывает, что у нас есть bcm0 как наш Ethernet и tun0 как наше соединение OpenVPN. У этого компьютера есть только один Ethernet-порт.

  • netstat -R показывает, что у нас есть только один Rdomain, 0, и интерфейсы lo0 bge0 enc0 tun0 pflog0 находятся под ним с таблицами маршрутизации только 0.

  • Нам все еще нужен доступ к компьютеру через локальные IP-адреса, независимо от того, установлено ли соединение OpenVPN/прервано/не подключено.

Я просмотрел мануалы route, rdomain, trunk, ifconfig, openvpn, но не могу заставить это работать правильно.

Я пробовал добавить rdomain 0 в /etc/hostname.tun0 и rdomain 1 в /etc/hostname.bge0 и перезапустил, но это сломало локальные SSH-соединения (мне пришлось вернуть эти изменения, чтобы это исправить).

Вкратце: нам нужно заблокировать весь интернет-трафик от всех процессов, если соединение OpenVPN не установлено. Локальный IP-трафик — единственное, что может/должно работать независимо от этого соединения, из-за того, что локальные IP-адреса разрешаются на локальные устройства, а ничего на сервере OpenVPN (который мы не контролируем).

Ответ или решение

Чтобы решить проблему утечек интернет-трафика при отключении OpenVPN на OpenBSD 7.6, вам потребуется реализовать несколько мер, которые позволят блокировать все интернет-соединения, если VPN-соединение разрывается. Давайте подробно рассмотрим шаги, необходимые для достижения этой цели.

1. Настройка OpenVPN

Как вы уже делали, убедитесь, что OpenVPN запускается корректно. В вашем файле /etc/hostname.tun0 вы имеете следующие строки:

up
!/usr/local/sbin/openvpn --daemon --config /etc/openvpn/my-config.ovpn

Эта настройка позволяет вам автоматически запускать OpenVPN при загрузке системы. Однако, помимо этого, необходимо настроить маршрут и правила брандмауэра.

2. Использование PF (Packet Filter)

OpenBSD использует PF (Packet Filter) для управления сетевыми пакетами. Для того чтобы заблокировать интернет-трафик, когда OpenVPN отключен, нам нужно внести некоторые изменения в конфигурацию PF.

Конфигурирование PF

  1. Редактирование файла конфигурации PF
    Откройте или создайте файл /etc/pf.conf и добавьте следующие правила:

    ext_if = "bcm0"   # Ваш внешний интерфейс
    tun_if = "tun0"   # Интерфейс OpenVPN
    
    # Разрешаем локальный трафик
    pass in on $ext_if from !($ext_if) to any 
    pass out on $ext_if from any to !($ext_if)
    pass in on $tun_if all
    pass out on $tun_if all
    
    # Блокируем весь интернет трафик, если tun0 не активен
    block out on $ext_if from any to any
    pass out on $ext_if from any to any route-to ($tun_if) keep state

    Эти правила позволят блокировать весь исходящий интернет-трафик, если VPN-соединение отсутствует. Тем не менее, весь трафик, проходящий через tun0, будет разрешен.

  2. Включение PF

    После редактирования конфигурации вам необходимо запустить PF:

    pfctl -f /etc/pf.conf
    pfctl -e

3. Автоматическое восстановление подключения

Можно рассмотреть возможность настройки автоматического восстановления VPN-соединения, чтобы избежать долгих простоев. Это можно сделать через настройки OpenVPN или при помощи скриптов, которые будут отслеживать состояние соединения и поднимать его при необходимости.

4. Проверка конфигурации

Проверьте работоспособность вашей конфигурации, запустив tcpdump или ping из другого устройства в локальной сети, когда OpenVPN соединение активно и когда оно разорвано. Вы должны увидеть, что интернет-трафик блокируется, когда VPN отключен.

5. Поддержание локальных соединений

Как вы указали, вам необходимо поддерживать доступ к устройству через локальные IP-адреса. Убедитесь, что в вашей конфигурации PF указаны правила для локального трафика, чтобы он не блокировался.

Заключение

С помощью вышеописанных шагов вы сможете изолировать интернет-трафик вашего устройства, используя OpenVPN как единственный путь доступа в интернет. Это обеспечит безопасность и защиту ваших данных при использовании публичных сетей. Не забывайте регулярно проверять состояние вашего VPN-соединения и корректность работы настроек брандмауэра.

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

Капча загружается...