Drop(deny)과 reject의 차이점
Drop와 reject의 차이점은 무엇일까?
한마디로 정의한다면 요청에 대한 거부나 불가 메시지를 전송해주느냐 전송하지 않느냐의 차이입니다.
Drop은 요청에 대한 거부패킷을 보내지 않고 reject는 요청에 대한 거부패킷을 보내줍니다.
reject응답은 TCP와 UDP, ICMP에 따라 다릅니다.
TCP의 경우 연결지향이기 때문에 TCP protocol의 RST flag를 이용하여 reject 시킵니다.
UDP의 경우는 비 연결지향의 특성상 ICMP protocol을 이용하고 있습니다. ICMP는 당연하게도 ICMP응답을 사용합니다.
Icmp의 대표적인 응답코드는 0(echo reply), 3(destination unreachable), 4(source quench), 11(time exceeded) 등이 있습니다.
가장 많이 볼 수 있는 것은 TCP 패킷에 대한 DROP과 reject입니다.
텔넷이나 ssh, ftp, sftp, scp등등등의 프로그램을 실행했을 때 알 수 있는데 텔넷으로 예를 들어보겠습니다.
telnet [ip] [port] 입력 후 trying [ip]…. 화면이 지속되고 있다면 패킷이 DROP됐거나 라우팅 문제입니다.(응답이 없으니 계속 대기하게 되는 상황)
패킷이 reject된다면 바로 연결시도를 중지하게 됩니다. (연결이 안 된다는 것을 알게 됐으니 대기하지 않고 종료)
즉, 특정 IP의 TCP PORT로 신호가 도달하지 않을 때 원인파악을 위해 telnet만으로도 많은 정보를 알 수 있게 됩니다.
예를 들어 보겠습니다.
ex)192.168.0.100이라는 서버에 24/TCP가 LISTEN되어 있지 않은 상황
telnet 192.168.0.100 24 이런 식으로 LISTEN되어있지 않은 포트로 TCP SYN을 발생시키면 OS에서는 "어? 나 그 포트 LISTEN되어 있지 않아"라고 RST flags로 reject 시킵니다.
telnet 192.168.0.100 24 로 시도를 했는데 방화벽에서 drop시키거나 라우팅 문제로 목적지에 도달하지 못하거나 돌아오지 못 할 경우 아무런 응답이 없기에 대기하게 됩니다.