Conexões de log para o programa

9

Além de usar o iptables para registrar as conexões recebidas.

Existe uma maneira de registrar conexões de entrada estabelecidas com um serviço para o qual você não tem a fonte (suponha que o serviço não registre coisas como essa por conta própria)? O que eu quero fazer é reunir algumas informações com base em quem está se conectando para poder dizer coisas como em que horas do dia o serviço está sendo mais utilizado, em que lugar do mundo a principal base de usuários etc.

Estou ciente de que posso usá-lo netstate conectá-lo a um script cron, mas isso pode não ser preciso, pois o script pode ser executado apenas com a frequência de um minuto.

Aqui está o que estou pensando agora:

  • Escreva um programa que faça pesquisas constantemente netstat, procurando conexões estabelecidas que não apareceram na pesquisa anterior. Essa ideia parece uma perda de tempo da CPU, pois pode não haver uma nova conexão.
  • Escreva um programa wrapper que aceite conexões de entrada em qualquer porta em que o serviço seja executado, mas não saberia como passar essa conexão para o serviço real.

Edit: Apenas me ocorreu que esta pergunta pode ser melhor para stackoverflow, embora eu não tenha certeza. Desculpe se este é o lugar errado.

Zac
fonte
Por que você está excluindo o uso de iptables? Em qual porta nosso aplicativo está ouvindo?
user9517
Principalmente porque eu gostaria de ter mais controle sobre o log. Idealmente, eu gostaria de poder lidar com o registro como desejo sempre que uma nova conexão for detectada. Qualquer porta. Não há um único aplicativo específico para o qual eu usaria isso, e é por isso que não estou perguntando como registrar algo em profundidade, como um nome de usuário ou algo assim.
Zac
Você pode usar o iptables apenas para registrar novas conexões de entrada em qualquer porta. Eu faço isso, em algumas caixas. Por isso, repito a excelente pergunta de Iain: por que você está excluindo o uso de iptables?
MadHatter
Você consegue colocar um proxy antes do aplicativo? Só precisa ser muito simples que receba as solicitações, registre-as e as repasse. Você pode encaminhar o sinal recebido para o proxy, que então retransmitirá para o aplicativo na porta original.
John Gardeniers

Respostas:

4

Você pode registrar novas conexões com o iptables assim

iptables -I INPUT -m state --state NEW -j LOG --log-level 1 --log-prefix "New Connection "

Isso adicionará uma mensagem como esta para uma nova configuração ssh

6 de outubro 10:58:23 kernel do centos: Nova conexão IN = eth0 OUT = MAC = 00: 0c: 29: 5b: a5: ea: 00: 0c: 29: 2d: 94: a0: 08: 00 SRC = 192.168. 1,72 DST = 192.168.254.187 LEN = 52 TOS = 0x00 PREC = 0x00 TTL = 126 ID = 15498 PROTO DF = TCP SPT = 59221 DPT = 22 JANELA = 8192 RES = 0x00 SYN URGP = 0

ou assim para uma nova conexão http

6 de outubro 11:03:56 do kernel do centos: Nova conexão IN = eth0 OUT = MAC = 00: 0c: 29: 5b: a5: ea: 00: 0c: 29: d2: 2c: 38: 08: 00 SRC = 192.168. 254.188 DST = 192.168.254.187 LEN = 60 TOS = 0x10 PREC = 0x00 TTL = 64 ID = 10345 DF PROTO = TCP SPT = 52488 DPT = 80 JANELA = 14600 RES = 0x00 SYN URGP = 0

e assim por diante para cada nova conexão com o seu sistema. Ele será registrado em qualquer local em que seu syslog esteja configurado para enviar mensagens kern.warning.

user9517
fonte
Depois de olhar mais em volta, parece que essa é minha melhor aposta. Vou combinar isso com o rsyslog para registrar em um arquivo separado. Muito obrigado pela sua resposta informativa Iain!
Zac
0

você pode usar o auditd e, no final do dia, calcular algumas estatísticas com base nessas linhas de registro. Ou você também pode ir para uma solução snmp, mas provavelmente você escreveu seu próprio mib

Nikolaidis Fotis
fonte
0

Que tal tcpdump ou wireshark?

Guntis
fonte
Por favor, expanda sua resposta um pouco mais. Talvez sugerindo ao usuário como tcpdump e wireshark beneficiariam os esforços de solução de problemas.
Magellan
manual do tcpdump com o qual você pode registrar pacotes completos. Você também pode capturar pacotes com tcpdump e analisá-los no wireshark. tcpdump -i <interface> -s 65535 -w <some-file>Além disso, você precisará finalizar a captura com ^ C quando acreditar que capturou pacotes suficientes.
Guntis