Разрешить доступ только с определённого IP-адреса в локальной сети с использованием VPN.

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

У меня есть Raspberry PI, на котором работает PiVPN, и я хотел бы ограничить IP-адреса в LAN, которые могут быть доступны через VPN, чтобы был доступен только один сервис.

Я искал, но всё, что нашел, касалось PTPP VPN, который, как мне кажется, не поможет.

В OpenVPN (PiVPN – это OpenVPN).

Что вам нужно, так это комбинация межсетевого экрана/IP-правил и раздельного туннелирования.

  • Межсетевой экран для предотвращения доступа клиентов к чему-либо еще в LAN, находящемуся за межсетевым экраном.

  • Раздельное туннелирование позволит клиентам использовать VPN только для сервисов, находящихся за VPN, а локальную LAN клиента для остального трафика (в противном случае они будут заблокированы для сервисов только на VPN и не смогут получить доступ к чему-либо еще).

Что касается межсетевого экрана, лучший подход – иметь выделенный физический межсетевой экран. Однако самый быстрый способ – настроить iptables на сервере, на котором работает OpenVPN, следующим образом:

  1. Разрешите уже установленный трафик между tun0<->eth0
iptables -A FORWARD -i tun0 -o eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
  1. Запретите трафик между клиентами
iptables -A FORWARD -i tun0 -s 192.168.1.0/24 -d 192.168.1.0/24 -j DROP
  1. Разрешите трафик к подсети сервисов
iptables -A FORWARD -i tun0 -s 192.168.1.0/24 -d 192.16.2.0/24 -m conntrack --ctstate NEW -j ACCEPT
  1. Примите трафик на адаптер tun0
iptables -A INPUT -i tun0 -j ACCEPT
iptables -A OUTPUT -o tun0 -j ACCEPT

Вы можете использовать шаг 3, чтобы ограничить трафик до одного сервиса (например, 192.16.2.231/32), если вам нужна большая точность

Примечание: измените IP-адреса и добавьте дополнительные правила в зависимости от вашей топологии

Что вам нужно сделать, чтобы включить раздельный туннель, это следующее:

  1. Остановите перенаправление маршрута по умолчанию

    Сервер будет отправлять нечто подобное push "redirect-gateway def1" во время настройки соединения. Это добавит маршрут 0.0.0.0 к установленному VPN, так что весь трафик будет перенаправлен в сторону VPN. Вам нужно предотвратить это, поэтому либо удалите push из скрипта сервера, либо добавьте в конфигурацию клиента pull-filter ignore "redirect-gateway", чтобы сказать клиенту игнорировать то, что отправляет сервер. Для получения дополнительной информации о блокировке маршрутов ознакомьтесь с этим ответом

  2. Добавьте маршруты к LAN, которые вы хотите использовать для VPN

    Сервер обычно отправляет маршруты за VPN как push "route 192.168.1.0 255.255.255.0". Добавьте ваши маршруты в список в конфигурации сервера (на стороне сервера) или на стороне клиента, добавив route 192.168.1.0 255.255.255.0 в конфигурацию клиента.

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

Для ограничения доступа к локальным IP-адресам в рамках VPN-сети на Raspberry Pi, использующем PiVPN (что является реализацией OpenVPN), необходимо настроить комбинацию брандмауэров (firewall) и маршрутизации (routing) — иначе называемую разделением туннелей (split tunneling).

Шаги по настройке доступа к определенным IP-адресам через VPN:

  1. Настройка брандмауэра iptables:
    Брандмауэр позволит контролировать трафик, проходящий через OpenVPN. Используя iptables, вы сможете создать специальные правила для ограничения доступа клиентов к определённым ресурсам в локальной сети.

    • Разрешение установленного трафика:
      Позволяет трафику возвращаться на клиентские устройства из локальной сети.

      iptables -A FORWARD -i tun0 -o eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
      iptables -A FORWARD -i eth0 -o tun0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
    • Запрет трафика между клиентами:
      Это правило блокирует весь трафик между клиентами VPN в локальной сети.

      iptables -A FORWARD -i tun0 -s 192.168.1.0/24 -d 192.168.1.0/24 -j DROP
    • Разрешение трафика к определённой подсети сервиса:
      Позволяет клиенту VPN обращаться только к определенной подсети, к примеру, 192.168.2.0/24.

      iptables -A FORWARD -i tun0 -s 192.168.1.0/24 -d 192.168.2.0/24 -m conntrack --ctstate NEW -j ACCEPT
    • Прием трафика на адаптер tun0:
      Разрешает трафик, поступающий и исходящий с интерфейса tun0.

      iptables -A INPUT -i tun0 -j ACCEPT
      iptables -A OUTPUT -o tun0 -j ACCEPT

    Чтобы ограничить доступ к единственной службе (например, 192.168.2.231), измените третье правило, указав конкретный адрес вместо подсети.

  2. Настройка разделения туннелей (Split Tunneling):
    Этот метод позволяет клиентам пользоваться как ресурсами VPN, так и локальной сетью, что важно для настройки доступа только к определенным сервисам.

    • Остановка перенаправления по умолчанию:
      Обычно сервер OpenVPN устанавливает правило, которое перенаправляет весь трафик через VPN. Вам нужно отключить эту функцию. Чтобы сделать это, уберите строку push "redirect-gateway def1" из конфигурации сервера или добавьте в конфигурацию клиента строку pull-filter ignore "redirect-gateway".

    • Добавление маршрутов к локальной сети через VPN:
      Вы можете указать маршруты для подключения к вашим ресурсам. Это можно сделать как в конфигурации сервера, добавив строку типа push "route 192.168.1.0 255.255.255.0", так и на стороне клиента, добавив route 192.168.1.0 255.255.255.0.

Примечания:

  • Необходимо заменить IP-адреса в правилах в зависимости от вашей локальной сети.
  • Рекомендуется периодически проверять настройки брандмауэра, чтобы убедиться в соответствии их текущим требованиям безопасности.
  • Всегда делайте резервные копии конфигураций перед внесением изменений.

Следуя данным инструкциям, вы сможете безопасно ограничить доступ к вашей локальной сети с помощью VPN, предоставляя клиентам доступ только к конкретным ресурсам, которые они нуждаются.

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

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