quinta-feira, maio 12, 2011

Projeto 1 - Geração de Logs e Debugging



A geração de logs e debugging é o primeiro projeto necessário na implantação de uma Firewall. Saber monitorar quais pacotes estão sendo aceitos ou negados é quase tão importante como conhecer as funcionalidades e/ou recursos da Firewall.

Para configurar os logs / debugging da Firewall H3C SECPATH F1000-S foi escolhido o redirecionamento de todos os registros para um Syslog Server em Linux. As vantagens dessa abordagem devem-se às seguintes razões:

  • O elevado volume de registros ao ativar o monitoramento de pacotes negados nas ACLs torna inviável sua análise em uma console.
  • Os registros devem ser guardados com fins de auditoria e controle.
  • Possibilidade de gerar filtros com expressões regulares e linguagem BASH.
  • Possibilidade de redirecionar vários tipos de fluxos de logs / debugging em diferentes arquivos de armazenamento.

A configuração básica para a geração e controle de logs na Firewall H3C SECPATH F1000-S é através do info-center. É importante não confundir a geração de logs com a geração de debug. A geração de debugs é muito mais diversificada do que a geração de logs e utiliza exclusivamente o comando debugging. Porém, ao gerar um debug, por exemplo das diversas regras de uma ACL, é possível direcionar a saído do debug para o info-center, que por sua vez direcionará os registros para um Syslog Server.

As configurações abaixo redirecionam o debugging de pacotes negados pela firewall para o Syslog Server. Perceba que é necessário ativar no debugging o tipo de informação buscada. A segunda linha de configuração direciona o channel 1 (monitor terminal - corresponte ao terminal telnet/ssh) para o loghost.
[SecPath] info-center loghost source GigabitEthernet0/0
[SecPath] info-center loghost 192.168.1.1 channel 1 facility local2
[SecPath] info-center synchronous                  
[SecPath] info-center enable    

[SecPath] debugging firewall packet-filter denied
 Firewall's packet denied debugging switch is on
[SecPath] undo debugging all                      
 All possible debugging has been turned off

Os logs gerados com a configuração abaixo podem ser identificados do seguinte tipo:

1) Logs gerados pelo controle de ataques. Gerados com o nível 4 (warning level) do Syslog

May  4 13:46:22 200.18.67.241 2011 arsenio.ufcspa.edu.br %%10SEC/4/ATCKDF(l):-DEV_TYPE=SECPATH atckType(1016)=(21)ARP-spoofing;rcvIfName(1023)=GigabitEthernet1/1;srcIPAddr(1017)=200.18.67.22;srcMacAddr(1021)=00-26-54-0f-e8-25;destIPAddr(1019)=200.18.67.1;destMacAddr(1022)=00-23-89-35-41-57;atckSpeed(1047)=0;atckTime_cn(1048)=20110504134620
May  4 13:46:22 200.18.67.241 2011 arsenio.ufcspa.edu.br %%10SEC/4/ATCKDF(l):-DEV_TYPE=SECPATH atckType(1016)=(21)ARP-spoofing;rcvIfName(1023)=GigabitEthernet1/1;srcIPAddr(1017)=200.18.67.22;srcMacAddr(1021)=00-26-54-0f-e8-25;destIPAddr(1019)=200.18.67.1;destMacAddr(1022)=00-23-89-35-41-57;atckSpeed(1047)=0;atckTime_cn(1048)=20110504134621

2) Logs gerados pela execução de comandos. Gerados com o nível 4 (warning level) do Syslog

May  4 13:22:33 200.18.67.241 2011 arsenio.ufcspa.edu.br %%10SHELL/4/CMD(l):-DEV_TYPE=SECPATH task:vt0 ip:200.18.71.31 user:** command:info-center logbuffer
May  4 13:22:36 200.18.67.241 2011 arsenio.ufcspa.edu.br %%10SHELL/4/CMD(l):-DEV_TYPE=SECPATH task:vt0 ip:200.18.71.31 user:** command:dis cur

3) Logs gerados ao ativar o debugging. O debugging pode ser ativado para diversos tipos de funcionalidadades. Estão gerados com o nível 7 (debug level) do Syslog

May  6 11:21:57 200.18.67.241 2011 arsenio.ufcspa.edu.br %%10FILTER/7/FLTDBG(d):-DevIP=200.18.67.241-DEV_TYPE=SECPATH GigabitEthernet0/0 InBound List 3030  deny tcp (200.18.64.66 3338)->(50.16.235.93 843) 48 bytes from interface GigabitEthernet0/0
May  6 11:21:57 200.18.67.241 2011 arsenio.ufcspa.edu.br %%10FILTER/7/FLTDBG(d):-DevIP=200.18.67.241-DEV_TYPE=SECPATH GigabitEthernet1/0 InBound List 3031  deny icmp 192.168.114.39->200.18.70.27 (8 0) 64 bytes from interface GigabitEthernet1/0


As configurações de um Syslog Server em Linux (CentOS 5.5) para armazenar separadamente cada tipo de log são:

[root@horus log]# rpm -qi sysklogd-1.4.1-46.el5
Name        : sysklogd                     Relocations: (not relocatable)
Version     : 1.4.1                             Vendor: Oracle USA
Release     : 46.el5                        Build Date: Thu 11 Feb 2010 11:31:19 PM BRST
Install Date: Fri 04 Mar 2011 02:13:34 PM BRT      Build Host: ca-build10.us.oracle.com
Group       : System Environment/Daemons    Source RPM: sysklogd-1.4.1-46.el5.src.rpm
Size        : 127866                           License: GPL
Signature   : DSA/SHA1, Wed 17 Feb 2010 07:02:40 PM BRST, Key ID 66ced3de1e5e0159
Summary     : System logging and kernel message trapping daemons.
Description :
The sysklogd package contains two system utilities (syslogd and klogd)
which provide support for system logging.  Syslogd and klogd run as
daemons (background processes) and log system messages to different
places, like sendmail logs, security logs, error logs, etc.

[root@horus log]# vim /etc/sysconfig/syslog
# Options to syslogd
# -m 0 disables 'MARK' messages.
# -r enables logging from remote machines
# -x disables DNS lookups on messages recieved with -r
# See syslogd(8) for more details
SYSLOGD_OPTIONS="-m 0 -r -x"
# Options to klogd
# -2 prints all kernel oops messages twice; once for klogd to decode, and
#    once for processing with 'ksymoops'
# -x disables all klogd processing of oops messages entirely
# See klogd(8) for more details
KLOGD_OPTIONS="-x"
#
SYSLOG_UMASK=077
# set this to a umask value to use for all log files as in umask(1).
# By default, all permissions are removed for "group" and "other".


[root@horus firewall]# vim /etc/syslog.conf
# Configurações de Log da Firewall SECPATH
local2.=debug                        -/var/log/firewall/debug.log
local2.=warn                        -/var/log/firewall/warning.log


Para filtar os logs em tempo real e ter uma visualização mais clara utilizar os seguinte programa desenvolvido em BASH:

[root@horus ~]# cat /root/bin/filtrar-acl
#!/bin/bash

#
# Nome      :  filtrar-acl
#
# Função    :  Programa para filtar em tempo real os logs enviados pela Firewall SECPATH
#
# Versão    :  1.0 - Maio 2011

# Funções do Programa
# ===================

function MENSAGEM_ERRO()
{
  echo -ne "\nErro !!! Favor passar apenas um único parâmetro: tcp, udp ou icmp\n\n"
  exit 1
}

function FILTRAR()
{
  tail -f /var/log/firewall/debug.log | grep $1 | awk 'BEGIN { FS = " "; OFS = " "; ORS = "\n" } { print $10,$11,$12,$13,$14,$15,$16 }'
}

if [ $# -gt 1 ]; then
{
  MENSAGEM_ERRO
}
elif [ "$1" = "tcp" ]; then
{
  FILTRAR tcp
}
elif [ "$1" = "udp" ]; then
{
  FILTRAR udp
}
elif [ "$1" = "icmp" ]; then
{
  FILTRAR icmp
}
else
{
  MENSAGEM_ERRO
}
fi

exit 0