Узел — это шлюз сдачи данных в ЕГИС ОТБ (Единая государственная информационная система обеспечения транспортной безопасности). ЕвроТранс как субъект транспортной инфраструктуры обязан передавать в ЕГИС ОТБ данные; передача идёт по FTP через защищённый канал ViPNet. Это не веб-/ERP-узел — здесь нет 80/443, нет OpenVPN, нет Portainer, нет certbot.
Функционально узел: принимает данные от внутренних операторов по FTP (vsftpd, 48080), проксирует FTP-соединения к серверам импорта ЕГИС ОТБ (*.import.inet.egis-otb.local:21021) через 4 контейнера ftp-proxy (порты 21001–21004), шифрует транспорт до ЕГИС ОТБ туннелем ViPNet (tun0) и дополнительно несёт графический АРМ.
Клиент ViPNet (tun0 7.1.39.7) и две внутренние Yandex Cloud-сети (eth0 основная, eth1 резерв). Защищённый ведомственный обмен и выход в интернет.
4 контейнера-прокси ftp-proxy (proxy-suite, порты 21001–21004) на исходящие каналы pdp / onsi / timetable / ack + хостовый vsftpd (48080) на входящий FTP.
Графическое окружение (LightDM/Xorg/TigerVNC), мониторинг (Zabbix), резервное копирование и антивирус (Acronis Cyber Protect).
| Канал | Что передаёт | Локальный порт | Сервер импорта ЕГИС ОТБ |
|---|---|---|---|
| pdp | Персональные данные пассажиров (ПДП) | 21001 | auto.pdp.import.inet.egis-otb.local:21021 |
| onsi | Данные подсистемы ОНСИ | 21002 | onsi.import.inet.egis-otb.local:21021 |
| timetable | Расписания | 21003 | timetable.import.inet.egis-otb.local:21021 |
| ack | Квитанции / подтверждения | 21004 | ack.import.inet.egis-otb.local:21021 |
...-global-...): тот — веб/ERP-узел (80/443/OpenVPN/Portainer/certbot). Этот — узкоспециализированный FTP-шлюз в гос. систему. Общего кода нет; общие только базовая ОС, Yandex Cloud-платформа и личный SSH-ключ администратора.
| Параметр | Значение |
|---|---|
| Hostname | vm-evrotrans-yandex-vipnet-1769183391910 |
| Роль | Выходной FTP-шлюз ЕвроТранса в ЕГИС ОТБ через ViPNet + АРМ оператора |
| ОС | Ubuntu 20.04.6 LTS (Focal Fossa) |
| Ядро | 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 |
| Платформа | Yandex Cloud (cloud-init, google-guest-agent), сеть 10.128.0.0/24 |
| Аптайм на момент аудита | 133 дня |
| Таймзона | Europe/Moscow (MSK) |
| Интерфейс | Адрес | Метрика | Назначение | Состояние |
|---|---|---|---|---|
lo | 127.0.0.1/8, ::1/128 | — | Локальные сервисы (Acronis, CUPS, resolved и т.д.) | UNKNOWN |
eth0 | 10.128.0.5/24 | 100 | Осн. сеть Yandex Cloud: управление/SSH, мониторинг, выход в интернет (default via 10.128.0.1) | UP |
eth1 | 10.0.0.5/24 | 200 | Вторая сеть Yandex Cloud: резервный шлюз по умолчанию (default via 10.0.0.1, метрика выше → не используется, пока жив eth0) | UP |
docker0 | 172.17.0.1/16 | — | Bridge Docker — не используется (host-сеть) | DOWN |
tun0 | 7.1.39.7/32 | — | Туннель ViPNet — защищённый ведомственный обмен (point-to-point) | UNKNOWN/UP |
docker0 в состоянии DOWN, потому что все FTP-контейнеры работают в режиме network_mode: host (см. §4.2) — они подключены не к bridge, а напрямую к сетевому стеку хоста. docker network ls показывает только дефолтные сети bridge/host/none, пользовательских сетей нет.
default via 10.128.0.1 dev eth0 proto dhcp src 10.128.0.5 metric 100 ← основной default via 10.0.0.1 dev eth1 proto dhcp src 10.0.0.5 metric 200 ← резервный
eth0 (ip route get 8.8.8.8 → via 10.128.0.1 dev eth0).eth1 подключён ко второй VPC Yandex Cloud (10.0.0.0/24), служит резервным маршрутом (метрика выше).proto dhcp).tun0 7.1.39.7)Через туннель доступны сети контрагентов / ведомственные сегменты (включая серверы импорта ЕГИС ОТБ) — это и есть карта доступных через ViPNet ресурсов (вероятные upstream-цели FTP-прокси):
| Блок маршрутов | Комментарий |
|---|---|
10.10.1.0/24 … 10.10.3.0/24 (десятки мелких подсетей /31…/24) | Сегменты защищённой ведомственной сети контрагентов |
10.10.104.14, 10.10.104.50 | Отдельные хосты / служебные узлы |
10.10.255.1 … 10.10.255.250 | Служебные узлы ViPNet |
11.0.0.0/8 | Крупный блок партнёрской сети |
172.16.16.100/31, 172.16.16.103/111/139/160, 172.16.17.205/206, 172.16.32.32 | Отдельные хосты контрагентов |
Служебный трафик ViPNet: UDP 41034, 55781; DNS внутри туннеля — 7.1.39.7:53 (обслуживает vipnetclient).
*.egis-otb.local — уточнить через getent hosts ack.import.inet.egis-otb.local. Маршруты показывают, что цели достижимы именно через ViPNet, а не напрямую.flowchart TB admin["Админ / АРМ
r3ddan9, evrotrans"]:::ext zbx["Zabbix server"]:::ext contra["Контрагенты"]:::ext vipnetnet["Сеть ViPNet
контрагенты, ЕГИС ОТБ"]:::ext subgraph Host["ХОСТ vm-...-vipnet"] direction TB eth0["eth0 10.128.0.5
управление / интернет"]:::net proxy["ftp-proxy
0.0.0.0:21001-21004"]:::ftp vsftpd["vsftpd :48080"]:::ftp tun0["tun0 7.1.39.7
ViPNet"]:::vip end egis["ЕГИС ОТБ
*.import.inet.egis-otb.local:21021
pdp / onsi / timetable / ack"]:::ext admin -- "SSH 48008 (только ключи)" --> eth0 zbx -- "TCP 10050" --> eth0 contra -- "FTP 48080 + 21001-21004" --> proxy vipnetnet -- "шифрованный туннель" --> tun0 vsftpd -. "приём из 10.128.0.0/24" .- eth0 tun0 == "FTP через ViPNet" ==> egis classDef ftp fill:#0f2417,stroke:#56d364,color:#dbe4ee classDef net fill:#11202e,stroke:#4ea1ff,color:#dbe4ee classDef vip fill:#1d1430,stroke:#bc8cff,color:#e9def9 classDef ext fill:#12161c,stroke:#5a6675,color:#cfd8e2
ufw inactive, iptables -P INPUT ACCEPT) — фильтрация только на уровне облачных security-groups Yandex Cloud. См. AUDIT.html.docker-compose.yml, docker inspect): контейнеры — это не FTP-серверы, а прокси протокола FTP (/usr/sbin/ftp-proxy -n -d, пакет proxy-suite). Они не хранят файлы, а проксируют FTP-соединения к вышестоящим (upstream) FTP-серверам. Конфигурация каждого монтируется только для чтения из ./ftp-<name>/config/ → /etc/proxy-suite/.
Узел совмещает две FTP-роли: входной сервер vsftpd (приём) и 4 исходящих прокси ftp-proxy (передача в ЕГИС ОТБ).
stable)flowchart TB clients["Внутренние системы / клиенты"]:::ext vsftpd["vsftpd
:48080 (хост)"]:::ftp subgraph Docker["Docker · compose project «stable»
/home/evrotrans/stable"] direction LR pdp["ftp-pdp
:21001"]:::ftp onsi["ftp-onsi
:21002"]:::ftp timetable["ftp-timetable
:21003"]:::ftp ack["ftp-ack
:21004"]:::ftp end upstream["Upstream FTP-серверы контрагентов
*.import.inet.egis-otb.local:21021"]:::ext clients -- "FTP 48080" --> vsftpd clients -- "FTP 21001-21004" --> pdp clients --> onsi clients --> timetable clients --> ack pdp -- "FTP" --> upstream onsi -- "FTP" --> upstream timetable -- "FTP" --> upstream ack -- "FTP" --> upstream classDef ftp fill:#0f2417,stroke:#56d364,color:#dbe4ee classDef ext fill:#12161c,stroke:#5a6675,color:#cfd8e2
| Сервис (compose) | Контейнер | Слушает | Upstream (через ViPNet) | Порт upstream | User/Group |
|---|---|---|---|---|---|
ftp-pdp | stable-ftp-pdp-1 | 0.0.0.0:21001 | auto.pdp.import.inet.egis-otb.local | 21021 | nobody/nogroup |
ftp-onsi | stable-ftp-onsi-1 | 0.0.0.0:21002 | onsi.import.inet.egis-otb.local | 21021 | nobody/nogroup |
ftp-timetable | stable-ftp-timetable-1 | 0.0.0.0:21003 | timetable.import.inet.egis-otb.local | 21021 | nobody/nogroup |
ftp-ack | stable-ftp-ack-1 | 0.0.0.0:21004 | ack.import.inet.egis-otb.local | 21021 | nobody/nogroup |
(хост) vsftpd | — | *:48080 | — (приём от r3ddan9/evrotrans) | — | — |
User nobody / Group nogroup (минимальные привилегии), процесс /usr/sbin/ftp-proxy -n -d. Контейнеры файлы не хранят — только проксируют.auto.pdp.import...;onsi.import...;timetable.import...;ack.import....vsftpd (порт 48080)Запущен на хосте (systemd vsftpd.service), вне Docker. Ключевые параметры /etc/vsftpd.conf:
| Параметр | Значение | Смысл |
|---|---|---|
listen_port | 48080 | Порт |
listen / listen_ipv6 | YES / NO | Только IPv4 |
anonymous_enable | NO | Анонимный вход запрещён |
local_enable | YES | Вход локальных системных пользователей |
write_enable | YES | Разрешена запись |
local_umask | 022 | Маска новых файлов |
chroot_local_user | YES | Каждый пользователь заперт в своём каталоге |
local_root | /home/$USER/ | Корень = домашний каталог |
allow_writeable_chroot | YES | 🟠 Разрешён writable-chroot (небольшое послабление) |
user_sub_token | $USER | Подстановка имени в путь |
userlist_enable | YES | Включён список пользователей |
userlist_file | /etc/vsftpd.userlist | Файл списка |
userlist_deny | NO | Белый список — пускать только r3ddan9 и evrotrans |
ssl_enable | NO | 🔴 Шифрование выключено — открытый текст |
rsa_cert_file | snakeoil | Сертификат прописан, но не используется (SSL off) |
connect_from_port_20 | YES | Активный режим данных с порта 20 |
pam_service_name | vsftpd | PAM-сервис |
xferlog_enable / log_ftp_protocol | YES | Логирование в /var/log/vsftpd.log |
force_dot_files | yes | Показывать скрытые файлы |
secure_chroot_dir | /var/run/vsftpd/empty | Служебный пустой каталог |
Список доступа /etc/vsftpd.userlist: r3ddan9, evrotrans (те же, что в AllowUsers SSH).
r3ddan9 и evrotrans — а это те же аккаунты, что имеют SSH/sudo/docker. Перехват трафика = компрометация привилегированных пользователей. Смягчает только нахождение канала во внутренней сети.network_mode: hostВсе 4 контейнера запущены в сетевом пространстве хоста (network_mode: host), а не в изолированном bridge. Следствия:
docker0 находится в состоянии DOWN, контейнеры не имеют отдельных IP — они слушают порты напрямую на интерфейсах хоста (поэтому в ss процессы ftp-proxy видны на 0.0.0.0:2100x).ports:/expose: в compose при host-режиме фактически не действует (проброса нет, контейнер и так на хост-сети).| Параметр | Значение | Оценка |
|---|---|---|
privileged | false | ✅ |
SecurityOpt | no-new-privileges=true, apparmor=docker-default | ✅ запрет эскалации + профиль AppArmor |
| Монтирование конфига | ./ftp-*/config → /etc/proxy-suite режим :ro | ✅ только чтение |
| Docker-сокет в контейнер | не проброшен | ✅ |
CapAdd / CapDrop | null / null | стандартный набор capabilities |
ReadonlyRootfs | false | — |
DOCKER_CONTENT_TRUST | 1 (в .env) | ✅ проверка подписей образов |
| Логирование | json-file, max-size=64m, max-file=4, compress=true | ✅ |
RestartPolicy | always | ✅ |
MaskedPaths / ReadonlyPaths | стандартные (/proc/kcore, /sys/firmware, …) | ✅ дефолт Docker |
network_mode | host | 🟠 нет сетевой изоляции (см. §4.3) |
network_mode: host, осознанно выбранный из-за специфики FTP./home/evrotrans/stable/docker-compose.yml (compose v2.18.1, проект stable, базовый образ ubuntu:20.04). Контейнеры подняты 2026-01-30, статус «Up 4 months»./home/evrotrans/stable/.env — секретов не содержит ✅ (только TZ, ENV_TIMEZONE, DOCKER_CONTENT_TRUST=1). В шапке файла — памятка по генерации паролей (pwgen, htpasswd), но самих паролей нет../ftp-<name>/config/ (см. §13).r3ddan9 и evrotrans (группа docker).Узел несёт полноценное графическое окружение — нетипично для сервера, объясняется ролью АРМ ViPNet (для работы с криптоклиентом часто нужен GUI).
| Компонент | Сервис | Доступ / канал |
|---|---|---|
| Менеджер входа / X11 | lightdm, Xorg | Локальная консоль (greeter активен, seat0) |
| Удалённый рабочий стол | TigerVNC (/etc/tigervnc, ~/.vnc/...SrvKey.pem) | ✅ сейчас не запущен (нет systemd-юнита, не слушает порт). По логам поднимался на localhost:5903 (только loopback), пароль задан (~/.vnc/passwd, 600). Доступ — лишь через SSH-туннель |
| Печать | cups, cups-browsed | ✅ только localhost (127.0.0.1:631, [::1]:631) |
| Автообнаружение принтеров | cups-browsed | 🟠 вещание в сеть |
| mDNS / Zeroconf | avahi-daemon | 🟠 5353/udp + 38317/39398 вещание |
| Десктоп-демоны | colord, upower, switcheroo-control, rtkit-daemon, udisks2, accounts-daemon, ModemManager | Локально |
*vnc* нет, порт 590x сейчас закрыт. Из лога ~/.vnc/*.log: запускался на дисплее :3, Listening for VNC connections on local interface(s), port 5903, подключения только с 127.0.0.1, последняя активность — 23 января. Пароль VNC установлен. Удалённый доступ к десктопу возможен лишь после проброса порта по SSH — это правильная схема, риск низкий. Ключ/сертификат VNC-сервера лежат у пользователя evrotrans — то есть удалённый рабочий стол предназначен именно для этого аккаунта.ModemManager, wpa_supplicant, switcheroo-control, cups-browsed, avahi-daemon на серверном узле избыточны (атрибуты рабочей станции / ноутбука).| Параметр | Значение | Назначение |
|---|---|---|
port | 48008 | Нестандартный порт |
permitrootlogin | no | Root-логин запрещён |
pubkeyauthentication | yes | Аутентификация по ключам |
passwordauthentication | no | Парольный вход отключён |
maxauthtries | 3 | Лимит попыток за сессию |
x11forwarding | yes | 🟠 Проброс X11 (есть GUI; лучше no) |
gatewayports | no | Запрет проброса на внешние интерфейсы |
allowusers | r3ddan9 evrotrans | Белый список |
danil@IdeaPad-3-14ALC6 используется и здесь, и на первом сервере. Компрометация ноутбука IdeaPad-3-14ALC6 = доступ к обоим узлам. Подробнее — в AUDIT.html.| Параметр | Значение |
|---|---|
| Клиент | vipnetclient / vipnetclientdaemon (systemd timer vipnetclientdaemon1002.timer, под UID 1002 = evrotrans) |
| Интерфейс | tun0 7.1.39.7/32 (point-to-point) |
| Служебные порты | UDP 41034, 55781 |
| DNS | 7.1.39.7:53 |
| Каталог | /home/evrotrans/.vipnet/ — владелец root (не evrotrans) |
| Подкаталоги | data, etc, mftp, var, tmp — все drwx------ root ✅ (изолированы) |
export.db | 49 КБ, rw-r--r-- (world-readable) 🟠 — экспорт справочника узлов; проверить чувствительность |
| Подсистемы | MFTP (mftp/) — защищённый файловый/почтовый транспорт; ViPNet CSP (for_rand.key — инициализация ГПСЧ) |
Маршрутизация: через tun0 доступны сети контрагентов (см. §3.3) — это адресаты защищённого обмена. ViPNet — сертифицированное средство защиты канала; через него (включая MFTP) идёт основной защищённый файловый обмен с ведомственной сетью, в том числе передача в ЕГИС ОТБ.
| Подсистема | Компоненты | Порты | Примечание |
|---|---|---|---|
| Мониторинг | zabbix-agent2 | 10050/tcp (все интерфейсы) | 🟠 Снимает метрики; должен опрашиваться только сервером Zabbix — ограничить firewall'ом по IP |
| Резервное копирование / защита | Acronis Cyber Protect: acronis_mms, acronis_schedule, active-protection, aakore, acp-update-controller, adp-agent, task-manager | localhost (6109, 9772, 9850, 24100-24102, 35375, 43234, 33159) + grpm-sync на *:41765 🟠 | Бэкап + антивирус; основной набор портов — только localhost ✅ |
| Облачный агент | google-guest-agent | — | Управляет SSH-ключами и google-sudoers через метаданные Yandex Cloud |
| Обновления | unattended-upgrades | — | Автопатчи безопасности ✅; таймеры apt-daily(-upgrade), fwupd-refresh |
| Время | systemd-timesyncd | — | NTP |
| Имена | systemd-resolved | 127.0.0.53:53 | + ViPNet DNS на 7.1.39.7 |
grpm-sync-unit на *:41765 (все интерфейсы).| Пользователь | UID | Оболочка | Пароль | Роль в архитектуре |
|---|---|---|---|---|
root | 0 | /bin/bash | 🔒 L (заблокирован) | Системный (SSH-вход заблокирован) |
y4tsun0v | 1000 | /bin/bash | P (задан) | Orphan от первичной настройки VM (⚠️ беспарольный sudo — см. аудит) |
r3ddan9 | 1001 | /bin/bash | P | Администратор (danil): SSH, sudo (с паролем), группа docker |
evrotrans | 1002 | /bin/bash | P | Оператор узла: владелец ViPNet, VNC, Docker-стека FTP (/home/evrotrans/stable), группа docker |
ftp | 114 | /usr/sbin/nologin | — | Демон FTP (служебный), /srv/ftp |
root. Скрытых суперпользователей нет. Пустых паролей нет.AllowUsers): r3ddan9, evrotrans.docker (r3ddan9, evrotrans) — 🟠 root-эквивалент (управление Docker = монтирование / в контейнер)./etc/sudoers.d/90-cloud-init-users: y4tsun0v ALL=(ALL) NOPASSWD:ALL — беспарольный root у orphan-аккаунта. Подробности и риски — в AUDIT.html.
flowchart TB
subgraph Net["Сеть"]
direction TB
eth0["eth0 10.128.0.5
управление / мониторинг"]:::net
eth1["eth1 10.0.0.5
данные (резерв, metric 200)"]:::net
tun0["tun0 7.1.39.7
ViPNet (point-to-point)"]:::net
end
subgraph App["Прикладной слой"]
direction TB
vsftpd["vsftpd :48080 (вход, хост)"]:::ftp
proxy["ftp-proxy :21001-21004"]:::ftp
chans["stable-ftp-pdp / onsi / timetable / ack"]:::ftp
proxy --> chans
end
subgraph Arm["АРМ / десктоп"]
direction TB
lightdm["LightDM / Xorg"]:::svc
vnc["TigerVNC (localhost)"]:::svc
cups["CUPS (localhost)"]:::svc
end
subgraph Ops["Эксплуатация"]
direction TB
zbx["Zabbix :10050"]:::svc
acronis["Acronis Cyber Protect"]:::svc
gga["google-guest-agent"]:::svc
uu["unattended-upgrades"]:::svc
end
subgraph Vip["ViPNet"]
direction TB
vipclient["vipnetclient"]:::vip
csp["ViPNet CSP / MFTP"]:::vip
end
sshd["sshd :48008 (ключи)"]:::svc
eth0 -- "SSH" --> sshd
eth0 --> vsftpd
eth0 --> proxy
eth0 --> zbx
tun0 --> vipclient
classDef ftp fill:#0f2417,stroke:#56d364,color:#dbe4ee
classDef net fill:#11202e,stroke:#4ea1ff,color:#dbe4ee
classDef vip fill:#1d1430,stroke:#bc8cff,color:#e9def9
classDef svc fill:#10242b,stroke:#3fb6c9,color:#cfeef5
flowchart TB oper["Оператор
r3ddan9 / evrotrans"]:::ext vsftpd["vsftpd :48080"]:::ftp file["файл в /home/<user>/
(chroot в $HOME)"]:::net proxy["ftp-proxy :2100x
User nobody, network_mode host"]:::ftp egis["<канал>.import.inet.egis-otb.local:21021
серверы импорта ЕГИС ОТБ
pdp / onsi / timetable / ack"]:::ext oper -- "FTP открытый текст (ssl_enable=NO)" --> vsftpd vsftpd --> file file -- "подаётся на прокси" --> proxy proxy == "FTP через ViPNet-туннель tun0
(шифрование на уровне сети)" ==> egis classDef ftp fill:#0f2417,stroke:#56d364,color:#dbe4ee classDef net fill:#11202e,stroke:#4ea1ff,color:#dbe4ee classDef ext fill:#12161c,stroke:#5a6675,color:#cfd8e2 classDef warn fill:#2a1416,stroke:#ff5c5c,color:#ffd9d9 class oper,vsftpd warn
r3ddan9/evrotrans) кладёт файлы по FTP в свой $HOME через vsftpd (48080) — в открытом виде, изнутри сети 10.128.0.0/24.ftp-proxy (21001–21004) пробрасывает FTP-сессию к серверу импорта *.egis-otb.local:21021. Контейнеры файлы не хранят — только проксируют, работая под nobody.egis-otb.local идёт через ViPNet-туннель (tun0), который шифрует канал на сетевом уровне (компенсирует то, что сам FTP открытый).r3ddan9 — по SSH (48008); evrotrans — оператор узла (ViPNet/GUI, при необходимости VNC через SSH-туннель).| Что | Путь |
|---|---|
| Docker-стек (compose) | /home/evrotrans/stable/docker-compose.yml |
| Переменные окружения | /home/evrotrans/stable/.env |
| Конфиги прокси (per-канал) | /home/evrotrans/stable/ftp-<pdp|onsi|timetable|ack>/config/*.conf |
| Конфиг vsftpd | /etc/vsftpd.conf |
| Список FTP-доступа | /etc/vsftpd.userlist |
| Лог vsftpd | /var/log/vsftpd.log |
| ViPNet | /home/evrotrans/.vipnet/ (root) |
| VNC | /home/evrotrans/.vnc/ |
# Статус прикладного стека
cd /home/evrotrans/stable && docker compose ps
docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'
# Перезапуск одного канала (пример: ack)
cd /home/evrotrans/stable && docker compose restart ftp-ack
# Логи прокси (диагностика передачи в ЕГИС ОТБ)
docker logs --tail 100 -f stable-ftp-ack-1
# Пересборка образов (получить свежие патчи)
cd /home/evrotrans/stable && docker compose build --pull && docker compose up -d
# Статус/логи входного FTP
systemctl status vsftpd
tail -f /var/log/vsftpd.log
# Состояние ViPNet-туннеля
ip addr show tun0
ip route show | grep tun0
systemctl status vipnetclientdaemon1002
# Проверка доступности сервера импорта ЕГИС ОТБ
getent hosts ack.import.inet.egis-otb.local
vipnetclientdaemon (туннель) → docker/контейнеры ftp-proxy (передача в ЕГИС ОТБ работает только при поднятом tun0). При недоступности ViPNet прокси не смогут достучаться до *.egis-otb.local.
| # | Вопрос | Команда / источник | Приоритет |
|---|---|---|---|
| 1 | Облачные security-groups Yandex Cloud (единственный фильтр периметра — локальный FW выключен) | консоль Yandex Cloud → VPC → Firewall rules | 🔴 |
| 2 | Ключи SSH r3ddan9 / evrotrans (в выводе их не было — вероятно, инжектируются guest-agent) | cat /home/{r3ddan9,evrotrans}/.ssh/authorized_keys | 🟠 |
| 3 | Метаданные Yandex Cloud / OS Login (альтернативный канал доступа) | консоль Yandex Cloud; curl -H "Metadata-Flavor: Google" .../oslogin/users | 🟠 |
| 4 | Резолв *.egis-otb.local (в какой ViPNet-сети серверы импорта) | getent hosts <host>.import.inet.egis-otb.local | 🟢 |
| 5 | Чувствительность export.db (world-readable) | проверить содержимое | 🟢 |
| 6 | Целостность системы (не было в audit.sh) | getcap -r / 2>/dev/null; debsums -c; world-writable файлы | 🟢 |
| 7 | История / поведение | journalctl -p err -b; ~/.bash_history; docker logs | 🟢 |
docker-compose.yml (структура)Проект stable, 4 сервиса (ftp-pdp, ftp-onsi, ftp-timetable, ftp-ack), все по шаблону:
version: "3"
services:
ftp-<name>:
build: ./ftp-<name>
restart: always
privileged: false
network_mode: host
security_opt:
- "no-new-privileges=true"
- "apparmor=docker-default"
logging:
driver: "json-file"
options: { max-file: "4", max-size: "64m", compress: "true" }
expose: ["2100X"]
ports: ["2100X:2100X"]
volumes: ["./ftp-<name>/config/:/etc/proxy-suite/:ro"]
environment:
TZ: ${ENV_TIMEZONE}
(маппинг порта: pdp→21001, onsi→21002, timetable→21003, ack→21004)
*.conf (proxy-suite, общий вид)[-Global-]
DestinationAddress <канал>.import.inet.egis-otb.local
DestinationPort 21021
Group nogroup
Port 2100X
User nobody
| Канал | DestinationAddress | Port (local) |
|---|---|---|
| pdp | auto.pdp.import.inet.egis-otb.local | 21001 |
| onsi | onsi.import.inet.egis-otb.local | 21002 |
| timetable | timetable.import.inet.egis-otb.local | 21003 |
| ack | ack.import.inet.egis-otb.local | 21004 |
/etc/vsftpd.conf (значимые директивы)listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
log_ftp_protocol=YES
connect_from_port_20=YES
listen_port=48080
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
ssl_enable=NO
setproctitle_enable=YES
force_dot_files=yes
user_sub_token=$USER
local_root=/home/$USER/
allow_writeable_chroot=YES
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
.envTZ="Europe/Moscow"
ENV_TIMEZONE="Europe/Moscow"
DOCKER_CONTENT_TRUST=1