IPTABLES chậm sau khi thêm '-A INPUT -j DROP' vào danh sách quy tắc


8

Tôi mới bắt đầu với iptables và tình cờ thấy điều gì đó tôi không thực sự hiểu.

FYI, tôi đã làm theo hướng dẫn của IptablesHowTo của Ubuntu wiki .

Các bảng nat và mangle trống, tôi chỉ làm việc với bảng bộ lọc ngay bây giờ.

Vấn đề

Nếu tôi thêm các quy tắc iptables sau:

iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

... sau đó tôi vẫn có quyền truy cập vào máy của mình thông qua ssh, tuy nhiên tất cả các lệnh iptables mất khoảng một hoặc hai phút để chạy. Đây không phải là vấn đề DNS, -nkhông thay đổi nó.

Giải pháp

Thay vào đó, nếu tôi xóa bảng và thêm ba quy tắc này, mọi thứ sẽ hoạt động tốt:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

Ai đó có thể giải thích cho tôi, tại sao quy tắc đầu tiên có tác động lớn như vậy đối với iptables? Tôi hiểu rằng nó cho phép các phiên được thiết lập để nhận lưu lượng truy cập, nhưng tại sao tôi cần nó nếu ssh được mở?


Trong một số trường hợp, sudoviệc tra cứu DNS và nếu chúng bị chặn, lệnh sẽ bị chậm. Có phải tất cả các iptableslệnh khác của bạn có tiền tố sudo?
Ladadadada

Chạy sudo strace …(từ một vỏ gốc) để xem những gì nó đang chặn.
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


3

Đó là thực hiện tra cứu DNS và vì phản hồi bị chặn, phải mất một thời gian để hết thời gian.

Hãy thử làm iptables -n ... để ngăn tra cứu DNS.

Conntrack cho phép các kết nối được nhận trên cổng phù du được tạo để đáp ứng các yêu cầu được khởi tạo bởi máy của bạn (trong trường hợp này là yêu cầu DNS). Không cho phép các kết nối THÀNH LẬP hoặc LIÊN QUAN, thậm chí các phản hồi cho các yêu cầu của bạn cũng bị chặn.

EG: Nếu bạn cố gắng truy cập một trang web, mặc dù bạn có thể gửi yêu cầu cho trang web, phản hồi của trang web sẽ bị chặn.


4

Với

iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

máy của bạn sẽ thả từng gói đến trừ khi nó đến từ cổng SSH. Đó là một ý tưởng tốt nếu bạn muốn máy đó chỉ kết hợp thông qua SSH. Nếu không, bạn cần thêm

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

điều đó sẽ đảm bảo bạn sẽ kết nối với một số máy chủ web thay vì kết nối từ ai đó.


Mặc dù lời khuyên tốt nói chung, điều này không trả lời câu hỏi thực sự đang được hỏi.
Shadur

@Shadur conntrack tạo nên sự khác biệt. Điều này phản đối thả tất cả.
Nils

Nếu bạn gửi một yêu cầu chung đến một máy chủ web thông qua một máy như trong trường hợp này, thì cái cuối cùng này sẽ không hiển thị gì vì tường lửa không cho phép gửi các gói đến một máy có kết nối được thiết lập.
edmz

Nhưng ngay cả khi tôi chỉ cho phép ssh chỉ sử dụng hai lệnh đầu tiên, tại sao các lệnh iptables lại mất nhiều thời gian hơn so với quy tắc conntrack ... Và quy tắc conntrack có nghĩa là tôi có thể kết nối với máy chủ web không? Điều đó sẽ không làm cho quy tắc thả vô dụng?
mohrphium

Không, nó sẽ không. Với -m conntrackbạn có thể có một "cơ hội" khác rằng các gói được chấp nhận trước khi chúng bị hủy chắc chắn. Trên máy khách, bạn cần phải có iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT nếu bạn muốn xem một số câu trả lời. Về phía máy chủ, chỉ cần cho phép kết nối SSH đến và loại bỏ mọi thứ khác (nếu máy chủ chỉ hoạt động như một SSH). Hy vọng mọi thứ đều rõ ràng.
edmz
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.