vault backup: 2025-05-19 10:58:25
This commit is contained in:
20
.obsidian/workspace.json
vendored
20
.obsidian/workspace.json
vendored
@@ -30,12 +30,12 @@
|
|||||||
"state": {
|
"state": {
|
||||||
"type": "markdown",
|
"type": "markdown",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "WORK & PROJECTS/Mol/Серверы/PROXY_PASS/Traefik config.md",
|
"file": "WORK & PROJECTS/Mol/Серверы/VPN-FIREWALL-GATE (Cerberus).md",
|
||||||
"mode": "source",
|
"mode": "source",
|
||||||
"source": false
|
"source": false
|
||||||
},
|
},
|
||||||
"icon": "lucide-file",
|
"icon": "lucide-file",
|
||||||
"title": "Traefik config"
|
"title": "VPN-FIREWALL-GATE (Cerberus)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
@@ -189,23 +189,24 @@
|
|||||||
},
|
},
|
||||||
"active": "08b9c8d0b05e0c9b",
|
"active": "08b9c8d0b05e0c9b",
|
||||||
"lastOpenFiles": [
|
"lastOpenFiles": [
|
||||||
"WORK & PROJECTS/Mol/Серверы/Mol Public Prod.md",
|
"WORK & PROJECTS/Mol/Серверы/1С Бухгалтерия.md",
|
||||||
"WORK & PROJECTS/Mol/Серверы/PROXY_PASS/Traefik config.md",
|
|
||||||
"WORK & PROJECTS/Mol/Серверы/Схема инфраструктуры.canvas",
|
"WORK & PROJECTS/Mol/Серверы/Схема инфраструктуры.canvas",
|
||||||
|
"WORK & PROJECTS/Mol/Серверы/git.moldev.ru.md",
|
||||||
|
"WORK & PROJECTS/Mol/Серверы/Jira - Service - Confluence - Crm.md",
|
||||||
|
"WORK & PROJECTS/Mol/Серверы/mail.mol-soft.ru.md",
|
||||||
|
"WORK & PROJECTS/Mol/Серверы/Mol Public Prod.md",
|
||||||
|
"WORK & PROJECTS/Mol/Серверы/moldev.ru.md",
|
||||||
|
"WORK & PROJECTS/Mol/Серверы/VPN-FIREWALL-GATE (Cerberus).md",
|
||||||
|
"WORK & PROJECTS/Mol/Серверы/PROXY_PASS/Traefik config.md",
|
||||||
"WORK & PROJECTS/Mol/Планы и диаграммы/1.0/1.0.md",
|
"WORK & PROJECTS/Mol/Планы и диаграммы/1.0/1.0.md",
|
||||||
"WORK & PROJECTS/Mol/Планы и диаграммы/Alfa Cloud/Alfa cloud prod.canvas",
|
"WORK & PROJECTS/Mol/Планы и диаграммы/Alfa Cloud/Alfa cloud prod.canvas",
|
||||||
"WORK & PROJECTS/Mol/Серверы/00_Список серверов.md",
|
"WORK & PROJECTS/Mol/Серверы/00_Список серверов.md",
|
||||||
"WORK & PROJECTS/Mol/Планы и диаграммы/Alfa Cloud/Websockets scheme.canvas",
|
"WORK & PROJECTS/Mol/Планы и диаграммы/Alfa Cloud/Websockets scheme.canvas",
|
||||||
"WORK & PROJECTS/Mol/Серверы/VPN-FIREWALL-GATE (Cerberus).md",
|
|
||||||
"WORK & PROJECTS/Mol/Планы и диаграммы/notifies.canvas",
|
"WORK & PROJECTS/Mol/Планы и диаграммы/notifies.canvas",
|
||||||
"WORK & PROJECTS/Mol/Планы и диаграммы/Схема связей юрлиц и адресов.canvas",
|
"WORK & PROJECTS/Mol/Планы и диаграммы/Схема связей юрлиц и адресов.canvas",
|
||||||
"WORK & PROJECTS/Mol/Планы и диаграммы/00001_Редактор_форм/Таблицы нумератора и документов.canvas",
|
"WORK & PROJECTS/Mol/Планы и диаграммы/00001_Редактор_форм/Таблицы нумератора и документов.canvas",
|
||||||
"WORK & PROJECTS/Mol/Планы и диаграммы/00001_Редактор_форм/Архитектура редактора и генератора (Alfa + Mol).canvas",
|
"WORK & PROJECTS/Mol/Планы и диаграммы/00001_Редактор_форм/Архитектура редактора и генератора (Alfa + Mol).canvas",
|
||||||
"WORK & PROJECTS/Mol/Планы и диаграммы/Alfa Cloud/Alfa cloud readme.md",
|
"WORK & PROJECTS/Mol/Планы и диаграммы/Alfa Cloud/Alfa cloud readme.md",
|
||||||
"WORK & PROJECTS/Mol/Серверы/mail.mol-soft.ru.md",
|
|
||||||
"WORK & PROJECTS/Mol/Серверы/1С Бухгалтерия.md",
|
|
||||||
"WORK & PROJECTS/Mol/Серверы/git.moldev.ru.md",
|
|
||||||
"WORK & PROJECTS/Mol/Серверы/Jira - Service - Confluence - Crm.md",
|
|
||||||
"WORK & PROJECTS/Mol/Серверы/mol-desk.mol-soft.PRODs.md",
|
"WORK & PROJECTS/Mol/Серверы/mol-desk.mol-soft.PRODs.md",
|
||||||
"WORK & PROJECTS/Mol/Серверы/Untitled.canvas",
|
"WORK & PROJECTS/Mol/Серверы/Untitled.canvas",
|
||||||
"WORK & PROJECTS/Mol/Ideas/Все идеи для Моли.md",
|
"WORK & PROJECTS/Mol/Ideas/Все идеи для Моли.md",
|
||||||
@@ -213,7 +214,6 @@
|
|||||||
"WORK & PROJECTS/Mol/Серверы/PROXY_PASS",
|
"WORK & PROJECTS/Mol/Серверы/PROXY_PASS",
|
||||||
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Структура таблиц. Основа + заказы.canvas",
|
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Структура таблиц. Основа + заказы.canvas",
|
||||||
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Схема образца испытаний и заявки.canvas",
|
"WORK & PROJECTS/Mol/Планы и диаграммы/Заказы/Схема образца испытаний и заявки.canvas",
|
||||||
"WORK & PROJECTS/Mol/Серверы/moldev.ru.md",
|
|
||||||
"SKILLS DOCS/OLD PHP INSTALL.md",
|
"SKILLS DOCS/OLD PHP INSTALL.md",
|
||||||
"SKILLS DOCS/DOCS/Load Balancer 2.md",
|
"SKILLS DOCS/DOCS/Load Balancer 2.md",
|
||||||
"SKILLS DOCS/DOCS/Load Balancer.md",
|
"SKILLS DOCS/DOCS/Load Balancer.md",
|
||||||
|
|||||||
@@ -25,40 +25,3 @@ http://212.67.13.241:9090/
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
node exporter install
|
|
||||||
```
|
|
||||||
mkdir /etc/node_exporter
|
|
||||||
|
|
||||||
cat <<EOF > /etc/node_exporter/config.yml
|
|
||||||
basic_auth_users:
|
|
||||||
prometheus: "\$2a\$12\$9fI6ZRV.1FAIRbqH9TnwgOSyCrQ18yMC0AoYcwErYmTD97sfJjMq2"
|
|
||||||
EOF
|
|
||||||
|
|
||||||
wget https://github.com/prometheus/node_exporter/releases/download/v1.9.1/node_exporter-1.9.1.linux-amd64.tar.gz
|
|
||||||
tar -xvf node_exporter-*.tar.gz
|
|
||||||
sudo mv node_exporter-1.9.1.linux-amd64/node_exporter /usr/local/bin/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
rm -rf node_*
|
|
||||||
|
|
||||||
cat <<EOF > /etc/systemd/system/node_exporter.service
|
|
||||||
[Unit]
|
|
||||||
Description=Node Exporter
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
User=root
|
|
||||||
ExecStart=/usr/local/bin/node_exporter --web.config.file="/etc/node_exporter/config.yml"
|
|
||||||
Restart=always
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
systemctl enable --now node_exporter
|
|
||||||
systemctl start node_exporter
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|||||||
@@ -1,228 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🧩 Цель
|
|
||||||
|
|
||||||
- Разделить пользователей на **группы**:
|
|
||||||
- `public` — публичный доступ ко всем общедоступным сайтам.
|
|
||||||
- `internal` — сотрудникам доступны внутренние сервисы (git, jira и т.д.).
|
|
||||||
- `client-X` — клиенты с доступом только к своему поддомену (`client1.site.com`, `client2.site.com`).
|
|
||||||
|
|
||||||
- Каждая группа имеет свои **IP-подсети**.
|
|
||||||
- Каждый домен/поддомен имеет список разрешённых групп.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# ✅ Архитектура решения
|
|
||||||
|
|
||||||
## 1. **Группы как файлы IP-диапазонов**
|
|
||||||
|
|
||||||
Создаём отдельные файлы для каждой группы, где указываем её IP-разрешения:
|
|
||||||
|
|
||||||
```
|
|
||||||
/etc/angie/groups/public.conf
|
|
||||||
/etc/angie/groups/internal.conf
|
|
||||||
/etc/angie/groups/client1.conf
|
|
||||||
/etc/angie/groups/client2.conf
|
|
||||||
...
|
|
||||||
```
|
|
||||||
|
|
||||||
### Пример: `/etc/angie/groups/public.conf`
|
|
||||||
```nginx
|
|
||||||
allow all;
|
|
||||||
```
|
|
||||||
|
|
||||||
> Или точнее:
|
|
||||||
```nginx
|
|
||||||
deny all;
|
|
||||||
```
|
|
||||||
|
|
||||||
Но если нужна фильтрация, то:
|
|
||||||
|
|
||||||
```nginx
|
|
||||||
allow 0.0.0.0/0; # все IP
|
|
||||||
```
|
|
||||||
|
|
||||||
### Пример: `/etc/angie/groups/internal.conf`
|
|
||||||
```nginx
|
|
||||||
allow 192.168.1.0/24;
|
|
||||||
allow 10.10.0.0/16;
|
|
||||||
deny all;
|
|
||||||
```
|
|
||||||
|
|
||||||
### Пример: `/etc/angie/groups/client1.conf`
|
|
||||||
```nginx
|
|
||||||
allow 203.0.113.0/24;
|
|
||||||
deny all;
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 2. **Конфигурации доменов с подключением групп**
|
|
||||||
|
|
||||||
Для каждого домена или поддомена создаётся конфиг, который подключает нужные группы через `include`.
|
|
||||||
|
|
||||||
### Пример: `/etc/angie/conf.d/site1.com.conf`
|
|
||||||
```nginx
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name site1.com www.site1.com;
|
|
||||||
|
|
||||||
location / {
|
|
||||||
# Публичный доступ + сотрудники
|
|
||||||
include /etc/angie/groups/public.conf;
|
|
||||||
include /etc/angie/groups/internal.conf;
|
|
||||||
|
|
||||||
proxy_pass http://192.168.10.10:8080;
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Пример: `/etc/angie/conf.d/git.site1.com.conf`
|
|
||||||
```nginx
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name git.site1.com;
|
|
||||||
|
|
||||||
location / {
|
|
||||||
# Только сотрудники
|
|
||||||
include /etc/angie/groups/internal.conf;
|
|
||||||
|
|
||||||
proxy_pass http://192.168.10.11:3000;
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Пример: `/etc/angie/conf.d/client1.site.com.conf`
|
|
||||||
```nginx
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name client1.site.com;
|
|
||||||
|
|
||||||
location / {
|
|
||||||
# Только клиент 1
|
|
||||||
include /etc/angie/groups/client1.conf;
|
|
||||||
|
|
||||||
proxy_pass http://192.168.20.10:8000;
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 3. **Как управлять динамически?**
|
|
||||||
|
|
||||||
Ты хочешь, чтобы при добавлении нового клиента или сайта всё происходило автоматически.
|
|
||||||
|
|
||||||
### 📦 Шаги:
|
|
||||||
|
|
||||||
1. Получаешь данные о новом клиенте:
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"name": "client3",
|
|
||||||
"domain": "client3.site.com",
|
|
||||||
"backend": "192.168.20.30:8080",
|
|
||||||
"allowed_ips": ["198.51.100.0/24"]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
2. Генерируешь файл группы:
|
|
||||||
```
|
|
||||||
/etc/angie/groups/client3.conf
|
|
||||||
```
|
|
||||||
|
|
||||||
С содержимым:
|
|
||||||
```nginx
|
|
||||||
allow 198.51.100.0/24;
|
|
||||||
deny all;
|
|
||||||
```
|
|
||||||
|
|
||||||
3. Генерируешь конфиг сервера:
|
|
||||||
```
|
|
||||||
/etc/angie/conf.d/client3.site.com.conf
|
|
||||||
```
|
|
||||||
|
|
||||||
Содержимое:
|
|
||||||
```nginx
|
|
||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name client3.site.com;
|
|
||||||
|
|
||||||
location / {
|
|
||||||
include /etc/angie/groups/client3.conf;
|
|
||||||
|
|
||||||
proxy_pass http://192.168.20.30:8080;
|
|
||||||
proxy_set_header Host $host;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
4. Отправляешь обновлённый конфиг в Angie через `/control`:
|
|
||||||
```bash
|
|
||||||
curl -X POST http://localhost/control/nginx --data-binary @client3.site.com.conf
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔄 Автоматизация всего процесса
|
|
||||||
|
|
||||||
Можно написать небольшой **API-сервис**, который:
|
|
||||||
|
|
||||||
- Принимает запросы на создание/обновление/удаление групп и сайтов.
|
|
||||||
- Генерирует конфиги на основе шаблонов.
|
|
||||||
- Обновляет конфиг в Angie через `/control`.
|
|
||||||
- Хранит данные в БД (например, PostgreSQL или Redis).
|
|
||||||
|
|
||||||
Пример структуры такого API:
|
|
||||||
|
|
||||||
| Метод | URL | Описание |
|
|
||||||
|-------|----------------------------|----------------------------------|
|
|
||||||
| POST | `/api/group` | Создать группу |
|
|
||||||
| POST | `/api/domain` | Создать новый домен |
|
|
||||||
| DELETE| `/api/domain/{domain}` | Удалить домен |
|
|
||||||
| GET | `/api/status` | Проверить текущие правила |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔐 Как работает проверка доступа?
|
|
||||||
|
|
||||||
Когда клиент делает запрос:
|
|
||||||
|
|
||||||
1. Angie проверяет IP по `allow/deny` из файла группы.
|
|
||||||
2. Если IP не проходит — возвращает `403 Forbidden`.
|
|
||||||
3. Если проходит — проксирует запрос на бэкенд.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🧠 Полезные советы
|
|
||||||
|
|
||||||
- Для тестирования используй `curl -H 'Host: domain.com' http://<proxy-ip>/` чтобы эмулировать хост.
|
|
||||||
- Все изменения применяются без перезапуска благодаря `/control`.
|
|
||||||
- Логи помогут отладить ACL: `access_log` и `error_log`.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 Вывод
|
|
||||||
|
|
||||||
Ты можешь легко реализовать **гибкую систему контроля доступа по группам** в **Angie**, если:
|
|
||||||
|
|
||||||
- Хранишь группы как файлы с IP-диапазонами.
|
|
||||||
- Подключаешь их через `include` в нужные домены.
|
|
||||||
- Генерируешь конфиги автоматически.
|
|
||||||
- Используешь `/control` API для динамического обновления.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚀 Нужны примеры кода?
|
|
||||||
|
|
||||||
Если ты хочешь, могу показать:
|
|
||||||
|
|
||||||
- Пример Python-скрипта, который создаёт группу и домен.
|
|
||||||
- Пример шаблона конфига с Jinja2.
|
|
||||||
- Пример работы с `/control`.
|
|
||||||
|
|
||||||
Напиши, и я подготовлю!
|
|
||||||
@@ -22,3 +22,40 @@ ljuJdjh5ljuJdjh5
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
node exporter install
|
||||||
|
```
|
||||||
|
mkdir /etc/node_exporter
|
||||||
|
|
||||||
|
cat <<EOF > /etc/node_exporter/config.yml
|
||||||
|
basic_auth_users:
|
||||||
|
prometheus: "\$2a\$12\$9fI6ZRV.1FAIRbqH9TnwgOSyCrQ18yMC0AoYcwErYmTD97sfJjMq2"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
wget https://github.com/prometheus/node_exporter/releases/download/v1.9.1/node_exporter-1.9.1.linux-amd64.tar.gz
|
||||||
|
tar -xvf node_exporter-*.tar.gz
|
||||||
|
sudo mv node_exporter-1.9.1.linux-amd64/node_exporter /usr/local/bin/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
rm -rf node_*
|
||||||
|
|
||||||
|
cat <<EOF > /etc/systemd/system/node_exporter.service
|
||||||
|
[Unit]
|
||||||
|
Description=Node Exporter
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=root
|
||||||
|
ExecStart=/usr/local/bin/node_exporter --web.config.file="/etc/node_exporter/config.yml"
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
EOF
|
||||||
|
|
||||||
|
systemctl enable --now node_exporter
|
||||||
|
systemctl start node_exporter
|
||||||
|
|
||||||
|
```
|
||||||
|
|||||||
Reference in New Issue
Block a user