Hoje abordaremos um assunto que certamente interessará quem já mexe ou quem está começando no iptables: os LOGS. Com logs somos capazes de monitorar a nossa rede, aumentar o desempenho, localizar rapidamente problemas, além de tornar o firewall muito mais confiável. Neste artigo, abordaremos como gerar e interpretar os Logs do iptables. Boa leitura!
Bom, para começarmos, indico o local dos logs do iptables que por padrão estarão em /var/log/messages ou em /var/log/kern.log, dependendo da sua distro.
Usando o alvo (target) LOG
Assim como temos o DROP, o ACCEPT e outros, temos também o LOG, ele será o responsável por quando a condição especificada acontecer, ele gravar o ocorrido no arquivo de log
Ex. de uso
iptables -A INPUT -j LOG
iptables -A OUTPUT -j LOG
iptables -A FORWARD -j LOG
Com o exemplo acima, todas as entradas input, output e forward serão gravadas no log.
Que tal mais um exemplo?
Vamos supor que você deseje gravar as tentativas de entrada ssh. Então sabemos que a porta é 22, protocolo tcp, a regra em questão aborda o INPUT (entrada) e as tentativas de conexão são abordadas pelo flag syn. Logo, teremos o comando:
iptables -A INPUT -p tcp –dport 22 –syn -j LOG
A regra acima não bloqueia nem libera a conexão, apenas grava em log. Supondo que queiramos derruba-la (DROP):
iptables -A INPUT -p tcp –dport 22 –syn -j DROP
Caso a necessidade seja liberar a conexão, basta substituir o DROP por ACCEPT, mas lembre-se: O log sempre vem antes da ação a ser tomada.
Redirecionando o log iptables
o iptables usa a facilidade de nivel kern.warn. Podemos encaminhar os logs do iptables para um arquivo específico, como o iptables.log, bastando adicionar a seguinte linha ao arquivo syslog.conf (rsyslog.conf nos derivados do Debian, como Ubuntu, por exemplo).
kern.warn -/var/log/iptables.log
Após executar o comando acima, reinicie os serviços syslogd (rsyslogd em Debian likes) e klogd (não tem em Debian likes)
cd /etc/init.d
./syslogd restart
./klogd restart
Feito isso, os logs do iptables já terão sido encaminhados para o arquivo iptables.log em /var/log
Entendendo a entrada de Log gerada pelo iptables
Aug 10 00:07:54 ubuntuServer kernel: [ 2942.760653] IN=eth0 OUT= MAC=08:00:27:ce:a3:4c:00:19:66:be:75:a9:08:00 SRC=192.168.1.100 DST=192.168.1.103 LEN=92 TOS=0x00 PREC=0x00 TTL=128 ID=15497 DF PROTO=TCP SPT=50253 DPT=22 WINDOW=254
Veremos o que cada item significa:
Aug 10 00:07:54 -> Mês, dia, hora, minuto e segundo em que o log foi gravado
ubuntuServer -> Nome do Servidor com Firewall
Kernel -> Servidor que gravou o log. Em algumas versões do Linux, esta opção vem vazia, pois o netfilter faz parte do Kerner. No Ubuntu e outros, aparece um número do daemon que gerou o evento.
IN -> Internface de rede de entrada
OUT -> Interface de rede de saída
MAC -> endereço MAC da interface citada na regra; em nosso exemplo, a eth0
SRC -> IP de origem do pacote
DST -> IP de destino do pacote
LEN -> tamanho do pacote em bytes
TOS-> Prioridade do pacote (referente a tabela mangle e QOS)
PREC -> Precedencia de prioridade do cabeçalho TOS
TTL -> Tempo de vida do pacote. No nosso exemplo faltariam 128 saltos até ser descartado pelo roteador
ID -> Número único que identifica o pacote
PROTO -> Protocolo
SPT -> Porta de origem da requisição
DPT -> Porta de destino da requisição
WINDOW -> Através deste campo o software TCP indica quantos dados ele tem capacidade de receber em seu buffer. Tamanho da janela em bytes
Para iniciarmos, a parte mais importante do LOG é as interfaces de entrada e saída (IN/ OUT), endereços ip de entrada e saída (SPT/ DPT) e tipo de protocolo (PROTO)
Bom Senhoras e Senhores, encerro por aqui a parte 1. Breve a parte 2 com descrição de Logs. Abraço a todos.
6 Comentários. Deixe novo
[…] Logs no Iptables – Parte I […]
[…] Link para parte I | Link para parte II […]
[…] Parte I | Parte II | Parte III | Parte IV […]
Muito interessante!
Eu tenho um sistema que se conecta à um servidor na internet. O problema é que o ip deste sistema sempre é alterado e nossa empresa fica sem emitir as notas fiscais. Tem como eu saber através do logs do iptables onde a conexão está falhando? Por exemplo, descobrir em que endereço e porta o meu sistema esta tentando se conectar para estabelecer a conexao? As vezes eu resolvo com o tcpdump, mas tem casos que não consigo.
Vlw camarada estava quebrando a cabeça aqui pra gerar os log 🙂
Muito bom.