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

20 мин чтенияОбновлено 22 мая 2026

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

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

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

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

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

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

Ubuntu / Debian

bash
sudo apt install nano

CentOS

bash
yum install nano

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

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

Ubuntu / Debian

bash
sudo apt update && sudo apt upgrade -y

CentOS

bash
sudo yum update -y

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

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

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

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

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

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

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

Ubuntu / Debian

bash
sudo apt install net-tools

CentOS

bash
sudo yum install net-tools

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

bash
sudo netstat -tuln | grep 50321

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

Вывод команды netstat для порта 22

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

bash
nano /etc/ssh/sshd_config

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

Параметр Port в файле sshd_config

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

Ubuntu / Debian

bash
sudo systemctl restart ssh

CentOS

bash
sudo systemctl restart sshd

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

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

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

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

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

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

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

bash
cd /root

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

bash
tar -cvzf backup.tar.gz share

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

Список файлов с архивом backup.tar.gz

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

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

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

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

bash
sudo iptables -L -v -n

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

bash
sudo iptables -A INPUT -p tcp --dport 50321 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

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

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

bash
sudo iptables -A INPUT -s 192.168.1.100 -j DROP

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

bash
sudo iptables -A INPUT -p tcp --dport 8080 -j DROP

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

Ubuntu / Debian

bash
sudo /sbin/iptables-save

CentOS

bash
sudo /sbin/service iptables save

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

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

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

Установка

Ubuntu / Debian

bash
sudo apt install fail2ban -y

CentOS

bash
sudo yum install epel-release sudo yum install fail2ban

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

bash
sudo systemctl start fail2ban sudo systemctl enable fail2ban sudo systemctl status fail2ban
Статус службы Fail2Ban в терминале

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

bash
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

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

bash
nano /etc/fail2ban/jail.local

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

ini
[DEFAULT] # Игнорируемые IP-адреса, например ваш IP. ignoreip = 127.0.0.1/8 ::1 # Время блокировки IP-адреса. bantime = 10m # IP блокируется, если выполняет maxretry попыток за период findtime. findtime = 10m # Максимальное количество попыток до блокировки. maxretry = 5

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

Строгие настройки в файле jail.local

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

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

bash
sudo systemctl restart fail2ban

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

bash
sudo tail -f /var/log/fail2ban.log

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

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

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

Ubuntu / Debian

bash
sudo apt install libpam-google-authenticator

CentOS

bash
sudo yum install epel-release sudo yum install google-authenticator

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

bash
google-authenticator

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

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

QR-код команды google-authenticator

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

Одноразовый код в приложении 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.

bash
sudo nano /etc/pam.d/sshd

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

bash
auth required pam_google_authenticator.so
Файл sshd с подключенным модулем pam_google_authenticator

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

bash
sudo nano /etc/ssh/sshd_config

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

Параметр ChallengeResponseAuthentication в sshd_config

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

Ubuntu / Debian

bash
sudo systemctl restart ssh

CentOS

bash
sudo systemctl restart sshd

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

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

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

#Антивирус ClamAV

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

Установка

Ubuntu / Debian

bash
sudo apt install clamav -y

CentOS

bash
sudo yum install epel-release sudo yum install clamav clamav-update

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

bash
sudo systemctl stop clamav-freshclam sudo freshclam

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

bash
sudo systemctl start clamav-freshclam

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

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

bash
clamscan -r /путь/к/папке

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

bash
sudo clamscan -r -i /

Не нашли ответ? Мы на связи 24/7.Написать в поддержку