Как обезопасить сервер Linux в интернете

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

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

1. Обновления системы: Ваш первый шаг к защите

Каждая программа или операционная система со временем становится уязвимой, если не обновлять её. Злоумышленники постоянно ищут и используют уязвимости в старых версиях программного обеспечения. К счастью, разработчики выпускают патчи, закрывающие эти дыры.
Обновить систему легко: для дистрибутивов на основе Debian используйте команду:

sudo apt update && sudo apt upgrade -y

Если вы используете другой дистрибутив, команды могут отличаться, например, dnf update для RedHat совместимых ОС, например, AlmaLinux, Fedora или Rocky Linux. Кроме того, настройте автоматические обновления, чтобы ваш сервер всегда оставался актуальным.

2. Сильные пароли и отключение root-доступа (с ключами SSH)

Пароль типа "123456" или "password" — прямое приглашение для злоумышленников. Хакеры и всевозможные взломщики используют brute-force атаки (методом перебора) или атаки по словарю, которые позволяют относительно быстро вскрыть слабо защищенные аккаунта на сервере. Всегда используйте максимально сложные уникальные пароли длиной не менее 12 символов, используя комбинацию букв, цифр и специальных символов. 

Но лучше всего для удаленного доступа использовать SSH-ключи — это самый безопасный способ аутентификации на сервере. Вместо паролей вы создаёте пару ключей: приватный (хранится у вас) и публичный (размещается на сервере). Даже если злоумышленник узнает ваш логин, без приватного ключа он не сможет войти. Давайте разберём, как это настроить.

2.1. Сгенерируйте пару ключей на вашей локальной машине:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

  • -t rsa — тип ключа (RSA).
  • -b 4096 — длина ключа в битах (чем больше, тем сложнее взломать).
  • -C "your_email@example.com" — комментарий для идентификации ключа.

После выполнения команды вас попросят указать место для сохранения ключа (по умолчанию ~/.ssh/id_rsa) и, при необходимости, установить пароль для ключа.

2.2. Проверьте созданные файлы:

После успешного выполнения команды в каталоге ~/.ssh должны быть созданы два файла

  • Приватный ключ: ~/.ssh/id_rsa — остаётся у вас, не передавайте его никому!
  • Публичный ключ: ~/.ssh/id_rsa.pub — его копируем на сервер.

 

2.3. Установка публичного ключа на сервер

Далее необходимо разместить публичный ключ на удаленном сервере. Это можно сделать автоматизированно или вручную.

Способ 1: Использование ssh-copy-id

Этот способ автоматизирует процесс. Выполните команду на своей локальной машине:

ssh-copy-id username@server_ip

Замените username и server_ip на ваш логин и IP-адрес сервера.

Введите текущий пароль для подтверждения. После этого публичный ключ будет автоматически добавлен в файл ~/.ssh/authorized_keys на сервере.

Способ 2: Ручная установка ключа

Если ssh-copy-id недоступен, выполните следующие шаги.

Скопируйте содержимое публичного ключа на локальной машине:

cat ~/.ssh/id_rsa.pub

Подключитесь к серверу по SSH с паролем:

ssh username@server_ip

На сервере создайте папку для ключей (если её нет):

mkdir -p ~/.ssh
chmod 700 ~/.ssh

Создайте или дополните файл ~/.ssh/authorized_keys:

echo "ваш_публичный_ключ" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Выйдите с сервера и проверьте вход по ключу:

ssh username@server_ip

Вход должен быть выполнен без запроса пароля.

2.4. Ограничение root-доступа

Откройте файл настроек SSH-сервера:

sudo nano /etc/ssh/sshd_config

Для строгой безопасноти можно отключить удаленный вход под пользователем root, для этого  в файле /etc/ssh/sshd_config, добавляем строку:

PermitRootLogin no

Если вы хотите оставить возможность входа под пользователем root, но только с использованием SSH-ключа, найдите или создайте строки c такими параметрами:

PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes

  • PermitRootLogin prohibit-password — root может входить только по ключу.
  • PasswordAuthentication no — отключение входа по паролю для всех пользователей.
  • PubkeyAuthentication yes — включение аутентификации по ключам.

После внесения изменений в файл конфигурации следует перезапустить демон ssh.

sudo systemctl restart sshd

Теперь root-доступ возможен только с установленным ключом, что значительно повышает безопасность.

3. Настройка фаервола: Первый рубеж обороны

Фаервол помогает ограничить доступ к серверу только для нужных приложений. Например, оставьте открытым порт для SSH (по умолчанию 22) и ваш веб-сервер, если он есть. Для настройки фаервола используйте ufw (Uncomplicated Firewall):

sudo ufw allow ssh  
sudo ufw allow 80  
sudo ufw allow 443  
sudo ufw enable

Это базовая настройка, которую можно расширять. Блокирование лишнего трафика значительно снижает шансы атаки.

4. SSH: защита и альтернативные порты

SSH — это главный способ управления сервером, поэтому он должен быть защищён. Помимо отключения root-доступа, измените стандартный порт 22 на менее очевидный, например, 2222. Это можно сделать в файле /etc/ssh/sshd_config:

Port 2222

Для защиты от брутфорс-атак установите Fail2Ban. Он автоматически блокирует IP-адреса, с которых пытаются подобрать пароль. Установка проста:

sudo apt install fail2ban

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

5. Мониторинг и регулярные проверки

Даже настроив защиту, нужно регулярно проверять, что происходит на сервере. Используйте инструменты вроде htop для мониторинга ресурсов, netstat для проверки сетевых подключений или анализируйте логи через logwatch. Эти инструменты помогут выявить подозрительную активность, такую как неизвестные подключения или высокую загрузку процессора.
Не забывайте периодически проверять доступность серверных служб и актуальность ваших настроек безопасности.

Заключение: Безопасность как инвестиция

Настройка защиты Linux-сервера — это не только минимизация рисков, но и показатель вашей ответственности как владельца ресурсов в интернете. Чем лучше защищён сервер, тем меньше шансов, что вы столкнётесь с проблемами. Следуйте этим базовым шагам, и ваш сервер станет крепостью, готовой выдержать большинство угроз. Помните, что безопасность — это процесс, требующий регулярного внимания и обновления.

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