logoCert_sugestao2.png

NFCT-SNATLog: habilitando o registro das traduções NAT do IPTables/Netfilter

Sobre o NFCT-SNATLog

O Netfilter é um componente do kernel do Linux que permite a filtragem de pacotes, tradução de endereços de rede (e portas) (NAT/NAPT) e outras manipulações de pacotes. Ele está disponível como módulo do kernel. O IPTables é uma aplicação cliente, que permite a criação de regras de firewall e NAT,manipulando alguns dos subsistemas do Netfilter.

Embora o IPTables seja robusto e amplamente utilizado nas instituições, ele não dispõe de funcionalidades que permitam o registro das traduções SNAT realizadas, o que pode comprometer o tratamento de um incidente de segurança gerado por uma máquina da rede interna.

Diante dessa importante limitação, o CERT.Bahia desenvolveu uma aplicação que permite monitorar conexões do tipo SNAT e registrar nos logs do sistema informações sobre IP e porta de origem originais, IP e porta de origem traduzidas e duração da conexão. A aplicação foi chamada NFCT-SNATLOG, uma abreviação para Netfilter Connection Tracking SNAT Logging.

Maiores informações sobre a arquitetura do sistema e testes de desempenho, consulte o capítulo 4 do documento "TRAIRA: uma ferramenta para Tratamento de Incidentes de Rede Automatizado" disponível aqui.

No restante deste documento iremos detalhes os passos para instalação e configuração do NFCT-SNAT-Log.

Instalação do NFCT-SNATLOG

Faça o download do pacote do nfct-snatlog:
wget http://www.pop-ba.rnp.br/files/sw/nfct-snatlog.tgz

Instale algumas dependências para compilação do software (GCC, Make e as bibliotecas do Conntrack/Netfilter). Abaixo um exemplo para sistemas baseados em Debian:
apt-get install make gcc libnetfilter-conntrack-dev

Compilação do software:
tar -xzf nfct-snatlog.tgz
cd nfct-snatlog
make
make install

Com os comandos acima, você terá instalado o NFCT-SNATLOG em /usr/sbin/nfct-snatlog. Para executá-lo precisaremos carregar alguns módulos do kernel:
modprobe nf_conntrack
modprobe nf_conntrack_ipv4
modprobe nf_conntrack_netlink

E finalmente carregar o daemon:
/usr/sbin/nfct-snatlog --daemon 

OBS: a configuração acima é volátil, o que significa que quando a máquina for reiniciada ela será perdida. Para carregar a configuração na inicialização do sistema, você deve criar um script no init.d (ou equivalente), porém essa configuração não será abordada nesse tutorial (uma outra alternativa é colocar os comandos acima no /etc/rc.local, o qual é executado durante a inicialização do sistema).

Para verificar o funcionamento da ferramenta, acompanhe os logs do sistema e observe as mensagens do NFCT-SNATLog a cerca de máquinas da sua rede interna que estão usando traduções NAT para acesso a redes externas.
tail -f /var/log/syslog | grep nfct-snatlog

(para finalizar a visualização do log, tecle CTRL+C)

Envio dos logs para um servidor remoto

Uma configuração importante para garantir segurança e escalabilidade em ambientes desse tipo é a implantação de um servidor de logs remoto. Este documento não cobre os passos para implantação de tal servidor (recomendamos a leitura do material do curso de segurança no WTR 2010, Prática04-Syslog). Aqui vamos mostrar os passos para configuração do syslog na máquina do firewall e o que precisa ser acrescentado no servidor de syslog remoto para habilitar esse cenário.

Na máquina do servidor syslog remoto

Edite a configuração do syslog-ng (geralmente o arquivo /etc/syslog-ng/syslog-ng.conf) e acrescente as seguintes linhas:
source s_udp { udp(port(514)); };
filter f_nfct-snatlog { facility(local4) and program("nfct­-snatlog"); };
destination d_nfct-snatlog { file("/var/log/firewall/nfct­-snatlog­${YEAR}${MONTH}${DAY}.log" group("www-data")); };
log { source(s_udp); filter(f_nfct-snatlog); destination(d_nfct-snatlog); };

Em seguida, precisamos criar a pasta que armazenará os logs e setar algumas permissões:
mkdir /var/log/firewall
chown root.www-data /var/log/firewall
chmod 750 /var/log/firewall

Agora precisamos reiniciar o daemon do syslog-ng:
/etc/init.d/syslog-ng restart

Na máquina do firewall

Edite a configuração do syslog-ng (instale-o, se for o caso), provavelmente o arquivo /etc/syslog-ng/syslog-ng.conf, e acrescente os seguintes parâmetros (substitua o IP-SERVIDOR-LOG pelo IP do servidor de logs remoto):
destination d_logserver { udp("IP-SERVIDOR-LOG" port(514)); };
filter f_nfct-snatlog { facility(local4); };
log { source(s_src); filter(f_nfct-snatlog); destination(d_logserver); };

Em seguida, reinicie o daemon do syslog-ng para carregar as novas configurações:
/etc/init.d/syslog-ng restart

Testando o envio de logs

Efetue o acesso a sites externos a partir de um dispositivo que passe pela tradução NAT e observe o conteúdo do arquivo /var/log/firewall/nfct-snatlog-XXXXXXXX.log no servidor de logs remoto.