Máy chủ proxy trong suốt mực. Máy chủ proxy minh bạch

Proxy minh bạch, còn được gọi là proxy chặn hoặc proxy bắt buộc, là một máy chủ chặn thông tin gửi đi trên mạng trước khi nó đến Internet mà không cần bất kỳ cấu hình nào trên máy khách. Không giống như các proxy rõ ràng yêu cầu cấu hình dựa trên phần mềm, proxy minh bạch chỉ yêu cầu cấu hình máy chủ, nghĩa là chúng có thể được sử dụng trên mạng mà người dùng cuối không hề hay biết. Những máy chủ này thường được sử dụng để tối ưu hóa cân bằng tải hoặc lọc nội dung. Nhiều trường học và nơi làm việc sử dụng máy chủ proxy này.
Giống như một proxy rõ ràng, một proxy minh bạch có thể cải thiện hiệu suất mạng thông qua một quá trình được gọi là bộ nhớ đệm. Dữ liệu được lưu trữ cục bộ theo yêu cầu đầu tiên, cho phép các yêu cầu tiếp theo được xử lý nhanh hơn nhiều. Trong mạng sử dụng proxy trong suốt, tất cả yêu cầu từ máy khách đều đi qua một máy chủ duy nhất, do đó máy chủ có thể lưu trữ cục bộ hầu hết dữ liệu được yêu cầu thường xuyên, tiết kiệm nhu cầu truyền dữ liệu qua Internet. Khi thực hiện một số lượng lớn yêu cầu web - ví dụ như trên nhiều mạng trường học hoặc doanh nghiệp - bộ nhớ đệm có thể tiết kiệm rất nhiều thời gian và băng thông.

Proxy minh bạch cũng có thể được sử dụng để lọc hoặc chặn nội dung web nhất định truy cập vào mạng. Quản trị viên mạng có thể thiết lập danh sách các trang web mà máy chủ proxy sẽ lọc trước khi có thể truy cập chúng người dùng cuối. Ví dụ: người sử dụng lao động có thể muốn cấm nhân viên xem các trang web thể thao trong khi làm việc. Tại cấu hình đúng Với một proxy minh bạch, việc cố gắng kiểm tra tỷ số thể thao của ngày hôm qua sẽ dẫn đến lỗi trang cho nhân viên, khiến họ không thể lãng phí hàng giờ làm việc trên một trang web không liên quan đến công việc. Mặc dù phương pháp lọc này thường đủ để ngăn người dùng vô tình truy cập Nội dung không phù hợp, người dùng có kinh nghiệm có thể tìm cách bỏ qua quá trình lọc do những hạn chế của công nghệ này.

Proxy trong suốt rất hữu ích cho nhiều ứng dụng giáo dục và thương mại mạng máy tính. Một máy chủ proxy trong suốt không yêu cầu cấu hình trên mỗi máy khách, do đó quản trị mạng Chúng thường được sử dụng để tiết kiệm thời gian cho cài đặt riêng lẻ hệ thống. Mặc dù proxy minh bạch cung cấp các lợi ích lọc và lưu vào bộ nhớ đệm giống như hầu hết các proxy rõ ràng, nhưng nó không cung cấp bất kỳ chức năng che giấu địa chỉ Giao thức Internet (IP) nào. Do đó, proxy minh bạch không phù hợp với nhiều mục đích bảo mật trực tuyến thường được kết hợp với proxy web.

DMITRY LẠI

Proxy minh bạch. Tồn tại hay không tồn tại?

Toàn bộ nội dung của bài viết này chỉ là quan điểm cá nhân của tác giả và không hề giả vờ là một tập hợp các tiên đề. Tất cả các nghiên cứu và kết luận được mô tả trong bài viết cũng nên được nhìn qua lăng kính chủ quan của tác giả, bởi vì, như các nhà hiền triết cổ đại đã nói, “Errare humanum est”. Ngoài ra, tác giả không chịu trách nhiệm về bất kỳ hành động nào (và hậu quả của chúng) do người đọc thực hiện sau khi đọc bài viết này.

trữ tình lạc đề

Công việc quản trị hệ thống gắn bó chặt chẽ với lập trình. Chỉ có kiến ​​thức về phát triển phần mềm mới có thể giúp giải quyết các vấn đề về phần mềm, vì phân tích là một phần của giải pháp. Một chuyên gia phải có sự hiểu biết rõ ràng về các cơ chế bên trong của hệ thống và điều này chỉ có được khi có kinh nghiệm viết và quan trọng hơn là sửa đổi phần mềm.

Các hệ thống giống UNIX là nguồn kiến ​​thức lớn nhất cho việc tự học và là nơi thử nghiệm các thử nghiệm. Tính mở của mã nguồn của hệ thống và phần mềm ứng dụng, quyền truy cập cấp thấp vào cài đặt và tính linh hoạt của chúng... - tất cả những điều này cho phép bạn tìm hiểu sâu hơn về nguyên tắc hoạt động hệ thống máy tính và mạng. Ngoài ra, điều này cho phép bạn tạo tất cả các loại cấu hình không chuẩn của phần mềm quen thuộc. Nó dùng để làm gì? Trước hết, để mở rộng khả năng của hệ thống. Lập luận thứ hai ủng hộ những “can thiệp phẫu thuật” như vậy trong phần mềm là sự hiện diện nhiều lỗi khác nhau trong việc phát triển phần mềm.

Bài viết này dành cho các vấn đề về ủy quyền minh bạch bằng cách sử dụng ví dụ về máy chủ Squid phổ biến. Hệ điều hành được sử dụng ổn định Phiên bản FreeBSD 4.7.

Nguyên tắc chung của ủy quyền minh bạch

Khi máy chủ proxy hoạt động ở chế độ Trans-parent, việc truy cập Internet của người dùng không yêu cầu thiết lập trình duyệt để tương tác với proxy tại mỗi máy trạm và bản thân người dùng thậm chí có thể không biết đến sự tồn tại của máy chủ proxy . Ở chế độ này, quản trị viên và kỹ thuật viên nhận được ít câu hỏi và khiếu nại hơn từ người dùng về việc thiết lập phần mềm tùy chỉnh.

Về mặt kỹ thuật, chế độ này được thực hiện như sau. VỚI sử dụng tường lửa tất cả các kết nối đến cổng cụ thể(trong trường hợp HTTP – cổng 80) các máy chủ bên ngoài được chuyển hướng đến cảng địa phương máy chủ proxy (thường là 3128).

Theo tiêu chuẩn Giao thức HTTP 1.1 (RFC2616) mỗi yêu cầu của khách hàng phải chứa tiêu đề “Máy chủ”, cho biết địa chỉ của máy chủ nhận yêu cầu. Với sự trợ giúp của tiêu đề này, máy chủ proxy sẽ xác định người nhận và kết nối với người đó. Đối với các giao thức phổ biến khác (FTP, HTTPS, v.v.), đơn giản là chúng không cung cấp khả năng như vậy. Trên “ghi chú vui vẻ” này, bạn có thể bắt đầu mô tả các vấn đề.

Ủy quyền trên máy chủ proxy cho phép bạn ghi lại công việc và giới hạn quyền truy cập Internet cho người dùng mạng nội bộ, sử dụng tên của họ (thông tin đăng nhập) bất kể người dùng đang sử dụng máy tính nào và địa chỉ của anh ta là gì máy tính này. Mặt khác, quản trị viên có khả năng kiểm soát công việc của nhân viên chỉ dựa trên địa chỉ IP, điều này cho phép người dùng bỏ qua các hạn chế. Vì vậy, ủy quyền trên máy chủ proxy là một yếu tố cần thiết của cơ sở hạ tầng mạng cục bộ. Và bây giờ là điều đáng buồn: việc ủy ​​quyền trên máy chủ proxy “minh bạch” gần như là không thể. Tuy nhiên, tuyên bố như vậy rõ ràng mâu thuẫn với các tiêu chuẩn.

Hãy chuyển sang nguồn chính - mô tả giao thức HTTP - tài liệu RFC2616. Theo tiêu chuẩn, một máy khách HTTP khi nhận được phản hồi trạng thái máy chủ với mã 407 (Yêu cầu xác thực proxy), được yêu cầu gửi dữ liệu ủy quyền đến máy chủ. Để minh họa công việc và để thử nghiệm, tác giả đã viết một máy chủ http nhỏ trong Perl, máy chủ này tạo ra các trạng thái và tiêu đề cần thiết, đồng thời viết nhật ký các yêu cầu và phản hồi.

Do hoạt động của máy chủ, máy khách sẽ nhận dữ liệu theo 4 giai đoạn:

  1. Máy khách yêu cầu một tài liệu và máy chủ báo cáo nhu cầu ủy quyền Proxy.
  2. Máy khách yêu cầu lại tài liệu nhưng có dữ liệu ủy quyền proxy.
  3. Để kiểm tra chức năng của hệ thống, máy chủ cũng yêu cầu ủy quyền cho Web - một mô hình tình huống khi người dùng truy cập tài liệu được bảo vệ trên máy chủ từ xa thông qua proxy có ủy quyền.
  4. Máy khách ngoan ngoãn đăng nhập vào “double” – trên máy chủ proxy và máy chủ web.

Chúng tôi đã sử dụng làm khách hàng thử nghiệm Trình duyệt Mozilla FireBird 0.6.1, Microsoft trình duyệt web IE 6.0.2800.1106 và Opera 6.05.

Mã máy chủ thử nghiệm:

#!/usr/bin/Perl -w

Sử dụng nghiêm ngặt;

sử dụng Ổ cắm;

# Một ổ cắm được tạo, liên kết với tất cả các địa chỉ (để thuận tiện) trên cổng 8080 và tính năng nghe được bật.

socket(SERVER,PF_INET,SOCK_STREAM,getprotobyname("tcp"));

setsockopt(SERVER,SOL_SOCKET,SO_REUSEADDR,1);

liên kết(SERVER,sockaddr_in(8080,INADDR_ANY));

lắng nghe (Máy chủ, SOMAXCONN);

$|=1;

$CR="?15?12" của tôi;

# Chấp nhận kết nối đến

trong khi (1)(

# Nhận máy khách, xác định địa chỉ/cổng/máy chủ của nó và hiển thị trên màn hình (để gỡ lỗi)

$paddr của tôi = chấp nhận (KHÁCH HÀNG, MÁY CHỦ);

Của tôi ($ip,$port,$name) = remote($paddr);

In "Kết nối từ $ip:$port ($name) ";

# Đọc toàn bộ yêu cầu từ client vào một biến

$DỮ LIỆU của tôi;

Trong khi()(

nhai;

$_=~s/ //g;

Cuối cùng trừ khi $_;

$DATA.=$_." ";

# Ghi nhật ký yêu cầu vào tệp nhật ký

Nhật ký ($ DỮ LIỆU);

# Hiện nay kiểm tra đơn giản kiểm tra sự hiện diện của các tiêu đề cần thiết trong yêu cầu, gửi phản hồi thích hợp cho khách hàng

# và viết phản hồi vào tệp nhật ký.

If($DATA !~/Proxy-Authorization/)(

Nhật ký (Phản hồi407());

In PHẢN HỒI KHÁCH HÀNG407();

)elsif($DATA !~/?12Authorization/)(

Nhật ký(Phản hồi401());

In PHẢN HỒI CỦA KHÁCH HÀNG401();

)khác(

Nhật ký(Phản hồi200());

In PHẢN HỒI KHÁCH HÀNG200();

In "Kết nối đã đóng.";

Đóng KHÁCH HÀNG;

# Đóng kết nối hiện tại

# Đóng socket máy chủ

đóng MÁY CHỦ;

# Để thuận tiện, việc soạn phản hồi của máy chủ được bao gồm trong các chức năng riêng biệt

phản hồi phụ401(

Trả về "HTTP/1.1 401 Không được phép$CR".

"Phiên bản Mime: 1.0$CR".

"Độ dài nội dung: 20$CR".

"WWW-Xác thực: Vương quốc cơ bản=" --== Khu vực web được bảo vệ ==--"$CR".

"Kết nối: close$CR$CR

phản hồi phụ407(

Trả về "Yêu cầu xác thực proxy HTTP/1.1 407$CR".

"Máy chủ: mực/2.5.STABLE3$CR".

"Phiên bản Mime: 1.0$CR".

"Loại nội dung: text/html$CR".

"Độ dài nội dung: 20$CR".

"Xác thực proxy: NTLM$CR".

"Proxy-Xác thực: Lĩnh vực cơ bản="<-- 407 Protected Proxy-->"$CR".

"Kết nối: close$CR$CR

Phản hồi phụ200(

Trả về "HTTP/1.1 200 OK$CR".

"Máy chủ: mực/2.5.STABLE3$CR".

"Phiên bản Mime: 1.0$CR".

"Loại nội dung: text/html$CR".

"Độ dài nội dung: 19$CR."

"Kết nối: close$CR$CR

# Chức năng xác định địa chỉ, cổng và tên máy chủ của máy khách

điều khiển phụ (

$ rem = shift của tôi;

Trả về undef trừ khi $rem;

Của tôi ($port,$ip) = sockaddr_in($rem);

Trả về (inet_ntoa($ip),$port,gethostbyaddr($ip,AF_INET));

# Chức năng ghi vào file log

Nhật ký phụ(

Open(F,">>connection.log");

In ra F vô hướng(localtime)." ";

For(split/ /,$_)(

In F " $_ ";

In F " //====// ";

Đóng(F);

Yêu cầu trình duyệt đầu tiên:

NHẬN /?kiểm tra HTTP/1.1

Máy chủ: localhost

Tác nhân người dùng: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5a) Gecko/20030728 Mozilla Firebird/0.6.1

Máy chủ trả lời:

Máy chủ báo cáo rằng mọi thứ đều ổn:

HTTP/1.1 200 Được

Máy chủ: mực/2.5.STABLE3

Phiên bản Mime: 1.0

Loại nội dung: văn bản/html

Độ dài nội dung: 19

Kết nối: đóng

Lấy Mozilla FireBird 0.6.1 làm ví dụ, giao thức này minh họa khả năng sử dụng ủy quyền hoàn toàn “hợp pháp” trên máy chủ proxy minh bạch. Một câu hỏi hợp lý được đặt ra: tại sao Câu hỏi thường gặp về máy chủ Squid lại chứa cụm từ “...proxy_auth không thể được sử dụng trong proxy minh bạch…”?

Đầu tiên, chúng ta hãy xem mã nguồn của Squid. Kết nối giữa ủy quyền và chế độ vận hành máy chủ có thể được theo dõi trong hai tệp – acl.c và client_side.c. Khi phân tích mã, có thể thấy rõ rằng khả năng sử dụng ủy quyền trong trong trường hợp này chỉ đơn giản là bỏ qua!

Phần mã nguồn acl.c:

Loại tiêu đề Http_hdr_type;

Nếu (NULL == r) (

Trả về -1;

) khác nếu (!r->flags.accelerated) (

/* Ủy quyền proxy theo yêu cầu proxy */

Loại tiêu đề = HDR_PROXY_AUTHORIZATION;

) khác nếu (r->flags.internal) (

/* Ủy quyền WWW đối với các yêu cầu nội bộ được tăng tốc */

) khác (

#if AUTH_ON_ACCELERIC

/* Ủy quyền WWW đối với các yêu cầu được tăng tốc */

Loại tiêu đề = HDR_AUTHORIZATION;

#khác

Debug(28, 1) ("aclAuthenticated: xác thực không áp dụng cho các yêu cầu tăng tốc.");

Trả về -1;

#endif

Phần mã nguồn client_side.c:

Nếu (câu trả lời == ACCESS_REQ_PROXY_AUTH || aclIsProxyAuth(AclMatchedName)) (

Nếu (!http->flags.accel) (

/* Cần có ủy quyền proxy */

Trạng thái = HTTP_PROXY_AUTHENTICATION_REQUIRED;

) khác (

/* Cần có sự cho phép của WWW */

Trạng thái = HTTP_UNAUTHORIZED;

Nếu (page_id == ERR_NONE)

Trang_id = ERR_CACHE_ACCESS_DENIED;

) khác (

Trạng thái = HTTP_FORBIDDEN;

Nếu (page_id == ERR_NONE)

Trang_id = ERR_ACCESS_DENIED;

Điều kỳ lạ này, được phát hiện trong quá trình nghiên cứu, càng làm tăng thêm sự quan tâm của tác giả đối với vấn đề đang thảo luận.

Về vấn đề này, một cách tự nhiên, nguồn Máy chủ đã trải qua những thay đổi. Kết quả là một phiên bản sửa đổi của máy chủ Squid có làm việc cùng nhauủy quyền và chế độ minh bạch. Nhưng...

Nghiên cứu sâu hơn cho thấy rằng trình duyệt phổ biến nhất Internet của Microsoft Explorer không thể tuân theo các tiêu chuẩn! Nếu cài đặt của máy khách này không chỉ định rõ ràng việc sử dụng máy chủ proxy thì MSIE chỉ cần bỏ qua việc xử lý trạng thái 407 http và phát sinh lỗi. Hơn nữa, các phiên bản cũ hơn dành cho Windows 9X thường “sụp đổ” với lỗi nghiêm trọng trong thư viện WININET.DLL khi nhận được mã trạng thái được mô tả ở trên.

Về vấn đề này, rõ ràng là không thể sử dụng ủy quyền với ủy quyền minh bạch. Rốt cuộc, đại đa số người dùng làm việc với Microsoft Internet Explorer. Nếu mạng của bạn chỉ sử dụng trình duyệt dựa trên Mozilla, bạn có thể sửa đổi máy chủ Squid-2.5.STABLE3 của mình bằng cách sử dụng các bản vá có tại http://www.comprice.ru/cmapuk/squid_patch.tgz

Ngoài những điều trên, cần nói thêm rằng tất cả các trình duyệt hiện tại, bằng cách này hay cách khác, đều không tuân thủ đầy đủ các tiêu chuẩn. Ví dụ: trạng thái HTTP 305 (Sử dụng Proxy), yêu cầu khách hàng sử dụng máy chủ proxy được chỉ định trong phản hồi, bị cả Microsoft Internet Explorer, Mozilla FireBird và Opera bỏ qua. Bên cạnh đó, Trình duyệt Opera(đã thử nghiệm trên phiên bản 6.05) không hỗ trợ ủy quyền NTLM, mặc dù mã trạng thái 407 được xử lý chính xác và dễ dàng được cấp phép bằng loại Cơ bản.

Vì vậy, giờ đây không còn nghi ngờ gì về sự tồn tại thực sự của vấn đề và tính bất khả thi trên thực tế của việc giải quyết nó. Tuy nhiên, lý do “chính trị” cho việc không tuân thủ các tiêu chuẩn vẫn chưa được biết. Sau khi suy nghĩ về chủ đề này, tác giả bài viết đã đưa ra một giả thuyết về nguyên nhân dẫn đến tính chất “không chuẩn” của MSIE với tư cách là một máy khách HTTP.

Nếu tuyệt đối trình duyệt chuẩn Khi nhận được phản hồi của máy chủ với mã 407 và gửi dữ liệu ủy quyền, bất kỳ bên thứ ba nào cũng có thể lấy được thông tin này. Trong một ví dụ nó trông như thế này. Người dùng độc hại định cấu hình máy chủ web (bên ngoài hoặc trên mạng cục bộ) để phản hồi bất kỳ yêu cầu nào bằng mã trên cho bất kỳ yêu cầu nào (đây có thể là máy chủ “được viết tại nhà” cơ bản gồm 10-15 dòng). Sau này, sử dụng các kỹ thuật đơn giản nhất kỹ thuật xã hội Người dùng nạn nhân bị dụ vào bẫy để chỉ có được một phiên HTTP giữa nạn nhân và máy chủ của kẻ tấn công. Kết quả là “tin tặc” lấy được dữ liệu ủy quyền của người dùng (ví dụ: dữ liệu ủy quyền NTLM), điều này có thể dẫn đến truy cập trái phépđể biết thông tin với tất cả các hậu quả tiếp theo.

Khi tính đến giả thuyết này, chúng ta có thể kết luận rằng việc bỏ qua những điều cần thiết và đồng thời nguy hiểm như vậy tính năng tiêu chuẩn có một số lý do khá chính đáng.

Nhiều giao thức

Theo quy định, nhiệm vụ của máy chủ proxy bao gồm việc phục vụ máy khách không chỉ qua HTTP mà còn cả FTP và HTTPS. Ngoài ra, thường cần có kết nối HTTP trên các cổng thay thế (8000, 8080, v.v.). Liên quan đến điều này là điều thứ hai và có lẽ là nhất vấn đề phức tạpủy quyền trong suốt – máy chủ proxy Squid ở chế độ trong suốt có thể phục vụ các kết nối chỉ bằng một giao thức – HTTP.

Do giải pháp cho vấn đề này không hề tầm thường nên phần này của bài viết sẽ được dành để xem xét nguyên nhân của vấn đề này và chỉ có những cách giải quyết trên lý thuyết.

Cổng HTTP thay thế

Như đã đề cập ở đầu bài viết, đặc tả giao thức HTTP 1.1 yêu cầu máy khách phải đưa tiêu đề “Máy chủ” bắt buộc vào yêu cầu. Tiêu đề này chứa tên của máy chủ mà yêu cầu được xử lý. Vì vậy, để lấy dữ liệu từ http://www.server.info khi kết nối trực tiếp Yêu cầu HTTP tối thiểu sẽ là:

NHẬN/HTTP/1.1

Máy chủ: www.server.info

Nếu phần mềm máy khách được điều chỉnh để hoạt động thông qua máy chủ proxy và được định cấu hình phù hợp thì yêu cầu sẽ giống như sau:

NHẬN http://www.server.info HTTP/1.1

Máy chủ: www.server.info

Nếu máy chủ từ xa phục vụ khách hàng thông qua cổng thay thế, yêu cầu thông qua proxy sẽ chứa thông tin về điều này:

NHẬN http://www.server.info:8080 HTTP/1.1

Máy chủ: www.server.info

Khi kết nối trực tiếp với máy chủ từ xa, yêu cầu của máy khách không thay đổi tùy theo cổng và vẫn giữ nguyên như trong ví dụ đầu tiên. Kết quả là khi làm việc ở chế độ trong suốt, máy chủ proxy không thể xác định cổng thực máy chủ từ xa, mà khách hàng đã tìm đến, vì khách hàng thậm chí không nghi ngờ sự tồn tại của một “trung gian”.

Các phiên bản hiện đại của Squid proxy hỗ trợ khả năng xác định máy chủ và cổng bằng các thư viện bộ lọc gói như ipfilter trên hệ thống BSD hoặc netfilter trên Linux. Để làm việc với các thư viện này, bạn phải chỉ định các tùy chọn thích hợp (--enable-ipf-transparent) khi biên dịch máy chủ. Sau khi máy chủ được xây dựng, nó sẽ có quyền truy cập vào thông tin chi tiết về kết nối.

Phần mã client_side.c:

#if IPF_TRANSPARENT

NatLookup.nl_inport = http->conn->me.sin_port;

NatLookup.nl_outport = http->conn->peer.sin_port;

NatLookup.nl_inip = http->conn->me.sin_addr;

NatLookup.nl_outip = http->conn->peer.sin_addr;

Có vẻ như, với cách tiếp cận này cần phải sử dụng lọc tường lửa dựa trên ipfilter/ipnat và từ bỏ ipfw. Tuy nhiên, để Squid hoạt động, bạn chỉ cần kích hoạt hỗ trợ cho bộ lọc gói này là bạn vẫn có thể chuyển tiếp các gói bằng ipfw.

Ủy quyền FTP và HTTPS

Với proxy thông thường, các yêu cầu của máy khách tới máy chủ proxy để nhận tệp từ máy chủ từ xa qua FTP trông giống như các yêu cầu HTTP:

NHẬN ftp://ftp.server.info HTTP/1.1

Máy chủ: ftp.server.info

Khách hàng thực hiện điều này Giao thức FTP, trong trường hợp này là chính máy chủ proxy. Sau khi nhận được tệp, máy chủ proxy sẽ phản hồi máy khách bằng phản hồi HTTP bình thường và trả về dữ liệu.

Máy khách cũng có thể “yêu cầu” máy chủ proxy kết nối trực tiếp với máy chủ từ xađể trao đổi dữ liệu. Sau đó, yêu cầu sẽ trông như thế này:

KẾT NỐI ftp.server.info:21 HTTP/1.1

Máy chủ: ftp.server.info

Nhờ loại yêu cầu này, bên trung gian hiểu rõ nhiệm vụ được giao và thực hiện theo đúng khuyến nghị của quản trị viên hệ thống dưới dạng chỉ thị acl và http_access trong file cấu hình.

Giao tiếp giữa máy khách và máy chủ từ xa thông qua các giao thức được bảo vệ SSL luôn xảy ra bằng phương thức CONNECT:

KẾT NỐI safe.server.info:443 HTTP/1.1

Máy chủ: safe.server.info

Khi một máy khách kết nối trực tiếp với một máy chủ từ xa mà không qua trung gian (và với proxy minh bạch, máy khách “nghĩ” theo cách này), nó sẽ tự thực hiện các giao thức cấp độ ứng dụng, chẳng hạn như FTP và HTTP. Kết quả là máy chủ proxy không thể xác định nhiệm vụ được giao cho nó. Khi sử dụng tường lửa để chuyển hướng tất cả các kết nối đến cổng 21 và 443 sang cổng proxy (3128), cổng sau sẽ nhận được trong trường hợp đầu tiên chuỗi “tên người dùng NGƯỜI DÙNG” và trong trường hợp thứ hai là một tập hợp các ký tự không mạch lạc.

Để giải quyết vấn đề này cần có sự can thiệp phẫu thuật vào mã nguồn của máy chủ proxy Squid. Mục tiêu của việc sửa đổi máy chủ là để “dạy” máy chủ trở thành gần như trung gian giống như với phương thức CONNECT, tùy thuộc vào số cổng của máy chủ từ xa được yêu cầu.

Để chứng minh ý tưởng này, hãy viết một máy chủ đơn giản khác:

#!/usr/bin/Perl -w

Sử dụng nghiêm ngặt;

sử dụng Ổ cắm;

# Địa chỉ địa phương proxy nhỏ

$maddr = sockaddr_in(30021,inet_aton("localhost")); của tôi

# Giả sử chúng ta đã biết địa chỉ FTP từ xa

$paddr = sockaddr_in(21,inet_aton("ftp.freebsd.org"));

# Mở ổ cắm cho máy chủ proxy và bắt đầu nghe

socket(SOCK,PF_INET,SOCK_STREAM,getprotobyname("tcp")) hoặc die $!;

setsockopt(SOCK,SOL_SOCKET,SO_REUSEADDR,1) hoặc chết $!;

bind(SOCK,$maddr) hoặc chết $!;

nghe(SOCK,SOMAXCONN);

# Chặn tín hiệu PIPE. Tín hiệu này xuất hiện khi cố gắng làm việc với luồng đã đóng

$SIG(PIPE)=phụ(

Đóng(SERVER);

Đóng(KHÁCH HÀNG);

Đóng(SOCK);

Lối ra;

$|=1; # vô hiệu hóa bộ đệm luồng STDOUT

# Chấp nhận kết nối

trong khi (chấp nhận(KHÁCH HÀNG,SOCK))(

In "Phát hiện kết nối.";

# Kết nối với FTP từ xa

Socket(SERVER,PF_INET,SOCK_STREAM,getprotobyname("tcp")) hoặc chết $!;

Kết nối(SERVER,$paddr);

# Hãy bắt đầu trao đổi thông tin

Trong khi(1)(

Máy chủ $="" của tôi

# Vô hiệu hóa bộ đệm của luồng máy khách và máy chủ

Chọn(KHÁCH HÀNG); $|=1;

Chọn(Máy chủ); $|=1;

Chọn(STDOUT);

# Trong khi máy chủ chưa hoàn tất quá trình chuyển

# sử dụng mã định danh trạng thái, chúng tôi chấp nhận tất cả dữ liệu, cung cấp cho khách hàng và đồng thời hiển thị nó trên màn hình

While($server !~/^d(3)s/)(

$máy chủ=;

In máy chủ CLIENT $;

In máy chủ $;

# Chúng tôi chấp nhận lệnh từ máy khách và gửi nó đến máy chủ. Chúng tôi cũng hiển thị

$client=;

In MÁY CHỦ $client;

In $client;

Đóng MÁY CHỦ;

Đóng KHÁCH HÀNG;

đóng TỐT;

Thêm vào quy tắc tường lửa chuyển hướng tất cả các yêu cầu đến cổng 21 sang cổng cục bộ 30021 và khởi chạy máy chủ thử nghiệm.

ipfw thêm 30002 fwd 127.0.0.1,30021 tcp từ 192.168.0.0/24 vào 21 bất kỳ qua xl0

Bây giờ hãy mở trình duyệt và thử truy cập ftp://ftp.freebsd.org (tất nhiên là không có cài đặt proxy). Kết quả của một thử nghiệm đơn giản cho thấy rằng việc ủy ​​quyền minh bạch qua các giao thức khác ngoài HTTP là hoàn toàn có thể thực hiện được. Bây giờ chúng ta hãy đặt nó đã nhiệm vụ cụ thểđể sửa đổi máy chủ proxy Squid.

1. Thêm một lệnh mới vào khả năng cấu hình máy chủ (hãy gọi nó là direct_port) theo định dạng sau:

direct_port GIAO THỨC CỔNG

trong đó PORT là cổng cuối cùng của máy chủ từ xa; PROTOCOL là một giao thức mà máy chủ proxy sẽ đóng vai trò trung gian. Ví dụ:

direct_port 21 FTP, direct_port 443 SSL

2. Thêm vào “dịch vụ” hòa giải hiện có bằng phương thức CONNECT phiên bản được sửa đổi, trong đó máy chủ proxy không can thiệp vào giao tiếp giữa máy khách và máy chủ từ xa bằng các tiêu đề không cần thiết.

3. Thiết lập quyền kiểm soát loại kết nối mới bằng cách sử dụng chỉ thị ACL.

Việc giải quyết vấn đề này đối với một nhà nghiên cứu chưa từng tham gia phát triển máy chủ proxy Squid là một quá trình tốn rất nhiều công sức. Vì vậy, tác giả bài viết này đã khoảnh khắc này KHÔNG giải pháp làm sẵn dưới dạng các bản vá lỗi, v.v. Tuy nhiên, có lẽ nghiên cứu này sẽ thu hút sự chú ý của những người đam mê (hoặc chính các nhà phát triển Squid) đối với vấn đề trên và một giải pháp sẽ xuất hiện.

Phần kết luận

Nghiên cứu cho thấy việc ủy ​​quyền minh bạch thực sự mà không gây hại cho người dùng và quản trị viên là một thực tế. Vấn đề nghiêm trọng duy nhất trên con đường triển khai công nghệ ủy quyền minh bạch vẫn là việc không tuân thủ các tiêu chuẩn trình duyệt Microsoft Trình duyệt web IE. Rất có thể trong tương lai nhược điểm này ở MSIE sẽ biến mất nếu chúng ta thu hút sự chú ý của các chuyên gia Microsoft tới vấn đề này. TRONG Hiện nay, hay đúng hơn, sau khi máy chủ proxy Squid được sửa đổi, bất kỳ tổ chức nào có tiêu chuẩn công ty không bao gồm việc sử dụng trình duyệt MSIE sẽ có thể sử dụng đầy đủ proxy minh bạch.

Một vấn đề khác vẫn chưa được biết đến là máy chủ proxy có thể xác định địa chỉ của máy chủ từ xa chứ không phải tên của nó. Về vấn đề này, có thể có vấn đề khi truy cập qua FTP và HTTPS tới các máy chủ có tên miền ảo, thường được sử dụng trên lưu trữ miễn phí(và không chỉ).

Để kết luận, tôi muốn nói ít nhất một cụm từ ở ngôi thứ nhất. Tôi hy vọng rằng công việc đã hoàn thành sẽ không khiến cộng đồng các nhà phát triển tự do thờ ơ với những điểm không hoàn hảo của phần mềm ứng dụng và sẽ khuyến khích những người nghiệp dư và chuyên nghiệp nghiên cứu mới.

Không nhiều người dùng biết con mực máy chủ proxy minh bạch là gì, tại sao lại cần đến con mực, những ưu điểm và nhược điểm của nó. Bây giờ chúng ta sẽ xem xét từng câu hỏi riêng biệt và cố gắng hiểu chủ đề.

Nhược điểm của proxy minh bạch:

  • Ở chế độ trong suốt, không hoạt động với SSL. Điều này có nghĩa là bạn sẽ không thể truy cập một trang web có địa chỉ https://... ở chế độ xác thực, nó có thể hoạt động trên các giao thức HTTP, SSL, FTP.
  • Nó không thể hoạt động ở hai chế độ cùng một lúc: xác thực và minh bạch - truy cập Internet mà không cần bất kỳ cài đặt, thông tin đăng nhập nào, v.v. Chế độ xác thực - khi người dùng cần nhập thông tin đăng nhập/mật khẩu hoặc các cài đặt khác do quản trị viên cung cấp.
  • Không biết cách làm việc với máy chủ thư POP3, SMTP, IMAP. Bạn sẽ không thể nhận hoặc gửi thư thông qua proxy SQUID.

Chế độ - proxy tầng

Như đã đề cập ở trên, mực có thể lưu thông tin vào RAM của máy tính và có thể quay trở lại trong tích tắc nếu cần. Khi tìm kiếm thông tin, proxy tầng cho phép bạn truy cập tất cả các nhóm trên mạng chỉ khi không có sẵn. Một tìm kiếm trên Internet được thực hiện. Không còn nghi ngờ gì nữa, một chức năng tiện lợi và hữu ích.

Tóm lại, chúng ta có thể tự tin nói: mực rất xuất sắc giải pháp doanh nghiệp cho tổ chức truy cập an toàn trên mạng. Squid là một proxy minh bạch cho phép bạn truy cập Internet mà không cần thông qua xác thực bổ sung, nhưng đồng thời, nó cũng có nhược điểm, trong đó nhược điểm chính là không thể sử dụng SSL.

(Proxy server) là một máy tính trung gian đóng vai trò trung gian giữa máy tính của bạn và Internet. Proxy thường được sử dụng để tăng tốc Internet hoặc điều hướng Internet một cách ẩn danh. Ngoài ra, việc sử dụng proxy ẩn danh có thể được sử dụng như biện pháp khắc phục bổ sung bảo vệ: một proxy ẩn danh sẽ thay thế địa chỉ IP của bạn và kẻ tấn công sẽ cố gắng tấn công không phải máy tính của bạn mà là máy chủ proxy, thường có mức bảo vệ tối đa hệ thống mạnh mẽ sự bảo vệ.

Có một số loại proxy, điểm khác biệt chính giữa chúng là chức năng mà chúng thực hiện:

Proxy HTTP/HTTPS– loại máy chủ proxy phổ biến nhất, thường có số cổng là 80, 8080, 3128. Proxy HTTP được chia thành các cấp độ ẩn danh thành: minh bạch (không ẩn địa chỉ IP thực của khách hàng), ẩn danh (cho biết proxy đang được sử dụng, nhưng không đưa ra địa chỉ IP thực của khách hàng), bóp méo (bóp méo địa chỉ IP của khách hàng) ), proxy ưu tú (không cho biết thực tế là máy chủ proxy được sử dụng sẽ ẩn địa chỉ IP thực của khách hàng).
proxy VỚ– một máy chủ proxy chuyển hoàn toàn tất cả dữ liệu từ máy khách sang máy chủ mà không thay đổi hoặc thêm bất cứ điều gì. Từ quan điểm của máy chủ web, proxy SOCKS là một máy khách, tức là. Proxy SOCKS được ẩn danh theo định nghĩa. Có các kiểu con SOCKS4, SOCKS4a, SOCKS5. Thông thường, proxy SOCKS có số cổng 1080, 1081.
Proxy FTP– một máy chủ proxy được thiết kế để hoạt động với các trình quản lý tệp.
Proxy CGI hoặc Trình ẩn danh— các trang web cho phép chuyển đổi ẩn danh từ trang web này sang trang web khác. Để sử dụng thuộc loại này proxy không cần thay đổi cài đặt trình duyệt của bạn, chỉ cần chỉ ra địa chỉ của trình ẩn danh trước địa chỉ của trang bạn sẽ truy cập là đủ.

Dựa trên nguyên tắc hoạt động, máy chủ proxy có thể được chia thành hai đặc điểm chính.

Thứ nhất, một số máy chủ proxy đã liên kết
bộ nhớ đệm, trong khi những người khác thì không. Thứ hai, bất kể bộ nhớ đệm, một số proxy sửa đổi các tin nhắn đi qua chúng, trong khi một số khác thì không.

Proxy bộ nhớ đệm
Sự khác biệt giữa proxy thông thường và proxy lưu trữ là khá quan trọng.
Một máy chủ proxy thông thường chỉ chuyển tiếp các yêu cầu và phản hồi. Một máy chủ proxy bộ nhớ đệm có khả năng hỗ trợ lưu trữ riêng phản hồi nhận được
trước đó. Khi máy chủ proxy nhận được một yêu cầu có thể được đáp ứng bằng phản hồi được lưu trong bộ nhớ đệm, yêu cầu đó sẽ không được chuyển tiếp và phản hồi sẽ được máy chủ proxy trả về. Như chúng ta sẽ thấy ở phần sau của chương này, một số điều kiện nhất định phải được đáp ứng để trả về phản hồi được lưu trong bộ nhớ đệm. Chúng tôi sử dụng thuật ngữ proxy lưu vào bộ nhớ đệm cho một proxy có bộ đệm được liên kết với nó.

Máy chủ proxy minh bạch
Dựa trên nguyên tắc truyền tin nhắn, máy chủ proxy có thể được chia thành hai:
nhóm: trong suốt và mờ đục. Sự khác biệt giữa chúng liên quan đến việc sửa đổi các tin nhắn đi qua máy chủ proxy. Proxy minh bạch chỉ sửa đổi yêu cầu hoặc phản hồi khi cần thiết. Một ví dụ về sự thay đổi như vậy đối với tin nhắn bằng proxy minh bạch sẽ là thêm thông tin nhận dạng về chính nó hoặc máy chủ mà tin nhắn bắt nguồn từ đó.
đã nhận. Những thông tin như vậy thậm chí có thể được yêu cầu bởi giao thức HTTP. Trong phần 3.8 chúng ta sẽ nói về việc sử dụng sai thuật ngữ "proxy minh bạch" trong nhiều lĩnh vực khác nhau Ngành công nghiệp web chỉ định các máy chủ proxy, chính xác hơn sẽ được gọi là máy chủ proxy chặn.
Máy chủ proxy mờ đục có khả năng sửa đổi yêu cầu và/hoặc phản hồi.
Một ví dụ về thay đổi yêu cầu như vậy là ẩn danh, theo đó thông tin về máy khách máy chủ proxy sẽ bị ẩn. Một ví dụ về việc thay đổi phản hồi sẽ là chuyển đổi định dạng - một hình ảnh được chuyển đổi từ định dạng này sang định dạng khác để giảm kích thước của phản hồi. Một ví dụ khác về proxy mờ là proxy dịch tài liệu từ ngôn ngữ này sang ngôn ngữ khác. Có những quy tắc chung cho cả hai loại máy chủ proxy. Đồng thời, mỗi loại máy chủ proxy đều có những quy định riêng. Proxy minh bạch phải đảm bảo rằng độ dài của nội dung tin nhắn không thay đổi khi tin nhắn đi qua proxy. Lưu ý rằng proxy trong suốt và proxy mờ khác với cổng và đường hầm. Cả hai loại proxy đều có thể, không giống như đường hầm, có bộ đệm được liên kết với chúng. Cả hai loại máy chủ proxy đều hoạt động như một liên kết trung gian giữa máy khách Web và máy chủ Web; những thứ kia. Tin nhắn được trao đổi ở định dạng HTTP.

Proxy minh bạch có nghĩa là máy chủ proxy tiêu chuẩn, không thay đổi dữ liệu của người dùng, để chúng ở dạng "ban đầu". Tức là họ không ẩn địa chỉ IP.

Proxy trong suốt xử lý tất cả lưu lượng HTTP mà không yêu cầu người dùng chỉ định bất kỳ cài đặt nào.

Các proxy như vậy giúp tăng tốc độ truy cập vào các trang của trang mà người dùng xác định - chủ yếu là những trang được truy cập thường xuyên. Tốc độ tải tăng lên bằng cách đặt các trang web vào bộ đệm. Theo quy định, các proxy minh bạch nhanh hơn (tốc độ tải xuống nhanh hơn) so với các “đồng chí” ưu tú hoặc ẩn danh của họ.

Nhà tuyển dụng sử dụng loại proxy này để hạn chế quyền truy cập của nhân viên vào một số trang web nhất định ( truyền thông xã hội, Ví dụ).

Nhược điểm chính là cấp thấp bí mật. Về cơ bản, proxy minh bạch được sử dụng để tăng bộ đếm trên một trang, khi tải xuống tệp từ dịch vụ lưu trữ tệp và chặn tường lửa cục bộ.

Proxy trong suốt truyền tải các tiêu đề HTTP giống như thế này:

REMOTE_ADDR – thể hiện proxy IP

Sự hiện diện của biến _X_ cho biết việc sử dụng biến này là tùy chọn. Một biến tương tự được truyền dưới dạng HTTP_X_FORWARDER_FOR.

Tuy nhiên, các nhà lãnh đạo proxy (Cash Engine, Squid) khá tích cực trong việc hỗ trợ biến này.

Proxy ẩn danh

Khi nói đến bộ nhớ đệm, proxy ẩn danh có lợi ích tương tự như proxy minh bạch. Thêm một điều nữa lợi thế không thể phủ nhận, bản chất của nó được truyền tải trong chính cái tên, là sự ẩn danh. Và vì tính bảo mật trên Internet là sự đảm bảo rằng máy tính sẽ không bị hack với tất cả các hậu quả sau đó nên ngày càng có nhiều người hâm mộ proxy ẩn danh.

Proxy ẩn danh ẩn dữ liệu người dùng khi lướt Internet. Họ thay đổi địa chỉ IP ngẫu nhiên. Và địa chỉ IP không được đăng ký vì một lý do đơn giản: giá trị HTTP_X_FORWARDER_FOR hoàn toàn không được gửi đến trang đích. Thật ấn tượng phải không nào?!

Một proxy ẩn danh cũng tạo ra:

REMOTE_ADDR - thể hiện proxy IP

HTTP_VIA – hiển thị địa chỉ máy chủ proxy

HTTP_X_FORWARDER_FOR - cho proxy biết địa chỉ IP của bạn.

Tuy nhiên, tất cả thông tin được điền chỉ để trưng bày và không chứa thông tin trung thực. Và không cần gì hơn nữa, như nhiều người dùng Internet tin tưởng.

Proxy ưu tú

Sử dụng proxy ưu tú là mức độ bảo vệ tiên tiến nhất vì proxy như vậy có thể mức độ tối đađảm bảo sự an toàn khi duyệt Internet của bạn.

Elite Proxy có khả năng ngụy trang rất xuất sắc. Điều này có nghĩa là sẽ không có dấu hiệu sử dụng máy chủ proxy nào xuất hiện trên Internet. Nhưng sẽ không thể tìm ra địa chỉ IP của bạn. Các tiêu đề HTTP_X_FORWARDED_FOR, HTTP_PROXY_CONNECTION, HTTP_VIA hoàn toàn không được gửi. Máy chủ không nhận được bất kỳ thông tin nào: về việc sử dụng proxy cũng như địa chỉ IP. Về mặt này, proxy ưu tú vượt trội hơn tất cả các máy chủ proxy khác.

Tuy nhiên, Elite Proxy cũng có một nhược điểm: tiêu đề REMOTE_ADDR lưu trữ địa chỉ IP của proxy. Do đó, khi bạn gửi các gói có cookie được lưu do lướt Internet, khi bạn không sử dụng proxy ưu tú, các trang web sẽ không nhận ra bạn. Bạn không muốn để điều này xảy ra? Xóa bộ nhớ cache và cookie của bạn trước.