🛠️ Боевая шпаргалка сисадмина: Сеть, 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
Шпаргалка пополняется. Добавляйте новые команды в комментариях!
Комментарии
Отправить комментарий