Настройка UFW на VPS: базовое руководство
Узнайте, как правильно настроить UFW на VPS. Мы объясним, как разрешить порт SSH до активации firewall, чтобы не потерять доступ к вашему серверу.
Что такое UFW и зачем он нужен
UFW расшифровывается как Uncomplicated Firewall, и это название оправдано. Это удобный интерфейс для межсетевого экрана, который уже встроен в ядро Linux. Вместо написания сложных правил вы используете короткие команды, такие как ufw allow 22/tcp. На новом VPS по умолчанию все службы, ожидающие входящих соединений, доступны из интернета. Межсетевой экран меняет этот принцип: вы запрещаете всё, а затем разрешаете только те порты, которые вам действительно нужны. Это изменение минимизирует риски безопасности всего за четыре команды.
Прежде чем настраивать firewall, узнайте, какие службы прослушивают порты, так как именно их состояние будет определять межсетевой экран. Первым шагом будет просмотр списка прослушиваемых портов с помощью ss -tlnp.
Одно правило, которое предотвратит блокировку доступа
Вот ошибка, которая пугает пользователей при настройке firewalls. Вы включаете UFW с политикой default-deny, но не разрешаете SSH. В результате при активации firewall ваше соединение разрывается, и вы теряете доступ к системе. Чтобы избежать этого, всегда разрешайте SSH перед включением UFW. Это единственный важный нюанс. Ниже приведены шаги, выполняемые в безопасном порядке.
Если это все же произошло, вы не потеряли доступ: веб-консоль вашего провайдера (через VNC или serial) не использует SSH. Вы можете войти через нее и выполнить ufw disable или добавить недостающее правило.
Шаг 1: Настройка политик по умолчанию
Сначала настройте UFW так, чтобы он запрещал все входящие соединения и разрешал все исходящие:
sudo ufw default deny incoming
sudo ufw default allow outgoingdeny incoming — это важная часть настройки. Это означает, что любой порт без явного разрешающего правила закрыт для внешнего мира, даже если на нем запущена служба. allow outgoing позволяет вашему серверу стандартно подключаться к интернету для загрузки обновлений и выполнения других задач. Эти две команды изменяют только политики; правила не вступят в силу, пока вы не включите UFW на шаге 3.
Шаг 2: Откройте только необходимые порты
Перед включением firewall откройте SSH, чтобы не потерять соединение:
sudo ufw allow 22/tcpUFW также позволяет ограничить частоту запросов для SSH: sudo ufw limit 22/tcp разрешает доступ к порту, но блокирует любой IP-адрес, который открывает шесть или более соединений в течение тридцати секунд. Это защищает от brute-force атак без установки дополнительного ПО.
Если вы используете веб-сервер, откройте также HTTP и HTTPS:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcpРазрешайте доступ только к тем сервисам, которые должны быть доступны публично. Для баз данных, таких как Postgres на порту 5432, правило allow практически никогда не требуется. Вместо этого привяжите (bind) базу к 127.0.0.1, чтобы она была доступна только локально. Каждый открытый порт — это потенциальная точка входа, которую необходимо защищать, поэтому минимизируйте список открытых портов.
Вы можете составить полный список команд ufw для вашего сервера здесь, а затем выполнить их по порядку:
Шаг 3: Включите и подтвердите активацию
sudo ufw enableКоманда может прервать текущие SSH-соединения. Поскольку на шаге 2 вы разрешили 22/tcp, ваша сессия сохранится. Проверьте результат:
sudo ufw status verboseStatus: active
Default: deny (incoming), allow (outgoing)
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)
80/tcp ALLOW IN AnywhereОбратите внимание на два момента. Status: active означает, что firewall запущен. Каждое правило отображается дважды: один раз в обычном виде и один раз с меткой (v6). Это подтверждает, что UFW управляет как IPv4, так и IPv6. Если строки (v6) отсутствуют, IPv6 не управляется, что является проблемой, описанной в статье о firewall для IPv6.
Управление правилами в дальнейшем
Чтобы просмотреть правила с их номерами для последующего удаления:
sudo ufw status numbered
sudo ufw delete 3Чтобы разрешить доступ к порту только с одного адреса (это эффективный способ открыть административный сервис только для вашего IP):
sudo ufw allow from 10.0.0.24 to any port 5432 proto tcpМежсетевой экран — это лишь один уровень защиты. Он контролирует доступ к портам, но не защищает от перебора (brute-force) на открытых портах, таких как SSH. Для защиты от подобных атак установите Fail2ban перед SSH, чтобы блокировать злоумышленников. Принцип эшелонированной обороны подразумевает, что каждый уровень защиты компенсирует недостатки других.
Использование межсетевого экрана имеет смысл только после того, как вы изучите назначение портов и принципы работы служб, а его настройка является обязательным этапом первых 10 минут работы на новом VPS.
FAQ
Прервет ли включение UFW мою SSH-сессию?
Нет, если вы сначала разрешите SSH. Выполните sudo ufw allow 22/tcp перед sudo ufw enable, и соединение не прервется, так как брандмауэр разрешит порт 22. Опасность заключается в активации брандмауэра с политикой запрета по умолчанию без разрешающего правила для SSH, что приведет к потере доступа. Если это произошло, войдите через VNC или последовательный консольный интерфейс вашего провайдера и выполните ufw disable.
Какие порты следует открыть на VPS?
Только те, которые необходимы для публичного доступа. SSH (22/tcp) для управления сервером, а также HTTP и HTTPS (80/tcp, 443/tcp), если вы размещаете веб-сайт. Все остальные порты должны быть закрыты. Внутренние службы, такие как базы данных, должны быть привязаны к 127.0.0.1 и не иметь правил в брандмауэре, чтобы доступ к ним из сети был невозможен.
Поддерживает ли UFW IPv6?
В современных версиях Ubuntu — да: в /etc/default/ufw установлен параметр IPV6=yes, поэтому каждое правило применяется к обоим стекам, а команда ufw status отображает правила IPv6 с суффиксом (v6). Возможные ошибки описаны в ловушке IPv6 firewall.
Как удалить правило UFW?
Выполните sudo ufw status numbered, чтобы вывести список правил с их индексами, затем выполните sudo ufw delete N, где N — номер правила, которое нужно удалить. Также можно удалять правила по параметрам, например, с помощью sudo ufw delete allow 80/tcp.
Как разрешить доступ к порту только с одного IP-адреса?
Используйте правило from вместо обычного allow. Чтобы разрешить доступ к PostgreSQL только с вашего офисного адреса, выполните sudo ufw allow from 10.0.0.10 to any port 5432 proto tcp. При политике запрета по умолчанию порт закрыт для всех, пока правило не откроет его; поэтому правило from является единственным способом доступа: весь интернет остается заблокированным, и доступ получает только указанный вами адрес. Не добавляйте обычное правило allow 5432/tcp, так как оно откроет порт для всех. Это самый безопасный способ публикации базы данных или панели администратора. Проверьте результат с помощью sudo ufw status verbose, которая отображает адрес источника рядом с портом.