วิธีสร้างพร็อกซี HTTP โดยใช้ Squid บน CentOS 7/8
เว็บพรอกซีมีมาระยะหนึ่งแล้วและมีผู้ใช้หลายล้านคนทั่วโลกใช้งาน สิ่งเหล่านี้มีวัตถุประสงค์ที่หลากหลาย โดยส่วนใหญ่จะเป็นการไม่เปิดเผยตัวตนทางออนไลน์ แต่มีวิธีอื่นที่คุณสามารถใช้ประโยชน์จากเว็บพรอกซีได้ นี่คือแนวคิดบางส่วน:
- การไม่เปิดเผยตัวตนออนไลน์
- ปรับปรุงความปลอดภัยออนไลน์
- ปรับปรุงเวลาในการโหลด
- บล็อกการรับส่งข้อมูลที่เป็นอันตราย
- บันทึกกิจกรรมออนไลน์ของคุณ
- เพื่อหลีกเลี่ยงข้อจำกัดในระดับภูมิภาค
- ในบางกรณีสามารถลดการใช้แบนด์วิธได้
พร็อกซีเซิร์ฟเวอร์ทำงานอย่างไร
พร็อกซีเซิร์ฟเวอร์คือคอมพิวเตอร์ที่ใช้เป็นตัวกลางระหว่างไคลเอนต์และเซิร์ฟเวอร์อื่น ๆ ที่ไคลเอนต์อาจร้องขอทรัพยากร ตัวอย่างง่ายๆ คือ เมื่อลูกค้าส่งคำขอออนไลน์ (เช่น ต้องการเปิดหน้าเว็บ) ไคลเอ็นต์จะเชื่อมต่อกับพร็อกซีเซิร์ฟเวอร์ก่อน
จากนั้นพร็อกซีเซิร์ฟเวอร์จะตรวจสอบดิสก์แคชในเครื่อง และหากพบข้อมูลในนั้น ก็จะส่งคืนข้อมูลไปยังไคลเอนต์ หากไม่ได้แคช ก็จะทำการร้องขอในนามของไคลเอนต์โดยใช้ที่อยู่ IP ของพร็อกซี (แตกต่างจาก ลูกค้า) จากนั้นส่งคืนข้อมูลไปยังไคลเอนต์ พร็อกซีเซิร์ฟเวอร์จะพยายามแคชข้อมูลใหม่และจะใช้สำหรับการร้องขอในอนาคตที่ทำกับเซิร์ฟเวอร์เดียวกัน
Squid Proxy คืออะไร
Squid เป็นเว็บพรอกซีที่ใช้กับองค์กรที่หลากหลายของฉัน มักใช้เป็นพร็อกซีแคชและปรับปรุงเวลาตอบสนองและลดการใช้แบนด์วิดท์
สำหรับวัตถุประสงค์ของบทความนี้ ฉันจะติดตั้ง Squid บน Linode CentOS 7 VPS และใช้เป็นพร็อกซีเซิร์ฟเวอร์ HTTP
วิธีการติดตั้ง Squid บน CentOS 7/8
ก่อนที่เราจะเริ่มต้น คุณควรทราบว่า Squid ไม่มีข้อกำหนดขั้นต่ำ แต่ปริมาณการใช้ RAM อาจแตกต่างกันไป ขึ้นอยู่กับไคลเอนต์ที่เรียกดูอินเทอร์เน็ตผ่านพร็อกซีเซิร์ฟเวอร์
Squid รวมอยู่ในพื้นที่เก็บข้อมูลฐาน ดังนั้นการติดตั้งจึงง่ายและตรงไปตรงมา ก่อนที่จะทำการติดตั้ง ตรวจสอบให้แน่ใจว่าแพ็คเกจของคุณเป็นเวอร์ชันล่าสุดโดยการรัน
yum -y update
ดำเนินการต่อโดยการติดตั้ง squid เริ่มต้นและเปิดใช้งานเมื่อเริ่มต้นระบบโดยใช้คำสั่งต่อไปนี้
yum -y install squid
systemctl start squid
systemctl enable squid
ณ จุดนี้ เว็บพรอกซี Squid ของคุณควรจะทำงานอยู่แล้ว และคุณสามารถตรวจสอบสถานะของบริการได้
systemctl status squid
ผลลัพธ์ตัวอย่าง
● squid.service - Squid caching proxy
Loaded: loaded (/usr/lib/systemd/system/squid.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2018-09-20 10:07:23 UTC; 5min ago
Main PID: 2005 (squid)
CGroup: /system.slice/squid.service
├─2005 /usr/sbin/squid -f /etc/squid/squid.conf
├─2007 (squid-1) -f /etc/squid/squid.conf
└─2008 (logfile-daemon) /var/log/squid/access.log
Sep 20 10:07:23 tecmint systemd[1]: Starting Squid caching proxy...
Sep 20 10:07:23 tecmint squid[2005]: Squid Parent: will start 1 kids
Sep 20 10:07:23 tecmint squid[2005]: Squid Parent: (squid-1) process 2007 started
Sep 20 10:07:23 tecmint systemd[1]: Started Squid caching proxy.
ต่อไปนี้คือตำแหน่งไฟล์สำคัญบางส่วนที่คุณควรทราบ:
- ไฟล์การกำหนดค่า Squid: /etc/squid/squid.conf
- บันทึกการเข้าถึง Squid: /var/log/squid/access.log
- บันทึกแคช Squid: /var/log/squid/cache.log
ไฟล์การกำหนดค่า squid.conf
ขั้นต่ำ (ไม่มีความคิดเห็น) มีลักษณะดังนี้:
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
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 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localnet
http_access allow localhost
http_access deny all
http_port 3128
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
การกำหนดค่า Squid เป็น HTTP Proxy
ที่นี่ เราจะแสดงวิธีกำหนดค่า squid เป็นพร็อกซี HTTP โดยใช้เฉพาะที่อยู่ IP ไคลเอนต์สำหรับการตรวจสอบสิทธิ์
เพิ่ม Squid ACL
หากคุณต้องการอนุญาตให้ที่อยู่ IP เข้าถึงเว็บผ่านพร็อกซีเซิร์ฟเวอร์ใหม่ของคุณ คุณจะต้องเพิ่มบรรทัด ACL (รายการควบคุมการเข้าถึง) ใหม่ในไฟล์การกำหนดค่า .
vim /etc/squid/squid.conf
บรรทัดที่คุณควรเพิ่มคือ:
acl localnet src XX.XX.XX.XX
โดยที่ XX.XX.XX.XX คือที่อยู่ IP ของลูกค้าจริงที่คุณต้องการเพิ่ม ควรเพิ่มบรรทัดที่จุดเริ่มต้นของไฟล์ซึ่งมีการกำหนด ACL แนวทางปฏิบัติที่ดีในการเพิ่มความคิดเห็นถัดจาก ACL ซึ่งจะอธิบายว่าใครใช้ที่อยู่ IP นี้
สิ่งสำคัญคือต้องทราบว่าหาก Squid ตั้งอยู่นอกเครือข่ายท้องถิ่นของคุณ คุณควรเพิ่มที่อยู่ IP สาธารณะของไคลเอนต์
คุณจะต้องรีสตาร์ท Squid เพื่อให้การเปลี่ยนแปลงใหม่มีผล
systemctl restart squid
เปิดพอร์ตพร็อกซีปลาหมึก
ดังที่คุณอาจเห็นในไฟล์กำหนดค่า อนุญาตให้เชื่อมต่อได้เฉพาะบางพอร์ตเท่านั้น คุณสามารถเพิ่มมากขึ้นได้โดยการแก้ไขไฟล์การกำหนดค่า
acl Safe_ports port XXX
โดยที่ XXX คือพอร์ตจริงที่คุณต้องการโหลด เป็นความคิดที่ดีอีกครั้งที่จะแสดงความคิดเห็นข้างๆ ซึ่งจะอธิบายว่าพอร์ตจะใช้ทำอะไร
เพื่อให้การเปลี่ยนแปลงมีผล คุณจะต้องรีสตาร์ท squid อีกครั้ง
systemctl restart squid
การตรวจสอบสิทธิ์ไคลเอ็นต์ Squid Proxy
คุณคงต้องการให้ผู้ใช้ของคุณตรวจสอบสิทธิ์ก่อนที่จะใช้พรอกซี เพื่อจุดประสงค์นั้น คุณสามารถเปิดใช้งานการรับรองความถูกต้อง HTTP พื้นฐานได้ กำหนดค่าได้ง่ายและรวดเร็ว
ขั้นแรก คุณจะต้องติดตั้ง httpd-tools
yum -y install httpd-tools
ตอนนี้เรามาสร้างไฟล์ที่จะจัดเก็บชื่อผู้ใช้สำหรับการตรวจสอบสิทธิ์ในภายหลัง Squid ทำงานพร้อมกับผู้ใช้ “squid ” ดังนั้นไฟล์ควรเป็นของผู้ใช้นั้น
touch /etc/squid/passwd
chown squid: /etc/squid/passwd
ตอนนี้เราจะสร้างผู้ใช้ใหม่ชื่อ “proxyclient ” และตั้งค่ารหัสผ่าน
htpasswd /etc/squid/passwd proxyclient
New password:
Re-type new password:
Adding password for user proxyclient
ตอนนี้เพื่อกำหนดค่าการรับรองความถูกต้องให้เปิดไฟล์กำหนดค่า
vim /etc/squid/squid.conf
หลังจากที่ ACL ของพอร์ตเพิ่มบรรทัดต่อไปนี้:
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Squid Basic Authentication
auth_param basic credentialsttl 2 hours
acl auth_users proxy_auth REQUIRED
http_access allow auth_users
บันทึกไฟล์และรีสตาร์ท squid เพื่อให้การเปลี่ยนแปลงใหม่มีผล:
systemctl restart squid
บล็อกเว็บไซต์บน Squid Proxy
สุดท้ายนี้ เราจะสร้าง ACL สุดท้ายที่จะช่วยป้องกันเว็บไซต์ที่ไม่ต้องการ ขั้นแรก สร้างไฟล์ที่จะจัดเก็บไซต์ที่อยู่ในบัญชีดำ
touch /etc/squid/blacklisted_sites.acl
คุณสามารถเพิ่มโดเมนบางโดเมนที่คุณต้องการบล็อกได้ ตัวอย่างเช่น:
.badsite1.com
.badsite2.com
จุดที่ดำเนินการต่อจะบอก squid ให้บล็อกการอ้างอิงทั้งหมดไปยังไซต์นั้น รวมถึง www.badsite1, subsite.badsite1.com, ฯลฯ
ตอนนี้เปิดไฟล์กำหนดค่าของ Squid
vim /etc/squid/squid.conf
หลังจาก ACL ของพอร์ตเพิ่มสองบรรทัดต่อไปนี้:
acl bad_urls dstdomain "/etc/squid/blacklisted_sites.acl"
http_access deny bad_urls
ตอนนี้บันทึกไฟล์และรีสตาร์ท squid:
systemctl restart squid
เมื่อทุกอย่างกำหนดค่าอย่างถูกต้องแล้ว ตอนนี้คุณสามารถกำหนดค่าเบราว์เซอร์ไคลเอ็นต์ในเครื่องของคุณหรือการตั้งค่าเครือข่ายของระบบปฏิบัติการเพื่อใช้พร็อกซี HTTP ของปลาหมึกได้
บทสรุป
ในบทช่วยสอนนี้ คุณได้เรียนรู้วิธีการติดตั้ง รักษาความปลอดภัย และกำหนดค่าเซิร์ฟเวอร์ Squid HTTP Proxy ด้วยตัวคุณเอง ด้วยข้อมูลที่คุณได้รับ คุณสามารถเพิ่มตัวกรองพื้นฐานสำหรับการรับส่งข้อมูลขาเข้าและขาออกผ่าน Squid ได้แล้ว
หากคุณต้องการที่จะไปให้ไกลกว่านี้ คุณสามารถกำหนดค่า squid ให้บล็อกบางเว็บไซต์ในช่วงเวลาทำงานเพื่อป้องกันการรบกวน หากคุณมีคำถามหรือความคิดเห็นใด ๆ โปรดโพสต์ไว้ในส่วนความคิดเห็นด้านล่าง