# Fail2ban

## Introdução

Fail2ban é uma ferramenta de segurança de código aberto que protege servidores contra ataques de força bruta e outros tipos de tentativas maliciosas de acesso. Ele monitora logs de sistema e serviços, detecta padrões suspeitos e pode bloquear temporariamente endereços IP ofensivos usando regras de firewall.

> [!NOTA] Importância do Fail2ban 
> Fail2ban é crucial para aumentar a segurança de servidores, reduzindo significativamente o risco de acessos não autorizados através de tentativas repetidas de login.

## Conceitos Fundamentais

1. **Jail**: Conjunto de regras para um serviço específico
2. **Filter**: Define padrões para identificar tentativas de acesso maliciosas
3. **Action**: Ações a serem tomadas quando uma violação é detectada
4. **Ban**: Bloqueio temporário de um endereço IP

## Instalação

Em sistemas baseados em Debian/Ubuntu:

```bash
sudo apt-get install fail2ban
```

Em sistemas baseados em Red Hat/CentOS:

```bash
sudo yum install epel-release
sudo yum install fail2ban
```

## Configuração Básica

O arquivo de configuração principal é `/etc/fail2ban/jail.conf`, mas é recomendado criar e editar `/etc/fail2ban/jail.local`:

```ini
[DEFAULT]
bantime  = 10m
findtime  = 10m
maxretry = 5

[sshd]
enabled = true
port    = ssh
filter  = sshd
logpath = /var/log/auth.log
maxretry = 3
```

## Comandos Úteis

|COMANDO|DESCRIÇÃO|
|---|---|
|fail2ban-client status|Mostra o status geral|
|fail2ban-client status sshd|Mostra status de uma jail específica|
|fail2ban-client set sshd unbanip 192.168.1.100|Desbloqueia um IP específico|

## Casos de Uso

1. **Proteção de SSH**
    
    - Bloquear tentativas repetidas de login SSH
2. **Segurança de Servidor Web**
    
    - Proteger contra ataques de força bruta em formulários de login
3. **Proteção de Serviços de E-mail**
    
    - Bloquear tentativas de spam ou ataques de dicionário em servidores SMTP
4. **Segurança de FTP**
    
    - Prevenir acessos não autorizados a servidores FTP

## Fluxo de Funcionamento

```mermaid
graph TD
    A[Log de Serviço] --> B{Fail2ban Filter}
    B --> |Padrão Detectado| C[Incrementa Contador]
    C --> D{Excede Limite?}
    D --> |Sim| E[Executa Action]
    E --> F[Adiciona Regra no Firewall]
    D --> |Não| G[Continua Monitorando]
    F --> H[Ban Temporário]
    H --> I[Expira Ban]
    I --> J[Remove Regra do Firewall]
```

## Configuração Avançada

### Customização de Filtros

Crie um arquivo em `/etc/fail2ban/filter.d/custom-filter.conf`:

```ini
[Definition]
failregex = ^%(__prefix_line)sAuthentication failure for .* from <HOST>
ignoreregex =
```

### Ações Personalizadas

Crie um arquivo em `/etc/fail2ban/action.d/custom-action.conf`:

```ini
[Definition]
actionban = iptables -I INPUT -s <ip> -j DROP
actionunban = iptables -D INPUT -s <ip> -j DROP
```

## Monitoramento e Logs

- Logs principais em `/var/log/fail2ban.log`
- Use `tail -f /var/log/fail2ban.log` para monitoramento em tempo real

## Otimização de Desempenho

1. Ajuste `findtime` e `maxretry` para equilibrar segurança e falsos positivos
2. Use `dbpurgeage` para limpar entradas antigas do banco de dados
3. Considere usar backend mais eficiente (ex: systemd)

## Troubleshooting Comum

1. **Falsos Positivos**: Ajuste regras ou adicione IPs à whitelist
2. **Fail2ban Não Inicia**: Verifique sintaxe das configurações
3. **Bans Não Aplicados**: Confirme se as ações estão configuradas corretamente

## Considerações de Segurança

1. Mantenha o Fail2ban atualizado
2. Use `ignoreip` para prevenir bloqueio acidental de IPs confiáveis
3. Implemente autenticação de dois fatores como camada adicional de segurança
4. Revise regularmente os logs e ajuste as configurações conforme necessário

## Melhores Práticas

1. Sempre use `jail.local` em vez de editar diretamente `jail.conf`
2. Comece com configurações conservadoras e ajuste conforme necessário
3. Implemente monitoramento para alertar sobre atividades suspeitas
4. Mantenha backups das configurações do Fail2ban

## Integração com Outros Sistemas

- **Firewall**: Integração nativa com iptables, pode ser configurado para outros firewalls
- **Sistemas de Alerta**: Configurar notificações por e-mail ou sistemas de mensagens
- **Análise de Logs**: Integração com ferramentas como ELK Stack para análise avançada

## Alternativas e Complementos

- DenyHosts: Alternativa focada em proteção SSH
- ModSecurity: WAF (Web Application Firewall) para servidores web
- CrowdSec: Sistema de detecção e mitigação de ameaças colaborativo

## Considerações Finais

Fail2ban é uma ferramenta essencial para a segurança de servidores, oferecendo proteção eficaz contra ataques de força bruta e outras tentativas maliciosas de acesso. Sua flexibilidade permite adaptação a diversos cenários de segurança, enquanto sua natureza de código aberto garante constante evolução e suporte da comunidade. Embora poderoso, o Fail2ban deve ser parte de uma estratégia de segurança mais ampla, complementando outras medidas como firewalls, atualizações regulares e práticas seguras de configuração de serviços.

## Etiquetas

#Fail2ban #ServerSecurity #BruteForceProtection #LinuxSecurity #NetworkSecurity

## Leia Também

- [[firewall iptables|Firewall iptables]]
- [[firewall nftables|Firewall nftables]]
- [[boas praticas para gerenciamento de servidores|Boas práticas para gerenciamento de servidores]]