
VPS, подключенный к Интернету, будет просканирован и подвергнется атаке в течение нескольких минут. Самый быстрый способ снизить риск — усилить защиту доступа по SSH, включить брандмауэр с политикой «по умолчанию — запрет» и заблокировать попытки взлома методом перебора. В этом руководстве представлена проверенная базовая настройка для Ubuntu/Debian (с примечаниями для систем на базе RHEL).
Безопасность также зависит от стабильности и контроля: начните с чистого, надежного VPS под Linux, а затем выполните эти шаги сразу после развертывания.
Начните с установки обновлений безопасности.
Debian/Ubuntu:
sudo apt update && sudo apt -y upgrade
На базе RHEL (AlmaLinux/Rocky/CentOS):
sudo dnf -y update || sudo yum -y update
Работа под root — рискованно. Создайте обычного пользователя с правами sudo и используйте его для повседневного администрирования.
sudo adduser admin
sudo usermod -aG sudo admin
sudo useradd -m -s /bin/bash admin
sudo passwd admin
sudo usermod -aG wheel admin
Необязательно (рекомендуется): ограничьте вход по SSH специальной группой (например: sshusers).
sudo groupadd sshusers || true
sudo usermod -aG sshusers admin

Важно: на сервер копируется только открытый ключ (.pub) копируется на сервер. Закрытый ключ остается на вашем локальном компьютере, и его ни в коем случае нельзя передавать другим пользователям.
ssh-keygen -t ed25519 -a 64
Нажмите Enter, чтобы принять местоположение по умолчанию (~/.ssh/id_ed25519) и, если возможно, установите парольную фразу.
Рекомендуемый метод (ssh-copy-id):
ssh-copy-id -i ~/.ssh/id_ed25519.pub admin@SERVER_IP
Ручной способ (если ssh-copy-id недоступен):
sudo -u admin mkdir -p /home/admin/.ssh
sudo -u admin chmod 700 /home/admin/.ssh
sudo -u admin nano /home/admin/.ssh/authorized_keys
sudo -u admin chmod 600 /home/admin/.ssh/authorized_keys

Проверьте вход с помощью ключа сейчас (до изменения настроек SSH):
ssh admin@SERVER_IP
Отредактируйте конфигурацию SSH-демона. Файл обычно находится в /etc/ssh/sshd_config.
sudo nano /etc/ssh/sshd_config
Укажите (или убедитесь, что) эти директивы присутствуют. Настройте порт, если вы используете пользовательский.
# Optional: change SSH port (remember to allow it in firewall first)
# Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
# Disable interactive auth methods if not needed
KbdInteractiveAuthentication no
ChallengeResponseAuthentication no
# Optional: restrict who can SSH (recommended)
AllowGroups sshusers
# Reasonable brute-force limits (helps even without Fail2Ban)
MaxAuthTries 3
LoginGraceTime 30
Проверьте синтаксис конфигурации (безопасная проверка):
sudo sshd -t
Перезапустите/перезагрузите службу SSH:
Ubuntu/Debian:
sudo systemctl reload ssh
На базе RHEL:
sudo systemctl reload sshd

Важно: убедитесь, что вы можете войти с помощью ключа, прежде чем выходить из текущей сессии. В противном случае вы можете заблокировать себе доступ.
UFW — самый простой брандмауэр для Ubuntu/Debian. Его цель: заблокировать весь входящий трафик и разрешить только то, что необходимо вашим сервисам.
Установка и настройка UFW (Ubuntu/Debian):
sudo apt update && sudo apt install -y ufw
# Defaults
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Allow SSH (important: adjust if you changed the port)
sudo ufw allow OpenSSH
# Common web ports (optional)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Enable and check status
sudo ufw enable
sudo ufw status verbose

Если вы используете пользовательский порт SSH (например, 2222), добавьте его явно, прежде чем что-либо включать или отключать:
sudo ufw allow 2222/tcp
Примечание для систем на базе RHEL: UFW там не является стандартным. Вместо него большинство использует firewalld (firewall-cmd) вместо него.
Fail2Ban отслеживает журналы и блокирует IP-адреса, демонстрирующие признаки вредоносной активности (например, повторяющиеся неудачные попытки входа). Это снижает количество ложных срабатываний при переборе паролей и предотвращает многие базовые атаки.
Установите и включите Fail2Ban:
sudo apt install -y fail2ban || sudo dnf install -y fail2ban
sudo systemctl enable --now fail2ban

Создайте или отредактируйте:
sudo nano /etc/fail2ban/jail.local
Минимальная рекомендуемая конфигурация:
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
# If you use UFW, this integrates cleanly on Ubuntu/Debian
banaction = ufw
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
Перезапустите Fail2Ban:
sudo systemctl restart fail2ban

Совет: позже вы также сможете защитить конечные точки аутентификации Nginx и агрессивных ботов с помощью дополнительных jail, но для начала займитесь SSH.
Проверка статуса Fail2Ban и активных блокировок:
sudo fail2ban-client status
sudo fail2ban-client status sshd
Просмотр журналов:
sudo tail -n 200 /var/log/fail2ban.log

Как проверить блокировку (безопасный способ): с другого компьютера сделайте 5–6 неверных попыток входа по SSH. Затем проверьте снова fail2ban-client status sshd — ваш IP должен появиться в списке заблокированных IP-адресов.
Снять запрет с конкретного IP (при необходимости):
sudo fail2ban-client set sshd unbanip 203.0.113.50
sshd, блокировки подтверждены, журналы отслеживаются.Разверните «чистый» сервер, ограничьте доступ по SSH только ключами, разрешите в брандмауэре только то, что вам нужно, и позвольте Fail2Ban справляться с шумом от брутфорс-атак. Начните с надежного VPS под Linux и примените эти базовые меры безопасности сразу после развертывания.