Всем привет. Меня зовут Дмитрий Филиппов, я явлюсь разработчиков 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 verbosesystemctl 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 && rebootapt update && apt upgrade -y && apt autoclean -y && apt clean -y && apt autoremove -y && rebootВ этой статье мы рассмотрели самую базу. если есть что добавить - пишите в комментариях!