Краткое руководство по развертыванию чистого сервера под безопасное использование в киберпространстве. Никакого лишнего мусора, только необходимый софт и закрытые намертво двери.
Первым делом синхронизируем индексы и накатываем последние патчи безопасности:
sudo apt update && sudo apt upgrade -y
Ставим необходимый набор утилит администратора (nano, tmux, htop, sudo, git, wget, aria2). Сразу за ними ставим последнюю Mainline-версию Nginx напрямую из официального репозитория, чтобы избежать устаревших пакетов Ubuntu.
Импортируем официальный GPG-ключ Nginx:
curl https://nginx.org | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
Подключаем стабильный HTTPS-репозиторий (ветка Mainline):
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] https://nginx.org jammy nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
Задаем высокий приоритет для пакетов из официального репозитория:
cat << EOF | sudo tee /etc/apt/preferences.d/99nginx
Package: *
Pin: origin nginx.org
Pin-Priority: 900
EOF
Синхронизируем пакеты и устанавливаем всё одной командой:
sudo apt update && sudo apt install nano tmux htop sudo git wget aria2 nginx -y
Работать под root-аккаунтом небезопасно. Создаем нового пользователя (замените cyberpunk на свой никнейм) и даем ему доступ к вызову sudo:
sudo adduser cyberpunk
sudo usermod -aG sudo cyberpunk
Переносим публичный SSH-ключ с локального компьютера на сервер в хранилище нового пользователя. Выполните на локальном ПК:
ssh-copy-id -i ~/.ssh/id_rsa.pub cyberpunk@your_server_ip
Теперь возвращаемся на сервер, открываем конфигурацию SSH-демона:
sudo nano /etc/ssh/sshd_config
Внутри файла находим и выставляем следующие жесткие параметры:
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
PermitRootLogin prohibit-password
Применяем изменения: sudo systemctl restart ssh. Внимание: не закрывайте текущую сессию, пока не проверите вход по ключу в новом окне терминала!
Устанавливаем демон для защиты от ботов, перебирающих пароли и порты:
sudo apt install fail2ban -y
Создаем конфигурацию защиты SSH: sudo nano /etc/fail2ban/jail.local и добавляем базовые правила:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 1h
Запускаем и включаем автозагрузку: sudo systemctl enable fail2ban --now. Теперь сервер готов к работе.