Spawnzao

Configurar o Fail2ban no Centos 7

Por em 12/06/2015 - 2,247 views

Manter um servidor hoje na internet requer alguns recursos mínimos de segurança, e hoje vamos configurar o Fail2ban, uma ótima ferramenta para evitar atauqes de força bruta no servidor.
O fail2ban fica auditando os arquivos de logs, procurando por múltiplos erros de login, e caso encontre 5 erros seguidos ele executa uma action, que normalmente é um bloqueio do ip de origem por 600 segundos. Podemos também configurá-lo para toda vez que ocorra um bloqueio ele nos informe por e-mail e também nos diga um WHOIS desse ip, para termos mais informações sobre o ip atacante.

A nova versão do Fail2ban além de ficar muito mais robusta e completa, trás suporte a multiplos serviços, como por exemplo: apache, modsecutiry, proftpd, vsftpd, mysqld, dentre outros, importantíssimo para manter a segurança de nossos servidores.

Instalar o Repositório epel:


yum install https://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm

Instalar os pacotes do Fail2ban:


yum install fail2ban-systemd fail2ban-sendmail fail2ban-server whois

Eu não utilizo o Firewalld, mas quem utiliza precisa instalar o pacote:


yum install fail2ban-firewalld

Antes de fazer a nossa configuração, precisamos acertar um erro no arquivo jail.conf, que impede que o sistema envie e-mail caso haja algum bloqueio.

# ban & send an e-mail with whois report to the destemail.
action_mw = %(banaction)s[name=%(__name__)s, bantime=”%(bantime)s”, port=”%(port)s”, protocol=”%(protocol)s”, chain=”%(chain)s”]
%(mta)s-whois[name=%(__name__)s, dest=”%(destemail)s”, protocol=”%(protocol)s”, chain=”%(chain)s”]

Adicionar o sender na segunda linha, um parâmetro obrigatório no sendmail.

# ban & send an e-mail with whois report to the destemail.
action_mw = %(banaction)s[name=%(__name__)s, bantime=”%(bantime)s”, port=”%(port)s”, protocol=”%(protocol)s”, chain=”%(chain)s”]
%(mta)s-whois[name=%(__name__)s, dest=”%(destemail)s”, sender=”%(sender)s”, protocol=”%(protocol)s”, chain=”%(chain)s”]

Agora vamos criar um arquivo de configuração distinto, que não sofrerá alterações caso o Fail2ban seja atualizado.

Criar o jail.local


touch jail.local
vim jail.local

Configurar o arquivo jail.local

[DEFAULT]

ignoreip = 127.0.0.1/8 192.168.1.0/24

destemail = informatica@seweb.com.br

sender = fail2ban@server.local.seweb.corp

action = %(action_mw)s

[sshd]
enabled = true
port = 2244

Agora vamos liberar o Fail2ban no Selinux, para isso vamos criar 2 arquivos, um para o journald e outro para o logrotate.


cd /root
touch fail2ban-syslog.te
vim fail2ban-syslog.te

module fail2ban-syslog 1.0;
require {
type syslogd_var_run_t;
type fail2ban_t;
class dir read;
class file read;
class file open;
class file getattr;
}

#============= fail2ban_t ==============
allow fail2ban_t syslogd_var_run_t:dir read;
allow fail2ban_t syslogd_var_run_t:file read;
allow fail2ban_t syslogd_var_run_t:file open;
allow fail2ban_t syslogd_var_run_t:file getattr;


touch logrotate-fail2ban.te
vim logrotate-fail2ban.te

module logrotate-fail2ban 1.7;
require {
type fail2ban_client_exec_t;
type logrotate_t;
type init_var_lib_t;
class file { open read execute getattr write create execute_no_trans setattr unlink ioctl rename};
}

#============= logrotate_t ==============
allow logrotate_t fail2ban_client_exec_t:file execute_no_trans;
allow logrotate_t fail2ban_client_exec_t:file { open read execute ioctl };
allow logrotate_t init_var_lib_t:file { open read getattr write create unlink setattr rename };

Vamos compilar os módulos do Selinux que acabamos de criar:


checkmodule -M -m -o fail2ban-syslog.mod fail2ban-syslog.te
semodule_package -o fail2ban-syslog.pp -m fail2ban-syslog.mod
checkmodule -M -m -o logrotate-fail2ban.mod logrotate-fail2ban.te
semodule_package -o logrotate-fail2ban.pp -m logrotate-fail2ban.mod

Agora vamos importá-los:


semodule -i fail2ban-syslog.pp
semodule -i logrotate-fail2ban.pp

Vamos iniciar o Fail2ban:


systemctl start fail2ban

Para verificar se ocorreu alguma incompatibilidade no Selinux, utilizem os seguintes comandos:


tail -f /var/log/audit/audit.log
cat /var/log/audit/audit.log | grep -i avc

Agora todas as múltiplas tentativas de acesso ao SSH, serão auditadas pelo Fail2ban, se ocorrer 5 tentativas seguidas, o ip será bloqueado por 5 minutos no firewall.
Evitando ataques de brute force.

É isso pessoal, até a próxima.

:, , , , , , , , , , , , , , ,
No comments for this entry yet...

Leave a Reply

Licença

Creative Commons License

Techs

 Blog Tool, Publishing Platform, and CMS
Powered by PHP
Powered by MySQL
Mozilla Foundation
hacker emblem
Mozilla Foundation
Open Source Initiative
Creative Commons