Sự khác biệt giữa tùy chọn iptables -A và -I


20

Tôi đã cố gắng (trong nhiều giờ) để định cấu hình iptables để cho phép truy vấn DNS đến máy chủ DNS của tôi và chỉ phát hiện ra rằng iptables của tôi tiếp tục chặn truy cập do tùy chọn thêm quy tắc mà tôi đã sử dụng. Hầu hết các diễn đàn đề xuất một quy tắc tương tự như sau:

iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT

Tuy nhiên, trong trường hợp của tôi, tôi đã phải thay đổi quy tắc thành một insertloại để nó hoạt động:

iptables -I INPUT -p udp -m udp --dport 53 -j ACCEPT

Tôi biết rằng một quy tắc là để nối thêm và quy tắc khác để chèn và cả hai thuật ngữ này có nghĩa gì, nhưng ai đó có thể vui lòng giải thích sự khác biệt giữa hai và cả khi nào nên sử dụng tùy chọn nào không? Tôi đã tra cứu iptables của Ubuntu nhưng không thấy nhiều thông tin ở đó.

Câu trả lời:


24

iptables -Anối các quy tắc ở cuối bộ quy tắc trong khi iptables -Ichèn quy tắc vào một vị trí cụ thể trong bộ quy tắc như bạn đã chỉ ra.

Nhìn vào mục người đàn ông cho iptables cho thấy điều này:

-I, --insert chain [rulenum] quy tắc-đặc tả Chèn một hoặc nhiều quy tắc trong chuỗi đã chọn làm số quy tắc đã cho. Vì vậy, nếu số quy tắc là 1, quy tắc hoặc quy tắc được chèn vào đầu chuỗi. Đây cũng là mặc định nếu không có số quy tắc được chỉ định.

Và đây là lý do tại sao -Ilàm việc cho bạn và -Akhông. Nếu bạn không cung cấp bất kỳ rulenum nào, quy tắc của bạn sẽ được chèn ở vị trí đầu tiên. Điều đó có nghĩa là trong trường hợp của bạn, rằng ở đâu đó trong bộ quy tắc của bạn phải có một quy tắc cấm các gói DNS (có thể là quy tắc cấm UDP nói chung?) Vì iptables xử lý tất cả các quy tắc từ đầu đến cuối, áp dụng khớp và dừng đầu tiên.
Btw, đó cũng là lý do tại sao bạn nên đặt các quy tắc nhằm phù hợp với hầu hết các gói ở trên cùng: nếu bạn đặt quy tắc được sử dụng nhiều nhất ở và, gói được kiểm tra theo từng quy tắc có thể tiêu thụ nhiều nguồn tài nguyên.

Và đối với việc sử dụng: Bạn có thể sử dụng một cách an toàn -Akhi bạn muốn nối thêm quy tắc vào cuối hoặc khi không quan trọng quy tắc của bạn sẽ ở đâu. Nếu bạn muốn quy tắc của mình ở một vị trí cụ thể, hãy sử dụng -Inhư thế này chẳng hạn: iptables -I INPUT 6 -p tcp -j DROP(điều này sẽ thêm một câu lệnh DROP cho tất cả các gói tcp được gửi đến chính máy chủ ở vị trí 6 trong quy tắc INPUT.)

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.