Как защитить свой сервер? Основы кибербезопасности
Безопасность сервера — это основа качественной работы любого бизнеса, стартапа или простого веб-сайта. В 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.
sudo netstat -tuln | grep 50321
Ничего не вывелось? — Значит порт не занят. Можем проверить порт 22 и увидеть, что он действительно занят и используется.

Перейдите в конфиг SSH-сервера. Используем текстовый редактор nano
nano /etc/ssh/sshd_config
Уберите "#" в строке port и вместо 22 укажите желаемый. В нашем случае — 50321. Выглядеть это должно так.

Переключите раскладку на английский язык и нажмите CTRL+X , далее Y, затем Enter для сохранения файла.
Перезапустите сервис SSH.
sudo systemctl restart ssh
После перезапуска не торопитесь закрывать текущее окно сервера. Временно оставьте его открытым. Если что-то пойдет не так, то можно будет откатить изменения.
Попробуйте в новом окне подключиться к серверу, используя указанный порт.
Резервное копирование данных
На этих трех пунктах можно было бы завершить базовые настройки безопасности. Регулярные обновления, SSH-ключи и нестандартный порт SSH в совокупности дают огромный эффект. Соблюдение этих пунктов снизит возможность взлома на 90-95% по сравнению со стандартными настройками. Если вы неопытный пользователь и не размещаете на сервере сверхконфиденциальные данные, то этого будет более чем достаточно.
Тем не менее, никогда нельзя забывать про копии данных. Это отличное правило, которое поможет вам не только при работе с серверами, но и в собственных проектах. Ни один хостинг-провайдер не может гарантировать 100% сохранности ваших данных. Бывают самые разные случаи: от банального сбоя дисков, до больших инцидентов в дата-центре. Несмотря на то, что такие случаи являются редкостью, не стоит испытывать судьбу. Потратьте некоторое время на создание копии важных данных и более не беспокойтесь о возможных потерях.
Разберемся на практике. Для ОС Ubuntu, Debian, CentOS можно использовать встроенную утилиту tar.
tar -cvzf /путь/к/backup.tar.gz /путь/к/папке
Например, заархивируем папку share, которая находится в корневом каталоге /root
Проверяем, что мы действительно в /root — cd /root
Используем команду для архивации через tar
tar -cvzf backup.tar.gz share
После завершения архивации используйте команду ls
для проверки, что файл действительно создался.

Далее существует масса вариантов действий с данным архивом. Вы можете выгрузить его на свой компьютер через sFTP или на облачное хранилище. Создания ручной копии раз в 2 недели будет вполне достаточно (тем не менее, это зависит от типа вашего проекта).
Можно сделать автоматическое создание архива через Cron и последующую выгрузку на внешнее хранилище — даже с интервалом в 24 часа. Но это уже для особо крупных проектов.
Linux (для продвинутых)
Настройка брандмауэра
Воспользуемся утилитой Iptables (встроена в Ubuntu, Debian, CentOS). Проверить актуальные правила можно так:
sudo iptables -L -v -n
Для избежания любых проблем с потерей доступа к серверу, прежде всего, следует явно разрешить порт SSH. В зависимости от того, какой порт для SSH вы используете, укажите его в параметре --dport
В нашем случае будем использовать порт 50321
sudo iptables -A INPUT -p tcp --dport 50321 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
Далее предоставляем список часто используемых команд в Iptables. Рекомендуем вам в индивидуальном порядке рассматривать использование тех или иных конфигураций файрволла.
Запретить весь трафик от конкретного адреса. Где в аргументе -s
указывается исходящий адрес.
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
Запретить входящий трафик по определённому порту. Где --dport
— это блокируемый порт.
sudo iptables -A INPUT -p tcp --dport 8080 -j DROP
Для сохранения созданных правил используйте команду
sudo /sbin/iptables-save
Процесс настройки Iptables подробно описан в отдельной статье. Рекомендуем к ознакомлению.
Fail2Ban — блокировка брутфорсеров
Это эффективный инструмент для повышения безопасности серверов, которые отслеживает логи системных служб и автоматически блокирует IP-адреса, совершающие многократные неудачные попытки входа на сервер. Такой метод блокировки защищает сервер от взлома посредством перебора паролей и в целом разгружает логи от ненужных данных.
Установка
sudo apt install fail2ban -y
Убеждаемся, что служба Fail2Ban действительно запущена и проверяем статус.
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
sudo systemctl status fail2ban

Рекомендуется не изменять напрямую файлы конфигурации /etc/fail2ban/fail2ban.conf
и /etc/fail2ban/jail.conf
, так как они могут быть перезаписаны при обновлениях. Вместо этого создайте их копии с расширением .local
для внесения изменений:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Откройте файл в текстовом редакторе.
nano /etc/fail2ban/jail.local
Основные настройки:
[DEFAULT]
# Игнорируемые IP-адреса (например, ваш IP).
ignoreip = 127.0.0.1/8 ::1
# Время блокировки IP-адреса.
bantime = 10m
# IP-адрес блокируется, если он выполняет "maxretry" попыток в течение "findtime".
findtime = 10m
# Максимальное количество попыток до блокировки.
maxretry = 5
Вы можете установить свои значения. Например, вот такие (как на скриншоте) для более строгих блокировок. Обратите внимание, что при таких настройках адреса нарушителей будут блокироваться навсегда. Это эффективный метод борьбы с ботами, но его следует применять с осторожностью, чтобы избежать блокировки доверенных пользователей.

После внесения изменений перезапустите Fail2Ban.
sudo systemctl restart fail2ban
Проверка журнала отладки:
sudo tail -f /var/log/fail2ban.log
2FA Google — двойная аутентификация
Использование двухфакторной аутентификации значительно повышает безопасность на серверах. После установки при входе на сервер сначала будет запрашиваться OTP-код (обновляется каждые 30 секунд), а после пароль от самого сервера. Обратите внимание, что для авторизации на сервере будет необходимо каждый раз доставать телефон.
Установим модуль PAM для Google Authenticator
sudo apt install libpam-google-authenticator
Выполните команду google-authenticator
от имени пользователя, для которого настраивается 2FA:
google-authenticator
Вам будет задан следующий вопрос
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
для предотвращения повторного использования одного и того же токена.
Enable rate-limiting (y/n): Введите
y
для ограничения частоты попыток аутентификации, чтобы предотвратить атаки перебором.
Откройте файл конфигурации PAM для SSH:
sudo nano /etc/pam.d/sshd
Добавьте следующую строку в начало файла. Это указывает системе использовать модуль pam_google_authenticator
для аутентификации.
auth required pam_google_authenticator.so

Сохраните и закройте файл. Далее откройте файл конфигурации SSH:
sudo nano /etc/ssh/sshd_config
Установите значение yes
для параметра ChallengeResponseAuthentication
. Эти настройки включают использование PAM и требуют как публичного ключа, так и одноразового пароля для аутентификации.

Сохраняем файл и закрываем. После внесения изменений перезапустите службу SSH для применения новых настроек:
sudo systemctl restart ssh
Попробуйте подключиться к серверу. Сначала будет запрошен код аутентификатора. Введите его.

Затем пароль от вашего сервера. Подключение выполнено успешно!
Антивирус ClamAV
Несмотря на то, что операционные системы на базе Linux, считаются более защищенными, чем Windows, использование антивируса может быть полезным. Это особенно важно, когда вы часто обмениваетесь файлами или используете сервер в корпоративной среде. Мы рассмотрим бесплатный антивирус ClamAV с открытым исходным кодом. Он умеет сканировать систему и выявлять вирусы, трояны, шпионские программы и другие виды вредоносного ПО.
Установка
sudo apt install clamav -y
После установки рекомендуем обновить базу данных вирусов. Для этого сначала остановите программу, а затем выполните команду обновления.
sudo systemctl stop clamav-freshclam
sudo freshclam
Убедимся, что служба запущена.
sudo systemctl start clamav-freshclam
Ручное сканирование
clamscan -r /путь/к/папке
Сканирование всех файлов системы
sudo clamscan -r -i /
Last updated
Was this helpful?