Tại sao không chặn ICMP?


53

Tôi nghĩ rằng tôi gần như đã hoàn tất thiết lập iptables trên hệ thống CentOS 5.3 của mình. Đây là kịch bản của tôi ...

# 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

Đối với ngữ cảnh, máy này là máy chủ ứng dụng Web Máy chủ riêng ảo.

Trong một câu hỏi trước đây , Lee B đã nói rằng tôi nên "khóa ICMP thêm một chút nữa". Tại sao không chỉ chặn nó hoàn toàn? Điều gì sẽ xảy ra nếu tôi làm điều đó (điều tồi tệ sẽ xảy ra)?

Nếu tôi không cần chặn ICMP, làm thế nào tôi có thể khóa nó lại nhiều hơn?


4
iptables -A INPUT -j DROP <sai (ý kiến) bạn nên đặt chính sách thành iptables -P INPUT DROP về cơ bản giống như đặt mặc định. TUYỆT VỜI B DENG DEFAULT.
xenoterracide

2
Tìm hiểu lý do tại sao nên chặn icmp: security.stackexchange.com/a/22713/485
Rory Alsop

Câu trả lời:


117

ICMP là cách, nhiều hơn "traceroute" và "ping." Nó được sử dụng để phản hồi khi bạn chạy máy chủ DNS (không thể truy cập cổng), trong một máy chủ DNS hiện đại, thực sự có thể giúp chọn một máy khác để truy vấn nhanh hơn.

ICMP cũng, như đã đề cập ở trên, được sử dụng cho khám phá đường dẫn MTU. Có thể hệ điều hành của bạn đặt "DF" (không phân đoạn) trên các gói TCP mà nó gửi. Người ta hy vọng sẽ lấy lại gói "yêu cầu phân mảnh" ICMP nếu có gì đó dọc theo đường dẫn không xử lý được kích thước của gói đó. Nếu bạn chặn tất cả ICMP, máy của bạn sẽ phải sử dụng các cơ chế dự phòng khác, về cơ bản sử dụng thời gian chờ để phát hiện "lỗ đen" PMTU và sẽ không bao giờ tối ưu hóa chính xác.

Ngoài ra, bạn nên tự hỏi tại sao bạn muốn chặn ICMP. Điều gì đặc biệt là bạn đang cố gắng ngăn chặn ở đây? Rõ ràng là bạn không hiểu ICMP được sử dụng để làm gì, điều này khá phổ biến. Tôi cực kỳ thận trọng trong việc chặn thứ gì đó mà bạn không hiểu đầy đủ.

Để làm cho nó khó khăn hơn để tìm hiểu về điều này, nhiều cuốn sách tường lửa phổ biến nói "chặn ICMP" - rõ ràng tác giả của họ chưa bao giờ đọc RFC hoặc phải giải quyết các vấn đề xung quanh lời khuyên đó. Đó là lời khuyên tồi để chặn tất cả ICMP.

Bây giờ, tỷ lệ giới hạn nó cũng có thể làm tổn thương. Nếu máy của bạn đang bận hoặc thậm chí nếu không, bạn có thể nhận được một lượng lưu lượng truy cập ICMP tốt. Máy chủ web của tôi có thể nhận được khoảng 10 - 100 gói ICMP mỗi phút, hầu hết trong số đó là khám phá PMTU. Ngay cả khi ai đó chọn tấn công máy chủ của tôi bằng các gói ICMP thuộc loại nào đó, thì đó thực sự không phải là vấn đề lớn. Nếu máy của bạn chấp nhận ngay cả một kết nối TCP (ssh, http, mail, v.v.) thì đó có thể là một vectơ tấn công lớn hơn so với ICMP bị hiểu lầm.


4
Không thể nói điều đó tốt hơn. +1
Massimo

9
một loại ICMP thể gây hại cho redirectloại đó. Đó là loại ICMP duy nhất bạn nên xem xét chặn.
Hubert Kario

2
@Hubert sẽ rất hữu ích nếu bạn có thể liên kết với nhiều lời khuyên hơn về việc chặn redirect. Bây giờ tôi đã hiểu rằng tôi nên xem xét nó, nhưng tôi không khá hơn - vẫn không thể quyết định bằng cách này hay cách khác :) Có rủi ro hay không?
RomanSt

Thông báo ICMP chuyển hướng báo cho máy chủ (bộ định tuyến không bao giờ chấp nhận chúng) rằng mạng con hoặc máy chủ đó có sẵn ở một cổng khác (thường là bởi bộ định tuyến nhanh hơn). Ít nhất đó là những gì RFC1122 nói.
Hubert Kario

2
Tôi tin rằng chuyển hướng được bỏ qua theo mặc định trên linux. Nhưng vâng, tốt hơn để lọc cái đó.
Fox

26

ICMP được sử dụng cho một loạt các chức năng chẩn đoán (ví dụ ping, traceroute) và điều khiển mạng (ví dụ: khám phá PMTU). Việc chặn ICMP bừa bãi khiến người khác đau lòng, và trừ khi bạn biết chính xác những gì bạn đang làm, bạn nên để nó một mình.


14

Tôi chưa bao giờ hiểu tại sao mọi người xem ICMP, như đã nói ở trên, nó chỉ gây đau đầu cho chính bạn và những người khác. Bạn có thể xác định xem một máy chủ có đủ dễ dàng không và miễn là nó bị giới hạn đủ để không được sử dụng như một DOS thì tôi chưa bao giờ nghe thấy bất kỳ lý do thuyết phục nào để chặn nó. (Nếu ai đó có thể đưa ra một lý do xin vui lòng gửi)


5
Đó là một phần của sự sùng bái bảo mật thông tin. Những người bảo mật cảm thấy rằng họ không cần phải biện minh cho mọi việc, bởi vì những người bình thường không thể hiểu được ý nghĩa bảo mật. Mặt khác, đau đầu của quản trị viên Mạng & Hệ thống có thể được quy cho sự lười biếng. Rốt cuộc, nếu quản trị viên biết chuyện gì đang xảy ra, mọi thứ sẽ không bao giờ vỡ ...
duffbeer703

Nó chỉ có vẻ kỳ lạ đối với tôi để tiêu diệt các công cụ chẩn đoán về cơ bản vì lợi ích của nó; vì thông tin mà kẻ tấn công sẽ quan tâm có thể có nguồn gốc giả sử bạn có bất kỳ dịch vụ nào khác đang chạy trên máy. Quyền của bạn; có vẻ như rất "sùng bái" y, đừng hỏi chỉ cần làm.
Antitribu

6
Tôi chưa bao giờ hiểu tại sao các tác giả của sách tường lửa dường như hoàn toàn nhớ rằng ICMP không chỉ là "ping" và "traceroute", còn các sách và blog và CÁCH đều nói "chặn ICMP".
Michael Graff

1
cấp độ và cấp độ này, câu trả lời của bạn đã được bình chọn đúng, cũng được đặt. Hầu như tôi biết khi nó bị chặn, bạn không bao giờ có thể biết được điều gì đang xảy ra với những thứ không liên tục, đặc biệt là khi có nhiều khối ICMP trên đường đi.
Antitribu

8

bạn chỉ có thể thử giới hạn icmp theo cách mà nó không thể được sử dụng như một cuộc tấn công DOS. nhưng có quá nhiều công cụ xử lý sự cố như ping, mtr (tôi quên các cửa sổ tương đương), traceroute (tracert), sử dụng icmp. thả chúng hoàn toàn chỉ là ngu ngốc. Đó là một cách tốt để kiểm tra xem phiên bản của bạn có hoạt động hay không mặc dù bạn không thể telnet trên bất kỳ cổng nào.

--limit 10/second
quy tắc icmp của bạn có lẽ là một giới hạn hợp lý được đưa ra chỉ là số lượng máy tính thực sự có thể xử lý.


6

Đây là một quan điểm thay thế, theo tinh thần của những gì lý thuyết bảo mật sẽ đề xuất. Các áp phích khác nói đúng rằng thực tiễn bảo mật thường quá nhiệt tình, nhưng có một cơ sở tốt cho phần lớn của nó.

Lý thuyết bảo mật nói chung là bạn chỉ kích hoạt NHỮNG GÌ BẠN CẦN. Những thứ khác (có thể hữu ích - ví dụ: phản hồi ping) có thể được kẻ tấn công sử dụng để tìm ra hệ thống của bạn hoặc có thể là một vectơ tấn công cho một số lỗ hổng chưa được phát hiện.

Vì vậy, nhìn vào các loại thông báo ICMP, bạn CẦN gì cho hoạt động bình thường, đúng đắn của hệ thống của bạn?

  • echo reply (ping) - không quá nhiều
  • điểm đến không thể truy cập - rất nhiều thông tin hữu ích ở đây. Vô hiệu hóa điều này và bạn sẽ phá vỡ quyền truy cập vào máy chủ của bạn cho một số khách hàng.
  • dập tắt nguồn - không dùng nữa từ năm 1995 và dường như bị xóa khỏi các cài đặt máy chủ kể từ (muộn nhất) năm 2005. tools.ietf.org/html/rfc6633#section-1.
  • chuyển hướng - gần như chắc chắn là không
  • quảng cáo & chào mời bộ định tuyến - không cần nếu bạn định cấu hình tĩnh các tuyến đường của mình và có thể được sử dụng cho DoS. Tôi sẽ chặn nó trừ khi bạn biết bạn cần nó và nếu bạn cần nó, có lẽ mã quy tắc để chấp nhận thông tin từ chỉ các bộ định tuyến có thể biết.
  • vượt quá ttl - không chỉ đối với traceroute, cho bạn biết lưu lượng truy cập của bạn không đi đến đích

... và cứ thế. Nếu bạn thực sự muốn hiểu điều này, hãy tìm hiểu về các loại ICMP khác nhau và chúng dùng để làm gì. Các bài viết wikipedia là một điểm khởi đầu tốt.

Trong thực tế, người thực sự xấu xí là chuyển hướng; nếu bạn muốn làm một cái gì đó nhanh chóng và hữu ích, hãy chặn nó và cho phép phần còn lại.

Tôi sẽ thêm rằng theo dõi kết nối IPtables sẽ cho phép các gói ICMP trả lại thích hợp cho các kết nối hoạt động. Vì vậy, nếu bạn đang chạy conntrack, bạn sẽ có thể chặn hầu hết ICMP gửi đến, miễn là bạn chấp nhận các gói LIÊN QUAN (trước khi bạn chặn ICMP trong bộ quy tắc của mình).


2
Trên thực tế, nguồn giải quyết không được chấp nhận từ năm 1995 và dường như đã bị xóa khỏi các cài đặt máy chủ kể từ (muộn nhất) 2005 :). tools.ietf.org/html/rfc6633#section-1 .
sourcejedi

Trả lời cập nhật, cảm ơn. Nếu tôi nghĩ khó hơn một chút tôi sẽ nhớ điều đó, duh.
Dan Pritts

Tôi nghĩ ICMP PING là cần thiết cho khám phá PMTU (mà nhiều trình duyệt và công cụ sử dụng). Không cho phép nó giống như là không lịch sự đối với người dùng của bạn. Ping cũng được sử dụng cho nhiều mục đích chẩn đoán và hầu hết những người chơi lớn đều cho phép điều đó. Bên cạnh đó, có rất ít lợi ích trong việc không cho phép nó.
jjmontes

2
Các gói Echo (ping) không cần thiết cho khám phá PMTU. Phát hiện PMTU được thực hiện bằng cách thiết lập bit Don't Fragment (DF) trên các gói gửi đi và phụ thuộc vào ICMP Destination Unreachable - Các thông điệp cần phân mảnh quay trở lại từ các bộ định tuyến với MTU liên kết nhỏ hơn. Ping chắc chắn hữu ích cho mục đích chẩn đoán nhưng nó cũng hữu ích cho trinh sát mạng và có khả năng cho DoS. Đối với tất cả các bạn và tôi biết có một lỗi root từ xa tiềm ẩn trong ngăn xếp ICMP trong Linux. Nếu tiêu chuẩn của bạn là "tôi có cần điều này không" thì câu trả lời là "không."
Dan Pritts

1
(Lưu ý rằng tôi đã viết trong câu trả lời rằng việc chặn các tin nhắn không thể truy cập đích sẽ phá vỡ mọi thứ. Phát hiện PMTU thực tế là những gì tôi đã nghĩ đến. :)
Dan Pritts

4

Đây là một công cụ chẩn đoán hữu ích để giải quyết các vấn đề kết nối mạng.

Nó cũng cho phép bạn sử dụng các kết nối ở nơi khác trên internet sử dụng MTU nhỏ hơn so với trên mạng của bạn. Nếu bạn cố gửi một gói ở đâu đó quá lớn và không thể bị phân mảnh, thiết bị sẽ bỏ gói đó và gửi gói phân mảnh ICMP cần thiết cho người gửi. Nếu bạn bỏ tất cả các gói ICMP, bạn sẽ mất những thứ đó và những điều kỳ lạ xảy ra trên mạng của bạn.

Câu hỏi thực sự là "tại sao chặn ICMP?" Bạn đạt được gì? Chỉ cần có các quy tắc lọc tốt ở biên giới của bạn và trước các tài sản có giá trị của bạn.


3

ping là một công cụ chẩn đoán tốt, bạn thực sự muốn bạn có nó vào một ngày nào đó. Tôi đang sử dụng những thứ này:

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

bạn cũng có thể muốn điều tiết nó.


8
Điều này là không đủ vì những lý do mà người khác đã chỉ ra ( ICMP không chỉ đơn thuần là ping ). Bạn nên chọn lọc chặn các tin nhắn ICMP cụ thể, có khả năng gây hại và cho phép các tin nhắn điều khiển khác thông qua không bị biến đổi.
voretaq7

2

Ngày nay, ngay cả việc giới hạn các gói ICMP ở phía máy chủ cũng có thể gây đau đầu cho các cuộc tấn công DDoS. Tấn công chủ yếu được thực hiện bằng cách gửi các yêu cầu ICMP cửa sổ lớn đến một máy chủ và nếu máy chủ đang cố gắng phản hồi từng máy chủ, hãy đoán xem điều gì sẽ xảy ra?

Điều chính là chúng tôi có một máy chủ teamspeak nhận được các gói dữ liệu xấu mỗi ngày, có vài ngày trong hai tháng chúng tôi đã có một số "thời gian rảnh". Những gì chúng tôi đã làm là hoàn toàn bị vô hiệu hóa / chặn các cộng hưởng ICMP, chúng tôi không có máy chủ DNS trên máy chủ, không có máy chủ NTP, không có máy chủ thư, không có máy chủ FTP, chỉ có hai apache và teamspeak. tất cả các cổng không cần thiết cho các dịch vụ đều bị tắt. Chúng tôi đang lên kế hoạch chặn ngay cả ssh và chỉ để lại hai cổng. Hôm nay có 21k (!) Cấm vĩnh viễn.

Tình huống là những kẻ tấn công sử dụng phần lớn các đường hầm ICMP và một vài dòng nhật ký thực sự thú vị đã được thảo luận với các quản trị viên máy chủ và họ nói rằng họ có các yêu cầu ICMP của máy chủ, vì vậy những kẻ tấn công đã sử dụng nó để đào hầm tấn công chúng và tấn công chúng tôi. Nghe có vẻ lạ nhưng đó là sự thật.

Nếu bạn không cần chẩn đoán máy chủ của mình và nếu bạn có thể chặn hoàn toàn các yêu cầu hoặc lọc chúng để bỏ các cửa sổ lớn chẳng hạn thì hãy thực hiện. Tôi cũng đề nghị bạn nên chặn hoàn toàn: Trung Quốc, Hàn Quốc, Thái Lan, Thổ Nhĩ Kỳ vì phần lớn các Địa chỉ IP xuất phát từ đó. Tôi đã có toàn bộ danh sách inetnum của các quốc gia này nhưng hầu như mỗi ngày lại xuất hiện một số quốc gia mới từ đó.

Tôi nói những gì tôi làm, nếu bạn không đồng ý - đừng làm điều đó. Đơn giản như thế. Chúc may mắn


0

Tối thiểu, bạn nên cho phép vượt qua icmp loại 3 (không thể truy cập đích), 4 (dập tắt nguồn) và 11 (vượt quá thời gian). Tất cả các loại này được sử dụng để xử lý các sự cố mạng và không nên lọc.

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

(Loại dập tắt nguồn hiện không được chấp nhận, nhưng sẽ không đau khi để mở)


-2

Tôi cho phép lưu lượng ICMP từ mạng nội bộ cục bộ, chặn nó khỏi Internet. Bằng cách đó, máy chủ của tôi là tất cả nhưng trực tuyến vô hình (nó chỉ phản hồi trên một cổng SSH không chuẩn).

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

Điều này sẽ chèn nó sau khi loopback tiêu chuẩn, thành lập, danh sách trắng LAN, danh sách trắng nhà cung cấp VOIP và ACCEPT cổng SSH. Tôi cho phép lưu lượng truy cập tôi muốn, và sau đó làm hết sức mình để giữ cho máy chủ vô hình với phần còn lại của thế giới.


1
Tôi nghĩ rằng tôi hiểu những gì bạn đang cố gắng nói, nhưng nó không tương quan với các bảng bạn đã viết. Nếu bạn bỏ các loại ICMP cụ thể, hơn những gì xảy ra với những loại không xác định ??? Tôi sẽ giả sử Mặc định-Cho phép, nếu không thì tại sao chỉ định một khối khi nó là nội tại. Sau đó, bạn nói "Tôi cho phép lưu lượng truy cập tôi muốn", điều này cho biết Mặc định từ chối hoặc Bỏ mặc định ... về cơ bản câu trả lời của bạn không nhất quán và khó hiểu nhất.
JM Becker
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.