Guide 01 — Linux

Linux Deploy Guide

Свежий VPS на Debian или Ubuntu: вход по ключу, закрытый SSH, файрвол, BBR и нормальные лимиты на файлы. Порядок важен — сначала ключ, потом отключение паролей.

Published
Platform
Debian / Ubuntu
Level
Base
Read
8 min

Гайд рассчитан на чистый сервер, куда вы только что получили root-доступ по паролю. После шага 3 пароль для SSH работать не будет, поэтому ключ нужно скопировать заранее.

Копирование SSH-ключа и вход на сервер

Выполняется на локальном ПК в PowerShell. Публичный ключ дописывается в authorized_keys, права на каталог и файл выставляются сразу.

PowerShell
Get-Content ~\.ssh\id_ed25519.pub | ssh root@<IP_СЕРВЕРА> "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Обновление пакетов и базовые утилиты

Подключаемся к серверу:

Bash
ssh root@<IP_СЕРВЕРА>

Обновляем систему и ставим всё, что понадобится дальше:

Bash
apt update && apt upgrade -y
apt install -y curl wget git ufw htop net-tools fail2ban dnsutils ca-certificates

Защита SSH: только ключи, только root

Меняем порт и отключаем вход по паролю. Команды ниже рассчитаны на дефолтный sshd_config из Debian или Ubuntu.

Bash
# Смена порта на нестандартный (например, 2222)
sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config
sed -i 's/Port 22/Port 2222/' /etc/ssh/sshd_config

# Вход root разрешён строго по ключу, пароли отключены
sed -i 's/PermitRootLogin yes/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin prohibit-password/' /etc/ssh/sshd_config
sed -i 's/#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config

systemctl restart ssh || systemctl restart sshd
Важно

Не закрывая текущую сессию, откройте второе окно терминала и проверьте вход: ssh -p 2222 root@<IP_СЕРВЕРА>. Если пускает — можно закрывать старое окно.

Настройка файрвола (UFW)

Открываем только то, что нужно: SSH, HTTP и HTTPS.

Bash
ufw default deny incoming
ufw default allow outgoing

# Порт SSH (указывайте тот, который задали в шаге 3)
ufw allow 2222/tcp

# Порты для веб-сервера / Caddy / NaiveProxy
ufw allow 80/tcp
ufw allow 443/tcp

ufw --force enable
ufw status verbose

Включение BBR и тюнинг TCP-стека

Оптимизация сети под сетевые запросы парсера и быстрый прокси-трафик. Настройки кладутся отдельным файлом, чтобы не трогать /etc/sysctl.conf.

Bash
cat << 'EOF' > /etc/sysctl.d/99-custom-network.conf
# Включение алгоритма BBR
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr

# Лимиты соединений и сокетов
fs.file-max = 2097152
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
EOF

Применяем настройки:

Bash
sysctl --system

Проверяем, что BBR действительно включился:

Bash
sysctl net.ipv4.tcp_congestion_control
# Ожидаемый вывод:
# net.ipv4.tcp_congestion_control = bbr

Увеличение лимитов на открытые файлы

Чтобы воркеры парсера и веб-сервер не упирались в ошибку too many open files:

Bash
cat << 'EOF' > /etc/security/limits.d/99-nofile.conf
* soft nofile 65535
* hard nofile 65535
root soft nofile 65535
root hard nofile 65535
EOF
Проверка

Лимиты подхватываются новыми сессиями. Переподключитесь по SSH и выполните ulimit -n — должно вернуть 65535.