Como proteger seu servidor Linux contra ataques automatizados usando a ferramenta Fail2ban



O Fail2ban é uma ferramenta capaz de monitorar os arquivos de logs do sistema, detectar tentativas de acessos anormais a serviços de redes configurados e realizar ações que coíbam essas ações indevidas. Normalmente, essas tentativas de acessos são realizadas de maneira automatizada que, por exemplo, tentam fazer login remoto via ssh.

O Fail2ban é, de preferência, indicado para evitar ataques via SSH; por exemplo: Brute Force. Contudo, ele também pode ser usado para evitar ataques automatizados a diversos serviços do sistema, bem como: pam, xinetd, apache, vsftpd, proftpd, wuftpd, postfix, couriersmtp, courierauth, sasl e named. Independentemente do serviço, o Fail2ban tem como ação, reativa, barrar o possível ataque, adicionando uma regra no firewall iptables.

Assim, em resumo, o Fail2ban é capaz de proteger seu servidor Linux contra ataques automatizados que fazem tentativas abusivas a deteterminado serviço. Apos detectar a anomalia, o Fail2ban irá adicionar uma nova regra no firewall iptables, bloqueando o endereço IP do atacante por um determinado período de tempo. Além disso, ele também poderá alertá-lo por e-mail sobre o que está ocorrendo.

Fail2ban deve ser usado como complemento a outras soluções de segurança no seu sistema. Por exemplo, um firewall iptables já configurado. Assim, não é recomendado que o Fail2ban substitua uma solução de segurança já adotada; mas, sim, complemente-a.

Instalação

Debian/Ubuntu

Atualize o sistema:

apt-get update && apt-get upgrade -y

Instale o Fail2ban:

apt-get install fail2ban

CentOS 7

Atualize o sistema:

yum update

Habilite o repo EPEL:

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -ivh epel-release-latest-7.noarch.rpm

Instale o Fail2ban:

yum install fail2ban

Configurando o Fail2ban

Após a instalação o Fail2ban disponibilizará o diretório de configuração, localizado em /etc/fail2ban.

Os principais arquivos encontrados nesse diretório são:

Por padrão, o Fail2ban lê todos os arquivos com extensão “.conf”. Contudo, é recomendado que seja criado um arquivo com extensão “.local” para acrescentar alterações personalizadas feitas pelo administrador do sistema. Assim, o Fail2ban lerá, primeiramente, os arquivos com extensão “.conf” e atualizará suas configurações mediante a alterações feitas nos arquivos “.local”. Além disso, as configurações padrões do Fail2ban serão mantidas nos arquivos “.conf”.

cd /etc/fail2ban
cp fail2ban.conf fail2ban.local
cp jail.conf jail.local

O arquivo “fail2ban.local” contém configurações de registros da ferramenta, bem como: loglevel, logtarget, socket e pidfile.

Já o arquivo “jail.local” contém configurações de ações que devem ser tomadas em caso de tentativas abusivas aos serviços habilitados. Para o Fail2ban, esses serviços (mencionandos anteriormente) são denominados de “Jails”. Assim, existem marcações nesse arquivo contendo as configurações peculiares de cada “Jail” (serviço). Exemplo de Jail SSH e APACHE:

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

[apache]
enabled  = false
port     = http,https
filter   = apache-auth
logpath  = /var/log/apache*/*error.log
maxretry = 6

Onde,

Além das configurações específicas de cada serviço, existem as configurações no Jail DEFAULT; encontradas no ínicio do arquivo “jail.local”:

[DEFAULT]
ignoreip = 127.0.0.1
bantime  = 600
maxretry = 3
[...]

Além disso, o Fail2ban pode ser monitorado/configurado pela CLI através do comando “fail2ban-client”.

1. IP Whitelisting

Recurso importante para liberar endereços IP’s que não podem ser bloqueados pelo Fail2ban. Ou seja, endereços IP’s de hosts lícitos que comumente acessam o serviço monitorado.

Na Jail DEFAULT é possível adicionar a lista de IP’s que serão globais a todos as Jails. Mas, também é possível criar a whitelist em cada Jail habilitada:

Edição do arquivo “jail.local”:

[DEFAULT]

# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1/8 X.X.X.X 

Comando fail2ban-client para adicionar IP na whitelist da JAIL específica:

fail2ban-client set NOME-JAIL addignoreip X.X.X.X

Comando fail2ban-client para remover IP da whitelist da JAIL específica:

fail2ban-client set NOME-JAIL delignoreip X.X.X.X

Onde,

2. BanTime e FindTime

O recurso “bantime” define o tempo, em segundos, que o IP ilícito ficará banido e/ou bloqueado para o serviço. Por padrão, 10 minutos. Configurado na Jail DEFAULT.

Já o “findtime” define o período de tempo entre tentativas de acesso antes que uma proibição é feita. Por exemplo, se o Fail2ban está definido para proibir um IP após 3 tentativas sem êxito (maxretry); essas, mesmas, 3 tentativas devem ocorrer dentro do limite definido no findtime. O valor deve ser definido em segundos.

[DEFAULT]

# "bantime" is the number of seconds that a host is banned.
bantime  = 600
    
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime = 600
maxretry = 3

3. Fail2ban Client

O Fail2ban fornece um comando, denominado fail2ban-client, que pode ser usado para configurar o Fail2ban a partir da linha de comando. A sintaxe do comando é:

fail2ban-client COMANDO

Onde COMANDO pode ser:

Para mais opções, execute:

fail2ban-client -h

Regras Iptables

Quando o Fail2ban é iniciado são criadas entradas no firewall iptables do servidor. É criado uma Chain específica para cada Jail configurado. Por exemplo, Jail SSH:

iptables -L

[...]
fail2ban-ssh  tcp  --  anywhere             anywhere            tcp dpt:ssh 
[...]
Chain fail2ban-ssh (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             anywhere

Assim, caso haja alguma ação de bloqueio, será criado uma entrada BLOCK no firewall iptables seguindo as configurações feitas no arquivo “jail.local”.

gravatar

Ricardo Ferreira

Criador e administrador desse portal para Sysadmin Linux. Possui mais de 6 anos de experiência com administração de servidores Linux. Pretende compartilhar todo seu conhecimento e experiência, da mesma forma como no Linux Descomplicado, onde também é criador e administrador ;-)

Quer receber novidades diretamente no e-mail?!

Informe seu endereço de e-mail:

Deixe seu comentário:



2016 - Para este material, você precisa informar a origem e criar conteúdo com a mesma licença para poder usá-lo. Licença Creative Commons BY-NC-SA 4.0

"Este material foi publicado originalmente por Ricardo Ferreira em Sysadmin | Linux Descomplicado com título e link Como proteger seu servidor Linux contra ataques automatizados usando a ferramenta Fail2ban."

comments powered by Disqus