7.5 KiB
7.5 KiB
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 (NSdns1/dns2.registrar-servers.com). fr1.ruzzy.devA → 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:
/swapfile2 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, instancefr1). - Grafana:
127.0.0.1:3000, доступ снаружи через https://mon.ruzzy.dev (nginx + Let's Encrypt). Datasource Prometheus (uidprometheus) и дашборды (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/)
- Перенесён с
de12026-06-21. Gitea 1.25.4, БД SQLite (всё в/srv/gitea, 4.3 ГБ, 16 репо). - Контейнер
gitea: SSH2222(наружу), web127.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 serverwg0= 10.8.1.0/24, ListenPort 36360/udp, те же server-ключи/PSK и obfuscation-параметры (Jc/Jmin/Jmax/S1/S2/H1-4), что и наde1(server-pubkeyLumb1o…) → на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 режет туннельный трафик (наde1ufw был выключен). - Пиры:
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.