วิธีติดตั้งและกำหนดค่า Squid Proxy Server บน Linux
Squid น่าจะเป็นเซิร์ฟเวอร์แคชพร็อกซีโอเพ่นซอร์สที่เป็นที่รู้จักและได้รับความนิยมมากที่สุด พร็อกซีเซิร์ฟเวอร์ของปลาหมึกรองรับโปรโตคอลการแคชจำนวนมาก (ICP, HTCP, CARP, WCCP) และอนุญาตให้ใช้พร็อกซี HTTP, HTTPS, FTP และอื่น ๆ Squid สามารถปรับขนาดได้ง่าย คุณอาจใช้เพื่อกรองเนื้อหาหรือจำกัดแบนด์วิธต่อผู้ใช้หรือไซต์ รองรับการตรวจสอบผู้ใช้ (รวมถึงการตรวจสอบสิทธิ์ Active Directory LDAP) ในบทความนี้ เราจะแสดงวิธีการติดตั้ง Squid proxy server บน Linux
การติดตั้ง Squid Proxy Server บน Linux
ติดตั้งแพ็คเกจ Squid บนโฮสต์โดยใช้ตัวจัดการแพ็คเกจของคุณ ขึ้นอยู่กับเวอร์ชัน Linux ของคุณ ใช้หนึ่งในคำสั่งต่อไปนี้:
Oracle, Rocky Linux, CentOS, Fedora หรือ Red Hat Enterprise Linux:
# dnf install -y squidเซิร์ฟเวอร์องค์กร SUSE Linux:
# zypper install squidอูบุนตูหรือเดเบียน:
# apt-get install squid
หากคุณต้องการใช้การตรวจสอบผู้ใช้ใน Squid ให้ติดตั้งอีกหนึ่งแพ็คเกจ:
RHEL/CentOS/Fedora:
# dnf -y install httpd-toolsเดเบียน/อูบุนตู:
# sudo apt install apache2-utils
เปิดใช้งาน Squid ใน Linux โดยใช้ systemd เรียกใช้บริการ และตรวจสอบสถานะ:
# systemctl enable squid
# systemctl start squid
# systemctl status squidหากต้องการแสดงรายการตัวเลือกทั้งหมด Squid สร้างขึ้นด้วย:
# squid -vSquid Cache: Version 4.15
Service Name: squid
This binary uses OpenSSL 1.1.1k FIPS 25 Mar 2021. For legal restrictions on distribution see https://www.openssl.org/source/license.html
configure options: '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--libexecdir=/usr/lib64/squid' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--with-logdir=/var/log/squid' '--with-pidfile=/var/run/squid.pid' '--disable-dependency-tracking' '--enable-eui' '--enable-follow-x-forwarded-for' '--enable-auth' '--enable-auth-basic=DB,fake,getpwnam,LDAP,NCSA,PAM,POP3,RADIUS,SASL,SMB,SMB_LM' '--enable-auth-ntlm=SMB_LM,fake' '--enable-auth-digest=file,LDAP' '--enable-auth-negotiate=kerberos' '--enable-external-acl-helpers=LDAP_group,time_quota,session,unix_group,wbinfo_group,kerberos_ldap_group' '--enable-storeid-rewrite-helpers=file' '--enable-cache-digests' '--enable-cachemgr-hostname=localhost' '--enable-delay-pools' '--enable-epoll' '--enable-icap-client' '--enable-ident-lookups' '--enable-linux-netfilter' '--enable-removal-policies=heap,lru' '--enable-snmp' '--enable-ssl' '--enable-ssl-crtd' '--enable-storeio=aufs,diskd,ufs,rock' '--enable-diskio' '--enable-wccpv2' '--enable-esi' '--enable-ecap' '--with-aio' '--with-default-user=squid' '--with-dl' '--with-openssl' '--with-pthreads' '--disable-arch-native' '--disable-security-cert-validators' '--with-swapdir=/var/spool/squid' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' 'LDFLAGS=-Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld' 'CXXFLAGS=-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection' 'PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig'
การกำหนดค่า Squid Caching Proxy Server
โดยค่าเริ่มต้น Squid กำลังใช้ไฟล์คอนฟิกูเรชัน/etc/squid/squid.conf
ก่อนที่จะแก้ไขไฟล์ปรับแต่งต้นฉบับ ให้คัดลอกและทำให้เป็นแบบอ่านอย่างเดียว
$ sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.original
$ sudo chmod a-w /etc/squid/squid.conf.originalคุณสามารถกลับไปที่ไฟล์กำหนดค่าดั้งเดิมหรือใช้เป็นข้อมูลอ้างอิงคำสั่งได้ในภายหลัง
แก้ไขไฟล์การกำหนดค่าปลาหมึก:
$ sudo mcedit /etc/squid/squid.confที่จุดเริ่มต้นของไฟล์คอนฟิกูเรชัน Squid มีการระบุรายการควบคุมการเข้าถึงที่กำหนดที่อยู่ IP (เครือข่ายย่อย) ของไคลเอ็นต์ที่ได้รับอนุญาตให้เชื่อมต่อกับพร็อกซีเซิร์ฟเวอร์
ตัวอย่างเช่น คุณต้องการอนุญาตการเข้าถึงเฉพาะไคลเอนต์จากเครือข่ายท้องถิ่นของคุณ เพิ่มคำสั่งต่อไปนี้:
acl localnet src 192.168.50.0/24คุณสามารถแสดงความคิดเห็นบรรทัด acl localnet อื่นๆ
คำสั่งอนุญาตการเข้าถึงสำหรับเครือข่ายนี้กำหนดไว้ด้านล่างในไฟล์การกำหนดค่า:
http_access allow localnetตามค่าเริ่มต้น Squid จะยอมรับการเชื่อมต่อของผู้ใช้บนพอร์ต TCP/3128 คุณสามารถเปลี่ยนหมายเลขพอร์ตใน http_port ฉันจะเปลี่ยนพอร์ตการฟังของปลาหมึกเป็น 4555:
http_port 4555หากคุณต้องการใช้พร็อกซีเซิร์ฟเวอร์สำหรับการแคช ให้กำหนดค่าไดเร็กทอรีแคช:
cache_dir ufs /var/spool/squid 5120 32 25620480- คือขนาดแคชในหน่วย MB
32- คือจำนวนไดเร็กทอรีระดับแรกสำหรับแคช
256เป็นไดเร็กทอรีระดับที่สอง
หากต้องการสร้างโครงสร้างโฟลเดอร์สำหรับแคชของปลาหมึกบนดิสก์ ให้รันคำสั่งด้านล่าง:
$ squid -zในการตรวจสอบสิทธิ์ผู้ใช้ใน Squid เราจะใช้การตรวจสอบสิทธิ์ขั้นพื้นฐานอย่างง่าย ก่อนอื่น สร้างไฟล์เพื่อเก็บชื่อผู้ใช้และรหัสผ่าน:
$ sudo touch /etc/squid/passwd && sudo chown squid /etc/squid/passwdหากต้องการเพิ่มผู้ใช้ใหม่ให้กับไฟล์ ให้รันคำสั่งนี้:
$ sudo htpasswd -c /etc/squid/passwd username1เมื่อเพิ่มผู้ใช้รายถัดไป คุณไม่จำเป็นต้องใช้ตัวเลือก -c
จากนั้นเพิ่มบรรทัดต่อไปนี้ที่ส่วนต้นของไฟล์ squid.conf:
# use basic auth and password file
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
# the number of concurrent connections
auth_param basic children 5
auth_param basic realm Squid Basic Authentication
# session length without re-entering login and password
auth_param basic credentialsttl 8 hours
auth_param basic casesensitive off
acl auth_users proxy_auth REQUIRED
http_access allow auth_usersLinux distros ที่แตกต่างกันอาจมีเส้นทางที่แตกต่างกันไปยังไฟล์ basic_ncsa_auth:
/usr/lib64/squid/basic_ncsa_auth (Oracle, Rocky Linux, RHEL, CentOS)
/usr/lib/squid/basic_ncsa_auth (Debian, Ubuntu, Kali Linux)
คุณสามารถใช้การรับรองความถูกต้อง AD โดยใช้แพคเกจการรับรองความถูกต้องพื้นฐาน:
auth_param basic program /usr/lib64/squid/basic_ldap_auth -R -b "dc=a-d,dc=com" -D "squid_srv@a-d.site " -w "<user password>" -f "sAMAccountName=%s" <AD domain controller IP address>ข้อเสียของการรับรองความถูกต้องพื้นฐานคือรหัสผ่านจะถูกส่งเป็นข้อความที่เข้ารหัสด้วย Base64 (สามารถถอดรหัสได้ง่าย ดูตัวอย่างในบทความ ส่งอีเมลโดยใช้ telnet พร้อมการตรวจสอบสิทธิ์ SMTP) ดังนั้นจึงปลอดภัยกว่าที่จะใช้การพิสูจน์ตัวตน Kerberos Active Directory ใน Squid หากคุณไม่มี AD คุณสามารถกำหนดค่าการรับรองความถูกต้อง HTTP Digest ใน Squid แต่สิ่งนี้อยู่นอกเหนือขอบเขตของบทความนี้
กฎการอนุญาตและการปฏิเสธถูกกำหนดโดยใช้คำสั่ง http_access ที่ส่วนท้ายของไฟล์การกำหนดค่าของปลาหมึก ตัวอย่างเช่น เพื่ออนุญาตการเข้าถึงสำหรับผู้ใช้ที่ผ่านการตรวจสอบแล้วเท่านั้น:
http_access allow localhost
http_access allow authenticated
http_access deny allSquid ช่วยให้คุณสามารถบล็อกเว็บไซต์เฉพาะได้ สร้างไฟล์ที่มีรายชื่อไซต์ที่ถูกแบน:
$ sudo vi /etc/squid/blocked_sitesเพิ่มรายชื่อเว็บไซต์ที่คุณต้องการปฏิเสธการเข้าถึง:
facebook.com
twitter.com
instagram.comจากนั้นเพิ่มบรรทัดต่อไปนี้ในไฟล์คอนฟิกูเรชันของปลาหมึก:
acl blocked_sites dstdomain "/etc/squid/blocked_sites"
http_access deny blocked_sitesหลังจากทำการเปลี่ยนแปลงไฟล์คอนฟิกูเรชัน Squid ให้ตรวจสอบข้อผิดพลาดทางไวยากรณ์ในไฟล์:
$ sudo squid -k parseหากไม่มีข้อผิดพลาด คุณสามารถใช้ตัวเลือกการกำหนดค่าปลาหมึกใหม่ (คุณไม่จำเป็นต้องรีสตาร์ท daemon):
$ sudo squid -k reconfigureอนุญาตการเชื่อมต่อกับพอร์ตพร็อกซีเซิร์ฟเวอร์ในไฟร์วอลล์ของคุณ (ในตัวอย่างของเรา มันคือ TCP 4555) หากคุณใช้ firewalld ให้เพิ่มกฎการอนุญาตดังต่อไปนี้:
# firewall-cmd --zone=public --add-port=4555/tcp
# firewall-cmd --reloadหากเซิร์ฟเวอร์ Linux ของคุณโฮสต์โดยผู้ให้บริการภายนอก (AWS, Azure, Oracle Cloud ฯลฯ) อย่าลืมเพิ่มกฎการอนุญาตสำหรับพอร์ต TCP/4555 ไปยังกลุ่มความปลอดภัยที่เกี่ยวข้อง
ตรวจสอบว่า Squid กำลังฟังพอร์ตที่ระบุในคำสั่ง http_port:
$ netstat -tulnpเมื่อใช้ curl คุณสามารถตรวจสอบความพร้อมใช้งานของพร็อกซีเซิร์ฟเวอร์ของปลาหมึก:
$ curl -x http://xx.xx.xx.xx:4555 -L http://google.comถ้า
authentication required/ Access Denied ปรากฏข้อผิดพลาด ส่งชื่อผู้ใช้และรหัสผ่านเพื่อเข้าใช้ปลาหมึก:
$ curl -x http://xx.xx.xx.xx:4555 --proxy-user proxyuser1:NDMk23C3jvm -I http://google.comหากต้องการตรวจสอบบันทึกของ Squid ตามเวลาจริง ให้ใช้คำสั่ง:
$ sudo tail -f /var/log/squid/access.logหากเบราว์เซอร์ของคุณแสดงข้อผิดพลาด:
The proxy server is refusing connectionsและมี
TCP_DENIED/403 4041 CONNECTใน access.log ตรวจสอบ ACL ของคุณ
หากผู้ใช้ได้รับการพิสูจน์ตัวตนสำเร็จ บันทึกของ Squid จะมีบรรทัด
TCP_TUNNEL/200 39 CONNECT a-d.site:80 proxyusername HIER_DIRECT/xx.xx.xx.xxหรือ
TCP_MISS/200.
ยังคงต้องตั้งค่าพร็อกซีเซิร์ฟเวอร์ในเบราว์เซอร์บนคอมพิวเตอร์ของผู้ใช้ ตั้งค่าที่อยู่ IP (ชื่อ) ของโฮสต์ Squid และพอร์ตในการตั้งค่าเบราว์เซอร์ คุณกำหนดการตั้งค่าพร็อกซีบนคอมพิวเตอร์ที่ใช้ Windows ผ่าน GPO




