Шпаргалка по настройке VPS на Debian/Ubuntu (2025) — актуализация 2026
Шпаргалка по настройке VPS на Debian/Ubuntu (2025)
Архивное переиздание с актуализацией. Оригинал опубликован на Habr (≈2026), автор — неизвестен. оригинал доступен на Habr по состоянию на ноябрь 2026. Ниже — редакция ноября 2026: что работает сейчас, что изменилось и как правильно повторить рецепт сегодня. Полный текст оригинала — в конце, без купюр.
TL;DR — версия 2026
VLESS+REALITY (Xray) в 2026 — главный рекомендованный способ: маскировка под TLS к чужому крупному сайту, активное зондирование не проходит, домен и сертификат не нужны.
Оригинал попал в первую волну статей о VLESS+Reality — и с тех пор подход не просто выжил, а стал стандартом: фактическим стандартом антицензурного туннелирования в 2026 стал VLESS + REALITY (Xray-core): он маскируется под обычный HTTPS-трафик к крупному сайту и не требует собственного домена и сертификата; по данным РКН, за 2025 год в России заблокировано 258 VPN-сервисов, и почти все выжившие сервисы сидят именно на Xray. Что изменилось с публикации: пару-тройку версий Xray-ядра, новые клиенты, панели 3x-ui/Marzban с автонастройкой Reality, и — увы — статья о том, как это ставить, стала легальной мишенью (российские сайты и сами хабр-авторы начали массово удалять статьи о VPN (статьи отдают HTTP 451 «удалена по юридическим причинам») — именно поэтому появляются проекты-архивы вроде этого).
Статус оригинала
- URL: https://habr.com/ru/articles/977026/
- Статус на Habr: ЖИВА
- Картинки: 0/0 сохранено локально
Минимальный сервер 2026
Актуальный Xray-core (ветка 2x/25.x) — ставится официальным скриптом; ключевые поля:
"inbounds": [{
"listen": "0.0.0.0",
"port": 443,
"protocol": "vless",
"settings": {
"clients": [{ "id": "<uuid>", "flow": "xtls-rprx-vision" }],
"decryption": "none"
},
"streamSettings": {
"security": "reality",
"realitySettings": {
"dest": "www.microsoft.com:443",
"serverNames": ["www.microsoft.com"],
"shortId": "",
"privateKey": "<x25519>"
}
}
}]
Выбор dest: крупный зарубежный сайт с TLS 1.3 + H2, НЕ ваш CDN, не российский, не «за Cloudflare» (цикл). Проверка: openssl s_client -connect dest:443 с сервера должна отдавать нужный SNI.
Клиенты и панели 2026
- клиенты: v2rayN (Windows), NekoBox/NekoRay, Hiddify (кросс), v2rayNG (Android), Streisand/Shadowrocket (iOS — ставить быстро, Apple вычищает их из стора волнами);
- панели: 3x-ui (мульти-протокол, лимиты трафика, подписки) и Marzban — обе ставятся docker-compose и закрывают тему «у меня 5 друзей»;
- подписка: ссылка
vless://...превращается в QR/URL, Hiddify сам обновляет; - проверка блокировок вокруг вашего сервера:
blockcheckот ValdikSS.
Почему REALITY до сих пор непробиваем
REALITY «крадёт» рукопожатие у настоящего TLS-сайта: ваш сервер, не имея сертификата, отдаёт клиенту handshake реального target-сайта (dest), а внутри договаривается о ключах. Со стороны (DPI, активный probe) это обычный HTTPS к популярному ресурсу. Ответить probe-ом «не тем» сервер не может — нечем отличить. В 2025–2026 у операторов блокировок остаётся один приём: резать «подозрительные» IP целиком. Лечится CDN-фронтом или сменой IP.
Что изменилось с ≈2026 года
- uTLS-фingerprint клиента теперь критичен (chrome/firefox из коробки)
- flow xtls-rprx-vision — норма; старые flow без vision уязвимы к детекту
- XHTTP-транспорт добавился как альтернатива ws/gRPC за CDN
- 3x-ui заменил большинство «костыльных» bash-панелей из статей 2023 года
- iOS-клиенты требуют зарубежный Apple ID чаще, чем в 2024
- в тексте оригинала: классический OpenVPN легко детектится DPI (используется в корпсредах, но не для обхода блокировок)
- в тексте оригинала: у «ванильного» WireGuard статичный хендшейк — DPI его режет; обфусцированный вариант — AmneziaWG
Чек-лист 2026
- dest — живой крупный сайт с TLS1.3, доступный С ВАШЕГО сервера
- shortId непустой
- uTLS fingerprint клиента совпадает с типичным браузером
- сервер не «светится» сканерами (закрыть 80/8080-заглушки)
- fallback на реальный сайт, если probe придёт без правильного SNI
Вердикт
Оригинальная статья была верной — просто Xray с тех пор обновился, панели стали удобнее, а сама тема — юридически горячей. Конфиг выше — минимальная «сегодня-работает»-версия; вся методология оригинала (x25519-ключи, SNI-подбор, проверка blockcheck) неизменна.
ОРИГИНАЛ СТАТЬИ (без изменений)
Привет!
За годы работы и самообучения 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.
hostnamectl set-hostname new-hostname
Замените new-hostname на желаемое (например, my-perfect-vps-01).
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 при проблемах.
sudo nano /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
systemctl restart ssh
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
Заключение
С помощью простых шагов мы получили базовый минимум солидного сервера, закрыли основные проблемы с безопасностью, настроили вход только по ключу и включили автообновления.
Это точно не финальная версия шпаргалки — я постоянно её дорабатываю. Если у вас есть комментарии, замечания, предложения или возражения, с радостью приму их в свою практику и обновлю текст.