Практическое руководство с разбором реальных кейсов

Автор: Твой братишка-админ
Дата: Февраль 2026
Версия: 1.0
Теги: vds ubuntu vpn docker gitea iptables postgresql сеть безопасность


📚 Оглавление

  1. Введение
  2. Глава 1: Первые шаги с VDS
  3. Глава 2: Основы сетевой диагностики
  4. Глава 3: Настройка VPN (Amnezia/XRay)
  5. Глава 4: Защита сервера (iptables, блокировка атак)
  6. Глава 5: Docker-инфраструктура
  7. Глава 6: Развёртывание Gitea и PostgreSQL
  8. Глава 7: Настройка домена и HTTPS (Caddy)
  9. Глава 8: Диагностика Windows-клиента
  10. Глава 9: Чек-листы и шпаргалки

📖 Введение

Этот документ родился из реального опыта настройки сервера с нуля. Мы прошли через всё: от подключения по SSH до полноценного Git-сервера с защитой от атак. Здесь собраны не просто сухие команды, а живые ситуации и их решения.

🎯 Для кого эта статья

  • Для тех, кто хочет понять, а не просто скопировать
  • Для начинающих администраторов
  • Для тех, кто ценит безопасность и контроль

🚀 Глава 1: Первые шаги с VDS

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

bash

# Из Windows (PuTTY)
# Просто вводим IP и порт 22

# Из Linux/Mac
ssh root@71.109.135.24

Важно: При первом подключении PuTTY спросит про ключ — это нормально. Нажимай Accept.

1.2 Базовая настройка сервера

bash

# Обновление пакетов
apt update && apt upgrade -y

# Создание пользователя (не сиди под root!)
adduser bro
usermod -aG sudo bro
su - bro

1.3 Полезные команды для ориентации

bash

whoami        # кто я?
pwd           # где я?
ls -la        # что тут есть?
df -h         # место на диске
free -h       # память

🌐 Глава 2: Основы сетевой диагностики

2.1 Инструменты диагностики

КомандаЧто делаетПример
pingПроверка доступности узлаping 8.8.8.8
curl -IПроверка HTTP-ответаcurl -I https://git.vatoko.ru
nslookupПроверка DNSnslookup google.com 8.8.8.8
tcpdumpПросмотр трафикаtcpdump -i amn0 -n
ss -tulpnСлушающие портыss -tulpn | grep 443
iptables -L -v -nПравила фаерволаiptables -L INPUT -v -n

2.2 Как читать ответы

Пример ping:

text

64 bytes from 8.8.8.8: icmp_seq=1 ttl=106 time=48ms
  • ttl=106 — количество прыжков (чем меньше, тем ближе сервер)
  • time=48ms — задержка (хорошо до 100ms)

Пример curl:

text

HTTP/2 200    # ✅ всё ок
HTTP/4xx      # ❌ ошибка клиента
HTTP/5xx      # ❌ ошибка сервера

🔒 Глава 3: Настройка VPN (Amnezia/XRay)

3.1 Базовая архитектура

  • Сервер: VDS с Ubuntu
  • VPN-протокол: XRay (маскируется под HTTPS)
  • Порт: 443 (TCP для XRay, UDP для AmneziaWG)

3.2 Типичные проблемы VPN

Проблема: VPN подключен, но сайты не грузятся

Диагностика:

bash

# На сервере
tcpdump -i amn0 -n # смотрим, идёт ли трафик от клиента
ping 127.29.127.2 # пингуем клиента

Решение: Проверяем маршруты и MTU

bash

# Добавляем MSS clamping (важно для WireGuard!)
iptables -t mangle -A FORWARD -o amn0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

3.3 Работа с портом 443 (особый случай)

На сервере могут одновременно работать:

  • UDP 443 — AmneziaWG (VPN)
  • TCP 443 — Caddy (веб-сервер)

Это нормально! TCP и UDP не конфликтуют.


🛡️ Глава 4: Защита сервера (iptables)

4.1 Базовая защита от атак

bash

# Блокировка целой подсети (например, бразильские боты)
iptables -I INPUT -s 177.36.0.0/16 -j DROP
iptables -I FORWARD -s 177.36.0.0/16 -j DROP

# Просмотр заблокированных пакетов
iptables -L INPUT -v -n | grep DROP

4.2 Сохранение правил

bash

# Установка пакета для сохранения
apt install iptables-persistent -y

# Сохранение текущих правил
iptables-save > /etc/iptables/rules.v4
netfilter-persistent save

4.3 Проверка активных правил

bash

iptables -L INPUT -v -n | head -20
iptables -t nat -L POSTROUTING -v -n
iptables -t mangle -L FORWARD -v -n

🐳 Глава 5: Docker-инфраструктура

5.1 Установка Docker

bash

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
# Выйти и зайти заново

5.2 Основные команды Docker

bash

docker ps                    # запущенные контейнеры
docker ps -a                 # все контейнеры
docker logs <контейнер>      # логи
docker exec -it <контейнер> /bin/bash  # войти в контейнер
docker restart <контейнер>   # перезапустить
docker compose up -d         # запустить из docker-compose.yml
docker compose down          # остановить

5.3 Структура docker-compose.yml

yaml

version: '3.8'
services:
  имя_сервиса:
    image: образ
    container_name: имя
    restart: unless-stopped
    ports:
      - "внешний:внутренний"
    volumes:
      - том:/путь/в/контейнере
    environment:
      - ПЕРЕМЕННАЯ=значение
    networks:
      - сеть

🗄️ Глава 6: Развёртывание Gitea и PostgreSQL

6.1 Запуск PostgreSQL

yaml

postgres:
  image: postgres:16
  environment:
    POSTGRES_USER: gitea
    POSTGRES_PASSWORD: gitea123
    POSTGRES_DB: gitea
  volumes:
    - postgres_data:/var/lib/postgresql/data

6.2 Работа с PostgreSQL

bash

# Вход в консоль
docker exec -it postgres psql -U gitea

# Полезные SQL-команды
\l                           # список баз
\du                          # список пользователей
CREATE DATABASE mydb OWNER myuser;  # создать базу
CREATE USER myuser WITH PASSWORD 'pass';  # создать пользователя
\q                           # выход

6.3 Строка подключения к БД

text

postgresql://пользователь:пароль@postgres:5432/имя_базы

🌍 Глава 7: Настройка домена и HTTPS (Caddy)

7.1 Caddyfile (конфиг)

text

git.твой-домен.ru {
    reverse_proxy gitea:3000
}

*.твой-домен.ru {
    respond "Скоро тут будет проект!"
}

7.2 DNS-записи

ТипИмяЗначение
AgitIP сервера
A@IP сервера (если нужно)

7.3 Проверка SSL-сертификата

bash

curl -I https://git.твой-домен.ru
# Должен быть ответ HTTP/2 200

💻 Глава 8: Диагностика Windows-клиента

8.1 Таблица маршрутизации

cmd

route print -4

На что смотреть:

  • Есть ли маршрут по умолчанию (0.0.0.0) через VPN?
  • Метрика (чем меньше, тем приоритетнее)

Исправление:

cmd

# Удалить лишние маршруты
route delete 0.0.0.0 mask 0.0.0.0 192.168.1.1

# Добавить правильный
route add 0.0.0.0 mask 0.0.0.0 10.33.0.2 metric 5

8.2 DNS

cmd

# Проверка
nslookup google.com

# Если не работает — меняем DNS в свойствах адаптера на 8.8.8.8

8.3 Сброс сетевых настроек

cmd

netsh int ip reset
netsh winsock reset
ipconfig /flushdns
# Перезагрузка

📋 Глава 9: Чек-листы и шпаргалки

9.1 Чек-лист при проблемах с VPN

На сервере:

  • ping 127.29.127.2 — клиент отвечает?
  • tcpdump -i amn0 -n — трафик идёт?
  • ss -tulpn | grep 443 — порт слушается?
  • iptables -L FORWARD -v -n — правила не сбросились?
  • cat /proc/sys/net/ipv4/ip_forward — должно быть 1

На клиенте:

  • ipconfig /all — есть IP из VPN-сети?
  • route print -4 — правильные маршруты?
  • ping 127.29.127.1 — сервер отвечает?
  • nslookup google.com — DNS работает?
  • Брандмауэр не блокирует?

9.2 Шпаргалка по iptables

ДействиеКоманда
Посмотреть правила INPUTiptables -L INPUT -v -n
Заблокировать IPiptables -I INPUT -s IP -j DROP
Заблокировать подсетьiptables -I INPUT -s 177.36.0.0/16 -j DROP
Удалить правилоiptables -D INPUT номер
Сохранить правилаiptables-save > /etc/iptables/rules.v4
Восстановить правилаiptables-restore < /etc/iptables/rules.v4

9.3 Шпаргалка по Docker

ДействиеКоманда
Запустить контейнерыdocker compose up -d
Остановить контейнерыdocker compose down
Посмотреть логиdocker logs имя_контейнера
Зайти в контейнерdocker exec -it имя_контейнера /bin/bash
Перезапуститьdocker restart имя_контейнера
Удалить всёdocker system prune -a --volumes

9.4 Шпаргалка по PostgreSQL

ДействиеКоманда (внутри psql)
Войти в консольdocker exec -it postgres psql -U gitea
Список баз\l
Список пользователей\du
Создать базуCREATE DATABASE имя OWNER владелец;
Создать пользователяCREATE USER имя WITH PASSWORD 'пароль';
Выйти\q

9.5 Шпаргалка по диагностике сети

ВопросКоманда
Доступен ли узел?ping 8.8.8.8
Какой у меня IP?curl ifconfig.me
Работает ли DNS?nslookup google.com 8.8.8.8
Открыт ли порт?nc -zv IP порт
Какие порты слушаются?ss -tulpn
Кто занял порт?lsof -i :443

🎯 Заключение

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

🔥 Главные уроки, которые мы вынесли:

  1. Любая проблема решаема, если разбить её на маленькие шаги
  2. Логи и диагностика — твои лучшие друзья
  3. Не бойся ошибок — каждая ошибка делает тебя сильнее
  4. Документируй всё — через месяц забудешь, что делал
  5. Безопасность — это не опция, а необходимость