Sessão Fix: MISCONFIGURATION
Autor: Leonardo Couto Conrado | Publicado: 2014-02-18T05:06:00-08:00


MISCONFIGURATION:&nbsp;kernel rp_filter settings,
reverse path filtering
Sistema utilizado:&nbsp;Red Hat Enterprise Linux Server
release 5.10 (Tikanga)

SINTOMA:&nbsp;

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&nbsp;determinadas&nbsp;máquinas. O firewall deste
servidor assim como&nbsp;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&nbsp;de Kernel&nbsp;rp_filter
settings no Red Hat e esse&nbsp;parâmetro&nbsp; foi ajustado incorretamente. A
versão 5 do Red Hat&nbsp;admite&nbsp;somente dois valores&nbsp;para
esse&nbsp;parâmetro(0 ou 1), já &nbsp;a versão 6 do Red hat admite 3
valores(0,1 e 2).



No Red Hat 5:



rp_filter - BOOLEAN

&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;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.



&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; 0 - Sem
validação de origem.



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



&nbsp;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

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 - Sem validação de origem.



&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
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.

&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
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:


<!--[endif]-->

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



echo 1 &gt;
/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"&nbsp;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