Базовая защита сервера на Linux

Базовая защита, это то, с чего должна начинаться каждая установка сервера на Linux. Без этого ваш сервер может превратится в тыкву, майнинг ферму а если вы еще и данные users потеряете — большие штрафы могут вас ждать. В этой статье мы обеспечим базовыый миниму защиты нашего сервера.

Подготовка системы

Сразу после входа на сервер необходимо обновить систему и установить последние обновления безопасности:

apt update && apt upgrade -y && apt autoclean -y && apt clean -y && apt autoremove -y && reboot

Пока сервер перезагружается, настроим SSH-ключи на локальной машине.

Генерация SSH-ключа в Windows

Шаг 1: Откройте терминал

Нажмите правой кнопкой мыши на меню «Пуск» и выберите «Терминал» или «Терминал (Администратор)».

Шаг 2: Создайте SSH-ключ

Введите следующую команду для создания современного и безопасного ключа типа Ed25519. Замените your_email@example.com на свой адрес электронной почты:

ssh-keygen -t ed25519 -C "your_email@example.com"

Шаг 3: Выберите расположение ключа

Нажмите Enter, чтобы принять путь по умолчанию (C:\Users\ВашеИмя\.ssh\id_ed25519):

Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\You/.ssh/id_ed25519):

Шаг 4: Установите пароль-фразу

Вам будет предложено ввести пароль для дополнительной защиты ключа:

  • Рекомендуется: Введите надежный пароль. Вам нужно будет вводить его каждый раз при использовании ключа.
  • Для простоты: Нажмите Enter дважды, чтобы оставить пароль пустым.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Где найти сгенерированные ключи?

Ключи находятся в скрытой папке .ssh в вашем домашнем каталоге: C:\Users\ВашеИмя\.ssh\

  • id_ed25519приватный (секретный) ключ. Никому его не показывайте и не передавайте!
  • id_ed25519.pubпубличный ключ. Его содержимое нужно скопировать на сервер.

Чтобы скопировать публичный ключ в буфер обмена, выполните:

cat ~/.ssh/id_ed25519.pub | clip

Настройка SSH-авторизации по ключу

Добавление публичного ключа на сервер

Подключитесь к серверу и создайте директорию для SSH-ключей:

mkdir -p ~/.ssh

Добавьте публичный ключ в файл авторизованных ключей:

cat >> ~/.ssh/authorized_keys << EOF

Вставьте ваш публичный ключ, нажмите Enter, затем введите EOF и снова нажмите Enter.

Альтернативный способ (одной командой):

mkdir -p ~/.ssh
cat << EOF >> ~/.ssh/authorized_keys
ssh-ed25519 ВАША_ПУБЛИЧНАЯ_ЧАСТЬ_КЛЮЧА user@local
EOF

Установка правильных прав доступа

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

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R $USER:$USER ~/.ssh

Усиление защиты SSH

Редактирование конфигурации SSH

Откройте файл конфигурации SSH:

sudo nano /etc/ssh/sshd_config

Найдите и измените следующие параметры (удалите символ # в начале строки, если он есть):

Port 2222 # тут ваш порт SSH
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
X11Forwarding no

Важно: Если вы работаете под пользователем root, не изменяйте параметр PermitRootLogin. Для обычных пользователей добавьте:

AllowUsers ваш_пользователь

Перезапуск SSH-сервиса

Примените изменения:

sudo systemctl restart sshd

Проверка конфигурации

Убедитесь, что вход по паролю действительно отключен:

ls /etc/ssh/sshd_config.d/
cat /etc/ssh/sshd_config.d/*.conf

Если в файле 50-cloud-init.conf стоит PasswordAuthentication yes, исправьте это:

nano /etc/ssh/sshd_config.d/50-cloud-init.conf

Замените PasswordAuthentication yes на PasswordAuthentication no.


Установка и настройка Fail2Ban

Установка Fail2Ban

apt install fail2ban && systemctl enable fail2ban --now

Создание пользовательской конфигурации

Создайте файл с пользовательскими настройками:

nano /etc/fail2ban/jail.d/custom.conf

Вставьте следующую конфигурацию:

[DEFAULT]
# Банить IP на 1 день. 5 днейэто очень долго, можно случайно заблокировать себя.
bantime = 1d

# Искать неудачные попытки в течение 10 минут. 2 дняслишком большое окно,
# бот может делать по 4 попытки каждые 47 часов и никогда не будет забанен.
findtime = 10m

# Банить после 5 неудачных попыток.
maxretry = 5

# Действие для бана (используем UFW, как вы и указали).
banaction = ufw

# Игнорировать локальные адреса.
ignoreip = 127.0.0.1/8 192.168.0.0/16

[sshd]
# Эта секция остается для защиты SSH.
enabled = true
port = 17753

# === ЗАЩИТЫ ВЕБ-САЙТА ===
[nginx-404-scans]
# Включаем эту "тюрьму".
enabled = true
port = http,https
# Указываем на наш новый кастомный фильтр (создадим его на шаге 2).
filter = nginx-404-scans
# Путь к логам Nginx. Убедитесь, что он правильный для вашей системы.
logpath = /var/log/nginx/access.log
# Баним после 3 попыток найти "вредный" файл за 1 минуту. Этого достаточно,
# чтобы отсечь 99% сканеров.
maxretry = 3
findtime = 1m

Создание фильтра для Nginx

Создайте новый фильтр:

sudo nano /etc/fail2ban/filter.d/nginx-404-scans.conf

Добавьте следующее содержимое:

[Definition]

failregex = ^<HOST> -.*"(GET|HEAD|POST|OPTIONS) .*(/(\.env|\.git|vendor/|node_modules/|phpmyadmin|pma|adminer\.php|wp-admin|wp-login\.php|wp-config\.php|xmlrpc\.php|wp-content/.*\.php|wp-includes/.*\.php|uploads/.*\.php|images?/.*\.php|media/.*\.php|modules?/.*file.*|filemanager.*|fm\.php|shell.*\.php|sh3ll.*\.php|test.*\.php|info\.php|phpinfo\.php|classwithtostring\.php|[A-Za-z0-9]{1,15}\.php|[a-z]{1,15}[0-9]{1,4}\.php|[0-9]{1,5}\.php)).*" (404|403|400)

ignoreregex =

Сохраните файл (Ctrl+X, затем Y и Enter).


Настройка файрвола UFW

Установка UFW

apt install ufw

Базовая настройка

Настройте правила файрвола:

ufw allow ssh && ufw default deny incoming && ufw default allow outgoing && ufw allow http && ufw allow https && ufw limit 2222/tcp # тут ваш порт SSH && ufw enable

Защита от DDoS (опционально)

Внимание: Применяйте только если не используете панели управления типа FastPanel.

Откройте файл:

nano /etc/ufw/before.rules

Добавьте перед строкой *filter:

# Anti DDoS rules
-A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
-A INPUT -p tcp --dport 443 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

Перезагрузите UFW:

ufw reload

Финальная проверка

Убедитесь, что все сервисы работают корректно:

systemctl status sshd
systemctl status fail2ban
fail2ban-client status
ufw status verbose

Завершающее обновление

Выполните финальное обновление системы:

apt update && apt upgrade -y && apt autoclean -y && apt clean -y && apt autoremove -y && reboot

Что натворили:

Что у нас в итое получилось:

✅ SSH-доступ только по ключу
✅ Изменен стандартный порт SSH
✅ Установлен Fail2Ban для защиты от брутфорса
✅ Настроен файрвол UFW
✅ Добавлена защита от сканирования веб-приложений
✅ Применены базовые меры против DDoS

Всем спасибо, что читаете и комментируете.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Политика обработки персональных данных