Se está a resolver problemas de conectividade de rede ou a configurar uma firewall, uma das primeiras coisas a verificar é quais os portos que são realmente abertos no seu sistema.

Este artigo descreve várias abordagens para descobrir quais portas são abertas para o exterior no seu sistema Linux.

o que é porta aberta #

uma porta de escuta é uma porta de rede que uma aplicação ouve., Você pode obter uma lista de portas de escuta em seu sistema consultando a pilha de rede com comandos como ss netstat ou lsof. Cada porta de escuta pode ser aberta ou fechada (filtrada) usando uma firewall.

em termos gerais, uma porta aberta é uma porta de rede que aceita pacotes recebidos de locais remotos.,

Por exemplo, se você estiver executando um servidor web que escuta nas portas 80 e 443 e essas portas são abertas no firewall, qualquer pessoa (exceto ips bloqueados) será capaz de aceder a web sites hospedados em seu servidor web usando o seu browser. Neste caso, tanto 80e443 são portas abertas.

portas abertas podem representar um risco de segurança como cada porta aberta pode ser usado por atacantes para explorar uma vulnerabilidade ou realizar qualquer outro tipo de ataque., Você deve expor apenas as portas necessárias para a funcionalidade da sua aplicação e fechar todas as outras portas.

Check open Ports with nmap #

Nmap is a powerful network scanning tool that can scan single hosts and large networks. É usado principalmente para auditorias de segurança e testes de penetração.

Se disponível, nmap deve ser a sua primeira ferramenta quando se trata de varredura de portas. Além da varredura de portas, nmap também pode detectar o endereço Mac, tipo de OS , versões de kernel , e muito mais.,

O seguinte comando emitido a partir da consola determina quais portas estão escutando por conexões TCP da rede:

sudo nmap -sT -p- 10.10.8.8

-sT diz nmap para varredura de portas TCP, portas e -p- para pesquisar todas as 65535 portas. If -p- is not used nmap will scan only the 1000 most popular ports.

A saída acima mostra que apenas portas 22 80 e 8069 estão abertas no sistema de destino.,

Para fazer varredura de portas UDP usar -sU em vez de -sT:

sudo nmap -sU -p- 10.10.8.8

Para mais informações, visite o nmap homem página e leia sobre todas as outras opções desta ferramenta.

Check open Ports with netcat #

Netcat (or nc) é uma ferramenta de linha de comando que pode ler e escrever dados através de conexões de rede, usando os protocolos TCP ou UDP.

com netcat pode digitalizar uma única porta ou uma gama de portas.,

Por exemplo, para digitalizar para abrir as portas TCP em uma máquina remota com o endereço IP 10.10.8.8 no intervalo 20-80 você usaria o seguinte comando:

nc -z -v 10.10.8.8 20-80

-z opção informa nc scan somente para as portas abertas, sem a necessidade de envio de dados e o -v for para mais informações detalhadas.,

O resultado será parecido com isto:

Se quiser que apenas as linhas com as portas abertas sejam impressas no ecrã, filtre os resultados com o comando grep.

nc -z -v 10.10.8.8 20-80 2>&1 | grep succeeded
Connection to 10.10.8.8 22 port succeeded!Connection to 10.10.8.8 80 port succeeded!

Para digitalizar para portas UDP de passar o -u opção nc comando:

nc -z -v -u 10.10.8.8 20-80 2>&1 | grep succeeded
2>&1 construção de redirecionar o erro-padrão para a saída padrão.,

Seleção de Abrir Portas usando Bash Pseudo Dispositivo #

Outra maneira de verificar se uma porta está aberta ou fechada é usando o shell Bash /dev/tcp/.. ou /dev/udp/.. pseudo-dispositivo.

ao executar um comando num id

pseudo-dispositivo, o Bash irá abrir uma ligação TCP ou UDP à máquina indicada no porto indicado.

.,instrução else irá verificar se a porta 443 no kernel.org está aberto:

if timeout 5 bash -c '</dev/tcp/kernel.org/443 &>/dev/null'then echo "Port is open"else echo "Port is closed"fi
Port is open

Como o código acima funciona?

ao ligar-se a um porto usando um pseudo-dispositivo, o tempo-limite por omissão é enorme, por isso estamos a usar o comando timeout para matar o comando de teste após 5 segundos. Se a ligação for estabelecida para kernel.org port 443 o comando de teste retornará verdadeiro.,

Para verificar um intervalo de porta de usar o loop for :

for PORT in {20..80}; do timeout 1 bash -c "</dev/tcp/10.10.8.8/$PORT &>/dev/null" && echo "port $PORT is open"done

A saída será algo parecido com isso:

port 22 is openport 80 is open

Conclusão #

temos mostrado várias ferramentas que você pode usar para digitalizar para abrir portas. Existem também outras ferramentas e métodos para verificação de portas abertas, por exemplo, você pode usar o Python socket módulo, curl telnet ou wget .