Как защитить свой сервер? Основы кибербезопасности
Безопасность сервера — это основа качественной работы любого бизнеса, стартапа или простого веб-сайта. В 99% случаев нарушения на наших клиентских серверах происходят по причине взлома. А взлом, в свою очередь, из-за недостаточной безопасности сервера.
В статье мы разберем наиболее эффективные способы защиты своего сервера. Начнем с минимальных необходимостей и закончим продвинутой защитой. В первую очередь статья предназначена для новичков, тем не менее любой системный администратор может использовать ее как отличную памятку.
Каждая инструкция максимально упрощена. Даже если вы подключаетесь к серверу впервые, не переживайте — вы разберетесь!
Linux (базовые настройки)
Обратите внимание, что по умолчанию команда sudo
может не выполняться на ОС Debian. Может потребоваться установка пакета sudo через команду apt install sudo
, либо просто удаление sudo из используемых команд.
Прежде чем начать, используйте команду sudo apt install nano
(Ubuntu / Debian) или yum install nano
(CentOS) для проверки, что утилита nano действительно есть в вашей системе.
Регулярные обновления системы
Это база, ключевая мера для обеспечения безопасности на любом сервере. В случае обнаружения уязвимости в системе, будьте первыми, кто обновится для устранения проблемы. Всего одна команда, которая достаточно сильно минимизирует риск взлома вашей системы.
sudo apt update && sudo apt upgrade -y
Использование SSH-ключей
Благодаря SSH-ключам процесс подбора пароля становится попросту нереалистичным. Представьте, существует 2**2048
комбинаций ключа.
Для подробного ознакомления с процессом использования SSH-ключей, а также отключения доступа к серверу по паролю, рекомендуем ознакомиться с нашей статьей по !!ссылке!!.
Изменение порта SSH
Порт 22, стандартный для SSH, давно стал мишенью для злоумышленников. Сканеры и боты непрерывно «простукивают» интернет в поисках серверов, открытых на этом порту. Их задача найти доступный сервер, а затем начать перебор паролей, используя огромную базу простых и популярных комбинаций.
Результат? Даже если ваш сервер защищен, его логи все равно будут переполнены огромным количеством сообщений о неуспешных подключениях, что может затруднять анализ реальных угроз. Смена порта позволяет значительно сократить этот «шум» и сделать ваш сервер менее заметным для такого типа атак.
Простым решением станет смена порта 22 на нестандартный, любой, какой вам нравится. Например 50321.
Для начала проверьте, что порт, который вы хотите использовать, не занят никаким другим приложением. Для этого воспользуемся утилитой netstat. Убедитесь, что необходимый пакет net-tools установлен.
sudo apt install net-tools
Проверяем порт 50321.
Обратите внимание, что порт 50321 выбран всего лишь в качестве примера. В случае необходимости вы можете использовать любой другой.
Ничего не вывелось? — Значит порт не занят. Можем проверить порт 22 и увидеть, что он действительно занят и используется.
Перейдите в конфиг SSH-сервера. Используем текстовый редактор nano
Уберите "#" в строке port и вместо 22 укажите желаемый. В нашем случае — 50321. Выглядеть это должно так.
Переключите раскладку на английский язык и нажмите CTRL+X , далее Y, затем Enter для сохранения файла.
Перезапустите сервис SSH.
sudo systemctl restart ssh
После перезапуска не торопитесь закрывать текущее окно сервера. Временно оставьте его открытым. Если что-то пойдет не так, то можно будет откатить изменения.
Попробуйте в новом окне подключиться к серверу, используя указанный порт.
Резервное копирование данных
На этих трех пунктах можно было бы завершить базовые настройки безопасности. Регулярные обновления, SSH-ключи и нестандартный порт SSH в совокупности дают огромный эффект. Соблюдение этих пунктов снизит возможность взлома на 90-95% по сравнению со стандартными настройками. Если вы неопытный пользователь и не размещаете на сервере сверхконфиденциальные данные, то этого будет более чем достаточно.
Тем не менее, никогда нельзя забывать про копии данных. Это отличное правило, которое поможет вам не только при работе с серверами, но и в собственных проектах. Ни один хостинг-провайдер не может гарантировать 100% сохранности ваших данных. Бывают самые разные случаи: от банального сбоя дисков, до больших инцидентов в дата-центре. Несмотря на то, что такие случаи являются редкостью, не стоит испытывать судьбу. Потратьте некоторое время на создание копии важных данных и более не беспокойтесь о возможных потерях.
Разберемся на практике. Для ОС Ubuntu, Debian, CentOS можно использовать встроенную утилиту tar.
/путь/к/backup.tar.gz — путь и название архива.
/путь/к/папке — путь к папке, которая будет заархивирована. Можно указать название конкретного файла или просто " * " , чтобы добавить в архив все папки и файлы из текущего каталога.
Например, заархивируем папку share, которая находится в корневом каталоге /root
Проверяем, что мы действительно в /root — cd /root
Используем команду для архивации через tar
После завершения архивации используйте команду ls
для проверки, что файл действительно создался.
Далее существует масса вариантов действий с данным архивом. Вы можете выгрузить его на свой компьютер через sFTP или на облачное хранилище. Создания ручной копии раз в 2 недели будет вполне достаточно (тем не менее, это зависит от типа вашего проекта).
Можно сделать автоматическое создание архива через Cron и последующую выгрузку на внешнее хранилище — даже с интервалом в 24 часа. Но это уже для особо крупных проектов.
Linux (для продвинутых)
Настройка брандмауэра
Воспользуемся утилитой Iptables (встроена в Ubuntu, Debian, CentOS). Проверить актуальные правила можно так:
Для избежания любых проблем с потерей доступа к серверу, прежде всего, следует явно разрешить порт SSH. В зависимости от того, какой порт для SSH вы используете, укажите его в параметре --dport
В нашем случае будем использовать порт 50321
Далее предоставляем список часто используемых команд в Iptables. Рекомендуем вам в индивидуальном порядке рассматривать использование тех или иных конфигураций файрволла.
Запретить весь трафик от конкретного адреса. Где в аргументе -s
указывается исходящий адрес.
Запретить входящий трафик по определённому порту. Где --dport
— это блокируемый порт.
Для сохранения созданных правил используйте команду
sudo /sbin/iptables-save
Процесс настройки Iptables подробно описан в отдельной статье. Рекомендуем к ознакомлению.
Fail2Ban — блокировка брутфорсеров
Это эффективный инструмент для повышения безопасности серверов, которые отслеживает логи системных служб и автоматически блокирует IP-адреса, совершающие многократные неудачные попытки входа на сервер. Такой метод блокировки защищает сервер от взлома посредством перебора паролей и в целом разгружает логи от ненужных данных.
Установка
sudo apt install fail2ban -y
Убеждаемся, что служба Fail2Ban действительно запущена и проверяем статус.
Рекомендуется не изменять напрямую файлы конфигурации /etc/fail2ban/fail2ban.conf
и /etc/fail2ban/jail.conf
, так как они могут быть перезаписаны при обновлениях. Вместо этого создайте их копии с расширением .local
для внесения изменений:
Откройте файл в текстовом редакторе.
Основные настройки:
Вы можете установить свои значения. Например, вот такие (как на скриншоте) для более строгих блокировок. Обратите внимание, что при таких настройках адреса нарушителей будут блокироваться навсегда. Это эффективный метод борьбы с ботами, но его следует применять с осторожностью, чтобы избежать блокировки доверенных пользователей.
После внесения изменений перезапустите Fail2Ban.
Проверка журнала отладки:
2FA Google — двойная аутентификация
Использование двухфакторной аутентификации значительно повышает безопасность на серверах. После установки при входе на сервер сначала будет запрашиваться OTP-код (обновляется каждые 30 секунд), а после пароль от самого сервера. Обратите внимание, что для авторизации на сервере будет необходимо каждый раз доставать телефон.
Установим модуль PAM для Google Authenticator
sudo apt install libpam-google-authenticator
Выполните команду google-authenticator
от имени пользователя, для которого настраивается 2FA:
Вам будет задан следующий вопрос
Do you want authentication tokens to be time-based (y/n): Введите
y
для использования одноразовых паролей (TOTP).
Далее высветится большой QR-код, данные для ручного добавления и коды восстановления. Последние следует сохранить в безопасном месте. Они понадобятся на случай, если вы потеряете доступ к генератору кодов.
Загрузите приложение аутентификатора Google. Android | IOS
Отсканируйте предоставленный код. После чего аккаунт добавится в ваше приложение.
Update the .google_authenticator file (y/n): Введите
y
для сохранения настроек.Do you want to disallow multiple uses of the same authentication token? (y/n): Рекомендуется ввести
y
для предотвращения повторного использования одного и того же токена.
По умолчанию новое значение одноразового токена генерируется мобильным приложением каждые 30 секунд. Для компенсации возможного рассинхрона времени между клиентом и сервером предусмотрено использование дополнительных токенов до и после текущего времени. Это позволяет допускать рассинхрон времени до 30 секунд между сервером аутентификации и клиентом.
Если вы сталкиваетесь с проблемами из-за низкой точности синхронизации времени, вы можете увеличить временное окно с его стандартного размера (3 разрешённых токена: предыдущий, текущий и следующий) до 17 разрешённых токенов (8 предыдущих, текущий и 8 следующих). Это обеспечит допуск рассинхрона времени до 4 минут между клиентом и сервером.
— Введите y
для увеличения временного окна, что может быть полезно при рассинхронизации времени.
Enable rate-limiting (y/n): Введите
y
для ограничения частоты попыток аутентификации, чтобы предотвратить атаки перебором.
Откройте файл конфигурации PAM для SSH:
Добавьте следующую строку в начало файла. Это указывает системе использовать модуль pam_google_authenticator
для аутентификации.
Сохраните и закройте файл. Далее откройте файл конфигурации SSH:
Установите значение yes
для параметра ChallengeResponseAuthentication
. Эти настройки включают использование PAM и требуют как публичного ключа, так и одноразового пароля для аутентификации.
Сохраняем файл и закрываем. После внесения изменений перезапустите службу SSH для применения новых настроек:
sudo systemctl restart ssh
Попробуйте подключиться к серверу. Сначала будет запрошен код аутентификатора. Введите его.
Затем пароль от вашего сервера. Подключение выполнено успешно!
Антивирус ClamAV
Несмотря на то, что операционные системы на базе Linux, считаются более защищенными, чем Windows, использование антивируса может быть полезным. Это особенно важно, когда вы часто обмениваетесь файлами или используете сервер в корпоративной среде. Мы рассмотрим бесплатный антивирус ClamAV с открытым исходным кодом. Он умеет сканировать систему и выявлять вирусы, трояны, шпионские программы и другие виды вредоносного ПО.
Установка
sudo apt install clamav -y
После установки рекомендуем обновить базу данных вирусов. Для этого сначала остановите программу, а затем выполните команду обновления.
Убедимся, что служба запущена.
Ручное сканирование
Сканирование всех файлов системы
Last updated