# fr1 — `fr1.ruzzy.dev` (161.97.93.252) Снимок состояния сервера. Секреты (пароли/токены) — только на сервере, не здесь. **Провайдер:** Contabo VPS · France / Lauterbourg (Grand Est) **ОС:** Ubuntu 24.04 LTS · kernel 6.8.0-106-generic **Ресурсы:** 8 vCPU / 23 GB RAM / 387 GB **hostname:** `fr1` (FQDN `fr1.ruzzy.dev` через `/etc/hosts`) --- ## Пользователи и доступ - Пользователь `rus` (uid 1000, группы `rus`, `sudo`, `users`), sudo по паролю. - Вход с Mac: `ssh rus-161` (алиас в `~/.ssh/config`) → ключ `~/.ssh/id_161_97_93_252` (ed25519). - root-доступ по SSH закрыт; для root изнутри — `sudo -i`. ## SSH (`/etc/ssh/sshd_config.d/00-hardening.conf`) ``` PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes KbdInteractiveAuthentication no ChallengeResponseAuthentication no MaxAuthTries 3 AllowUsers rus ``` Через socket-activation (`ssh.socket`). ## DNS - Зона `ruzzy.dev` — Namecheap (NS `dns1/dns2.registrar-servers.com`). - `fr1.ruzzy.dev` A → 161.97.93.252. - PTR (reverse DNS): дефолтный `vmi3387709.contaboserver.net` (не менялся). ## Firewall (ufw) - Default: deny incoming, allow outgoing. - Открыто: `22/tcp`, `80/tcp`, `443/tcp` (IPv4 + IPv6). ## fail2ban (`/etc/fail2ban/jail.local`) ``` [DEFAULT] bantime=1h findtime=10m maxretry=5 ignoreip = 127.0.0.1/8 ::1 31.153.37.106 backend=systemd banaction=ufw [sshd] enabled=true [recidive] enabled=true bantime=1w findtime=1d maxretry=5 backend=auto logpath=/var/log/fail2ban.log ``` ## Обновления - Ubuntu Pro подключён (аккаунт ruzzyrullezz@gmail.com): **livepatch**, **esm-infra**, **esm-apps** — enabled. - unattended-upgrades: `Update-Package-Lists "1"`, `Unattended-Upgrade "1"` (ежедневно, security). Авто-reboot выключен. ## Система - swap: `/swapfile` 2 GB (в `/etc/fstab`), `vm.swappiness=10` (`/etc/sysctl.d/99-swappiness.conf`). - journald: `Storage=persistent`, `SystemMaxUse=500M`. - AppArmor включён; время — systemd-timesyncd. ## Docker - Docker 29.6 + Compose v5.1 (официальный репозиторий). `rus` в группе docker. ## nginx + TLS - nginx 1.24 (apt) + certbot 2.9 (`python3-certbot-nginx`), автопродление через systemd-таймер certbot. - vhost `/etc/nginx/sites-available/mon.ruzzy.dev.conf` → проксирует на Grafana (`127.0.0.1:3000`), HTTPS-редирект, websocket. ## Мониторинг (`~/monitoring`, stack в репо `stacks/monitoring/`) - Стек: **Prometheus + Grafana + node-exporter + cAdvisor + Alertmanager** (docker compose). - **Алерты:** Alertmanager → Telegram (бот @ultimate_log_bot, chat 607015). Правила `prometheus/rules/alerts.yml`: TargetDown, HostHighCPU, HostLowMemory, HostDiskLow/Critical. Токен — в `~/monitoring/alertmanager/telegram_token` (chown 65534, не в git). - Prometheus: retention 90d, слушает `127.0.0.1:9090`. Скрейпит node-exporter + cadvisor (job'ы `node`/`cadvisor`, instance `fr1`). - Grafana: `127.0.0.1:3000`, доступ снаружи через **https://mon.ruzzy.dev** (nginx + Let's Encrypt). Datasource Prometheus (uid `prometheus`) и дашборды (Node Exporter Full, cAdvisor, папка Infra) провижатся автоматически. Пароль admin — в `~/monitoring/docker-compose.yml` на сервере (в репо вынесен в `${GF_ADMIN_PASSWORD}`). - **Multi-server:** таргеты через file_sd (`prometheus/targets/{node,cadvisor}/*.yml`) — новый сервер = добавить файл + `curl -X POST .../-/reload`. См. `stacks/monitoring/README.md`. - **node-exporter — `network_mode: host`** (видит реальные интерфейсы хоста: eth0, wg0-туннель и т.д.; иначе показывал бы только сеть docker-бриджа). Слушает host:9100, доступ ограничен ufw (`from 172.16.0.0/12 to port 9100`), Prometheus скрейпит через `host.docker.internal:9100`. nodename берётся с хоста (fr1). - Дашборд **Network / Traffic** (`network.json`): RX/TX по интерфейсам, пакеты, ошибки/дропы, статус — с фильтром по instance/device (lo/veth/docker скрыты). ⚠️ для корректной сети на `de1` его агент тоже надо перевести в host-net (пока bridge). - DNS: `mon.ruzzy.dev` → 161.97.93.252. - Планируется: VPN-экспортёры (wireguard/openvpn/telemt) + подключение `de1` по туннелю. ## Gitea (`~/gitea`, stack в репо `stacks/gitea/`) - Перенесён с `de1` 2026-06-21. **Gitea 1.25.4**, БД SQLite (всё в `/srv/gitea`, 4.3 ГБ, 16 репо). - Контейнер `gitea`: SSH `2222` (наружу), web `127.0.0.1:3001` (3000 занят Grafana → перевесил на 3001). - nginx vhost `git.ruzzy.dev` → `127.0.0.1:3001`, TLS Let's Encrypt, `client_max_body_size 512M`. - DNS: `git.ruzzy.dev` (CNAME → fr1) → 161.97.93.252. - `ROOT_URL`/`SSH_DOMAIN` = `git.ruzzy.dev` (не менялись). Host-ключи SSH и user/deploy-ключи перенесены с данными — `ssh://git@git.ruzzy.dev:2222` работает как раньше. - Это origin репо `infra` и vault openclaw. ## AmneziaWG exit (для ru1) — перенос VPN, фаза 1 - Зеркало exit-узла `de1`: AmneziaWG server `wg0` = **10.8.1.0/24**, ListenPort **36360/udp**, те же server-ключи/PSK и obfuscation-параметры (Jc/Jmin/Jmax/S1/S2/H1-4), что и на `de1` (server-pubkey `Lumb1o…`) → на `ru1` свитч = только смена Endpoint. - Установка: `amneziawg-dkms`+`amneziawg-tools` (PPA amnezia), host-ом через `awg-quick@wg0` (enabled). Конфиг `/etc/amnezia/amneziawg/wg0.conf` (секрет, не в git). - NAT: PostUp masquerade `10.8.1.0/24 → eth0` + `ip_forward=1`. - **ufw:** `36360/udp` открыт + `ufw route allow in on wg0 out on eth0` (и обратно) + `ufw allow in on wg0` — **обязательно**, иначе ufw режет туннельный трафик (на `de1` ufw был выключен). - Пиры: `ru1` (10.8.1.4) переключён сюда; прямые 10.8.1.1/2/3 пока на `de1`. - Проверено: зарубежный exit RU-клиентов идёт через `fr1` (exit-IP 161.97.93.252). - ⏳ Остаётся (фаза 2): telemt MTProxy, OpenVPN, прямые AWG-клиенты, перенос DNS `ruzzy.dev`/`www`. ## Telegram-уведомления - Бот @ultimate_log_bot. Конфиг `/etc/tg-notify.conf` (chmod 600, токен+chat_id — секрет на сервере). - `/usr/local/bin/tg-notify.sh "msg"` — универсальная отправка (HTML, префикс hostname). - `/usr/local/bin/uu-telegram-report.sh` — сводка автообновлений + reboot-required; повешен на `apt-daily-upgrade.service` через drop-in `/etc/systemd/system/apt-daily-upgrade.service.d/telegram.conf` (`ExecStartPost`). Молчит, если нечего сообщать. ## Установленные пакеты (сверх базы) htop, mtr-tiny, tmux, vim, curl, wget, git, unzip, net-tools, dnsutils, ncdu, rsync, fail2ban, unattended-upgrades.