Привет!

За годы работы и самообучения Linux'у у меня сформировалась шпаргалка с разными командами. Наконец-то дошли руки — и с помощью ИИ всё это упорядочено, обновлено и отформатировано. Полученный материал представляю вашему вниманию для всех, кто ещё не освоил 100% автоматизацию процесса, но постоянно покупает виртуальные сервера для своих нужд.

Что мы сделаем?

  • Подключимся по SSH.

  • Изменим hostname.

  • Обновим систему и установим ПО.

  • Настроим timezone.

  • Изменим порт SSH (опционально).

  • Настроим firewall (UFW).

  • Создадим sudo-пользователя.

  • Настроим SSH-ключи.

  • Отключим root-логин и заблокируем root.

  • Включим автоматические обновления.

  • Установим Fail2Ban.

  • (Опционально) Добавим nightly reboot и speedtest.


1. Подключение по SSH

VPS обычно доступны под root по SSH.
Из Windows (PowerShell), Linux и macOS команда одна и та же:
Putty не предлагать!

ssh root@YOUR_IP

2. Изменение hostname

Есть хостеры, которые даже не предлагают установить свой hostname, а вместо этого генерируют нечитаемую ерунду. Мне так не нравится, поэтому первым делом меняем hostname.

Установите новый hostname:

hostnamectl set-hostname new-hostname

Замените new-hostname на желаемое (например, my-perfect-vps-01).

Обновите /etc/hosts:

nano /etc/hosts

Измените строки, где есть старое имя сервера:

127.0.1.1 new-hostname

Чтобы настройки применились, нужно перезайти на хост или выполнить reboot. Пока просто проверьте: hostnamectl.

3. Обновление системы и установка утилит

Это святое! Всегда в первую очередь выполняем:

apt update && apt upgrade -y

Теперь устанавливаем всё, что может понадобиться. Простая команда (удалите лишнее и укажите нужное):

apt install curl wget git vim htop tmux unzip zip jq tree net-tools rsync lsof iotop iftop nethogs sysstat dstat glances btop ncdu duf nginx apache2 haproxy caddy certbot postgresql postgresql-contrib redis-server build-essential python3-pip python3-venv nodejs npm neofetch screenfetch ranger mc iptables-persistent wireguard openvpn nfs-common cifs-utils mosh docker.io

Или вот команда с выбором, чтобы не ставить лишнее:

packages_to_install=""; for pkg in curl wget git vim htop tmux unzip zip jq tree net-tools rsync lsof iotop iftop nethogs sysstat dstat glances btop ncdu duf nginx apache2 haproxy docker.io caddy certbot postgresql postgresql-contrib redis-server build-essential python3-pip python3-venv nodejs npm neofetch screenfetch ranger mc iptables-persistent wireguard openvpn nfs-common cifs-utils mosh; do read -p "Install $pkg? [y/n, default=n]: " yn; yn=${yn:-n}; case $yn in [Yy]*) packages_to_install="$packages_to_install $pkg" ;; esac; done; [ -n "$packages_to_install" ] && apt install -y $packages_to_install

Тут много программ — один раз составьте свой список фаворитов, потом просто от ситуации будете выбирать только из нужных программ.

Здесь есть docker.io, но в своих проектах я чаще использую самые свежие версии, поэтому обычно устанавливаю Docker официальным скриптом:

curl -fsSL https://get.docker.com | sh

Чтобы работать с Docker без sudo, добавьте пользователя в группу (делается после создания пользователя):

sudo usermod -aG docker $USER

После этого перезайдите по SSH.

4. Настройка timezone

timedatectl set-timezone Europe/Moscow

Замените на свою (список: timedatectl list-timezones).
Проверьте:

timedatectl

5. Изменение порта SSH (опционально, для hardening)

Поменяйте на порт >1024, чтобы снизить сканирование и попытки подбора пароля.

nano /etc/ssh/sshd_config

Найдите #Port 22, раскомментируйте и измените: Port 2222 (или свой).
Перезапустите:

systemctl restart ssh

Предупреждение: Откройте новое соединение на новом порту перед закрытием старого: ssh -p 2222 root@YOUR_IP.

6. Настройка firewall (UFW)

Установите (если не установлено):

apt install -y ufw

Разрешите порты:

ufw allow OpenSSH               # Или ufw allow 2222/tcp для кастомного порта
ufw allow 80/tcp                # HTTP, если нужно
ufw allow 443/tcp               # HTTPS, если нужно
ufw default deny incoming
ufw default allow outgoing
ufw enable

Проверьте:

ufw status verbose

7. Создание sudo-пользователя

adduser yourusername
usermod -aG sudo yourusername

Проверьте (переключитесь):

su - yourusername
sudo whoami   # Должен вывести 'root'

8. Настройка SSH-ключей

На клиенте (Windows/Linux/macOS):

# Рекомендуемый вариант в 2025 году
ssh-keygen -t ed25519 -C "your_email@example.com"

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

cat ~/.ssh/id_ed25519.pub

На сервере (под новым пользователем):

mkdir -p ~/.ssh
nano ~/.ssh/authorized_keys   # Вставьте ключ
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

В /etc/ssh/sshd_config убедитесь, что есть:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

Перезапустите:

sudo systemctl restart ssh

Критически важно: Откройте новое окно и убедитесь, что можете зайти по ключу под новым пользователем (с новым портом, если меняли). Только после этого переходите дальше!

9. Отключение root-логина и пароля

Предупреждение: Хостер потеряет root-доступ. Если хостер предоставляет прямой доступ к root (VNC-консоль и т.п.), он перестанет работать. Только rebuild при проблемах.

В /etc/ssh/sshd_config:

sudo nano /etc/ssh/sshd_config

Установите:

PermitRootLogin no
PasswordAuthentication no

Перезапустите:

systemctl restart ssh

Заблокируйте root:

sudo passwd -l root   # Блокировка пароля
sudo passwd -d root # Или вовсе удаляем пароль, теперь под root никто не пройдёт

Проверьте подключение по ключу ещё раз.


10. Автоматические обновления

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades   # Выберите Yes

Настройте /etc/apt/apt.conf.d/50unattended-upgrades (раскомментируйте нужное):

Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}";
    "${distro_id}:${distro_codename}-security";
    "${distro_id}:${distro_codename}-updates";  // Опционально
};

Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";

Можно добавить уведомления на почту:

Unattended-Upgrade::Mail "your@email.com";

В /etc/apt/apt.conf.d/20auto-upgrades:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "7";

11. Настройка Fail2Ban

sudo apt install -y fail2ban

Создайте /etc/fail2ban/jail.local:

sudo nano /etc/fail2ban/jail.local

Содержимое:

[DEFAULT]
banaction = ufw
bantime = 3600
findtime = 600
maxretry = 5
backend = systemd
ignoreip = 127.0.0.1/8 YOUR_IP   # Добавьте свой домашний IP

[sshd]
enabled = true
port = ssh                      # Или ваш кастомный порт
filter = sshd
logpath = /var/log/auth.log
maxretry = 3

Перезапустите:

systemctl restart fail2ban

Проверьте: sudo fail2ban-client status sshd или sudo ufw status.

12. Ночная перезагрузка (опционально)

Обычно сервера прекрасно работают без этого, но если какое-то ПО сбивается, можно добавить reboot в 3:00:

sudo crontab -e

Добавьте строку:

0 3 * * * /sbin/reboot

Проверьте: crontab -l.
Для теста: sudo /sbin/reboot.

13. Speedtest (для теста сети)

Знаю, что многим Speedtest не нравится, потому что он попсовый, но как по мне идеальный способ быстро оценить канал хостера. Всего 2 команды! А то бывает, что пишут гигабит, а там от силы 300 мбит\с.

apt install speedtest-cli

Запуск:

speedtest                  # Базовый тест
speedtest --servers        # Список серверов
speedtest --server-id=1111 # По ID

Заключение

С помощью простых шагов мы получили базовый минимум солидного сервера, закрыли основные проблемы с безопасностью, настроили вход только по ключу и включили автообновления.

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