Установка серверной части AmneziaWG на Ubuntu/Debian VPS

В прошлой статье мы разобрали, как AmneziaWG обманывает DPI с помощью шумовых пакетов, мимикрии под QUIC и шифрования заголовков. Теперь — практика. Будем поднимать сервер. Хорошая новость: вам не нужен мощный VPS. AmneziaWG работает на модуле ядра Linux, а значит, потребляет минимум ресурсов. Хватит самого дешёвого сервера за 2–4 $ в месяц с 1 vCPU и 512 МБ ОЗУ. Если планируете подключать много клиентов или гонять 4K-видео — берите 1 ГБ ОЗУ для комфорта. Что понадобится VPS с Ubuntu 24.04 LTS, Ubuntu 22.04 или Debian 12/13. Поддерживаются и другие версии, но на этих всё проверено. Доступ по SSH с правами root (или sudo). 2 ГБ свободного места на диске — минимум. Лучше 3+. 15–20 минут времени. 💡 Важно: В отличие от Marzban, для AmneziaWG не нужен домен, SSL-сертификат или reverse-proxy. Сервер работает на уровне ядра и общается с клиентами напрямую по UDP. Это одновременно и проще, и безопаснее — меньше поверхности для атаки. Шаг 1. Подготовка сервера ...

Шпаргалка IT

🛠️ Боевая шпаргалка сисадмина: Сеть, Docker, Caddy, VPN

Команды для реальной отладки серверов. Копируй и вставляй в терминал.

🌐 Диагностика сети и портов

Кто слушает порты и что с ними происходит:

ss -tulpn | grep :443       # Кто занял 443 порт (TCP/UDP)
lsof -i :8001               # Какой процесс держит порт
tcpdump -i eth0 port 443    # Сниффер пакетов (что реально летит)
dig vpn.wwsystem.work +short # Проверка DNS
curl -v -k https://domain/api # Показать весь HTTP-обмен (игнорируя SSL)

Проверка SSL-сертификата (часто причина ошибок 502/404):

openssl s_client -connect domain:443 -servername domain | head -n 20
echo | openssl s_client -servername domain -connect domain:443 2>/dev/null | openssl x509 -noout -dates

📜 Systemd, логи и процессы

journalctl -u ai-bot -f       # Живые логи конкретной службы (Ctrl+C для выхода)
journalctl -u caddy -n 50     # Последние 50 строк лога
systemctl status caddy        # Статус (красный/зеленый)
systemctl daemon-reload       # Перечитать конфиги (обязательно после правки .service)
systemctl stop/start/restart  # Управление

Найти виновника жора ресурсов:

top -o %CPU                # Процессы по CPU
htop                       # Удобный диспетчер задач
df -h                      # Занятость дисков
free -h                    # Оперативная память
ps aux | grep python       # Найти все процессы Python

🐳 Docker для профи

docker ps -a                  # Все контейнеры (включая упавшие)
docker logs -f --tail 100 marzban-marzban-1  # Логи Marzban
docker exec -it marzban-marzban-1 bash       # Залезть внутрь контейнера
docker inspect marzban-marzban-1 | grep -i ip # IP контейнера
docker system prune -af       # Полная чистка мусора (ОСТОРОЖНО!)
docker update --restart=unless-stopped CONTAINER # Автозапуск после ребута

🚀 Caddy и Reverse Proxy

caddy validate --config /etc/caddy/Caddyfile  # Проверка синтаксиса
caddy fmt --overwrite --config /etc/caddy/Caddyfile  # Автоформатирование (исправляет отступы)
caddy reload --config /etc/caddy/Caddyfile     # Перезагрузка
caddy adapt --config /etc/caddy/Caddyfile      # Показать итоговый JSON (увидеть всю логику)

Как понять, что Caddy настроен неправильно:

curl -I https://yourdomain.com   # Посмотреть HTTP заголовки
curl -X POST https://domain/api/chat -d '{"msg":"test"}' -k # Проверка API
# Ошибка 502 = Caddy достучался, но порт за бэкендом закрыт (запусти uvicorn/python)

🔐 VPN, Xray, Marzban (Ваш стек)

cat /opt/marzban/.env | grep -E "PORT|SSL"  # Смотреть переменные окружения
docker logs marzban-marzban-1 -f             # Живые логи Xray
cat /var/lib/marzban/xray_config.json        # Посмотреть порты и инбаунды
# Если Marzban упал и не хочет стартовать:
sudo docker update --restart=no marzban-marzban-1
sudo docker kill marzban-marzban-1
sudo systemctl start caddy
sudo docker start marzban-marzban-1

Быстрая проверка безопасности:

last -n 10                     # Кто заходил в систему
grep "Failed password" /var/log/auth.log | tail -n 5 # Попытки подбора SSH
sudo ufw status                 # Статус файрвола
sudo ufw allow 8443/tcp         # Открыть порт для VPN

📂 Файлы, поиск и работа с текстом

Найти файл, изменить конфиг, разобрать лог:

find / -name "*.conf" -mtime -7     # Файлы, изменённые за неделю
grep -r "password" /opt/            # Поиск строки во всех файлах папки
sed -i 's/old/new/g' config.conf    # Заменить в файле (осторожно!)
awk '{print $1, $4}' access.log     # Взять 1-й и 4-й столбцы из лога
sort file.txt | uniq -c | sort -nr  # Топ повторяющихся строк
tail -f /var/log/caddy/access.log   # Следить за логом в реальном времени
wc -l file.txt                       # Посчитать строки

Архивы:

tar -czvf backup.tar.gz /opt/marzban/   # Заархивировать
tar -xzvf backup.tar.gz                  # Распаковать
zip -r backup.zip folder/                # В ZIP
unzip backup.zip                         # Из ZIP

👤 Пользователи, права и sudo

whoami                       # Под кем я сейчас
id                           # Группы текущего пользователя
adduser newuser              # Создать пользователя
usermod -aG sudo newuser     # Дать права sudo
passwd username              # Сменить пароль
chown -R caddy:caddy /var/lib/caddy   # Сменить владельца папки
chmod 600 /opt/marzban/.env           # Только владелец может читать
chmod 755 /opt/vpn-service/static     # Чтение для всех, запись только владельцу
sudo -u caddy ls /var/log/caddy       # Выполнить команду от имени пользователя

🔑 SSH, ключи и туннели

ssh-keygen -t ed25519 -C "my@email.com"    # Новый ключ
ssh-copy-id user@server                     # Скопировать ключ на сервер
ssh -i ~/.ssh/mykey user@server             # Подключиться по ключу
scp file.txt user@server:/path/             # Скопировать файл на сервер
scp user@server:/path/file.txt .            # Скачать файл с сервера
ssh -L 8080:localhost:80 user@server        # Локальный туннель (порт-форвардинг)
ssh -D 1080 user@server                     # SOCKS5-прокси через SSH

Управление SSH-сервисом:

nano /etc/ssh/sshd_config          # Конфиг SSH
sshd -t                            # Проверить синтаксис перед перезапуском
systemctl restart sshd             # Перезапустить (осторожно, не потеряй доступ!)
ssh -v user@server                 # Отладка подключения

📦 Пакеты, apt и обновления

apt update                          # Обновить список пакетов
apt upgrade -y                      # Установить обновления
apt full-upgrade -y                 # С учётом удаления старых зависимостей
apt install nginx                   # Установить пакет
apt remove nginx                    # Удалить пакет
apt autoremove                      # Удалить ненужные зависимости
apt list --installed | grep caddy   # Проверить, установлен ли пакет
dpkg -l | grep caddy                # Альтернатива через dpkg
unattended-upgrade --dry-run        # Проверить автообновления

⏰ Cron, таймеры и автозапуск

crontab -l                          # Показать задачи текущего пользователя
crontab -e                          # Редактировать
sudo crontab -l                     # Задачи root
ls /etc/cron.d/                     # Системные задачи
systemctl list-timers               # Все активные таймеры systemd
systemctl enable caddy              # Автозапуск Caddy при загрузке
systemctl disable caddy             # Отключить автозапуск

Пример задачи: бэкап Marzban каждый день в 3 ночи:

0 3 * * * tar -czf /backup/marzban-$(date +\%F).tar.gz /opt/marzban/

🛡️ Безопасность и аудит сервера

Кто ломится в сервер и что делать:

last -n 20                              # Последние входы в систему
lastb -n 20                             # Неудачные попытки входа
grep "Failed password" /var/log/auth.log | wc -l   # Сколько раз пытались подобрать SSH
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -nr | head
fail2ban-client status sshd            # Статус банов
fail2ban-client status                 # Все активные jail'ы
fail2ban-client set sshd unbanip 1.2.3.4  # Разбанить IP

Проверка открытых портов и файрвола:

ufw status verbose                      # Правила UFW
ufw allow from 203.0.113.5 to any port 22  # Разрешить SSH только с одного IP
ufw deny 3306                           # Закрыть MySQL от мира
iptables -L -n -v                       # Все правила iptables
nmap -sT localhost                      # Сканировать свои порты

🎛️ Marzban CLI и WireGuard

Управление Marzban без веб-панели:

marzban status                         # Статус панели
marzban restart                        # Перезапустить
marzban logs                           # Логи
marzban cli admin list                 # Список админов
marzban cli user list                  # Список пользователей
marzban cli user create --username test --data-limit 10  # Создать юзера
marzban cli user delete --username test # Удалить юзера
marzban cli user reset-usage --username test  # Сбросить трафик

WireGuard на сервере:

wg show                                # Все активные туннели
wg show wg0                            # Конкретный интерфейс
wg show wg0 peers                      # Список пиров
wg genkey | tee private.key | wg pubkey > public.key  # Новая пара ключей
systemctl status wg-quick@wg0          # Статус WireGuard-интерфейса
systemctl restart wg-quick@wg0         # Перезапустить

🎯 Однострочники на каждый день

# Топ-10 IP в логах Caddy
awk '{print $1}' /var/log/caddy/access.log | sort | uniq -c | sort -nr | head

# Сколько места занимает /opt
du -sh /opt/*

# Кто жрёт диск
du -h --max-depth=1 / | sort -hr | head

# Убить процесс по имени
pkill -f python

# Перезапустить все контейнеры Marzban
docker restart $(docker ps -q --filter "name=marzban")

# Посмотреть все переменные окружения контейнера
docker exec marzban-marzban-1 env

# Сравнить два конфига
diff /etc/caddy/Caddyfile.bak /etc/caddy/Caddyfile

# Проверить доступность сайта с другого региона (для проверки блокировок)
curl -I --resolve vpn.example.com:443:IP_СЕРВЕРА https://vpn.example.com

Шпаргалка пополняется. Добавляйте новые команды в комментариях!

Комментарии

Популярные сообщения

🧬 ChaCha20 и Curve25519: Криптография под капотом WireGuard

Немного о том, зачем это нужно.

🔌 L2TP: протокол, который объединил лучшее от двух миров

⚡ ИИ-помощник (на OpenRouter)

Спросите про VPN, протоколы или настройку серверов.