Безопасность машины: что настроить сразу после заказа
Пятнадцать минут базовых настроек закрывают большинство типовых атак на сервер. Ниже — порядок
действий, который можно выполнить сразу после первого входа. Все команды выполняются на самой
машине под root (или через sudo).
Три правила, чтобы не запереть себя снаружи
- Новый доступ открываем раньше, чем закрываем старый. Сначала проверьте вход новым способом в отдельном окне терминала и только потом отключайте прежний.
- Не закрывайте сессию, в которой работаете, пока не убедились, что можете зайти заново.
- Консоль в кабинете — аварийный вход. Она не зависит от 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 | напишите в поддержку: восстановим доступ через консоль |
Связанные статьи
- Подключение к машине по SSH — адрес, ключ, пароль и разбор ошибок входа.
- Ограничение входа в аккаунт по IP — защита самой панели, а не сервера.
- Вход в аккаунт и безопасность сессии — пароли, сессии, второй фактор.