ICMP: erro de porta inacessível, mesmo se a porta estiver aberta

3

Estou testando meu servidor Debian com alguma varredura de porta Nmap. Meu Debian é uma máquina virtual rodando em uma conexão em ponte.

A verificação de porta clássica usando a solicitação TCP SYN funciona bem e detecta a porta 80 como aberta (o que é correto):

nmap -p 80 192.168.1.166   

Starting Nmap 6.47 ( http://nmap.org ) at 2016-02-10 21:36 CET
Nmap scan report for 192.168.1.166
Host is up (0.00014s latency).
PORT   STATE SERVICE
80/tcp open  http
MAC Address: xx:xx:xx:xx:xx:xx (Cadmus Computer Systems)

Nmap done: 1 IP address (1 host up) scanned in 0.51 seconds

Mas ao executar a varredura da porta UDP, ele falha e meu servidor Debian responde com um erro ICMP: Porta inacessível :

nmap -sU -p 80 192.168.1.166

Starting Nmap 6.47 ( http://nmap.org ) at 2016-02-10 21:39 CET
Nmap scan report for 192.168.1.166
Host is up (0.00030s latency).
PORT   STATE  SERVICE
80/udp closed http
MAC Address: xx:xx:xx:xx:xx:xx (Cadmus Computer Systems)

Nmap done: 1 IP address (1 host up) scanned in 0.52 seconds

Registro do Wireshark:

Como isso é possível? Minha porta 80 está aberta, por que o Debian responde com um erro ICMP: Port unreachable ? Isso é um problema de segurança?

    
por hg8 10.02.2016 / 21:43

2 respostas

5

Embora o TCP e o UDP façam parte do TCP / IP, ambos pertencem às mesmas camadas TCP / IP ou OSI, e ambos são uma camada acima do IP, são protocolos diferentes.

link

Transmission Control Protocol (TCP) and User Datagram Protocol (UDP) are two of the core protocols of the Internet Protocol suite. Both TCP and UDP work at the transport layer TCP/IP model and both have a very different usage. TCP is a connection-oriented protocol. UDP is a connectionless protocol.

modelo tcp ip http://www.ml-ip.com/assets/images/ tcpip-layers.gif

Alguns serviços realmente atendem às portas TCP e UDP ao mesmo tempo, como é o caso dos serviços DNS e NTP, entretanto este não é certamente o caso dos servidores web, que normalmente respondem apenas por padrão à porta 80 / TCP (e não funciona / ouve nada no UDP)

Você pode listar suas portas de escuta UDP em um sistema Linux com:

$sudo netstat -anlpu
Active Internet connections (servers and established)  
Proto Recv-Q Send-Q Local Address           Foreign Address             State       PID/Program name  
udp        0      0 0.0.0.0:1900            0.0.0.0:*                           15760/minidlnad   
udp        0      0 0.0.0.0:5000            0.0.0.0:*                           32138/asterisk  
udp        0      0 0.0.0.0:4500            0.0.0.0:*                           1592/charon     
udp        0      0 0.0.0.0:4520            0.0.0.0:*                           32138/asterisk  
udp        0      0 0.0.0.0:5060            0.0.0.0:*                           32138/asterisk  
udp        0      0 0.0.0.0:4569            0.0.0.0:*                           32138/asterisk  
udp        0      0 0.0.0.0:500             0.0.0.0:*                           1592/charon     
udp        0      0 192.168.201.1:53        0.0.0.0:*                           30868/named     
udp        0      0 127.0.0.1:53            0.0.0.0:*                           30868/named     
udp        0      0 0.0.0.0:67              0.0.0.0:*                           2055/dhcpd      
udp        0      0 0.0.0.0:14403           0.0.0.0:*                           1041/dhclient   
udp    17920      0 0.0.0.0:68              0.0.0.0:*                           1592/charon     
udp        0      0 0.0.0.0:68              0.0.0.0:*                           1041/dhclient   
udp        0      0 0.0.0.0:56417           0.0.0.0:*                           2055/dhcpd      
udp        0      0 192.168.201.1:123       0.0.0.0:*                           1859/ntpd       
udp        0      0 127.0.0.1:123           0.0.0.0:*                           1859/ntpd       
udp        0      0 192.168.201.255:137     0.0.0.0:*                           1777/nmbd       
udp        0      0 192.168.201.1:137       0.0.0.0:*                           1777/nmbd       
udp        0      0 0.0.0.0:137             0.0.0.0:*                           1777/nmbd       
udp        0      0 192.168.201.255:138     0.0.0.0:*                           1777/nmbd       
udp        0      0 192.168.201.1:138       0.0.0.0:*                           1777/nmbd       
udp        0      0 0.0.0.0:138             0.0.0.0:*                           1777/nmbd       
udp        0      0 192.168.201.1:17566     0.0.0.0:*                           15760/minidlnad 

E suas portas TCP de escuta com o comando:

$sudo netstat -anlpt
Active Internet connections (servers and established)  
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name  
tcp        0      0 0.0.0.0:5060            0.0.0.0:*               LISTEN      32138/asterisk  
tcp        0      0 192.168.201.1:8200      0.0.0.0:*               LISTEN      15760/minidlnad   
tcp        0      0 192.168.201.1:139       0.0.0.0:*               LISTEN      2092/smbd       
tcp        0      0 0.0.0.0:2000            0.0.0.0:*               LISTEN      32138/asterisk  
tcp        0      0 192.168.201.1:80        0.0.0.0:*               LISTEN      7781/nginx      
tcp        0      0 192.168.201.1:53        0.0.0.0:*               LISTEN      30868/named     
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      30868/named     
tcp        0      0 192.168.201.1:22        0.0.0.0:*               LISTEN      2023/sshd       
tcp        0      0 0.0.0.0:8888            0.0.0.0:*               LISTEN      1919/perl       
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      30868/named     
tcp        0      0 192.168.201.1:445       0.0.0.0:*               LISTEN      2092/smbd       
tcp        0    224 192.168.201.1:22        192.168.201.12:56820    ESTABLISHED 16523/sshd: rui [pr

Agora, normalmente o NMAP envia um SYN para a porta que está sendo varrida e, de acordo com o protocolo TCP, se um daemon / serviço estiver ligado à porta, ele responderá com um SYN + ACK e o nmap mostrará como aberto.

Negociação de conexão TCP / IP: handshake de 3 vias

To establish a connection, TCP uses a three-way handshake. Before a client attempts to connect with a server, the server must first bind to and listen at a port to open it up for connections: this is called a passive open. Once the passive open is established, a client may initiate an active open. To establish a connection, the three-way (or 3-step) handshake occurs:

SYN: The active open is performed by the client sending a SYN to the server. The client sets the segment's sequence number to a random value A. SYN-ACK: In response, the server replies with a SYN-ACK.

Noentanto,seumserviçonãoestiversendoexecutado,oTCP/IPdefinequeokernelenviaráumamensagemICMPdevoltacomumamensagem"Porta inacessível" para serviços UDP e mensagens TCP RST para serviços TCP.

Destino do ICMP inacessível

Destination unreachable is generated by the host or its inbound gateway[3] to inform the client that the destination is unreachable for some reason. A Destination Unreachable message may be generated as a result of a TCP, UDP or another ICMP transmission. Unreachable TCP ports notably respond with TCP RST rather than a Destination Unreachable type 3 as might be expected.

Então, de fato, a sua varredura UDP para a porta 80 / UDP simplesmente recebe uma mensagem de ICMP inacessível porque não há um serviço ouvindo essa combinação ou protocolo / porta.

Quanto a considerações de segurança, essas mensagens inacessíveis de destino do ICMP podem certamente ser bloqueadas, se você definir regras de firewall / iptables que DROP todas as mensagens por padrão e permitir apenas as portas que sua máquina exibe para o exterior. Dessa forma, o nmap verifica todas as portas abertas, especialmente em uma rede, será mais lento e os servidores usarão menos recursos.

Como uma vantagem adicional, se um daemon / serviço abrir portas adicionais ou um novo serviço for incluído por engano, ele não servirá solicitações até que seja expressamente permitido pelas novas regras de firewall.

Por favor, note que, se em vez de usar DROP no iptables, você usar regras REJECT, o kernel não irá ignorar as tentativas de negociação de varredura / TCP / IP e responderá com mensagens ICMP de Destination inacessível, código 13: " Comunicação administrativamente proibida (filtragem administrativa impede que o pacote seja encaminhado) ".

Bloquear todas as portas, exceto SSH / HTTP em ipchains e iptables

    
por 11.02.2016 / 01:26
3

TCP / 80 e UDP / 80 são dois protocolos diferentes (veja /etc/protocols ) que compartilham o mesmo número de porta. O TCP / 80 está aberto e há outra regra para o UDP que está gerando essa resposta do ICMP.

    
por 10.02.2016 / 22:05