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.
Normalmente, 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, as configurações padrão podem ser utilizadas.
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 utilizados. Isso inclui SSH (porta 22
), HTTP (porta 80
), HTTPS (porta 443
).
Os 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 utilizam as portas bem conhecidas.
Implante suas aplicações do GitHub usando a Plataforma de Aplicativos DigitalOcean. Deixe a DigitalOcean se concentrar em dimensionar sua aplicação.
Pré-requisitos
Para concluir este tutorial, você precisará:
- Familiaridade com o uso do terminal.
Listar Todas as Portas Abertas
Antes de abrir uma porta no Linux, você deve verificar a lista de todas as portas abertas e escolher uma porta efêmera para abrir que não esteja nesta 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
Isto irá imprimir:
- todos os sockets ouvindo (
-l
) - o 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
Nota: Se sua distribuição não tiver netstat
, você pode usar o comando ss
para exibir as portas abertas verificando os sockets ouvintes.
Verifique se você está recebendo saídas consistentes usando o comando ss
para listar sockets ouvintes com uma porta aberta:
- ss -lntu
Isto irá 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:*
Isto 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 com que ela esteja pronta para conexões TCP.
Para os propósitos deste tutorial, você estará abrindo a porta 4000
. No entanto, se essa porta não estiver aberta no seu sistema, sinta-se à vontade para escolher outra porta fechada. Apenas certifique-se de que ela seja maior que 1023
.
Verifique se a porta 4000
não está sendo usada usando o comando netstat
:
- netstat -na | grep :4000
Ou o comando ss
:
- ss -na | grep :4000
A saída deve permanecer vazia, verificando assim que ela 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 o ufw
– o cliente de linha de comando para o UncomplicatedFirewall.
Seus comandos serão semelhantes a:
- sudo ufw allow 4000
Consulte Como Configurar um Firewall ufw
para sua distribuição.
Nota:
- Ubuntu 14.0.4: “Permitir Intervalos Específicos de Portas”
- Ubuntu 16.0.4/18.0.4/20.0.4/22.0.4: “Permitindo Outras Conexões / Faixas de Portas Específicas”
- Debian 9/10/11: “Permitindo Outras Conexões / Faixas de Portas Específicas”
Para CentOS e Sistemas Baseados em firewalld
Use 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 sua distribuição.
Observação:
- 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
Use 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 sua distribuição.
Observação:
- Ubuntu 12.04: “Um Firewall Básico”
- Ubuntu 14.04: “Aceitar Outras Conexões Necessárias”
Testar a Porta Recém-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 escute (-l
) na porta (-p
) 4000
, enquanto envia a saída do 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 ls
. Deixe esta sessão sozinha por enquanto.
Abra outra sessão de 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.
Informe 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 ouvinte (nc
):
OutputTrying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
while.sh
A saída do ls
(while.sh
, neste exemplo) também foi enviada ao cliente, indicando uma conexão TCP bem-sucedida.
Use 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 no 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 ouvindo, como o netcat, isso exibirá a porta 4000
como fechada, já que não há nenhuma aplicação ouvindo nessa porta atualmente. Da mesma forma, telnet
também não funcionará, já que ele também precisa de uma aplicação ouvindo para se vincular. Essa é a razão pela qual nc
é uma ferramenta tão útil. Isso simula tais ambientes em um comando simples.
Mas isso é apenas temporário, já que as alterações serão redefinidas toda vez que você reiniciar o sistema.
Regras Persistindo
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 o Firewall ufw
ufw
rules não são redefinidos durante a reinicialização. Isso ocorre porque está integrado ao processo de inicialização, e o kernel salva as regras do firewall usando ufw
aplicando os arquivos de configuração apropriados.
Para firewalld
Você precisará aplicar a bandeira --permanent
.
Consulte Como Configurar o firewalld
para a sua distribuição.
Nota:
- CentOS 7/8: “Configurando Regras para suas Aplicações”
- Rocky Linux 8/9: “Configurando 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 a sua distribuição.
Nota:
- Ubuntu 12.04: “Salvando Regras do Iptables”
- Ubuntu 14.04: “Salvando sua Configuração do Iptables”
Conclusão
Neste tutorial, você aprendeu como abrir uma nova porta no Linux e configurá-la para conexões de entrada. Você também utilizou netstat
, ss
, telnet
, nc
e nmap
.
Continue seu aprendizado com Como o Firewall Iptables Funciona, Uma Profundidade na Arquitetura do Iptables e Netfilter, Compreendendo 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