log de conexões de rede antes de mover o servidor?

1

Estamos atualizando um servidor de banco de dados antigo, mas queremos ter certeza de que atualizamos o código em todos os outros servidores que se conectam a ele. Estou pensando em espelhar a porta de rede e registrar os endereços IP que se conectam ao servidor. Pensei em ativar o registro no próprio servidor, mas não quero afetar seu desempenho, pois ele ainda está em produção.

Existe alguma recomendação sobre software que eu possa usar para registrar os endereços IP? Pode ser Windows, Linux, FreeBSD, VM, LiveCD ou qualquer outra coisa. Contanto que funcione em uma caixa compatível com x86, eu conseguirá executá-lo.

    
por Joseph 10.02.2012 / 19:49

1 resposta

4

Qual sistema operacional é o próprio servidor de banco de dados em execução? Se é Linux, você pode adicionar uma regra de registro à configuração do firewall local com impacto mínimo no servidor. Algo ao longo das linhas de:

iptables -A INPUT -m state --state NEW -p tcp --dport <yourdbport> -j LOG --log-prefix "[database] "

Você pode adicionar -m limit --limit 4/s para limitar essa regra ao registro apenas 4 vezes / segundo (etc.), o que, se a taxa de conexão for alta, evitará que ele oculte todos os pedidos de veiculação. Isto irá registrar as linhas no syslog que se parecem com:

[database] IN=eth0 OUT= MAC=00:16:3c:21:7c:f1:00:d0:00:6f:8c:00:08:00 SRC=a.b.c.d
  DST=w.x.y.z LEN=48 TOS=0x00 PREC=0x00 TTL=114 ID=16448 DF PROTO=TCP SPT=59871
  DPT=5900 WINDOW=8192 RES=0x00 SYN URGP=0 

A informação que você deseja é o campo SRC= .

Se você configurar um sistema Linux (ou FreeBSD) separado para receber tráfego de uma porta espelho, poderá usar tcpdump para gravar os endereços IP. Algo como:

tcpdump -w record_of_connections -i eth0 \
  dst port <yourdbport> and 'tcp[tcpflags] & tcp-syn != 0'

Isso corresponderá a todos os pacotes para portar yourdbport que tenham o sinalizador SYN definido (por exemplo, eles são uma nova tentativa de conexão). Depois de executar isso para um arquivo, você pode extrair endereços IP assim:

tcpdump -r record_of_connections -n

Que produzirá linhas como esta:

15:07:40.808035 IP 10.243.16.190.53967 > 10.243.18.22.http: Flags [S], 
  seq 1235802021, win 5840, options [mss 1380,sackOK,TS val 3739192250 
  ecr 0,nop,wscale 7], length 0

Onde os campos são:

<time> <protocol> <src_addr>.<src_port> > <dest_addr>.<dest_port>: ...

O que significa que você pode obter apenas o endereço IP de origem assim:

tcpdump -r record_of_connections -n |
 awk '{print $3}' |
 sed 's/\.[^.]*$//' |
 sort -u

O sort -u fornece uma lista exclusiva de endereços.

    
por 10.02.2012 / 21:09