Арендованный сервер — это как дом без охраны. Безопасность начинается с малого: от замены стандартного порта до строгой настройки прав доступа. Даже один открытый путь в систему может стать уязвимостью.
Описанные методы защиты VPS от атак и сбоев не требуют глубоких знаний, но дают прочную основу. При грамотной настройке они работают как броня: не мешают функционалу, но защищают надёжно.
Пароль — не единственная преграда
Обычный пароль легко подобрать. SSH-ключ — это связка из двух файлов: открытого и закрытого. Вход будет возможен только с компьютера, где есть закрытый ключ.
Откройте терминал и введите:
ssh-keygen -t rsa -b 4096
Нажмите Enter, чтобы сохранить в папке ~/.ssh/.
Введите фразу-пароль (для дополнительной защиты).
Передайте ключ.
Способ 1 — автоматически:
ssh-copy-id user@IP_сервера
Замените user и IP_сервера на имя пользователя и IP-адрес вашего сервера.
Способ 2 — вручную:
- откройте документ ~/.ssh/id_rsa.pub;
- сделайте копию содержания;
- авторизуйтесь по паролю.
Выполните:
mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys
Вставьте ключ и сохраните файл.
Запретите подключение по паролю к серверу.
Изменим файл sshd_config:
sudo nano /etc/ssh/sshd_config
Необходим строчка:
PasswordAuthentication yes
Замените на:
PasswordAuthentication no
Если строки нет — добавьте её вручную.
Перезапустите SSH:
sudo systemctl restart ssh
Закрытый ключ id_rsa не передавайте, не храните в облаке, не отправляйте по почте.
Несколько устройств — несколько ключей: сгенерируйте на каждом и скопируйте открытые части в authorized_keys на сервере.
Защитить подключение — скрыть дверь
22-й порт сканируют тысячи роботов в сутки. Чтобы закрыть сервер от автоматических атак, его нужно сменить.
Открываем настройки:
sudo nano /etc/ssh/sshd_config
В нём находится строка #Port 22. Удаляется символ # и вместо 22 указывается, например, 2282:
Port 2282
Сохраняем правки, выходим из редактора и загружаем SSH повторно:
sudo systemctl restart sshd
Подключаясь, указывайте новый порт:
ssh -p 2282 user@IP
Теперь лимитируем количество ошибочных подключений. Там же, в etc/ssh/sshd_config добавляются строки:
MaxAuthTries 3
MaxSessions 2
Первая команда запрещает больше трёх попыток ввода пароля подряд, вторая ограничивает количество одновременных подключений. Ещё раз сохраняем и запускаем SSH.
Для усиления контроля рекомендуется включить двухфакторную аутентификацию. Устанавливается Google Authenticator:
sudo apt install libpam-google-authenticator
Затем запускается настройка:
google-authenticator
Появится QR-код — его нужно отсканировать в мобильном приложении Google Authenticator или аналогичном. С этого момента оно будет показывать одноразовые коды. Их придётся вводить при каждом входе.
Чтобы сервер их принимал, в директории /etc/pam.d/sshd добавляется:
auth required pam_google_authenticator.so
А в /etc/ssh/sshd_config нужно включить:
ChallengeResponseAuthentication yes
Перезапустите SSH:
sudo systemctl restart sshd
IP-фильтрация
Разрешим вход только с известных адресов.
Ufw в Ubuntu контролирует доступ. Включаем его:
sudo ufw enable
Затем устанавливается разрешение. Как пример:
sudo ufw allow from 203.0.113.45 to any port 2282 proto tcp
Здесь 203.0.113.45 — это внешний IP-адрес подключения, а 2282 — порт SSH (если он был изменён ранее). Всё остальное блокируется.
Проверка:
sudo ufw status
Меняется IP? Разрешите подсеть, а не один адрес:
sudo ufw allow from 203.0.113.0/24 to any port 2282 proto tcp
Дополнительно установите Fail2Ban — он блокирует IP, с которых слишком часто пытаются войти с ошибкой.
Команда для установки:
sudo apt install fail2ban
Создаём собственный конфигурационный файл:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Редактируем раздел [sshd]:
[sshd]
enabled = true
port = 2282
maxretry = 3
bantime = 3600
Здесь:
- maxretry — лимит ошибочных попыток,
- bantime — длительность блокирования IP-адреса в секундах.
Запускаем службу:
sudo systemctl restart fail2ban
Обновления — не мелочь, а защита
Большинство взломов происходит потому, что на сервере остаются старые, давно известные уязвимости. Чтобы этого не произошло, систему нужно регулярно обновлять.
Самый простой способ — вручную проверять и устанавливать обновления. Для этого подключитесь к серверу по SSH и наберите:
sudo apt update
sudo apt upgrade
Первая строка обновляет доступные пакеты списком, вторая — устанавливает сами обновления. Повторяйте это хотя бы раз в неделю.
Можно автоматизировать процесс. Для этого установите специальную утилиту:
sudo apt install unattended-upgrades
Затем включите автоматические обновления:
sudo dpkg-reconfigure --priority=low unattended-upgrades
Откроется меню, в котором нужно подтвердить активацию автоматических обновлений. После этого система будет регулярно проверять наличие новых пакетов и устанавливать их без вашего участия.
Минимум лишнего — максимум безопасности
На сервере должен работать только тот софт, который действительно нужен. Каждый лишний пакет — это потенциальная брешь.
То же касается и служб: ненужных почтовых серверов или FTP. Всё, что открыто и работает — видно в интернете.
Права доступа: не все равны
Работа под пользователем root — это как ездить без тормозов. Одна ошибка в команде и можно удалить систему, открыть доступ злоумышленнику или сломать важные настройки. Безопаснее обычный пользователь с ограниченными правами, а к root-доступу прибегать только при необходимости.
Подключитесь к серверу как root и создайте нового пользователя, например adminuser:
adduser adminuser
Укажите пароль и, при необходимости, заполните дополнительные поля (можно нажимать Enter).
Добавьте нового пользователя в группу sudo, чтобы выполнять административные действия при необходимости:
usermod -aG sudo adminuser
Теперь можно подключаться под adminuser и с использованием sudo перед командами, требующими прав администратора. К примеру:
sudo apt update
Проверьте, кто сейчас имеет права на файл:
ls -l /etc/ssh/sshd_config
Вы увидите что-то вроде:
-rw-r--r-- 1 root root 2682 Jul 20 10:15 /etc/ssh/sshd_config
Можно выполнить ручную настройку:
chmod 600 /путь/к/файлу
— подключение только под root.
Или открыть доступ только владельцу и группе:
chmod 640 /путь/к/файлу
Измените владельца (по необходимости):
chown root:root /путь/к/файлу
Брандмауэр ― первый рубеж
Пропускает только разрешённые подключения. В Linux брандмауэр настраивается через UFW (Uncomplicated Firewall). Это удобный способ.
Установим UFW. На Ubuntu и Debian:
sudo apt install ufw
На CentOS / RHEL (если не установлен firewalld, а UFW доступен):
sudo yum install ufw
sudo systemctl enable ufw
sudo systemctl start ufw
Обязательно откройте порт 22 (SSH) в установках брандмауэра:
sudo ufw allow ssh
или так:
sudo ufw allow 22/tcp
Разрешите соединения по HTTP и HTTPS.
Для обычного сайта:
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
Запретите всё остальное.
Теперь можно включить брандмауэр. Он заблокирует всё, что не разрешено явно:
sudo ufw enable
Проверим правильность работы:
sudo ufw status verbose
Вы увидите список разрешённых подключений, например:
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
Удалить разрешение при необходимости можно так:
sudo ufw delete allow 80/tcp
Заблокировать конкретный IP:
sudo ufw deny from 123.123.123.123
Когда появятся новые сервисы — просто добавляйте порты через ufw allow.
Резервные копии спасают, если всё сломалось
Даже самый защищённый ресурс может выйти из строя. Резервные копии (бекапы) — это страховка, которая позволяет быстро восстановить работу. Их нужно делать регулярно и хранить отдельно — не на том же VPS.
Даже если сервер работает без сбоев, важно следить за его состоянием. Для этого существуют программы мониторинга: они показывают загрузку, активность, сетевой трафик и другие параметры. Если что-то идёт не так — приходит уведомление.
Читайте в блоге:
- Как перенести Ubuntu 24.04 на новый сервер без переустановки
- Настройка автоматического удаления старых логов с logrotate на Ubuntu 24.04
- Настройка аутентификации SSH по аппаратному токену на Ubuntu 24.04