Como saber se uma porta TCP ou UDP está aberta ou fechada no Linux

Saber se uma porta TCP ou UDP está aberta ou fechada é uma tarefa fundamental para qualquer administrador de sistema e rede. Muitas vezes, é essencial saber se as portas estão abertas para estabelecer a comunicação com o serviço que está escutando, mas também é muito importante saber se elas estão fechadas para evitar possíveis problemas de segurança. Hoje, neste artigo, vamos mostrar como saber se uma porta está aberta ou fechada em um Linux sistema operacional, uma vez que este sistema operacional é normalmente usado em servidores.

Existem várias maneiras de verificar se uma determinada porta está aberta ou fechada, especialmente no Linux, a primeira delas é usando o popular programa Netcat que vem pré-instalado em todas as distribuições, então uma maneira muito boa de saber se uma porta está aberta É verificando-o diretamente com o Nmap programa que nos permitirá fazer a varredura de todas as portas de um determinado host. Finalmente, se quisermos saber se temos uma porta aberta ou fechada, teremos que olhar no firewall e também nas conexões atuais do sistema operacional.

Dizer se uma porta TCP ou UDP está aberta ou fechada no Linux

Ver portas abertas com Netcat

Netcat é uma ferramenta que vem por padrão na maioria das distribuições Linux, portanto, além de ser muito fácil de usar, não precisaremos instalar nenhum pacote adicional. Antes de verificar com o Netcat se a porta está aberta, vamos ver os dois parâmetros mais importantes do Netcat:

  • z é um parâmetro que garante que, ao final da verificação, a conexão seja fechada ou, caso contrário, o programa permaneceria executando em um loop até que o encerremos manualmente com control + C, de forma semelhante a quando um ping em Linux.
  • v é o parâmetro que se encarrega de verificar se a porta está aberta ou fechada.

Para verificar a porta, o que devemos fazer é digitar o seguinte em um terminal:

nc -zv {IP} {PUERTO}

Por exemplo, para verificar porta 443 em nosso roteador, vamos Tipo:

nc -zv 192.168.10.1 443

Na imagem a seguir você pode ver como essa porta está aberta:

Se testarmos o site deste artigo e a porta 443, obteremos informações semelhantes:

Caso esteja fechado, devemos colocar o seguinte:

Como você viu, é muito fácil verificar se uma porta está aberta ou fechada com o Netcat, um utilitário muito simples que vem pré-instalado no Linux. Além dos comandos “z” e “v”, também temos outros argumentos disponíveis que nos permitirão saber mais informações. Se executarmos o seguinte comando, a ajuda aparecerá:

nc -h

Como você pode ver, temos muitos argumentos para estender as funcionalidades.

Veja as portas abertas com o Nmap

Nmap é o programa por excelência para descobrir hosts e também para verificar se as diferentes portas estão abertas, este programa não vem pré-instalado em sistemas operacionais Linux, mas podemos instalá-lo diretamente dos repositórios na seguinte ordem:

sudo apt install nmap

Uma vez instalado, para saber se uma determinada porta está aberta, devemos colocar o seguinte comando:

nmap -p {PUERTO} {IP}

Na imagem a seguir, você pode ver como uma porta aberta seria exibida:

Caso uma porta seja fechada ou filtrada por um firewall, aparecerá o seguinte:

Se quisermos escanear todas as portas de um determinado host ou um intervalo de portas, teremos que indicar um intervalo de portas da seguinte forma:

nmap -p {PUERTO}-{PUERTO} {IP}

Por exemplo:

nmap -p 1-65535 192.168.10.1

Como você pode ver, verificar as portas abertas com o Nmap é realmente simples, além disso, podemos escanear todos os hosts na rede local doméstica ou profissional, para posteriormente escanear as diferentes portas.

Verifique o firewall no Linux

Se quisermos verificar se temos uma porta aberta para aceitar conexões, a primeira coisa a verificar é o status do firewall em nosso sistema operacional Linux. Por padrão, em todos os servidores Linux a política é permissiva, ou seja, todos os pacotes são aceitos pela política. Podemos modificar esta política para uma restritiva, e até mesmo adicionar novas tabelas, cadeias e regras para permitir ou negar tráfego.

Se em nosso terminal Linux colocamos o seguinte:

iptables -L

Iremos obter todas as cadeias e regras da tabela de “filtro” do iptables, no caso de usar Nftables, você deve indicar o seguinte comando:

nft list ruleset

Uma recomendação de segurança muito importante é que todas as portas de um servidor Linux sejam fechadas, desta forma, quando disparamos um serviço escutando em uma determinada porta, não ficará acessível a menos que o permitamos no firewall. Devemos verificar detalhadamente se uma determinada porta está aberta ou não para que nossos serviços sejam acessíveis do exterior.

Ver o status das conexões TCP e UDP

Se estivermos interessados ​​em saber o estado de todos os protocolos TCP, UDP, ICMP e outros em nosso sistema operacional, uma ferramenta amplamente utilizada sempre foi o “netstat”, no entanto, essa ferramenta ficou em segundo lugar graças ao novo “ss” isso nos fornecerá uma grande quantidade de informações de forma fácil e rápida. Esta ferramenta se encarrega de verificar todos os sockets abertos ou fechados em nosso servidor Linux, e poderemos ver as estatísticas desses sockets abertos ou fechados. Se você já usou a ferramenta netstat no passado, temos certeza de que vai adorar essa nova ferramenta “ss”.

A ferramenta “ss” já vem pré-instalada nos sistemas operacionais Linux como parte do próprio sistema, como é o caso do “ping”, “traceroute” e muitas outras ferramentas. Se abrirmos um console, tanto no modo de usuário quanto no modo de superusuário, devemos executar:

ss

Depois de executar este pedido, podemos ver o seguinte:

Veremos o estado da conexão (ESTAB), e também os pacotes recebidos e enviados, o endereço local e a porta, bem como o endereço remoto e a porta utilizada. Vamos ter um grande número de portas em uso pelos diferentes programas e serviços que teremos instalados no sistema operacional.

Se quisermos ver o status de todas as portas (soquetes), podemos colocar a seguinte ordem:

ss -a

Se quisermos ver apenas as portas que estão “ouvindo”, devemos colocar o seguinte comando:

ss -l

Na imagem a seguir você pode ver um exemplo de portas que estão “PRONTAS” para aceitar conexões de entrada:

No caso de querermos mostrar as conexões TCP, teremos que usar o argumento “-t” e no caso de querermos mostrar as conexões UDP, teremos que usar o argumento “-u”.

ss -t ss -u

O comando “ss” é realmente útil para mostrar todas as conexões estabelecidas e também ouvir em nosso sistema operacional Linux.

Como você viu, temos diferentes métodos para saber se uma porta está aberta ou fechada em um host remoto e também em nosso computador local, dependendo do que tivermos interesse em saber, usaremos uma ferramenta ou outra, o mais importante é que todas as Portas que não estiverem em uso deverão ser fechadas para segurança através do firewall, desta forma, evitaremos problemas de segurança e exploração de vulnerabilidades nos servidores.