mirror of
https://github.com/LowderPlay/cheburcheck.git
synced 2026-09-22 22:37:59 +03:00
feat: automatic reporting
This commit is contained in:
Generated
+2
-2
@@ -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
@@ -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
@@ -1,4 +1,5 @@
|
||||
# Cheburcheck Reporter
|
||||
[](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`).
|
||||
|
||||
@@ -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
|
||||
@@ -0,0 +1,10 @@
|
||||
[Unit]
|
||||
Description=Run Cheburchecker for 1M domains
|
||||
|
||||
[Timer]
|
||||
OnCalendar=daily
|
||||
Persistent=true
|
||||
Unit=cheburchecker@1000000.service
|
||||
|
||||
[Install]
|
||||
WantedBy=timers.target
|
||||
@@ -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
@@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "website"
|
||||
version = "0.2.1"
|
||||
version = "0.2.2"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@@ -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)?))
|
||||
}
|
||||
|
||||
@@ -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> — раз в 12 часов.</li>
|
||||
<li><a href="/kb/whitelist">Белые списки</a> — топ-100,000 раз в 6 часов; топ-1,000,000 раз в сутки.</li>
|
||||
<li><a href="https://antifilter.download/">Домены из Реестра РКН</a> — раз в полчаса.</li>
|
||||
<li><a href="https://antifilter.network/">Подсети из Реестра РКН</a> — раз в час.</li>
|
||||
</ul>
|
||||
|
||||
@@ -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>
|
||||
* — Мы не включаем в это число домены из зоны .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>
|
||||
|
||||
Reference in New Issue
Block a user