09-firewall — Файрвол UFW

☐ Опциональный. Настраивает файрвол по принципу «запрещено всё входящее, кроме явно разрешённого»: открывает ваш порт SSH и веб-порты, включает защиту. Правило SSH добавляется до включения — заблокировать себя невозможно.

Зачем нужен

Файрвол фильтрует сетевые соединения: по умолчанию модуль блокирует все входящие подключения (deny incoming — «запретить входящие») и разрешает все исходящие (allow outgoing), открывая снаружи только нужные порты (SSH, HTTP, HTTPS). Это резко сокращает поверхность атаки: случайно поднятый сервис на «лишнем» порту не будет доступен из интернета.

На Debian/Ubuntu используется UFW (Uncomplicated Firewall — простая надстройка над iptables). На других семействах mitdev управляет firewalld через совместимый с ufw шим — команды выглядят одинаково.

Когда включать и когда не нужен

Включайте практически всегда — это базовая гигиена безопасности публичного сервера.

Можно не ставить, если фильтрацией занимается внешний файрвол облака (security group / network ACL) и вы сознательно управляете доступом там. Даже в этом случае локальный файрвол — полезный второй рубеж.

Зависимости и требования

Что именно делает (по шагам module_install)

  1. Ставит файрвол: ufw (Debian) либо firewalld + enable --now (остальные).
  2. Задаёт политику по умолчанию: ufw default deny incoming, ufw default allow outgoing.
  3. Разрешает SSH — ПЕРВЫМ, до включения: ufw allow <SSH_PORT>/tcp с комментарием mitdev: ssh. Это ключевой момент: правило доступа добавляется раньше активации файрвола, поэтому текущее ssh-соединение не рвётся (защита от локаута — блокировки самого себя).
  4. Открывает веб-порты из UFW_EXTRA_PORTS (по умолчанию 80/tcp и 443/tcp) с комментарием mitdev: web.
  5. Включает файрвол: ufw --force enable (--force — без интерактивного вопроса ufw).
  6. Каждое действие регистрируется для отката; выполняется module_verify.

Файлы, службы и порты

Путь / юнит / порт Назначение Права
ufw (Debian) / firewalld (прочие) служба файрвола root
порт <SSH_PORT>/tcp доступ по SSH (открыт до включения) разрешён
порт 80/tcp, 443/tcp HTTP / HTTPS (из UFW_EXTRA_PORTS) разрешены
всё остальное входящее запрещено (deny)
/etc/ufw/ правила и политика UFW (Debian) root

Настройка

Переменная Значения По умолчанию Влияние Когда менять
SSH_PORT номер порта 22 (SSH_PORT_DEFAULT) какой порт SSH открыть до включения если SSH перенесён на нестандартный порт (03-security)
UFW_EXTRA_PORTS список порт/proto через пробел 80/tcp 443/tcp какие дополнительные порты открыть при установке если нужны иные публичные порты (или только 443)

Как переопределить настройки

  1. Экспорт перед установкой:
    SSH_PORT=2222 UFW_EXTRA_PORTS="80/tcp 443/tcp 8080/tcp" sudo -E ./install.sh
    
  2. Правка config/defaults.conf — строка UFW_EXTRA_PORTS="${UFW_EXTRA_PORTS:-80/tcp 443/tcp}".
  3. После установки — точечными командами mitdev firewall allow (см. ниже), не трогая базовый набор.

Проверка, что всё работает

module_verify: команда ufw есть и ufw status показывает Status: active.

Вручную:

mitdev firewall status                # = ufw status verbose: активен, политика, список правил
sudo ufw status numbered              # правила с номерами

Ожидаемо: Status: active, Default: deny (incoming), allow (outgoing), в списке — ваш SSH-порт и 80,443/tcp.

Типовые задачи

# Показать статус и все правила
mitdev firewall status

# Открыть свой порт (например, PostgreSQL наружу — осторожно!)
mitdev firewall allow 5432/tcp

# Открыть порт без указания протокола (по умолчанию tcp)
mitdev firewall allow 8080

# Безопасно включить файрвол (SSH-правило добавляется первым)
mitdev firewall enable

# Выключить файрвол (спросит подтверждение — сервер останется без защиты)
mitdev firewall disable

# Псевдоним ufw — те же подкоманды
mitdev ufw status

mitdev firewall enable повторяет логику модуля: сначала deny/allow-политика и SSH-правило, только потом активация — поэтому включать файрвол этой командой безопасно даже удалённо.

Частые ошибки

Симптом: после sudo ufw enable (вручную, не через mitdev) соединение оборвалось, сервер недоступен. Причина: файрвол включён без правила для SSH — классический локаут. Решение: используйте mitdev firewall enable (оно всегда открывает SSH первым). Если доступ уже потерян — зайдите через веб-консоль облачной панели и выполните:

sudo ufw allow 22/tcp        # или ваш SSH_PORT
sudo ufw reload

Симптом: свой сервис недоступен снаружи, хотя запущен. Причина: порт не открыт в файрволе (политика deny incoming). Решение: mitdev firewall allow <порт>/tcp, затем проверьте mitdev firewall status.

Симптом: перенесли SSH на новый порт — боюсь потерять доступ. Причина: файрвол ещё разрешает только старый порт. Решение: сначала откройте новый порт, убедитесь, что заходит, и только потом закрывайте старый:

mitdev firewall allow 2222/tcp
# проверьте вход по новому порту в отдельной сессии, затем:
sudo ufw delete allow 22/tcp

Симптом: на RHEL команды ufw «работают», но ufw status показывает «(firewalld shim)». Причина: это нормально — на не-Debian системах mitdev управляет firewalld через совместимый шим. Решение: ничего не требуется; при желании смотрите нативно: sudo firewall-cmd --list-all.

Безопасность и продакшен

Откат и удаление

Автоматический откат (module_rollback): ufw --force disable.

Ручное удаление:

# Выключить файрвол, СОХРАНИВ правила и пакет (можно вернуть: mitdev firewall enable)
mitdev remove firewall

# Полное удаление: сброс правил и удаление пакета ufw
mitdev remove firewall --purge

Внимание: после удаления файрвол выключен — входящие соединения больше не фильтруются UFW. Без --purge правила и пакет сохраняются (файрвол легко включить снова); с --purge набор правил сбрасывается и пакет удаляется.

См. также