VPS эмулирует работу отдельного физического сервера. На одной машине запускается множество виртуальных выделенных серверов. Как их защитить, что проверить в первую очередь, на что обратить внимание в дальнейшем?
Пароль администратора
Помните, что безопасность VPS – это не только настройки сервера, но и здравый смысл его администратора. Проверьте, что пароль недоступен посторонним. Он не должен храниться в KeePass или аналогичных сервисах. Повысьте надёжность e-mail, через который сбрасывается пароль администраторского аккаунта. Включите двухфакторную авторизацию.
Аутентификация
Создайте отдельного пользователя и сложный пароль на sudo, после чего отключите root-аутентификацию.
Помните, что кроме пары логин-пароль и ключей, бывают и другие способы аутентификации. Для SSH деактивируйте метод аутентификации по паролю. Если не нужны прочие методы, вы можете оставить лишь publickey. Используйте вторую версию SSH-протокола.
Баны
После нескольких неуспешных попыток соединения по SSH выдавайте бан с помощью Fail2Ban. Число попыток и длительность действия запрета определите из личных соображений. Например, часовая блокировка после трёх неудачных попыток SSH-подключения.
Iptables и простукивание портов
Используйте netstat, чтобы посмотреть все открытые сетевые порты и связанные с ними службы. Стандартным интерфейсом управления межсетевым экраном является утилита iptables. В ней нужно запрещать всё, что не разрешено: весь внешний INPUT и FORWARD-трафик. На INPUT откройте порт 22. При необходимости отпираем другие порты и FORWARD. Например, для сервисов, необходимых для коммуникации между соседними серверами (Memcached, Redis).
Обычной технологией повышения безопасности портов управления стало простукивание (port-knocking). Утилита на сервере (например, PuTTY) отслеживает входящие соединения, и если фиксируется заранее определённая цепочка подключений, утилита временно предоставляет доступ к закрытому порту и стоящему за ним сервису.
Обновления
Настройте обновление пакетов apt с уровнем security. Тогда автоматически будут устанавливаться обновления безопасности, но без изменения основной версии.
Время
Поставьте ntpd – программу, поддерживающую точное системное время. Часовой пояс сервера лучше выставить UTC (всемирное координированное время).
Сертификаты и подписи
Применяйте сертифицирование TLS всюду, где это возможно. Свободные валидные сертификаты доступны через Let's Encrypt. В конфигурации веб-серверов, почтовых и прочих служб, смотрящих наружу (в том числе VPN) запретите использование слабых шифров. Все ключи и параметры генерируйте не менее 2048 бит. Подписи для самозаверенных сертификатов кодируйте в SHA-256, но не SHA-1. Параметры dh.pem (при использовании OpenVPN) под каждый сервис лучше генерировать независимо. TLS-службы проверяйте через nmap. Минимальная оценка должна быть A, без предупреждений.
Менеджмент служб
Проверьте и отключите службы, которые не нужны для текущей работы. Приложения и сервисы не должны запускаться под правами администратора, если они действительно этого не требуют. Для каждого сервиса создавайте нового пользователя.
Загрузка файлов и ограничение программ
Если загрузка файлов осуществляется через интерфейс на скриптовом языке, в директориях, куда загружаются файлы, отключите выполнение скриптов и бинарных файлов как на уровне операционной системы, так и на уровне веб-сервера.
Для ограничения возможностей программ используйте AppArmor.
Автоматизация процесса
Ручная настройка вышеперечисленных сервисов дело довольно утомительное. Автоматизировать процесс поможет система управления конфигурациями, например, Ansible.
Комментарии