Успей заказать VPS-сервер со скидкой 15%
Акция завершится через
00Дней
:
00Часов
:
00Минут
:
00Секунд

Защита сервера: полное руководство по безопасности Linux

Безопасность сервера - это основа качественной работы любого бизнеса, стартапа или простого веб-сайта. В 99% случаев нарушения на клиентских серверах происходят по причине взлома, а сам взлом - следствие недостаточной безопасности сервера.

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

Каждая инструкция максимально упрощена. Даже если вы подключаетесь к серверу впервые, не переживайте - вы во всем разберетесь.

Linux: базовые настройки

По умолчанию команда sudo может не выполняться в ОС Debian. Может потребоваться установка пакета командой apt install sudo либо просто удаление sudo из используемых команд.

Прежде чем начать, убедитесь, что в системе есть текстовый редактор nano.

Ubuntu / Debian

CentOS

Регулярные обновления системы

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

Ubuntu / Debian

CentOS

Использование SSH-ключей

Благодаря SSH-ключам подбор пароля становится попросту нереалистичным. Только представьте - количество возможных комбинаций ключа достигает 2 в степени 2048.

Подробно процесс использования SSH-ключей и отключения доступа к серверу по паролю описан в отдельной статье - рекомендуем ознакомиться.

Изменение порта SSH

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

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

Простое решение - заменить порт 22 на нестандартный, любой удобный вам. Например, 50321. Сначала проверьте, что выбранный порт не занят другим приложением. Для этого воспользуемся утилитой netstat из пакета net-tools.

Ubuntu / Debian

CentOS

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

Если команда ничего не вывела, порт свободен. Для сравнения проверим порт 22 и убедимся, что он действительно занят и используется.

Вывод команды netstat для порта 22
Порт 22 занят и активно используется службой SSH.

Перейдите в конфигурацию SSH-сервера с помощью редактора nano.

Уберите символ # в строке Port и вместо 22 укажите желаемое значение. В нашем случае - 50321. Результат должен выглядеть так.

Параметр Port в файле sshd_config
Параметр Port в файле sshd_config со значением 50321.

Переключите раскладку на английский язык и нажмите CTRL+X, затем Y и Enter для сохранения файла. После этого перезапустите службу SSH.

Ubuntu / Debian

CentOS

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

Резервное копирование данных

На этих трех пунктах можно было бы завершить базовую настройку безопасности. Регулярные обновления, SSH-ключи и нестандартный порт SSH в совокупности дают огромный эффект и снижают вероятность взлома на 90-95% по сравнению со стандартными настройками. Для неопытного пользователя, который не хранит на сервере сверхконфиденциальные данные, этого более чем достаточно.

Тем не менее никогда нельзя забывать про резервные копии. Это отличное правило, которое пригодится не только при работе с серверами, но и в собственных проектах. Ни один хостинг-провайдер не может гарантировать 100% сохранность данных. Случаи бывают разные - от банального сбоя дисков до крупных инцидентов в дата-центре. Такие ситуации редки, но испытывать судьбу не стоит.

Разберемся на практике. Для Ubuntu, Debian и CentOS подойдет встроенная утилита tar.

  • /путь/к/backup.tar.gz - путь и название архива.
  • /путь/к/папке - путь к папке, которая будет заархивирована. Можно указать конкретный файл или символ * для добавления в архив всего содержимого текущего каталога.

Например, заархивируем папку share из корневого каталога /root. Сначала убедимся, что находимся в нужном каталоге.

Затем выполним архивацию через tar.

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

Список файлов с архивом backup.tar.gz
Файл backup.tar.gz успешно создан в каталоге.

Дальше с архивом можно поступать по-разному. Вы можете скачать его на свой компьютер по sFTP или выгрузить в облачное хранилище. Ручной копии раз в две недели обычно достаточно, хотя все зависит от типа проекта. Для крупных проектов архивацию и выгрузку на внешнее хранилище можно автоматизировать через Cron, даже с интервалом в 24 часа.

Linux: продвинутая защита

Настройка брандмауэра

Воспользуемся утилитой iptables - она встроена в Ubuntu, Debian и CentOS. Посмотреть текущие правила можно так.

Чтобы избежать потери доступа к серверу, в первую очередь явно разрешите порт SSH. Укажите свой порт в параметре --dport. В нашем примере это порт 50321.

Ниже приведены часто используемые команды iptables. Конфигурацию файрвола рекомендуем подбирать индивидуально под свои задачи.

Запретить весь трафик с конкретного адреса. В параметре -s указывается исходный адрес.

Запретить входящий трафик на определенном порту. В параметре --dport указывается блокируемый порт.

Чтобы сохранить созданные правила, используйте команду ниже.

Ubuntu / Debian

CentOS

Процесс настройки iptables подробно описан в отдельной статье - рекомендуем к ознакомлению.

Fail2Ban - блокировка брутфорсеров

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

Установка

Ubuntu / Debian

CentOS

↙ Для копирования нажмите на строку

Запустим службу, добавим ее в автозагрузку и проверим статус.

↙ Для копирования нажмите на строку
Статус службы Fail2Ban в терминале
Служба Fail2Ban активна и работает.

Не рекомендуется напрямую изменять файлы /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf - при обновлениях они могут быть перезаписаны. Вместо этого создайте копии с расширением .local и вносите изменения в них.

Откройте файл в текстовом редакторе.

Основные настройки выглядят так.

Вы можете задать собственные значения, например более строгие, как на скриншоте ниже.

Строгие настройки в файле jail.local
Пример строгих настроек jail.local с постоянной блокировкой.

При значении bantime = -1 адреса нарушителей блокируются навсегда. Это эффективный метод борьбы с ботами, но применять его следует осторожно, чтобы случайно не заблокировать доверенных пользователей.

После внесения изменений перезапустите Fail2Ban.

Проверить журнал работы можно так.

Двухфакторная аутентификация через Google Authenticator

Двухфакторная аутентификация значительно повышает безопасность сервера. После ее настройки при входе сначала запрашивается одноразовый OTP-код, который обновляется каждые 30 секунд, а затем пароль от сервера. Учитывайте, что для авторизации каждый раз потребуется телефон.

Установка модуля PAM

Ubuntu / Debian

CentOS

↙ Для копирования нажмите на строку

Выполните команду от имени пользователя, для которого настраивается 2FA.

Система задаст несколько вопросов. На вопрос Do you want authentication tokens to be time-based (y/n) введите y, чтобы использовать одноразовые пароли по времени (TOTP).

После этого появится большой QR-код, данные для ручного добавления и коды восстановления. Коды восстановления сохраните в надежном месте - они понадобятся, если вы потеряете доступ к генератору кодов.

QR-код команды google-authenticator
QR-код для добавления сервера в приложение-аутентификатор.

Установите приложение-аутентификатор Google на телефон: Android или iOS. Отсканируйте предложенный код, после чего аккаунт сервера добавится в приложение.

Одноразовый код в приложении Google Authenticator
Одноразовый код в приложении Google Authenticator.

Ответьте на оставшиеся вопросы.

  • Update the .google_authenticator file (y/n) - введите y, чтобы сохранить настройки.
  • Do you want to disallow multiple uses of the same authentication token (y/n) - рекомендуется y, чтобы исключить повторное использование одного и того же токена.
  • Увеличение временного окна - по умолчанию допускается рассинхрон времени до 30 секунд (3 токена: предыдущий, текущий и следующий). При проблемах с точностью синхронизации окно можно расширить до 17 токенов и допуска в 4 минуты. Введите y, если сталкиваетесь с рассинхронизацией времени.
  • Enable rate-limiting (y/n) - введите y, чтобы ограничить частоту попыток аутентификации и защититься от перебора.

Откройте файл конфигурации PAM для SSH.

Добавьте в начало файла следующую строку. Она указывает системе использовать модуль pam_google_authenticator для аутентификации.

Файл sshd с подключенным модулем pam_google_authenticator
Строка pam_google_authenticator.so добавлена в начало файла sshd.

Сохраните и закройте файл, затем откройте конфигурацию SSH.

Установите значение yes для параметра ChallengeResponseAuthentication. Эта настройка включает использование PAM и требует одноразовый пароль в дополнение к основному способу входа.

Параметр ChallengeResponseAuthentication в sshd_config
Параметр ChallengeResponseAuthentication со значением yes.

Сохраните файл и перезапустите службу SSH, чтобы применить настройки.

Ubuntu / Debian

CentOS

Попробуйте подключиться к серверу. Сначала система запросит код аутентификатора - введите его.

Запрос кода аутентификации при подключении к серверу
При подключении сервер запрашивает код аутентификации.

Затем введите пароль от сервера. Подключение выполнено успешно.

Антивирус ClamAV

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

Установка

Ubuntu / Debian

CentOS

↙ Для копирования нажмите на строку

После установки обновите базу данных вирусов. Сначала остановите службу обновления, затем запустите обновление вручную.

↙ Для копирования нажмите на строку

Убедитесь, что служба запущена.

Ручное сканирование

Просканировать конкретную папку можно так.

Для сканирования всех файлов системы используйте команду ниже.