왜 ICMP를 차단하지 않습니까?


53

CentOS 5.3 시스템에서 iptables 설정이 거의 완료된 것 같습니다. 여기 내 스크립트가 있습니다 ...

# Establish a clean slate
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F # Flush all rules
iptables -X # Delete all chains

# Disable routing. Drop packets if they reach the end of the chain.
iptables -P FORWARD DROP

# Drop all packets with a bad state
iptables -A INPUT -m state --state INVALID -j DROP
# Accept any packets that have something to do with ones we've sent on outbound
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Accept any packets coming or going on localhost (this can be very important)
iptables -A INPUT -i lo -j ACCEPT
# Accept ICMP
iptables -A INPUT -p icmp -j ACCEPT

# Allow ssh
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Allow httpd
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Allow SSL
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# Block all other traffic 
iptables -A INPUT -j DROP

컨텍스트의 경우이 머신은 Virtual Private Server 웹 앱 호스트입니다.

A의 이전 질문 , 리 B 내가 "좀 더 ICMP를 잠글."해야한다고 말했다 왜 완전히 차단하지 않습니까? 내가 그렇게하면 어떤 일이 일어날까요 (어떤 나쁜 일이 일어날까요)?

ICMP를 차단할 필요가 없다면 ICMP를 어떻게 더 잠글 수 있습니까?


4
iptables -A INPUT -j DROP <잘못된 (의견) 정책을 iptables -P INPUT DROP으로 설정해야합니다. 기본 설정은 기본 설정과 동일합니다. 기본 거부
xenoterracide

2
:이 ICMP 차단하는 나쁜 생각입니다 이유를 찾기 security.stackexchange.com/a/22713/485을
로리 알솝

답변:


117

ICMP는 "traceroute"및 "ping"이상의 방법입니다. 최신 DNS 서버에서 실제로 더 빨리 쿼리 할 다른 시스템을 선택하는 데 도움이되는 DNS 서버 (포트에 연결할 수 없음)를 실행할 때 피드백에 사용됩니다.

ICMP는 또한 위에서 언급 한 바와 같이 경로 MTU 발견에 사용됩니다. OS가 전송하는 TCP 패킷에서 "DF"(조각화하지 않음) 세트 일 가능성이 있습니다. 경로를 따라 무언가가 해당 크기의 패킷을 처리하지 못하는 경우 ICMP "조각 필요"패킷을 다시받을 것으로 예상됩니다. 모든 ICMP를 차단하면 시스템은 기본적으로 PMTU "블랙홀"을 감지하기 위해 타임 아웃을 사용하고 올바르게 최적화되지 않는 다른 폴백 메커니즘을 사용해야합니다.

또한 ICMP를 차단하려는 이유를 스스로에게 문의해야합니다. 여기서 무엇을 방지하려고합니까? ICMP가 어떤 용도로 사용되는지 이해하지 못하는 것이 분명합니다. 나는 당신이 완전히 이해하지 못하는 것을 막는 데 매우 신중합니다.

이것에 대해 배우기가 더 어려워지기 위해 많은 일반적인 방화벽 서적은 "블록 ICMP"라고 말합니다. 저자가 RFC를 읽지 않았거나 그러한 조언과 관련된 문제를 해결해야한다는 것은 분명합니다. 모든 ICMP를 차단하는 것은 좋지 않습니다.

이제 속도 제한으로 인해 상처를 입을 수도 있습니다. 컴퓨터가 사용 중이거나 사용 중이 아닌 경우에도 상당한 양의 ICMP 트래픽을 얻을 수 있습니다. 내 웹 서버는 아마도 분당 약 10-100 ICMP 패킷을 얻습니다. 대부분 PMTU 검색입니다. 누군가가 어떤 유형의 ICMP 패킷으로 서버를 공격하기로 선택하더라도 실제로 그렇게 큰 문제는 아닙니다. 만약 당신의 컴퓨터가 하나의 TCP 연결 (ssh, http, mail 등)을 허용한다면 ICMP가 잘못 이해 한 것보다 더 큰 공격 경로 일 것입니다.


4
더 잘 말할 수 없었습니다. +1
Massimo 2011

9
유해한 유형의 ICMP 에는 한 가지 유형이 있습니다redirect . 이것이 차단을 고려해야 하는 유일한 ICMP 유형입니다.
휴 버트 카리오

2
@Hubert 님을 차단하는 방법에 대한 추가 조언을 얻을 수 있다면 매우 도움이됩니다 redirect. 나는 지금 그것을 고려해야한다고 이해하지만, 나는 더 나아지지 않습니다-여전히 다른 방법을 결정할 수는 없습니다 :) 위험하지 않습니까?
RomanSt

ICMP 리디렉션 메시지는 호스트에게 해당 라우터와 호스트가 다른 게이트웨이 (일반적으로 더 빠른 라우터에 의해)에 있음을 알려줍니다 (라우터는 절대 수락해서는 안됨). 적어도 그것은 RFC1122가 말한 것입니다.
Hubert Kario

2
리눅스에서는 리디렉션이 기본적으로 무시된다고 생각합니다. 그러나 네, 그 것을 필터링하는 것이 좋습니다.
Fox

26

ICMP는 광범위한 진단 (예 : 핑, 추적 경로) 및 네트워크 제어 (예 : PMTU 검색) 기능에 사용됩니다. ICMP를 무차별 적으로 차단하면 다른 사람들이 모든 종류의 가슴 앓이를 유발할 수 있습니다. 자신이하는 일을 정확히 알지 못하면 혼자 내버려 두어야합니다.


14

나는 사람들이 왜 ICMP를 클럭하는지 이해하지 못했습니다. 호스트가 쉽게 충분하고 DOS로 사용되지 않을 정도로 제한되어 있다면 호스트를 차단해야 할 강력한 이유를 들어 본 적이 없습니다. (누군가가 이유를 생각 해낼 수 있다면 게시하십시오)


5
정보 보안의 숭배의 일부입니다. 보안 사람들은 단지 필사자들만이 보안의 의미를 이해할 수 없기 때문에 사물을 정당화 할 필요가 없다고 생각합니다. 반면, 네트워크 및 시스템 관리자 두통은 게으른 게 원인 일 수 있습니다. 관리자가 무슨 일이 있었는지 안다면 결국, 상황이 ... 휴식하지 않을 것
duffbeer703

본질적으로 진단 도구를 없애는 것이 이상하게 보입니다. 공격자가 관심을 가질만한 정보는 컴퓨터에서 다른 서비스를 실행하고 있다고 가정 할 때 발생할 수 있습니다. 당신의 권리; 그것은 매우 "컬트"인 것 같습니다. 의심하지 마십시오.
Antitribu

6
왜 방화벽 서적의 저자들이 ICMP가 "ping"과 "traceroute"보다 훨씬 더 빠르다는 것을 전혀 이해하지 못했지만, 서적과 블로그 및 HOW-TO는 모두 "ICMP 차단"이라고 말합니다.
Michael Graff

1
이것의 수준과 수준, 당신의 대답은 올바르게 투표되었습니다. 대부분 차단되는 시점을 알고 있습니다. 간헐적으로 발생하는 문제, 특히 여러 개의 ICMP 블록이있는 경우에는 어떤 일이 발생했는지 알 수 없습니다.
Antitribu

8

DOS 공격으로 사용할 수없는 방식으로 제한 ICMP를 시도 할 수 있습니다. 그러나 icmp를 사용하는 ping, mtr (Windows와 동등한 것을 잊어 버림), traceroute (tracert)와 같은 문제 해결 도구가 너무 많습니다. 그것들을 완전히 떨어 뜨리는 것은 어리석은 일입니다. 포트에서 텔넷을 사용할 수 없어도 인스턴스가 작동하는지 확인하는 좋은 방법입니다.

--limit 10/second
당신의 ICMP 규칙에 컴퓨터가 실제로 얼마나 많은 양을 처리 할 수 ​​있는지에 대한 적절한 제한 일 것입니다.


6

다음은 안보 이론이 제안하는 정신의 대안적인 견해입니다. 다른 포스터는 보안 관행이 종종 지나치게 열성적이지만 그 중 상당 부분에는 좋은 근거가 있습니다.

보안 이론은 일반적으로 필요한 것만 활성화한다는 것입니다. 다른 것들 (예 : 핑 응답)은 공격자가 시스템을 조사하기 위해 사용되거나 아직 발견되지 않은 취약점에 대한 공격 경로로 사용될 수 있습니다.

ICMP 메시지 유형을 살펴보면 시스템이 정상적으로 작동하려면 무엇이 필요합니까?

  • 에코 응답 (ping)-그리 많지 않음
  • 연결할 수없는 목적지-여기에 유용한 정보가 많이 있습니다. 이것을 비활성화하면 일부 클라이언트의 서버에 대한 액세스가 중단됩니다.
  • source quench-1995 년부터 사용되지 않으며 2005 년 이후 (최근) 호스트 구현에서 제거되었습니다. tools.ietf.org/html/rfc6633#section-1.
  • 리디렉션-거의 확실하지 않음
  • 라우터 알림 및 요청-경로를 정적으로 구성하면 DoS에 사용될 수 있습니다. 필요한 것을 알지 못하면 차단하고 필요할 경우 알려진 라우터의 정보 만 허용하도록 규칙을 코딩하십시오.
  • ttl이 초과 됨-추적 경로뿐만 아니라 트래픽이 목적지로 전달되지 않음을 알려줍니다.

...등등. 이것을 정말로 이해하고 싶다면 다양한 ICMP 유형과 그 용도에 대해 알아보십시오. 위키 피 디아 기사는 좋은 출발점이 될 것입니다.

실제로, 가장 추악한 것은 리디렉션입니다. 빠르고 유용한 것을하고 싶다면 차단하고 나머지는 허용하십시오.

IPtables 연결 추적을 통해 활성 연결에 대한 적절한 반환 ICMP 패킷을 허용 할 것이라고 덧붙입니다. 따라서 conntrack을 실행중인 경우 규칙 패킷에서 ICMP를 차단하기 전에 관련 패킷을 수락하는 한 대부분의 ICMP 인바운드를 차단할 수 있어야합니다.


2
실제로 소스 급냉은 1995 년부터 더 이상 사용되지 않으며 2005 년 이후 (최근) 호스트 구현에서 제거 된 것으로 보입니다. tools.ietf.org/html/rfc6633#section-1 .
sourcejedi

답변 업데이트, 감사합니다. 조금 더 힘들다고 생각했다면 기억했을 것입니다.
Dan Pritts

PMTU 검색에는 많은 브라우저와 도구가 사용하는 ICMP PING이 필요하다고 생각합니다. 허용하지 않는 것은 사용자에게 무해한 것과 같습니다. Ping은 많은 진단 목적으로도 사용되며 대부분의 큰 플레이어가 허용합니다. 게다가, 그것을 금지해도 별다른 이점이 없습니다.
jjmontes

2
PMTU 감지에는 에코 (ping) 패킷이 필요하지 않습니다. PMTU 발견은 발신 패킷에서 DF (Do n't Fragment) 비트를 설정하여 수행되며 ICMP Destination Unreachable-Fragmentation에 따라 링크 MTU가 더 작은 라우터에서 오는 메시지가 필요합니다. Ping은 진단 목적으로 확실히 유용하지만 네트워크 정찰 및 잠재적으로 DoS에도 유용합니다. 여러분과 저는 Linux의 ICMP 스택에 잠재적 인 원격 루트 버그가 있음을 알고 있습니다. 표준이 "필요한 경우"이면 대답은 "아니요"입니다.
Dan Pritts

1
(내가 응답 할 수없는 메시지를 차단하면 응답을
잃어 버릴

4

네트워크 연결 문제를 해결하는 데 유용한 진단 도구입니다.

또한 네트워크보다 작은 MTU를 사용하는 인터넷의 다른 곳에서도 연결을 사용할 수 있습니다. 너무 크고 조각화 할 수없는 패킷을 보내려고하면 장치가 패킷을 삭제하고 ICMP 조각화가 필요한 패킷을 보낸 사람에게 다시 보냅니다. 모든 ICMP 패킷을 삭제하면 패킷이 손실되고 네트워크에서 이상한 일이 발생합니다.

실제 질문은 "왜 ICMP를 차단 하는가?"입니다. 무엇을 얻습니까? 경계와 가치있는 자산 앞에 좋은 필터링 규칙이 있습니다.


3

핑은 훌륭한 진단 도구입니다. 언젠가는 그 도구를 원했을 것입니다. 나는 이것을 사용하고있다 :

-A icmp_packets -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A icmp_packets -p icmp -m icmp --icmp-type 11 -j ACCEPT

당신은 또한 그것을 조절하고 싶을 수도 있습니다.


8
이것은 다른 사람들이 지적한 이유로 상당히 부적절하다 ( ICMP는 단순히 핑 이상이다 ). 잠재적으로 유해한 특정 ICMP 메시지를 선택적으로 차단 하고 다른 제어 메시지를 허용하지 않아야합니다 .
voretaq7

2

오늘날 서버 측에서 ICMP 패킷을 제한하는 것조차도 DDoS 공격에 두통을 일으킬 수 있습니다. 대부분의 공격은 하나의 서버에 거대한 창 ICMP 요청을 전송하여 이루어지며 서버가 각 서버에 응답하려고하면 어떻게 될까요?

우리는 매일 매일 불량 패킷을받는 teamspeak 서버를 가지고 있는데, 몇 달 동안 "자유로운"자유 시간을 가졌습니다. 우리가 한 일은 완전히 비활성화 / 차단 된 ICMP 응답, 서버에 DNS 서버, NTP 서버, 메일 서버, FTP 서버, 아파치 및 팀 스피크 만 있습니다. 서비스에 필요하지 않은 모든 포트가 꺼져 있습니다. 우리는 ssh조차 차단하고 두 포트만 열어 둘 계획입니다. 현재 21k (!) 영구 금지가 있습니다.

상황은 공격자가 주로 ICMP 터널링을 사용하고 서버 관리자와 실제로 흥미로운 로그 라인이 거의 논의되지 않았으며 서버 ICMP 요청이 있다고 말했기 때문에 공격자는이를 통해 터널을 통과하여 공격합니다. 이상하게 들리지만 사실입니다.

서버 진단이 필요하지 않고 요청을 완전히 차단하거나 필터링하여 큰 창을 삭제하도록 필터링 한 경우 수행하십시오. 또한 IP 주소의 대부분이 거기에서 왔기 때문에 중국, 한국, 태국, 터키를 완전히 차단하는 것이 좋습니다. 나는이 나라들에 대한 전체 inetnum리스트를 가지고 있었지만 거의 매일 새로운 나라들이 온다.

동의하지 않으면 내가하는 일을 말하지 마십시오. 그렇게 간단합니다. 행운을 빕니다


0

최소한 icmp 유형 3 (대상에 도달 할 수 없음), 4 (소스 담금질) 및 11 (시간 초과)을 전달할 수 있어야합니다. 이러한 모든 유형은 네트워크 문제를 처리하는 데 사용되며 필터링해서는 안됩니다.

iptables -A INPUT -p icmp -m icmp --icmp-type 3 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 4 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT

(소스 켄치 유형은 현재 사용되지 않지만이를 열면 상처를 입지 않습니다)


-2

로컬 인트라넷에서 ICMP 트래픽을 허용하고 인터넷에서 차단합니다. 그런 식으로 내 서버는 온라인으로 보이지 않지만 표준 SSH 포트에서만 응답합니다.

iptables -I INPUT 7 -d 208.180.X.X -p icmp --icmp-type 8  -j DROP
iptables -I INPUT 8 -d 208.180.X.X -p icmp --icmp-type 0  -j DROP
iptables -I INPUT 9 -d 208.180.X.X -p icmp --icmp-type 11 -j DROP

표준 루프백, 설정, LAN 화이트리스트, VOIP 제공자 화이트리스트 및 SSH 포트 ACCEPT 뒤에 삽입합니다. 원하는 트래픽을 허용 한 다음 서버를 전세계에 보이지 않게하기 위해 최선을 다합니다.


1
나는 당신의 말을 이해한다고 생각하지만, 당신이 쓴 표와 관련이 없습니다. 특정 ICMP 유형을 삭제하면 지정되지 않은 ICMP 유형보다 어떻게됩니까 ??? 나는 Default-Allow를 가정하고, 그렇지 않으면 블록이 본질적 일 때 왜 블록을 지정해야 하는가? 그런 다음 "원하는 트래픽을 허용합니다"라고 표시합니다. 기본 거부 또는 기본 드롭을 나타냅니다. 기본적으로 귀하의 답변이 일관성이없고 혼란 스럽습니다.
JM Becker
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.