netfilter / iptables: tại sao không sử dụng bảng thô?


22

Trong Linux, chúng tôi thường sử dụng bảng "bộ lọc" để thực hiện lọc chung:

iptables --table filter --append INPUT --source 1.2.3.4 --jump DROP
iptables --table filter --append INPUT --in-interface lo --jump ACCEPT

Theo biểu đồ luồng của bộ lọc mạng bên dưới, các gói đầu tiên di chuyển qua bảng "thô":

nhập mô tả hình ảnh ở đây

Vì vậy, chúng tôi có thể viết:

iptables --table raw --append PREROUTING --source 1.2.3.4 --jump DROP
iptables --table raw --append PREROUTING --in-interface lo --jump ACCEPT
  • các gói được xử lý sớm hơn mà không cần phải đi mặc dù conntrack + mangle + nat + định tuyến. Vì vậy, CPU / bộ nhớ được sử dụng ít hơn (và lần lượt được bù nhẹ bởi thực tế mô-đun iptable_raw phải được tải)
  • chỉ có một quy tắc trong trường hợp hộp cũng là một bộ định tuyến (rõ ràng sẽ không ổn đối với mọi quy tắc) vì không cần thêm quy tắc tương tự cho bộ lọc / chuyển tiếp

Tôi chỉ làm các xét nghiệm nhanh, và điều này hoạt động hoàn toàn tốt.
Các tài liệu tôi tìm thấy luôn mô tả bảng thô được sử dụng trong các trường hợp nghiêm ngặt. Nhưng không ai đưa ra ngay cả những lời biện minh nhỏ nhất.

Câu hỏi: có bất kỳ lý do để không sử dụng bảng thô, ngoài những người giáo điều?


Nếu bạn chỉ muốn giảm tất cả lưu lượng truy cập từ một số địa chỉ IP nhất định thì bảng thô vẫn ổn. Tuy nhiên, tường lửa thường tinh vi hơn một chút so với điều đó, vì vậy bạn sẽ kết thúc với một số quy tắc thô và một số quy tắc trong bộ lọc. Điều này làm cho việc bảo trì trở nên đau đầu và đơn giản hóa một vài chu kỳ CPU.
wurtel

1
Nếu đó chỉ là một vấn đề đau đầu, tôi nghĩ chúng ta nên tìm một số ví dụ nói về bảng thô. Vì đây không phải là trường hợp, lý thuyết đau đầu có lẽ không phải là yếu tố chính.
Gregory MOUSSAT

1
Tác giả của ipset khuyên bạn nên sử dụng bảng thô cho quy tắc ipset iptables ipset.netfilter.org/tips.html
Stuart Cardall

Câu trả lời:


17

Từ người đàn ông iptables :

raw: This table is used mainly for configuring exemptions from connection
     tracking in combination with the NOTRACK target. It registers at the
     netfilter hooks with higher priority and is thus called before
     ip_conntrack, or any other IP tables.
     It  provides the following built-in chains:

     - PREROUTING (for packets arriving via any network interface)
     - OUTPUT (for packets generated by local processes)

Phân tích :

Vì vậy, bảng RAW nằm trước conntrack và nó được thiết kế với mục tiêu được sử dụng để đặt dấu NOTRACK trên các gói mà bạn không muốn theo dõi trong bộ lọc mạng.

Các mục tiêu -j không chỉ bị giới hạn ở NOTRACK, vì vậy, bạn có thể lọc các gói trong bảng thô với lợi ích của việc tiêu thụ CPU / bộ nhớ ít hơn.

Thông thường, các máy chủ không cần theo dõi tất cả các kết nối. Bạn chỉ cần theo dõi nếu bạn cần lọc các gói trong iptables dựa trên các kết nối được thiết lập trước đó. Trên các máy chủ chỉ phục vụ mục đích đơn giản như chỉ mở cổng 80 (và có thể 21), không yêu cầu điều đó. Trong những trường hợp đó, bạn có thể tắt theo dõi kết nối.

Tuy nhiên, nếu bạn đang cố chạy bộ định tuyến NAT, mọi thứ sẽ hơi phức tạp. Để NAT một cái gì đó, bạn cần theo dõi các kết nối đó để bạn có thể phân phối các gói từ mạng bên ngoài đến mạng bên trong.

Nếu toàn bộ kết nối được đặt với NOTRACK, thì bạn cũng sẽ không thể theo dõi các kết nối liên quan, đơn giản là người trợ giúp và người trợ giúp sẽ không hoạt động đối với các kết nối không bị theo dõi, cũng như các lỗi ICMP liên quan sẽ không xảy ra. Bạn sẽ phải mở ra cho những thứ này bằng tay nói cách khác. Khi nói đến các giao thức phức tạp như FTP và SCTP và các giao thức khác, điều này có thể rất khó quản lý.

Các trường hợp sử dụng :

Một ví dụ sẽ là nếu bạn có một bộ định tuyến bị buôn bán nặng mà bạn muốn tường lửa lưu lượng đến và đi, nhưng không phải là lưu lượng được định tuyến. Sau đó, bạn có thể đặt dấu NOTRACK để bỏ qua lưu lượng được chuyển tiếp để tiết kiệm năng lượng xử lý.

Một ví dụ khác khi NOTRACK có thể được sử dụng là nếu bạn có một máy chủ web bị buôn bán nặng, thì bạn có thể thiết lập quy tắc theo dõi cổng 80 trên tất cả các địa chỉ IP thuộc sở hữu địa phương hoặc các địa chỉ thực sự phục vụ lưu lượng truy cập web. Sau đó, bạn có thể tận hưởng theo dõi trạng thái trên tất cả các dịch vụ khác, ngoại trừ lưu lượng truy cập web có thể tiết kiệm một số sức mạnh xử lý trên một hệ thống đã quá tải.

Ví dụ -> running-a-semi-statless-linux-router-for-private-network

Kết luận : Không có lý do mạnh mẽ để không sử dụng bảng thô, nhưng có một số lý do cần cẩn thận khi sử dụng mục tiêu NOTRACK trong bảng thô.

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.