Перейти к основному содержимому

Защита VPS: чек-лист на 20 минут

Это руководство переведено с английского. Некоторые страницы, на которые ведут ссылки, доступны только на английском.

Конкретные шаги, останавливающие подавляющее большинство оппортунистических атак.

Идеально защитить сервер невозможно. Но можно за двадцать минут сделать его непривлекательной целью, и этого достаточно, чтобы отсечь практически все автоматические атаки.

1. SSH только по ключам

Подробно описано в статье SSH-ключи и доступ. Это самый ценный отдельный шаг. Подбор паролей — самый распространённый способ взлома в открытом интернете, и этот шаг его устраняет.

text
PasswordAuthentication no
PermitRootLogin prohibit-password

2. Файрвол с запретом по умолчанию

Разрешайте только то, что вы действительно предоставляете. В Debian/Ubuntu:

bash
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp          # SSH — see the warning below
ufw allow 80,443/tcp      # web
ufw enable
ufw status verbose

В семействе RHEL используйте firewalld:

bash
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

Предупреждение: включайте файрвол при открытой SSH-сессии и убедитесь, что SSH разрешён, прежде чем отключаться. Если вы меняете порт SSH, сначала разрешите новый порт. Подробности, включая наш приватный mesh-интерфейс, который всегда должен быть разрешён, — в статье Основы файрвола.

3. Автоматические обновления безопасности

bash
apt install -y unattended-upgrades
dpkg-reconfigure -plow unattended-upgrades    # choose yes
# verify:
systemctl status unattended-upgrades --no-pager

В семействе RHEL ту же работу выполняет dnf-automatic. Автоматические патчи безопасности закрывают окно между публикацией уязвимости и её эксплуатацией — на практике это нередко считаные часы.

4. Fail2ban

Блокирует IP после повторных неудачных входов, превращая бесконечный подбор в тупик. См. Основы Fail2ban.

bash
apt install -y fail2ban
systemctl enable --now fail2ban

5. Отключите то, чем не пользуетесь

Каждая прослушиваемая служба — потенциальная точка входа.

bash
ss -tulpn        # what is listening, and who owns it
systemctl --type=service --state=running   # what is running

Остановите и отключите всё, что вы не заказывали. Минимальный сервер — безопасный сервер.

6. Запускайте службы от непривилегированных пользователей

Базы данных, веб-приложения и воркеры никогда не должны работать от root. Большинство пакетов автоматически создают собственного служебного пользователя — используйте его. Если вы пишете собственный unit-файл, явно задайте User= и Group=.

7. Защищайте секреты

  • Никогда не коммитьте секреты в git. Используйте файлы окружения с chmod 600.

  • Никогда не делайте файл конфигурации доступным всем для чтения, если в нём есть пароль или ключ.

  • Предпочитайте учётные данные для каждой службы вместо одной общей административной.

8. Оставьте путь обратно

  • Проверьте, что консоль восстановления в /panel/vps работает, прежде чем она понадобится.

  • Делайте снимок перед рискованными изменениями — см. Изменение размера, снимки и переустановка.

  • Храните хотя бы один SSH-ключ не только на повседневном ноутбуке.

9. Мониторьте

Сервер, на который вы никогда не смотрите, невозможно защитить. Добавьте проверку мониторинга и время от времени читайте логи — как это делать, показывает статья Чтение логов.

Дополнительно: обнаружение вторжений

Для более ценных хостов CrowdSec (коллективная блокировка, лицензия MIT) и Wazuh (обнаружение вторжений на хосте) добавляют реальную глубину. Оба описаны в наших руководствах по хостингу приложений.

Читайте также