iptables를 사용할 때 거부 대 삭제


답변:


79

일반적으로 상대방이 포트에 접근 할 수 없다는 것을 알리려면 REJECT를 사용하십시오. 사람들이보고 싶지 않은 호스트에 대한 연결에는 DROP을 사용하십시오.

일반적으로 LAN 내부의 연결에 대한 모든 규칙은 REJECT를 사용해야합니다. 인터넷의 경우 특정 서버에서 ID를 제외하고 인터넷 연결은 일반적으로 삭제됩니다.

DROP을 사용하면 연결이 비어있는 IP 주소로 표시됩니다. 검사기는 비어있는 주소를 계속 검사하지 않도록 선택할 수 있습니다. NAT를 사용하여 방화벽에서 연결을 재 지정할 수 있다고 가정하면 잘 알려진 서비스가 존재한다고해서 반드시 주소에 서버가 존재하는 것은 아닙니다.

SMTP 서비스를 제공하는 모든 주소에서 아이디를 전달하거나 거부해야합니다. 그러나 SMTP 서버에서 ID 조회를 사용하는 데 실패했습니다. 작동하는 ID 서비스에 의존하는 채팅 프로토콜이 있습니다.

편집 : DROP 규칙을 사용하는 경우 :-UDP 패킷이 삭제되고 서비스가없는 방화벽이없는 포트에 연결하는 것과 동일합니다. -TCP 패킷은 서비스가없는 열린 포트가 응답하는 것과 동일한 응답 인 ACK / RST를 반환합니다. 일부 라우터는 다운 된 서버를 대신하여 응답하고 ACK / RST입니다.

거부 규칙을 사용하면 포트를 사용할 수 없음을 나타내는 ICMP 패킷이 전송됩니다.


5
사실이 아닙니다. 규칙에 "DROP"라고 표시되어 있어도 시스템은 들어오는 패킷에 TCP SYN / ACK가 열려있는 것처럼 응답합니다. 실제로 패킷을 삭제하려면 시스템에 방화벽 규칙이없는 TCP RST / ACK로 응답해야합니다. 따라서 최상의 방화벽 설정은 선택한 포트만 전달하는 것입니다. DROP 규칙은 방화벽을 알리고 포트 스캐너는 사용자가 무언가를 방화벽으로 만들고 있음을 알고 방화벽을 차단하기 위해 계속 망치고 있습니다.
Dagelf

2
내 요점은, 당신이 무언가를 방화벽으로 만들고 있는지 아닌지 여부는 TCP 스택이 DROP 할 때 서비스가 처음부터 실행되지 않을 때와 다르게 행동한다는 사실 때문에 외부에서 감지 할 수 있습니다!
Dagelf

2
차이점을 활용하여 포트를 모니터링하는 봇넷이 있다는 사실을 변경하지 않습니다.
Dagelf

1
무엇을 하든지 일관성을 유지하십시오. 공격자가 사용하지 않는 포트 번호를 선택하여 연결을 시도하면 의도적으로 차단중인 포트 번호를 선택한 것과 동일한 응답을 받아야합니다. 다른 반응을 보이면 거기에 무언가가 있다고 알려줍니다. 예를 들어, 사용중인 데이터베이스 서버를 판별하기 위해 다른 응답을 제공하는 purtnumber를 사용할 수 있습니다. 해당 서버에 SQL 인젝션을 조정할 수 있습니다.
user313114

5
@Dagelf DROP이 응답을 보내는 정보를 어디서 얻습니까? 그것은 큰 소식이며 내가 관찰하고 들었던 모든 것에 반합니다. 이 동작을 설명하는 문서에 대한 링크가 있습니까?
Score_Under

27

차이점은 REJECT 대상이 소스에 거부 응답을 보내는 반면 DROP 대상은 아무것도 보내지 않는다는 것입니다.

이것은 예를 들어 아이덴티티 서비스에 유용 할 수 있습니다. REJECT를 사용하면 클라이언트가 시간 종료를 기다릴 필요가 없습니다.

이에 대한 추가 정보 : http://www.linuxtopia.org/Linux_Firewall_iptables/x4550.html


2
DROP 대상은 아무것도 보내지 않습니다. 허용 된 답변에 대한 내 의견을 확인하고 세부 사항에 관심이있는 경우 주제를 직접 조사하십시오!
Dagelf

8

일반적으로 공격자로부터 특정 포트로의 프로브 를 무시 하고 싶습니다. 즉, '연결 거부'를 다시 보내지 않으려는 것입니다. '연결이 거부되었습니다'는 '여기에 서버가 있습니다'라는 의미이며 더 많은 정보를 제공 할 수 있지만 패킷을 삭제해도 소프트웨어 버전, 가능한 취약성 또는 서버가 IP를 수신하고 있다는 사실에 대한 단서를 제공하지 않습니다.

위의 이유는 REJECT 대신 DROP을 사용하는 주요 이유 중 하나입니다.


6
iptables 규칙이 없으면 닫힌 포트의 기본값은 REJECT입니다. 모든 포트를 삭제하면 좋은 대안이되지만 (호스트가 표시됨) 특정 포트만 삭제하면 실제로 거부보다 ​​더 많은 정보를 제공하게됩니다. 누군가 nmap과 같은 블랭킷 프로브를 사용하는 경우 패킷을 삭제하는 특정 포트가 "필터링 된"것으로 표시되어 숨어있는 서비스가 있다는 것을 의미합니다.
Raptor007

7

나는 여기에 많은 상충되는 답변을 보았고 이것이 올바른 키워드를 가진 Google의 첫 번째 기사라고 생각합니다. 올바른 설명은 다음과 같습니다.
간단합니다.

DROP은 패킷과 전혀 관련이 없습니다. 호스트에게 전달되지 않고 응답하지 않습니다. IPtables의 맨 페이지는 바닥에 패킷을 떨어 뜨린다 고 말합니다. 즉, 패킷과 관련이 없습니다.

거부는 패킷을 다시 전송한다는 점에서 DROP과 다르지만 서버에 IP가 있지만 수신 대기 상태 인 포트가없는 것처럼 대답합니다. IPtables는 TCP 또는 UDP의 경우 ICMP 대상 포트에 연결할 수없는 경우 RST / ACK를 보냅니다.


2
+1하지만 답변이 실제로 동의하지는 않습니다. 그들은 모두 Dagelf를 제외하고 내가 볼 수있는 한 동의합니다.
MadHatter

다음은 "nmap localhost"를 수행하는 것입니다. 이제 "열리지 않은"포트를 선택하고 "아무것도하지 않는"규칙을 추가하십시오 (예 : "iptables -I INPUT -p tcp --dport 888 -j DROP"). 이제 "nmap localhost"를 다시 입력하십시오. 당신은 무엇을 봅니까? ...
Dagelf

4

기계의 존재를 완전히 숨기려고한다면 -j DROP적절합니다. 예를 들어,이를 사용하여 블랙리스트를 구현할 수 있습니다.

포트가 열려 있다는 사실을 숨기려면 포트가 열려 있지 않은 경우 발생할 수있는 동작을 모방해야합니다.

  • TCP : -p tcp -j REJECT --reject-with tcp-reset
  • UDP : -p udp -j REJECT --reject-with icmp-port-unreachable

포트 스캐너가 일부 포트가 패킷을 삭제하는 동안 대부분 거부하고있는 패킷을 발견하면 손실 된 패킷이 열려 있지만 숨겨진 포트에 있다고 가정 할 수 있습니다.


몇 개의 포트 (예 : 22, 25, 53, 80, 443)를 연 다음 다른 모든 항목을 삭제하면 어떻게 되나요? 이제 MySQL, PostgreSQL, SQLite 또는 Cassandra를 실행하고 있는지 여부는 스캐너가 알 수 없습니다.
Alexis Wilke

@AlexisWilke이 경우 포트 스캐너에 제공하는 추가 정보는 기본 DROP 정책을 사용하는 방화벽이 있다는 것입니다.
Raptor007

0

많은 정답에도 불구하고 내 두 센트 :

다음은 금지 시스템 규칙 (방화벽, IDS 등)과 관련하여 해당 주제에 대한 간단한 PoC FW.IDS-DROP-vs-REJECT 입니다.

곧:

  • DROP 모든 포트를 차단하는 경우 반복적 인 침입자에 사용할 수 있습니다 (따라서 서버가 침입자쪽에있는 것처럼 보입니다)
  • REJECT --reject-with tcp-reset 다중 포트 금지에 가장 적합한 선택입니다. 실제 닫힌 포트처럼 동작하기 때문입니다.
  • 일부 포트는 응답된다 (침입자는 호스트가 살아 있음을 알고있다) 경우 DROPREJECT(없이 tcp-reset침입자 뭔가 차단가 있음 "신호를"(그래서 필요한 데이터를 제공하는 희망에서 "공격을"계속 그를 자극 할 수있는 줄 것이다) 어느 시점에서)

-5

예, 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는 웹 서버에 가장 적합합니다. 액세스하려는 모든 서비스 (아마도 그렇지 않은 경우)는 신속하게 응답을 받고 사용자 또는 다른 서비스는 네트워크 중단이 있는지 궁금해하지 않습니다.


5
이 답변은 잘못되었습니다. tcpdump를 사용하면 DROP 규칙으로 인해 시스템이 모든 응답을 보내지 않는다는 것을 쉽게 알 수 있습니다. 그리고 "정말로 패킷을 삭제하려면, 시스템은 TCP RST / ACK로 응답해야합니다"라는 말은 "정확하게 패킷을 삭제하지"않는 것이 무엇이든 응답하는 것으로 이해되지 않습니다. 패킷을 "완전히 삭제"하면 응답하지 않으며 이는 DROP 규칙의 효과입니다.
Juliane Holzt

3
? DROP를 발행 할 혐의에 대한 출처를 제공해 주 SYN/ACK시겠습니까? 나는 내 기계에서 이것을 보지 못했습니다.
motobói

2
@Dagelf 기사에 "DROP (일명 DENY, BLACKHOLE) 패킷이 전달되는 것을 금지합니다. 응답을 보내지 마십시오"라고 말합니다.
JeanT

정상적인 응답을 보내지는 않지만 설명 된대로 응답을 보냅니다.
Dagelf

3
링크 된 문서에 " DROP ... Send no response (응답 없음) "라고 표시되어 있으며, 내가 볼 수 DROP있는 한 을 반환하는 귀하의 주장을지지하지 않습니다 SYN/ACK. 나도 어느 버전에서도이 동작을 본 적이 없다 iptables. 귀하의 주장을 뒷받침하는 출처가 있다면 그것을 보는 것이 가장 유용합니다. 확실히, 방금 한 패킷 덤프는 귀하의 주장을 지원하지 않습니다.
MadHatter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.