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

Всё ниже предполагает, что вы можете выполнять команды на хосте с root или sudo.

Прочитайте сокеты, прежде чем что-то менять

В Linux ss -lunp перечисляет UDP-слушатели с их локальным адресом, портом и процессом, а ss -ltnp делает то же самое для TCP. Найдите порт VPN и внимательно прочитайте столбец адреса. 0.0.0.0:51820 и [::]:51820 означают все интерфейсы, а 10.0.0.5:51820 означает один адрес на одном интерфейсе. Руководство по ss описывает столбцы, если вывод незнаком. Если имя процесса отсутствует, запустите ту же команду с sudo, поскольку столбцу владельца нужны привилегии.

Запишите адрес. Это факт, от которого зависит остальная часть этого руководства.

Привязывайтесь к адресу, а не к желанию

OpenVPN привязывает слушатель к конкретному адресу директивой local, и это поддерживаемый способ ограничить его на уровне процесса. Не каждая реализация предлагает эквивалент, а протокол без опции привязки нельзя сузить таким образом. Если у вашей такой опции нет, брандмауэр — единственное средство контроля, и в заметках по развёртыванию это должно быть сказано прямо. На хосте с несколькими адресами привязывайтесь к тому, который смотрит в сторону туннеля; привязка к плавающему адресу обычно ошибка.

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

Проверьте семейство адресов отдельно

IPv4 и IPv6 — отдельные сокеты. Процесс, привязанный к 0.0.0.0, всё ещё может принимать IPv6 через двухстековый сокет или не может, в зависимости от опции сокета и значения по умолчанию платформы. Чтение только строки IPv4 обмануло не один обзор развёртывания. Перечислите оба семейства, прежде чем заключить, что слушатель узок.

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

Наслоите брандмауэр поверх привязки

Узкая привязка не заменяет правило брандмауэра, и правило брандмауэра не сужает привязку wildcard. Используйте оба: привязывайтесь там, где реализация это поддерживает, а затем разрешайте порт только из тех источников, которые должны до него добраться. Облачные группы безопасности стоят перед брандмауэром хоста, поэтому проверяйте оба, когда путь пересекает границу VPC. Эффективное правило — это пересечение двух, и каждый слой может только отнимать доступность.

Проверяйте из разрешённого источника и из намеренно исключённого. Подключение с localhost ничего не доказывает о публичной границе.

Запишите, что вы выбрали

Запишите привязанный адрес, интерфейс, который им владеет, правило брандмауэра и его назначение. Замена NIC или переназначенный облачный адрес могут изменить экспозицию без чьего-либо редактирования профиля. Поставьте дату на заметке, потому что облачные адреса перемещаются между проверками чаще, чем люди ожидают.

Именно эта заметка делает следующую проверку сравнением, а не археологическим проектом.

Похожие статьи