# cockpit-ufw-module: Uncomplicated Firewall в Cockpit

Индекс LLMS: [llms.txt](/llms.txt)

---

UFW на домашнем или небольшом сервере обычно настраивают по SSH: `ufw status numbered`, затем `ufw allow 443/tcp`. [cockpit-ufw-module](https://gitlab.com/cockpit-modules/cockpit-ufw-module) закрывает тот же цикл в браузере: пакет, статус, политики, правила. Это одна из панелей группы [cockpit-modules](/posts/cockpit-modules/) — пункт **UFW** в разделе **Tools**.

Интерфейс на русском, в стиле PatternFly v5. Нужны Cockpit **264+** и права администратора для записи. Лицензия MIT, актуальный релиз — тег `v.1.0.1`.

## Зачем панель, если есть `ufw`

Клиент уже есть: системный `ufw`. Не хватает обзора без терминала и безопасного ввода: порт, CIDR, номер правила.

Панель не подменяет iptables своим движком. HTML и JS вызывают хостовые команды через `cockpit.spawn` массивом аргументов, без shell-строк. Ввод проверяется на клиенте: порт (включая диапазон и список), IPv4/IPv6 и CIDR, действие `allow` / `deny` / `reject` / `limit`. Без прав администратора Cockpit операции с пакетом и правилами не проходят.

## Что видно на странице

Четыре блока, сверху вниз:

| Блок | Что делает |
|------|------------|
| Пакет ufw | установлен / нет, версия, менеджер (APT, DNF, YUM, Pacman), установка и удаление |
| Состояние | active / inactive, уровень логирования, политики incoming/outgoing, включить / выключить / reload |
| Правила | таблица из `ufw status numbered`: номер, куда, действие, откуда, удаление |
| Добавить правило | действие, протокол, порт, источник IP/CIDR |

Пока файервол выключен, таблица правил скрыта: UFW их не применяет, хотя записи в конфиге могут быть. Счётчик тогда пишет «N правил (неактивны)».

## Установка модуля

Через [магазин](https://gitlab.com/cockpit-modules/cockpit-modules-store) — если он уже стоит. Иначе вручную:

```bash
git clone https://gitlab.com/cockpit-modules/cockpit-ufw-module.git
cd cockpit-ufw-module
sudo ./install.sh
```

Файлы копируются в `/usr/share/cockpit/ufw`. Обновите страницу Cockpit — в **Tools** появится **UFW**.

Для текущего пользователя без root:

```bash
./install.sh --user
```

Модуль окажется в `~/.local/share/cockpit/ufw`.

> [!NOTE]
> `install.sh` ставит только панель. Пакет `ufw` ставится уже из UI, кнопкой **Установить ufw**.

## Типичный сценарий на чистом хосте

Порядок важнее кнопок. После установки пакета модуль сам делает `ufw --force reset`, ставит политики **allow** на входящие и исходящие, открывает `22/tcp` и включает unit `ufw` в systemd. Сам файервол **не включает** — это отдельная кнопка с предупреждением про SSH.

1. **Tools → UFW → Установить ufw.** Подтвердите. На APT сначала идёт `apt-get update`.
2. Добавьте явные правила для того, чем управляете с этого хоста. Cockpit слушает **9090/tcp** — после установки пакета этого правила нет, только SSH 22. Если позже поставить incoming в `deny` без 9090, панель отвалится.
3. Нужные сервисы: `80/tcp`, `443/tcp`, диапазон вроде `8000:8010`. Источник можно сузить CIDR, например `10.0.0.0/8`.
4. Перед добавлением UI показывает превью команды (`ufw allow 443/tcp`) — это тот же argv, который уйдёт на хост.
5. **Включить.** Пока default incoming — `allow`, доступ не режется: сработают только явные deny/reject/limit.
6. Когда SSH, Cockpit и сайты на месте — смените входящую политику на `deny`. Исходящую обычно оставляют `allow`.

Примеры того, что принимает форма:

```
22/tcp
443,80
8000:8010
from 10.0.0.0/8 to any port 443 proto tcp
```

`limit` — это rate-limit UFW на новые соединения, полезно на 22. `reject` отвечает ICMP/TCP reset, `deny` молча отбрасывает.

> [!WARNING]
> **Установить ufw** делает `ufw --force reset`. Существующие правила на хосте будут сброшены. На уже настроенном файерволе пакет ставьте руками, панель используйте только для статуса и точечных правок.

## Что панель не делает

Это не полный `ufw` из man. Из UI нет:

- профилей приложений (`ufw allow OpenSSH`, `ufw app list`);
- привязки к интерфейсу (`on eth0`);
- комментариев к правилам;
- направления in/out в форме добавления — новые правила идут как входящие;
- смены уровня логирования (строка **Логирование** только читается);
- политики routed, хотя `ufw status verbose` её парсит.

Удаление пакета выключает UFW (`ufw --force disable`) и снимает его через менеджер системы, для APT — с `--purge`.

Локальная проверка без боя на хосте — Docker Compose из репозитория: privileged-контейнер с systemd, Ubuntu, Cockpit и ufw, по умолчанию `http://localhost:9090`, логин `admin` / `admin`. Это демо, не образец для production.

Исходники, issues и теги — в [gitlab.com/cockpit-modules/cockpit-ufw-module](https://gitlab.com/cockpit-modules/cockpit-ufw-module). Соседние панели той же группы: fail2ban, cron, CertManager.

---

Обратные ссылки:

- [cockpit-modules: веб-панели для повседневной эксплуатации](/posts/cockpit-modules/)
