Руководства по развёртыванию, секретам, доменам и управлению контейнерами.

Безопасность машины: что настроить сразу после заказа

Пошаговая памятка администратора — обновления, вход по ключу, firewall с доступом только для своих адресов, fail2ban, смена и ротация паролей, нестандартный порт SSH. · обновлено 2026-10-27

Пятнадцать минут базовых настроек закрывают большинство типовых атак на сервер. Ниже — порядок действий, который можно выполнить сразу после первого входа. Все команды выполняются на самой машине под root (или через sudo).

Три правила, чтобы не запереть себя снаружи

  1. Новый доступ открываем раньше, чем закрываем старый. Сначала проверьте вход новым способом в отдельном окне терминала и только потом отключайте прежний.
  2. Не закрывайте сессию, в которой работаете, пока не убедились, что можете зайти заново.
  3. Консоль в кабинете — аварийный вход. Она не зависит от SSH и сетевых правил: если что-то заблокировали, зайдите через неё и исправьте настройки.

1. Обновление пакетов

Устаревшие пакеты — самая частая причина взлома: уязвимость уже известна, а исправление не установлено.

apt update && apt upgrade -y

Если обновилось ядро, машину нужно перезагрузить:

apt list --upgradable 2>/dev/null | grep -i linux-image
reboot

Включите автоматические обновления безопасности — дальше система обновляется сама:

apt install -y unattended-upgrades
dpkg-reconfigure --priority=low unattended-upgrades   # ответьте «Yes»
systemctl status unattended-upgrades --no-pager

Раз в месяц всё равно полезно заходить и запускать apt update && apt upgrade вручную: автоматика ставит только обновления безопасности.

2. Вход по SSH-ключам вместо пароля

Пароль можно подобрать — это делают круглосуточно и автоматически. Ключ подобрать практически нельзя.

Ключ создаётся на вашем компьютере, публичная часть копируется на сервер:

ssh-keygen -t ed25519 -C "мой ключ"   # Enter, затем парольная фраза (рекомендуется)
ssh-copy-id root@АДРЕС_МАШИНЫ
ssh root@АДРЕС_МАШИНЫ                 # должно пустить уже по ключу, без пароля

Когда вход по ключу проверен, отключите пароль на машине:

sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl reload ssh

Проверка — в новом окне, не закрывая текущее:

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no root@АДРЕС_МАШИНЫ
## Ожидаемый ответ: Permission denied (publickey)

3. Ограничение SSH по IP-адресам (ufw)

Идея простая: порт SSH виден только вашим адресам, для остальных он «не существует».

apt install -y ufw

ufw default deny incoming
ufw default allow outgoing
ufw allow 80/tcp        # если на машине есть сайт или приложение
ufw allow 443/tcp

## SSH только для своих адресов
ufw allow from 203.0.113.7 to any port 22 proto tcp
ufw allow from 198.51.100.0/24 to any port 22 proto tcp   # целая сеть

ufw enable
ufw status numbered

Добавить ещё один адрес:

ufw allow from 192.0.2.55 to any port 22 proto tcp

Удалить адрес — по номеру правила или точной копией правила:

ufw status numbered
ufw delete 3

## либо
ufw delete allow from 192.0.2.55 to any port 22 proto tcp

Полезные команды:

ufw status verbose    # подробно: политики и правила
ufw disable           # выключить (временно)
ufw reload            # применить после ручной правки файлов

Если у вас Docker. Контейнеры публикуют порты в обход правил ufw: открытый наружу порт (-p 8080:80) останется доступен. Для приложения это обычно и нужно, но никогда не публикуйте наружу порты баз данных (5432, 3306, 6379, 27017) — привязывайте их к 127.0.0.1, чтобы база была доступна только внутри машины.

4. Защита от перебора: fail2ban

fail2ban читает журналы и блокирует адреса, которые ошибаются с паролем. Даже с ключами он полезен: меньше мусора в логах и меньше нагрузки от ботов.

apt install -y fail2ban

Создайте файл /etc/fail2ban/jail.local:

[DEFAULT]
maxretry = 5
findtime = 10m
bantime  = 1h
ignoreip = 127.0.0.1/8 ::1 203.0.113.7 198.51.100.0/24

[sshd]
enabled = true
port    = ssh
backend = systemd

Примените и проверьте:

systemctl enable --now fail2ban
fail2ban-client status
fail2ban-client status sshd     # сколько адресов сейчас забанено

Разбанить адрес вручную:

fail2ban-client set sshd unbanip 192.0.2.55

Свой адрес обязательно внесите в ignoreip — иначе при неверном пароле (например, из старого скрипта) вы заблокируете сами себя на час.

5. Пароли: смена и ротация

Пароли, выданные при регистрации, смените сразу — они могли попасть в переписку.

passwd            # свой пароль
passwd root       # пароль root

chage -l root         # когда менялся и не истёк ли срок
chage -M 180 root     # срок действия — 180 дней

Требования к паролю: не менее 16 символов, уникальный (не такой, как в других сервисах), хранится в менеджере паролей (Bitwarden, KeePassXC, 1Password), а не в заметках и не в переписке.

Плановая ротация:

  • пароли от панелей и админок — раз в 3–6 месяцев;
  • пароли сервисных учёток — при уходе сотрудника и при подозрении на утечку;
  • ключи SSH — раз в год или сразу, если ключ мог попасть не туда.

6. Нестандартный порт SSH

Смена порта не заменяет ключи и firewall, но убирает большую часть автоматического мусора: боты сканируют порт 22 и не ищут ваш нестандартный.

Порядок важен: сначала разрешите новый порт в firewall, потом меняйте настройки SSH.

ufw allow from 203.0.113.7 to any port 3467 proto tcp

cat > /etc/ssh/sshd_config.d/90-port.conf <<'EOF'
Port 3467
EOF
sshd -t && systemctl reload ssh

ssh -p 3467 root@АДРЕС_МАШИНЫ    # проверяем вход в новом окне

ufw delete allow 22/tcp          # только после успешного входа

Если в /etc/ssh/sshd_config уже есть строка Port 22, файл 90-port.conf добавит второй порт, а не заменит его. Проверить, что реально слушается: ss -tlnp | grep sshd.

Что ещё стоит сделать

Действие Зачем Как
Запретить root-вход по паролю root — первая цель ботов PermitRootLogin prohibit-password
Отдельный пользователь вместо root меньше последствий ошибки adduser admin && usermod -aG sudo admin
Не публиковать базы данных наружу базы ломают чаще всего порт только на 127.0.0.1
Следить за входами заметить взлом вовремя last -n 20, journalctl -u ssh -n 50
Двухфакторная аутентификация на панелях пароля недостаточно включается в настройках аккаунта
Резервные копии защита и от взлома, и от ошибок ежедневно + проверка восстановления

Чек-лист

  • пакеты обновлены, ядро актуально, машина перезагружена
  • unattended-upgrades включён
  • вход по SSH-ключу работает
  • вход по паролю отключён и проверен (Permission denied (publickey))
  • ufw включён, SSH разрешён только моим адресам
  • порты 80/443 (и порты приложения) открыты, базы — нет
  • fail2ban: 5 попыток / 1 час, мой адрес в ignoreip
  • пароли от регистрации изменены и лежат в менеджере паролей
  • настроен срок ротации паролей
  • (по желанию) порт SSH изменён на нестандартный
  • настроены резервные копии

Если что-то сломалось

Симптом Что делать
Не пускает по SSH после правок консоль в кабинете → sshd -t → systemctl status ssh
Заблокировал себя в fail2ban fail2ban-client set sshd unbanip ВАШ_IP
Сайт или приложение перестало открываться ufw status — открыты ли 80/443 и порт приложения
Забыли пароль root напишите в поддержку: восстановим доступ через консоль

Связанные статьи