Thực hành tốt nhất cho kho lưu trữ gói proxy


16

Tôi có một bộ sưu tập các máy chủ CentOS trong mạng công ty của mình. Vì lý do bảo mật, hầu hết các máy chủ không có quyền truy cập internet bên ngoài chung trừ khi đó là yêu cầu chức năng cốt lõi cho máy chủ.

Điều này tạo ra một thách thức khi tôi cần cập nhật các gói. Đối với các kho lưu trữ yum, tôi hiện phản chiếu tất cả các kho lưu trữ cần thiết từ internet và làm cho các gương có sẵn bên trong mạng nội bộ. Tôi giữ các bản sao của mỗi repo trong mỗi năm môi trường của chúng tôi: dev, QA, dàn dựng và hai trung tâm dữ liệu sản xuất.

Tôi hiện không giải quyết cho repos gói ngôn ngữ cụ thể. Khi máy chủ cần cập nhật từ rubygems, PyPI, PECL, CPAN hoặc npm, họ phải có được quyền truy cập internet tạm thời để tải các gói. Tôi đã được yêu cầu bắt đầu phản chiếu rubygems và PyPI, và phần còn lại có thể sẽ làm theo.

Tất cả điều này là khó khăn và không hoạt động tốt. Tôi muốn thay thế nó bằng một proxy lưu trữ duy nhất trong một môi trường và bốn proxy được xâu chuỗi trong các môi trường khác của tôi, để loại bỏ sự phức tạp và chi phí đĩa của các gương đầy đủ. Ngoài ra:

  • Nó có thể là một proxy chuyển tiếp hoặc ngược lại; mỗi trình quản lý gói hỗ trợ máy chủ proxy hoặc điểm cuối kho lưu trữ tùy chỉnh, có thể là máy nhân bản cục bộ hoặc proxy ngược.
  • Nó cần kiểm soát truy cập chi tiết, vì vậy tôi có thể giới hạn IP khách hàng nào có thể kết nối với tên miền repo nào.
  • Khách hàng cần có khả năng theo dõi chuyển hướng đến các miền không xác định. Yêu cầu ban đầu của bạn có thể bị giới hạn ở rubygems.org, nhưng nếu máy chủ đó trả lại 302 cho CDN ngẫu nhiên, bạn sẽ có thể theo dõi nó.
  • Nó nên hỗ trợ các phụ trợ HTTPS. Tôi không nhất thiết phải mạo danh các máy chủ SSL khác, nhưng tôi sẽ có thể hiển thị lại trang web HTTPS qua HTTP hoặc chấm dứt và mã hóa lại bằng một chứng chỉ khác.

Ban đầu tôi đã xem xét các proxy ngược và Varnish dường như là người duy nhất cho phép tôi giải quyết nội bộ 302 chuyển hướng trong proxy. Tuy nhiên, phiên bản miễn phí của Varnish không hỗ trợ phụ trợ HTTPS. Bây giờ tôi đang đánh giá Squid là một tùy chọn proxy chuyển tiếp.

Đây có vẻ như là một vấn đề tương đối phổ biến trong các mạng doanh nghiệp, nhưng tôi gặp khó khăn khi tìm ví dụ về cách người khác giải quyết vấn đề này. Có ai đã thực hiện một cái gì đó tương tự hoặc có suy nghĩ về cách tốt nhất để làm như vậy?

Cảm ơn!

Câu trả lời:


5

Chúng tôi sử dụng Mực cho việc này; Điều thú vị về mực là bạn có thể thiết lập hết hạn các đối tượng dựa trên khớp mẫu, khá dễ dàng, cho phép siêu dữ liệu từ repo yum được thanh trừng khá nhanh. Cấu hình chúng ta có thực hiện điều này:

refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern (\.xml|xml\.gz)$      0       20%     2880
refresh_pattern ((sqlite.bz2)*)$      0       20%     2880
refresh_pattern (\.deb|\.udeb)$   1296000 100% 1296000
refresh_pattern (\.rpm|\.srpm)$   1296000 100% 1296000
refresh_pattern .        0    20%    4320

http://www.squid-cache.org/Doc/config/refresh_potype/


5

Đó 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 squid3tệ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:

  1. Tên biến http_proxyPHẢI là chữ thường trên hầu hết Linux.
  2. 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.


s / man-in-he-middle / man-in-the-middle / (S / E không đồng ý chỉnh sửa nhân vật)
Chen Levy

4

Điều này sẽ không giải quyết tất cả các nhiệm vụ của bạn, nhưng có lẽ điều này vẫn hữu ích. Mặc dù tên như vậy, apt-cacher-ng không chỉ hoạt động với Debian và các dẫn xuất, và là

một proxy lưu trữ. Chuyên dùng cho các tệp gói từ các nhà phân phối Linux, chủ yếu dành cho các bản phân phối Debian (và dựa trên Debian) nhưng không giới hạn ở các bản phân phối.

Tôi đang sử dụng điều này trong sản xuất trong một môi trường tương tự (dựa trên Debian) như của bạn.

Tuy nhiên, AFAIK, điều này sẽ không hỗ trợ rubygems, PyPI, PECL, CPAN hoặc npm và không cung cấp ACL dạng hạt.

Cá nhân, tôi nghĩ rằng điều tra Squid là một ý tưởng tốt. Nếu bạn thực hiện thiết lập cuối cùng, bạn có thể vui lòng chia sẻ kinh nghiệm của mình không? Tôi khá thích thú với cách nó đi.


2

chúng tôi đã có một thử thách tương tự và đã giải quyết nó bằng cách sử dụng repos cục bộ và hệ thống lưu trữ dựa trên ảnh chụp nhanh. Về cơ bản, chúng tôi cập nhật kho lưu trữ phát triển, sao chép nó để thử nghiệm, sao chép nó để dàn dựng và cuối cùng là sản xuất. Số lượng đĩa được sử dụng bị hạn chế theo cách đó, cộng với đó là tất cả lưu trữ sata chậm và không sao.

Các máy khách nhận thông tin kho lưu trữ từ quản lý cấu hình của chúng tôi để chuyển đổi dễ dàng nếu cần thiết.

Bạn có thể đạt được những gì bạn muốn bằng cách sử dụng ace trên máy chủ proxy bằng cách sử dụng các chuỗi kết hợp tác nhân người dùng hoặc ips / mặt nạ nguồn và hạn chế quyền truy cập của họ vào một số tên miền nhất định, nhưng nếu bạn gặp phải một vấn đề tôi thấy đó là các phiên bản gói / thư viện khác nhau. Vì vậy, nếu một trong các máy chủ có thể truy cập cpan và yêu cầu mô-đun xxx :: yyy trừ khi khách hàng hướng dẫn sử dụng một phiên bản cụ thể, sẽ lấy phiên bản mới nhất từ ​​cpan (hoặc pypy hoặc rubygems), có thể hoặc không phải là phiên bản đã có lưu trữ trong proxy. Vì vậy, bạn có thể kết thúc với các phiên bản khác nhau trên cùng một môi trường. Bạn sẽ không gặp vấn đề đó nếu bạn sử dụng kho lưu trữ cục bộ.

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.