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) и вы сознательно управляете доступом там. Даже в этом случае локальный файрвол — полезный второй рубеж.
Зависимости и требования
- Отдельных модулей-зависимостей нет, но модуль тесно связан с портом SSH из
03-security(SSH_PORT). - Debian/Ubuntu: ставится пакет
ufw. - RHEL/SUSE/Arch: ставится и включается
firewalld; все командыufw …из mitdev транслируются вfirewall-cmdчерез шим вlib/os.sh. Политика «deny incoming / allow outgoing» на firewalld обеспечивается его зонойpublicпо умолчанию, аufw allow <порт>превращается вfirewall-cmd --add-port.
Что именно делает (по шагам module_install)
- Ставит файрвол:
ufw(Debian) либоfirewalld+enable --now(остальные). - Задаёт политику по умолчанию:
ufw default deny incoming,ufw default allow outgoing. - Разрешает SSH — ПЕРВЫМ, до включения:
ufw allow <SSH_PORT>/tcpс комментариемmitdev: ssh. Это ключевой момент: правило доступа добавляется раньше активации файрвола, поэтому текущее ssh-соединение не рвётся (защита от локаута — блокировки самого себя). - Открывает веб-порты из
UFW_EXTRA_PORTS(по умолчанию80/tcpи443/tcp) с комментариемmitdev: web. - Включает файрвол:
ufw --force enable(--force— без интерактивного вопроса ufw). - Каждое действие регистрируется для отката; выполняется
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) |
Как переопределить настройки
- Экспорт перед установкой:
SSH_PORT=2222 UFW_EXTRA_PORTS="80/tcp 443/tcp 8080/tcp" sudo -E ./install.sh - Правка
config/defaults.conf— строкаUFW_EXTRA_PORTS="${UFW_EXTRA_PORTS:-80/tcp 443/tcp}". - После установки — точечными командами
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.
Безопасность и продакшен
- Правило SSH до
enable— главный защитный механизм модуля. Никогда не включайте UFW вручную без открытого SSH-порта. - Держите список открытых портов минимальным: наружу обычно достаточно SSH + 80/443. Базы данных (PostgreSQL, Redis, Mongo) не открывайте в мир — используйте приватную сеть (
mitdev net) или точечные правила по IP. - Точечные правила по конкретным IP для кластеров БД добавляют команды
mitdev pg allow(см. модули18-pgcluster). - Выключенный файрвол (
mitdev firewall disable) снимает всю сетевую фильтрацию — включайте обратно как можно скорее.
Откат и удаление
Автоматический откат (module_rollback): ufw --force disable.
Ручное удаление:
# Выключить файрвол, СОХРАНИВ правила и пакет (можно вернуть: mitdev firewall enable)
mitdev remove firewall
# Полное удаление: сброс правил и удаление пакета ufw
mitdev remove firewall --purge
Внимание: после удаления файрвол выключен — входящие соединения больше не фильтруются UFW. Без --purge правила и пакет сохраняются (файрвол легко включить снова); с --purge набор правил сбрасывается и пакет удаляется.
См. также
- ../COMMANDS.md — команды
mitdev firewall/mitdev ufw - ../SECURITY.md — сетевая модель и закрытие сервисов
- 03-security.md — порт SSH (
SSH_PORT) - 10-fail2ban.md — блокировка брутфорса поверх файрвола
- ../TROUBLESHOOTING.md — восстановление доступа при локауте