Como saber qual processo tem uma porta específica aberta no Linux?

33

Eu corri o nmap no meu servidor e encontrei uma porta estranha aberta. Eu estou tentando descobrir se há uma maneira de mapear essa porta para um processo específico, mas não tenho idéia se existe tal ferramenta.

Alguma sugestão?

    
por jnman 14.06.2009 / 07:24

6 respostas

56

Assim como o Netstat, mencionado em outros posts, o comando lsof deve ser capaz de fazer isso muito bem. Apenas use isso:

lsof -i :<port number>

e todos os processos devem surgir. Eu uso no OS X com bastante frequência.

Artigo da administração do Debian para o lsof

    
por 14.06.2009 / 07:30
22

Aviso: seu sistema está comprometido.

A ferramenta que você precisa é lsof , que listará arquivos (e soquetes e portas). É mais provável que seja instalado, e é mais provável que seja a versão do invasor, o que significa que ele irá mentir para você.

Este é realmente um rootkit. Eu já vi esse comportamento antes, e é sempre um rootkit. Seu sistema está comprometido e qualquer ferramenta que você esteja usando originária da mesma máquina não é confiável. Inicialize em um Live CD (que tem binários confiáveis somente leitura) e use-o para extrair seus dados, configurações, etc. Quaisquer programas que você tenha, quaisquer scripts que tenha, os abandona. Não os traga . Trate-os, e o sistema, como se eles tivessem hanseníase, porque eles fazem

.

Quando terminar, elimine a órbita .

Faça isso o mais rápido possível. Ah, e desconecte sua conexão de rede - negue o acesso do invasor.

    
por 14.06.2009 / 22:44
13
sudo netstat -lnp  

Lista as portas que estão atendendo conexões de entrada e o processo associado que tem a porta aberta.

    
por 14.06.2009 / 07:30
4

netstat -anp

O "-p" informa para listar o ID do processo que tem a porta aberta. O -an diz para listar as portas de escuta e não resolver os nomes. Em sistemas ocupados que podem acelerar bastante a velocidade de retorno.

netstat -anp | grep "LIST"

Isso vai te dar as portas abertas.

    
por 14.06.2009 / 07:30
4

Se você não conseguir ver a porta aberta com as ferramentas do sistema operacional e suspeitar de uma intrusão, pode ser que um rootkit tenha sido instalado.

O rootkit pode ter mudado as ferramentas de sistema para evitar certos processos e portas ou módulos do kernel modificados.

Você pode verificar o rootkit com várias ferramentas automatizadas. 'apt-cache search rootkit' mostra o seguinte no Ubuntu:

chkrootkit - rootkit detector
rkhunter - rootkit, backdoor, sniffer and exploit scanner
unhide - Forensic tool to find hidden processes and ports

Se acontecer de você ter um rootkit, você pode reverter o 'alterado' para o seu sistema, mas eu recomendo que você descubra como a intrusão foi feita e endureça o sistema para que ele não se repita.

Eles não são exclusivos do Ubuntu, você pode usá-los no CentOS também. Basta procurar o pacote ou baixá-lo de sua página.

Pela saída dessa porta, parece que você está executando o pcanywhere de fato: " Ы < Enter >" é muito semelhante a "Por favor, pressione < Enter >" que é pcanywhere mensagem de boas vindas. Eu não sei porque o processo não aparece na lista de processos. Você é raiz?

Você pode tentar reinicializar para ver se também é um processo único em execução.

    
por 14.06.2009 / 08:45
0

Para expor a resposta por @bjtitus você pode obter algumas informações muito detalhadas, por exemplo:

$ lsof -i :8000
COMMAND  PID  USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
squid3  1289 proxy   15u  IPv6 14810490      0t0  TCP *:8000 (LISTEN)

$ ps -fp 1289
UID        PID  PPID  C STIME TTY          TIME CMD
proxy     1289     1  0 09:48 ?        00:00:00 /usr/sbin/squid3 -N -f /etc/squid-deb-proxy/squid-deb-proxy.conf

Eu posso ver ali que o squid é o processo, mas é realmente meu squid-deb-proxy que está ocupando a porta.

Outro bom exemplo de um aplicativo java:

$ lsof -i :4242
COMMAND  PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
java    3075 root   86u  IPv4    12019      0t0  TCP *:4242 (LISTEN)

$ ps -fp 3075
UID        PID  PPID  C STIME TTY          TIME CMD
root      3075     1 15 May24 ?        3-16:07:25 /usr/local/crashplan/jre/bin/java -Dfile.encoding=UTF-8 -Dapp=CrashPlanService -DappBaseName=CrashPl

Você pode ver em lsof (LiSt Open Files) que é java, o que é menos que útil. Executando o comando ps com o PID, podemos ver imediatamente que é o CrashPlan.

    
por 17.06.2014 / 17:57