Squid cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理上网。Squid主要设计用于在Unix一类系统运行。
Squid的发展历史相当悠久,功能也相当完善。除了HTTP外,对于FTP与HTTPS的支援也相当好,在3.0 测试版中也支援了IPv6。
你可以测试:curl -I www.163.com显示下面的X-Via .....(Cdn Cache Server v2.0 sxbj)显示其所用的代理服务器的名称。
实验1:(1)首先:Squid 基本配置
yum install squid -­y
#使用 tmpfs 动态文件系统加速 squid
mkdir ­-m 1777 /dev/shm/squid
(或者是chown squid.squid squid 然后chmod 750 squid/ 只要是squid对/dev/shm/squid具有7的权限即可。)
mount --­­bind /dev/shm/squid /var/spool/squid
service squid start

(2) df -h 可以用来显示: /dev/shm。
ll /var/spool/squid是指的默认的缓存路径。
/etc/init.d/squid start
此时正常的来说:ll /var/spool/squid下面会有一些文件,如果没有则需要修改文件:vi /etc/squid/squid.conf
cache_dir ufs /var/spool/squid 100 16 256
的注释打开
正常你会在ll /var/spool/squid下发现16个目录,然后在每个目录下有256个子目录。
同样的在/dev/shm/squid 也是那样子的哦!
实验2:步骤(1)
[root@server40 shm]# /etc/init.d/squid status
squid (pid 2449) is running...
2011/11/20 19:05:42| WARNING cache_mem is larger than total disk cache space!

(2)vi /etc/squid/squid.conf

 
  
  1. #http_access allow localnet 
  2. http_access allow localhost 
  3. cache_mem 64 MB 

([root@Desktop46 00]# squid -k reconfigure
2012/04/01 16:21:52| WARNING: No units on 'cache_mem 64MB ', assuming 64.00 bytes
重启的过程中出现以上错误,是因为64和MB之间要有空格的,否则会有上述错误       64 MB!!!!!!!!!!!!!!!!!!)
/etc/init.d/squid restart(OR squid -k reconfigure不报错就是对的。)

(3)打开火狐:Edit-->Preferences-->Advance->Network-->Setting-->Manual proxy configuration:HTTP Proxy:192.168.0.140 post:3128(不用选择use this proxy server for all protocols )(假设以上设置全是在192.168.0.140上进行设置的。)
此时你输入网址:www.baidu.com
会出现:

Generated Sun, 20 Nov 2011 11:25:57 GMT by server40.example.com (squid/3.1.4)
着说明你拒绝成功!
实验三:
(1)在server40(192.168.0.140) 上:
vi /etc/squid/squid.conf
acl desktop38 src 192.168.0.38
http_access deny desktop38
(用该句来替换下面的http_access deny all这一句话,大约在59行)
意思是你拒绝desktop38这台主机以140为代理服务器。
(2)squid -k reconfigure(重新读入文件)
(3)此时在desktop38(192.168.0.38主机上)打开火狐:Edit-->Preferences-->Network-->Setting-->Manual proxy configuration:HTTP Proxy:192.168.0.140
此时拒绝访问,而你如果将上述两条注释之后,那么你就可以访问了。
实验四:
(1)在server40(192.168.0.140) 上:
vi /etc/squid/squid.conf
acl desktop38 src 192.168.0.38
acl cleantime time MTWHF 15:00-18:00
(意思在周一到周五的这段时间在15:00-18:00的时候要拒绝访问。MTWHF分别代表周一周二周三。。。。)
http_access deny desktop38 cleantime
意思是你拒绝desktop38这台主机以140为代理服务器。
(2)squid -k reconfigure(重新读入文件)
(3)此时在desktop38(192.168.0.38主机上)打开火狐:Edit-->Preferences-->Network-->Setting-->Manual proxy configuration:HTTP Proxy:192.168.0.140
倘若现在的时间是在:15:00-18:00之间的话,那么你不可以访问,倘若不在那个时间段,你是可以访问(另外要注意一点两个机子的时间必须是一致的。即192.168.0.140(部署squid的服务器)和192.168.0.38(以192.168.0.140为代理服务器的主机)上的时间应该是一致的,改动在/etc/ntp.conf中进行修改的哦!)
实验五:
#站点屏蔽
echo 151.11.56.58 > /etc/squid/sexip
echo .sex.com > /etc/squid/sexdn
echo www.playbody.com > /etc/squid/sexurl
echo sex > /etc/squid/sextag
chown root:squid /etc/squid/sex{ip,dn,url,tag}
chmod 640 /etc/squid/sex{ip,dn,url,tag}  

vim  /etc/squid/squid.conf

 
  
  1. acl sexip dst "/etc/squid/sexip" (sexip 记录不法 ip 地址) 
  2. acl sexdn dstdomain "/etc/squid/sexdn" (sexdn记录不法域名) 
  3. acl sexurl url_regex "/etc/squid/sexurl" (sexurl记录不法网址) 
  4. acl sextag urlpath_regex "/etc/squid/sextag" (sextag记录不法关键字) 
  5. http_access deny sexdn 
  6. http_access deny sexip 
  7. http_access deny sexurl 
  8. http_access deny sextag 

(注意那个deny的要在allow之前哦,否则会被放进来的!)
测试:假设你现在客户端的IP:192.168.0.38时,设置以140为代理squid。那么你现在在192.168.0.38这台机子上:访问:151.11.56.58, www.souhu.sex.com www.playbody.com,或者有sex关键字的时候都是拒绝的,但如果你是访问这个www.baidu.com则是可以的哦!(因为你没有写关于防止www.baidu.com的任何信息)
实验6:#限制访问端口

 
  
  1. acl SSL_ports port 443 
  2. acl Safe_ports port 80 
  3. acl Safe_ports port 21 
  4. acl CONNECT method CONNECT 
  5. http_access deny !Safe_ports 
  6. http_access deny CONNECT !SSL_ports 

意思就是拒绝非safe_ports.也就是允许21,80这两个端口进行访问,拒绝connect。
实验7:
squid 反向代理加速 web
#监听服务器 192.168.0.254 的 80 端口,透明代理,支持域名和 IP 的虚拟主机
http_port 192.168.0.254:80 transparent vhost vport
#代理到本机的 80 端口的服务,仅仅做为原始内容服务器(这样子不用防火墙参与,即可完成 web 反向代理加速)
cache_peer 127.0.0.1 parent 80 0 no­query originserver
测试:你在以该机子为服务器的客户端:输入类似:www.baidu.com,那么你会显示:server40,
实验8:
在192.168.0.140主机上:squid 反向代理对后端进行负载均衡

 
  
  1. cache_peer 192.168.0.38 parent 80 0 no­query originserver name=a round­-robin 
  2. cache_peer 192.168.0.40 parent 80 0 no­query originserver name=b round­-robin 
  3. cache_peer_domain a www.example.com 
  4. cache_peer_domain b www.example.com 

(也可以这两条合在一起为:cache_peer_domain a b www.example.com)
在这个例子中 www.example.com 就是 squid 服务器的地址 squid 使用的是 RR 的方法轮询,从后端的实际服务器中
挑选一台进行抓取,同时会对后端的健康状态进行检查,如果后端服务器 down 掉,那么 squid 会从剩余的 origin 服
务器中抓取数据
测试:你在192.168.0.38和192.168.0.40这两个主机上开启httpd /etc/init.d/httpd restart
然后你在一个客户端上输入: www.example.com 的时候你点击刷新:会发现desktop40.example.com和desktop38.example.com(写在/var/www/html/index.html里面)
当你关闭一台机子上的httpd的时候会只显示一台机子上。
实验9:
squid 用户认证
htpasswd /etc/squid/passwd test(test不一定是系统用户)
chown root:squid /etc/squid/passwd
chmod 640 /etc/squid/passwd
   vim /etc/squid/squid.conf

 
  
  1. auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/passwd 
  2. auth_param basic children 5 
  3. auth_param basic realm Squid-Home Proxy Server 
  4. auth_param basic credentialsttl 2 hours 
  5. auth_param basic casesensitive off 
  6. acl INTERNAL src 192.168.0.0/24
  7. acl AUTHUSERS proxy_auth REQUIRED 

 acl INTERNAL src 192.168.0.0/24(该条的意思是当这个网段的用户主机将squid服务器作为代理服务器的时候都将通过密码进入,如果为acl INTERNAL src 192.168.0.90的时候就是在主机90上以squid作为代理服务器的时候是要通过密码进入的。

 
  
  1. http_access allow INTERNAL AUTHUSERS(该条应该在下面几条下面) 
  2. http_access allow localnet 
  3. http_access allow localhost 

squid ­-k reconfigure

测试:假设客户端你设置你的desktop40(192.168.0.40主机上)打开火狐:Edit-->Preferences-->Network-->Setting-->Manual proxy configuration:HTTP Proxy:192.168.0.90.比如输入:www.baidu.com就会弹出一个对话框,让你输入用户和密码。用户名:test 密码:redhat
实验10.
squid+mysql 认证
(1)yum install gcc mysql mysql­-server mysql­-devel ­y
wget http://people.arxnet.hu/airween/mysql_auth/mysql_auth­0.8.tar.gz
tar zxf mysql_auth­0.8.tar.gz(或者lftp 192.168.0.254 cd pub/docs/squid get mysql_auth­0.8.tar.gz )
cd mysql_auth­0.8

(2) mkdir -­p /usr/local/squid/etc
mkdir -­p /usr/local/squid/libexec

(3) vi  Makefile

 
  
  1. CFLAGS = -I/usr/include/mysql -L/usr/lib64/mysql 
 
  
  1. install: 
  2.         $(INSTALL) -o squid -g squid -m 755 mysql_auth /usr/local/squid/libexec/mysql_auth 
  3.         $(INSTALL) -o root -g root -m 700 mypasswd /usr/local/bin/mypasswd 
  4.         $(INSTALL) -o squid -g squid -m 600 $(CONF) /usr/local/squid/etc/mysql_auth.conf 
  5.         $(INSTALL) -o squid -g squid -m 600 $(CONF) /usr/local/squid/etc/mysql_auth.conf.default 

(4)修改 src/mysql_auth.conf
mysqld_socket /var/lib64/mysql/mysql.sock
(可以用rpm -ql mysql查它的套接字在哪里,如果在lib下你可以直接下该路经,也可以ln -s lib lib64/ 先源后目标注意不要把mysql.sock写成mysqld.sock。自己改了好久才发现是多写了一个d的缘故啊 !!!)
(5)修改 src/mypassword.c
将#include <mysql/mysql.h>修改为
#include <mysql.h>
(6)修改 src/mysql_auth.c
将#include <mysql/mysql.h>修改为
#include <mysql.h>
(7)make && make install
(8)cd scripts/
mysql < create_script
(9)另外还要在在/etc/squid/squid.conf 中增加 mysql_auth 认证
添加下面的代码到"TAG: acl"一节的后面

 
  
  1. auth_param basic program /usr/local/squid/libexec/mysql_auth 
  2. auth_param basic realm Squid caching server 
  3. auth_param basic children 5 
  4. auth_param basic credentialsttl 2 hours 
  5. acl our_networks src 192.168.0.0/24(允许这个网段的用户通过密码登录!)
  6. acl password proxy_auth REQUIRED 
  7. http_access allow our_networks password 

 

squid -­k reconfigure
(10)添加用户
执行命令:mypasswd test test(添加用户和密码)注意这一步的执行要先执行mysql < create_script才可以的噢!如下:


测试:假设客户端你设置你的desktop40(192.168.0.40主机上)打开火狐:Edit-->Preferences-->Network-->Setting-->Manual proxy configuration:HTTP Proxy:192.168.0.90.比如输入:www.baidu.com就会弹出一个对话框,让你输入用户和密码。用户名:test 密码:test
注意:test用户不一定是系统用户。

实验11.
squid+openldap 认证
(1). 安装软件.
你现在准备安装软件; 这通常需要超级用户权限:
yum list openldap*
yum install openldap openldap-clients openldap-servers -y
(2)cd /etc/openldap
ls
你会看到cacerts ldap.conf schema slapd.d
编辑配置文件.
首先你删除openldap的配置文件目录,不然它不会读/etc/openldap/slapd.conf
rm -rf /etc/openldap/slapd.d
mv slapd.conf.bak slapd.conf
vi slapd.conf

 
  
  1. suffix "dc=sushan,dcdc=org"//或者可以写在一起"dc=sushan.org" 
  2. rootdn "cn=Manager,dc=sushan.org" 
  3. rootpw   sushan (注意中间是2个空格噢!)

(z需要特别注意的是rootpw和sushan之间必须是2个tab健,否则在后面测试的时候会报错)ldappasswd是修改ldap用户密码的。
(3)cd /var/lib/ldap
复制模板文件,不然重启的时候会报错valid(49)说是不合法的密码的错误。
cp /usr/share/doc/openldap-servers-2.4.19/DB_CONFIG.example .
mv DB_CONFIG.example DB_CONFIG
chown ldap.ldap DB_CONFIG

(4)/etc/init.d/sladp start
此时你在/var/lib/ldap
ll 会看到一些db文件。
(5)vi /etc/openldap/squid.ldif

 
  
  1. dn: dc=sushan.org (dn:之后是有个空格的。)
  2. dc: sushan.org 
  3. objectClass: dcObject 
  4. objectClass: organization 
  5. o: sushan 
  6.  
  7. dn: ou=squid,dc=sushan.org 
  8. ou: squid 
  9. objectClass: organizationalUnit 
  10.  
  11. dn: uid=test,ou=squid,dc=sushan.org 
  12. objectClass: top 
  13. objectClass: person 
  14. objectClass: organizationalPerson 
  15. objectClass: inetOrgPerson 
  16. userPassword: test 
  17. uid: test 
  18. cn: test 
  19. sn: test 

(需要特别注意的是这个配置文件很难一次搞定的,稍微有错误都会运行不下去的,例如在dn: ou=squid,dc=sushan.org    你多写了几个空格,可能就是导致错误的原因,只是你肉眼看不到哦!切记!)
(6)cd /etc/openldap
ldapadd ­-x -­W -­D "cn=Manager,dc=example.com" -­f squid.ldif(在这里容易报错Enter LDAP Password:
ldap_bind: Invalid credentials (49)
此时有可能是密码rootrw之后和密码之间不是2个tab键,或者是你的密码搞错了。本人此次出错的原因是因为设置了ldap是instructor的,你可以cat /ect/openldap/ldap.conf看看有没有开启,Administration->Authentication中的user Account Database:Local accounts only 然后将ldap.conf与instructor有关的注释掉噢!)
(7)vi /etc/squid/squid.conf

 
  
  1. auth_param basic program  /usr/lib64/squid/squid_ldap_auth -b"ou=squid,dc=sushan.org" 
  2. acl password proxy_auth REQUIRED 
  3. http_access allow password 

(/usr/lib64/squid/squid_ldap_auth的位置可以通过ll 显示一下在哪里)
squid ­-k reconfigure
(8)测试:和上面一样的 你需要输入:test 密码:test才可以进入。

实验11.
步骤(1)squid 监控
squid 本身提供了一个 cgi 程序 cachemgr.cgi用来监控 squid 的运行
vim /etc/httpd/conf.d/squid.conf

 
  
  1. # This is /etc/httpd/conf.d/squid.conf 
  2. ScriptAlias /Squid/cgi-bin/cachemgr.cgi /usr/lib64/squid/cachemgr.cgi 
  3.  
  4. # Only allow access from localhost by default 
  5. <Location /Squid/cgi-bin/cachemgr.cgi> 
  6.  order allow,deny 
  7.  allow from localhost.localdomain 
  8.  # Add additional allowed hosts as needed 
  9.  allow from .example.com 
  10. </Location> 

(/usr/lib64/squid/cachemgr.cgi的位置你可以通过ll显示!)
测试:
http://192.168.0.85/Squid/cgi­-bin/cachemgr.cgi

实验12.
squid 日志分析
yum install webalizer ­y
vim /etc/httpd/conf.d/webalizer.conf

 
  
  1. Alias /usage /var/www/usage 
  2.  
  3. <Location /usage> 
  4.     Order deny,allow 
  5.     Allow from all 
  6.     # Allow from .example.com 
  7. </Location> 

webalizer ­   -Q
http://192.168.0.85/usage