Как ограничить доступ между двумя офисами, соединёнными через VPN
Туннель между площадками — не взаимное доверие. Составьте матрицу источника, назначения и сервиса, примените её к расшифрованному трафику и докажите также отказ.
Туннель между площадками отвечает на один вопрос, могут ли два офиса обмениваться пакетами, а важный оставляет открытым: какое устройство филиала может достучаться до какого центрального сервиса. Отношение к туннелю как к взаимному доверию — это путь, которым гостевой ноутбук оказывается на том же маршруте, что и финансовый сервер. Решение — не лучший туннель, а явный список разрешений, применяемый после расшифровки. Это руководство проводит список от определения до доказанного отказа.
Работайте в этом порядке и не расширяйте маршрут туннеля, пока шаги политики ниже не пройдут.
Запишите матрицу, прежде чем трогать шлюз
Полезная строка называет три вещи: группу источника, хост или сеть сервиса назначения, а также протокол и порт, которые приложение действительно использует. Филиал и центр обработки данных не являются записями. Частный DNS и службы аутентификации заслуживают собственных строк только тогда, когда приложение не может работать без них.
Группируйте источники по роли, а не по удобству подсети: сотрудники, гости, администрация. Когда все три делят одну плоскую LAN, шлюз не может различить их на сетевом уровне, поэтому управление идентификацией или сегментация должны идти первыми. Затем изложите матрицу письменно, с владельцем и датой пересмотра в каждой строке.
| Источник | Назначение | Сервис | Решение |
|---|---|---|---|
| сотрудники филиала | приложение бронирования 10.10.5.10 | TCP 443 | разрешить на расшифровывающем шлюзе |
| сотрудники филиала | VLAN администрирования серверов | любой | неявный отказ |
| гостевой Wi-Fi | любой центральный диапазон | любой | отказ до туннеля |
| административный хост перехода | VLAN серверов | TCP 22 и 3389 | разрешить с MFA, брандмауэр хоста сужает дальше |
Применяйте там, где пакеты расшифровываются
Правила, разрешающие IKE и ESP, строят только внешний туннель. Внутренний трафик приходит открытым на интерфейс туннеля, и именно там место списку разрешений: цепочка пересылки на расшифровывающем устройстве, отбрасывание по умолчанию, одно правило на строку матрицы. На шлюзах Linux это означает включённую пересылку и правила фильтрации на устройстве туннеля, а не на физическом канале, как объясняет руководство strongSwan по пересылке.
Селекторы трафика — это решение маршрутизации, а не авторизации. Широкий селектор, охватывающий обе подсети, может быть правильным для маршрутизации, тогда как брандмауэр по-прежнему разрешает только TCP 443 к одному хосту. Селектор согласуется для туннеля и описывает, что может войти в него, а не что может использовать данное устройство. Никогда не расширяйте правило брандмауэра из-за того, что селектор широк.
iptables -A FORWARD -i tun0 -s 10.20.0.0/24 -d 10.10.5.10 -p tcp --dport 443 -j ACCEPT
iptables -A FORWARD -i tun0 -j DROP
NAT и пересекающиеся подсети меняют правила
Когда шлюз филиала транслирует каждый хост в один адрес до туннеля, каждая строка на основе источника схлопывается в этот единственный адрес. Либо прекратите транслировать трафик туннеля, либо примите, что правила должны опираться на что-то другое, например на исходный адрес источника, записанный до трансляции. У дальней стороны та же проблема, потому что хост назначения видит адрес после NAT, а не исходный.
Пересекающиеся диапазоны — другая ловушка. Два офиса, оба использующие 192.168.1.0/24, нельзя описать в одной таблице политики без отображения одной стороны, а отображение не заменяет адресацию, которая не конфликтует. Исправьте план, прежде чем писать правила, которые придётся распутывать позже.
Докажите отказ, а не только успех
Проверка только разрешённого приложения доказывает очень мало, потому что снисходительное правило где-то выше даёт тот же результат.
С обычного устройства филиала достигните нужного сервиса и подтвердите, что вся сессия работает. Затем попробуйте назначение, которое должно остаться закрытым, например административный порт на сервере, с которым у филиала нет никаких дел, и прочитайте счётчик или запись журнала, которая его отбросила. Отключение набора правил для проверки работоспособности обесценивает тест и оставляет шлюз открытым, пока вы смотрите.
Держите список живым
Приложения переезжают, и правило, пережившее своё приложение, становится дырой, которой никто не владеет. Прикрепите дату пересмотра к строке и меняйте область селектора и правило брандмауэра на одном шаге обслуживания, когда сервис меняет адрес.
Ограничения на уровне хоста по-прежнему важны за туннелем: собственный брандмауэр сервера должен принимать диапазон филиала только для того сервиса, который он публикует. Два согласованных слоя проще проверять, чем один, которому доверяют полностью.