terça-feira, 18 de fevereiro de 2014

Sessão Fix: MISCONFIGURATION

MISCONFIGURATIONkernel rp_filter settings, reverse path filtering
Sistema utilizadoRed Hat Enterprise Linux Server release 5.10 (Tikanga)

SINTOMA: 

Configuramos o servidor para ser um banco de dados Oracle, esse server ficava durante um tempo, tipo 1 dia, funcionando normalmente mas de repente o mesmo parava de responder a qualquer tipo de conexão vindo de determinadas máquinas, simplesmente os pacotes chegavam no servidor, em sua interface de rede, e o mesmo não respondia não importando o tipo de conexão vindas de determinadas máquinas. O firewall deste servidor assim como SELinux estavam desativados e não existia também nenhum filtro no caminho entre os servidores envolvidos nessa comunicação.

PROBLEMA:

O esquema de segurança contra ataque tipo Spoofing é assegurado por um parâmetro de Kernel rp_filter settings no Red Hat e esse parâmetro  foi ajustado incorretamente. A versão 5 do Red Hat admite somente dois valores para esse parâmetro(0 ou 1), já  a versão 6 do Red hat admite 3 valores(0,1 e 2).

No Red Hat 5:

rp_filter - BOOLEAN
        1 - Faz a validação da origem usando o caminho reverso, como especificado no RFC1812. Opção recomendada para servidores e roteadores de rede. Poderá causar problemas para redes complexas rodando um protocolo não confiável e lento(tipo RIP) ou que usa rotas estáticas.

         0 - Sem validação de origem.

        conf/all/rp_filter deve ser também configurado para TRUE para fazer a validação de origem na interface.

 Valor padrão é 0. Observe que algumas distribuições habilitam essa opção nos scripts de inicialização.

No Red Hat 6:

rp_filter - INTEGER
        0 - Sem validação de origem.

        1 - Modo rígido como definido na RFC3704. Cada pacote que chega é testado contra a FIB(Forwarding Information Base, encontra a interface apropriada para a qual a interface de entrada deverá encaminhar um pacote) e se a interface não é o melhor caminho reverso o check do pacote falhará. Por padrão pacotes que falharam são descartados.
   
        2 - Modo folgado como definido na RFC3704 cada endereço de origem do pacote que chega é também testado contra a FIB e se o endereço de origem não é alcançável via qualquer interface o check do pacote falhará.

SOLUÇÃO:

Se este problema de comunicação estiver acontecendo em seu servidor devemos primeiramente habilitar o log de martians packet:

echo 1 > /proc/sys/net/ipv4/conf/eth0/log_martians

sysctl -w net.ipv4.conf.default.log_martians=1

sysctl -p

Check os logs no dmesg:

dmesg | grep -i martian

Algo do tipo "martian source 169.254.179.40 from 169.254.179.43, on dev eth0" irá aparecer no seu log.

O nosso problema foi que configuramos o parâmetro rp_filter no arquivo /etc/sysctl.conf na versão 5 do Red Hat com o valor 2(Sendo que essa versão só aceita dois valores 0 ou 1):

net.ipv4.conf.default.rp_filter = 2


Modificamos o parâmetro para o valor certo em dois parâmetros e o sistema parou de logar martian packet e derrubar as conexões legitimas vindas outros servidores da nossa rede:

net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1


Seguidores