Базовая защита сервера: SSH, firewall, fail2ban
Свежий VPS без настройки — это открытая дверь: боты круглосуточно перебирают пароли по SSH и ищут дыры. Хорошая новость — базовая защита занимает 15–20 минут и закрывает подавляющее большинство автоматических атак. Ниже — пошаговый минимум с командами для двух семейств ОС: Ubuntu / Debian (пакетный менеджер apt, firewall ufw) и AlmaLinux / Rocky / CentOS (пакетный менеджер dnf, firewall firewalld).
С чего начать
- Обновите систему сразу после создания сервера.
- Создайте отдельного пользователя с правами администратора — не работайте под root.
- Настройте вход по SSH-ключу и отключите вход по паролю.
- Включите firewall и оставьте только нужные порты.
- Поставьте fail2ban и автоматические обновления безопасности.
Порядок важен. Сначала настройте и проверьте вход по ключу для нового пользователя, и только потом отключайте пароль и root — иначе можно случайно закрыть себе доступ. Держите вторую SSH-сессию открытой, пока не убедитесь, что новый вход работает.
1. Обновления системы
Ubuntu / Debian
sudo apt update && sudo apt upgrade -y
AlmaLinux / Rocky / CentOS
sudo dnf upgrade -y
Затем включите автоматические обновления безопасности, чтобы критичные патчи ставились сами.
Ubuntu / Debian
sudo apt install -y unattended-upgrades sudo dpkg-reconfigure -plow unattended-upgrades # выберите «Yes»
AlmaLinux / Rocky / CentOS
sudo dnf install -y dnf-automatic # в /etc/dnf/automatic.conf укажите: apply_updates = yes sudo systemctl enable --now dnf-automatic.timer
2. Отдельный пользователь вместо root
Работа под root опасна: любая ошибка или взлом сразу дают полный контроль. Заведите обычного пользователя и дайте ему права администратора. Обратите внимание: в Ubuntu/Debian это группа sudo, в AlmaLinux/Rocky/CentOS — группа wheel.
Ubuntu / Debian
sudo adduser myuser sudo usermod -aG sudo myuser
AlmaLinux / Rocky / CentOS
sudo useradd myuser sudo passwd myuser sudo usermod -aG wheel myuser
Проверьте, что новый пользователь может выполнять команды через sudo, прежде чем ограничивать root.
3. Вход по SSH-ключу
Ключ надёжнее пароля и не поддаётся перебору. Команды ниже одинаковы для всех ОС. Если ключа ещё нет, создайте его на своём компьютере:
ssh-keygen -t ed25519 -C "moy-noutbuk"
Скопируйте публичный ключ на сервер (для нужного пользователя):
ssh-copy-id myuser@IP_сервера # затем проверьте вход по ключу: ssh myuser@IP_сервера
Приватный ключ не передавайте никому. На сервер загружается только публичный ключ (
.pub). Приватный остаётся на вашем устройстве.
4. Усиление настроек SSH
После того как вход по ключу работает, отключите вход под root и по паролю. Файл конфигурации /etc/ssh/sshd_config одинаков для всех ОС. Задайте (или раскомментируйте) параметры:
PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes
Примените изменения. Важно: служба SSH в Ubuntu/Debian называется ssh, в AlmaLinux/Rocky/CentOS — sshd.
Ubuntu / Debian
sudo systemctl restart ssh
AlmaLinux / Rocky / CentOS
sudo systemctl restart sshd
Не закрывайте текущую сессию сразу. Откройте новое SSH-подключение и убедитесь, что вход по ключу работает. Если что-то не так — вернёте настройки в открытой сессии.
Смена стандартного порта 22 на нестандартный — необязательна, но снижает шум в логах от ботов. Если меняете порт, откройте его в firewall (а на RHEL с включённым SELinux — ещё и разрешите порт: sudo semanage port -a -t ssh_port_t -p tcp <порт>).
5. Firewall
Правило простое: закрыть всё, открыть только нужное (обычно SSH и веб-порты). В Ubuntu/Debian это ufw, в AlmaLinux/Rocky/CentOS — firewalld.
Ubuntu / Debian (ufw)
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow OpenSSH # или ваш SSH-порт sudo ufw allow 80 sudo ufw allow 443 sudo ufw enable sudo ufw status
AlmaLinux / Rocky / CentOS (firewalld)
sudo systemctl enable --now firewalld sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --permanent --add-service=https sudo firewall-cmd --reload sudo firewall-cmd --list-all
Сначала разрешите SSH, потом включайте firewall. Если закрыть входящие без правила для SSH, можно потерять доступ к серверу.
6. Защита от перебора (fail2ban)
fail2ban читает логи и банит IP, которые перебирают пароли. В Ubuntu/Debian он ставится напрямую; в AlmaLinux/Rocky/CentOS нужен репозиторий EPEL.
Ubuntu / Debian
sudo apt install -y fail2ban sudo systemctl enable --now fail2ban
AlmaLinux / Rocky / CentOS
sudo dnf install -y epel-release sudo dnf install -y fail2ban sudo systemctl enable --now fail2ban
Проверка статуса и забаненных адресов по SSH (одинаково):
sudo fail2ban-client status sshd
Настройка — в
/etc/fail2ban/jail.local. Там задают время бана и число попыток. На RHEL для защиты SSH создайте секцию[sshd]сenabled = trueиbackend = systemd(илиlogpath = /var/log/secure); в Ubuntu/Debian SSH-джейл включён по умолчанию.
7. Убрать лишнее
- Меньше сервисов — меньше рисков. Отключите то, что не используете:
sudo systemctl disable --now <сервис>. - Проверьте открытые порты:
sudo ss -tulpn— наружу должно смотреть только необходимое (команда работает во всех ОС). - Не ставьте ПО «на пробу» на боевой сервер и удаляйте неиспользуемые пакеты.
SELinux на AlmaLinux/Rocky/CentOS — не отключайте. Он добавляет слой защиты. Оставьте режим
enforcing(проверка —getenforce). В Ubuntu/Debian аналогичную роль играет AppArmor, включённый по умолчанию.
8. Бэкапы — часть безопасности
Даже идеально защищённый сервер стоит иметь возможность восстановить. Резервные копии — это защита от шифровальщиков, ошибок и сбоев.
- Снапшоты сервера в панели serverplus — быстрый откат.
- Выгрузка данных в объектное S3-хранилище serverplus — копия отдельно от сервера.
- Правило 3-2-1: три копии, на двух носителях, одна — вне сервера.
Проверяйте восстановление. Бэкап, из которого ни разу не восстанавливались, — это ещё не бэкап. Периодически пробуйте развернуть копию.
Короткий чек-лист
- Система обновлена, включены автообновления безопасности.
- Есть отдельный пользователь-администратор (
sudoилиwheel), root по SSH отключён. - Вход по SSH-ключу, пароль по SSH отключён.
- Firewall включён (
ufwилиfirewalld), открыты только нужные порты. - fail2ban работает.
- SELinux/AppArmor в рабочем режиме; настроены снапшоты и бэкапы в S3.
Частые вопросы
Обязательно ли отключать вход по паролю?
Настоятельно рекомендуется. Пароль можно подобрать, ключ — практически нет. Если пароль нужен как запасной вариант, сделайте его длинным и уникальным и обязательно поставьте fail2ban.
Команды не совпадают с моей ОС.
В статье два набора: apt/ufw — для Ubuntu/Debian, dnf/firewalld — для AlmaLinux/Rocky/CentOS. Узнать свою систему: cat /etc/os-release.
Стоит ли менять стандартный SSH-порт?
Это не «защита» сама по себе, но снижает поток автоматических атак и мусор в логах. На RHEL с SELinux не забудьте разрешить новый порт (см. раздел про SSH). Полезно в связке с ключами и fail2ban, а не вместо них.
Я случайно закрыл себе доступ по SSH. Что делать?
Воспользуйтесь веб-консолью (VNC) в панели serverplus — она даёт доступ к серверу в обход SSH. Через неё можно вернуть настройки sshd_config или правила firewall.
Как понять, что сервер пытались взломать?
Смотрите логи входа и статус fail2ban. Журнал входа: /var/log/auth.log в Ubuntu/Debian и /var/log/secure в AlmaLinux/Rocky/CentOS (либо sudo journalctl -u ssh / sshd). Много неудачных попыток — норма для интернета; при ключах и firewall они безрезультатны.