Как защитить новый Linux VPS за 10 минут: SSH-ключи, файрвол, Fail2ban, автообновления

14 мин чтения 3 просмотров 0
Содержание

Новый VPS с публичным IP начинает получать автоматические попытки входа уже через несколько минут после запуска. Этот чек-лист показывает, как защитить новый Linux VPS примерно за 10 минут: обновить пакеты, создать пользователя с sudo, перейти на вход по SSH-ключу, запретить вход root по паролю, оставить в файрволе только нужные порты, блокировать перебор паролей с помощью fail2ban и включить автоматические обновления безопасности. Команды приведены для Debian/Ubuntu и CentOS/Rocky Linux/AlmaLinux и подходят для любого облачного сервера JUSTG в Йоханнесбурге, Москве, Токио или Сеуле.

Шаг 1: Обновите все пакеты

Войдите как root (см. нашу инструкцию по подключению по SSH) и первым делом установите свежие исправления безопасности:

# Debian / Ubuntu
apt update && apt upgrade -y

# CentOS / Rocky / AlmaLinux
dnf upgrade -y

# reboot if a new kernel was installed
reboot

Шаг 2: Создайте нового пользователя с sudo

Постоянная работа под root делает опасной любую опечатку, а root - первое имя, которое пробуют злоумышленники. Создайте обычного пользователя (здесь deploy) с правами sudo. В Debian/Ubuntu группа администраторов называется sudo, в системах на базе RHEL - wheel.

# Debian / Ubuntu
adduser deploy
usermod -aG sudo deploy

# CentOS / Rocky / AlmaLinux
useradd -m deploy
passwd deploy
usermod -aG wheel deploy

Шаг 3: Настройте аутентификацию по SSH-ключу

SSH-ключи намного надёжнее паролей, их невозможно подобрать. Создайте пару ключей на своём компьютере, а не на сервере, и скопируйте открытый ключ новому пользователю. Защитите закрытый ключ парольной фразой.

# on your own computer (Windows PowerShell, macOS, Linux)
ssh-keygen -t ed25519 -C "my-laptop"

# macOS / Linux: copy the public key to the server
ssh-copy-id [email protected]

# Windows PowerShell (no ssh-copy-id)
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh [email protected] "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Откройте новый терминал и убедитесь, что вход по ключу и sudo работают:

ssh [email protected]
sudo whoami
Не продолжайте, пока вход по ключу для нового пользователя не заработает. Не закрывайте текущий сеанс root, пока не проверите все изменения ниже.

Шаг 4: Запретите вход root и аутентификацию SSH по паролю

Современные выпуски (Debian 12, Ubuntu 22.04+, Rocky/AlmaLinux 9) читают файлы из /etc/ssh/sshd_config.d/, и действует первое найденное значение. Поэтому назовите файл так, чтобы он шёл первым, например 01-hardening.conf, - это перекроет облачные образы, включающие пароли в 50-cloud-init.conf. В старых системах измените те же строки прямо в /etc/ssh/sshd_config.

sudo nano /etc/ssh/sshd_config.d/01-hardening.conf

PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes

Проверьте синтаксис и перезапустите SSH:

sudo sshd -t
# Debian / Ubuntu
sudo systemctl restart ssh
# CentOS / Rocky / AlmaLinux
sudo systemctl restart sshd

Снова проверьте из нового терминала: ssh [email protected] должен получать отказ, а ssh [email protected] - работать.

Шаг 5: Файрвол - разрешите только нужные порты

По умолчанию запретите все входящие подключения и откройте только SSH и реально используемые службы (80 и 443 для сайта). Обязательно разрешите SSH до включения файрвола. Если вы меняли порт SSH, разрешите именно его.

# Debian / Ubuntu (ufw)
sudo apt install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enable

# CentOS / Rocky / AlmaLinux (firewalld)
sudo dnf install firewalld
sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http --add-service=https
sudo firewall-cmd --permanent --remove-service=cockpit
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

И ufw, и firewalld применяют эти правила как к IPv4, так и к бесплатному IPv6-адресу вашего VPS JUSTG.

Шаг 6: Установите fail2ban для защиты от перебора

Даже при отключённых паролях fail2ban избавляет логи от мусора и блокирует сканеры. Он отслеживает неудачные попытки входа и временно банит IP-адрес источника. Бэкенд systemd читает журнал и работает в обоих семействах дистрибутивов.

# Debian / Ubuntu
sudo apt install fail2ban python3-systemd

# CentOS / Rocky / AlmaLinux
sudo dnf install epel-release
sudo dnf install fail2ban python3-systemd

sudo nano /etc/fail2ban/jail.local

[sshd]
enabled  = true
backend  = systemd
maxretry = 5
findtime = 10m
bantime  = 1h

sudo systemctl enable --now fail2ban
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd

Шаг 7: Включите автоматические обновления безопасности

Большинство взломов используют уязвимости, для которых уже есть исправление. Пусть сервер сам ставит обновления безопасности: unattended-upgrades в Debian/Ubuntu и dnf-automatic в CentOS/Rocky/AlmaLinux.

# Debian / Ubuntu
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
sudo unattended-upgrade --dry-run --debug

# CentOS / Rocky / AlmaLinux
sudo dnf install dnf-automatic
sudo nano /etc/dnf/automatic.conf
#   upgrade_type = security
#   apply_updates = yes
sudo systemctl enable --now dnf-automatic.timer
systemctl list-timers dnf-automatic.timer

Обновления ядра всё равно требуют перезагрузки. Планируйте короткие перезагрузки для обслуживания или проверяйте наличие /var/run/reboot-required в Debian/Ubuntu.

Частые вопросы

После отключения паролей я не могу войти. Как вернуть доступ?

Откройте VNC-консоль в личном кабинете JUSTG, войдите через неё и исправьте файл в /etc/ssh/sshd_config.d/ или правила файрвола. Консоль не зависит от SSH и файрвола.

Нужно ли менять порт SSH?

Перенос SSH с порта 22 уменьшает шум в логах, но сам по себе защитой не является. Если меняете порт, сначала обновите файрвол, а на Rocky/AlmaLinux с SELinux выполните semanage port -a -t ssh_port_t -p tcp 2222.

Подходит ли это для Windows VPS?

Принципы те же: держите Windows Update включённым, используйте надёжный пароль Administrator и ограничьте RDP в брандмауэре Защитника Windows только своими IP-адресами.

Если нужна помощь с защитой сервера, создайте тикет в технической поддержке JUSTG.

Помог ли вам данный ответ?