
Decidi postar esta pergunta mesmo que haja muitas perguntas semelhantes, mas nenhuma delas respondeu à minha.
- Eu verifico periodicamente as portas que meu servidor escuta.
- Meu sistema operacional Ubuntu pela saída de
lsb_relase -a
:
Distributor ID: Ubuntu
Description: Ubuntu 20.04.3 LTS
Release: 20.04
Codename: focal
- Eu executo o comando
netstat -tulpn4
e a saída mostra uma porta desconhecida:
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 580/systemd-resolve
tcp 0 0 0.0.0.0:62176 0.0.0.0:* LISTEN 900/sshd: /usr/sbin
tcp 0 0 0.0.0.0:1122 0.0.0.0:* LISTEN 1158/sshd: username
tcp 0 0 0.0.0.0:3333 0.0.0.0:* LISTEN 1158/sshd: username
udp 0 0 0.0.0.0:51820 0.0.0.0:* -
udp 0 0 127.0.0.53:53 0.0.0.0:* 580/systemd-resolve
udp 0 0 X.X.X.X:1194 0.0.0.0:* 870/openvpn
- Usei muitas ferramentas e guias para descobrir por que meu servidor está escutando na porta
51820
sem encontrar uma resposta. - Eu tentei:
sudo lsof -i :51820
- e obteve uma saída vazia.sudo netstat -ltnp | grep -w ':51820'
- e obteve uma saída vazia.sudo fuser 51820/udp
- e obteve uma saída vazia.sudo netstat -peanut | grep ":51820"
- a saída é:
udp 0 0 0.0.0.0:51820 0.0.0.0:* 0 26262 -
udp6 0 0 :::51820 :::* 0 26263 -
sudo ss -nlp | grep 51820
a saída é:
udp UNCONN 0 0 0.0.0.0:51820 0.0.0.0:*
udp UNCONN 0 0 [::]:51820 [::]:*
- Analisei as seguintes respostas e não encontrei uma solução:
Depois de pesquisar na web sobre a porta, 51820
descobri que é o "wireguard" que instalei que está escutando naquela porta, mas a pergunta permanece a mesma, como em qualquer comando que tentei, não consegui descobrir.
Responder1
Você está executando um sistema operacional que implementa o Wireguard como um módulo do kernel. Seu kernel está escutando nesta porta e, como não há nenhum processo que possua esse soquete, nenhum PID é relatado por netstat
.
Responder2
Geral:
Depois de uma pesquisa de dois dias sobre o problema, descobri, como Michael Hampton e Peter Zhabin, que não existe uma solução que mostre um ID de processo do kernel por meio de uma porta de escuta.
Além disso, durante esses dois dias procurei também algumas commands
combinações que pudessem trazer a resposta desejada, e não encontrei nenhuma maneira simples ou conveniente de fazer isso.
A solução que criei é preliminar e tenho certeza que pode ser melhorada pelos membros da comunidade.
Descontos para localização do processo
- O processo está rodando no nível do kernel ou em qualquer outro nível que evite que o processo tenha um id (PID).
- O ID do processo ou o programa do processo não foi encontrado pela saída dos comandos fornecidos:
lsof
,netstat
,ss
,fuser
. - Encontramos uma porta de escuta na saída dos comandos acima - mas não podemos configurar o programa ou o pid que está causando a escuta.
Sobre grep
:
Usaremos grep
para encontrar mais informações sobre a porta aberta.
grep
- imprima linhas que combinem com os padrões.
Da grep
página de manual via man grep
comando.
DESCRIPTION
grep searches for PATTERNS in each FILE. PATTERNS is one or more
patterns separated by newline characters, and grep prints each line
that matches a pattern. Typically PATTERNS should be quoted when grep
is used in a shell command.
- Aquié um ótimo tópico sobre como usar o comando de maneira correta e eficaz.
Como localizar o PID ou o programa que usa a porta fornecida por meio de grep
:
No meu caso a execução sudo grep --exclude-dir={sys,proc} -rnw / -e 51820 | grep -i port
resolveu o problema e mostrou todas as informações sobre o programa que utilizava a porta.
A saída fornecida:
iptables.service:6:ExecStart=/usr/sbin/iptables -I INPUT -p udp --dport 51820 -j ACCEPT
/home/username/wireguard-install.sh:238: read -p "Port [51820]: " port
/home/username/wireguard-install.sh:241: read -p "Port [51820]: " port
/home/username/wireguard-install.sh:243: [[ -z "$port" ]] && port="51820"
/usr/share/doc/netplan/examples/wireguard.yaml:9: port: 51820
/etc/wireguard/wg0.conf:8:ListenPort = 51820
/etc/systemd/system/wg-iptables.service:6:ExecStart=/usr/sbin/iptables -I INPUT -p udp --dport 51820 -j ACCEPT
/etc/systemd/system/wg-iptables.service:10:ExecStop=/usr/sbin/iptables -D INPUT -p udp --dport 51820 -j ACCEPT
A razão para os muitos sinalizadores é que outras combinações que tentei tiveram uma grande quantidade de resultados indesejados.
grep
O que significam os argumentos de comando:
--exclude-dir
- Ignore qualquer diretório de linha de comando com um sufixo de nome que corresponda ao padrão.
sys
E ignorando e proc
diretórios específicosno nosso caso específico é evitar resultados indesejados.
Exemplo: grep --exclude-dir={dir1,dir2}
evitará dir1 e dir2 durante a pesquisa.
-r
ou-R
é recursivo.-n
é o número da linha.-w
significa combinar a palavra inteira./
significa o diretório "mais alto" para iniciar a pesquisa de cima para baixo.-e
- é o padrão usado durante a pesquisa.51820
em nosso caso específico é o número da porta que foi encontrado por um dos comandos de monitoramento de rede acima.|
- é o canal para redirecionar a saída da primeira parte do comando para a segunda.
No nosso caso: redirecionando sudo grep --exclude-dir={sys,proc} -rnw / -e 51820
a saída para o próximo comandogrep -i port
-i
- Ignore as distinções de maiúsculas e minúsculas em padrões e dados de entrada, para que os caracteres que diferem apenas em maiúsculas e minúsculas correspondam entre si.port
- Encontrado para restringir os resultados à finalidade para a qual realizamos a pesquisa, encontrando mais informações sobre a porta específica que foi definida após a-e
bandeira.
Pontas:
- Faça a varredura maior possível nas primeiras etapas, começando no
/
diretório e usando sinalizadores mínimos para filtrar a saída, para garantir que você não perderá nenhum detalhe que possamos obter. - Depois de encontrar a saída desejada ou ter problemas para encontrar a saída desejada causada por uma grande quantidade de saída indesejada, comece a adicionar sinalizadores um por um.
- Especifique o número da porta como padrão, afinal este é nosso ponto de partida e nosso objetivo final.
- Utilize
grep
comandos duplos redirecionando a primeira varredura paraport
o filtro de padrão, isso pode nos localizar e agilizar a solução, afinal estamos buscando um número como padrão e isso pode levar a muitos resultados indesejados. - Se você não conseguir tirar conclusões com o resultado fornecido, faça uma pesquisa na web com as palavras-chave escolhidas que você encontrou.