Đó là một trường hợp sử dụng dứt khoát cho một proxy . Một proxy thông thường, không phải là proxy ngược (hay còn gọi là cân bằng tải).
Nguồn được biết đến nhiều nhất và miễn phí và nguồn mở là mực . May mắn thay, đó là một trong số ít phần mềm nguồn mở tốt có thể dễ dàng cài đặt với một apt-get install squid3
tệp duy nhất và được định cấu hình với một tệp duy nhất /etc/squid3/squid.conf
.
Chúng ta sẽ đi qua các thực tiễn tốt và các bài học để biết về.
Tệp cấu hình chính thức được sửa đổi một chút (5000 dòng nhận xét vô dụng đã bị xóa).
# WELCOME TO SQUID 3.4.8
# ----------------------------
#
# This is the documentation for the Squid configuration file.
# This documentation can also be found online at:
# http://www.squid-cache.org/Doc/config/
#
# You may wish to look at the Squid home page and wiki for the
# FAQ and other documentation:
# http://www.squid-cache.org/
# http://wiki.squid-cache.org/SquidFaq
# http://wiki.squid-cache.org/ConfigExamples
#
###########################################################
# ACL
###########################################################
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 1025-65535 # unregistered ports
acl CONNECT method CONNECT
#####################################################
# Recommended minimum Access Permission configuration
#####################################################
# Deny requests to certain unsafe ports
http_access deny !Safe_ports
# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports
# Only allow cachemgr access from localhost
http_access allow localhost manager
http_access deny manager
#####################################################
# ACL
#####################################################
# access is limited to our subnets
acl mycompany_net src 10.0.0.0/8
# access is limited to whitelisted domains
# ".example.com" includes all subdomains of example.com
acl repo_domain dstdomain .keyserver.ubuntu.com
acl repo_domain dstdomain .debian.org
acl repo_domain dstdomain .python.org
# clients come from a known subnet AND go to a known domain
http_access allow repo_domain mycompany_net
# And finally deny all other access to this proxy
http_access deny all
#####################################################
# Other
#####################################################
# default proxy port is 3128
http_port 0.0.0.0:3128
# don't forward internal private IP addresses
forwarded_for off
# disable ALL caching
# bandwidth is cheap. debugging cache related bugs is expensive.
cache deny all
# logs
# Note: not sure if squid configures logrotate or not
access_log daemon:/var/log/squid3/access.log squid
access_log syslog:squid.INFO squid
# leave coredumps in the first cache dir
coredump_dir /var/spool/squid3
# force immediaty expiry of items in the cache.
# caching is disabled. This setting is set as an additional precaution.
refresh_pattern . 0 0% 0
Cấu hình máy khách - Biến môi trường
Cấu hình hai biến môi trường này trên tất cả các hệ thống.
http_proxy=squid.internal.mycompany.com:3128
https_proxy=squid.internal.mycompany.com:3128
Hầu hết các thư viện máy khách http (libcurl, httpclient, ...) đều tự cấu hình bằng các biến môi trường. Hầu hết các ứng dụng đang sử dụng một trong những thư viện phổ biến và do đó hỗ trợ ủy quyền ngoài luồng (mà không nhất thiết phải biết rằng họ làm như vậy).
Lưu ý rằng cú pháp là nghiêm ngặt:
- Tên biến
http_proxy
PHẢI là chữ thường trên hầu hết Linux.
- Giá trị biến KHÔNG PHẢI bắt đầu bằng
http(s)://
(giao thức ủy quyền KHÔNG phải là http (s)).
Cấu hình máy khách - Cụ thể
Một số ứng dụng đang bỏ qua các biến môi trường và / hoặc được chạy dưới dạng dịch vụ trước khi các biến có thể được đặt (ví dụ: debian apt
).
Các ứng dụng này sẽ yêu cầu cấu hình đặc biệt (ví dụ /etc/apt.conf
).
HTTPS Proxying - Kết nối
Việc ủy quyền HTTPS được hỗ trợ đầy đủ bởi thiết kế. Nó sử dụng một phương thức "CONNECT" đặc biệt để thiết lập một số loại đường hầm giữa trình duyệt và proxy.
Tôi không biết nhiều về điều đó nhưng tôi chưa bao giờ gặp vấn đề với nó trong nhiều năm. Nó chỉ hoạt động.
Trường hợp đặc biệt HTTPS - Proxy trong suốt
Một lưu ý về proxy minh bạch. (tức là proxy bị ẩn và nó chặn các yêu cầu của khách hàng ala. man-in-the-middle).
Proxy trong suốt đang phá vỡ HTTPS. Khách hàng không biết rằng có proxy và không có lý do để sử dụng phương thức Kết nối đặc biệt.
Máy khách thử kết nối HTTPS trực tiếp ... bị chặn. Việc đánh chặn được phát hiện và lỗi được ném khắp nơi. (HTTPS có nghĩa là để phát hiện các cuộc tấn công trung gian).
Danh sách trắng tên miền và CDN
Danh sách trắng tên miền và tên miền được hỗ trợ đầy đủ bởi mực. Tuy nhiên, đôi khi nó chắc chắn sẽ thất bại theo những cách bất ngờ.
Các trang web hiện đại có thể có tất cả các loại chuyển hướng tên miền và CDN. Điều đó sẽ phá vỡ ACL khi mọi người không đi xa hơn để đặt mọi thứ gọn gàng trong một miền.
Đôi khi sẽ có một trình cài đặt hoặc một gói muốn gọi homeship hoặc truy xuất các phụ thuộc bên ngoài trước khi chạy. Nó sẽ thất bại mỗi lần và bạn không thể làm gì về điều đó.
Bộ nhớ đệm
Tệp cấu hình được cung cấp sẽ vô hiệu hóa tất cả các hình thức lưu trữ. Cẩn tắc vô ưu.
Cá nhân, hiện tại tôi đang chạy mọi thứ trên đám mây, tất cả các trường hợp đều có kết nối ít nhất 100 Mbps và nhà cung cấp chạy các kho riêng của mình cho các nội dung phổ biến (ví dụ Debian) được phát hiện tự động. Điều đó làm cho băng thông trở thành một mặt hàng mà tôi không thể quan tâm.
Tôi hoàn toàn vô hiệu hóa bộ nhớ đệm hơn là gặp một lỗi bộ nhớ đệm sẽ làm tan não tôi trong việc khắc phục sự cố. Mỗi một người trên internet KHÔNG THỂ nhận được các tiêu đề bộ nhớ đệm của họ ngay.
Không phải tất cả các môi trường có cùng một yêu cầu mặc dù. Bạn có thể đi thêm một dặm và cấu hình bộ đệm.
KHÔNG BAO GIỜ yêu cầu xác thực trên proxy
Có một tùy chọn để yêu cầu xác thực mật khẩu từ khách hàng, thường là với tài khoản LDAP của họ. Nó sẽ phá vỡ mọi trình duyệt và mọi công cụ dòng lệnh trong vũ trụ.
Nếu bạn muốn xác thực trên proxy, đừng.
Nếu quản lý muốn xác thực, giải thích rằng điều đó là không thể.
Nếu bạn là nhà phát triển và bạn vừa gia nhập một công ty đang chặn internet trực tiếp VÀ buộc xác thực proxy, CHẠY NGAY KHI BẠN CÓ THỂ.
Phần kết luận
Chúng tôi đã trải qua cấu hình chung, các lỗi phổ biến và những điều người ta phải biết về ủy quyền.
Bài học rút ra:
- Có một phần mềm mã nguồn mở tốt để ủy quyền (mực)
- Thật đơn giản và dễ cấu hình (một tệp ngắn)
- Tất cả các biện pháp bảo mật (tùy chọn) đều có sự đánh đổi
- Hầu hết các tùy chọn nâng cao sẽ phá vỡ mọi thứ và quay trở lại ám ảnh bạn
- Proxy trong suốt đang phá vỡ HTTPS
- Xác thực proxy là xấu
Như thường lệ trong lập trình và thiết kế hệ thống, việc quản lý các yêu cầu và mong đợi là rất quan trọng.
Tôi khuyên bạn nên tuân thủ những điều cơ bản khi thiết lập proxy. Nói chung, một proxy đơn giản mà không có bất kỳ bộ lọc cụ thể nào sẽ hoạt động tốt và không gây rắc rối. Chỉ cần nhớ (tự động) cấu hình máy khách.