Định cấu hình Proxy Squid để chuyển tiếp đến Proxy gốc

Tác giả sysadmin, T.M.Hai 30, 2022, 11:22:32 SÁNG

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Định cấu hình Proxy Squid để chuyển tiếp đến Proxy gốc


Ở đây chúng ta sẽ xem xét cấu hình hai máy chủ proxy Squid để chuyển tiếp các yêu cầu từ mạng nội bộ không có kết nối Internet ra mạng DMZ và sau đó lên Internet nếu được yêu cầu.

Cấu hình sẽ cho phép chúng tôi chọn tên miền nào nên hoặc không nên được chuyển tiếp tới máy chủ proxy tiếp theo, cho phép các yêu cầu dành cho các miền trong mạng nội bộ không được chuyển tiếp tới proxy Squid tiếp theo, trong khi các yêu cầu khác tới mạng DMZ hoặc Internet sẽ được chuyển tiếp đến proxy tiếp theo.

1. Tổng quan về môi trường

Trước khi đi sâu vào cấu hình, chúng ta sẽ xem nhanh môi trường tổng thể trong tình huống cụ thể này và giải thích tại sao đây là điều mà bạn có thể muốn thực hiện.

Trong trường hợp này, chúng tôi có hai mạng riêng biệt, mạng nội bộ và mạng bên ngoài. Mạng nội bộ không có quyền truy cập trực tiếp vào Internet, nhưng nó có thể kết nối với mạng bên ngoài. Mặt khác, mạng bên ngoài có thể kết nối với Internet thông qua máy chủ proxy Squid. Có các máy chủ chạy trong cả mạng nội bộ và mạng bên ngoài phải được truy cập từ bên trong mạng nội bộ bởi PC khách.

Các dịch vụ trên mạng nội bộ có thể truy cập được trên miền   Đăng nhập để xem liên kết trong khi các dịch vụ trên mạng bên ngoài có thể truy cập được trên miền   Đăng nhập để xem liên kết.

Sơ đồ dưới đây phác thảo đường dẫn mà PC khách sẽ thực hiện để truy cập một trang web trên Internet.


Từ PC khách của chúng tôi trong mạng nội bộ, chúng tôi muốn có thể truy cập các dịch vụ khác trong mạng nội bộ, các dịch vụ trong mạng DMZ bên ngoài và các dịch vụ trên Internet. Chúng tôi sẽ thực hiện việc này bằng cách gửi yêu cầu đến máy chủ proxy Squid được đặt trong mạng nội bộ (proxy.internal.example.com), máy chủ này sẽ chuyển tiếp các yêu cầu đến cùng một mạng cục bộ trực tiếp nơi chúng cần đến.

Các yêu cầu tới   Đăng nhập để xem liên kết hoặc Internet sẽ được chuyển tiếp từ   Đăng nhập để xem liên kết tới cái được gọi là máy chủ proxy Squid gốc (proxy.external.example.com), sau đó sẽ chuyển các yêu cầu tới máy chủ trong mạng bên ngoài nếu đây là những gì đã được yêu cầu, nếu không sẽ chuyển tiếp yêu cầu ra Internet.

Proxy Squid chính được đặt trong mạng bên ngoài và có thể kết nối với Internet. Nếu PC khách đang truy cập thứ gì đó bên trong *.internal.example.com, chúng tôi không muốn máy chủ proxy Squid nội bộ chuyển tiếp các yêu cầu đến máy chủ proxy Squid gốc/bên ngoài trong   Đăng nhập để xem liên kết vì nó sẽ không biết phải làm gì với những yêu cầu này và chúng sẽ thất bại.

Vì vậy, về cơ bản, bất kỳ yêu cầu nào không dành cho mạng   Đăng nhập để xem liên kết đều phải được chuyển tiếp đến máy chủ proxy Squid gốc   Đăng nhập để xem liên kết, từ đó các yêu cầu có thể thực hiện theo cách của chúng đến các dịch vụ trong   Đăng nhập để xem liên kết mạng DMZ hoặc ra Internet theo yêu cầu.

2. Cấu hình proxy Squid

Bây giờ chúng ta hãy xem cấu hình trên máy chủ proxy Squid của chúng tôi để thực hiện điều này. Chúng tôi sẽ đề cập đến cấu hình cụ thể cần thiết để quá trình chuyển tiếp hoạt động như được mô tả thay vì thảo luận về cấu hình Squid đầy đủ.

2.1. Proxy Squid con nội bộ

Mã nguồn [Chọn]
acl local-servers dstdomain .internal.example.com
cache_peer proxy.external.example.com parent 3128 0 no-query default
cache_peer_domain proxy.external.example.com !.internal.example.com
never_direct deny local-servers
never_direct allow all

Đầu tiên, chúng tôi đang chỉ định một danh sách kiểm soát truy cập (ACL) được gọi là máy chủ cục bộ được xác định là bất kỳ thứ gì trong miền *.internal.example.com, đây sẽ là tất cả các tên miền đủ điều kiện (FQDN) của các dịch vụ của chúng tôi trong mạng nội bộ.

Tiếp theo, chúng tôi chỉ định máy chủ proxy Squid gốc bằng cách sử dụng cache_peer, trong trường hợp này, chúng tôi đang sử dụng   Đăng nhập để xem liên kết trên cổng 3128 làm máy chủ proxy gốc mặc định của chúng tôi.

Sau đó, chúng tôi sử dụng cache_peer_domain để giới hạn các miền mà chúng tôi sẽ yêu cầu từ máy chủ proxy chính. Trong trường hợp này, chúng tôi chỉ muốn chuyển tiếp các yêu cầu tới máy chủ proxy Squid chính tại   Đăng nhập để xem liên kết nếu các yêu cầu KHÔNG dành cho *.internal.example.com, "!" chỉ định không.

Chỉ thị never_direct cho phép chúng tôi sử dụng ACL trong đó các yêu cầu KHÔNG BAO GIỜ được chuyển tiếp trực tiếp đến máy chủ gốc. Điều này buộc phải sử dụng máy chủ proxy cho tất cả các yêu cầu, ngoại trừ những yêu cầu trong mạng nội bộ vì chúng tôi đang từ chối máy chủ cục bộ.

Vì cấu hình này được xử lý theo thứ tự từ trên xuống dưới nên sau khi chúng tôi từ chối quyền truy cập vào proxy gốc cho miền được chỉ định trong máy chủ cục bộ, tiếp theo, chúng tôi cho phép mọi thứ khác được chuyển tiếp qua   Đăng nhập để xem liên kết

Trong nỗ lực ban đầu của tôi để làm cho điều này hoạt động, tôi đã không bao gồm một trong các lệnh never_direct (hoặc ACL vì nó chỉ được sử dụng bởi điều này) và mọi thứ đang hoạt động trong hầu hết các phần, các yêu cầu HTTP/HTTPS nội bộ đang hoạt động tốt và đi qua máy chủ proxy Squid nội bộ và không được chuyển đến máy chủ proxy bên ngoài như mong đợi.

Tuy nhiên, tôi nhận thấy rằng khi yêu cầu bất kỳ dịch vụ *.external.example.com nào hoặc bất kỳ dịch vụ nào trên Internet, chỉ các yêu cầu HTTP thành công. Các yêu cầu HTTPS không được chuyển đến máy chủ proxy gốc và thậm chí không hiển thị trong /var/log/squid/access.log trên proxy bên ngoài. Máy chủ proxy Squid nội bộ đang cố gắng gửi chúng trực tiếp ra Internet, điều này tất nhiên là không được phép trong môi trường này, vì vậy điều này không thành công.

Hành vi kỳ lạ này về cơ bản là do thiếu cấu hình never_direct, cần thiết để ngăn kết nối trực tiếp ngay cả khi đã xác định proxy gốc.

2.2. Proxy Squid gốc bên ngoài

Mã nguồn [Chọn]
acl child_proxy src 192.168.0.5/32
http_access allow child_proxy

Dòng đầu tiên chỉ đơn giản là tạo danh sách kiểm soát truy cập có tên child_proxy chứa địa chỉ IP nguồn là 192.168.0.5, đây là địa chỉ IP của máy chủ proxy nội bộ sẽ kết nối với máy chủ proxy Squid chính.

Dòng thứ hai chỉ đơn giản là cho phép máy chủ child_proxy tham gia lưu lượng HTTP/HTTPS, nếu không có cấu hình này, các yêu cầu từ máy chủ proxy con bên trong sẽ bị từ chối.

Nếu bạn gặp bất kỳ sự cố nào khi tải trang, hãy xem nhật ký trong thư mục /var/log/squid trên cả máy chủ proxy Squid bên trong và bên ngoài, vì chúng có thể giúp bạn hiểu rõ hơn về những gì đang diễn ra.

Tại thời điểm này, chúng tôi có thể theo dõi nhật ký truy cập trên cả hai máy chủ truy cập và tải lên một trang từ mạng *.internal.example.com và thấy rằng yêu cầu chỉ đi qua   Đăng nhập để xem liên kết. Bất kỳ yêu cầu nào khác bao gồm các yêu cầu dành cho *.external.example.com hoặc từ Internet chẳng hạn như   Đăng nhập để xem liên kết sẽ được chuyển qua máy chủ   Đăng nhập để xem liên kết, sau đó máy chủ này sẽ gửi lưu lượng truy cập theo yêu cầu.

Như được hiển thị, chúng tôi đã định cấu hình thành công máy chủ proxy Squid trong mạng nội bộ không có quyền truy cập trực tiếp vào Internet để chuyển tiếp lưu lượng truy cập được chọn dành cho các mạng bên ngoài tới máy chủ proxy Squid chính có khả năng hoàn thành các yêu cầu này. Tất cả các yêu cầu cho mạng nội bộ sẽ nằm trong mạng nội bộ và sẽ không được chuyển tiếp ra mạng DMZ hoặc Internet bên ngoài.