From af3da4aca3952c969efc9a840961b89e3abfc166 Mon Sep 17 00:00:00 2001 From: erjemin Date: Mon, 19 May 2025 23:37:36 +0300 Subject: [PATCH] =?UTF-8?q?add:=20=D0=97=D0=B0=D1=89=D0=B8=D1=82=D0=B0=20?= =?UTF-8?q?=D1=85=D0=BE=D1=81=D1=82=D0=B0=20=D1=81=20=D0=BF=D0=BE=D0=BC?= =?UTF-8?q?=D0=BE=D1=89=D1=8C=D1=8E=20CrowdSec=20............?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../host-protection-with-crowdsec.md | 61 ++++++++++++++++++- 2 files changed, 60 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 29b0b60..a20c104 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ * [k8s (кubernetes) на Orange Pi (драфт...)](raspberry-and-orange-pi/k8s.md) * [k3s (кubernetes) на Orange Pi](raspberry-and-orange-pi/k3s.md) * [Перекомпиляция ядра Linux (включение пподдержки iSCSI в Orange Pi 5 Plus](raspberry-and-orange-pi/opi5plus-rebuilding-linux-kernel-for-iscsi.md) -* [Защита хоста с помощью CrowdSec](raspberry-and-orange-pi/host-protection-with-crowdsec.md) +* [Защита хоста с помощью CrowdSec](raspberry-and-orange-pi/host-protection-with-crowdsec.md), включая GeoIP блокировки * ## Nginx / Apache * [Ограничение доступа по User-Agent (на примере GPTBot)](nginx/nginx-ban-user-agent.md) diff --git a/raspberry-and-orange-pi/host-protection-with-crowdsec.md b/raspberry-and-orange-pi/host-protection-with-crowdsec.md index 6971424..ca37fe3 100644 --- a/raspberry-and-orange-pi/host-protection-with-crowdsec.md +++ b/raspberry-and-orange-pi/host-protection-with-crowdsec.md @@ -661,7 +661,7 @@ sudo cscli decisions list ``` ---- -###### Web-панель +#### Web-панель Плюсом CrowdSec является то, что благодаря обмену информацией о блокировках, в личном кабинете на сайте CrowdSec можно посмотреть ваши локальные блокировки через веб-интерфейсе: @@ -669,7 +669,7 @@ sudo cscli decisions list ![crowdsec--security-panel.png](../images/crowdsec--security-panel.png) ---- -##### Управление блокировками +#### Управление блокировками Можно добавить бан вручную (по умолчанию: `duration:4h` и `type:ban`): ```shell @@ -685,5 +685,62 @@ sudo cscli decisions delete --range yyy.yyy.yyyy.yyy/24 sudo cscli decisions delete --all ``` +#### Блокировки по GeoIP +Проверим, что у нас есть парсер на основе GeoIP: +```shell +sudo cscli parsers lis +``` + +Увидим в числе прочих: +```text + PARSERS +────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── + Name 📦 Status Version Local Path +────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── +crowdsecurity/geoip-enrich ✔️ enabled 0.5 /etc/crowdsec/parsers/s02-enrich/geoip-enrich.yaml +``` + +Он обогащает события (events) GeoIP-информацией: страна, город, ASN, континент и так далее, но сам ничего не блокирует — +он просто добавляет поля к событиям. Но это делает возможным создание собственных фильтров и сценариев, +завязанных на геолокацию. Используется двухбуквенный код страны (стандарт ISO-3166-1 alpha-2). + +Создадим свой сценарий, например, для Китая и Кореи (вот честно, ничего против этих стра не миею, от из их региона +больше всего атак на мой SSH): +```shell +sudo nano /etc/crowdsec/scenarios/ban-cn--geoip.yaml +``` + +И вставим туда: +```yaml +# /etc/crowdsec/scenarios/ban-cn--geoip.yaml +# Бан по GeoIP для Китая и Кореи +type: trigger +name: local/ban-russian-ips +description: "Ban any IP from China & Korea" +# filter: evt.Meta.geoip_country == 'CN' +filter: evt.Meta.geoip_country == 'CN' or evt.Meta.geoip_country == 'KR' +groupby: evt.Meta.source_ip +labels: + country_ban: CN + remediation: true + classification: + - abuse + behavior: "geoip:ban" + confidence: 5 + label: "GeoIP Country Ban" + manual: true +``` + +Как видно, это `trigger`-сценарий, он срабатывает при одиночном совпадении, без необходимости "накопить +события", как в `leaky`. + +Перезапустим CrowdSec: +```shell +sudo systemctl restart crowdsec +``` + +Теперь CrowdSec будет автоматически блокировать все новые IP из указанных стран при появлении их в логах. Для SSH, +в моем случае. Но принцип понятен. И если честно, можно вообще все страны забанить, кроме тех, где бываю в отпуске. +Нечего им делать на моем сервере. :)