Tại sao tôi không thể sử dụng chính sách DỰ ÁN trên chuỗi OUTPUT iptables của mình?


11

Tôi hiện có chuỗi OUTPUT của mình được đặt thành DROP. Tôi muốn thay đổi nó thành DỰ ÁN, để tôi có một manh mối rằng tường lửa của tôi ngăn tôi đi đến một nơi nào đó chứ không phải là vấn đề với bất kỳ dịch vụ nào tôi đang cố gắng truy cập (từ chối ngay lập tức thay vì hết thời gian). Tuy nhiên, iptables dường như không quan tâm đến điều này. Nếu tôi chỉnh sửa thủ công tệp quy tắc đã lưu của mình và cố gắng khôi phục tệp, tôi nhận được iptables-restore v1.4.15: Can't set policy 'REJECT' on 'OUTPUT' line 22: Bad policy namevà nó từ chối tải quy tắc. Nếu tôi cố gắng đặt thủ công ( iptables -P OUTPUT REJECT), tôi nhận được iptables: Bad policy name. Run 'dmesg' for more information.nhưng không có đầu ra trong dmesg.

Tôi đã xác nhận quy tắc phù hợp được biên dịch vào kernel và tôi đã khởi động lại để đảm bảo nó được tải:

# CONFIG_IP_NF_MATCH_TTL is not set
CONFIG_IP_NF_FILTER=y
***
CONFIG_IP_NF_TARGET_REJECT=y
***
CONFIG_IP_NF_TARGET_LOG=y
CONFIG_IP_NF_TARGET_ULOG=y

(Dấu hoa thị được thêm vào để làm nổi bật quy tắc áp dụng)

Tất cả mọi thứ tôi có thể tìm thấy nói rằng ĐỐI TƯỢNG là một chính sách / mục tiêu hợp lệ (nói chung), nhưng tôi không thể tìm thấy bất cứ điều gì nói rằng nó không hợp lệ đối với các chuỗi INPUT, FORWARD hoặc OUTPUT. Google-fu của tôi không giúp được gì. Tôi đang ở Gentoo, nếu điều đó làm cho bất kỳ sự khác biệt. Bất cứ ai ở đây có cái nhìn sâu sắc?


Bạn có thể hiển thị iptables(các) quy tắc trong câu hỏi?
bahamat

Câu trả lời:


15

REJECTlà một phần mở rộng mục tiêu , trong khi chính sách chuỗi phải là mục tiêu . Trang người đàn ông nói rằng (mặc dù nó không thực sự rõ ràng), nhưng một số điều nó nói là không đúng.

Chính sách chỉ có thể ACCEPThoặc DROPtrên các chuỗi tích hợp. Nếu bạn muốn có hiệu lực từ chối tất cả các gói không khớp với các quy tắc trước đó, chỉ cần đảm bảo quy tắc cuối cùng khớp với mọi thứ và thêm quy tắc với REJECTtiện ích mở rộng đích. Nói cách khác, sau khi thêm tất cả các quy tắc có liên quan, làm iptables -t filter -A OUTPUT -j REJECT.

Xem chủ đề "các chính sách chuỗi có thể có" trong danh sách bộ lọc mạng để biết thêm chi tiết.


Điều đó có ý nghĩa, và một DỰ ÁN chung ở cuối sẽ hoạt động. Vì tò mò, định nghĩa mở rộng mục tiêu ở đâu đó khá rõ ràng và tôi chỉ bỏ qua nó, hay đó là một trong những bit được ghi chép kém?
ND Geek

1
Đọc toàn bộ trang man, rõ ràng RE DỰ ÁN là một phần mở rộng mục tiêu, nhưng trang man rất dài nên "TL; DR" có xu hướng áp dụng. Nó cũng ngụ ý rằng DROP, ACCEPT và QUEUE là các mục tiêu chính sách hợp lệ; từ mã hiện tại, QUEUE không!
StarNamer

4

Tôi không thể tìm thấy nó được ghi lại, nhưng một tài liệu tham khảo ở đây chỉ ra rằng các chính sách được phép duy nhất là ACCEPTor DROP. Đây là khẳng định bằng cách nhìn vào nguồn của libiptc(đó là chịu trách nhiệm cho việc thao tác các quy tắc) xung quanh dòng 2429, nơi mã có

2429         if (strcmp(policy, LABEL_ACCEPT) == 0)
2430                 c->verdict = -NF_ACCEPT - 1;
2431         else if (strcmp(policy, LABEL_DROP) == 0)
2432                 c->verdict = -NF_DROP - 1;
2433         else {
2434                 errno = EINVAL;
2435                 return 0;
2436         }

Các chủ đề ban đầu cho thấy điều tốt nhất để làm là thêm ĐỐI TƯỢNG ở cuối chuỗi cần iptables -A OUTPUT -j REJECT.

Lưu ý rằng mã ngay trước đây là:

2423         if (!iptcc_is_builtin(c)) {
2424                 DEBUGP("cannot set policy of userdefinedchain `%s'\n", chain);
2425                 errno = ENOENT;
2426                 return 0;
2427         }
2428 

Vì vậy, bạn hoàn toàn không thể đặt chính sách cho chuỗi Xác định người dùng.


Lệnh đó trong luồng không chính xác; -plà để phù hợp trên một giao thức; ý anh là -Acâu trả lời của tôi
Shawn J. Goff

Điều đó khá thú vị. Sự tò mò trong tôi tự hỏi liệu có lý do nào đằng sau nó không, hoặc đó chỉ là cách mọi thứ diễn ra, có thể vì đơn giản (mã đơn giản hơn có nghĩa là ít điểm có thể có lỗ hổng hơn). Nếu tôi thậm chí là một nhà phát triển vừa phải, tôi có thể muốn hack nó tại địa phương, nhưng vì tôi không, và được bảo đảm là một phần bảo mật, tôi sẽ không chạm vào nó.
ND Geek

2

REJECTtrên OUTPUTkhông có ý nghĩa; a REJECTsẽ trả về gói ICMP cần truyền qua mạng.

Thêm một cái mới -j LOGlàm quy tắc cuối cùng của bạn (do đó trước DROPchính sách) để xem những gì sẽ đi xa trong OUTPUTchuỗi.


1
Không thể REJECTtrả lại gói ICMP trên giao diện lo? Tôi đồng ý rằng việc LOGnày rất hữu ích để khắc phục sự cố, nhưng điều tôi thực sự hy vọng là một cách để nhắc nhở tôi rằng "Ồ, vâng ... điều đó có thể bị chặn bởi DROPmặc định iptables của tôi " thay vì khắc phục sự cố trong 5 phút yêu cầu đồng nghiệp truy cập máy chủ XYZ nhận ra nó có thể là cục bộ , đó là cách tiếp cận phổ biến nhất của tôi, vì ngày làm việc điển hình của tôi hiếm khi gặp phải những điều tôi chưa mở lỗ. Tất nhiên có lẽ tôi cần phải ghi nhớ điều đó tốt hơn, nhưng một căn hộ REJECTthì rõ ràng hơn.
ND Geek

Tôi không nghĩ rằng bạn muốn ethXgiao diện tạo lưu lượng truy cập trên logiao diện vì nhiều lý do. Họ rất độc lập; bạn có thể dễ dàng tạo chuỗi áp dụng cho cái này chứ không phải cái kia.
Aaron D. Marasco
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.