Registre todo IP que conecta em um sistema com iptables

4

Título diz tudo.

Como posso, com o iptables no Linux, registrar todo o IP se conectando a um servidor? Como um pequeno detalhe, gostaria de ter apenas uma entrada no log por dia por IP.

Obrigado :)

EDITAR:

Eu reduzi para 5 pacotes registrados para cada nova sessão, o que é estranho, já que eu uso - hashlimit 1 - haslimit-burst 1 , eu suspeito que --m limit, cujo padrão é 5 desempenha um papel lá. O problema é que, se eu definir -m limite para 1, apenas 1 entrada é registrada para TODOS os IPs, em vez de um por CADA IP.

A razão pela qual eu quero fazer isso é também evitar o máximo possível de logs crescendo muito rápido, já que essa será uma caixa não gerenciada.

EDIT2: Aqui está a minha tentativa atual, em um formato de restauração do iptables: (em várias linhas para facilitar a leitura)

-A FORWARD -d 10.x.x.x -p tcp --dport 443 -m state --state NEW 
-m hashlimit --hashlimit-upto 1/min --hashlimit-burst 1 
--hashlimit-mode srcip --hashlimit-name denied-client 
-j LOG --log-prefix "iptables (denied client): "
    
por Alexandre Nizoux 12.03.2010 / 22:48

4 respostas

2

Eu tentaria isso:

# IP address entry older than one day
iptables -A ... -m recent --name mydaily ! --rcheck ! --seconds 86400 -j logandset
# IP address never seen before
iptables -A ... -m recent --name mydaily ! --rcheck -j logandset

# Custom chain for logging and refreshing
iptables -N logandset
iptables -A logandset -j LOG
iptables -A logandset -m recent --name mydaily --set

Assim, a sua lista mydaily irá acompanhar os últimos endereços IP, e se nunca foi visto antes, ou se o último visto tiver mais de um dia, o pacote será registrado, e a entrada da lista Endereço IP seja atualizado.

Você provavelmente deve definir ip_list_tot para um valor mais alto para mydaily , como explicado na página do manual iptables (no seu caso para / proc / net / xt_recent / mydaily).

    
por 17.03.2010 / 17:24
0

Estou pegando um crack selvagem (não testado) @, mas algo como:

iptables -I INPUT -m conntrack --ctstate NEW -j LOG --log-prefix 'IPT/New Connection' 

O iptables emitirá uma mensagem para o log do kernel para cada nova conexão. Você então precisará fazer algo como

grep 'IPT/New Connection' /var/log/kern.log | | wc -l

O que lhe dará uma contagem. Várias danças com awk / perl / etc permitem dividir por IP.

Não vejo uma maneira de convencer o IPtables a cuspir apenas uma contagem por endereço IP no final do dia. Se o seu syslog for capaz de filtrar mensagens por regexp, você poderá capturar as mensagens e afunilá-las em um arquivo de log separado. @ no final do dia, todas as contagens são calculadas e a mensagem é reinserida em sua entrada principal do syslog.

    
por 13.03.2010 / 02:08
0

Seria muito mais simples registrar tudo e depois processá-lo para extrair o que você precisa? Use o que é apropriado em cada estágio, em vez de tentar encaixar algo para se encaixar onde ele não pertence.

    
por 13.03.2010 / 02:45
0

Eu usaria uma versão corrigida do ulogd com um back-end de SQL.

O truque seria corrigir a consulta SQL INSERT de uma forma que permitisse ao banco de dados lidar com redundância em endereços IP e inserir novos registros nos logs apenas para IPs exclusivos.

    
por 16.03.2010 / 15:08