159 lines
6.0 KiB
Markdown
159 lines
6.0 KiB
Markdown
# 🔒 vAccess для Proxy-сервиса
|
||
|
||
Система контроля доступа для прокси-сервера, аналогичная vAccess для веб-сайтов.
|
||
|
||
## 📁 Структура
|
||
|
||
```
|
||
Proxy_vAccess/
|
||
├── _example_vAccess.conf - Пример конфигурации с комментариями
|
||
├── {domain}_vAccess.conf - Конфигурация для конкретного домена
|
||
└── README.md - Эта документация
|
||
```
|
||
|
||
## 🚀 Как использовать
|
||
|
||
### 1. Создание конфигурации
|
||
|
||
Для каждого прокси-домена создайте файл:
|
||
```
|
||
{ExternalDomain}_vAccess.conf
|
||
```
|
||
|
||
**Пример:**
|
||
- `git.example.ru_vAccess.conf`
|
||
- `api.myservice.com_vAccess.conf`
|
||
- `proxy.domain.org_vAccess.conf`
|
||
|
||
### 2. Синтаксис конфигурации
|
||
|
||
Каждый блок правил начинается с комментария `#`:
|
||
|
||
```conf
|
||
# Описание правила
|
||
type: Allow | Disable
|
||
path_access: /path1/*, /path2/*
|
||
ip_list: 192.168.1.1, 127.0.0.1
|
||
exceptions_dir: /public/*
|
||
url_error: 404 | https://site.com | /error.html
|
||
```
|
||
|
||
## 📋 Параметры правил
|
||
|
||
| Параметр | Обязательный | Описание |
|
||
|----------|--------------|----------|
|
||
| `type` | ✅ Да | `Allow` - разрешить доступ, `Disable` - запретить |
|
||
| `type_file` | ❌ Нет | Расширения файлов через запятую (*.json, *.pdf) |
|
||
| `path_access` | ❌ Нет | Список путей через запятую |
|
||
| `ip_list` | ❌ Нет | Список IP адресов через запятую |
|
||
| `exceptions_dir` | ❌ Нет | Пути-исключения (правило не применяется) |
|
||
| `url_error` | ❌ Нет | Страница ошибки при блокировке |
|
||
|
||
## 🔍 Примеры использования
|
||
|
||
### Пример 1: Админка только с локальных IP
|
||
```conf
|
||
# Разрешаем админку только с определённых IP
|
||
type: Allow
|
||
path_access: /admin/*, /api/admin/*
|
||
ip_list: 127.0.0.1, 192.168.1.100
|
||
url_error: 404
|
||
```
|
||
|
||
### Пример 2: Блокировка определённых IP
|
||
```conf
|
||
# Блокируем подозрительные IP для всего сервиса
|
||
type: Disable
|
||
ip_list: 10.0.0.50, 192.168.1.200
|
||
url_error: https://example.com/blocked
|
||
```
|
||
|
||
### Пример 3: Защита внутренних API
|
||
```conf
|
||
# Блокируем доступ к служебным API
|
||
type: Disable
|
||
path_access: /internal/*, /private/*
|
||
exceptions_dir: /internal/health
|
||
url_error: 404
|
||
```
|
||
|
||
### Пример 4: Доступ только с локальной сети
|
||
```conf
|
||
# Разрешаем доступ к API только с локальных адресов
|
||
type: Allow
|
||
path_access: /api/*
|
||
ip_list: 127.0.0.1, ::1, 192.168.0.0/16
|
||
url_error: 404
|
||
```
|
||
|
||
### Пример 5: Блокировка опасных файлов
|
||
```conf
|
||
# Блокируем исполняемые файлы через прокси
|
||
type: Disable
|
||
type_file: *.php, *.exe, *.sh, *.bat
|
||
path_access: /uploads/*, /files/*
|
||
url_error: 404
|
||
```
|
||
|
||
### Пример 6: Разрешить только определённые типы
|
||
```conf
|
||
# В API разрешаем только JSON и XML
|
||
type: Allow
|
||
type_file: *.json, *.xml, no_extension
|
||
path_access: /api/*
|
||
url_error: 404
|
||
```
|
||
|
||
### Пример 7: Блокировка архивов
|
||
```conf
|
||
# Блокируем скачивание архивов с приватных путей
|
||
type: Disable
|
||
type_file: *.zip, *.rar, *.7z, *.tar.gz
|
||
path_access: /downloads/private/*
|
||
exceptions_dir: /downloads/private/public/*
|
||
url_error: https://example.com/access-denied
|
||
```
|
||
|
||
## ⚙️ Логика работы
|
||
|
||
1. **Порядок проверки:** правила проверяются сверху вниз
|
||
2. **Первое совпадение:** первое подходящее правило срабатывает
|
||
3. **Нет конфига = доступ разрешён:** если файла нет, доступ не ограничен
|
||
4. **Allow правило:** доступ разрешён ТОЛЬКО если ВСЕ условия выполнены
|
||
5. **Disable правило:** доступ запрещён если ЛЮБОЕ условие выполнено
|
||
|
||
## 📊 Логирование
|
||
|
||
Все события vAccess для прокси записываются в:
|
||
```
|
||
WebServer/tools/logs/logs_vaccess_proxy.log
|
||
```
|
||
|
||
Формат логов:
|
||
```
|
||
[2025-10-03 00:45:23] [vAccess-Proxy] 🚫 Доступ запрещён для 192.168.1.50 к git.example.ru/admin
|
||
```
|
||
|
||
## 🔗 Связь с основной системой
|
||
|
||
vAccess для прокси использует **ту же кодовую базу**, что и vAccess для сайтов:
|
||
- Все функции парсинга, проверки IP, путей общие
|
||
- Изменения в логике автоматически применяются везде
|
||
- Единый стиль конфигурации
|
||
|
||
## ⚠️ Важные замечания
|
||
|
||
1. **IP-адреса берутся из соединения** (не из заголовков прокси)
|
||
2. **Порядок правил важен** - специфичные правила размещайте ВЫШЕ общих
|
||
3. **Проверка расширений работает** - можно фильтровать по type_file даже для прокси
|
||
4. **Поддержка подсетей:** можно использовать CIDR нотацию (192.168.0.0/24)
|
||
5. **Множественные расширения:** поддержка файлов типа .tar.gz, .backup.sql
|
||
|
||
## 📞 Поддержка
|
||
|
||
При ошибках парсинга конфигурации:
|
||
1. Проверьте синтаксис в `_example_vAccess.conf`
|
||
2. Убедитесь что у правила есть `type:` и хотя бы одно условие
|
||
3. Посмотрите логи в `logs_vaccess_proxy.log`
|
||
|