ICMP: 포트가 열려 있어도 포트에 액세스할 수 없음 오류

ICMP: 포트가 열려 있어도 포트에 액세스할 수 없음 오류

나는 데비안 서버를 테스트하기 위해 일부 Nmap 포트 스캔을 사용하고 있습니다. 내 데비안은 브리지 연결로 실행되는 가상 머신입니다.

TCP SYN 요청을 사용한 클래식 포트 스캔은 제대로 작동하며 포트 80이 열려 있는 것으로 감지합니다(올바른).

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

하지만 UDP 포트 스캔을 실행할 때 실패하고 내 Debian 서버가 다음과 같이 종료됩니다.ICMP: 포트에 접근할 수 없음실수:

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

Wireshark 기록:

Wireshark 기록


어떻게 이럴 수있어? 내 포트 80이 열려 있는데 왜 데비안이 응답합니까?ICMP: 포트에 접근할 수 없음실수? 이것이 보안 문제입니까?

답변1

TCP와 UDP는 모두 TCP/IP의 일부이지만 둘 다 동일한 TCP/IP 또는 OSI 계층에 속하고 IP 위의 계층이지만 서로 다른 프로토콜입니다.

http://www.cyberciti.biz/faq/key-differences-Between-tcp-and-udp-protocols/

TCP(전송 제어 프로토콜)와 UDP(사용자 데이터그램 프로토콜)는 인터넷 프로토콜 제품군의 두 가지 핵심 프로토콜입니다. TCP와 UDP는 모두 전송 계층 TCP/IP 모델에서 작동하며 용도가 매우 다릅니다. TCP는 연결 지향 프로토콜입니다. UDP는 비연결 프로토콜입니다.

TCP IP 모델
(원천:ML-IP.com)

DNS 및 NTP 서비스와 같은 일부 서비스는 TCP 및 UDP 포트 모두에 응답하지만 웹 서버의 경우는 그렇지 않습니다. 웹 서버는 일반적으로 기본적으로 포트 80/TCP에만 응답합니다(그리고 전혀 작동하지 않거나 수신하지 않습니다). UDP)

다음 명령을 사용하여 Linux 시스템의 UDP 수신 포트를 나열할 수 있습니다.

$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 

TCP 포트에서 수신 대기하려면 다음 명령을 사용하십시오.

$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

이제 일반적으로 NMAP는 스캔되는 포트에 SYN을 보내고 TCP 프로토콜에 따라 데몬/서비스가 해당 포트에 바인딩되면 SYN+ACK로 응답하고 nmap은 해당 포트를 열린 것으로 표시합니다.

TCP/IP 연결 협상: 3방향 핸드셰이크

연결을 설정하기 위해 TCP는 3방향 핸드셰이크를 사용합니다. 클라이언트가 서버에 연결을 시도하기 전에 서버는 먼저 포트를 바인딩하고 수신하여 연결을 열어야 합니다. 이를 수동 개방이라고 합니다. 수동적 열기가 설정되면 클라이언트는 능동적 열기를 시작할 수 있습니다. 연결을 설정하려면 3방향(또는 3단계) 핸드셰이크가 필요합니다.

SYN: 활성 열기는 클라이언트가 서버에 SYN을 보내는 방식으로 수행됩니다. 클라이언트는 데이터 세그먼트의 시퀀스 번호를 임의의 값 A로 설정합니다. SYN-ACK: 이에 대한 응답으로 서버는 SYN-ACK로 응답합니다.

3번의 악수

그러나 서비스가 그곳에서 실행되고 있지 않으면 TCP/IP 정의 커널은 UDP 서비스에 대해 "포트에 연결할 수 없음" 메시지가 포함된 ICMP 메시지를 보내고 TCP 서비스에 대해 TCP RST 메시지를 보냅니다.

ICMP 대상에 연결할 수 없음

연결할 수 없는 대상은 어떤 이유로 인해 대상에 연결할 수 없음을 클라이언트에 알리기 위해 호스트 또는 해당 인바운드 게이트웨이[3]에 의해 생성됩니다. TCP, UDP 또는 기타 ICMP 전송은 "대상에 연결할 수 없음" 메시지를 생성할 수 있습니다. 연결할 수 없는 TCP 포트는 예상대로 "연결할 수 없는 대상 유형 3" 대신 TCP RST로 구체적으로 응답합니다.

따라서 실제로 포트 80/UDP에 대한 UDP 스캔은 해당 조합이나 프로토콜/포트를 수신하는 서비스가 없기 때문에 ICMP 연결할 수 없음 메시지를 다시 받는 것입니다.

보안상의 이유로 기본적으로 모든 메시지를 삭제하는 방화벽/iptables 규칙을 정의하고 컴퓨터가 외부에서 제공하는 포트만 허용하는 경우 이러한 ICMP 대상에 연결할 수 없는 메시지는 확실히 차단됩니다. 이런 방식으로 nmap은 열려 있는 모든 포트(특히 네트워크에서)를 더 느리게 스캔하고 서버는 더 적은 리소스를 사용하게 됩니다.

추가 이점으로 데몬/서비스가 추가 포트를 열거나 실수로 새 서비스를 추가하는 경우 새 방화벽 규칙에서 명시적으로 허용할 때까지 요청을 처리하지 않습니다.

iptables에서 DROP을 사용하지 않고 대신 REJECT 규칙을 사용하는 경우 커널은 스캔/TCP/IP 협상 시도를 무시하지 않고 대상에 연결할 수 없는 ICMP 메시지, 코드 13: "Traffic Administrative Forbidden"(관리적 관리 금지)으로 응답합니다. 필터링하면 패킷이 전달되지 않습니다.)

ipchains 및 iptables에서 SSH/HTTP를 제외한 모든 포트 차단

답변2

TCP/80과 UDP/80은 서로 다른 두 프로토콜이지만(참고자료 참조 /etc/protocols) 동일한 포트 번호를 공유합니다. TCP/80은 열려 있고 ICMP 응답을 생성할 수 있는 다른 UDP 규칙이 있습니다.

답변3

Ubuntu 18.04의 NFS 서버에서 추적 네트워크 트래픽 문제를 해결하고 있지만 최신 5.4 커널을 사용하여 Overlayfs 내보내기를 허용합니다.

난 그냥 실행해야합니다 :

rpc.mountd

그런데 NFS가 TCP를 지원하지 않는다는 오류가 발생했습니다. 어떤 이유로 NFS 서버를 다시 시작하면 문제가 해결되었습니다.

/etc/init.d/nfs-kernel-server restart

관련 정보