iptables에서 -j REJECT 또는 -j DROP을 설정하는 것이 더 낫습니까?


33

archlinux wiki에는 iptables 규칙의 예가 있습니다 :

# Generated by iptables-save v1.4.18 on Sun Mar 17 14:21:12 2013
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:TCP - [0:0]
:UDP - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
COMMIT
# Completed on Sun Mar 17 14:21:12 2013

며칠 전 내 친구가 REJECT마지막 세 가지 규칙 이 왜 있는지 물었습니다 . 그는 DROP대신 해야한다고 말했고의 경우 더 나은 보안에 대해 언급했습니다 DROP.

그래서 두 가지 질문이 있습니다.

  1. 세 가지 규칙은 무엇을합니까?

  2. 내가 거기 DROP에 넣을 때 차이가 REJECT --reject-with있습니까? 그렇다면 차이점은 무엇입니까?


답변:


33

세 가지 규칙은 무엇을합니까?

이 세 가지 규칙은 설명이 필요없는 것 같습니다.

  1. ICMP 메시지 "port unreachable"로 들어오는 UDP 패킷 거부
  2. "tcp reset"을 사용하여 들어오는 TCP 패킷 거부
  3. ICMP 메시지 "프로토콜에 도달 할 수 없음"으로 다른 패킷의 수신 패킷 거부

더 자세한 내용 (UDP / TCP 패킷, ICMP에 대해)을 찾고 있다면 네트워킹 문서 등을 파헤쳐 야합니다 man iptables.

REJECT --reject-with를 DROP에 넣을 때 차이가 있습니까? 그렇다면 누군가가 저에게 차이점을 설명해 주시겠습니까? 정말 감사하겠습니다.

차이가 있습니다. 그리고 대중의 신념과 달리, DROP보다 더 나은 보안을 제공하지 않습니다 REJECT. 합법적 인 사용자에게 불편을 주며 악의적 인 사용자로부터 효과적으로 보호 할 수 없습니다. 이 게시물은 추론에 대해 자세히 설명합니다.

http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject

REJECT가 아닌 DROP을 사용하는 일반적인 이유는 열려있는 포트에 대한 정보를 제공하지 않는 것입니다. 그러나 패킷을 삭제하면 거부만큼 정확한 정보가 제공됩니다.

거부를 사용하면 스캔을 수행하고 결과를 "연결 설정 됨"및 "연결 거부 됨"으로 분류합니다.

DROP을 사용하면 결과를 "연결 설정"및 "연결 시간 초과"로 분류 할 수 있습니다.

가장 사소한 스캐너는 운영 체제 "연결"호출을 사용하며 다음 연결을 시작하기 전에 한 연결 시도가 완료 될 때까지 기다립니다. 이 유형의 스캐너는 패킷을 삭제하여 상당히 느려집니다. 그러나 공격이 연결 시도당 5 초의 시간 초과를 설정하면 시스템에서 예약 된 모든 포트 (1..1023)를 1.5 시간 만에 검색 할 수 있습니다. 검사는 항상 자동화되며 공격자는 결과가 즉각적이지 않은 것을 신경 쓰지 않습니다.

보다 정교한 스캐너는 운영 체제의 TCP 구현에 의존하기보다는 패킷 자체를 보냅니다. 이러한 스캐너는 빠르고 효율적이며 REJECT 또는 DROP 선택에 무관합니다.

결론

DROP은 적대적인 힘에 대한 효과적인 장벽을 제공하지 않지만 합법적 인 사용자가 실행하는 응용 프로그램의 속도를 늦출 수 있습니다. DROP은 일반적으로 사용해서는 안됩니다.


@janos-패킷이 세 가지 규칙 각각에 도달 할 때 실제로 발생하는 일에 대해 조금 더 쓸 수 있습니까?
Mikhail Morfikov

3
@ Kiwy-링크를 읽고 직접 시도하십시오. DROP은 REJECT보다 더 나은 보안을 제공하지 않습니다. 합법적 인 사용자에게 불편을 주며 악의적 인 사용자로부터 효과적으로 보호 할 수 없습니다. 합법적 인 사용자는 연결 시간이 초과 될 때까지 기다리는 동안 연결 속도가 느리고 크래커가 시간 초과를 기다리지 않도록 도구를 구성하기 때문입니다. (시간 초과 대기로 인해) 연결이 느리다는 사실은 서버가 있고 방화벽이 있음을 나타냅니다.
Panther

2
나는 그 결론에 따르지 않습니다. 거부는 분석 할 수있는 ICMP- 응답을 생성합니다. 이 분석을 기반으로 좋은 공격 엔진은 사용중인 OS를 유도 할 수 있습니다. 따라서 모든 포트가 알려진 시스템에서는 드롭이 더 좋습니다. 이는 프로덕션 환경의 서버에 적용됩니다.
Nils

1
특정 포트만 전달하는 방화벽이 더 좋습니다. 거부 거부는 처음부터 실행되는 서비스가 전혀없는 것과 다릅니다. 많은 포트 스캐너는 외부에서 탐지 할 수 있으므로 REJECTS 또는 DROPS가 발견되면 방화벽을 차단하기 위해 호스트를 향후 스캔의 잠재적 대상으로 표시합니다. chiark.greenend.org.uk/~peterb/network/drop-vs-reject
Dagelf

인용 된 텍스트에는 업데이트가 하나 더 있는데, DDoS 공격이 비교적 드문 경우 DROP가 더 낫다는 것을 알 수 있습니다.
Alexis Wilke
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.