> ## Documentation Index
> Fetch the complete documentation index at: https://wiki.lumiweb.cc/llms.txt
> Use this file to discover all available pages before exploring further.

# Файрвол (ufw)

> Открыть нужные порты, закрыть лишнее

Файрвол решает, какой трафик пускать на сервер, а какой нет. `ufw` (Uncomplicated Firewall) — простой фронтенд к `iptables`: вместо длинных правил пишешь короткие команды. Идея простая — закрыть всё входящее и открыть только те порты, что реально нужны (SSH, сайт).

На сервере Lumi (по умолчанию Ubuntu 22.04) ты подключаешься как `root` — IP и пароль берёшь из карточки сервера в боте. Все команды ниже выполняй от root.

## Установка

В Ubuntu `ufw` обычно уже стоит. Если нет:

```bash theme={"system"}
apt update && apt install ufw
```

## Первоначальная настройка

<Warning>
  До включения файрвола обязательно разреши SSH. Если выполнить `ufw enable` до разрешения SSH, ты потеряешь доступ к серверу.
</Warning>

<Steps>
  <Step title="Разреши SSH">
    ```bash theme={"system"}
    ufw allow OpenSSH
    ```

    `OpenSSH` — готовый профиль для порта 22. Если меняешь стандартный порт SSH на свой, открой номер напрямую, например `ufw allow 2222/tcp`.
  </Step>

  <Step title="Установи политики по умолчанию">
    Закрываем всё входящее, исходящее оставляем открытым (чтобы сервер мог сам качать обновления и ходить в сеть):

    ```bash theme={"system"}
    ufw default deny incoming
    ufw default allow outgoing
    ```
  </Step>

  <Step title="Включи файрвол">
    ```bash theme={"system"}
    ufw enable
    ```

    На вопрос подтверди вводом `y`.
  </Step>
</Steps>

## Открой порты сайта

Для веб-сервера нужны 80 (HTTP) и 443 (HTTPS):

```bash theme={"system"}
ufw allow 80
ufw allow 443
```

Открывай только то, что используешь. Базе данных, например, наружу обычно нечего делать — пусть слушает только локально.

<AccordionGroup>
  <Accordion title="Посмотреть текущие правила" icon="list">
    ```bash theme={"system"}
    ufw status
    ```

    Чтобы видеть правила с номерами (пригодится для удаления):

    ```bash theme={"system"}
    ufw status numbered
    ```
  </Accordion>

  <Accordion title="Удалить правило" icon="trash">
    По самому правилу:

    ```bash theme={"system"}
    ufw delete allow 80
    ```

    Или по номеру из `ufw status numbered`:

    ```bash theme={"system"}
    ufw delete 3
    ```
  </Accordion>
</AccordionGroup>

<Note>
  `ufw` фильтрует трафик на самом сервере. Закрытые порты не мешают исходящим соединениям — обновления и сеть продолжают работать.
</Note>

## Куда дальше

<CardGroup cols={2}>
  <Card title="Защита сервера" icon="lock" href="/vps/hardening">
    Чек-лист безопасности — ключи, fail2ban, обновления.
  </Card>

  <Card title="SSH-ключи" icon="key" href="/vps/ssh-keys">
    Вход по ключу вместо пароля.
  </Card>
</CardGroup>
