Como usar o lsof para identificar conexões TCP de entrada?

2

Eu quero saber se meu servidor estabelece uma conexão com um servidor remoto ou se o servidor remoto tenta acessar meu servidor. Eu tentei ler a saída de lsof e obter essa informação:

lsof -i TCP:25 
 USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
master   2657    root   12u  IPv4     8086      0t0  TCP *:smtp (LISTEN)
smtpd   12950 postfix    6u  IPv4     8086      0t0  TCP *:smtp (LISTEN)
smtpd   12950 postfix    9u  IPv4 35762406      0t0  TCP hostname:smtp->spe.cif.ic.IP:55277 (ESTABLISHED)
smtp    13007 postfix   13u  IPv4 35762309      0t0  TCP hostname:34434->fake.VVVVV.fr:smtp (ESTABLISHED)
smtpd   14188 postfix    6u  IPv4     8086      0t0  TCP *:smtp (LISTEN)
smtpd   14188 postfix    9u  IPv4 35748921      0t0  TCP hostname:smtp->XX.XX.XX.XX:55912 (ESTABLISHED)
smtpd   14897 postfix    6u  IPv4     8086      0t0  TCP *:smtp (LISTEN)

Gostaria de saber se essa informação significa que meu servidor tenta se conectar a spe.cif.ic.IP ou se é o contrário.
O sinal -> é relevante ou devo usar um comando diferente?

    
por Kiwy 24.06.2015 / 13:03

2 respostas

7

Eu acho que a pista está nos números de porta, pegue essas duas entradas

smtpd   12950 postfix    9u  IPv4 35762406      0t0  TCP hostname:smtp->spe.cif.ic.IP:55277 (ESTABLISHED)
smtp    13007 postfix   13u  IPv4 35762309      0t0  TCP hostname:34434->fake.VVVVV.fr:smtp (ESTABLISHED)

O smtpd recebeu uma conexão na porta smtp (25) a partir de um número de porta alto, enquanto o smtp se conecta à porta remota smtp (25) e possui um número de porta local alto.

Então, -> significa conectado a

    
por 24.06.2015 / 13:23
7

No Linux, pelo menos, lsof não pode informar a você qual extremidade iniciou a conexão, pois ela obtém a lista de /proc/net/tcp , onde essa informação não está disponível. O primeiro endereço sempre se refere ao endpoint local .

Versões recentes do utilitário ss (que usam uma API do kernel diferente para recuperar informações de conexão), com -e , lhe darão direção, mas infelizmente não para conexões TCP.

Como @XTian disse , para TCP / SCTP / UDP, normalmente é possível adivinhar qual é o iniciador de conexão normalmente usará uma porta alta, enquanto o destino normalmente será uma porta baixa bem conhecida. Não há garantia no entanto. Vendo que a máquina também tem ou não tem sockets listening na mesma porta pode também confortá-lo na sua idéia de qual direção ela é. Por exemplo, no seu caso, você provavelmente tem um processo de escuta na porta smtp/25 mas nenhum da porta unknown/34434 . Seria muito improvável que fake.VVVVV.fr tivesse iniciado uma conexão com a porta 34434 em sua máquina, especialmente com uma porta de origem 25 / smtp (improvável, mas perfeitamente possível).

Para algo mais confiável, você pode consultar o rastreador de conexão.

O rastreador de conexão do firewall do sistema manterá controle de qual extremidade iniciou a conexão (ou enviou o primeiro pacote para protocolos de transporte sem conexão, como o UDP). Você pode consultar a tabela de controle de conexão com o utilitário de linha de comando conntrack ou com o comando iptstate top-like.

Lá, o primeiro endereço em cada linha será aquele do início da conexão.

Observe que ele incluirá todas as conexões rastreadas, portanto, possivelmente, também as conexões encaminhadas pelo sistema, como nos roteadores.

    
por 24.06.2015 / 14:24