{ "meta": { "title": "Fail2Ban | Documentazione ProxMenux", "description": "Installa Fail2Ban con tre jails ottimizzati per Proxmox (SSH aggressivo, Proxmox UI 8006, ProxMenux Monitor 8008). Include la correzione journald MaxLevelStore, servizi di registro personalizzati per l'affidabilità, backend nftables/iptables rilevati automaticamente e SSH MaxAuthTries rafforzamento.", "ogTitle": "Fail2Ban | Documentazione ProxMenux", "ogDescription": "Protezione contro la forza bruta per SSH e le interfacce web Proxmox, con correzioni di journald e del backend specifiche per Proxmox." }, "header": { "title": "Fail2Ban", "description": "Installa Fail2Ban per Proxmox: tre jail (SSH aggressivo, interfaccia Proxmox su 8006, ProxMenux Monitor su 8008 e proxy inverso), correzione del livello journald per salvare gli eventi SSH, due servizi che copiano il journal in file per aggirare un problema del backend systemd, rilevamento del backend firewall e rafforzamento SSH con MaxAuthTries.", "section": "Sicurezza" }, "intro": { "title": "Cosa fa", "body": "Installa Fail2Ban dai repository Debian e scrive una configurazione Proxmox che protegge subito SSH, interfaccia web Proxmox e ProxMenux Monitor. Se rileva una installazione esistente, offre invece un menu per reinstallare o rimuovere." }, "firstLaunch": { "heading": "dialogo di primo lancio", "body": "Se Fail2Ban non è installato, lo script mostra una conferma con ciò che installerà e configurerà. Annulla termina senza modifiche; confermare avvia l'installazione.", "imageAlt": "Conferma di installazione di Fail2Ban con tre jail, correzione di journald e rafforzamento SSH" }, "jails": { "heading": "Le tre jail", "headerJail": "Jail", "headerProtects": "Protegge", "headerRetries": "Tentativi / Finestra", "headerBan": "Durata del blocco", "rows": [ { "jail": "[sshd]", "protects": "SSH (modalità aggressive — include ddos, mode, normal)", "retries": "2 / 60 min", "ban": "9 ore" }, { "jail": "[proxmox]", "protects": "Proxmox web UI (porta 8006)", "retries": "3 / 10 min", "ban": "1 ora" }, { "jail": "[proxmenux]", "protects": "ProxMenux Monitor (porta 8008 + proxy inverso http/https)", "retries": "3 / 10 min", "ban": "1 ora" } ], "outro": "Impostazioni predefinite globali da jail.local: ignoreip = 127.0.0.1/8 ::1, ignoreself = true, bantime = 86400 (fallback di 24 ore per jails che non lo sovrascrivono), maxretry = 2, findtime = 1800." }, "journald": { "heading": "Perché la correzione journald è importante", "intro": "Proxmox fornisce /etc/systemd/journald.conf con MaxLevelStore=warning. journald scarta i messaggi di livello inferiore a warning prima di salvarli. SSH e PAM segnalano gli errori di autenticazione ai livelli info / notice, quindi:", "diagram": { "sshLabel": "SSH / PAM", "sshDetail": "errore di autenticazione\n(livello info / notice)", "journaldLabel": "journald", "journaldDetail": "MaxLevelStore=warning\n→ evento scartato senza avviso", "fail2banLabel": "Fail2Ban", "fail2banDetail": "non vede niente\n→ non vieta mai nulla", "arrowLabel": "Proxmox predefinito" }, "afterDiagram": "L'installatore rileva questo e scrive un drop-in a /etc/systemd/journald.conf.d/proxmenux-loglevel.conf aumentando sia MaxLevelStore che MaxLevelSyslog a info:", "code": "[Journal]\nMaxLevelStore=info\nMaxLevelSyslog=info", "outro": "Poi riavvia systemd-journald. Il drop-in viene rimosso su disinstallazione, ripristinando il default Proxmox originale." }, "loggers": { "heading": "Perché due servizi logger personalizzati", "intro1": "Fail2Ban può leggere direttamente il journal systemd (backend = systemd), ma su Proxmox questo backend ha problemi noti con i processi worker di pvedaemon: gli eventi di autenticazione compaiono nel journal ma non sempre vengono rilevati. Il problema riguarda occasionalmente anche sshd.", "intro2": "ProxMenux crea due piccoli servizi systemd che seguono le unità interessate con journalctl -f e aggiungono ogni riga a un file. Fail2Ban legge questi file con il backend affidabile backend = auto (modalità file):", "headerService": "Servizio", "headerSource": "Unità di origine", "headerOutput": "File di uscita", "rows": [ { "service": "proxmox-auth-logger.service", "source": "pvedaemon.service", "output": "/var/log/proxmox-auth.log" }, { "service": "ssh-auth-logger.service", "source": "ssh.service", "output": "/var/log/ssh-auth.log" } ], "outro": "Entrambi i servizi sono dichiarati PartOf=fail2ban.service in modo da riavviare con Fail2Ban e fermarsi con esso. Modalità 640 di proprietà di root:adm sui file di registro. Il terzo registro utilizzato dalla prigione [proxmenux] (/var/log/proxmenux-auth.log) è scritto direttamente dall'app ProxMenux Monitor Flask — nessun servizio logger necessario per questo." }, "backend": { "heading": "Auto-detezione backend Firewall", "intro": "L'installatore sonda l'host: se nft list ruleset funziona, sceglie nftables come l'azione di divieto. In caso contrario torna a iptables-multiport / iptables-allports. La scelta è scritta in jail.local:", "code": "# nftables host\nbanaction = nftables\nbanaction_allports = nftables[type=allports]\n\n# iptables host (fallback)\nbanaction = iptables-multiport\nbanaction_allports = iptables-allports" }, "hardening": { "heading": "Rafforzamento SSH: MaxAuthTries", "intro": "Il controllo Lynis SSH-7408 raccomanda MaxAuthTries 3 in sshd_config. La jail SSH usa maxretry = 2 per bloccare dopo errori ripetuti; MaxAuthTries limita i tentativi nella stessa connessione. Questa impostazione aggiunge protezione anche quando Fail2Ban è fermo per manutenzione.", "installerIntro": "L'installatore:", "items": [ "Legge il valore attuale di MaxAuthTries (o di default a 6 se assente).", "Lo salva a /usr/local/share/proxmenux/sshd_maxauthtries_backup.", "Modifica sshd_config direttamente: sostituisce la riga esistente, rimuove il commento dalla riga commentata o ne aggiunge una nuova.", "Ricarica sshd senza riavviarlo, mantenendo attive le sessioni esistenti." ], "outro": "Su disinstallazione, il valore originale salvato viene ripristinato e sshd viene ricaricato di nuovo." }, "manage": { "heading": "Gestire un'installazione esistente", "intro": "Se Fail2Ban è già installato, lo script lo rileva e mostra un menu di gestione invece di ripetere l'installazione.", "headerAction": "Azione", "headerWhat": "Che cosa fa", "rows": [ { "action": "Reinstallare", "what": "Esegue nuovamente l'installazione completa e riscrive tutte le jail con i valori attuali di ProxMenux. Usalo quando un aggiornamento modifica le raccomandazioni." }, { "action": "Rimuovi", "what": "Arresta fail2ban e i due servizi di logger, elimina il pacchetto apt, rimuove tutti i jail / file filtro, elimina il drop-in journald (ripristinando le impostazioni predefinite di Proxmox) e ripristina il SSH originale MaxAuthTries." } ] }, "verify": { "heading": "Verifica che funzioni.", "intro": "Dopo l'installazione, comandi utili dall'host:", "code": "# Service status and version\nsystemctl status fail2ban\nfail2ban-client --version\n\n# All active jails\nfail2ban-client status\n\n# Detail on one jail\nfail2ban-client status sshd\nfail2ban-client status proxmox\nfail2ban-client status proxmenux\n\n# Currently banned IPs in a jail\nfail2ban-client status sshd | grep \"Banned IP\"\n\n# Manually unban an IP (use this if you ban yourself)\nfail2ban-client unban 192.0.2.10\n\n# Tail the auth logs Fail2Ban watches\ntail -f /var/log/ssh-auth.log\ntail -f /var/log/proxmox-auth.log\ntail -f /var/log/fail2ban.log" }, "troubleshoot": { "heading": "Risoluzione dei problemi", "neverBansTitle": "Fail2Ban corre ma non vieta mai nulla", "neverBansBody": "Verifica che tail -f /var/log/ssh-auth.log riceva una voce dopo un tentativo SSH con password errata da un'altra macchina. Se rimane vuoto, controlla systemctl status ssh-auth-logger.service. Se il logger è attivo, consulta gli eventi recenti con journalctl -u ssh.service -n 50 --no-pager -p info e verifica che il drop-in journald consenta il livello info.", "monitorEmptyTitle": "ProxMenux Monitor jail non ha voci anche dopo accessi non riusciti", "monitorEmptyBody": "Il [proxmenux] jail legge /var/log/proxmenux-auth.log, che è scritto dall'app ProxMenux Monitor Flask - non da un logger journald. Se non esegui il Monitor, il file rimane vuoto e il jail non si attiva mai. Questo è previsto; la configurazione jail è innocua. Se esegui il Monitor e il registro è vuoto, controlla la configurazione di registrazione Flask.", "selfBanTitle": "Ho bloccato il mio stesso accesso", "selfBanIntro": "Da una console / IPMI / iKVM (o da un altro IP whitelist):", "selfBanCode": "fail2ban-client unban '<'YOUR_IP'>'\n\n# To prevent it next time, edit /etc/fail2ban/jail.local and add your IP:\nignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 203.0.113.42\n\n# Then reload\nfail2ban-client reload", "aptFailTitle": "apt-get non riesce: ''Unable to locate package fail2ban''", "aptFailBody": "L'host manca il repos Debian (comune sulle installazioni di Barebones Proxmox). L'installatore rileva questo e scrive /etc/apt/sources.list.d/debian.sources con il nome giusto in codice (bookworm / trixie) prima di riprovare. Se non riesce ancora, controllare /etc/os-release per VERSION_CODENAME e confermare che l'URL repo è raggiungibile.", "lockoutTitle": "SSH mi blocca dopo l'installazione", "lockoutBody": "L'installatore imposta MaxAuthTries=3. Se il tuo password manager / agente richiama più chiavi, puoi superarlo su un singolo tentativo di connessione. Limitare le chiavi offerte: ssh -o IdentitiesOnly=yes -i ~/.ssh/specific_key user@host. O sollevare temporaneamente MaxAuthTries in sshd_config mentre si debug." }, "files": { "heading": "File scritti", "code": "/etc/fail2ban/jail.local # global defaults + [sshd]\n/etc/fail2ban/jail.d/proxmox.conf # [proxmox]\n/etc/fail2ban/jail.d/proxmenux.conf # [proxmenux]\n/etc/fail2ban/filter.d/proxmox.conf # auth-failure regex for pvedaemon\n/etc/fail2ban/filter.d/proxmenux.conf # auth-failure regex for Monitor\n/etc/systemd/system/proxmox-auth-logger.service # journal → file (pvedaemon)\n/etc/systemd/system/ssh-auth-logger.service # journal → file (sshd)\n/etc/systemd/journald.conf.d/proxmenux-loglevel.conf # MaxLevelStore=info\n/etc/ssh/sshd_config # MaxAuthTries=3 (in-place edit)\n/var/log/proxmox-auth.log # written by logger service\n/var/log/ssh-auth.log # written by logger service\n/var/log/proxmenux-auth.log # written by Monitor Flask app\n/usr/local/share/proxmenux/sshd_maxauthtries_backup # for restore on uninstall" }, "related": { "heading": "Correlati", "monitorLabel": "ProxMenux Monitor → Scheda di sicurezza", "monitorTail": " — installazione dal pannello, stato delle jail in tempo reale, IP bloccati e regolazione di tentativi e durata del blocco per ogni jail dal browser.", "lynisLabel": "Lynis", "lynisTail": " — esegui un audit prima e dopo per verificare che il controllo SSH-7408 sia soddisfatto.", "securityLabel": "Panoramica della sicurezza", "securityTail": "— di nuovo alla panoramica della sezione." } }