SSCRulesets - простой веб-инструмент для управления рулсетами Clash
SSCRulesets (Super Simple Clash Rulesets) — это лёгкий веб-инструмент для управления и генерации рулсетов для Clash на основе источников Antifilter и пользовательских списков. Проект заточен под создание .list файлов для простого подключения в виде rule-providers в Clash и совместимых приложениях.

Возможности
- Автообновление: свежие списки с Antifilter загружаются каждые 12 часов.
- Переключаемый Antifilter: можно включить или полностью отключить интеграцию с Antifilter одной кнопкой в интерфейсе.
- Веб-редактор: удобное управление списками доменов и IP-адресов через браузер.
- Тёмная/светлая/авто тема: автоматическое переключение по системным настройкам с возможностью ручного выбора.
- Логи в реальном времени: живой журнал всех операций прямо в интерфейсе.
- Безопасность: доступ защищён паролем с хешированием через bcrypt.
- Адаптивный дизайн: удобно работать с мобильных устройств.
- Оптимизировано под Clash: генерирует текстовые
.listфайлы, идеальные дляrule-provider.
Поддерживаемые источники
- IP-листы Antifilter:
allyouneed.lst,community.lst - Домены Antifilter:
domains.lst - Пользовательские списки: создавай и редактируй собственные списки доменов и IP.
Быстрый старт
Docker (рекомендуется)
HTTP
# Создаём директории
mkdir -p /data/sscrulesets/{conf,lists}
chown -R 1000:1000 /data/sscrulesets
# Запускаем контейнер
docker run -d \
--name sscrulesets \
--restart=unless-stopped \
-e PORT=8080 \
-e SESSION_SECRET_KEY=your-very-secret-key \
-v /data/sscrulesets/conf:/app/conf \
-v /data/sscrulesets/lists:/app/lists \
-p 8080:8080 \
zerolabnet/sscrulesets:latest
HTTPS с Let's Encrypt
Выпускаем SSL-сертификат (пример через acme.sh):
# Устанавливаем Let's Encrypt как CA
docker run --rm -it -v /data/acme:/acme.sh neilpang/acme.sh --set-default-ca --server letsencrypt
# Выпускаем сертификат для домена
docker run --rm -it \
-v /data/acme:/acme.sh \
-p 80:80 \
neilpang/acme.sh \
--issue --standalone -d sscr.example.com --email [email protected] -k 2048
Выставляем права:
mkdir -p /data/sscrulesets/{conf,lists}
chown -R 1000:1000 /data/sscrulesets
chown -R 1000:1000 /data/acme/sscr.example.com
Запускаем с HTTPS:
docker run -d \
--name sscrulesets \
--restart=unless-stopped \
-e PORT=443 \
-e USE_HTTPS=1 \
-e HTTPS_CERT_FILE=/acme/fullchain.cer \
-e HTTPS_KEY_FILE=/acme/sscr.example.com.key \
-e SESSION_SECRET_KEY=your-very-secret-key \
-v /data/acme/sscr.example.com:/acme:ro \
-v /data/sscrulesets/conf:/app/conf \
-v /data/sscrulesets/lists:/app/lists \
-p 443:443 \
zerolabnet/sscrulesets:latest
Переменные окружения
| Переменная | Описание | По умолчанию | Обязательно |
|---|---|---|---|
PORT |
Порт сервера | 8080 |
Нет |
SESSION_SECRET_KEY |
Ключ шифрования сессий | Генерируется автоматически | Рекомендуется |
USE_HTTPS |
Включить HTTPS (значение 1) |
0 |
Нет |
HTTPS_CERT_FILE |
Путь к SSL-сертификату | — | При включённом HTTPS |
HTTPS_KEY_FILE |
Путь к приватному ключу SSL | — | При включённом HTTPS |
Использование
- Открой веб-интерфейс: перейди на
http://localhost:8080(или свой домен). - Войди в систему: пароль генерируется при первом запуске и отображается в логах контейнера.
- Редактируй списки: используй веб-редактор для управления списками доменов и IP.
- Подключи списки: ссылки на сгенерированные
.listфайлы находятся в подвале веб-интерфейса — вставь их в конфиг Clash в секциюrule-providers.
Пример конфига Clash:
rule-providers:
proxy-domain:
behavior: classical
type: http
format: text
url: 'https://your-sscrulesets-host/proxy-domain.list'
interval: 1800
path: ./ruleset/proxy-domain.txt
rules:
- RULE-SET,proxy-domain,PROXY
Автоматические префиксы
SSCRulesets автоматически добавляет нужные префиксы для совместимости с Clash при сохранении файла:
- Файлы с суффиксом
-ip.listили_ip.list→ префиксIP-CIDR, - Файлы с суффиксом
-domain.listили_domain.list→ префиксDOMAIN-SUFFIX,
Логика применяется только к строкам без запятой и не являющимся комментариями (#, //, ;). Если строка уже содержит тип вроде DOMAIN-KEYWORD, — она сохранится как есть.
Настройка источников загрузки
Источники можно гибко менять в файле config.json, который создаётся при первом запуске. Секция antifilter_sources использует имя файла назначения как ключ.
Пример config.json:
{
"password": "...",
"default_lists_created": true,
"enable_antifilter": true,
"antifilter_sources": {
"antifilter-ip.list": {
"url": "https://antifilter.download/list/allyouneed.lst",
"prefix": "IP-CIDR,"
},
"my-custom-domains.list": {
"url": "https://example.com/my_domain_list.txt",
"prefix": "DOMAIN-SUFFIX,"
}
}
}
url— адрес источника для загрузки.prefix— префикс, который будет добавлен к каждой строке загруженного списка.
Хранение данных
Конфигурация хранится в /app/conf/config.json, пользовательские списки — в /app/lists. Для сохранения данных между перезапусками монтируй эти директории:
-v /data/sscrulesets/conf:/app/conf \
-v /data/sscrulesets/lists:/app/lists
Безопасность
- Все пароли хешируются через bcrypt.
- Сессионные куки имеют флаги
HttpOnlyиSameSite=Strict. - Доступ к файлам ограничен рабочей директорией списков.
- Реализованы основные security-заголовки: CSP, X-Frame-Options и другие.
- Поддерживается HTTPS с собственными сертификатами.
Горячие клавиши
Ctrl+S/Cmd+S— сохранить содержимое активного редактора.Ctrl+U/Cmd+U— принудительно обновить списки Antifilter.
Исходный код опубликован на GitHub: