Добавить правило запрета и увидеть, что открытая загрузка продолжается, — это не ошибка UFW. Добавленное вами правило стоит после правил, которые уже приняли поток, и установленное ранее соединение продолжает им соответствовать. Исправление означает вставку в нужное место и понимание того, что обещают предыдущие правила. Узкий вариант этого изменения — ниже.

Решает порядок, а не существование правила

UFW — это интерфейс, который записывает правила netfilter поэтапно: секция каркаса, выполняемая до правил пользователя, затем сами правила пользователя, затем секция, выполняемая после них. Стандартные предыдущие правила принимают трафик установленных и связанных соединений, и эти правила оцениваются раньше всего, что вы добавите обычным allow или deny. Справочник команд UFW документирует синтаксис вставки и нумерованный просмотр состояния, от которых зависит это изменение.

Этот порядок объясняет неожиданность. Ваше новое правило действительно и находится в нужной таблице, но оно не первое решение, которое встречает пакет. Соединение, уже отслеживаемое как установленное, до него не доходит.

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

Вставьте выше широкого разрешения

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

sudo ufw --dry-run route insert 1 deny in on tun0 proto tcp from 10.88.0.55/32 to 192.0.2.88/32

Если предпросмотр показывает ровно одно правило в ожидаемой позиции, примените ту же команду без флага dry-run. Позиция 1 ставит его выше более широких разрешений пользователя, а не выше рассмотренных ранее правил каркаса. Убедитесь, что имя интерфейса соответствует туннельному устройству на этом шлюзе, потому что правило, привязанное к интерфейсу, которого больше нет, останется в списке и будет выглядеть правильным, ни с чем не совпадая. Переименуйте ссылку на устройство до применения, а не после неудачного теста.

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

Ограничьте источник одним адресом только если этот адрес привязан к нужной личности. Пул VPN с динамическим распределением может завтра выдать тот же адрес другому клиенту, и запрет будет следовать за адресом, а не за человеком.

Установленные потоки переживают новое правило

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

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

Помните и о границах. Это правило ничего не говорит об ICMP, UDP или IPv6, поэтому успешный ping не доказывает, что запрет не сработал. Один адрес IPv4 — тоже не веб-сайт: имя может разрешаться в несколько адресов, и покрыт только тот, который вы назвали.

Проверьте новым потоком

Прочитайте нумерованные правила пользователя и действующий сырой вид, затем откройте новое соединение с выбранного клиента:

sudo ufw status numbered
sudo ufw show raw
# from 10.88.0.55, a new TCP connection to 192.0.2.88 should fail

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

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

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

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