Всем привет. Меня зовут Дмитрий Филиппов, я явлюсь разработчиков AI-платформы VEGA chat. В статье хочу поделится личным опытом администрированием серверов, а именно с чего должна начинаться защита сервера послей установки.

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

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

Сразу после входа на сервер необходимо обновить систему и установить последние обновления безопасности. Это как давать своему серверу витамины после долгой зимы:

bash1 строк

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 на свой адрес электронной почты:

bash1 строк

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

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

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

2 строк

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

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

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

  • Рекомендуется: Введите надежный пароль. Вам нужно будет вводить его каждый раз при использовании ключа. Это как дополнительный замок на вашем сейфе.

  • Для простоты: Нажмите Enter дважды, чтобы оставить пароль пустым. Но помните, это как оставить ключи от машины в замке зажигания.

2 строк

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

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

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

  • id_ed25519 — приватный (секретный) ключ. Никому его не показывайте и не передавайте! Это ваш главный ключ от квартиры.

  • id_ed25519.pub — публичный ключ. Его содержимое нужно скопировать на сервер. Это как дать соседу дубликат вашего ключа, чтобы он мог зайти к вам в гости, когда вас нет дома.

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

bash1 строк

cat ~/.ssh/id_ed25519.pub | clip

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

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

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

bash1 строк

mkdir -p ~/.ssh

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

bash3 строк

cat >> ~/.ssh/authorized_keys << EOF
# Вставьте сюда содержимое вашего публичного ключа
EOF

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

bash4 строк

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

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

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

bash3 строк

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

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

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

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

bash1 строк

sudo nano /etc/ssh/sshd_config

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

5 строк

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

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

1 строк

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

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

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

bash1 строк

sudo systemctl restart sshd

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

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

bash2 строк

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

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

bash1 строк

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

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

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

Установка Fail2Ban

bash1 строк

apt install fail2ban && systemctl enable fail2ban --now

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

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

bash1 строк

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

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

35 строк

[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

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

bash1 строк

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

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

5 строк

[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

bash1 строк

apt install ufw

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

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

bash1 строк

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. Иначе вы можете случайно заблокировать себя, что будет очень неприятно. И учтите, что лимиты надо выставлять очень аккуратно, высокий риск зарезать доступ пользоваталем. Но рассказать обязан!

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

bash1 строк

nano /etc/ufw/before.rules

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

3 строк

# 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:

bash1 строк

ufw reload

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

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

systemctl status sshd
systemctl status fail2ban
fail2ban-client status
ufw status verbose
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
apt update && apt upgrade -y && apt autoclean -y && apt clean -y && apt autoremove -y && reboot

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