Introdução
A port is a communication endpoint. Within an operating system, a port is opened or closed to data packets for specific processes or network services.
Geralmente, as portas identificam um serviço de rede específico atribuído a elas. Isso pode ser alterado configurando manualmente o serviço para usar uma porta diferente, mas, em geral, os padrões podem ser utilizados.
As primeiras 1024 portas (números de porta 0
a 1023
) são chamadas de números de porta bem conhecidos e são reservadas para os serviços mais comumente usados. Isso inclui SSH (porta 22
), HTTP (porta 80
), HTTPS (porta 443
).
Números de porta acima de 1024 são chamados de portas efêmeras.
- Os números de porta
1024
a49151
são chamados de portas registradas/usuário. - Os números de porta
49152
a65535
são chamados de portas dinâmicas/privadas.
Neste tutorial, você abrirá uma porta efêmera no Linux, já que os serviços mais comuns usam as portas bem conhecidas.
Implante suas aplicações do GitHub usando Plataforma de Aplicativos DigitalOcean. Deixe a DigitalOcean focar na escalabilidade do seu aplicativo.
Pré-requisitos
Para concluir este tutorial, você precisará de:
- Familiaridade com o uso do terminal.
Listar Todas as Portas Abertas
Antes de abrir uma porta no Linux, é necessário verificar a lista de todas as portas abertas e escolher uma porta efêmera que não esteja nessa lista.
Use o comando netstat
para listar todas as portas abertas, incluindo TCP e UDP, que são os protocolos mais comuns para transmissão de pacotes na camada de rede.
- netstat -lntu
Isso imprimirá:
- todos os soquetes ouvindo (
-l
) - a número da porta (
-n
) - portas TCP (
-t
) - portas UDP (
-u
)
OutputActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 ::1:5432 :::* LISTEN
tcp6 0 0 ::1:6379 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
udp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
Observação: Se sua distribuição não tiver o netstat
, você pode usar o comando ss
para exibir as portas abertas verificando os soquetes ouvindo.
Verifique se você está recebendo saídas consistentes usando o comando ss
para listar os soquetes ouvindo com uma porta aberta:
- ss -lntu
Isso imprimirá:
OutputNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:5432 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:27017 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:6379 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 128 [::1]:5432 0.0.0.0:*
tcp LISTEN 0 128 [::1]:6379 0.0.0.0:*
tcp LISTEN 0 128 [::]:22 0.0.0.0:*
Isso fornece mais ou menos as mesmas portas abertas que o netstat
.
Abrindo uma Porta no Linux para Permitir Conexões TCP
Agora, abra uma porta fechada e faça-a escutar por conexões TCP.
Para os propósitos deste tutorial, você estará abrindo a porta 4000
. No entanto, se essa porta não estiver aberta em seu sistema, sinta-se à vontade para escolher outra porta fechada. Apenas certifique-se de que é maior do que 1023
.
Assegure-se de que a porta 4000
não esteja sendo usada usando o comando netstat
:
- netstat -na | grep :4000
Ou o comando ss
:
- ss -na | grep :4000
A saída deve permanecer em branco, verificando assim que não está sendo usada no momento, para que você possa adicionar as regras da porta manualmente ao firewall iptables do sistema.
Para Usuários do Ubuntu e Sistemas Baseados em ufw
Use ufw
– o cliente de linha de comando para o Firewall Descomplicado.
Seus comandos se parecerão com:
- sudo ufw allow 4000
Consulte Como Configurar um Firewall ufw
para sua distribuição.
Nota:
- Ubuntu 14.0.4: “Permitir Intervalos de Portas Específicas”
- Ubuntu 16.04/18.04/20.04/22.04: “Permitindo Outras Conexões / Intervalos de Portas Específicos”
- Debian 9/10/11: “Permitindo Outras Conexões / Intervalos de Portas Específicos”
Para sistemas baseados no CentOS e no firewalld
Utilize o firewall-cmd
– o cliente de linha de comando para o daemon firewalld
.
Seus comandos serão semelhantes a:
- firewall-cmd --add-port=4000/tcp
Consulte Como Configurar o firewalld
para a sua distribuição.
Observação:
- No CentOS 7/8: “Definindo Regras para suas Aplicações / Abrindo uma Porta para suas Zonas”
- Rocky Linux 8/9: “Definindo Regras para suas Aplicações / Abrindo uma Porta para suas Zonas”
Para Outras Distribuições Linux
Utilize o iptables
para alterar as regras do filtro de pacotes IPv4 do sistema.
- iptables -A INPUT -p tcp --dport 4000 -j ACCEPT
Consulte Como Configurar um Firewall Usando iptables
para a sua distribuição.
Observação:
- Ubuntu 12.04: “Um Firewall Básico”
- Ubuntu 14.04: “Aceitar Outras Conexões Necessárias”
Testar a Nova Porta Aberta para Conexões TCP
Agora que você abriu com sucesso uma nova porta TCP, é hora de testá-la.
Primeiro, inicie o netcat (nc
) e ouça (-l
) na porta (-p
) 4000
, enquanto envia a saída do comando ls
para qualquer cliente conectado:
- ls | nc -l -p 4000
Agora, depois que um cliente abrir uma conexão TCP na porta 4000
, ele receberá a saída do comando ls
. Deixe esta sessão sozinha por enquanto.
Abra outra sessão do terminal na mesma máquina.
Como você abriu uma porta TCP, use o telnet
para verificar a conectividade TCP. Se o comando não existir, instale-o usando seu gerenciador de pacotes.
Insira o IP do seu servidor e o número da porta (4000
neste exemplo) e execute este comando:
- telnet localhost 4000
Este comando tenta abrir uma conexão TCP em localhost
na porta 4000
.
Você receberá uma saída semelhante a esta, indicando que uma conexão foi estabelecida com o programa de escuta (nc
):
OutputTrying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
while.sh
A saída do comando ls
(while.sh
, neste exemplo) também foi enviada para o cliente, indicando uma conexão TCP bem-sucedida.
Use o nmap
para verificar se a porta (-p
) está aberta:
- nmap localhost -p 4000
Este comando verificará a porta aberta:
OutputStarting Nmap 7.60 ( https://nmap.org ) at 2020-01-18 21:51 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00010s latency).
Other addresses for localhost (not scanned): ::1
PORT STATE SERVICE
4000/tcp open remoteanything
Nmap done: 1 IP address (1 host up) scanned in 0.25 seconds
A porta foi aberta. Você abriu com sucesso uma nova porta em seu sistema Linux.
Nota: nmap
apenas lista portas abertas que têm uma aplicação atualmente ouvindo. Se você não estiver usando nenhuma aplicação de escuta, como o netcat, isso exibirá a porta 4000
como fechada, já que atualmente não há nenhuma aplicação ouvindo nessa porta. Da mesma forma, o telnet
também não funcionará, já que também precisa de uma aplicação de escuta para se vincular. Esta é a razão pela qual o nc
é uma ferramenta tão útil. Isso simula tais ambientes em um comando simples.
Mas isso é apenas temporário, pois as alterações serão redefinidas cada vez que você reiniciar o sistema.
Regras Persistentes
A abordagem apresentada neste artigo apenas atualizará temporariamente as regras do firewall até que o sistema seja desligado ou reiniciado. Portanto, etapas semelhantes devem ser repetidas para abrir a mesma porta novamente após uma reinicialização.
Para Firewall ufw
Regras do ufw
não são redefinidas ao reiniciar. Isso ocorre porque está integrado ao processo de inicialização, e o kernel salva as regras do firewall usando o ufw
aplicando arquivos de configuração apropriados.
Para firewalld
Você precisará aplicar a flag --permanent
.
Consulte Como Configurar o firewalld
para sua distribuição.
Nota:
- CentOS 7/8: “Definindo Regras para suas Aplicações”
- Rocky Linux 8/9: “Definindo Regras para suas Aplicações”
Para iptables
Você precisará salvar as regras de configuração. Esses tutoriais recomendam o iptables-persistent
.
Consulte Como Configurar um Firewall Usando iptables
para sua distribuição.
Nota:
- Ubuntu 12.04: “Salvando Regras do Iptables”
- Ubuntu 14.04: “Salvando sua Configuração do Iptables”
Conclusão
Neste tutorial, aprendeu como abrir uma nova porta no Linux e configurá-la para conexões de entrada. Também utilizou netstat
, ss
, telnet
, nc
e nmap
.
Continue aprendendo com Como funciona o Firewall do Iptables, Uma Profundidade na Arquitetura do Iptables e do Netfilter, Compreensão de Sockets e Como Usar Top, Netstat, Du e Outras Ferramentas para Monitorar Recursos do Servidor.
Source:
https://www.digitalocean.com/community/tutorials/opening-a-port-on-linux