Pular para o conteúdo principal

IDS Sistema detecção de intrusão - FAIL2BAN

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.

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 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:

  • 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.

Bibliografia



Comentários

Postagens mais visitadas deste blog

QOS Intermediário - Implantação em cliente real

Implantação de QOS - Intermediário Introdução Nessa etapa seguiremos novamente o caminho do controle de tráfego, mas com uma pitada mais avançada delimitando por classes e em tempo real. Nessa video aula trará um pouco de shell-script junto com controle de tráfego e passando um pouco que vai ser um dos próximos tópicos que é o ZABBIX. O video realmente ficou extenso, porque tentei documentar ao máximo cada parte e explicar o porque da utilização de cada função.

Zabbix - Entendendo Agentes

Zabbix Agente - Instalação e configuração Introdução O Zabbix trabalha em sua estrutura basicamente duas funções como: Gerente - Zabbix que armazena informações e entre outras, agindo como Servidor ) Agente - Zabbix instalado em hosts que coleta informações para serem enviadas ao gerente.  O que iremos entender nesse tutorial é os modos como os agentes trabalha ativo e passivo. Ativo - Ele envia os dados para o servidor ( gerente ), muito utilizado quando o host está em outras redes através de firewall. Passivo - Ele aguarda solicitação do servidor ( gerente ) para a entrega dos dados. A configuração do agente e de acordo com as nossas necessidades no momento.