วัสดุอื่น ๆ ในหมวด Linux การแคช Squid พร็อกซีเซิร์ฟเวอร์โปร่งใสที่ไม่เปิดเผยตัวตน

บทความนี้เป็นตัวอย่าง การตั้งค่าอย่างรวดเร็วแคชพร็อกซีเซิร์ฟเวอร์ Squid เข้ามา ลินุกซ์เดเบียน 6. ผลลัพธ์ของการตั้งค่าจะสามารถเข้าถึงอินเทอร์เน็ตผ่านทาง เซิร์ฟเวอร์นี้ผ่านโปรโตคอล: http, https และ ftp

ขอจองด่วนครับว่าเซิฟเวอร์ไม่ได้ เครื่องป้องกันไฟกระชากและอาจเสี่ยงต่อ การโจมตีเครือข่าย.
เซิร์ฟเวอร์ได้รับการกำหนดค่าบนระบบปฏิบัติการ Linux Debian 6 คำสั่งทั้งหมดที่ระบุด้านล่างจะต้องดำเนินการด้วยสิทธิ์ผู้ใช้ระดับสูง (รูท)

คำเตือนสำคัญทันที: การอนุญาตและพร็อกซีแบบโปร่งใสเข้ากันไม่ได้! คุณจะต้องเลือกสิ่งหนึ่ง คำเตือนที่สอง: การอนุญาตผ่านพร็อกซีจะจำกัดการเข้าถึงอินเทอร์เน็ตผ่านโปรโตคอล HTTP เท่านั้น โปรโตคอลอื่นๆ: FTP, SMTP, POP3 และอื่นๆ จะยังคงทำงานอย่างเงียบๆ ผ่าน NAT แม้ว่าใน องค์กรขนาดเล็กสิ่งนี้ไม่สำคัญนัก สิ่งที่ถูกใช้มากที่สุด (และถูกละเมิด) นั้นแม่นยำมาก โปรโตคอล HTTPและงานหนึ่งของผู้ดูแลระบบคือการจำกัดการเข้าถึงอินเทอร์เน็ตของพนักงานผ่านเบราว์เซอร์

หากคุณใช้ Apteture และดาวน์โหลดแพ็คเกจจากเครือข่าย ฉันแนะนำให้อัปเดตรายการแพ็คเกจปัจจุบันก่อนการติดตั้ง:

#ฉลาด-รับอัปเดต

มาเริ่มการติดตั้ง Squid กัน:

# apt-get ติดตั้ง squid3

หลังจากการติดตั้งเสร็จสมบูรณ์ เราจะเริ่มแก้ไขไฟล์การกำหนดค่าปลาหมึก ฉันไม่รู้เกี่ยวกับคุณโดยส่วนตัวแล้วฉันพบว่ามันสะดวกกว่าเมื่อไม่มีอะไรฟุ่มเฟือยในไฟล์กำหนดค่านั่นคือมีเพียงพารามิเตอร์การกำหนดค่าเท่านั้นที่มีอยู่ ในการดำเนินการนี้ ให้สำรองข้อมูลการกำหนดค่าปลาหมึกดั้งเดิม (เพื่อให้มีที่สำหรับค้นหาคำอธิบายของพารามิเตอร์ทั้งหมด):

cp /etc/squid/squid.conf /etc/squid/squid.conf.Original

และแยกทุกสิ่งที่ไม่ได้ใส่เครื่องหมายความคิดเห็นออกจากการกำหนดค่าดั้งเดิม:

cat /etc/squid/squid.conf.Original | grep -v "^\(#\|$\)" > /etc/squid/squid.conf

ด้วยเหตุนี้ เราจะมีการกำหนดค่าเริ่มต้นโดยไม่มีสิ่งพิเศษใดๆ แต่ฉันยังคงแนะนำอย่างยิ่งให้คุณดูการกำหนดค่าดั้งเดิมและอ่านตามเวลาว่างของคุณ - มีสิ่งที่น่าสนใจมากมายอยู่ที่นั่น!

ในที่สุดเรามาเริ่มแก้ไขกันดีกว่า:

นาโน /etc/squid/squid.conf

หลังการติดตั้งคุณต้องมี ปรับแต่งเล็ก ๆ- เปิดไฟล์การกำหนดค่า Squid ในตัวแก้ไข ซึ่งควรอยู่ใน /etc/squid/squid.conf ในไฟล์นี้เราจะพบบรรทัด:

Acl localnet src 10.0.0.0/8
acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16

บรรทัดเหล่านี้จำเป็นต้องใส่ความคิดเห็น และเพิ่มบรรทัดของคุณเองด้วยพารามิเตอร์ของคุณเอง เครือข่ายท้องถิ่น- มันควรมีลักษณะเช่นนี้:

# acl localnet src 10.0.0.0/8
# acl localnet src 172.16.0.0/12
# acl localnet src 192.168.0.0/16
acl localnet src 192.168.1.0/24 # เป็นเจ้าของเครือข่ายท้องถิ่น

ในบรรทัดสุดท้าย แทนที่จะเป็น 192.168.1.0/24 คุณต้องแทนที่พารามิเตอร์ของเครือข่ายของคุณ

ใต้ความคิดเห็น # TAG: http_access คุณต้องค้นหาบรรทัด:

Http_access อนุญาต localhost
หรือ
http_access อนุญาตให้ผู้จัดการ localhost

ทันทีหลังจากบรรทัดนี้ให้เพิ่มบรรทัด:

Http_access อนุญาต localnet
cache_dir ufs /var/cache/squid 2048 16 256
mkdir -p /var/cache/squid
chmod 755 -R /var/cache/squid

จึงทำให้สามารถเข้าถึงเครือข่ายไปยังคอมพิวเตอร์ทุกเครื่องบนเครือข่ายท้องถิ่น หลังจากนี้ ให้บันทึกไฟล์ squid.conf และรีสตาร์ทเซิร์ฟเวอร์ Squid:

# /etc/init.d/squid รีสตาร์ท

หากหลังจากรีสตาร์ท squid คุณได้รับข้อผิดพลาด (คำเตือน cache_mem มีขนาดใหญ่กว่าพื้นที่แคชดิสก์ทั้งหมด!) เพียงแค่ลดค่าของพารามิเตอร์ cache_mem 8 MB ฉันตั้งค่าเป็น 32

หากคุณทำการเปลี่ยนแปลงไฟล์การกำหนดค่าเนื่องจากข้อผิดพลาด Squid ควรรีบูตได้สำเร็จ หากเกิดข้อผิดพลาด คุณสามารถดูสาเหตุที่เกิดขึ้นได้ในไฟล์บันทึก: /var/log/squid/cache.log
การกำหนดค่าเบราว์เซอร์ให้ทำงานผ่านพร็อกซีเซิร์ฟเวอร์

ใน ตัวเลือกนี้การตั้งค่า เซิร์ฟเวอร์ของเราไม่สามารถกำหนดเส้นทางคำขอเครือข่ายไปยังพอร์ตพร็อกซีเซิร์ฟเวอร์ได้โดยอัตโนมัติ ดังนั้นเบราว์เซอร์จึงต้องระบุที่อยู่เซิร์ฟเวอร์ของเราอย่างชัดเจน

สิ่งสำคัญคือต้องมีพร็อกซีเซิร์ฟเวอร์บนเครือข่ายท้องถิ่น ที่อยู่ IP แบบคงที่- สมมติว่าของคุณคือ 192.168.1.1 เช่น เพื่อกำหนดค่า อินเทอร์เน็ตเอ็กซ์พลอเรอร์คุณต้องเปิดเครื่องมือ-ตัวเลือกอินเทอร์เน็ต-การเชื่อมต่อ-การตั้งค่าเครือข่าย ในหน้าต่างที่เปิดขึ้น ให้เลือกช่องใช้พร็อกซีเซิร์ฟเวอร์สำหรับ การเชื่อมต่อในท้องถิ่น- ทำเครื่องหมายที่ช่อง ห้ามใช้พร็อกซีเซิร์ฟเวอร์สำหรับ ที่อยู่ในท้องถิ่น- ในฟิลด์ที่อยู่ ให้ป้อนที่อยู่ IP ของพร็อกซีเซิร์ฟเวอร์ของเรา: 192.168.1.1 ในช่องพอร์ต ให้ป้อนพอร์ตเริ่มต้นที่ใช้โดย Squid: 3128

หลังจากการตั้งค่าเหล่านี้ เบราว์เซอร์ของคุณจะเข้าถึงเครือข่ายผ่านพร็อกซีเซิร์ฟเวอร์ใหม่ของเรา ในเบราว์เซอร์อื่นๆ การตั้งค่าจะคล้ายกับการตั้งค่าด้านบน ไมโครซอฟต์อินเทอร์เน็ตนักสำรวจ

พอร์ตพร็อกซีเซิร์ฟเวอร์สามารถเปลี่ยนแปลงได้ตามดุลยพินิจของคุณในไฟล์ /etc/squid/squid.conf มันระบุไว้ในบรรทัด:

http_port 3128 โปร่งใส

บทสรุป
การติดตั้งและกำหนดค่าพร็อกซีเซิร์ฟเวอร์แคชโดยใช้ Squid เป็นเพียงขั้นตอนแรกในการสร้างเกตเวย์ที่มีประสิทธิผลไปยังอินเทอร์เน็ต อีกไม่นานฉันจะบอกคุณถึงวิธีการตั้งค่า "Transparent Proxy Server" ไฟร์วอลล์ และวิธีเก็บสถิติการเข้าชมเว็บไซต์โดยผู้ใช้เครือข่ายท้องถิ่น

การกำหนดค่า iptables อย่างถูกต้องเป็นสิ่งสำคัญมาก ตัวเลือกที่สองต่ำกว่าเล็กน้อยฉันชอบมันมากกว่า

ในขั้นตอนนี้ ฉันขอแนะนำให้คุณสร้างสคริปต์การตั้งค่า เนื่องจากจะมีประโยชน์ในฐานะเครื่องมือสากล1 # vim ./setiptables.sh

#!/bin/bash
แลน=$1
WAN=$2
ไอพี=$3
GW=$4
iptables -t nat -A การเตรียมการล่วงหน้า -i $LAN -p tcp --dport 80 -j DNAT --to $IP:3128
iptables -t nat -A การเตรียมการล่วงหน้า -i $WAN -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A การโพสต์ -j MASQUERADE
iptables -A ส่งต่อ -i $WAN -o $LAN -s $GW/24 -p tcp -m multiport --dport 443,21,22 -j ยอมรับ
เสียงสะท้อน "net.ipv4.ip_forward = 1"> /etc/sysctl.conf
sysctl -w net.ipv4.ip_forward=1

เราได้ติดป้ายกำกับตัวแปร (เพื่อความสะดวก) 3 กฎสำหรับตาราง NAT และ 1 กฎสำหรับ FORWARD
เราใช้พอร์ต 443,21,22 เพื่อเลี่ยงผ่านพร็อกซีเซิร์ฟเวอร์
นอกจาก การตั้งค่า iptablesในสคริปต์นี้ เราเปิดใช้งานการส่งต่อแพ็คเก็ต
มารันกันดังนี้: 1

# sh ./setiptables.sh eth0 eth1 192.168.100.1 192.168.100.0

6) ตั้งค่าการโหลดอัตโนมัติของการตั้งค่า iptables
มาบันทึกการตั้งค่า iptables กัน

# mkdir -p /usr/local/iptables && iptables-save > /usr/local/iptables/session.ipt

เพิ่มคำสั่ง autostart ไปที่ /etc/rc.local (ฉันชอบ Perl แต่คำสั่งอื่นอาจแตกต่างกัน)

# perl -i -pe "พิมพ์" iptables-restore< /usr/local/iptables/session.ipt\n" if $. == 2" /etc/rc.local

นอกจากนี้อย่าลืมเกี่ยวกับการส่งต่อแพ็กเก็ต

# perl -i -pe "พิมพ์" sysctl -w net.ipv4.ip_forward=1\n" ถ้า $. == 3" /etc/rc.local

ตัวเลือกที่สองสำหรับการตั้งค่า iptables ไฟร์วอลล์

มาเปิดใช้งานการส่งต่อในระบบกันเถอะ ในไฟล์ /etc/sysctl.conf ให้ยกเลิกการใส่เครื่องหมายข้อคิดเห็นบรรทัด

net.ipv4.ip_forward=1

เร็วๆ นี้ ช่วงเวลาปัจจุบันเราได้รีเซ็ตการตั้งค่าไฟร์วอลล์ (iptables) เรียบร้อยแล้ว

การรีเซ็ตโซ่:

$ sudo iptables -F
$ sudo iptables -F -t nat
เราห้ามไม่ให้มีขาเข้าทั้งหมดและอนุญาตให้มีขาออกและส่งต่อทั้งหมด:
sudo iptables -P อินพุตลดลง
sudo iptables -P ยอมรับเอาต์พุต
sudo iptables -P ยอมรับไปข้างหน้า
เราอนุญาตให้คุณยอมรับการตอบสนองต่อการเชื่อมต่อที่สร้างไว้แล้ว:
sudo iptables -A อินพุต -m รัฐ -- รัฐที่เกี่ยวข้อง จัดตั้งขึ้น -j ยอมรับ
อนุญาตการรับส่งข้อมูลแบบย้อนกลับ:
sudo iptables -A INPUT -i lo -j ยอมรับ
เราอนุญาตการรับส่งข้อมูลทั้งหมดจากเรา เครือข่ายภายใน(ลองใช้ซับเน็ต 222):
sudo iptables -A INPUT -s 192.168.222.0/24 -i eth1 -j ยอมรับ
และรับประกันความโปร่งใส! เราเปลี่ยนเส้นทางการรับส่งข้อมูล http ขาออกทั้งหมด (ไปยังพอร์ต 80) ไปยังพอร์ตปลาหมึก 3128:
iptables -t nat -A การเตรียมการล่วงหน้า -s 192.168.222.0/24 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING -s 192.168.222.0/24 -o eth0 -j SNAT - ไปยังแหล่งที่มา 192.168.56.39

เราตรวจสอบอินเทอร์เน็ตบนไคลเอนต์ ฉันขอเตือนคุณว่าหากไม่จำเป็นต้องระบุพรอกซีคุณต้องตั้งค่าเกตเวย์!
อย่างไรก็ตาม หลังจากการรีบูตครั้งแรก เราจะเข้าใจว่าความพยายามทั้งหมดของเรานั้นไร้ผล
มาสอนพวกเขาถึงวิธีการเอาตัวรอดกันเถอะ!
ดังนั้น มาบันทึกทุกสิ่งที่เราทำที่นี่:

iptables-บันทึก > /etc/firewall.conf

เคล็ดลับนี้ใช้ไม่ได้ผลสำหรับฉันด้วย sudo (แม้ว่าในทางทฤษฎีแล้วควร...) ดังนั้นคุณสามารถทำได้โดยลงชื่อเข้าใช้รูทอย่างสมบูรณ์ (su) และรันคำสั่ง แต่ไม่มี sudo
ตอนนี้เรามาสร้างสคริปต์ที่บังคับให้ ifupdown ฟื้นคืนไฟร์วอลล์ของเรา:

นาโน /etc/network/if-up.d/00-iptables

ลองป้อนข้อมูลต่อไปนี้ลงไป:

#!/bin/sh
iptables-เรียกคืน< /etc/firewall.conf

มาตั้งค่าสิทธิ์ในการดำเนินการ:

chmod +x /etc/network/if-up.d/00-iptables

โดยทั่วไป การตั้งค่าพร็อกซีเซิร์ฟเวอร์แบบโปร่งใสเสร็จสมบูรณ์ แต่เพื่อให้สามารถอ่านบันทึกได้ เราจำเป็นต้องปิดใช้งานการสนับสนุน ipv6 (เนื่องจากอะแดปเตอร์ไม่ได้กำหนดค่า ipv6 บนอะแดปเตอร์ จะมีคำเตือนมากมาย) .

ปิดการใช้งาน IPv6 หากไม่มีใครใช้

ฉันแนะนำให้สร้างสคริปต์อีกครั้งเพื่อไม่ให้สับสน
นาโน ./ipv6disable.sh

#!/bin/bash
perl -i -pe "พิมพ์" alias net-pf-10 ipv6 off\n" ถ้า $. == 17" /etc/modprobe.d/aliases.conf
perl -i -pe "พิมพ์" alias net-pf-10 off\n" ถ้า $. == 18" /etc/modprobe.d/aliases.conf
perl -i -pe "พิมพ์" alias ipv6 off\n" ถ้า $. == 19" /etc/modprobe.d/aliases.conf
เสียงสะท้อน 1 | ที /proc/sys/net/ipv6/conf/all/disable_ipv6.tee
echo "บัญชีดำ ipv6" | ที -a /etc/modprobe.d/blacklist.conf
STR=$(cat /boot/grub/grub.cfg | sed -n "67p")
STR=$(STR)" ipv6.disable=1"
sed "67d" /boot/grub/grub.cfg > /boot/grub/grub.cfg.backup
cp /boot/grub/grub.cfg.backup /boot/grub/grub.cfg
sed -i 67i\ "$STR" /boot/grub/grub.cfg

ใน โครงร่างทั่วไปเกิดอะไรขึ้นในสคริปต์นี้:
ขั้นแรก ให้ปิดการใช้งานไฟ ipv6 ในโมดูลเคอร์เนล
ต่อไป เราระบุเครื่องหมายใน /proc เพื่อไม่ให้ใช้ ipv6
และในบรรทัดที่ 67 ของ /boot/grub/grub.cfg เราเพิ่มพารามิเตอร์ ipv6.disable=1
จำเป็นต้องมีกลไกที่มี tee และ sed เพื่อบันทึกการตั้งค่าใน /boot/grub/grub.cfg เนื่องจากอุปกรณ์ไม่ได้ถูกกำหนดโดย /dev/sd* และโดย UUID
แม้ว่าทุกอย่างจะสามารถทำให้เสร็จด้วยมือได้เสมอก็ตาม
ตอนนี้เราต้องแนบตัวป้องกันปลาหมึก
งานครึ่งหนึ่งเสร็จสิ้นแล้ว เหลือเพียงการติดตั้งแพ็คเกจ SquidGuard และกำหนดค่า หากต้องการติดตั้งให้เขียนลงในเทอร์มินัลจากด้านล่าง ผู้ใช้รูท (สิทธิ์รูทใน Debian GNU/Linux คุณสามารถรับมันได้ด้วยคำสั่ง su ใน Ubuntu เราเขียน sudo ก่อนคำสั่ง):

apt-get ติดตั้ง squidguard

หลังการติดตั้งให้ดาวน์โหลดคำสั่ง blacklists wget จากเทอร์มินัล (โปรดทราบ ขนาดไฟล์คือ 24 MB!):
wget -c my_blacklists.tar.gz

และแตกไฟล์ลงในไดเร็กทอรีที่ควรเก็บฐานข้อมูล SquidGuard (ต้องมีสิทธิ์ของผู้ดูแลระบบ):

tar zxvf my_blacklists.tar.gz -C /var/lib/squidguard/db

ผลจากการคลายแพ็ก ไดเร็กทอรี /var/lib/squidguard/db/my จะปรากฏขึ้น โดยมีไดเร็กทอรีย่อยจำนวนมากในหมวดหมู่ต่างๆ พร้อมรายการโดเมนและที่อยู่ของไซต์ที่ไม่ต้องการ เรารวบรวมรายการนี้โดยอิงจากบัญชีดำสามรายการที่ดาวน์โหลดจากเว็บไซต์ http://www.squidguard.org, http://www.shallalist.de และ http://www.urlblacklist.com ด้วยเหตุนี้ รายการของเราจึงมีไซต์มากกว่า 3 ล้านแห่ง

ตอนนี้คุณต้องกำหนดค่าการรวมกันของ Squid และ SquidGuard และเชื่อมต่อบัญชีดำกับพวกมัน เมื่อต้องการทำเช่นนี้ ให้เพิ่มไฟล์ squid.conf บรรทัดต่อไปนี้โดยการเปิดไฟล์ในตัวแก้ไขนาโนด้วยสิทธิ์ของผู้ดูแลระบบ:

นาโน /etc/squid/squid.conf

เพิ่มบรรทัดที่ท้ายไฟล์:

เปิดการเปลี่ยนเส้นทาง_บายพาส
เปลี่ยนเส้นทาง_โปรแกรม /usr/bin/squidGuard
เปลี่ยนเส้นทาง_เด็ก 1

mv /etc/squid/squidGuard.conf /etc/squid/squidGuard.conf_Original

ดาวน์โหลดไฟล์การกำหนดค่า squidGuard.conf จากเว็บไซต์ของเราโดยใช้คำสั่ง wget ในเทอร์มินัล:
wget -c squidGuard.conf

คัดลอกไปยังตำแหน่งของไฟล์เก่า (ด้วยสิทธิ์ผู้ดูแลระบบ):

cp squidGuard.conf /etc/squid/squidGuard.conf

หลังจากคัดลอกไฟล์การกำหนดค่า เราจะเริ่มต้นการแปลงบัญชีดำข้อความที่คุณดาวน์โหลดและแตกไฟล์เป็นรูปแบบฐานข้อมูล Berkeley DB (คำสั่งจะทำงานเป็นระยะเวลาหนึ่ง - คุณต้องรอให้เสร็จสิ้นโดยสมบูรณ์) โดยการรันคำสั่งจาก ผู้ดูแลระบบ:

squidGuard -d -C ทั้งหมด

หากทุกอย่างถูกต้องหลังจากคำสั่งเทอร์มินัลจะแสดงข้อความมากมายเกี่ยวกับการสร้างไฟล์ฐานข้อมูลใหม่และในตอนท้ายของซีรีส์คุณจะเห็นสิ่งนี้:

16-03-2555 12:51:53 squidGuard 1.4 เริ่มต้นแล้ว (1331887787.768)
16-03-2555 12:51:53 อัปเดต db เสร็จแล้ว
16-03-2555 12:51:53 squidGuard หยุดทำงานแล้ว (1331887913.657)

ความสำเร็จของการสร้างฐานข้อมูลบัญชีดำจะพูดอะไร? จากนั้นตั้งค่าสิทธิ์ของเซิร์ฟเวอร์ Squid ในไฟล์ฐานข้อมูลโดยรันคำสั่งด้วยสิทธิ์ของผู้ดูแลระบบ:

chown -R พร็อกซี: พร็อกซี /var/lib/squidguard/db/

และรีสตาร์ทเซิร์ฟเวอร์ Squid โดยทำงานใน Debian ในฐานะรูท:

/etc/init.d/squid3 รีสตาร์ท

หลังจากรีสตาร์ทแล้วผลลัพธ์ก็คือ การทำงานร่วมกัน Squid และ SquidGuard จะเปลี่ยนเส้นทางจากไซต์ที่ไม่ต้องการไปยังไซต์ คุณสามารถแทนที่ด้วยหน้าอื่นได้โดยการเปลี่ยนที่อยู่ บรรทัดสุดท้ายไฟล์การกำหนดค่า /etc/squid/squidGuard.conf

การเปลี่ยนแปลงรายการในรายการโดเมนและ URL
ตัวอย่าง. ถัดจากไฟล์ domains.db ในโฟลเดอร์ /var/lib/squiguard/db/direction ให้สร้างไฟล์ domains.diff เราป้อนบรรทัดหรือหลายบรรทัดลงไป หนึ่งบรรทัดสำหรับแต่ละรายการ:

เว็บไซต์ (ซึ่งหมายถึงการลบโดเมนนี้ออกจากฐานข้อมูล)
หรือ +sysadmin -komi.ru (ซึ่งหมายถึงเพิ่มโดเมนนี้ในฐานข้อมูล)

เราให้คำสั่ง:

(อัพเดตฐานข้อมูล db จากไฟล์ diff ในบันทึก squidguard คุณสามารถดูได้ว่ามีการเพิ่ม/ลบไปมากน้อยเพียงใด)

$ squid3 -k กำหนดค่าใหม่

(อ่านการตั้งค่าซ้ำโดยไม่ต้องรีสตาร์ท)
ไม่จำเป็นต้องลบไฟล์ domain.diff หรือลบรายการออกจากไฟล์ ไฟล์นี้จะมีประโยชน์ในระหว่างการอัพเดตฐานข้อมูลทั่วโลก และด้วยการอัพเดตหลายครั้ง ทำให้ไม่มีการบันทึกซ้ำซ้อนในฐานข้อมูล

คุณสามารถสร้างกฎการเปลี่ยนเส้นทางของคุณเองได้โดยเพิ่มหรือยกเว้นหมวดหมู่ของไซต์ที่ไม่ต้องการ น่าเสียดายที่ไม่สามารถได้รับการปกป้อง 100% เพราะ... เว็บไซต์ใหม่ที่มีเนื้อหาที่ไม่เหมาะสมปรากฏขึ้นอย่างต่อเนื่อง แม้ว่าคุณจะอัพเดตแบล็คลิสต์อยู่ตลอดเวลาก็ตาม หากคุณต้องการการป้องกันที่รัดกุม คุณสามารถกำหนดค่า SquidGuard ให้ทำงานกับรายการไซต์ที่อนุญาตสีขาวได้ โดยห้ามสิ่งอื่นใด - แต่จะมีชุดไซต์ที่จำกัดมาก

และเหลือเวลาอีกสักครู่! เรามาดูสถิติกันดีกว่าว่าใคร อะไร ที่ไหน และทำไม ตั้งชื่อซาร์ก

apt-get ติดตั้ง sarg

มันจะดึงแพ็คเกจมารวมกันทั้งหมด และไม่น่าแปลกใจเลยเพราะมันต้องมีเว็บเซิร์ฟเวอร์เพื่อแสดงผลลัพธ์

เราปรับแต่งการกำหนดค่า (/etc/squid/sarg.conf) ให้เหมาะกับตัวเราเอง นี่คือบรรทัดหลักที่ต้องใส่ใจ:

Access_log /var/log/squid/access.log
...
output_dir /var/www/squid-reports
...
ชุดอักขระ UTF-8

สร้างไดเร็กทอรีสุดท้ายหากไม่มีอยู่
เราเปิดตัว twill (คงจะดีไม่น้อยถ้าผลักมันเข้าไปใน cron ฉันจะไม่อธิบายที่นี่... ยัง)

ไชโย! เราเปลี่ยนจากภายในเครือข่ายมาสู่เซิร์ฟเวอร์ของเรา ชมรายงานได้ที่ http://IP_SERVER/squid-reports/
น้องๆทุกคนพร้อมแล้ว หากคุณมีคำถามใดๆ ถามได้เลย ฉันจะช่วยทุกวิถีทางที่ทำได้

ช่วงเวลาที่ดี ผู้อ่านที่รักและแขกรับเชิญ! ในบทความนี้ฉันจะเริ่มอธิบายงาน พร็อกซีเซิร์ฟเวอร์แคช SQUID- บทความนี้ส่วนใหญ่จะเป็นเนื้อหาเบื้องต้นและเชิงทฤษฎี

พร็อกซีเซิร์ฟเวอร์คืออะไร และอะไรคือปลาหมึก

ฉันจะเริ่มต้นด้วยพื้นฐาน ปลาหมึกเป็น พร็อกซีเซิร์ฟเวอร์แคชสำหรับ HTTP, FTP และโปรโตคอลอื่นๆ พร็อกซีเซิร์ฟเวอร์สำหรับ HTTPเป็นโปรแกรมที่ส่งคำขอ HTTP ในนามของโปรแกรมไคลเอนต์ (ไม่ว่าจะเป็นเบราว์เซอร์หรือซอฟต์แวร์อื่น ๆ ) พร็อกซีอาจจะ แคชหรือ ไม่ใช่แคช. แคชดังนั้นจะบันทึกคำขอทั้งหมดไปยังที่เก็บข้อมูลบางส่วนเพื่อการจัดส่งให้กับลูกค้าที่รวดเร็วขึ้นและ ไม่ใช่แคช- เพียงออกอากาศ HTTP, ftp หรือคำขออื่น ๆ ก่อนหน้านี้การรับส่งข้อมูลแคชทำให้สามารถประหยัดการรับส่งข้อมูลได้ค่อนข้างมาก แต่ในปัจจุบัน ด้วยความเร็วอินเทอร์เน็ตที่เพิ่มขึ้น สิ่งนี้ได้สูญเสียความเกี่ยวข้องไปเล็กน้อย สามารถสร้างพร็อกซีเซิร์ฟเวอร์ในตัวได้ ลำดับชั้นเพื่อดำเนินการตามคำขอ ในเวลาเดียวกัน พร็อกซีเซิร์ฟเวอร์โต้ตอบกันโดยใช้ โปรโตคอลไอซีพี.

ปลาหมึกออกแบบและสามารถทำงานได้มากที่สุด ระบบปฏิบัติการ(ทั้งยูนิกซ์และวินโดวส์) ได้รับอนุญาตภายใต้ ใบอนุญาตกนูจีพีแอล สามารถประมวลผลและแคชคำขอ HTTP, FTP, gopher, SSL และ WAIS (ถูกลบออกใน 2.6) รวมถึง DNS ที่สุด คำขอบ่อยครั้งร้านค้าใน แรม- ปัจจุบันก็มี 2 เวอร์ชันเสถียรปลาหมึก: 2.7 และ 3.1 - ความแตกต่างสามารถพบได้ในลิงค์ท้ายบทความ การขึ้นต่อกันทั้งหมดเมื่อติดตั้งจากแพ็คเกจจะเหมือนกัน ไฟล์การกำหนดค่าเวอร์ชัน 2 เข้ากันได้กับเวอร์ชัน 3 แต่เวอร์ชัน 3 เพิ่มพารามิเตอร์ใหม่ ในบทความฉันจะพิจารณา เวอร์ชั่นปลาหมึก3- นอกจากนี้ยังเป็นที่น่าสังเกตว่าหากคุณติดตั้ง squid3 มันจะเก็บไฟล์การกำหนดค่าไว้ /etc/squid3รวมถึงบันทึกเริ่มต้นใน squid3 อยู่ในไดเร็กทอรี /var/log/squid3/, ไม่ /var/log/squid/ดังที่ผู้วิเคราะห์บันทึกจำนวนมาก “ชอบคิด”

คำว่า "ถูกกล่าวถึงหลายรอบแล้ว" แคช“และนี่คืออะไรกันแน่... แคช- นี้ วิธีการจัดเก็บวัตถุที่ร้องขอจากอินเทอร์เน็ตบนเซิร์ฟเวอร์ที่ตั้งอยู่ใกล้กับคอมพิวเตอร์ที่ร้องขอมากกว่าเครื่องเดิม วัตถุอินเทอร์เน็ตคือไฟล์ เอกสาร หรือการตอบสนองต่อคำขอบริการใดๆ ที่มีให้บนอินเทอร์เน็ต (เช่น FTP, HTTP หรือโกเฟอร์) ไคลเอนต์ร้องขอวัตถุอินเทอร์เน็ตจากแคชของพร็อกซีเซิร์ฟเวอร์ หากวัตถุยังไม่ได้แคช พร็อกซีเซิร์ฟเวอร์จะได้รับวัตถุ (หรือจากโหนดเครือข่ายที่ระบุโดยคำขอ ที่อยู่ URLจากแคชพาเรนต์หรือเพื่อนบ้าน) และส่งมอบให้กับไคลเอ็นต์

โหมดการทำงานของพร็อกซีเซิร์ฟเวอร์ Squid

พร็อกซีเซิร์ฟเวอร์ Squid สามารถทำงานในสามโหมดหลักต่อไปนี้:

โหมดโปร่งใส

ในโหมดนี้ การเชื่อมต่อ HTTPดำเนินการโดยไคลเอนต์จะถูกเปลี่ยนเส้นทางไปยังพร็อกซีเซิร์ฟเวอร์โดยที่พวกเขาไม่รู้หรือกำหนดค่าที่ชัดเจน ในโหมดนี้ ไม่จำเป็นต้องกำหนดค่าไคลเอ็นต์ ข้อบกพร่อง วิธีนี้ : จำเป็นต้องมีการกำหนดค่า NAT และการเปลี่ยนเส้นทางการรับส่งข้อมูล การตรวจสอบสิทธิ์ไคลเอ็นต์ไม่ทำงาน คำขอ FTP และ HTTPS จะไม่ถูกเปลี่ยนเส้นทาง

โหมดการรับรองความถูกต้อง

ในการทำงานในโหมดนี้ ไคลเอนต์จะต้องได้รับการกำหนดค่าให้ทำงานกับพร็อกซีเซิร์ฟเวอร์ (ต้องระบุที่อยู่พร็อกซีเซิร์ฟเวอร์ในการตั้งค่าการเชื่อมต่อ) การรับรองความถูกต้องและการอนุญาตไคลเอ็นต์สามารถทำได้ผ่าน Kerberos, Ldap, NTLM, IP และ Radius สามารถสร้างปฏิสัมพันธ์กับ เซิร์ฟเวอร์ไมโครซอฟต์ ไดเรกทอรีที่ใช้งานอยู่โดยการตรวจสอบสิทธิ์ไคลเอ็นต์ของสมาชิกโดเมนโดยใช้โปรโตคอล Kerberos และการอนุญาตในภายหลังของสมาชิกกลุ่มโดเมนโดยใช้ LDAP ในโหมดโปร่งใส (ผู้ใช้ป้อนรหัสผ่านเมื่อลงทะเบียนในโดเมนเท่านั้น) สำหรับกลุ่มที่ได้รับอนุญาตก็สามารถใช้งานได้ การตั้งค่าต่างๆการควบคุมการเข้าถึงและ QoS (พูลล่าช้า)

พร็อกซีย้อนกลับ

พร็อกซีเซิร์ฟเวอร์แคชข้อมูลขาออก Reverse Proxy ของ Squid รับข้อมูลจากเซิร์ฟเวอร์ HTTP ในนามของไคลเอนต์ และส่งกลับไปยังไคลเอนต์ (เช่น ไปยังอินเทอร์เน็ต) โหมดนี้ช่วยให้คุณ:

  • การใช้แคชซึ่งจะช่วยลดภาระบนเซิร์ฟเวอร์ HTTP
  • การกระจายโหลดระหว่างเซิร์ฟเวอร์ HTTP
  • ปลอม เซิร์ฟเวอร์ HTTPและคุณลักษณะของพวกเขา
  • ป้องกันการโจมตีเว็บบนเซิร์ฟเวอร์

ไดอะแกรมโหมดการทำงานของปลาหมึก

โหมดโปร่งใส

โหมดย้อนกลับ

โหมดการรับรองความถูกต้อง

ในแผนภาพที่แสดง ลูกศรสีเขียวแสดงถึงกระแสการรับส่งข้อมูลพร็อกซี การเคลื่อนไหวของสตรีมเหล่านี้ใน Linux มักถูกควบคุมโดยกองกำลังและการตั้งค่าของเบราว์เซอร์ นอกจากนี้บ่อยครั้งที่ฟังก์ชันของเราเตอร์และพร็อกซีดำเนินการโดยเครื่องเดียว

การติดตั้งปลาหมึก

ก่อนที่จะติดตั้งและกำหนดค่า squid คุณต้องแน่ใจว่าเครื่องที่ squid จะทำงานนั้นสามารถเข้าถึงได้ เครือข่ายภายนอกและไคลเอนต์ที่จะใช้พรอกซีนี้สามารถเข้าถึงเครื่องนี้ได้ สามารถติดตั้งพร็อกซีเซิร์ฟเวอร์ปลาหมึกได้ เช่นเดียวกับซอฟต์แวร์อื่นๆ ใน Linux ในรูปแบบต่างๆอธิบายไว้ในบทความ ฉันจะกล่าวถึงวิธีการติดตั้งจากพื้นที่เก็บข้อมูลใน Debian ดังนั้นในการติดตั้ง squid คุณต้องติดตั้งแพ็คเกจ squid3 เพื่อดำเนินการนี้ให้รันคำสั่งต่อไปนี้:

Gw ~ # aptitude ติดตั้ง squid3 แพ็คเกจใหม่ต่อไปนี้จะถูกติดตั้ง: libltdl7(a) squid-langpack(a) squid3 squid3-common(a) อัปเดต 0 แพ็คเกจ, ติดตั้งใหม่ 4 รายการ, 0 แพ็คเกจถูกทำเครื่องหมายเพื่อลบ และ 0 แพ็คเกจไม่ได้อัปเดต . จำเป็นต้องได้รับไฟล์เก็บถาวรขนาด 2,157 kB หลังจากแกะออกแล้ว พื้นที่ 10.3 MB จะถูกครอบครอง คุณต้องการดำเนินการต่อหรือไม่? y รับ: 1 http://ftp.ru.debian.org/debian/ squeeze/main libltdl7 i386 2.2.6b-2 รับ: 2 http://ftp.ru.debian.org/debian/ squeeze/main squid- langpack ทั้งหมด 20100628-1 Get:3 http://ftp.ru.debian.org/debian/ squeeze/main squid3-common ทั้งหมด 3.1.6-1.2+squeeze2 Get:4 http://ftp.ru.debian.org /debian/ squeeze/main squid3 i386 3.1.6-1.2+squeeze2 ได้รับ 2,157 kB ใน 9 วินาที (238 kB/s) การเลือกแพ็คเกจ libltdl7 ที่ไม่ได้เลือกไว้ก่อนหน้านี้ (กำลังอ่านฐานข้อมูล...บนในขณะนี้

ติดตั้งไฟล์และไดเร็กทอรี 41133 แล้ว) แพ็กเกจ libltdl7 ถูกคลายแพ็ก (จากไฟล์.../libltdl7_2.2.6b-2_i386.deb)... กำลังเลือกแพ็กเกจ squid-langpack ที่ไม่ได้เลือกไว้ก่อนหน้านี้ แพ็กเกจ squid-langpack ถูกคลายแพ็กแล้ว (จากไฟล์.../squid-langpack_20100628-1_all.deb)... กำลังเลือกแพ็กเกจ squid3-common ที่ไม่ได้เลือกไว้ก่อนหน้านี้ แพ็กเกจ squid3-common ถูกคลายแพ็กแล้ว (จากไฟล์.../squid3-common_3.1.6-1.2+squeeze2_all.deb)... การเลือกแพ็กเกจ squid3 ที่ไม่ได้เลือกไว้ก่อนหน้านี้ แพ็คเกจ squid3 ถูกคลายการแพ็ก (จากไฟล์.../squid3_3.1.6-1.2+squeeze2_i386.deb)... ทริกเกอร์สำหรับ man-db ได้รับการประมวลผล... แพ็คเกจ libltdl7 (2.2.6b-2) ได้รับการกำหนดค่าแล้ว . แพ็คเกจ squid-langpack ได้รับการกำหนดค่า (20100628-1) ... การกำหนดค่าแพ็คเกจ squid3-common (3.1.6-1.2+squeeze2) ... การกำหนดค่าแพ็คเกจ squid3 (3.1.6-1.2+squeeze2) ... การสร้างโครงสร้างไดเร็กทอรีสปูล Squid HTTP proxy 3.x 2012/02/15 21:29:41 | การสร้างไดเรกทอรี Swap การรีสตาร์ท Squid HTTP Proxy 3.x: squid3 การสร้างโครงสร้างแคช Squid HTTP Proxy 3.x ... (คำเตือน) 2012/02/58 21:29:43| การสร้างไดเรกทอรีสลับ อย่างที่คุณเห็นเมื่อติดตั้งแพ็คเกจมีความพยายามที่จะสร้างไดเรกทอรีแคช ปลาหมึกแต่เพราะว่า ไม่ได้กำหนดค่าไว้ จากนั้นจะมีคำเตือนปรากฏขึ้น อีกด้วย, เพิ่มในการเริ่มต้น การเปิดตัว และการยอมรับการเชื่อมต่อบนอินเทอร์เฟซทั้งหมด - แต่เพราะว่า ไม่ได้กำหนดค่า การเข้าถึงหน้าอินเทอร์เน็ตผ่านเซิร์ฟเวอร์มีจำกัดการกำหนดค่าปลาหมึก ตั้งอยู่ใน/etc/squid3/squid.conf

Gw ~ # grep -v ^# /etc/squid3/squid.conf | grep -v ^$ ตัวจัดการ acl โปรโต cache_object acl localhost src 127.0.0.1/32::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32::1 acl SSL_ports พอร์ต 443 acl Safe_ports พอร์ต 80 # http acl Safe_ports พอร์ต 21 # ftp acl พอร์ต Safe_ports 443 # https acl พอร์ต Safe_ports 70 # gopher acl พอร์ต Safe_ports 210 # wais acl พอร์ต Safe_ports 1025-65535 # พอร์ตที่ไม่ได้ลงทะเบียน acl พอร์ต Safe_ports 280 # http-mgmt acl พอร์ต Safe_ports 488 # gss-http acl Safe_ports พอร์ต 591 # filemaker acl พอร์ต Safe_ports 777 # multiling http acl วิธีเชื่อมต่อ CONNECT http_access อนุญาตผู้จัดการ localhost http_access ปฏิเสธผู้จัดการ http_access ปฏิเสธ !Safe_ports http_access ปฏิเสธ CONNECT !SSL_ports http_access อนุญาต localhost http_access ปฏิเสธ http_port 3128 hierarchy_stoplist cgi-bin ทั้งหมด ? coredump_dir /var/spool/squid3รีเฟรช_รูปแบบ ^ftp: 1440 20% 10080 รีเฟรช_รูปแบบ ^โกเฟอร์: 1440 0% 1440 รีเฟรช_รูปแบบ -i (/cgi-bin/|\?) 0 0% 0 รีเฟรช_รูปแบบ 0 20% 4320

อย่างที่คุณเห็นในการกำหนดค่าเริ่มต้น พร็อกซีเซิร์ฟเวอร์กำลังทำงานและอนุญาตคำขอจากที่อยู่ 127.0.0.0/8 เท่านั้น คุณควรตรวจสอบรายการทั้งหมดอย่างรอบคอบและแสดงความคิดเห็นในบรรทัดที่มีพอร์ตของบริการที่ไม่จำเป็นหรือไม่ได้ใช้ ความเข้าใจที่สมบูรณ์ยิ่งขึ้นเกี่ยวกับการกำหนดค่านี้จะเกิดขึ้นหลังจากอ่านหัวข้อต่อไปนี้ ที่. หากเราเปิดเบราว์เซอร์คอนโซล lunx โดยชี้ไปที่พร็อกซีของเรา เราจะเห็นหน้าที่กำหนดให้:

Gw ~ # # เปิดเบราว์เซอร์ที่ระบุหน้า ya.ru: gw ~ # http_proxy=http://127.0.0.1:3128 lynx ya.ru ค้นหา "ya.ru" แรก gw ~ # # ในบันทึกที่เราเห็น เข้าถึงหน้าที่ระบุ : gw ~ # cat /var/log/squid3/access.log 1329527823.407 110 127.0.0.1 TCP_MISS/200 9125 รับ http://ya.ru/ - DIRECT/93.158.134.203 text/html

พารามิเตอร์บางตัวในไฟล์การกำหนดค่า squid สามารถใช้ได้หลายครั้ง (เช่น acl) พารามิเตอร์บางตัว โดยเฉพาะที่มีค่าเดียว สามารถใช้ได้เพียงครั้งเดียวเท่านั้น ในเวลาเดียวกันเมื่อใช้พารามิเตอร์นี้ 2 ครั้งขึ้นไปก็จะถูกนำมาใช้ ค่าสุดท้าย- ตัวอย่างเช่น:

Logfile_rotate 10 # หลายค่า - ค่าสุดท้ายจะเป็น 5 logfile_rotate 5

การจัดการปลาหมึก

คุณสามารถดูพารามิเตอร์ที่ squid สร้างขึ้นสำหรับการแจกจ่ายของคุณสามารถดูได้โดยใช้คำสั่ง squid3 -v ตัวอย่างเช่น ใน Debian squeezy squid ถูกสร้างขึ้นด้วยพารามิเตอร์ที่ระบุด้านล่าง:

คำนำหน้า=/usr - คำนำหน้าสำหรับคีย์อื่นๆ: --mandir=$(prefix)/share/man - ไดเร็กทอรีสำหรับจัดเก็บหน้า man --libexecdir=$(prefix)/lib/squid3 - ไดเร็กทอรีที่มีโมดูลที่เรียกใช้งานได้ (รวมถึงตัวช่วย) - -sysconfdir=/etc/squid3 - ไดเร็กทอรีหน่วยเก็บข้อมูลการกำหนดค่า --with-logdir=/var/log/squid3 - ไดเร็กทอรีหน่วยเก็บข้อมูลบันทึกและอื่น ๆ ฯลฯ...

การตั้งปลาหมึก

คำอธิบายของการตั้งค่า squid3ฉันจะเริ่มต้นด้วย การตั้งค่าพื้นฐานซึ่งแนะนำให้ทำเมื่อตั้งค่าการกำหนดค่าพร็อกซีเซิร์ฟเวอร์ การกำหนดค่า squid อยู่ใน /etc/squid3/squid.confนี่คือไฟล์การกำหนดค่าหลักที่มีการตั้งค่าทั้งหมด (ใน การแจกแจงเดเบียนและ RedHat ยังดูพารามิเตอร์จากไฟล์การกำหนดค่าเริ่มต้นเมื่อเริ่มต้น /etc/default/squid3และ /etc/sysconfig/squid3ตามลำดับ) นอกจากนี้ ฉันยังได้บอกไปแล้วว่ามีมากกว่า 5,000 บรรทัดและไม่คุ้มที่จะรีบกำหนดค่าบางอย่างโดยไม่เข้าใจทันที ไวยากรณ์การกำหนดค่า squid3 classic: บรรทัดที่มี # คือความคิดเห็น พารามิเตอร์คือบรรทัด " ค่าพารามิเตอร์" สามารถใช้งานได้ ไฟล์การกำหนดค่าแบ่งออกเป็นส่วน ๆ เพื่อความสะดวก แต่สิ่งสำคัญคือต้องจำไว้ว่าพารามิเตอร์จะถูกแยกวิเคราะห์ "จากบนลงล่าง" ตามลำดับความสำคัญ นอกจากนี้การใช้ รวมพารามิเตอร์คุณสามารถเชื่อมต่อไฟล์การกำหนดค่าภายนอกได้

ตามค่าเริ่มต้น ชื่อของโฮสต์ที่ใช้งาน Squid จะได้รับการแก้ไขโดยใช้ รับชื่อโฮสต์()ขึ้นอยู่กับ การตั้งค่า DNSบางครั้งมันก็ไม่สามารถระบุชื่อที่จะปรากฏในบันทึกและเอาต์พุตข้อผิดพลาดได้อย่างชัดเจน” สร้าง ... โดย server.com (squid/3.0.STABLE2)- หากต้องการบันทึกชื่อโฮสต์อย่างถูกต้อง คุณต้องป้อนชื่อนี้ (FQDN??) ลงในพารามิเตอร์:

Visible_hostname myproxy

ตามค่าเริ่มต้น squid ยอมรับการเชื่อมต่อบนอินเทอร์เฟซทั้งหมด หากเซิร์ฟเวอร์ของเราเป็นหนึ่งใน อินเทอร์เฟซเครือข่ายมองเข้าไป โลกภายนอกขอแนะนำให้จำกัดการเชื่อมต่อบนอินเทอร์เฟซเครือข่ายท้องถิ่นเท่านั้น (เช่น 10.0.0.10/24) รับผิดชอบเรื่องนี้ พารามิเตอร์ http_port:

Http_port 10.0.0.10:3128

วิธีการทำงานของพารามิเตอร์เหล่านี้สามารถดูได้ในรายการต่อไปนี้:

Gw ~ # # ตรวจสอบ daemon ก่อนตั้งค่า: gw ~ # netstat -antp | grep squ tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 25816/(squid) gw ~ # # การเปลี่ยนแปลงที่ทำ: gw ~ # grep ^http_port /etc/squid3/squid.conf http_port 10.0.0.10:3128 gw ~ # # อ่าน gw config ที่แก้ไขแล้วอีกครั้ง ~ # /etc/init.d/squid3 โหลดไฟล์การกำหนดค่า Squid HTTP Proxy 3.x อีกครั้ง เสร็จแล้ว. gw ~ # # ตรวจสอบการดำเนินการด้วยการกำหนดค่าที่เปลี่ยนแปลง: gw ~ # netstat -antp | grep squ tcp 0 0 10.0.0.10:3128 0.0.0.0:* LISTEN 25816/(ปลาหมึก)

อย่างที่คุณเห็นตอนนี้ daemon ทำงานบนอินเทอร์เฟซของเครือข่ายที่ระบุเท่านั้น เป็นที่น่าสังเกตว่า squid เวอร์ชันใหม่ (<3.1) поддерживают задание нескольких параметров http_port. При этом, у разных параметров могут быть указанны дополнительные ключи такие как intercept, tproxy, accel и др., например:

Gw ~ # grep ^http_port /etc/squid3/squid.conf http_port 10.0.0.10:3128 http_port 10.0.0.10:3129 tproxy

พารามิเตอร์เหล่านี้ตั้งค่าโหมดการทำงานของพร็อกซีเซิร์ฟเวอร์ ตัวอย่างเช่น tproxy (ไวยากรณ์เก่า - โปร่งใส) ตั้งค่าโหมด โหมดเหล่านี้ควรค่าแก่การแยกบทความและอาจได้รับการพิจารณาในอนาคต

ตอนนี้คุณต้องกำหนดค่าคอมพิวเตอร์ไคลเอนต์และใช้อินเทอร์เน็ต แต่ตามค่าเริ่มต้น การเข้าถึงจะได้รับอนุญาตจาก localhost เท่านั้น และเมื่อพยายามเข้าถึงเว็บ ผู้ใช้จะได้รับข้อผิดพลาด "Access ถูกปฏิเสธ" บันทึก /var/log/squid3/access.log จะมีลักษณะดังนี้:

1329649479.831 0 10.0.1.55 TCP_DENIED/403 3923 รับ http://ya.ru/ - NONE/- text/html

เพื่อให้ไคลเอนต์เครือข่ายท้องถิ่นทำงานได้เป็นสิ่งจำเป็น กำหนดค่าการอนุญาตโดยใช้รายการควบคุมการเข้าถึง.

การตั้งค่าการเข้าถึงปลาหมึก

จริงๆ แล้ว การตั้งค่าการเข้าถึงเป็น คำอธิบายวัตถุเข้าถึงผ่านทาง พารามิเตอร์ aclแล้ว การอนุญาตหรือ ห้ามทำงานวัตถุ acl ที่อธิบายไว้โดยใช้ พารามิเตอร์ “http_access”- รูปแบบที่ง่ายที่สุดสำหรับการตั้งค่าเหล่านี้มีดังนี้:

Acl list_name select_type ลักษณะเฉพาะของ select_type

ที่ไหน บัญชีรายชื่อ- พารามิเตอร์อธิบาย รายการควบคุมการเข้าถึงซึ่งมีชื่อตั้งตามค่า list_name- ชื่อจะต้องตรงตามตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ การเลือก_ประเภทระบุประเภทที่จะสอดคล้องตามที่ระบุด้านล่าง character_type_of_selection- ลักษณะนี้สามารถรับค่าที่ใช้กันทั่วไปได้เช่น src(จากแหล่งที่มา) - แหล่งที่มาของคำขอ วันเวลา- ที่อยู่ปลายทาง เออาร์พี- ที่อยู่ MAC srcdomain.comและ โดเมน dst- ชื่อโดเมนต้นทางและปลายทาง ตามลำดับ ท่าเรือ- ท่าเรือ, โปรโต- โปรโตคอล เวลา- เวลาและ อื่น ๆ อีกมากมาย- ตามมูลค่า ลักษณะเฉพาะของการเลือกประเภทจะถูกสร้างขึ้นขึ้นอยู่กับ การเลือก_ประเภท.

คุณสามารถระบุบรรทัด acl หลายบรรทัดด้วยชื่อและประเภทการเลือกเดียวกันได้ ซึ่งในกรณีนี้ข้อมูล acl จะถูกรวมเป็นรายการเดียวโดยใช้การดำเนินการแบบโลจิคัล OR ตัวอย่างเช่น:

ไซต์ Acl dstdomain site.com ไซต์ acl dstdomain site.org # คล้ายกับรายการ: ไซต์ acl dstdomain site.com site.org

พูดง่ายๆ ก็คือ รายการเข้าถึงที่มีชื่อว่า site เป็นเจ้าของคำขอทั้งหมดที่ส่งไปยัง site.com หรือ site.org นอกจากนี้ Rescue_names จะคำนึงถึงขนาดตัวพิมพ์ ซึ่งหมายความว่าไซต์ acl และไซต์ acl เป็นรายการเข้าถึงที่แตกต่างกัน 2 รายการ

เมื่อสร้างรายการเข้าถึงแล้วให้ใช้ พารามิเตอร์ http_accessอนุญาตหรือปฏิเสธการเข้าถึง ACL ที่ระบุ รูปแบบการโทรทั่วไปคือ:

Http_access อนุญาต|ปฏิเสธ [!]list_name

ที่ไหน, http_access- พารามิเตอร์ที่ระบุกฎการอนุญาตที่ตามมา ( อนุญาต) หรือข้อห้าม ( ปฏิเสธ) การเข้าถึงที่ระบุไว้ด้านล่าง list_name- อย่างไรก็ตาม เครื่องหมายอัศเจรีย์ที่เป็นทางเลือกจะกลับความหมายของชื่อรายการ นั่นคือมีเครื่องหมายอัศเจรีย์ความหมาย list_nameจะฟังดูเหมือน ทุกคนยกเว้นผู้ที่อยู่ในรายการนี้- นอกจากนี้ คุณสามารถระบุหลายรายการโดยคั่นด้วยช่องว่าง จากนั้นจะอนุญาตให้เข้าถึงได้หากรายการนั้นอยู่ในรายการที่ระบุทั้งหมด ในกรณีนี้ จะต้องระบุกฎการอนุญาตทั้งหมดก่อนกฎการห้ามทั้งหมด:

Http_access ปฏิเสธทั้งหมด

อาจมีคำถามที่สมเหตุสมผล: เหตุใดจึงตั้งกฎนี้หากเราอนุญาตให้เข้าถึง squid เฉพาะ acls ที่เลือกเท่านั้น ท้ายที่สุดแล้วส่วนที่เหลือที่ไม่อยู่ใน ACL นี้ “ผ่าน”... ง่ายๆ ตามค่าเริ่มต้น squid จะใช้กฎอนุญาต/ปฏิเสธซึ่งตรงกันข้ามกับกฎหลัง ตัวอย่างเช่น:

# เรามีกฎการอนุญาตเพียงกฎเดียวสำหรับ acl ของผู้ใช้บางราย: http_access อนุญาตให้ผู้ใช้ # หากเมื่อเข้าถึง squid ลูกค้าไม่ได้รวมอยู่ใน acl นี้ การดำเนินการปฏิเสธจะถูกนำไปใช้กับมัน # และหากเรามีกฎสองข้อ http_access อนุญาตให้ผู้ใช้ http_access ปฏิเสธผู้ใช้2 # และไคลเอนต์ไม่ได้เป็นสมาชิกของผู้ใช้ acl หรือผู้ใช้ acl2 ดังนั้นการอนุญาตจะถูกนำไปใช้กับมัน # นั่นคือการกระทำที่ตรงกันข้ามกับอันสุดท้าย http_access ปฏิเสธผู้ใช้2

อย่างที่พวกเขาพูดกันว่านี่คือพื้นฐาน ลองดูตัวอย่างง่ายๆ สมมติว่าเรามี 2 เครือข่าย 10.0.1.0/24 และ 10.0.0.0/24 รวมถึงโฮสต์ 10.0.4.1 ซึ่งจำเป็นต้องได้รับอนุญาตให้เข้าถึงอินเทอร์เน็ต หากต้องการอนุญาตการเข้าถึง คุณต้องสร้างคำอธิบายของรายการเข้าถึงใหม่ในส่วน "การควบคุมการเข้าถึง" ของไฟล์ squid.conf:

Acl ลาน src 10.0.1.0/24 10.0.0.0/24 acl ลาน src 10.0.4.1

เพื่อความสะดวกยิ่งขึ้น คุณสามารถตั้งกฎเหล่านี้ในไฟล์แยกต่างหาก โดยระบุเส้นทางไปยังตำแหน่งนั้น ลักษณะเฉพาะของการเลือกประเภท- ที่นี่:

Gw ~ # # มาสร้างไดเรกทอรีแยกต่างหากสำหรับจัดเก็บรายการเข้าถึง gw ~ # mkdir /etc/squid3/acls/ gw ~ # # ใส่เครือข่ายย่อยและโฮสต์ของเราในไฟล์แยกต่างหาก gw ~ # vim /etc/squid3/acls/lan acl gw ~ # cat /etc/squid3/acls/lan.acl 10.0.1.0/24 10.0.0.0/24 10.0.4.1 gw ~ # # อธิบายไฟล์ที่สร้างขึ้นใน config (เส้นทางจะต้องอยู่ในเครื่องหมายคำพูด) gw ~ # grep lan.acl /etc /squid3/squid.conf acl lan src "/etc/squid3/acls/lan.acl"

อนุญาตให้รายการเข้าถึง LAN ที่สร้างขึ้นเข้าถึงอินเทอร์เน็ตและบอกให้ปลาหมึกอ่านไฟล์การกำหนดค่าอีกครั้ง:

Gw ~ # grep lan /etc/squid3/squid.conf | grep acce http_access อนุญาต lan gw ~ # บริการ squid3 โหลดซ้ำ การโหลดไฟล์การกำหนดค่า Squid HTTP Proxy 3.x ใหม่ เสร็จแล้ว.

เพื่อสรุปส่วนนี้โดยสรุป เราสามารถพูดได้ว่า acl ระบุคำขอเว็บ และ http_access อนุญาตหรือปฏิเสธคำขอที่ระบุ ตอนนี้ลูกค้าในพื้นที่ของเรายินดีที่จะใช้อินเทอร์เน็ตหลังจากตั้งค่าเบราว์เซอร์แล้ว!

การกำหนดการตั้งค่าแคชปลาหมึก

จุดสำคัญในการตั้งปลาหมึกคือ การตั้งค่าพารามิเตอร์แคชในปลาหมึก- ตำแหน่งแคชถูกตั้งค่าแล้ว พารามิเตอร์ cache_dirใน squid.conf รูปแบบพารามิเตอร์เป็นดังนี้:

Cache_dir ชนิดพาธขนาด L1 L2

ที่ไหน, พิมพ์- นี่คืออัลกอริธึมการสร้างแคชบางที: ufs (ระบบไฟล์ยูนิกซ์), aufs (async ufs), diskd(กระบวนการภายนอกเพื่อหลีกเลี่ยงการบล็อกปลาหมึกบนดิสก์ I/O) แนะนำให้ใช้ ufsแม้จะได้รับการยกย่องบ้างก็ตาม aufs. เส้นทาง- ระบุตำแหน่งของแคชในระบบไฟล์ (ต้องมีอยู่และมีสิทธิ์การเข้าถึงการเขียนสำหรับผู้ใช้ที่ squid กำลังทำงาน - โดยปกติจะเป็นพร็อกซี) ขนาด- ตั้งค่าขนาดสูงสุดหลังจากที่จะเริ่มล้างแคช มีโฮลิวาร์มากมายบนอินเทอร์เน็ตสำหรับพารามิเตอร์นี้ ขนาดแคชที่เหมาะสมคือตั้งแต่ 2 ถึง 10 GB ขึ้นอยู่กับจำนวนไคลเอ็นต์ แคชประมาณ 1 GB สำหรับทุกๆ 100,000 คำขอ/วัน ผมเหลือ 5 GB. ใน Squid แต่ละออบเจ็กต์แคชจะอยู่ในไฟล์แยกต่างหาก ตัวไฟล์จะไม่ถูกทิ้งในที่เดียว แต่ใช้ลำดับชั้นไดเรกทอรีสองระดับ จำนวนไดเร็กทอรีระดับ 1 และ 2 และกำหนดพารามิเตอร์ L1 และ L2- ค่าเหล่านี้สามารถปล่อยให้เป็นค่าเริ่มต้นได้ แต่เพื่อช่วยคุณนำทางสถานการณ์ ฉันจะเสนอคำพูดจาก bog.pp.ru:

การทดลองแสดงให้เห็นว่าด้วยแคชขนาด 700 MB จะใช้ไดเร็กทอรีระดับแรกเพียง 2 ไดเร็กทอรีเท่านั้น นั่นคือสำหรับโครงสร้างไดเร็กทอรีแคชมาตรฐานหนึ่งล้านอ็อบเจ็กต์ (9 GB) จะพอดีกับมัน หากมีมากกว่านั้นคุณจะต้องเพิ่มจำนวนไดเร็กทอรีระดับบนสุด

คุณสามารถใช้ได้หลายอย่าง cache_dir- สิ่งนี้มีผลเชิงบวกต่อประสิทธิภาพการทำงาน โดยเฉพาะอย่างยิ่งหากแคชถูกวางบนดิสก์ที่แตกต่างกัน คุณสามารถเพิ่มความเร็วแคชได้มากขึ้นโดยวางแคชใน tmpfs สำหรับแต่ละพารามิเตอร์ cache_dirเป็นไปได้ใน ส่วนตัวเลือกกำหนดพารามิเตอร์อ่านอย่างเดียว (อ่านอย่างเดียว) และขนาดสูงสุด (ขนาดวัตถุสูงสุด)

ขนาดสูงสุดของอ็อบเจ็กต์ในแคชถูกกำหนดโดยพารามิเตอร์ maximum_object_sizeค่าเริ่มต้นคือ 4 MB ฉันเพิ่มค่านี้เป็น 60 MB เพราะ... พนักงานบนเครือข่ายท้องถิ่นมักจะต้องดาวน์โหลดไฟล์ประเภทเดียวกันจนมีขนาดที่กำหนด:

Maximum_object_size 61440 KB

เช่นเดียวกัน? นอกจากนี้ยังมี พารามิเตอร์ขั้นต่ำ_วัตถุ_ขนาดรับผิดชอบขนาดต่ำสุดของวัตถุ โดยค่าเริ่มต้นคือ "0" นั่นคือปิดใช้งาน ฉันแนะนำให้เพิ่มค่าของพารามิเตอร์นี้เป็น 2-3 KB ซึ่งจะช่วยลดภาระของดิสก์เมื่อค้นหาวัตถุขนาดเล็ก

ความจุแรมที่ใช้โดยปลาหมึกมีระบุไว้ใน พารามิเตอร์ cache_memค่าเริ่มต้นคือ 256 MB (ในเวอร์ชัน 3.1) ฉันปล่อยให้ค่านี้เป็นค่าเริ่มต้น คุณควรเปลี่ยนค่านี้เฉพาะเมื่อ squid ขอให้คุณเปลี่ยนในบันทึกเท่านั้น หลังจากการเปลี่ยนแปลงเหล่านี้ คุณจะต้องรีสตาร์ท squid และโครงสร้างไดเร็กทอรีจะถูกสร้างขึ้น:

Gw ~ # service squid3 start เริ่มต้น Squid HTTP Proxy 3.x: squid3Creating Squid HTTP Proxy 3.x โครงสร้างแคช ... (คำเตือน) 2012/02/19 22:58:21| การสร้างไดเรกทอรี Swap 2012/02/19 22:58:21| /var/spool/squid3 มีอยู่ 2012/02/19 22:58:21| การสร้างไดเรกทอรีใน /var/spool/squid3/00 2012/02/19 22:58:21| การสร้างไดเรกทอรีใน /var/spool/squid3/01 2012/02/19 22:58:21| การสร้างไดเรกทอรีใน /var/spool/squid3/02 2012/02/19 22:58:21| การสร้างไดเรกทอรีใน /var/spool/squid3/03 2012/02/19 22:58:21| การสร้างไดเรกทอรีใน /var/spool/squid3/04 2012/02/19 22:58:21| การสร้างไดเรกทอรีใน /var/spool/squid3/05 2012/02/19 22:58:21| การสร้างไดเรกทอรีใน /var/spool/squid3/06 2012/02/19 22:58:21| การสร้างไดเรกทอรีใน /var/spool/squid3/07 2012/02/19 22:58:21| การสร้างไดเรกทอรีใน /var/spool/squid3/08 2012/02/19 22:58:21| การสร้างไดเรกทอรีใน /var/spool/squid3/09 2012/02/19 22:58:21| การสร้างไดเรกทอรีใน /var/spool/squid3/0A 2012/02/19 22:58:21| การสร้างไดเรกทอรีใน /var/spool/squid3/0B 2012/02/19 22:58:21| การสร้างไดเรกทอรีใน /var/spool/squid3/0C 2012/02/19 22:58:21| การสร้างไดเรกทอรีใน /var/spool/squid3/0D 2012/02/19 22:58:21| การสร้างไดเรกทอรีใน /var/spool/squid3/0E 2012/02/19 22:58:21| การสร้างไดเร็กทอรีใน /var/spool/squid3/0F

มีการอธิบายคำถามและคำตอบที่น่าสนใจมากมายเกี่ยวกับการใช้แคชและหน่วยความจำโดย squid ด้วยเหตุนี้เราจึงสามารถพิจารณาโซลูชันมาตรฐานสำหรับการตั้งค่าพร็อกซีเซิร์ฟเวอร์ได้

ตัวอย่างการตั้งค่าพร็อกซีปลาหมึกแบบโปร่งใส

คืออะไร พร็อกซีที่โปร่งใส- นี่คือโหมดการทำงานของพร็อกซีเซิร์ฟเวอร์เมื่อไคลเอนต์ ไม่สามารถกำหนดค่าได้เพื่อทำงานผ่านพร็อกซีและส่งคำขอไปยังเครือข่ายผ่านโปรโตคอล HTTP ราวกับว่าเบราว์เซอร์ไคลเอ็นต์ทำงานโดยตรงกับเว็บเซิร์ฟเวอร์ ในเวลาเดียวกัน คำขอ HTTP ขาออกจะถูกส่งไปยังพอร์ตที่พร็อกซีกำลังทำงานอยู่ ในทางกลับกัน พร็อกซีเซิร์ฟเวอร์จะแปลงคำขอ HTTP เป็นคำขอโปรโตคอลพร็อกซี และส่งการตอบกลับไปยังไคลเอนต์ เช่นเดียวกับเว็บเซิร์ฟเวอร์ ที่. การโต้ตอบกับพร็อกซีเซิร์ฟเวอร์เกิดขึ้นอย่างโปร่งใสสำหรับไคลเอ็นต์

สิ่งสำคัญคือต้องเข้าใจและรู้!วิธีนี้รองรับ โปรโตคอล HTTP เท่านั้นและไม่รองรับ gopher, FTP หรือการพร็อกซีอื่นๆ นอกจากนี้ Squid ไม่สามารถทำงานในโหมดโปร่งใสและโหมดการรับรองความถูกต้องได้ในเวลาเดียวกัน

หากต้องการกำหนดค่าโหมดโปร่งใส คุณต้อง:

1. ตั้งค่าโหมดโปร่งใสในการตั้งค่าพร็อกซี นี้จะกระทำใน พารามิเตอร์ http_port, ตัวอย่างเช่น:

Http_port ip:พอร์ตโปร่งใส

2. ห่อผู้ใช้กฎที่เกี่ยวข้องกับพอร์ตที่ต้องการโดยใช้ iptables:

Iptables -t nat -A PREROUTING -i incoming_interface_name -s local_network_subnet -p tcp --dport 80 -j REDIRECT --to-port squid_port ตัวอย่าง: iptables -t nat -A PREROUTING -i eth1 -s 10.0.0.0/24 - p tcp --dport 80 -j REDIRECT -- ไปยังพอร์ต 3128

ทั้งหมด. ผู้ใช้ที่ถูกห่อและไม่สงสัยสามารถเพลิดเพลินได้บนพร็อกซีเซิร์ฟเวอร์ของเรา

การแก้ไขปัญหา

ก่อนอื่นเลย, การวินิจฉัยการทำงานของปลาหมึกเป็น เรียกดูนิตยสารตั้งอยู่ใน /var/log/squid3- ปัญหาส่วนใหญ่ได้รับการแก้ไขด้วยวิธีนี้ หากวิธีนี้ไม่สามารถช่วยแก้ปัญหาได้ ให้สลับ daemon ไปที่โหมดดีบักด้วยคำสั่ง squid3 -k ดีบักปัญหาจะค้นหาได้ง่ายขึ้น จริงๆ แล้วท่อนปลาหมึกคืออะไร? ไฟล์บันทึกประกอบด้วยข้อมูลต่างๆ เกี่ยวกับโหลดและประสิทธิภาพของ Squid นอกเหนือจากการเข้าถึงข้อมูลแล้ว /pre ข้อผิดพลาดของระบบและข้อมูลเกี่ยวกับการใช้ทรัพยากร เช่น หน่วยความจำหรือพื้นที่ดิสก์ ก็ถูกเขียนลงบันทึกเช่นกัน

รูปแบบไฟล์บันทึกปลาหมึกเป็นสตริงของค่าที่คั่นด้วยช่องว่างตั้งแต่หนึ่งช่องขึ้นไป:

Time.ms response_time ip_src Squid_req_status/HTTP_status byte_snd วิธีการ URL ผู้ใช้ squid_her_status/ip_dst MIME

  • เวลา- เวลาในรูปแบบยูนิกซ์ (จำนวนวินาทีตั้งแต่ 00:00 1970.01.01)
  • นางสาว- มิลลิวินาทีแม่นยำถึง 3 หลัก
  • การตอบสนอง_เวลา- เวลาตอบสนอง, มิลลิวินาที
  • ip_src- ที่อยู่ IP ต้นทาง
  • Squid_req_status- สถานะคำขอปลาหมึก (เช่น TCP_HIT สำหรับวัตถุที่แคชไว้ก่อนหน้านี้ TCP_MISS หากวัตถุที่ร้องขอไม่ได้นำมาจากแคชในเครื่อง UDP_HIT และ UDP_MISS เหมือนกันสำหรับคำขอพี่น้อง)
  • HTTP_สถานะ- สถานะโปรโตคอล http (200 สำหรับความสำเร็จ, 000 สำหรับคำขอ UDP, 403 สำหรับการเปลี่ยนเส้นทาง, 500 สำหรับข้อผิดพลาด)
  • byte_snd- ส่งแบบไบต์เพื่อตอบสนองรวมทั้งส่วนหัว HTTP
  • วิธี- ขอวิธี GET หรือ POST
  • URL- URL ที่ร้องขอ
  • ผู้ใช้- ชื่อของผู้ใช้ที่ได้รับอนุญาต
  • squid_her_status- สถานะลำดับชั้นของปลาหมึก - ผลลัพธ์ของการสืบค้นไปยังแคชของพี่ชาย/ผู้ปกครอง
  • ip_dst- ที่อยู่ IP ของโหนดที่ร้องขอ
  • ไมม์- ประเภทละครใบ้

ลองดูตัวอย่าง:

1329732295.053 374 10.0.1.55 TCP_MISS/200 1475 รับ http://www.youtube.com/live_comments? - DIRECT/173.194.69.91 ข้อความ/xml

อย่างที่คุณเห็น มีการร้องขอที่ 1329732295.053 การตอบสนองจากเซิร์ฟเวอร์ระยะไกลคือ 374 ms โฮสต์ที่ร้องขอเพจมี IP 10.0.1.55 วัตถุที่ร้องขอไม่ได้ถ่ายโอนจากแคชในเครื่อง (TCP_MISS) เซิร์ฟเวอร์ รหัสตอบกลับคือ 200, 1475 ไบต์ถูกถ่ายโอนไปยังไคลเอนต์โดยใช้วิธี GET, มีการร้องขอ URL http://www.youtube.com/live_comments, ไม่ได้กำหนดชื่อผู้ใช้, ได้รับวัตถุโดยตรงจากเซิร์ฟเวอร์ที่มี IP 173.194.69.91 ข้อความถูกส่งเพราะว่า mime - ข้อความ/xml ที่นี่.

ประเด็นสุดท้ายเกี่ยวกับ squid3

ในบทความ ฉันได้ตรวจสอบหลักการพื้นฐานของพร็อกซีเซิร์ฟเวอร์ รวมถึงการตั้งค่าพื้นฐานที่อนุญาตให้คุณใช้งานแคชเซิร์ฟเวอร์แบบธรรมดา รวมถึงจัดระเบียบการทำงานของ squid ในโหมดโปร่งใส Squid รองรับตัวเลือกการอนุญาตหลายอย่าง (ผ่าน IP, ผ่าน LDAP, MySQL, NTLM ฯลฯ ) ความสามารถในการจำกัดแบนด์วิดท์ของช่องสัญญาณและควบคุมการเข้าถึงทรัพยากรอินเทอร์เน็ต ฉันจะพิจารณาการทำงานของ SQUID ด้วยวิธีการอนุญาตต่างๆ และตัวอย่างการควบคุมการรับส่งข้อมูลในบทความต่อไปนี้

ขั้นแรก ลองจินตนาการว่าเรามีเครือข่ายปกติที่เชื่อมต่ออินเทอร์เน็ตผ่านเกตเวย์เดียว (ติดตั้งพร็อกซีเซิร์ฟเวอร์ Squid ที่นี่) สมมติว่าที่อยู่ IP ของเกตเวย์คือ 192.168.1.1 คอมพิวเตอร์เครื่องอื่นๆ ทั้งหมดบนเครือข่ายจะได้รับการตั้งค่า IP ผ่าน DHCP คอมพิวเตอร์บนเครือข่ายนั้นแตกต่างกัน Windows XP/7, Ubuntu และใครจะรู้บ้าง คุณไม่สามารถจับตาดูทุกคนได้ แต่เราต้องนับปริมาณการรับส่งข้อมูลในขณะที่เร่งความเร็วการเข้าถึงอินเทอร์เน็ตเราต้องควบคุม (อย่างน้อยจาก "คนโง่") การเข้าถึงอินเทอร์เน็ต ฯลฯ Squid มีความสามารถอย่างกว้างขวางในการบันทึก จำกัด การเข้าถึง ฯลฯ ดังนั้นเราจึงต้องการ คอมพิวเตอร์ทุกเครื่องในเครือข่ายไม่สามารถข้ามพร็อกซีเซิร์ฟเวอร์ Squid ของเราได้ ดังนั้นไม่ว่าในกรณีใดเราจำเป็นต้องส่ง (ปิด, ส่งต่อ) คำขอของคอมพิวเตอร์ไคลเอนต์ผ่านพร็อกซีเซิร์ฟเวอร์ Squid เท่านั้น

การตั้งค่าการส่งต่อพอร์ต

เมื่อไคลเอนต์เครือข่ายท้องถิ่นเข้าถึงไซต์ภายนอก Squid จะต้องดักฟังคำขออย่างโปร่งใสไปยังไคลเอนต์และประมวลผลตามกฎ - ตัดสินใจว่าจะให้บริการเนื้อหาใด จะบันทึกกิจกรรมของผู้ใช้หรือไม่ และผู้ใช้รายนี้สามารถเข้าถึงอินเทอร์เน็ตได้หรือไม่ งานของเราคือทำให้แน่ใจว่าไม่จำเป็นต้องทำการตั้งค่าเบราว์เซอร์ใดๆ บนไคลเอนต์เอง ไคลเอนต์เชื่อมต่อกับเครือข่ายท้องถิ่นและทำงานผ่านพร็อกซีเซิร์ฟเวอร์ของเราแล้วและไม่ใช่วิธีอื่น เหล่านั้น. แม้ว่าบางคนต้องการเลี่ยงผ่านพร็อกซีของเรา พวกเขาก็จะไม่สามารถทำได้อีกต่อไปหากไม่มีกลอุบาย

การส่งต่อพอร์ตใน FreeBSD

หากติดตั้ง FreeBSD บนเกตเวย์ของเราและไฟร์วอลล์เริ่มต้นคือ IPFW ดังนั้นเพื่อดำเนินการนี้ เราจะต้องติดตั้งการส่งต่อพอร์ตบนเกตเวย์:

# เปลี่ยนเส้นทางไปยังพร็อกซีในเครื่อง
/sbin/ipfw เพิ่ม 0170 fwd 127.0.0.1,3128 tcp จาก 192.168.1.0/24 เป็น 80 ใด ๆ

  • 0170 - หมายเลขกฎ (ในกรณีของคุณอาจเป็นอะไรก็ได้)
  • fwd 127.0.0.1,3128 - โดยที่เราจะส่งแพ็กเก็ต - ในกรณีของเราไปยัง Squid อันเป็นที่รักของเราที่ทำงานบนพอร์ต 3128 บนเกตเวย์ - ...
  • จาก 192.168.1.0/24 - ... ส่งโดยคอมพิวเตอร์บนเครือข่ายท้องถิ่น...
  • ไปที่ 80 - ... ไปยังเว็บไซต์ใด ๆ บนอินเทอร์เน็ต

ตอนนี้ให้ความสนใจ! ต้องเพิ่มกฎนี้ก่อนกฎ NAT(การแปลที่อยู่เครือข่าย) จะได้รับคำขอนี้ ผมขออธิบายแบบไม่เชิงวิชาการสักหน่อย NAT ทำอะไร? ในกรณีของเรา NAT จะเปลี่ยนที่อยู่ต้นทาง (แทนที่ IP ในเครื่องของลูกค้าด้วย IP ภายนอกของเกตเวย์ และจดจำว่าคำขอมาจากไคลเอนต์ภายในใด เพื่อให้ Squid ประมวลผลคำขอจากไคลเอนต์ได้ ไม่จำเป็น เพื่อแปลงอะไรก็ได้ - มันสามารถจัดการมันเองได้ ดังนั้น Squid จะต้องได้รับแพ็คเกจในรูปแบบดั้งเดิมและตัดสินใจด้วยตัวเองว่าจะทำอย่างไรต่อไป

นอกจากนี้ NAT และ Squid ยังคงต่างกัน และแพ็กเก็ตที่ส่งถึง เช่น 2.3.4.5:80 ไม่มีข้อมูลเกี่ยวกับวิธีการเข้าถึง Squid (ไปยังพอร์ต 3128 ของเกตเวย์) และแพ็กเก็ตจะถูกประมวลผลโดย NAT เท่านั้น ปลาหมึกจะไม่มีวันเห็นแพ็คเกจ ดังนั้นงานของเราคือมอบแพ็กเก็ต Squid ที่เบราว์เซอร์ของผู้ใช้ส่งมา ฉันจะอธิบายโดยใช้ส่วนหนึ่งของการกำหนดค่า ipfw เป็นตัวอย่าง:

Cmd="ipfw -q add" $skip="skipto 5000" pif="xl1" #external interface... # เปลี่ยนเส้นทางไปยังพร็อกซีในเครื่อง $cmd 0170 fwd 127.0.0.1,3128 tcp จาก 192.168.1.0/24 เป็น 80 ใด ๆ # NAT $cmd 0200 โอน natd ip จากที่ใดก็ได้ไปยังที่ใดก็ได้ในผ่าน $pif # อนุญาตคำสั่ง Keep-state $cmd 0201 check-state # POP3/POP3S $cmd 0325 $skip tcp จากใด ๆ ไปยัง 110 ออกผ่าน $pif การตั้งค่า keep-state $cmd 0326 $skip tcp จากใด ๆ ไปยัง 995 ใด ๆ ออกผ่านการตั้งค่า $pif Keep-state # WWW (HTTP/HTTPS/..) $cmd 0350 $skip tcp จากใด ๆ ไปยัง 80 ใด ๆ ออกผ่านการตั้งค่า $pif Keep-state $cmd 0352 $skip tcp จากใด ๆ ไปยัง 443 ใด ๆ ออกผ่านการตั้งค่า $pif Keep-state # นี่คือข้ามไป ตำแหน่งสำหรับกฎสถานะขาออก $cmd 5,000 โอน natd ip จากที่ใดก็ได้ไปยังที่ใดก็ได้ผ่าน $pif ...

ในการกำหนดค่าด้านบน คำขอเปิดไซต์จะได้รับการประมวลผลตามกฎ 0170 ก่อน ซึ่งจะล้อมคำขอไว้ใน Squid Squid (เช่นเดียวกับโปรแกรมอื่น ๆ ) ยังตอบสนองความต้องการของไฟร์วอลล์ - เฉพาะกฎ 0170 เท่านั้นที่ใช้ไม่ได้ แต่กฎ 0350 อนุญาตให้ Squid ส่งคำขอไปยังอินเทอร์เน็ต หากต้องการเข้าถึงอินเทอร์เน็ตโดยไม่ต้องใช้ Squid คุณจะต้องใส่เครื่องหมายความคิดเห็นในกฎ 0170 ในกรณีนี้ Squid จะไม่ได้รับสิ่งใดเลย และคำขอเบราว์เซอร์ทั้งหมดจากเครือข่ายท้องถิ่นจะได้รับการประมวลผลตามกฎ 0350

การส่งต่อพอร์ตใน Linux

หากติดตั้ง Linux บนเกตเวย์ของเรา คำสั่งด้านบนจะมีลักษณะดังนี้:

iptables -t nat -A การเตรียมการล่วงหน้า -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

โดยที่ eth0 คืออินเทอร์เฟซภายใน

มิฉะนั้น ความหมายของการเปลี่ยนเส้นทาง ฯลฯ จะคล้ายกับที่อธิบายไว้สำหรับ ipfw เฉพาะกฎสำหรับการสร้างไฟล์การกำหนดค่า ipfw และ iptables เท่านั้นที่แตกต่างกัน สามารถศึกษาตัวอย่างของกฎ iptables ได้

ที่แยกออก ตอนนี้เราต้องสั่ง Squid ว่าควรประมวลผลแพ็กเก็ตที่ไม่ได้ถูกกำหนดไว้ตั้งแต่แรก มาเปิดโหมดโปร่งใส Squid กันดีกว่า

ปลาหมึกโปร่งใสใน squid.conf

ตอนนี้สิ่งที่เหลืออยู่คือการกำหนดค่า Squid ในโหมดที่มองไม่เห็นเช่น รับแพ็กเก็ตที่ส่งต่อโดยอัตโนมัติและประมวลผล ใน Squid เวอร์ชันต่างๆ ทีมต่างๆ มีหน้าที่รับผิดชอบในเรื่องนี้ การตั้งค่า Squid เวอร์ชัน 2.6.* มีลักษณะดังนี้:

http_port 127.0.0.1:3128 transparent # Squid ทำงานในโหมดโปร่งใส

ตรวจสอบไฟล์การกำหนดค่า squid.conf อย่างละเอียดเพื่อดูคำสั่งที่ซ้ำกัน - ฉันใช้เวลาสองชั่วโมงในการหันไปที่ฟอรัมเพื่อขอความช่วยเหลือเกี่ยวกับ "ปัญหาที่ไม่ได้มาตรฐาน" ในขณะที่ฉันไม่ได้ใส่ใจกับความจริงที่ว่าบรรทัดแรกเปิดใช้งาน โหมดการทำงานของปลาหมึกปกติ:

http_port 3128 # Squid ใช้งานได้ปกติ

เกือบทุกอย่าง. รีสตาร์ท Squid ใช้กฎไฟร์วอลล์ด้วยคำสั่งการส่งต่อพอร์ตที่เพิ่มเข้ามา - ขณะนี้คอมพิวเตอร์ทุกเครื่องในเครือข่ายท้องถิ่นที่เข้าถึงอินเทอร์เน็ตผ่านเกตเวย์ของเรา จะไม่สามารถข้าม Squid ของเราได้ ซึ่งกลายเป็นความโปร่งใสสำหรับทุกคน ตอนนี้ลองตั้งค่าพร็อกซีในคอมพิวเตอร์บางเครื่อง - คอมพิวเตอร์ไม่ควรสามารถเข้าถึงอินเทอร์เน็ตได้ ดูเหมือนว่าจะเป็นเช่นนั้น หากคุณมีคำถามหรือคำแนะนำ เรายินดีรับฟังความคิดเห็น โดยเฉพาะอย่างยิ่งเมื่อพิจารณาว่าการตั้งค่า Squid และการส่งต่อพอร์ตที่โปร่งใส โดยทั่วไปแล้วถือเป็นหัวข้อที่ "ยุ่งยาก" ในฟอรัม

ข้อดีและข้อเสีย

ข้อดีประการหนึ่งคือความมั่นใจอย่างยิ่งว่าคำขอทั้งหมดบนพอร์ต 80 (มาตรฐานสำหรับเว็บ) จะถูกประมวลผลโดย Squid ดังนั้นจะมีบันทึก สถิติสำหรับเจ้านาย และไม่จำเป็นต้องดำเนินการและกำหนดค่าทุกอย่างด้วยตนเอง

ข้อเสีย ได้แก่ :

  • การไม่สามารถ (อย่างน้อยก็ด้วยวิธีง่ายๆ) ในการอนุญาตให้ผู้ใช้เข้าถึงอินเทอร์เน็ต
  • หาก Squid ขัดข้องกะทันหัน การเข้าถึงไซต์ต่างๆ จะหยุดลง ดังนั้นผู้ดูแลระบบต้องแน่ใจว่าทุกอย่างจะเรียบร้อยหรือสามารถเปลี่ยนการกำหนดค่าไฟร์วอลล์จากระยะไกลหรือเขียนสคริปต์ที่จะตรวจสอบโดยอัตโนมัติว่า Squid ค้างอยู่ที่พอร์ต 3128 หรือไม่ และหากไม่เป็นเช่นนั้นให้เปิดใช้งาน

การกำหนดค่า Squid ในโหมดโปร่งใสเสร็จสมบูรณ์ นั่นคือทั้งหมดที่ตอนนี้

Squid เป็นแพ็คเกจอันทรงพลังที่ใช้การร้องขอผ่านพร็อกซีและมีความสามารถที่หลากหลาย บนเครือข่ายท้องถิ่น มักใช้เป็นพร็อกซีแคชแบบโปร่งใส มากำหนดค่าคุณสมบัติหลัก 3 ประการของปลาหมึกตามลำดับกัน

1. ขั้นแรกให้ติดตั้ง squid (สำหรับ Debian 6)

Apt-get ติดตั้ง squid3

2. ไฟล์การกำหนดค่า squid.conf อยู่ใน /etc/squid3/ มีประมาณ 5.5 พันบรรทัด แต่มันก็ไม่ได้น่ากลัวขนาดนั้น ส่วนใหญ่ของไฟล์นี้คือความคิดเห็นโดยละเอียดเกี่ยวกับการตั้งค่า ขึ้นอยู่กับคุณที่จะตัดสินใจว่าจะสะดวกกว่าในการเปลี่ยนแปลงไฟล์อย่างไร คุณสามารถกำจัดทุกสิ่งที่ไม่จำเป็นในไฟล์ได้ด้วยวิธีนี้

# ไปที่โฟลเดอร์ squid cd /etc/squid3 # ทำสำเนาสำรองของไฟล์การตั้งค่า cp squid.conf squid.conf_backup # รับจาก squid.conf_backup ไฟล์ที่สะอาดพร้อมการตั้งค่าโดยไม่มีความคิดเห็นใน squid.conf cat squid.conf_backup | egrep -v "^#|^$" > squid.conf

และรับไฟล์ "เปล่า" ที่มีเนื้อหาดังต่อไปนี้:

ตัวจัดการ Acl โปรโต cache_object acl localhost src 127.0.0.1/32::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32::1 acl พอร์ต SSL_ports 443 acl พอร์ต Safe_ports 80 # http acl พอร์ต Safe_ports 21 # ftp acl พอร์ต Safe_ports 443 # https acl พอร์ต Safe_ports 70 # gopher acl พอร์ต Safe_ports 210 # wais acl พอร์ต Safe_ports 1025-65535 # พอร์ตที่ไม่ได้ลงทะเบียน acl Safe_ports พอร์ต 280 # http-mgmt acl Safe_ports พอร์ต 488 # gss-http acl Safe_ports พอร์ต 591 # filemaker acl Safe_ports พอร์ต 777 # มัลติ http acl วิธีเชื่อมต่อ CONNECT http_access อนุญาตผู้จัดการ localhost http_access ปฏิเสธผู้จัดการ http_access ปฏิเสธ !Safe_ports http_access ปฏิเสธ CONNECT !SSL_ports http_access อนุญาต localhost http_access ปฏิเสธ http_port 3128 hierarchy_stoplist cgi-bin ทั้งหมด ? coredump_dir /var/spool/squid3รีเฟรช_รูปแบบ ^ftp: 1440 20% 10080 รีเฟรช_รูปแบบ ^โกเฟอร์: 1440 0% 1440 รีเฟรช_รูปแบบ -i (/cgi-bin/|\?) 0 0% 0 รีเฟรช_รูปแบบ 0 20% 4320

สิ่งที่เหลืออยู่คือทำการเปลี่ยนแปลงที่จำเป็นในบรรทัด ตัวเลือกที่สองคือแก้ไขไฟล์ทั้งหมดโดยไม่ต้องล้างข้อมูล ซึ่งค่อนข้างง่ายหากคุณรู้วิธีใช้การค้นหาในโปรแกรมแก้ไข vi ในกรณีนี้ คุณจะมีความคิดเห็นที่เป็นประโยชน์มากมายเกี่ยวกับการตั้งค่าเพื่อช่วยเหลือคุณ

หากต้องการค้นหาข้อความในตัวแก้ไข vi ให้กดปุ่ม “/” หากคุณอยู่ในโหมดแก้ไข คุณต้องออกจากโหมดนี้เพื่อส่งคำสั่งไปยังโปรแกรมแก้ไขโดยกด "Esc" เราได้รับลำดับของการกระทำดังต่อไปนี้: “/” > “ป้อนคำค้นหา” > “Enter”

ตอนนี้เราแก้ไขไฟล์และทำการตั้งค่าพื้นฐาน หากไม่มีบรรทัดที่จำเป็น ให้เพิ่มหรือไม่ใส่เครื่องหมายข้อคิดเห็น

Vi /etc/squid3/squid.conf # อนุญาตให้เข้าถึงพร็อกซีจากเครือข่ายที่พบเท่านั้น acl localnet src 172.16.0.0/24 http_access อนุญาต localnet http_access อนุญาต localhost # โดยค่าเริ่มต้น พอร์ตการทำงานของพร็อกซีคือ 3128 # เนื่องจากพร็อกซีของเราจะเป็น โปร่งใสเราระบุ # นี้รวมถึงที่อยู่ของอินเทอร์เฟซด้วยพอร์ตที่พร็อกซีจะทำงาน # คำขอใน iptables จะถูกเปลี่ยนเส้นทางไปยังพอร์ตเดียวกัน http_port 172.16.0.1:3128 โปร่งใส

3. เราจัดให้มีการแคชคำขอ

# การตั้งค่าไดเร็กทอรีแคชและกำหนดค่า # ufs - วิธีการแคชไฟล์บนดิสก์ # /var/spool/squid3 - โฟลเดอร์แคช # 5000 - ขนาดแคชเป็นเมกะไบต์ # 16 - จำนวนโฟลเดอร์ระดับที่ 1 ในแคช # 256 - หมายเลข ของโฟลเดอร์ระดับที่ 2 ในแคช cache_dir ufs /var/spool/squid3 5000 16 256 # เราจะจำกัดขนาดขั้นต่ำของไฟล์แคชเพื่อให้ง่ายขึ้นสำหรับฮาร์ดไดรฟ์ # หรือคุณสามารถสูญเสียจุดทั้งหมดของแคชได้หาก ทำงานช้า maximum_object_size 2 KB # เราจะจำกัดขนาดสูงสุด maximum_object_size 61440 KB ด้วย

4. Squid ซึ่งกำหนดค่าตามค่าเริ่มต้น จะเพิ่มส่วนหัวหลายรายการในคำขอ http ในกรณีนี้ สองส่วนหัวแรกจะมี IP ของไคลเอ็นต์ (หรือหลาย IP ในกรณีของพร็อกซีเชน) ถ้าเราไม่ต้องการสิ่งนี้ เราไม่ต้องการเปิดเผย IP ภายในของพื้นที่ท้องถิ่นของเรา ดังนั้นการทำให้ปลาหมึกไม่เปิดเผยตัวตนนั้นง่ายมาก

ผ่านการปิดการส่งต่อ_เพื่อลบ

หลังจากตั้งค่าทั้งหมดเสร็จแล้ว ก็ควรตรวจสอบการไม่เปิดเผยตัวตนของคำขอบนหน้า http://checker.samair.ru หากทุกอย่างถูกต้องผลลัพธ์จะเป็นข้อความ “ดำเนินการต่อ: คุณกำลังใช้งานระดับสูงที่ไม่เปิดเผยตัวตน (ยอด) พร็อกซี”

การดำเนินการเปลี่ยนแปลงไฟล์จะเสร็จสมบูรณ์ ในที่สุด squid.conf ควรมีลักษณะเช่นนี้

ตัวจัดการ Acl proto cache_object acl localhost src 127.0.0.1/32::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32::1 acl localnet src 172.16.0.0/24 # RFC1918 เครือข่ายภายในที่เป็นไปได้ acl SSL_ports พอร์ต 443 acl Safe_ports พอร์ต 80 # http acl พอร์ต Safe_ports 21 # ftp acl พอร์ต Safe_ports 443 # https acl พอร์ต Safe_ports 70 # gopher acl พอร์ต Safe_ports 210 # wais acl พอร์ต Safe_ports 1025-65535 # พอร์ตที่ไม่ได้ลงทะเบียน acl Safe_ports พอร์ต 280 # http-mgmt acl Safe_ports พอร์ต 488 # gss-http acl พอร์ต Safe_ports 591 # filemaker acl พอร์ต Safe_ports 777 # หลาย http acl วิธีเชื่อมต่อ เชื่อมต่อ http_access อนุญาตผู้จัดการ localhost http_access ปฏิเสธผู้จัดการ http_access ปฏิเสธ !Safe_ports http_access ปฏิเสธ เชื่อมต่อ !SSL_ports http_access อนุญาต localnet http_access อนุญาต localhost http_access ปฏิเสธ http_port ทั้งหมด 172.16.0.1: 3128 ลำดับชั้นโปร่งใส cgi-bin ? cache_dir ufs /var/spool/squid3 5000 16 256 ขั้นต่ำ _object_size 2 KB maximum_object_size 61440 KB coredump_dir /var/spool/squid3 รีเฟรช_รูปแบบ ^ftp: 1440 20% 10080 รีเฟรช_รูปแบบ ^โกเฟอร์: 1440 0% 1440 รีเฟรช_รูปแบบ -i (/cgi-bin/| \?) 0 0% 0รีเฟรช_รูปแบบ 0 20% 4320 ผ่าน ปิดการส่งต่อ_เพื่อลบ

หากต้องการใช้การตั้งค่า ให้หยุดปลาหมึก

บริการปลาหมึก3หยุด

เตรียมไดเร็กทอรีแคช squid

ปลาหมึก3 -z

การเปิดตัวพร็อกซี

บริการ squid3 เริ่มแล้ว

หากคุณไม่ได้เปลี่ยนการตั้งค่าที่เกี่ยวข้องกับแคชพร็อกซี คุณสามารถเรียกใช้คำสั่งเดียวได้ การตั้งค่าจะได้รับการยอมรับโดยอัตโนมัติโดยไม่ต้องรีสตาร์ท squid

Squid3 -k กำหนดค่าใหม่

5. สิ่งที่เหลืออยู่คือการกำหนดค่าความโปร่งใสของพร็อกซี สิ่งนี้ทำให้แน่ใจได้ว่าผู้ใช้เครือข่ายท้องถิ่นสามารถทำงานผ่านพรอกซีโดยไม่มีใครสังเกตเห็น เช่น ผู้ใช้ไม่จำเป็นต้องกำหนดค่าโปรแกรมให้ทำงานกับพรอกซี มั่นใจในความโปร่งใสโดยเพียงเปลี่ยนเส้นทางคำขอ http จากพอร์ต 80 ไปยังพอร์ตพร็อกซีเซิร์ฟเวอร์โดยใช้ไฟร์วอลล์ iptables และเปิดใช้งานโหมดพร็อกซีโปร่งใสใน squid เอง เราทำการเปลี่ยนแปลงการตั้งค่าปลาหมึกด้านบน เพิ่มอีกหนึ่งบรรทัดในกฎ iptables:

Iptables -t nat -A การเตรียมการล่วงหน้า -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

อย่าลืมระบุพารามิเตอร์อินเทอร์เฟซที่ต้องการให้พร็อกซีทำงาน: -i eth0 สิ่งนี้จะช่วยคุณประหยัดจากปัญหาในการเข้าถึงเว็บเซิร์ฟเวอร์จากอินเทอร์เน็ต หากมีอินเทอร์เฟซที่ใช้งานอยู่มากกว่าหนึ่งอินเทอร์เฟซ หากมีบนเซิร์ฟเวอร์นี้ในอนาคต และเพื่อความปลอดภัยของพร็อกซีด้วย