首页 > 代码库 > squid

squid

https://www.ibm.com/developerworks/cn/linux/l-cn-squid/
 
http://os.51cto.com/art/201009/225813.htm
 
Squid中文权威指南
http://zyan.cc/book/squid/index.html
 
Squid代理服务器的安装与配置 
按照代理类型的不同,可以将Squid 代理分为正向代理和反向代理
 
正向代理 后面是电脑用于office上网  节省带宽资源
反向代理  后面是服务器 用于缓存
 
 
正向代理中,根据实现方式的不同,又可以分为普通代理和透明代理。
普通代理:需要客户机在浏览器中指定代理服务器的地址、端口;
透明代理:适用于企业的网关主机(共享接入Internet)中,客户机不需要指定代理服务器地址、端口等信息,代理服务
 
squid -v   查看squid版本

squid -h   查看squid的命令选项

 
squid -kche  查看是否语法错误
squid -krec  重新加载配置文件
 
ps -aux | grep squid 查看squid是否启动

 

如何命令测试squid代理
curl -xlocalhost:8080 http://www.baidu.com -I

如果出现一堆信息,说明代理成功

-I 只返回HTTP的返回代码

 

 
squid反向代理 配置
 
http_port 80 accel vhost
 
accel 表示squid为加速模式
vhost 表示开启反向代理
 
 
为什么要使用代理?
1.缓存加速访问
2.访问的限制和过滤
 
普通代理和透明代理的区别?
普通代理用户端需要设置, 透明代理在网关上面做,用户端不需要设置.
 
正向代理和反向代理的区别?
 
 
1.Squid配置文件和日志文件?
 /etc/squid/squid.conf
 
2.Squid如何做认证?
认证程序用: apache自带的NCSA 
 
Squid实现用户名密码,使用HTTPBasicAuth 的方式。 需要htpasswd工具来创建passwd文件 (安装Apache软件,此工具会附带安装, 或者使用 apt-get/yum install http-tools的方式安装此工具)
 
A. 创建用户‘proxy_username’  的命令如下:
htpasswd  -c /etc/squid/passwd proxy_username
输入相应的密码后,生成 文件 /etc/squid/passwd
 
 2. 将下述代码添加到/etc/squid/squid.conf 中即配置实用验证的功能:
 
// 在 http_access deny all 上面加上如下权限配置,注意,一定要在这句上面  
//用户名密码配置  
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd  
acl auth_user proxy_auth REQUIRED  
http_access allow auth_user  
 
http://blog.csdn.net/fcc7619666/article/details/52022204
 
重启squid,使用命令:
service squid restart 或/etc/init.d/squid restart
 
 
3.Squid如何做访问控制?
通过acl来控制访问  访问的时间 访问的网络
 
 
常用配置:
http_port 3128 (监听端口)
cache_mem 64MB (内存)
maximun_object_size 4069KB ()
reply_body_max_size 10240000 allow all (单个文件最大值)
access_log  /var/log/squid/access.log  squid (日志存储)
#visible_hostname proxy.test.com (可见主机)
dns_testnames www.goole.com (DNS的域名,可根据 自己的DNS域名重新定义)
cache_dir ufs /var/spool/squid 100 16 256 (缓存目录)
ufs:缓存数据的存储格式       
100:为缓存目录分配的磁盘空间
16:缓存空间的一级子目录的个数
256:缓存空间的二级子目录的个数
cache_mgr squid@test.com (管理员邮箱)
cache_effective_group squid
error_directory /usr/share/squid/errors/语言(默认为English)
 
5 .a.修改主配置文件:vim /etc/squid/squid.conf
 对于以上项需要修改的做一些修改,然后保存退出。
  b.初始化缓存目录:squid -z
  c.启动squid服务:squid –D(测试启动)
                   squid –d N(调试启动级别)
或者使用命令:service squid start
             chkconfig squid on(将其加入开机自动启动列表中)
d.tail -t /var/log/squid/access.log(查看日志)
       trace,跟踪服务,默认不退出   
 
****************************************************************************
案例:(以虚拟机为实验环境)假设有一台服务器(IP地址:192.168.0.254/32),内网客户机为192.168.10.112/24,现在要求使用squid透明代理来实现内网对外网的访问,squid的【内网接口地址:eth0:192.168.10.110】,【外网接口地址:eth1:192.168.0.112】
要求:访问时间:18:30--8:30
      只允许192.168.10.0/24访问
      不能下载以.rmvb和.mp3为后缀的文件
      实现透明代理
      单个文件最大不能超过100M
      代理端口为8080
      错误提示为中文
      管理员邮箱 root@test.com
      内存大小为64M
      缓存目录为1024M
      必须设置可见主机名
 
准备工作:
 
 
 
4.   编辑squid的主配置文件:
Vim /etc/squid/squid.conf
 
1. 
acl worktime time 18:30-23:59
acl worktime time 00:00-08:30
(访问时间限制:18:30--8:30)
 
2. 
acl mynetwork src 192.168.10.0/24
acl myserver dst 192.168.0.254/32
http_access allow mynetwork
(允许访问的网段)
 
3. acl notmp3 url_regex -i .*/.mp3
acl normvb url_regex -i .*/.rmvb
http_access allow mynetwork !notmp3
http_access allow mynetwork !notrmvb
(不允许下载以.rmvb和.mp3为后缀的文件)
 
4.在squid服务器上添加iptables规则:
iptables –t nat –A PREROUTING -i eth1 –s 192.168.10.0/24 –p tcp --dport 80 –j REDIRECT  --to-ports  8080
透明代理:客户端浏览时,不需在browser中指定代理服务器的地址和端口。
 
5.   reply_body_max_size 102400000 allow all
(单个文件最大不能超过100M)
 
6.   http_port 192.168.10.110:8080(代理服务器监听内网网卡的8080端口)
 
7.   error_directory /usr/share/squid/errors/Simplify_Chinese
(默认为English,此项是当出现错误时,用中文提示)
 
8.   cache_mgr root@test.com(管理员邮箱)
 
9.   cache_mem 64 MB(内存大小,默认为8M)
 
10. cache_dir ufs /var/spool/squid 1024 16 256(各个数字表示什么意思,可参考前面的介绍)
 
11. visible_hostname  mail.test.com(默认没有设置,需要自己添加)
 
12.分别对上面的设置进行配置ACL访问控制
 
 
常用列表类型:
src(基于客户端地址做控制)
dst ,port,srcdomain,dstdomain
time,maxconn,url_regex,urlpath_regex          
 
1.基于源地址
acl mynetwork src 192.168.10.0/24
http_access allow mynetwork
地址可为:IP/SubMask 或者IP1~IP2/SubMask
 
2.基于目标地址:
acl mynetwork src 192.168.10.0/24
acl myserver dst 192.168.0.254/32
http_access mynetwork !myserver(所有mynetwork网段的都不允许访问myserver)
a1. http_access deny myserver  (不允许访问
a2. http_access allow mynetwork  192.168.0.254 )
b1. http_access deny myserver(允许访问
b2. http_access deny myserver  192.168.0.254)
 
3.正则表达式:(url_regex)
acl alname url_regex [-i] pattern【-i的作用:忽略大小写】
 
eg:
acl mynetwork src 192.168.10.0/24
acl notpdf url_regex -i ^http.*/.pdf (全路径,包括协议)
http_access mynetwork !notpdf(不允许mynetwork网段的地址访问pdf格式的文件)  
 
4.正则表达式(urlpath_regex)
acl mynetwork src 192.168.10.0/24
acl notchm urlpath_regex –i .*/.chm$ (以某种格式结尾)
http_access mynetwork !notchm
 
5.基于协议:FTP,HTTP,ICP
acl myproto proto HTTP
 
6.基于browser
acl mynetwork src 192.168.10.0/24
acl notfire browser MOZILLA
http_access allow mynetwork !notfire
 
7.maxconn (并发可连接数)
acl mynetwork src 192.168.10.0/24
acl twoconn maxconn 2(最多允许两个)
http_access deny mynetwork twoconn
或者:http_access allow mynetwork !twoconn
 
8.srcdomain
基于域名做源地址控制,不常用,需反解。
acl mydomain srcdomain mail.test.com
http_access deny mydomain
 
9.dstdomain基于域名做目标地址控制
acl domainserver dstdomain origin@example.com
http_access allow domainserver
 
11. 基于时间(time)
 SàSunday        MàMonday        TàTuesday
 WàWednesday    HàThursday       FàFriday
 AàStaurday (星期)
acl worktime time 10:00—23:59
acl worktiime time 00:00-05:59
在acl中aclname相同时,取并集
 
 
 
 

squid