> ## 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, fail2ban, обновления

Свежий сервер с доступом по паролю начинают перебирать боты в первые же минуты. Пройди этот чек-лист — он закрывает основные дыры. Команды для Ubuntu/Debian, под root.

<Steps>
  <Step title="Вход по SSH-ключу">
    Настрой вход по ключу и отключи вход по паролю — это убирает сам смысл перебора. Подробно: [SSH-ключи](/vps/ssh-keys).
  </Step>

  <Step title="Файрвол">
    Закрой все входящие порты, кроме нужных. Подробно: [Файрвол (ufw)](/vps/firewall).
  </Step>

  <Step title="Обновления">
    Ставь свежие версии пакетов — в них чинят известные уязвимости:

    ```bash theme={"system"}
    apt update && apt upgrade
    ```

    Чтобы обновления безопасности ставились сами:

    ```bash theme={"system"}
    apt install unattended-upgrades
    dpkg-reconfigure -plow unattended-upgrades
    ```
  </Step>

  <Step title="fail2ban">
    `fail2ban` смотрит в логи и временно банит IP, который перебирает пароль по SSH: несколько неудачных попыток — и адрес блокируется на время.

    Установи:

    ```bash theme={"system"}
    apt install fail2ban
    ```

    Настройки правь в `jail.local` — этот файл не перезаписывается при обновлениях. Создай его:

    ```bash theme={"system"}
    nano /etc/fail2ban/jail.local
    ```

    Впиши:

    ```ini theme={"system"}
    [sshd]
    enabled = true
    maxretry = 5
    findtime = 600
    bantime = 3600
    ```

    Здесь: `maxretry` — сколько неудачных попыток допустимо, `findtime` — за какое окно в секундах они считаются (600 = 10 минут), `bantime` — на сколько секунд банить (3600 = 1 час).

    Запусти и проверь:

    ```bash theme={"system"}
    systemctl enable --now fail2ban
    fail2ban-client status sshd
    ```

    Вторая команда покажет, сколько адресов сейчас в бане.
  </Step>

  <Step title="Не работай под root постоянно">
    Под root любая ошибка или взлом — сразу полный контроль над сервером. Заведи обычного пользователя с правом повышать привилегии через `sudo`:

    ```bash theme={"system"}
    adduser ИМЯ
    usermod -aG sudo ИМЯ
    ```

    Дальше заходи под ним, а команды, которым нужны права, запускай через `sudo`.

    <Warning>
      Прежде чем выходить из root-сессии, проверь в отдельном окне, что под новым пользователем удаётся зайти и выполнить `sudo`. Иначе рискуешь остаться без административного доступа.
    </Warning>
  </Step>

  <Step title="Сменить стандартный порт SSH (опционально)">
    Перенос SSH с порта 22 на другой убирает основную массу слепого перебора. Это не защита сама по себе, но шума в логах станет меньше. В `/etc/ssh/sshd_config` укажи, например, `Port 2222`, перезапусти `systemctl restart ssh`.

    <Warning>
      Если уже включён `ufw`, сначала открой новый порт (`ufw allow 2222/tcp`), и только потом меняй и перезапускай SSH — иначе закроешь себе доступ. Если у тебя установлен `fail2ban`, после смены порта обнови его конфиг — иначе он перестанет защищать SSH, не подавая виду.
    </Warning>

    Обнови `/etc/fail2ban/jail.local` — в секции `[sshd]` добавь или замени строку:

    ```ini theme={"system"}
    [sshd]
    enabled = true
    port = 2222
    ```

    Затем перезапусти:

    ```bash theme={"system"}
    systemctl restart fail2ban
    ```

    <Tip>
      Перед экспериментами с доступом и портами сделай бэкап — если что-то пойдёт не так, будет откуда восстановиться. Как: [Бэкапы](/vps/backups).
    </Tip>
  </Step>
</Steps>

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

<CardGroup cols={2}>
  <Card title="Бэкапы" icon="box-archive" href="/vps/backups">
    Настрой резервные копии — на случай если что-то пойдёт не так.
  </Card>

  <Card title="Файрвол" icon="shield-halved" href="/vps/firewall">
    Детальная настройка ufw и управление правилами.
  </Card>
</CardGroup>
