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.
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)
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.