Базовая защита, это то, с чего должна начинаться каждая установка сервера на 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
Всем спасибо, что читаете и комментируете.