답변:
일반적으로 상대방이 포트에 접근 할 수 없다는 것을 알리려면 REJECT를 사용하십시오. 사람들이보고 싶지 않은 호스트에 대한 연결에는 DROP을 사용하십시오.
일반적으로 LAN 내부의 연결에 대한 모든 규칙은 REJECT를 사용해야합니다. 인터넷의 경우 특정 서버에서 ID를 제외하고 인터넷 연결은 일반적으로 삭제됩니다.
DROP을 사용하면 연결이 비어있는 IP 주소로 표시됩니다. 검사기는 비어있는 주소를 계속 검사하지 않도록 선택할 수 있습니다. NAT를 사용하여 방화벽에서 연결을 재 지정할 수 있다고 가정하면 잘 알려진 서비스가 존재한다고해서 반드시 주소에 서버가 존재하는 것은 아닙니다.
SMTP 서비스를 제공하는 모든 주소에서 아이디를 전달하거나 거부해야합니다. 그러나 SMTP 서버에서 ID 조회를 사용하는 데 실패했습니다. 작동하는 ID 서비스에 의존하는 채팅 프로토콜이 있습니다.
편집 : DROP 규칙을 사용하는 경우 :-UDP 패킷이 삭제되고 서비스가없는 방화벽이없는 포트에 연결하는 것과 동일합니다. -TCP 패킷은 서비스가없는 열린 포트가 응답하는 것과 동일한 응답 인 ACK / RST를 반환합니다. 일부 라우터는 다운 된 서버를 대신하여 응답하고 ACK / RST입니다.
거부 규칙을 사용하면 포트를 사용할 수 없음을 나타내는 ICMP 패킷이 전송됩니다.
차이점은 REJECT 대상이 소스에 거부 응답을 보내는 반면 DROP 대상은 아무것도 보내지 않는다는 것입니다.
이것은 예를 들어 아이덴티티 서비스에 유용 할 수 있습니다. REJECT를 사용하면 클라이언트가 시간 종료를 기다릴 필요가 없습니다.
이에 대한 추가 정보 : http://www.linuxtopia.org/Linux_Firewall_iptables/x4550.html
일반적으로 공격자로부터 특정 포트로의 프로브 를 무시 하고 싶습니다. 즉, '연결 거부'를 다시 보내지 않으려는 것입니다. '연결이 거부되었습니다'는 '여기에 서버가 있습니다'라는 의미이며 더 많은 정보를 제공 할 수 있지만 패킷을 삭제해도 소프트웨어 버전, 가능한 취약성 또는 서버가 IP를 수신하고 있다는 사실에 대한 단서를 제공하지 않습니다.
위의 이유는 REJECT 대신 DROP을 사용하는 주요 이유 중 하나입니다.
나는 여기에 많은 상충되는 답변을 보았고 이것이 올바른 키워드를 가진 Google의 첫 번째 기사라고 생각합니다. 올바른 설명은 다음과 같습니다.
간단합니다.
DROP은 패킷과 전혀 관련이 없습니다. 호스트에게 전달되지 않고 응답하지 않습니다. IPtables의 맨 페이지는 바닥에 패킷을 떨어 뜨린다 고 말합니다. 즉, 패킷과 관련이 없습니다.
거부는 패킷을 다시 전송한다는 점에서 DROP과 다르지만 서버에 IP가 있지만 수신 대기 상태 인 포트가없는 것처럼 대답합니다. IPtables는 TCP 또는 UDP의 경우 ICMP 대상 포트에 연결할 수없는 경우 RST / ACK를 보냅니다.
기계의 존재를 완전히 숨기려고한다면 -j DROP
적절합니다. 예를 들어,이를 사용하여 블랙리스트를 구현할 수 있습니다.
포트가 열려 있다는 사실을 숨기려면 포트가 열려 있지 않은 경우 발생할 수있는 동작을 모방해야합니다.
-p tcp -j REJECT --reject-with tcp-reset
-p udp -j REJECT --reject-with icmp-port-unreachable
포트 스캐너가 일부 포트가 패킷을 삭제하는 동안 대부분 거부하고있는 패킷을 발견하면 손실 된 패킷이 열려 있지만 숨겨진 포트에 있다고 가정 할 수 있습니다.
많은 정답에도 불구하고 내 두 센트 :
다음은 금지 시스템 규칙 (방화벽, IDS 등)과 관련하여 해당 주제에 대한 간단한 PoC FW.IDS-DROP-vs-REJECT 입니다.
곧:
DROP
모든 포트를 차단하는 경우 반복적 인 침입자에 사용할 수 있습니다 (따라서 서버가 침입자쪽에있는 것처럼 보입니다)REJECT --reject-with tcp-reset
다중 포트 금지에 가장 적합한 선택입니다. 실제 닫힌 포트처럼 동작하기 때문입니다.DROP
와 REJECT
(없이 tcp-reset
침입자 뭔가 차단가 있음 "신호를"(그래서 필요한 데이터를 제공하는 희망에서 "공격을"계속 그를 자극 할 수있는 줄 것이다) 어느 시점에서)예, DROP 사용은 의미가 없습니다. 거부를 사용하십시오.
규칙에 "DROP"라고 표시 되어도 시스템은 TCP RST / ACK를 사용하여 들어오는 SYN에 응답합니다. 이는 서비스가 실행되지 않는 포트의 기본 동작입니다. (tcpdump 등은 이것을 기록하지 않습니다.)
서비스가 실행중인 경우 SYN은 TCP SYN / ACK와 일치합니다.
DROP은 TCP SYN / ACK에서는 정상적으로 응답하지 않고 대신 RST / ACK에서는 응답하기 때문에 DROP 규칙은 방화벽을 알리고 포트 스캐너는 사용자가 방화벽을 설정하고 있다는 것을 알고 계속 희망 할 수 있습니다. 방화벽을 막을 수 있습니다.
이제 nmap은 "closed"대신 "filtered"를보고 할 수 있습니다.
$ nmap localhost
Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds
$ iptables -I INPUT -p tcp --dport 1111 -j DROP
$ nmap localhost
Starting Nmap 6.40 ( http://nmap.org ) at 2018-03-14 00:21 SAST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000060s latency).
Not shown: 986 closed ports
PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
1111/tcp filtered lmsocialserver
Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds
$ iptables -D INPUT 1
따라서, "보이지 않는"방화벽 설정은 전용 장치가 장치 사이에 있고 선택적으로 포트를 전달하는 것입니다.
기본 스캐너를 엉망으로 만들려면 TCP 연결을 TARPIT하면 TCP 창을 0으로 설정하여 연결을 연 후 데이터를 전송할 수 없으므로 연결을 닫으라는 요청을 무시하고 스캐너가 기다려야 함 확실하게 연결 시간이 초과 될 수 있습니다. 그러나 공격자가이를 감지하여 시간 초과를 매우 짧게 만드는 것은 쉽지 않습니다.
모든 것을 고려할 때 REJECT를 사용하거나 서버와 인터넷 사이에 전용 포트 전달 장치를 배치하는 것이 가장 좋습니다.
또는 방화벽이 필요없는 인터넷 연결 시스템에서 서비스를 실행하기 만하면됩니다.
일반적으로 REJECT는 웹 서버에 가장 적합합니다. 액세스하려는 모든 서비스 (아마도 그렇지 않은 경우)는 신속하게 응답을 받고 사용자 또는 다른 서비스는 네트워크 중단이 있는지 궁금해하지 않습니다.
DROP
를 발행 할 혐의에 대한 출처를 제공해 주 SYN/ACK
시겠습니까? 나는 내 기계에서 이것을 보지 못했습니다.
DROP
있는 한 을 반환하는 귀하의 주장을지지하지 않습니다 SYN/ACK
. 나도 어느 버전에서도이 동작을 본 적이 없다 iptables
. 귀하의 주장을 뒷받침하는 출처가 있다면 그것을 보는 것이 가장 유용합니다. 확실히, 방금 한 패킷 덤프는 귀하의 주장을 지원하지 않습니다.