ЦОД Tier III · Новосибирск Uptime 99.982% по SLA Поддержка 24×7, дежурный инженер
Работа с юрлицами · ЭДО · 152-ФЗ 8 (383) 312-00-43
ADMAN DATA CENTER · NOVOSIBIRSK
Документация Поддержка Заказать
ADMAN DATA CENTER · NOVOSIBIRSK
Услуги Виртуальные серверы (VPS) Виртуальный хостинг Выделенные серверы Colocation в ЦОДе Объектное S3-хранилище SSL-сертификаты Домены Услуги ЦОД и поддержки Все цены одним списком Тарифы Дата-центр Безопасность Контакты
Поддержка Документация
Личный кабинет 8 (383) 312-00-43
Оставить заявку
Тема оформления
Документация

Безопасность вашей виртуальной машины

Пятнадцать минут базовых настроек закрывают большинство типовых атак. Ниже — пошаговая памятка для обычного администратора: что сделать сразу после получения сервера и как поддерживать защиту дальше.

Сначала открываем новое

Новый доступ настраиваем и проверяем в отдельном окне — и только потом закрываем старый. Так вы не останетесь без связи с сервером.

Консоль — аварийный вход

Консоль (VNC) в панели управления не зависит от 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
Шаг 2

Вход по SSH-ключам

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

ssh-keygen -t ed25519 -C "мой ключ"     # Enter, затем парольная фраза
ssh-copy-id root@ВАШ_IP
ssh root@ВАШ_IP                          # должно пустить уже по ключу

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

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

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

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no root@ВАШ_IP
# Ожидаемый ответ: 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

Если у вас Docker

Контейнеры публикуют порты в обход правил ufw. Это нормально для приложения, но никогда не публикуйте наружу порты баз данных (5432, 3306, 6379, 27017) — привязывайте их только к 127.0.0.1, чтобы база была доступна лишь внутри сервера.

Шаг 4

Защита от перебора: 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 символов, уникальный, хранится в менеджере паролей, а не в заметках и не в переписке. Плановая ротация: пароли панелей — раз в 3–6 месяцев, ключи SSH — раз в год или сразу, если ключ мог попасть не туда.

Шаг 6

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

Порт не заменяет ключи и firewall, но убирает большую часть автоматического мусора.

Порядок важен: сначала разрешите новый порт в 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@ВАШ_IP        # проверяем вход в новом окне

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

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

Запретить root-вход по паролюPermitRootLogin prohibit-password
Отдельный пользователь вместо rootadduser 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 только своим адресамufw status verbose
Порты 80/443 открыты, базы — нетпроверено снаружи
fail2ban: 5 попыток / 1 чассвой адрес в ignoreip
Пароли от регистрации измененыхранятся в менеджере паролей
Если что-то сломалось

Быстрые решения

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