{ "meta": { "title": "Fail2Ban | Documentação do ProxMenux", "description": "Instalar Fail2Ban com três jails sintonizado para Proxmox (SSH agressivo, Proxmox UI 8006, ProxMenux Monitor 8008). Inclui o journald MaxLevelStore correção, serviços de log personalizados para confiabilidade, backend nftables/iptables detectado automaticamente e SSH MaxAuthTries endurecimento.", "ogTitle": "Fail2Ban | Documentação do ProxMenux", "ogDescription": "Proteção contra força bruta para SSH e interfaces web Proxmox, com correções do journald e do backend específicas para Proxmox." }, "header": { "title": "Fail2Ban", "description": "Instala Fail2Ban para Proxmox: três jails (SSH agressivo, interface Proxmox em 8006, ProxMenux Monitor em 8008 e proxy inverso), correção do nível do journald para guardar eventos SSH, dois serviços que copiam o journal para ficheiros para contornar um problema do backend systemd, deteção do backend de firewall e reforço SSH com MaxAuthTries.", "section": "Segurança" }, "intro": { "title": "O que isto faz", "body": "Instala Fail2Ban dos repositórios Debian e cria uma configuração Proxmox que protege de imediato SSH, interface web Proxmox e ProxMenux Monitor. Se detetar uma instalação existente, oferece um menu de gestão para reinstalar ou remover." }, "firstLaunch": { "heading": "Janela de primeiro lançamento", "body": "Sem Fail2Ban instalado, o script resume num diálogo o que vai instalar e configurar. Cancelar termina sem alterações; confirmar inicia a instalação.", "imageAlt": "Confirmação de instalação do Fail2Ban com três jails, correção do journald e reforço SSH" }, "jails": { "heading": "As três jails", "headerJail": "Jail", "headerProtects": "Protege", "headerRetries": "Tentativas / Janela", "headerBan": "Duração do bloqueio", "rows": [ { "jail": "[sshd]", "protects": "SSH (modo aggressive — inclui ddos, mode, normal)", "retries": "2 / 60 min", "ban": "9 horas" }, { "jail": "[proxmox]", "protects": "Interface web do Proxmox (porta 8006)", "retries": "3 / 10 min", "ban": "1 hora" }, { "jail": "[proxmenux]", "protects": "ProxMenux Monitor (porta 8008 + proxy inverso http/https)", "retries": "3 / 10 min", "ban": "1 hora" } ], "outro": "Defaults globais de jail.local: ignoreip = 127.0.0.1/8 ::1, ignoreself = true, bantime = 86400 (fallback de 24h para prisões que não o sobrepõem), maxretry = 2, findtime = 1800." }, "journald": { "heading": "Por que a correção journald é importante", "intro": "O Proxmox fornece /etc/systemd/journald.conf com MaxLevelStore=warning. O journald descarta as mensagens de nível inferior a warning antes de as guardar. SSH e PAM emitem falhas de autenticação nos níveis info / notice, pelo que:", "diagram": { "sshLabel": "SSH / PAM", "sshDetail": "falha de autenticação\n(nível info / notice)", "journaldLabel": "journald", "journaldDetail": "MaxLevelStore=warning\n→ evento descartado sem aviso", "fail2banLabel": "Fail2Ban", "fail2banDetail": "não vê nada\n→ nunca proíbe nada", "arrowLabel": "Proxmox por omissão" }, "afterDiagram": "O instalador detecta isso e escreve um drop-in em /etc/systemd/journald.conf.d/proxmenux-loglevel.conf elevando tanto MaxLevelStore quanto MaxLevelSyslog para info:", "code": "[Journal]\nMaxLevelStore=info\nMaxLevelSyslog=info", "outro": "Em seguida, reinicia systemd-journald. O drop-in é removido ao desinstalar, restaurando o padrão original do Proxmox." }, "loggers": { "heading": "Porquê dois serviços de registo personalizado", "intro1": "O Fail2Ban pode ler diretamente o journal do systemd (backend = systemd), mas no Proxmox este backend tem problemas conhecidos com processos worker de pvedaemon: os eventos de autenticação aparecem no journal mas nem sempre são detetados. O problema também afeta ocasionalmente sshd.", "intro2": "O ProxMenux cria dois pequenos serviços systemd que acompanham as unidades relevantes com journalctl -f e acrescentam cada linha a um ficheiro. O Fail2Ban lê esses ficheiros com o fiável backend = auto (modo ficheiro):", "headerService": "Serviço", "headerSource": "Unidade de origem", "headerOutput": "Ficheiro de saída", "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": "Ambos os serviços são declarados PartOf=fail2ban.service para que eles reiniciar com Fail2Ban e parar com ele. Modo 640 de propriedade do root:adm nos arquivos de log. O terceiro log usado pela cadeia [proxmenux] (/var/log/proxmenux-auth.log) é escrito diretamente pelo aplicativo ProxMenux Monitor Flask — nenhum serviço de registrador necessário para esse." }, "backend": { "heading": "Deteção automática do backend de firewall", "intro": "O instalador sonda o host: se o nft list ruleset funcionar, ele escolhe o nftables como ação de ban. Caso contrário, volta para iptables-multiport / iptables-allports. A escolha é escrita em 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": "Reforço SSH: MaxAuthTries", "intro": "O controlo Lynis SSH-7408 recomenda MaxAuthTries 3 em sshd_config. A jail SSH utiliza maxretry = 2 para bloquear após falhas repetidas; MaxAuthTries limita as tentativas numa ligação. Este ajuste SSH acrescenta defesa em profundidade, mesmo quando Fail2Ban está parado para manutenção.", "installerIntro": "O instalador:", "items": [ "Lê o valor atual do MaxAuthTries (ou padrão para 6 se ausente).", "Guarda-o em /usr/local/share/proxmenux/sshd_maxauthtries_backup.", "Edita sshd_config diretamente: substitui a linha existente, remove o comentário da linha comentada ou acrescenta uma nova.", "Recarrega o sshd (recarregar, não reiniciar, para manter as sessões existentes vivas)." ], "outro": "Na desinstalação, o valor original salvo é restaurado e sshd é recarregado novamente." }, "manage": { "heading": "Gerenciar uma instalação existente", "intro": "Se o Fail2Ban já estiver instalado quando você abrir o menu, o script detecta-o e mostra um menu de gerenciamento em vez de repetir o instalador:", "headerAction": "Ação", "headerWhat": "O que ele faz", "rows": [ { "action": "Reinstalar", "what": "Repete a instalação completa e reescreve todas as jails com os valores atuais do ProxMenux. Utilize quando uma atualização alterar as recomendações." }, { "action": "Remover", "what": "Para fail2ban e os dois serviços de registro, limpa o pacote apt, remove todos os jail / arquivos de filtro, exclui o drop-in journald (restaurando o padrão do Proxmox) e restaura o SSH original MaxAuthTries." } ] }, "verify": { "heading": "Verifica se está a funcionar.", "intro": "Após a instalação, comandos úteis da máquina:", "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": "Resolução de Problemas", "neverBansTitle": "O Fail2Ban é executado mas nunca proíbe nada", "neverBansBody": "Verifique se tail -f /var/log/ssh-auth.log recebe uma entrada após uma tentativa SSH com palavra-passe errada a partir de outra máquina. Caso contrário, consulte systemctl status ssh-auth-logger.service. Se o serviço estiver ativo, veja os eventos recentes com journalctl -u ssh.service -n 50 --no-pager -p info e confirme que o complemento journald permite o nível info.", "monitorEmptyTitle": "A jail ProxMenux Monitor não tem entradas mesmo após inícios de sessão falhados", "monitorEmptyBody": "O [proxmenux] jail lê /var/log/proxmenux-auth.log, que é escrito pelo aplicativo ProxMenux Monitor Flask — não por um criador de logs journald. Se você não executar o Monitor, o arquivo permanecerá vazio e o jail nunca será acionado. Isso é esperado; a configuração jail é inofensiva. Se você executar o Monitor e o log estiver vazio, verifique a configuração de registro do Flask.", "selfBanTitle": "Eu bani-me.", "selfBanIntro": "A partir de uma consola / IPMI / iKVM (ou de outro IP autorizado):", "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": "O apt-get falha: ''Unable to locate package fail2ban''", "aptFailBody": "O host está faltando o Debian repos (comum nas instalações do 'barebones' Proxmox). O instalador detecta isso e escreve /etc/apt/sources.list.d/debian.sources com o codinome certo (bookworm / trixie) antes de tentar novamente. Se ainda falhar, verifique /etc/os-release para VERSION_CODENAME e confirme que o URL do repo está acessível.", "lockoutTitle": "SSH me bloqueia depois de instalar", "lockoutBody": "O instalador define MaxAuthTries=3. Se seu gerenciador de senhas / agente repetir várias chaves, você pode exceder isso em uma única tentativa de conexão. Limite as chaves oferecidas: ssh -o IdentitiesOnly=yes -i ~/.ssh/specific_key user@host. Ou aumentar temporariamente o MaxAuthTries em sshd_config enquanto você depura." }, "files": { "heading": "Ficheiros gravados", "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": "Relacionado", "monitorLabel": "ProxMenux Monitor → Guia de segurança", "monitorTail": " — instalação pelo painel, estado das jails em direto, IPs bloqueados e ajuste de tentativas e duração do bloqueio por jail no navegador.", "lynisLabel": "Lynis", "lynisTail": " — execute uma auditoria antes e depois para confirmar que o controlo SSH-7408 é cumprido.", "securityLabel": "Visão geral da segurança", "securityTail": " — voltar ao panorama da secção." } }