Tại sao phải cho phép lưu lượng truy cập loopback bằng iptables để có quyền truy cập web?


7

Tôi nghĩ rằng những điều sau đây là cần thiết cho HTTP đi trên máy tính để bàn (không phải máy chủ):

iptables -A INPUT  -p tcp -m multiport --sports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Nhưng, hóa ra tôi cần hai cái này để làm cho nó hoạt động. Tôi không biết tại sao:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

Tôi biết quy tắc cuối cùng cho phép UDP logiao diện.

Nhưng, tôi nghĩ tất cả những gì tôi cần là outgoing TCP for NEW/ESTABLISHED connections+ incoming TCP for ESTABLISHED connections. Nó dường như phản trực giác đối với tôi (vì tôi vẫn đang học).


Có vẻ như phải có các quy tắc IPtables khác. Nó có thể là từ một tường lửa hoặc một hệ thống cổng bị giam cầm hoặc một số thứ khác.
Shawn J. Goff

Câu trả lời:


7

Bạn rõ ràng không cần lotruy cập Internet. Nhưng có thể bạn có một máy chủ DNS cục bộ (giao nhận) đang chạy. DNS sử dụng UDP và truy cập web yêu cầu DNS ngoài HTTP.

Quy tắc của bạn không cho phép (liên quan) ICMP phản hồi BTW. Điều đó có thể sẽ dẫn đến các vấn đề (trừ khi bạn sử dụng các giá trị thấp hơn cho MSS / MTU). Nhưng bạn thậm chí không cho phép ICMP đi để phát hiện MTU đường dẫn thậm chí không hoạt động.


5

Tôi chỉ có thể đưa ra các giả định, bởi vì, bạn chưa liệt kê các chính sách mặc định của mình. Tìm thấy ở đầu của đầu ra iptables -S. Tôi sẽ cho rằng bạn đang bị hạn chế và bạn có một cái gì đó như thế này.

-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP

Tuyệt quá! Máy của bạn bây giờ hoàn toàn vô hình, bịt mắt, bị ràng buộc và bịt miệng đối với các gói IP. Điều này cũng gần như là rút phích cắm ra khỏi mạng Ethernet của bạn.

Vì vậy, nếu bạn muốn có hy vọng trong thế giới đen tối, tàn khốc này, bạn sẽ phải đưa ra một số quy tắc để chấp nhận một số gói tin, có thể gặp ai đó với một con dao để cắt dây của bạn, nhưng gói nào là đúng?

Cần có quy tắc đầu ra để cho phép các gói tiếp cận cổng mà máy chủ sử dụng cho lưu lượng http / https

-A OUTPUT -p tcp -m multiport --dports 80,443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Cần có quy tắc INPUT để cho phép các gói vào trình duyệt của bạn từ các cổng được sử dụng cho lưu lượng http / https.

-A INPUT -p tcp -m multiport --sports 80,443 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Vì vậy, bây giờ bạn có thể THIẾT LẬP các kết nối http / https MỚI từ trình duyệt web của mình và nhận thông tin quay lại thông qua các kết nối được THÀNH LẬP đó.

Có vấn đề gì vậy? Không có cách nào để lấy thông tin DNS, bạn sẽ có thể nhập địa chỉ IP của các trang web bạn muốn truy cập vào trình duyệt web của mình, nhưng đó không phải là chính xác những gì chúng ta muốn. Lưu lượng DNS được xử lý qua cổng 53 với giao thức UDP.

-A OUTPUT -p udp --dport 53 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Và để nhận được những câu trả lời hữu ích đó, chúng ta sẽ cần cắt thêm một số lỗ hổng trong cái bịt mắt đó.

-A INPUT -p udp --sport 53 -m conntrack --ctstate ESTABLISHED -j ACCEPT

Bây giờ có một chút ánh sáng, bạn có thể nghe thấy nó, nói rằng nếu bạn thực hiện một truy vấn dns đến một trong các máy chủ của google

dig @8.8.8.8 slashdot.org

Phản ứng như vậy! Nhưng có lẽ trình duyệt của bạn vẫn không thể tìm ra nơi slashdot thực sự trên thế giới. Ít nhất một bản phân phối (Ubuntu) được thiết lập để sử dụng proxy DNS nội bộ, do đó bạn sẽ cần có thể tự nói chuyện với mình (phần còn lại của thế giới nhàm chán) bằng cách thiết lập các quy tắc để cho phép bạn giao tiếp với tư cách máy chủ trên cảng 53

-A OUTPUT -o lo -p udp --sport 53 -m conntrack --ctstate ESTABLISHED -j ACCEPT
-A INPUT -i lo -p udp --dport 53 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT

Lưu ý sự khác biệt tinh tế giữa các quy tắc "Tôi là máy chủ của riêng tôi" và trước đây, "Tôi chỉ muốn xem các quy tắc thế giới". Ngoài ra -o lo-i lochỉ ra rằng máy chủ này sẽ chỉ phục vụ máy này, một biện pháp tốt để tránh bị hút vào một số cuộc tấn công loại nảy DNS phức tạp.

Bây giờ bạn sẽ thấy trình duyệt của bạn hoạt động trở lại.


1

Nó sẽ phụ thuộc vào việc chuỗi INPUTvà / hoặc OUTPUTchuỗi có được đặt thành các ACCEPTgói không khớp hay không. Nếu có, bạn không cần bất kỳ quy tắc nào cả. Nếu bạn không thay đổi thì đây có thể là mặc định.

Hai quy tắc cuối cùng này cho phép mọi lưu lượng truy cập từ hoặc đến logiao diện (ví dụ: 127.0.0.1 / :: 1), không chỉ UDP. Trừ khi bạn đang kết nối với máy chủ web trên máy tính để bàn cục bộ, chúng không liên quan đến HTTP.


"Trừ khi bạn đang kết nối với máy chủ web trên máy tính để bàn cục bộ ... không liên quan đến HTTP": Đó cũng là điều tôi nghĩ. Chính sách mặc định là CHẤP NHẬN cho tất cả IN./FORW/OUT. Các quy tắc cuối cùng là -j DROPdành cho IN./FORD/OUT. Tuy nhiên, có một cái gì đó trong mạng hoặc máy yêu cầu các gói UDP được gửi đến / từ giao diện loopback để truy cập internet để hoạt động. Tôi đã kiểm tra nhật ký: UDP đến / từ lođã bị hủy và đó là khi tôi không thể truy cập internet. Truy cập Internet trở lại bằng cách cho phép tcp / udp / etc trên giao diện loopback. Thật lạ.
dgo.a
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.