นั่นคือกรณีการใช้งานที่ชัดเจนสำหรับพร็อกซี่ พร็อกซีปกติไม่ใช่พร็อกซีย้อนกลับ (aka. load balancer)
ส่วนใหญ่ที่รู้จักกันดีและฟรีและเปิดแหล่งที่มาเป็นปลาหมึก โชคดีที่มันเป็นหนึ่งในซอฟต์แวร์โอเพนซอร์สที่ดีไม่กี่คนที่สามารถจะติดตั้งมีเพียงหนึ่งเดียวและกำหนดค่าด้วยไฟล์เดียวapt-get install squid3
/etc/squid3/squid.conf
เราจะอธิบายหลักปฏิบัติที่ดีและบทเรียนที่ควรรู้
ไฟล์การกำหนดค่าอย่างเป็นทางการแก้ไขเล็กน้อย (ลบความเห็นที่ไร้ประโยชน์ 5,000 บรรทัด)
# 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
การกำหนดค่าไคลเอนต์ - ตัวแปรสภาพแวดล้อม
กำหนดค่าตัวแปรสภาพแวดล้อมทั้งสองนี้ในทุกระบบ
http_proxy=squid.internal.mycompany.com:3128
https_proxy=squid.internal.mycompany.com:3128
ไลบรารีไคลเอ็นต์ HTTP ส่วนใหญ่ (libcurl, httpclient, ... ) กำลังกำหนดค่าด้วยตนเองโดยใช้ตัวแปรสภาพแวดล้อม แอปพลิเคชั่นส่วนใหญ่ใช้หนึ่งในไลบรารี่ทั่วไปและสนับสนุนการใช้พร็อกซี่นอกกล่อง
โปรดทราบว่าไวยากรณ์เข้มงวด:
- ชื่อตัวแปร
http_proxy
ต้องเป็นตัวพิมพ์เล็กบน Linux ส่วนใหญ่
- ค่าตัวแปรต้องไม่เริ่มต้นด้วย
http(s)://
(โปรโตคอลพร็อกซีไม่ได้เป็น http)
การกำหนดค่าไคลเอนต์ - เฉพาะ
แอปพลิเคชั่นบางตัวไม่สนใจตัวแปรสภาพแวดล้อมและ / หรือทำงานเป็นบริการก่อนที่จะสามารถตั้งค่าตัวแปร (เช่นเดเบียนapt
)
แอปพลิเคชันเหล่านี้จะต้องมีการกำหนดค่าพิเศษ (เช่น/etc/apt.conf
)
HTTPS Proxying - เชื่อมต่อ
HTTPS proxying ได้รับการสนับสนุนอย่างเต็มที่จากการออกแบบ มันใช้วิธีพิเศษ "เชื่อมต่อ" ซึ่งจะสร้างช่องทางบางอย่างระหว่างเบราว์เซอร์และพร็อกซี
Dunno มากเกี่ยวกับสิ่งนั้น แต่ฉันไม่เคยมีปัญหากับมันในปี มันใช้งานได้
HTTPS กรณีพิเศษ - พร็อกซีโปร่งใส
หมายเหตุเกี่ยวกับพร็อกซีโปร่งใส (เช่นพร็อกซีถูกซ่อนและขัดขวางการร้องขอของลูกค้า ala. man-in-the-middle)
พร็อกซีที่โปร่งใสกำลังทำลาย HTTPS ลูกค้าไม่ทราบว่ามีพร็อกซีและไม่มีเหตุผลที่จะใช้วิธีการเชื่อมต่อแบบพิเศษ
ไคลเอ็นต์พยายามเชื่อมต่อ HTTPS โดยตรง ... ที่ถูกสกัดกั้น ตรวจพบการสกัดกั้นและเกิดข้อผิดพลาดทั่วทั้งสถานที่ (HTTPS มีไว้เพื่อตรวจจับการจู่โจมแบบ Man-in-He-Middle)
รายการที่อนุญาตของโดเมนและ CDN
ปลาหมึกและบัญชีขาวอนุญาตพิเศษรองรับปลาหมึก อย่างไรก็ตามมันถูกผูกไว้ที่จะล้มเหลวในรูปแบบที่ไม่คาดคิดเป็นครั้งคราว
เว็บไซต์ที่ทันสมัยสามารถมีการเปลี่ยนเส้นทางโดเมนและ CDN ได้ทุกประเภท สิ่งนี้จะทำลาย ACL เมื่อผู้คนไม่ไปไกลเกินกว่าจะเก็บทุกอย่างไว้ในโดเมนเดียว
บางครั้งจะมีตัวติดตั้งหรือแพ็คเกจที่ต้องการโทรหา homeship หรือเรียกใช้การอ้างอิงภายนอกก่อนที่จะทำงาน มันจะล้มเหลวทุกครั้งและไม่มีอะไรที่คุณสามารถทำได้
เก็บเอาไว้
ไฟล์การกำหนดค่าที่ให้ไว้จะปิดใช้งานการแคชทุกรูปแบบ ปลอดภัยกว่าดีกว่าขออภัย
โดยส่วนตัวฉันใช้งานในระบบคลาวด์ในขณะนี้อินสแตนซ์ทั้งหมดมีการเชื่อมต่ออย่างน้อย 100 Mbps และผู้ให้บริการใช้ repos ของตัวเองสำหรับสิ่งที่เป็นที่นิยม (เช่น Debian) ซึ่งถูกค้นพบโดยอัตโนมัติ นั่นทำให้แบนด์วิดท์เป็นสินค้าที่ฉันไม่สามารถใส่ใจได้
ฉันต้องการปิดใช้งานการแคชโดยสิ้นเชิงมากกว่าประสบการณ์ข้อบกพร่องแคชเดียวที่จะละลายสมองของฉันในการแก้ไขปัญหา ทุกคนบนอินเทอร์เน็ตไม่สามารถรับส่วนหัวแคชได้
ไม่ใช่ว่าทุกสภาพแวดล้อมจะมีข้อกำหนดเหมือนกัน คุณสามารถไปได้ไกลกว่านั้นและกำหนดค่าการแคชได้
ไม่เคยต้องการการรับรองความถูกต้องบนพร็อกซี
มีตัวเลือกที่ต้องใช้การตรวจสอบรหัสผ่านจากลูกค้าซึ่งโดยปกติจะใช้บัญชี LDAP ของพวกเขา มันจะทำลายทุกเบราว์เซอร์และเครื่องมือบรรทัดคำสั่งทุกอันในจักรวาล
หากคุณต้องการทำการรับรองความถูกต้องบนพร็อกซีอย่า
หากฝ่ายบริหารต้องการการพิสูจน์ตัวตนให้อธิบายว่ามันเป็นไปไม่ได้
หากคุณเป็นนักพัฒนาซอฟต์แวร์และคุณเพิ่งเข้าร่วม บริษัท ที่บล็อกอินเทอร์เน็ตโดยตรงและบังคับใช้การรับรองความถูกต้องของพร็อกซี RUN Away ในขณะที่คุณทำได้
ข้อสรุป
เราผ่านการตั้งค่าทั่วไปข้อผิดพลาดทั่วไปและสิ่งที่เราต้องรู้เกี่ยวกับการมอบฉันทะ
บทเรียนได้เรียนรู้:
- มีซอฟต์แวร์โอเพนซอร์ซที่ดีสำหรับพร็อกซี่ (ปลาหมึก)
- ง่ายและสะดวกในการกำหนดค่า (ไฟล์สั้น ๆ ไฟล์เดียว)
- มาตรการรักษาความปลอดภัย (ไม่บังคับ) ทั้งหมดมีการแลกเปลี่ยน
- ตัวเลือกขั้นสูงส่วนใหญ่จะทำลายสิ่งของและกลับมาหลอกหลอนคุณ
- พร็อกซีที่โปร่งใสกำลังทำลาย HTTPS
- การรับรองความถูกต้องของพร็อกซีนั้นชั่วร้าย
ตามปกติในการออกแบบโปรแกรมและระบบสิ่งสำคัญคือการจัดการข้อกำหนดและความคาดหวัง
ฉันขอแนะนำให้ยึดติดกับพื้นฐานเมื่อตั้งค่าพร็อกซี โดยทั่วไปพร็อกซีธรรมดาที่ไม่มีตัวกรองจะทำงานได้ดีและไม่มีปัญหาใด ๆ เพียงจำไว้ว่าให้ (อัตโนมัติ) กำหนดค่าไคลเอนต์