add: Защита хоста с помощью CrowdSec ............

This commit is contained in:
Sergei Erjemin 2025-05-19 23:37:36 +03:00
parent 356a6d72bb
commit af3da4aca3
2 changed files with 60 additions and 3 deletions

View File

@ -31,7 +31,7 @@
* [k8s (кubernetes) на Orange Pi (драфт...)](raspberry-and-orange-pi/k8s.md) * [k8s (кubernetes) на Orange Pi (драфт...)](raspberry-and-orange-pi/k8s.md)
* [k3s (кubernetes) на Orange Pi](raspberry-and-orange-pi/k3s.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) * [Перекомпиляция ядра 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 ## Nginx / Apache
* [Ограничение доступа по User-Agent (на примере GPTBot)](nginx/nginx-ban-user-agent.md) * [Ограничение доступа по User-Agent (на примере GPTBot)](nginx/nginx-ban-user-agent.md)

View File

@ -661,7 +661,7 @@ sudo cscli decisions list
``` ```
---- ----
###### Web-панель #### Web-панель
Плюсом CrowdSec является то, что благодаря обмену информацией о блокировках, в личном кабинете на сайте CrowdSec можно Плюсом CrowdSec является то, что благодаря обмену информацией о блокировках, в личном кабинете на сайте CrowdSec можно
посмотреть ваши локальные блокировки через веб-интерфейсе: посмотреть ваши локальные блокировки через веб-интерфейсе:
@ -669,7 +669,7 @@ sudo cscli decisions list
![crowdsec--security-panel.png](../images/crowdsec--security-panel.png) ![crowdsec--security-panel.png](../images/crowdsec--security-panel.png)
---- ----
##### Управление блокировками #### Управление блокировками
Можно добавить бан вручную (по умолчанию: `duration:4h` и `type:ban`): Можно добавить бан вручную (по умолчанию: `duration:4h` и `type:ban`):
```shell ```shell
@ -685,5 +685,62 @@ sudo cscli decisions delete --range yyy.yyy.yyyy.yyy/24
sudo cscli decisions delete --all 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,
в моем случае. Но принцип понятен. И если честно, можно вообще все страны забанить, кроме тех, где бываю в отпуске.
Нечего им делать на моем сервере. :)