feat: automatic reporting

This commit is contained in:
Lowder
2025-12-16 23:58:02 +05:00
parent 14f1b0c934
commit b0af2770a2
10 changed files with 104 additions and 21 deletions
Generated
+2 -2
View File
@@ -2559,7 +2559,7 @@ checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58"
[[package]]
name = "reporter"
version = "0.1.1"
version = "0.1.2"
dependencies = [
"anyhow",
"clap",
@@ -4225,7 +4225,7 @@ dependencies = [
[[package]]
name = "website"
version = "0.2.1"
version = "0.2.2"
dependencies = [
"dotenvy",
"env_logger",
+7 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "reporter"
version = "0.1.1"
version = "0.1.2"
edition = "2024"
license-file = "../LICENSE"
description = "DPI probe: checks blockage of domains by SNI"
@@ -12,6 +12,12 @@ path = "src/main.rs"
[package.metadata.deb]
name = "cheburchecker"
maintainer = "Lowder <me@lowderplay.dev>"
maintainer-scripts = "debian/"
systemd-units = [
{ unit-name = "cheburchecker", enable = false, start = false },
{ unit-name = "cheburchecker.100k" },
{ unit-name = "cheburchecker.1kk" },
]
[dependencies]
tokio = { workspace = true }
+51 -8
View File
@@ -1,4 +1,5 @@
# Cheburcheck Reporter
[![Build Rust Application](https://github.com/LowderPlay/cheburcheck/actions/workflows/build.yml/badge.svg)](https://github.com/LowderPlay/cheburcheck/actions/workflows/build.yml)
Инструмент для автоматического сканирования и анализа блокировок.
Позволяет сканировать большое количество доменов за короткий срок за счет параллелизации запросов.
@@ -27,16 +28,14 @@ cargo run
Для этого достаточно запустить его:
1. Сохранить результаты в CSV
```shell
cheburchecker output.csv
```
```shell
cheburchecker output.csv
```
2. Отправить результаты в **Cheburcheck Agency**
```shell
cheburchecker -k <API-ключ>
```
```shell
cheburchecker -k <API-ключ>
```
> Для того чтобы получить API-ключ,
> обратитесь по адресу [agency@cheburcheck.ru](mailto:agency@cheburcheck.ru).
@@ -59,3 +58,47 @@ cheburchecker -k <API-ключ>
| `-P, --path <PATH>` | Путь к файлу на сервере | 100MB.bin |
| `-a, --endpoint <AGENCY_ENDPOINT>` | Адрес сервера, на который будут загружены результаты сканирования | https://cheburcheck.ru/agency/report |
| `-k, --key <KEY>` | API-ключ | |
## Автоматическое сканирование по расписанию (Systemd)
Для автоматического и регулярного запуска чекера на Debian-based системах, вы можете использовать systemd таймеры. Этот проект поставляется с преднастроенными systemd юнитами, которые автоматически устанавливаются с помощью `cargo-deb`.
### Установка
1. **Установка пакета:**
При установке автоматически будут размещены systemd юниты и включены таймеры.
```shell
sudo apt install cheburchecker_*.deb
```
2. **Настройка API-ключа (обязательно):**
Чекер отправляет результаты в Cheburcheck Agency. Для этого требуется API-ключ. Его необходимо сохранить в файле `/etc/default/cheburchecker`.
```bash
echo "AGENCY_KEY=ВАШ_API_КЛЮЧ" | sudo tee /etc/default/cheburchecker
```
Замените `ВАШ_API_КЛЮЧ` на ваш реальный ключ.
### Расписание задач
Предусмотрено два автоматических расписания:
* **`cheburchecker.100k.timer`**: Запускает проверку **100,000 доменов** каждые 6 часов (в 06:00, 12:00, 18:00 UTC).
* **`cheburchecker.1kk.timer`**: Запускает проверку **1,000,000 доменов** ежедневно (в 00:00 UTC).
Таймеры настроены таким образом, чтобы не конфликтовать друг с другом.
### Проверка статуса и логов
Вы можете проверить статус таймеров и служб, а также просмотреть их логи:
* **Статус таймеров:**
```bash
systemctl status cheburchecker.100k.timer
systemctl status cheburchecker.1kk.timer
```
* **Логи служб:**
```bash
journalctl -u cheburchecker@100000.service
journalctl -u cheburchecker@1000000.service
```
Отчеты сохраняются в `/var/log/cheburchecker/` с именем файла, включающим количество доменов (например, `report-100000.csv`).
+10
View File
@@ -0,0 +1,10 @@
[Unit]
Description=Run Cheburchecker for 100k domains
[Timer]
OnCalendar=06,12,18:00:00
Persistent=true
Unit=cheburchecker@100000.service
[Install]
WantedBy=timers.target
+10
View File
@@ -0,0 +1,10 @@
[Unit]
Description=Run Cheburchecker for 1M domains
[Timer]
OnCalendar=daily
Persistent=true
Unit=cheburchecker@1000000.service
[Install]
WantedBy=timers.target
+12
View File
@@ -0,0 +1,12 @@
[Unit]
Description=Cheburchecker blocklist checker (count: %i)
After=network.target
[Service]
Type=exec
ExecStart=/bin/sh -c '/usr/bin/cheburchecker --count %i /var/log/cheburchecker/report-%i.csv'
EnvironmentFile=-/etc/default/cheburchecker
ExecStartPre=/bin/mkdir -p /var/log/cheburchecker
User=root
Group=root
LimitNOFILE=16384
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "website"
version = "0.2.1"
version = "0.2.2"
edition = "2024"
[dependencies]
+4 -3
View File
@@ -58,8 +58,9 @@ pub async fn export_csv(
})
}
#[get("/histogram?<filter>")]
pub async fn histogram(mut db: Connection<Db>, filter: Option<bool>) -> Result<Json<Vec<WhitelistHistogramBin>>, Status> {
Ok(Json(collect_histogram(&mut db, 50, 100_000, filter.is_some()).await
#[get("/histogram?<filter>&<limit>")]
pub async fn histogram(mut db: Connection<Db>, filter: Option<bool>, limit: Option<i32>) -> Result<Json<Vec<WhitelistHistogramBin>>, Status> {
let limit = limit.unwrap_or(100_000).clamp(0, 1_000_000);
Ok(Json(collect_histogram(&mut db, 50, limit, filter.is_some()).await
.map_err(|e| Status::InternalServerError)?))
}
+2 -1
View File
@@ -40,7 +40,7 @@
</p>
<a href="/kb/whitelist">Подробнее...</a>
{{ typography::heading(title='Мне написало, что сайт "Заблокирован", но у меня все работает!') }}
{{ typography::heading(title='Мне написало, что сайт «Заблокирован», но у меня все работает!') }}
<p>
Мы не можем с точностью утверждать, заблокирован сайт или нет.
Блокировки Роскомнадзора, зачастую, непредсказуемые, непубличные и незаконные.
@@ -67,6 +67,7 @@
<ul>
<li><a href="https://github.com/123jjck/cdn-ip-ranges">CDN</a> &mdash; раз в 12 часов.</li>
<li><a href="/kb/whitelist">Белые списки</a> &mdash; топ-100,000 раз в 6 часов; топ-1,000,000 раз в сутки.</li>
<li><a href="https://antifilter.download/">Домены из Реестра РКН</a> &mdash; раз в полчаса.</li>
<li><a href="https://antifilter.network/">Подсети из Реестра РКН</a> &mdash; раз в час.</li>
</ul>
+5 -5
View File
@@ -68,17 +68,17 @@ curl: (28) Operation timed out after 5000 milliseconds with 16101 out of 65537 b
<p>
Исходя из анализа 1,000,000 доменов из рейтинга
<a href="https://tranco-list.eu/list/2NPQ9">Tranco list от 26 ноября 2025</a>,
в белом списке содержится около 1000 доменов. Все* домены из списка входят в топ-100,000 рейтинга.
в белом списке содержится около 1000 доменов.
</p>
<i>
* &mdash; Мы не включаем в это число домены из зоны .co.uk, так как по какой-то причине, они все находятся в белом списке.
</i>
<i class="caption">Гистограмма количества доменов относительно их положения в рейтинге</i>
{{ histogram::histogram(endpoint="/whitelist/histogram") }}
<i class="caption">Гистограмма количества доменов относительно их положения в рейтинге (топ-30k, без .co.uk)</i>
{{ histogram::histogram(endpoint="/whitelist/histogram?filter&limit=30000") }}
<br>
<i class="caption">Гистограмма без учета доменов .co.uk</i>
{{ histogram::histogram(id="filtered", endpoint="/whitelist/histogram?filter") }}
<i class="caption">Гистограмма количества доменов относительно их положения в рейтинге (топ-1kk, без .co.uk)</i>
{{ histogram::histogram(id="filtered", endpoint="/whitelist/histogram?limit=1000000") }}
{{ typography::heading(title="Скачать списки") }}
<p>