Ho abbandonato l’hosting – Hardening – 2a parte

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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.