Как защитить сервер с помощью UFW и iptables: Руководство по файрволам в Linux

Giteqa

Приветствую, друзья!

Настройка сетевого экрана (Firewall) — это первый и главный шаг в обеспечении безопасности любого виртуального сервера. Открытые и незащищенные сетевые порты становятся мишенью для автоматизированных сканеров, брутфорс-атак и попыток эксплойта системных утилит.

В операционных системах Linux управление сетевыми пакетами осуществляется на уровне ядра подсистемой netfilter. Для взаимодействия с ней используют два ключевых инструмента: низкоуровневый гибкий утилитарный комплекс iptables и надстройку UFW (Uncomplicated Firewall), созданную для упрощения повседневного администрирования. В этой статье мы разберем базовые принципы работы обоих решений.

Key Takeaways: Ключевые выводы

  • UFW — стандарт для большинства типовых задач: UFW предоставляет простой человекочитаемый синтаксис, исключающий фатальные ошибки при настройке SSH, веб-серверов или баз данных на Ubuntu и Debian.

  • iptables — низкоуровневая мощность: iptables дает полный контроль над цепочками пакетов, трансляцией адресов (NAT), пробросом портов и кастомными правилами фильтрации трафика на уровне ядра.

  • Главное правило межсетевого экрана — Default Deny: Надежный файрвол должен быть настроен по принципу «запрещено все, что явно не разрешено». Все входящие подключения по умолчанию блокируются, кроме критически важных (SSH, HTTP/HTTPS).

Часть 1. Настройка UFW (Uncomplicated Firewall)

UFW по умолчанию установлен в Ubuntu и доступен в репозиториях большинства популярных дистрибутивов.

Шаг 1: Проверка статуса и базовая политика

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

Bash
sudo ufw default deny incoming
sudo ufw default allow outgoing

Шаг 2: Разрешение критически важных портов

ВАЖНО: До включения UFW обязательно разрешите порт SSH, иначе вы потеряете доступ к серверу!

Bash
# Разрешить SSH (стандартный порт 22)
sudo ufw allow 22/tcp

# Или разрешить по имени службы
sudo ufw allow ssh

# Разрешить веб-трафик (HTTP и HTTPS)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Шаг 3: Включение UFW и управление правилами

Bash
# Включить файрвол
sudo ufw enable

# Проверить текущий статус и список активных правил с номерами
sudo ufw status numbered

# Удалить правило по его номеру (например, правило №3)
sudo ufw delete 3

# Ограничить брутфорс на SSH (ограничивает частоту подключений с одного IP)
sudo ufw limit ssh

Часть 2. Основы работы с iptables

iptables использует концепцию Таблиц (Tables) и Цепочек (Chains). Для базовой фильтрации трафика используется таблица filter, содержащая три основные цепочки:

  • INPUT: Трафик, предназначенный непосредственно для самого сервера.

  • OUTPUT: Трафик, генерируемый сервером и уходящий наружу.

  • FORWARD: Трафик, проходящий через сервер транзитом (например, при настройке роутера или VPN).

Plaintext
[ Сетевой пакет ] ---> INPUT (Сервер) ---> FORWARD (Транзит) ---> OUTPUT (Уход)

Базовые команды iptables

1. Просмотр текущих правил

Bash
sudo iptables -L -v -n
  • Флаг -v показывает подробный вывод (байты/пакеты).

  • Флаг -n показывает IP-адреса и порты в числовом формате без долгих попыток резолва DNS.

2. Разрешение локального трафика (Loopback) и установленных соединений

Сервер должен свободно общаться сам с собой (через интерфейс lo) и поддерживать уже установленные соединения:

Bash
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

3. Открытие конкретных портов

Bash
# Разрешить входящие соединения на SSH (порт 22)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Разрешить HTTP (80) и HTTPS (443)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

4. Установка политики «Заблокировать все остальное»

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

Bash
sudo iptables -P INPUT DROP

5. Сброс всех правил (Flush)

Если вы случайно заблокировали нужный порт и хотите сбросить правила к дефолтным:

Bash
sudo iptables -F
sudo iptables -P INPUT ACCEPT

Сравнительная матрица: UFW vs iptables

КритерийUFWiptables
Уровень сложностиНизкий (понятный синтаксис)Средний / Высокий
Целевая аудиторияНачинающие и системные администраторыОпытные инженеры, DevOps, сетевые архитекторы
Гибкость настройкиОграничена базовыми сценариямиАбсолютная (любые цепочки, маски, NAT, MANGLE)
Поддержка NAT / Port ForwardingТребует ручной правки файлов конфигурацииНативная работа через таблицу nat
Автосохранение правилДа (сохраняет состояние автоматически)Нет (требует iptables-persistent)

FAQ: Часто задаваемые вопросы

  • Можно ли использовать UFW и iptables одновременно?

    UFW является оберткой над iptables (или nftables в современных ядрах). Не рекомендуется вручную изменять правила через iptables, если в системе активен UFW, так как при перезапуске UFW может перезаписать созданные вручную цепочки.

  • Что делать, если я случайно заблокировал себе доступ по SSH через iptables/UFW?

    Если вы потеряли доступ к серверу по SSH, используйте Emergency Console (VNC / Out-of-Band IPMI) в панели управления вашего хостинг-провайдера. В консоли панели вы сможете отключить файрвол командой sudo ufw disable или сбросить правила sudo iptables -F.

  • Как сделать так, чтобы правила iptables не сбрасывались после перезагрузки сервера?

    По умолчанию правила iptables, созданные через CLI, очищаются при перезагрузке. Для их сохранения в Ubuntu/Debian установите пакет iptables-persistent:

    Bash
    sudo apt install iptables-persistent -y
    sudo netfilter-persistent save
    

Заключение

Грамотно настроенный сетевой экран — это базовый минимум для безопасности любого сервера в интернете. Для 95% повседневных задач веб-разработки и администрирования возможностей UFW более чем достаточно, тогда как iptables остаётся незаменимым инструментом для сложной сетевой маршрутизации и защиты от специфических атак.

Однако даже самый жесткий файрвол не защитит систему, если сам сервер подвергается массированным сетевым атакам (DDoS) на уровне каналов связи, переполняющим сетевые порты провайдера.

Если вы ищете безопасную и надежную инфраструктуру для ваших проектов, оцените NVMe VPS и Hourly Cloud Серверы от MivoCloud. Мы предоставляем чистую KVM-виртуализацию, гарантированные вычислительные ресурсы, защищенную сетевую инфраструктуру и сверхбыстрые Enterprise NVMe-накопители для безупречной работы ваших сервисов.


Автор статьи: Anatolie Cohaniuc