Настройка сервера Linux для безопасной работы

Если сервер Debian/Ubuntu, CentOS и на другом дистрибутиве Linux доступен через Интернет, сразу после его запуска важно выполнить необходимый минимум настроек для безопасности системы.

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

Настроить firewall

Правильно настроенный фаерволл - основа безопасности. Включить его нужно как можно быстрее после запуска сервера, особенно если сервер доступен по публичному IP-адресу. Ведь есть множество ботов, которые сканируют публичные подсети и могут очень быстро проэксплуатировать найденную на вашей свежеустановленной ОС уязвимость.

Настроить firewall можно в стандартном для Debian и очень гибком nftables, однако он может показаться сложным для новичка. Его можно заменить на использование более "древнего", но распространенного iptables. Как это сделать, написано в официальной документации. На CentOS/RHEL удобным и распространенным решением является firewalld. Самый легкий для непосвященного пользователя вариант для любого дистрибутива - ufw, где создание правил упрощено до строк из нескольких слов. Выбор остается за вами. Он зависит от личных предпочтений, дистрибутива ОС и специфики задачи. Здесь мы не будем подробно останавливаться на самой процедуре настройки правил фаерволла для каждой из перечисленных выше реализаций. По детальной настройке мы опубликуем отдельные статьи. А пока в процессе самостоятельной настройки учтите этите рекомендации:

  • По умолчанию любой явно не описанный в правилах фаерволла входящий трафик на публичный WAN-интерфейс сервера должен быть запрещен. Желательно запретить таким образом и forward

  • Для подключения к терминалу сервера не только через локальную консоль вам потребуется разрешить входящее подключение к SSH (по умолчанию port 22/tcp). Очень нежелательно разрешать его для любых внешних адресов. Стоит разрешить только подключения с доверенных статических IP-адресов, которые находятся в вашем распоряжении. Если у вас нет возможности закрыть доступ через SSH с любого внешего IP, настоятельно рекомендуем использовать средство блокировки перебора паролей. Например, установить fail2ban - он прямо "из коробки" начнет блокировать на время IP-адреса, с которых за определенный промежуток времени поступило много невалидных попыток подключения подряд.

  • По такой же логике, как c SSH выше, разрешите входящие подключения на нужные порты других доступных через Интернет сервисов на вашей машине. Где возможно, разрешайте только установленный перечень доверенных подсетей или отдельных адресов. Если сервис должен быть доступен всем, убедитесь, что он настроен безопасно - блокирует невалидные подключения, своевременно обновляется, находится на мониторинге.

  • Если вам потребуется разрешить переадресацию трафика через машину (например, для настройки VPN), разрешайте forward только для доверенных адресов (как правило, виртуальных подсетей внутри самого сервера).

Добавить рядового пользователя и не использовать root

Создайте нового пользователя, при необходимости сделав его администратором путем добавления в группу sudo. Не отключайте запрос пароля для команд sudo от имени этого пользователя. Подключайтесь по SSH через этого пользователя и выполняйте все возможные операции через sudo. Чем меньше действий выполняется под пользователем root, тем меньше вероятности случайно повредить систему или скомпрометировать административый доступ к машине.

Перейти с паролей на SSH-ключи

Надежно хранящийся ssh-ключ с хорошим паролем на этот ключ - значительно более безопасный способ подключения к вашему серверу по SSH. После добавления публичного SSH-ключа на сервер и проверки корректности его работы отключите доступ по паролю хотя бы для пользователя root, а лучше для всех, в файле конфигурации sshd

Еще более безопасным вариантом будет добавить ключ на сервер не для пользователя root, а для рядового пользователя, подключаясь по ssh к нему, а уже под ним переходя в пользователя root локально на сервере.

Использовать SELinux

Хотя многие его отключают, чтобы не "мешал жить", SELinux значительно повышает безопасность системы. Это система принудительного управления доступом, что означает, что каждый процесс имеет метку. Каждый файл, каталог и системный объект так же имеют метки. Правила политики управляют доступом между промаркированными процессами и объектами. Ядро обеспечивает соблюдение этих правил.

Настроить резервное копирование

Для этого можно использовать резервное копирование у вашего облачного провайдера, коробочное решение Рубиком или настроить полные/файловые регулярные бекапы изнутри самого сервера. Главное, чтобы резервные копии оставались невредимыми в случае возможной атаки на исходный сервер. И чтобы их создание не зависело от того, не забыли ли вы сделать это вручную.

Регулярно обновлять ОС и другое ПО

Подпишитесь на новые релизы ключевого ПО и операционных систем, которыми пользуетесь, вовремя устанавливайте важные обновления, особенно обновления безопасности.

Last updated