ufw (Uncomplicated Firewall)
ufw (Uncomplicated Firewall) это упрощённая обёртка над iptables, созданная для того, чтобы типовые правила firewall было проще писать без ошибок. Часто встречается на серверах Ubuntu.
Какую проблему на самом деле решает ufw
ufw расшифровывается как Uncomplicated Firewall. Это инструмент настройки брандмауэра по умолчанию в Ubuntu.
Написание корректных правил iptables или nftables вручную требует понимания цепочек, таблиц и порядка правил. ufw оборачивает эту сложность в короткие команды вроде "ufw allow 22/tcp", жертвуя частью тонкого контроля в пользу правил, которые гораздо труднее сделать неправильно.
Где ufw не подходит
Среды со сложной, кастомной маршрутизацией или правилами NAT, либо конфигурацией, управляемой централизованно через infrastructure-as-code, обычно перерастают упрощённую модель ufw и управляют правилами nftables или iptables напрямую.
Безопасную настройку ufw для небольшого VPS смотрите здесь: руководство по файрволу в Linux.
Просмотр, правка и предварительная проверка правил ufw
В руководстве ufw описаны два разных представления правил. ufw status numbered выводит действующие правила с номерами, а ufw show added показывает их в том виде, в каком они были введены в командной строке, а не реальное состояние firewall. Сравнение двух выводов помогает быстро заметить правило, которое добавили, но которое не вступило в силу.
sudo ufw status numbered
sudo ufw delete 3
sudo ufw show added
Удалять по номеру удобно, но перед вторым удалением выведите список заново, потому что номера оставшихся правил могут сдвинуться. Чтобы безопасно изменить правило, сначала добавьте более узкое, а затем удалите широкое. Например, документация Ubuntu показывает, как ограничить SSH одним адресом:
sudo ufw allow proto tcp from 203.0.113.10 to any port 22
Применяйте это, только если вы всегда подключаетесь с постоянного адреса, иначе можно заблокировать себе доступ. Параметр --dry-run показывает, что изменила бы команда, ничего не меняя, и на удалённом сервере им стоит пользоваться. Файлы правил находятся в /etc/ufw, а ufw reload перезагружает firewall, не отключая его. Если вы запускаете контейнеры, помните, что ufw не видит их опубликованные порты, как объясняет руководство по безопасности Docker-хоста.
Ограничение частоты для SSH и выбор уровня журналирования
В ufw есть встроенный тормоз для подбора паролей. Правило limit, как сказано в руководстве, запрещает соединения с адреса, который пытается установить 6 и более соединений за 30 секунд:
sudo ufw limit 22/tcp
Считаются попытки соединения, а не неудачные входы, поэтому интенсивная автоматизация, открывающая много SSH-сессий, может сработать на это правило. Оно дополняет вход по ключам и fail2ban, но не заменяет их; полный набор мер описан в руководстве по укреплению SSH. Замените обычное правило разрешения SSH на правило limit, а не держите оба.
Журналированием управляет ufw logging. Руководство перечисляет уровни off, low, medium, high и full, где low используется по умолчанию, и предупреждает, что medium и выше могут создавать большой объём вывода:
sudo ufw logging on
sudo ufw logging medium
Повышайте уровень ненадолго, пока разбираетесь с заблокированным соединением, а затем возвращайтесь к low, чтобы файлы журналов оставались небольшими, а важные записи не тонули. Куда попадают записи, зависит от настройки журналирования системы, поэтому ищите сообщения firewall ядра в файлах, описанных в документации вашего дистрибутива, как рассказано в руководстве по анализу логов.
Связанные термины: iptables, nftables, Политика default deny, Firewall.
Часто задаваемые вопросы
Это отдельный firewall от iptables?
Нет. На большинстве систем ufw представляет собой более удобную обёртку командной строки, которая генерирует правила iptables или nftables под капотом, а не заменяет базовый механизм.
Блокирует ли включение ufw всё по умолчанию?
Да, по умолчанию ufw запрещает все входящие соединения и разрешает все исходящие, пока вы явно не разрешите конкретные порты.
Можно ли заблокировать себе доступ к серверу с помощью ufw?
Да, если включить его без предварительного разрешения порта SSH. Всегда выполняйте "ufw allow OpenSSH" или аналогичную команду перед включением firewall на удалённом сервере.
Как удалить правило ufw?
Выполните ufw status numbered, чтобы увидеть номера правил, затем ufw delete и номер. Перед удалением следующего правила выведите список заново, так как нумерация после удаления может измениться.
Что на самом деле делает ufw limit?
Правило limit обычно пропускает соединения, но запрещает их с адреса, который пытается установить 6 и более соединений за 30 секунд. Оно замедляет подбор паролей по SSH, но не заменяет вход по ключам и fail2ban.
Хотите увидеть, в каком состоянии ваш сервер?
Запустите бесплатную read-only проверку сервера или откройте Security Lab и посмотрите цикл обнаружение, сдерживание, восстановление, проверка в действии.
Получить бесплатную проверку сервераОткрыть Security Lab