IDS com FAIL2BAN
Introdução
IDS é um sistema de detecção de
intrusos que podemos implementar em dois segmentos em rede e sistema.
Iremos abordar o fail2ban, uma poderosa
ferramenta contra tentativas de força bruta ( meio de ataque através
de diversas tentativas de acesso ), esse serviço é muito utilizado em
servidores que respondem diretamente a internet, a configuração acaba sendo muito útil para bloqueio sendo sua
principal vantagem a velocidade.
Funcionamento
Partindo de analises
rigorosas de log como tentativas repetitivas de falhas como por
exemplo em uma tentativa de acesso via SSH em nosso firewall:
Jun 28 20:24:13 serv-firewall unix_chkpwd[1491]: password check
failed for user (root)
Jun 28 20:24:13 serv-firewall sshd[1489]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.122.1 user=root Jun 28 20:24:15 serv-firewall sshd[1489]: Failed password for root from 192.168.122.1 port 54755 ssh2 |
Repare que foi facil detectar esse
acesso indevido onde não obteve sucesso “Failed password for root” foi realizado um registro dessa ação ( LOG ) onde que o sistema não realizou a liberação ( PAM - Modulo de autenticação plugavel ).
Essas tentativas em grande escala poderá sobrecarregar nosso servidor causando uma indisponibilidade então precisamos de um meio de bloqueio dessas ações utilizando IDS.
Essas tentativas em grande escala poderá sobrecarregar nosso servidor causando uma indisponibilidade então precisamos de um meio de bloqueio dessas ações utilizando IDS.
Mas qualquer tentativa que ouvesse erro
ele iria bloquear? Então o que aconteceria quando o usuário errar a
senha?
Podemos configurar de acordo com a necessidade, pelo número de tentativas sucessivas de acordo com uma faixa de tempo e entre outras opções.
Podemos configurar de acordo com a necessidade, pelo número de tentativas sucessivas de acordo com uma faixa de tempo e entre outras opções.
Podemos estipular um tempo em que esse
individuo será bloqueado em horas, dias, semana enfim.
Método
O fail2ban utiliza o próprio netfilter ( iptables ) para o bloqueio e de acordo com o log seria executado essa regra:
# iptables -A INPUT -s 192.168.122.1 –dport 22 -j DROP |
Claro que ele iria realizar uma função
parecida a essa, aplicando essa regra será bloqueado todas as
solicitações futuras de origem a esse host, importante salientar
que apenas bloqueará o acesso ao serviço livrando de futuros
constrangimento.
Esse bloqueio do serviço é segmentado em chain ( cadeias ) especificas para cada jail ( serviços com IDS ativos ).
Hoje o fail2ban tem suporte a diversos serviços como:
Esse bloqueio do serviço é segmentado em chain ( cadeias ) especificas para cada jail ( serviços com IDS ativos ).
Hoje o fail2ban tem suporte a diversos serviços como:
- Apache
- Asterisk
- Dovecot
- Exim
- Lighhttp
- Postfix
- Proftpd
- Qmail
- SSH
- VSFTPD
- Entre outros.
Podemos personalizar toda a estrutura e até mesmo brincar de acordo com a nossa necessidade.
Ambiente
Nosso serviço será implementado em
nosso pátio de servidores que haja solicitação de origem a
internet para que haja maior segurança em nossa rede, lembrando que
será documentado apenas a configuração de forma a mostrar de maneira simples o IDS.
Configuração
Começaremos pela instalaçao do
fail2ban a maioria das
distribuição GNU/Linux já vem com ele pré-compilado em repositorio que podemos instalar com:
# yum install fail2ban |
Ok! Após instalação entenderemos a
estrutura de configuração do fail2ban:
# ls -1 /etc/fail2ban/ action.d fail2ban.conf filter.d jail.conf jail.local |
Arquivos de configuração principal:
- fail2ban.conf → Possui toda a estrutura de configuração do serviço, forma em que o serviço irá se comportar de nivel de log ( ações e comportamentos ), arquivo de socket entre outros.
- jail.conf → Principal arquivo para ativação dos serviços como SSH, VOIP, HTTP, MAIL, FTP, PAM e entre outros.
Além disso podemos fornecer parâmetros:
- “ ignoreip = 127.0.0.1/8 ” ignorar localhost, podemos adicionar host ou rede específica.
- “ bantime = 600 ” tempo padrão que será bloqueado ( BAN - Bloqueio ).
- “ maxretry = 3 ” numero máximo de tentativas antes do bloqueio.
Principais diretórios:
- filter.d → Diversos arquivos referente a todos os padrões suportados contendo a forma que será verificado tentantivas de acesso, por exemplo autenticação do ssh será monitorado qualquer “login failed” e de acordo com políticas o respectivo bloqueado.
- action.d → Mapas de bloqueio estruturado de acordo com o serviço, exemplo como será estrutura das regras de bloqueio e/ou mande um e-mail caso haja um bloqueio do host como forma de alerta ao administrador, podemos configurar uma série de recursos.
Testando
Agora que entendemos um pouco do conceito sobre a
estrutura iremos ativar um dos recursos que é importante.
Fail2ban aplicará checagem frequentes tratando o fluxo de acesso, sabendo disso iremos
analisar o serviço SSH, veremos seu respectivo “jail.conf”:
# vim /etc/fail2ban/jail.conf
[ssh-iptables] # Habilitado enabled = true # Filtro utilizado para monitoramento das solicitações “filter.d” filter = sshd # Ação a ser tomada quando o filtro detectar “action.d” action = iptables[name=SSH, port=ssh, protocol=tcp] # Envio de email sendmail-whois[name=SSH, dest=root, sender=fail2ban@example.com, sendername="Fail2Ban" # Arquivo de log a ser monitorado. logpath = /var/log/secure # Maximo de tentativas maxretry = 3 |
A jail não é difícil de entender e configurar lembrando que essas ações são configuraveis.
Ok! Nosso serviços esta configurado
agora precisamos restart:
[root@serv-firewall fail2ban]# service fail2ban restart
Iniciando o fail2ban: [ OK ] |
Pronto iremos testar diversas conexões
em nosso servidor e veremos a ação tomada:
rgmatos@Handnote:~$ ssh root@192.168.122.10
root@192.168.122.10's password: Permission denied, please try again. root@192.168.122.10's password: Permission denied, please try again. root@192.168.122.10's password: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). rgmatos@Handnote:~$ ssh root@192.168.122.10 ssh: connect to host 192.168.122.10 port 22: Connection refused rgmatos@Handnote:~$ |
Vamos entender o que aconteçeu: para que realize a ação de bloqueio são necessário 3 tentativas,
erramos 3 vezes e quando tentamos pela quarta podemos ver que houve o
bloqueio.
Veremos que dentro de nossa estrutura de regras o firewall realmente foi bloqueado:
# iptables -S | grep REJECT -A fail2ban-SSH -s 192.168.122.1/32 -j REJECT --reject-with icmp-port-unreachable |
A utilização do fail2ban é muito interessante, suas utilização com o asterisk é muito útil onde que hoje em dia é alvo de uma série de ataques podemos minimizar.
Conclusão
Sem dúvida a ferramenta é muito
sólida e confiavel com diversos recursos fácil de serem ativados e personalizados para melhorar
a segurança em nosso servidores.
Logo em breve terá uma documentação abordando de maneira simples a utilização do fail2ban com asterisk.
Logo em breve terá uma documentação abordando de maneira simples a utilização do fail2ban com asterisk.
Bibliografia
http://www.vivaolinux.com.br/artigo/Protecao-utilizando-fail2ban-contra-ataques-do-tipo
– VOL – Ricardo Brito do Nascimento
Comentários
Postar um comentário