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

Использование

  1. Открой веб-интерфейс: перейди на http://localhost:8080 (или свой домен).
  2. Войди в систему: пароль генерируется при первом запуске и отображается в логах контейнера.
  3. Редактируй списки: используй веб-редактор для управления списками доменов и IP.
  4. Подключи списки: ссылки на сгенерированные .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:

GitHub - zerolabnet/SSCRulesets: Super Simple Clash Rulesets: A simple and convenient web-based tool for managing and generating rulesets for Clash and similar applications
Super Simple Clash Rulesets: A simple and convenient web-based tool for managing and generating rulesets for Clash and similar applications - zerolabnet/SSCRulesets