前些時在網上看到了張微波的《用squid再次瘋狂加速你的web》一文後,我按原文在我的rhas 3.0上安裝了一遍發現不能訪問本地web服務器加之這篇文章缺少了相應的操作細節,因此我就在原文的基礎上進行了補充和完善,希望大家都來關心squid的應用。
一、安裝squid-2.5
groupadd squid
useradd ?g squid squid
rpm ?ivh squid-2.5.STABLE3-3.3E.i386.rpm
二、設置squid.conf文檔:
#設定SQUID的代理端口 (加上IP地址,Squid就不會監聽外部的網絡接口)
http_port 192.168.0.1:3128
#配置選項是服務器管理者的電子郵件
cache_mgr
[email protected]
#設定錯誤文檔
error_Directory /usr/share/squid/errors/Simplify_Chinese
#設定電信公用DNS:
dns_nameservers 202.99.160.68 202.99.168.8
#設定標志主機名
visible_hostname nero.3322.org
#設定http1.1協議支持
httpd_accel_uses_host_header on
httpd_accel_host virtual
#是否讓squid代理本地的web服務
httpd_accel_with_proxy on
#允許所有主機通過代理服務器上網
http_Access allow all
#指定Squid可以使用的RAM
cache_mem 20 MB
#緩存文件的最大和最小值
maximum_object_size 4096 KB
minimum_object_size 0 KB
maximum_object_size_in_memory 30 KB
minimum_object_size_in_memory 0 KB
#設定squid的磁盤緩存目錄(我們就是要在這個目錄上做些手腳)
cache_dir ufs /tmp 100 16 256
#指定進行空間交換的空占比(緩存數值超過或低於某個百分比時和交換空間進行數據交換)
cache_swap_low 85
cache_swap_high 90
#被緩存服務器的port
httpd_accel_port 80
三、建立squid的高速緩存目錄
大家知道通常情況下squid的緩存目錄是建立在磁盤上的,這時磁盤的I/O就限制了squid性能的發揮,同時我們知道RAM是計算機中最快的存儲單元,我們現在就關注一下怎樣把squid的緩存目錄放到系統RAM中去。我們注意到在Linux的文件系統中/dev/shm是駐留在RAM 中的一個特殊的文件系統。好了我們的思路有了:把/dev/shm綁定到squid的緩存目錄上。下面是操作的過程。
mkdir /dev/shm/tmp
chmod 1777 /dev/shm/tmp
mount --bind /dev/shm/tmp /tmp
上面的三個命令完成了目錄的建立和綁定,但是我們reboot後就得重復上面的過程重新建立和綁定目錄並且必須是在squid啟動以前進行。為了解決這個問題我是這樣作的,把三個命令加到squid的啟動腳本中。
Vi /etc/init.d/squid
====================== squid =====================
PATH=/usr/bin:/sbin:/bin:/usr/sbin
eXPort PATH
#
mkdir /dev/shm/tmp
chmod 1777 /dev/shm/tmp
mount --bind /dev/shm/tmp /tmp
squid ?z
#
# Source function library.
====================== squid =====================
chkconfig squid on
這樣就能在我們每次開機的時候就能自動完成任務了。同時這樣的設置對PHP的性能也有一定的提高
四、我的防火牆FOR ADSL
#!/bin/bash
# Do iptables based masquerading and firewalling.
# lllzqq. 02/28/2004
export PATH=/sbin:/usr/sbin:/bin:/usr/bin
modprobe iptable_nat
modprobe ip_nat_FTP
modprobe ip_nat_irc
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo 0 >/proc/sys/net/ipv4/conf/all/accept_source_route
echo 0 >/proc/sys/net/ipv4/conf/all/accept_redirects
echo 1 >/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo 1 >/proc/sys/net/ipv4/conf/all/log_martians
echo 1 >/proc/sys/net/ipv4/ip_forward
/sbin/iptables -F INPUT
/sbin/iptables -F FORWARD
/sbin/iptables -X
/sbin/iptables -Z
## Allow forwarding through the internal interface
/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
## Do masquerading through ppp0
/sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
## Loopback - Allow unlimited traffic
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT
## SYN-Flooding Protection
iptables -N syn-flood
iptables -A INPUT -i ppp0 -p tcp --syn -j syn-flood
iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A syn-flood -j DROP
## Make sure that new TCP connections are SYN packets
/sbin/iptables -A INPUT -i ppp0 -p tcp ! --syn -m state --state NEW -j DROP
## SQUID
iptables -t nat -A PREROUTING -i eth0 -p tcp -s 0/0 --dport 80 -j REDIRECT --to-ports 3128
## HTTP
/sbin/iptables -A INPUT -i ppp0 -p tcp -s 0/0 --sport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -i ppp0 -p tcp -s 0/0 --sport 443 -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -i ppp0 -p tcp -d 0/0 --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -i ppp0 -p tcp -d 0/0 --dport 443 -j ACCEPT
## DNS
/sbin/iptables -A INPUT -i ppp0 -p udp -s 0/0 --sport 53 -m state --state ESTABLISHED -j ACCEPT
/sbin/iptables -A INPUT -i ppp0 -p udp -d 0/0 --dport 53 -j ACCEPT
## IP packets limit
/sbin/iptables -A FORWARD -f -m limit --limit 10/s --limit-burst 10 -j ACCEPT
/sbin/iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 3 -j ACCEPT
/sbin/iptables -A INPUT -i ppp0 -p icmp -j DROP
## FTP
/sbin/iptables -A INPUT -i ppp0 -p tcp --dport 21 -j ACCEPT
/sbin/iptables -A INPUT -i ppp0 -p tcp --dport 20 -j ACCEPT
/sbin/iptables -A INPUT -i ppp0 -p tcp --dport 30000:40000 -j ACCEPT
## SSH
/sbin/iptables -A INPUT -i eth0 -m mac --mac-source 00:F0:4B:92:B7:87 -p tcp --dport 22 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 22 -j DROP
## MAIL
/sbin/iptables -A INPUT -i ppp0 -p tcp --dport 25 -j ACCEPT
/sbin/iptables -A INPUT -i ppp0 -p tcp --dport 110 -j ACCEPT
## Anything else not allowed
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -i ppp0 -j DROP
五、附錄:squid的一些常用功能的配置說明
# 允許某一特定網段通過代理服務器上網:
acl one_clients src 192.168.0.0/255.255.255.0
http_access allow one_clients
# 利用ARP地址標示客戶:
acl OK arp 00:20:ed:39:48:b3 00:01:02:98:87:88 00:10:60:73:CE:BD
http_access allow OK
# cache_dir ufs /var/spool/Squid 100 16 256 指定Squid用來存儲對象的交換空間的大小及其目錄結構。100是交換空間大小,指100MB,16、256分別是一級目錄、二級目錄數量。
# 限制外網電腦使用代理,只允許IP為192.168.0.2~192.168.0.255的機器訪問。
acl our_clients src 192.168.0.0/255.255.255.0
acl other_clients src 0.0.0.0/0.0.0.0
http_access allow our_clines
http_access deny other_clients (禁止其他用戶通過本機上網)
# 限制使用時間。只允許IP為192.168.1.1~192.168.1.255的機器在每周一到周五的7∶00到17∶00使用。如果不限制周一到周五,把下面第二行“MTWHF”去掉。“!”表示邏輯非。
acl allow_time time MTWHF 8:30-12:00 14:00-17:30
http_access allow work_clients allow_time
http_access deny !work_clients
# 限制用戶下載文件的類型如:.avi .mp3
acl mmxfile urlpath_regex ?i \.mp3$ \.avi$ (-i參數忽略大小寫如:mp3=MP3)
http_access deny mmxfile
#
# 限制外網電腦使用代理,只允許IP為192.168.0.2~192.168.0.255的機器訪問。
acl our_clients src 192.168.0.0/255.255.255.0
acl other_clients src 0.0.0.0/0.0.0.0
http_access allow our_clines
http_access deny other_clients (禁止其他用戶通過本機上網)
# 限制使用時間。只允許IP為192.168.1.1~192.168.1.255的機器在每周一到周五的7∶00到17∶00使用。如果不限制周一到周五,把下面第二行“MTWHF”去掉。“!”表示邏輯非。
acl allow_time time MTWHF 8:30-12:00 14:00-17:30
http_access allow work_clients allow_time
http_access deny !work_clients
# 限制用戶下載文件的類型如:.avi .mp3
acl mmxfile urlpath_regex ?i \.mp3$ \.avi$ (-i參數忽略大小寫如:mp3=MP3)
http_access deny mmxfile
#
# 限制使用時間。只允許IP為192.168.1.1~192.168.1.255的機器在每周一到周五的7∶00到17∶00使用。如果不限制周一到周五,把下面第二行“MTWHF”去掉。“!”表示邏輯非。
acl allow_time time MTWHF 8:30-12:00 14:00-17:30
http_access allow work_clients allow_time
http_access deny !work_clients
# 限制用戶下載文件的類型如:.avi .mp3
acl mmxfile urlpath_regex ?i \.mp3$ \.avi$ (-i參數忽略大小寫如:mp3=MP3)
http_access deny mmxfile
#