04 декабря 2019

Безопасность прежде всего: как защитить Linux на сервере VPS

Пишу, перевожу и иллюстрирую IT-статьи. На proglib написал 140 материалов. Увлекаюсь Python, вебом и Data Science. Открыт к диалогу – ссылки на соцсети и мессенджеры: https://matyushkin.github.io/links/ Если понравился стиль изложения, упорядоченный список публикаций — https://github.com/matyushkin/lessons
В сжатой форме обсуждаем минимальные настройки безопасности для защиты виртуального выделенного сервера (VPS) на базе Linux.
Безопасность прежде всего: как защитить Linux на сервере VPS

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.

Знаете, как ещё повысить безопасность сервера VPS? Расскажите в комментариях ;)

МЕРОПРИЯТИЯ

Комментарии

ВАКАНСИИ

Добавить вакансию
PHP Developer
от 200000 RUB до 270000 RUB
Golang разработчик (middle)
от 230000 RUB до 300000 RUB
Продуктовый аналитик
Екатеринбург, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ