ma qualcosa non andava come doveva in quanto il report che logwatch mi inviava non era rassicurante:
sshd:
Authentication Failures:
root (161.35.7.205): 3158 Time(s)
root (159.65.119.52): 326 Time(s)
root (45.249.245.88): 199 Time(s)
unknown (159.65.119.52): 154 Time(s)
root (47.77.185.216): 123 Time(s)
unknown (45.249.245.88): 101 Time(s)
...
Significava che il sistema IDS / Firewall non funzionava correttamente.
facendo un controllo con iptables, non vedevo la chain di CrowdSec popolata.
Allora rimuovo iptables ed attivo nftables per avere unaconfigurazione più calzante per CrwodSec, ma intanto verifico le “collection” di CrowdSec che sono utilizzate
cscli collections list
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────
COLLECTIONS
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Name 📦 Status Version Local Path
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────
crowdsecurity/base-http-scenarios ✔️ enabled 1.2 /etc/crowdsec/collections/base-http-scenarios.yaml
crowdsecurity/http-cve ✔️ enabled 2.9 /etc/crowdsec/collections/http-cve.yaml
crowdsecurity/linux ✔️ enabled 0.3 /etc/crowdsec/collections/linux.yaml
crowdsecurity/nginx ✔️ enabled 0.2 /etc/crowdsec/collections/nginx.yaml
crowdsecurity/postfix ✔️ enabled 0.4 /etc/crowdsec/collections/postfix.yaml
crowdsecurity/sshd ✔️ enabled 0.8 /etc/crowdsec/collections/sshd.yaml
crowdsecurity/whitelist-good-actors ✔️ enabled 0.2 /etc/crowdsec/collections/whitelist-good-actors.yaml
─────────────────────────────────────────────────────────────────────────────────────────────────────────────────
e verifico che sia sshd che nginx siano attivi.
Con iptables avevo avuto diversi roblemi ed allora faccio il passo successivo, passare a nftables, ma qui mi imbatto in un altro problema: la versione di nftables configurate su ubuntu 2024.04 LTS era vecchiotta (1.0.9) ed allora aggiorno la versione di Ubuntu alla 2025.10: una macchina effettivamente esposta su internet deve essere effettivamente superaggiornata.
Le regole di UFW erano minimali, solo http, https e smtp sono abilitate, quindi il passaggio su nftables risulta semplice ed il passaggio verso nftables, ha perfettamente integrato il bouncer di cCrowdSec per il firewall (crowdsec-firewall-bouncer).
# Svuota regole esistenti
sudo nft flush ruleset
# Crea tabella inet "filter"
sudo nft add table inet filter
# Creazione chain
sudo nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; }
sudo nft add chain inet filter forward { type filter hook forward priority 0 \; policy drop \; }
sudo nft add chain inet filter output { type filter hook output priority 0 \; policy accept \; }
# Permetti loopback
sudo nft add rule inet filter input iif lo accept
# Permetti connessioni già stabilite
sudo nft add rule inet filter input ct state established,related accept
# SSH sulla porta 2222
sudo nft add rule inet filter input tcp dport 1022 ct state new,established accept
# HTTP/HTTPS
sudo nft add rule inet filter input tcp dport 443 accept
# WireGuard
sudo nft add rule inet filter input udp dport 51820 accept
# Posta SMTP
sudo nft add rule inet filter input tcp dport 25 accept
sudo nft add rule inet filter input tcp dport 465 accept
sudo nft add rule inet filter input tcp dport 587 accept
# Reti interne wg0 (VPN)
sudo nft add rule inet filter input iifname "wg0" accept
# Abilita IPv6 regole equivalenti
sudo nft add rule inet filter input ip6 dport 1022 ct state new,established accept
sudo nft add rule inet filter input ip6 dport 443 accept
sudo nft add rule inet filter input ip6 dport 51820 accept
sudo nft add rule inet filter input ip6 dport 25 accept
sudo nft add rule inet filter input ip6 dport 465 accept
sudo nft add rule inet filter input ip6 dport 587 accept
# Salva regole
sudo nft list ruleset > /etc/nftables.conf
sudo systemctl enable nftables
sudo systemctl restart nftables
Le istruzioni per attivare nftables. Tuttavia i miei container ora non vanno su internet: UFW faceva in automatico nat e postforwarding per le reti interna, come prima cosa attivare il forward a livello di SO
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
e poi
nft add table inet filter
nft add chain inet filter forward { type filter hook forward priority
nft add rule inet filter forward iifname "docker0" accept
nft add rule inet filter forward oifname "docker0" accept
nft add rule inet filter forward iifname "br-*" accept
nft add rule inet filter forward oifname "br-*" accept
nft add rule inet filter forward ct state related,established accept
nft add rule ip nat postrouting oifname "eth0" masquerade
ed i problemi del roting dovrebbero essere risolti. Salvare la configurazione con
nft list ruleset > /etc/nftables.conf
Aggiungere il bouncer in CrowdSec tamite
cscli bouncers add cs-firewall-bouncer
e copiare la chiave per inserirla nel file
vi /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
In quanto il bouncer deve sare come interagira con il firewall e prestare particolare attenzione alle righe
mode: nftables
api_key: <chiave api>
dovrebbe essere sufficiente un
systemctl restart crowdsec-firewall-bouncer
Pwe evitare di essere sempre sotto attacco umentiamo il tempo di “ban” degli ip impostando nel file
vi /etc/crowdsec/profiles.yaml
name: default_ip_remediation
#debug: true
filters:
- Alert.Remediation == true && Alert.GetScope() == "Ip"
decisions:
- type: ban
duration: 72h
Se tutto pè andato a posto, allora
cscli decisions list
╭─────────┬──────────┬────────────────────┬───────────────────────────┬────────┬─────────┬──────────────────────────────────────────────────────────────┬────────┬────────────┬──────────╮
│ ID │ Source │ Scope:Value │ Reason │ Action │ Country │ AS │ Events │ expiration │ Alert ID │
├─────────┼──────────┼────────────────────┼───────────────────────────┼────────┼─────────┼──────────────────────────────────────────────────────────────┼────────┼────────────┼──────────┤
│ 3695122 │ crowdsec │ Ip:1.20.91.61 │ crowdsecurity/ssh-bf │ ban │ TH │ 23969 TOT Public Company Limited │ 6 │ 60h20m50s │ 50546 │
│ 3695121 │ crowdsec │ Ip:185.43.10.11 │ crowdsecurity/ssh-bf │ ban │ RU │ 48573 PHAETON PLUS d.o.o │ 6 │ 60h10m26s │ 50545 │
│ 3695120 │ crowdsec │ Ip:190.56.162.181 │ crowdsecurity/ssh-bf │ ban │ GT │ 14754 TELECOMUNICACIONES DE GUATEMALA, SOCIEDAD ANONIMA │ 6 │ 60h2m58s │ 50544 │
│ 3695119 │ crowdsec │ Ip:196.188.93.169 │ crowdsecurity/ssh-bf │ ban │ ET │ 24757 Ethiopian Telecommunication Corporation │ 6 │ 59h49m52s │ 50543 │
e nella configurazione di nftables con
table inet filter {
set crowdsec_blacklist {
type ipv4_addr
flags interval
elements = { 1.20.91.61, 2.60.252.90,
2.74.192.203, 5.141.122.210,
8.208.115.249, 8.209.246.104,
8.220.132.38, 27.71.60.22,
31.42.184.183, 34.105.10.118,
41.111.128.195, 43.99.242.163,
43.162.97.123, 43.250.107.144,
e l’ip indicato sarà bannato per altre 60 ore.
Questi appunti sono il risultato di diversi aggiustamenti, e non ho tenuto traccia precisa di quanto facevo ed ho ricostruito a posteriori le mie azioni, per cui qualcosa potrebbe non essere completa, ma almeno ho una traccia su cui lavorare.
