Брандмауэр для VPS нужен, чтобы уменьшить поверхность атаки и предсказуемо контролировать доступ к сервисам: сайт, админка, чат-бот, панель управления, внутренние API. Ошибки в настройке часто бьют не по “безопасности в целом”, а по конкретным вещам: доступ к серверу пропадает, приложение становится недоступным, логирование молчит, а исходящий трафик ломает обновления или интеграции.
Ниже — семь типичных ошибок при настройке брандмауэра для VPS молодежных проектов в Беларуси. Каждая — с признаками, последствиями и практичным способом исправить.
1) Включить deny и потерять доступ к серверу по SSH
Самая частая поломка выглядит одинаково: админ включает брандмауэр, выставляет запрет на входящие подключения, и в итоге SSH тоже закрывается. Дальше остаются две опции: долго ждать ответов, писать в поддержку хостера или пытаться зайти через резервный доступ, если он был настроен.
Как это обычно случается:
- правила включаются сразу после изменения, без проверки с другого устройства;
- “allow SSH” забывают или делают его слишком узким (например, только для одного IP, который со временем меняется);
- открывают порт не для того протокола или не для той подсети.
Как проверить и исправить:
- Перед включением ограничений убедись, что у тебя уже есть открытый путь для администрирования. Минимум: разрешение на входящий TCP 22 (или ваш нестандартный SSH-порт).
- Если используешь UFW, порядок команд важен. Открывай SSH сначала, потом включай сам firewall.
- Делай изменения в две сессии: одна остаётся “на сохранение контроля”, вторая — для теста. Если что-то пошло не так, первая сессия позволит откатить.
- Добавь правило только для своего текущего внешнего IP (если он статический) или для подсети офиса/команды. Для динамических адресов лучше заранее продумать резервные варианты доступа.
Пример логики для UFW (смысл, а не точные значения):
- разрешить SSH,
- разрешить нужные веб-порты,
- затем включить default deny для входящих.
Если SSH доступ должен быть только с конкретных IP, это хороший подход, но не делай его единственным. Для молодежных проектов часто команда небольшая, и потеря доступа блокирует работу на время.
2) Смешать порты приложения с правилами “на глаз” и оставить лишнее или недостающее
Вторая проблема — брандмауэр либо закрывает нужное, либо открывает слишком много. В обоих случаях страдает стабильность.
Типичные сценарии:
- проект использует reverse proxy (например, Nginx), а правила сделаны “как будто приложение слушает напрямую 443”;
- админка работает на одном порту, а в правилах открыт другой;
- забывают об отдельном сервисе: WebSocket, админ-панель, API, метрики, очередь фоновых задач;
- открывают “любой порт для входа” ради удобства, а потом забывают удалить.
Признаки ошибки:
- сайт открывается, но функции ломаются: загрузки, чат, поиск, админка;
- часть пользователей работает, часть нет (обычно из-за разных маршрутов или IPv6);
- в логах веб-сервера видно, что соединения не доходят до приложения.
Как исправить правильно:
- Сначала зафиксируй, какие порты реально слушает сервер. Обычно это:
- 80/443 для HTTP/HTTPS,
- порт для SSH (если нужен),
- порт для админки/панели (если не спрятана за reverse proxy),
- порт для мониторинга (если он на сервере),
- специфические порты для WebSocket и API (часто они сидят на 443 за proxy).
- Затем сформируй “минимально необходимый список” разрешений входящего трафика.
- Не делай правила на уровне “открыть всё для этой подсети”, если можно точнее: разрешение только на нужные порты.
Небольшой лайфхак: составь таблицу “порт → сервис → кто использует → откуда разрешить”. Для молодежных проектов это удобно ещё и для передачи между участниками команды: правила становятся понятными, а не магическими.
3) Игнорировать IPv6: часть пользователей остаётся без доступа или получает неожиданный путь
IPv6 часто включён по умолчанию, особенно если сервер получает адреса автоматически. Если брандмауэр настроен только для IPv4, то:
- часть пользователей через IPv6 может не получать доступ к сервисам (если входящий трафик блокируется),
- или наоборот, может оказаться, что IPv6 доступ разрешён, хотя ты думал, что “всё закрыто”.
Как заметить проблему:
- сайт открывается с одних устройств и не открывается с других;
- в логах есть подключения по IPv6, а в правилах ты работал только с IPv4;
- админка недоступна из части сетей, хотя “в IPv4 всё ок”.
Как исправить:
- Проверь, слушают ли сервисы IPv6 (например, Nginx может слушать на [::]:443).
- Проверь, есть ли правила для inet/ipv6 chains (в зависимости от инструмента).
- Прими решение заранее: либо полностью закрываешь IPv6 так же, как IPv4, либо симметрично разрешаешь нужные порты.
Если используешь nftables, обычно удобно работать в семействе inet, чтобы правила охватывали и IPv4, и IPv6. В UFW это зависит от того, включал ли ты IPv6-режим. Главное — не полагаться на “я же настроил, значит должно работать”.
В контексте Беларуси это особенно заметно для молодежных проектов, где аудитория может быть распределена между мобильными сетями и Wi‑Fi. Разные сети по-разному используют протоколы, и “сюрпризы” чаще всплывают именно на границе IPv4/IPv6.
4) Забыть про исходящий трафик: ломаются DNS, обновления, интеграции и бэкапы
Чаще всего люди думают только о входящих соединениях: “кто может зайти на сервер”. Но у проектов есть жизненно важные исходящие потоки:
- DNS-запросы для резолвинга доменов,
- получение обновлений пакетов,
- отправка событий в мониторинг,
- обращение к внешним API (боты, вебхуки, аналитика),
- репликация/бэкапы на внешнее хранилище.
Если включить строгий deny на outbound или случайно создать правила, которые ограничивают исходящие соединения, приложение начинает вести себя странно:
- внешние зависимости “то работают, то нет”,
- фоновые задачи не выполняются,
- сертификаты не обновляются (если используется ACME),
- сервер перестаёт отправлять метрики.
Как исправить:
- Проверь, используется ли default deny для исходящего трафика. Для многих сценариев удобнее оставлять исходящее разрешённым и ограничивать только критичные направления.
- Минимизируй лишние ограничения на DNS: обычно UDP/TCP 53 к резолверам, которые ты указываешь, должен быть разрешён.
- Разреши базовые исходящие протоколы, необходимые проекту: HTTP/HTTPS к доверенным внешним сервисам, NTP для точного времени (если сервер теряет время, сертификаты и токены ведут себя хуже).
- Если хочешь строгость, делай allowlist для конкретных доменов/сетей, но тогда приготовься к регулярной актуализации: внешние сервисы могут менять инфраструктуру.
Уточнение для реальности: “домен → IP” может меняться. Поэтому строгие allowlist по IP без автоматизации часто превращаются в постоянные инциденты. Для молодежных проектов, где команда маленькая, это может быть дороже самой безопасности.
5) Неправильно обработать доверенный трафик: reverse proxy, CDN, балансировщики и IP-адреса админов
Многие “брандмауэрные” проблемы на самом деле не про порты, а про то, что считается доверенным источником. Типичная ситуация:
- перед приложением стоит reverse proxy,
- или используется CDN/балансировщик,
- или админка доступна только по списку IP.
И вот здесь легко ошибиться:
- открыть 443 снаружи, но забыть учесть реальный источник трафика за балансировщиком;
- настроить allowlist по IP, который со временем меняется (например, у облачных CDN);
- заблокировать WebSocket, хотя он идёт по тому же порту, но требует корректных условий на уровне proxy и фаервола.
Как сделать предсказуемо:
- Определи, кто реально “подходит” к серверу: прямые клиенты или промежуточные сервисы.
- Если перед сервером стоит прокси, обычно на брандмауэре проще разрешить входящие на нужные порты без привязки к конкретному клиентскому IP, а доверие переносить на уровень proxy (через правильные заголовки и проверку источника).
- Если же ты действительно ограничиваешь админку по IP, убедись, что источник не меняется. Для команды это часто решается тем, что вход админов идёт через статические офисные адреса или VPN с фиксированной подсетью.
Мини-подход для команд: раздели правила на два слоя логики:
- “публичный слой”: что разрешено всем на уровне портов,
- “админский слой”: что разрешено только с проверенных адресов/каналов.
Тогда при изменениях в архитектуре (например, добавили CDN) будет ясно, какие правила трогать.
6) Не включить логирование и не настроить защиту от повторяющихся попыток
Брандмауэр без логов — это как камера без записи: ты не узнаешь, что именно происходило. Для молодежных проектов это быстро приводит к ситуации “сервер иногда падает”, но никто не понимает причины.
Что обычно пропускают:
- нет логов для блокированных соединений;
- логи включены, но не читаются (нет настройки ротации, нет фильтрации);
- отсутствует защита от brute-force по SSH (или она “есть”, но не привязана к реальным попыткам);
- трафик блокируется слишком агрессивно, а потом отсекает легитимных пользователей при смене IP.
Как исправить:
- Включи логирование блокировок хотя бы для критичных входных точек: SSH и админские порты.
- Настрой ротацию логов, чтобы диск не заполнился (это частая “вторая” авария после первой).
- Рассмотри fail2ban или аналогичный механизм для SSH и других сервисов с авторизацией.
- Логи делай пригодными к чтению: лучше разумный уровень детализации, чем “всё подряд каждую минуту”.
Если у проекта есть дежурный участник, добавь простую рутилизацию: “раз в день посмотреть последние блоки по SSH и админке”. Это занимает пару минут, но снижает время реакции в разы.
В белорусском контексте особенность чаще не в законе и не в технологиях, а в организационной реальности: проекты нередко держатся на небольших командах и нерегулярном дежурстве. Поэтому прозрачность (логи + понятные правила) становится частью безопасности.
7) Не сохранять правила и не проверять их после перезагрузки
Последняя ошибка кажется мелкой, но она дорогая: правила брандмауэра применяются “вручную” и исчезают после ребута. В результате:
- ночью сервер перезагрузился по обновлениям,
- правила пропали,
- сервер стал доступен по тем портам, которые были не должны быть открыты,
- или наоборот, всё закрылось, и команда обнаружила проблему только по жалобам пользователей.
Признаки:
- проблема появляется после обновлений или перезагрузок;
- “раньше работало”, но теперь доступ сломан;
- в истории команд есть “включили firewall”, но нет признаков сохранения состояния.
Как исправить:
- Убедись, что выбранный инструмент сохраняет правила после перезагрузки.
- Делай “контрольный выстрел”: после настройки выполни проверку с внешней машины.
- После перезагрузки заново проверь фактическое состояние.
- Добавь документирование: что изменяли, где хранятся правила, какая команда применяется для проверки.
Если используешь систему уровня операционной системы (UFW, firewalld), обычно есть штатные механизмы сохранения. Если используешь nftables/iptables вручную — убедись, что правила добавляются через сервис, а не только через интерактивную команду.
Небольшая дисциплина для команды: один раз сделайте скрипт проверки доступности портов (например, HTTP/HTTPS и SSH) и запускайте его после любых изменений. Это экономит часы отладки в момент, когда проект должен быть онлайн.
Практический чек-лист перед включением брандмауэра на VPS
Перед тем как ужесточать правила, пройди короткий список. Он специально построен так, чтобы отлавливать ошибки из семи пунктов выше.
- Определены порты и сервисы, которые слушает сервер (HTTP/HTTPS, SSH, админка, WebSocket, API, метрики).
- Разрешение на SSH сделано заранее, и есть план B (например, резервный доступ через панель провайдера или отдельный доверенный IP/сеть).
- Учтены IPv4 и IPv6: правила симметричны или осознанно разделены.
- Исходящий трафик не ломает DNS, обновления, сертификаты и фоновые задачи.
- Reverse proxy/балансировщик учитывают реальные точки входа и доверенные адреса.
- Включены логирование блокировок и защита от повторяющихся попыток для авторизованных сервисов.
- Правила сохраняются после перезагрузки, а после обновлений/ребута выполняется проверка.
Как безопасно тестировать настройки брандмауэра
Хорошая проверка похожа на проверку замков перед походом: ты не доверяешь словам, ты проверяешь на практике.
- Запусти проверку с внешнего устройства, которое не сидит в той же сети, что и сервер.
- Проверь не только “открывается ли сайт”, а функции, которые зависят от сети: авторизация, загрузка файлов, WebSocket/чат, админка.
- Посмотри, что происходит в логах брандмауэра и в логах приложения, если соединения не доходят.
- Тестируй изменения поэтапно: сначала “минимально безопасно”, потом ужесточай.
Если в команде два человека, лучше распределить роли: один меняет правила, второй проверяет доступ с другого места. Это уменьшает шанс “закрыть всё и остаться без доступа” до нуля.
Итог: из семи ошибок обычно получается одна понятная схема
Если собрать все семь ошибок в одну модель, получится простая идея: сначала обеспечь управляемость и доступность, потом минимизируй лишнее, и только после этого усложняй контроль.
- Сначала не потеряй SSH и доступ к управлению.
- Затем открой только нужные порты и правильно учти reverse proxy.
- Потом симметризируй IPv4/IPv6.
- Потом не сломи исходящий трафик.
- Включи логи и защиту от повторяющихся атак.
- Закрепи правила, проверь после перезагрузки.
Для молодежных проектов в Беларуси это особенно практично: команда небольшая, перезапуски происходят, а пользователи ждут стабильной работы. Брандмауэр тогда становится не источником инцидентов, а тем самым “тихим слоем”, который защищает без сюрпризов.
