<--目录-->

1)Squid理论知识

2)Squid服务器的搭建



【Squid理论知识】

Squid代理缓存服务器


一、搭建代理服务器

1、什么是代理服务器,用在哪里

当一个用户想要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid连接

所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页

面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快,nginx只能缓存静态页面。



能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资

源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公网,我接

收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你,

如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网



2、实现代理服务的软件有哪些   (Squid nginx varnish)


3、工作原理

Cache

                           ^|

                          2||3

                           |v 

 ___         1            ___      5            ____

|   |   ------------->   |   |------------->  |    |

|___|   <-------------   |___|<-------------  |____|

             4                     6

客户机          Squid代理服务器      www.163.com


首先代理服务器要有两块网块,一块连接公网,一块连接私网,如果私网有两个网段,那就要三块网卡,一块连接公网,两块连接

私网;然后在客户机浏览器里指定代理服务器的IP地址和端口号,访问网站的时候,就会读浏览器里的配置,就会把请求发给指的

IP主机,而端口号就是Squid响应用户的哪个请求,代理服务器接收到了,首先会先查看acl(访问控制列表),acl在配置文件里定义,看满不满

足acl的控制列表的控制,如果满足,会先在缓存里查询,有就直接回应,没有就代替你去访问真正的目标主机,然后会先保存一份

放在缓存里,然后再回应用户的请求



4、拓扑图


192.168.1.0/24

内网客户端主机 Squid代理 公网Web服务器


         

 192.168.1.254/24

eth0 192,168.1.10 eth0                   

pc100---------------------squid--------------web eth01.1.1.1

    eth1

访问           1.1.1.254/8

http://1.1.1.1


准备3台rhel5的操作系统的服务器,彼此间可以正常通信,其中代理服务器有2块网卡

关闭所有服务器的 selinux iptables; 开发工具、开发库软件包组已安装

如果代理服务器连接两个不网段的主机那就要三个网卡,两个连接不同网段的内网,一个连接公网


常用配置项

主配置文件路径 /etc/squid/squid.conf

主配置文件 squid.conf

模板文件 /etc/squid/squid.conf.defualt

监听端口号 http_port 3128 

查询缓存的大小 cache_mem 8 MB  //设置为真机内存的三分之一或三分之二

cache_dir   ufs /var/spool/squid    100 16 256

          文件类型         缓存目录名    目录大小M   一级目录个数   二级目录个数

access_log /var/log/squid/access.log  suqid  //日志存路径,最后面的squid是记录文件的格式


visible_hostname proxy.wsyht.com   //设置代理服务器的主机名


/etc/hosts

192.168.1.254 proxy.wsyht.com proxy  //在代理服务器本机设置了主机名,也要在hosts里面设置,可以内网IP或外网IP,必须要设,否则服务启不来


maximum_object_size 4096 KB    //允许缓存的最大对像

reply_body_max_size 10240000 allow all  //允许访问的最大对像


进程名 squid

端口   3128

进程所有者 squid

传输协议   TCP


代理方式


普通代理:

客户端必须在自已的浏览器里指定代理服务器的IP地址和监听的端口号,

才能通过代理服务器访问公网的网站服务


普通代理的好处:节省缓存服务器到公网这部分的带宽,加大访问速度



透明代理

客户端不需要在浏览器里指定代理服务器的IP地址和监听的端口号就可以

直接访问公网上的网站服务器给用户的感觉就是自已直接和公网通信的


适用于企业的网关主机(共享接入Internet)中

客户机不需要指定代理服务器地址、端口等信息

需要设置防火墙策略将客户机的Web访问数据转交给代理服务程序处理


透明代理的好处:节省缓存服务器到公网这部分的带宽,加大访问速度,

客户端不用在浏览器设置指定IP和端口号



普通代理和透明代理都是代替局域网用户访问公网



反向代理(代替公网客户端访问内网的网站服务器)

反向代理的好处:

加快公网的访问速度

节省内网到缓存服务器这部分的带宽

减少服务器的压力

使公网的用户不知道我真正的服务器的IP



acl 访问控制列表

acl的作用:squid服务使用acl限制客户端通过自已可以访问的网络资源


inside-web<------------反向代理 <------------ internet

   

                    透明代理

pc-------------------->       -------------> internet-web

      普通代理


acl在主配置文件squid.conf文件中定义

定义acl格式:


acl acl名称  类型  匹配内容


acl类型

src 源地址

acl all src 0.0.0.0/0.0.0.0   //所有网段的所有主机

acl pc1 src 192.168.1.1/255.255.255.255  //只有1.1可以访问

acl pc2 src 192.168.1.0/8   //前三位必段固定匹配,后面一位数字可以改变,条件匹配才可以访问

http_access allow pc1 

http_access deny all 

网段

IP地址


dst 目标地址

网段

IP地址


port 端口

80

21,22,25

  25-101


dsdomain 目标域

www.baidu.com

.sina.com.cn


time 访问时间

acl 名称    time 星期  起始时间-结束时间    //星期是周一到周日单词的首字母

acl aclname time     [day-abbrevs]  [h1:m1-h2:m2]

例:

acl   worktime   MTWHFAS   09:00-18:00

http_access deny  pc2 worktime

#              day-abbrevs:

#               S - Sunday

#               M - Monday

#               T - Tuesday

#               W - Wednesday

#               H - Thursday

#               F - Friday

#               A - Saturday



maxconn 最大并发连接

20

例:

acl pc2 maxconn 10


url_regex 目标URL地址

http://

ftp://


Urlpath_regex 整个目标URL路径

http://xxx.xxx.xx



acl的使用规则:

先定义后调用,acl名称具有唯一性要有标识性,acl也可以只定义不调用 

类型关健字是固定的,类型acl已经提供好的,不同的类型匹配不同的数据

匹配内容根据类型写不同的匹配方式


调用acl的命令

http_access deny acl名称列表(acl名称用空格间隔)


http_access allow acl名称列表(acl名称用空格间隔)


deny  拒绝

allow 允许


http_access的匹配顺序:

遇到匹配的就执行,后边的就不在匹配了




安例:


http_access deny/allow  acl名称列表


vim squid.conf

acl notpc src 192.168.1.250/255.255.255.255

http_access deny notpc


acl all src 0.0.0.0/0.0.0.0

acl my192 src 192.168.1.0/24

acl my193 src 192.168.2.0/24

acl my193 src 192.168.3.0/24


http_access allow my192

http_access deny all


vim /etc/squid/ipblosck.list    //定义条件匹配文件,名字随便起,但所属组和所属用户必须为squid,路径存放在哪里都行

61.135.16.36

60.28.16.0./24


vim /etc/wquid/dmblock.list

.qq.com

.msn.com


vim /etc/quid/squid.conf

acl ipaddress dst "/etc/squid/ipblock.list"

acl dmname dstdomain "/etc/squid/dmblock.list"

http_access deny ipaddress

http_access deny Dmname


Acl案例

acl LAN1 src 192.168.1.0/24

acl PC1 src 192.168.1.66/32

acl Blk_Domain dstdomain .qq.com .kaixin001.com

acl Work_Hours time MTWHF 08:30-17:30

acl MAX20_Conn maxconn 20

acl Blk_URL url_regex -i ^rtsp:// ^mms://

ACL blk_Words urlpath_regex -i sex adult

acl RealFile urlpath_regex -i \.rmvb$ \.rm$ \.mp3$


http_access deny LAN1 Blk_URL

http_access deny LAN1 Blk_Words

http_access deny PC1  RealFile

http_access deny PC1  Max20_Conn

http_access deny LAN1 Work_Hours



【Squid服务器的搭建】

实验拓扑:


内网客户端    代理缓存服务器   

eth0 192.168.1.10 eh0 192.168.1.254/24      公网网站

Pc100----------------------------Squid---------------------------Web eth0 1.1.1.1

    eth1 1.1.1.254/8



三台主机公共配置(实验一、二、三都需配置)

#service iptables stop

#chkconfig --level 35 iptables off

#setenforce 0

#yum -y groupinstall "开发工具" "开发库"


实验一:

普通代理服务器的搭建(代理服务器代替局域网用户访问公网网站)


一、配置代理服务器

安装提供代理服务的软件包(Squid)

#yum -y install squid

#chkconfig --level 35 squid on


修改主配置文件

#vi /etc/squid

...

 1579 cache_mem 8MB      //取消注释

 1786 cache_dir ufs /var/spool/squid 100 16 256  //取消注释

 637  http_access allow all  //取消注释,允许所有访问

...


启动代理服务

#service squid start


二、配置公网网站服务器(启动服务、编写网页文件)

#echo "00000" /var/www/html/index.html

#service httpd start

#chkconfig --level 35 httpd on


三、配置客户端(192.168.1.10)

在浏览器里指定服务器的ip地址和端口号

#firefox &

点击菜单栏 编辑->首选项->高级->网络->设置->HTTP  代理: 192.168.1.254 端口: 3128


浏览器地址栏访问

http://1.1.1.1




实验二:

透明代理服务器的搭建(代理服务器代替局域网用户访问公网网站)


一、配置代理服务器

开启防火墙

#setup

#service iptables start

#iptables -F

#iptables -nvL

#service iptables save

#chkconfig --level 35 iptables on


在代理服务器上配置防火墙规则,把本机接收到的访问目标端口是80的请求转机本机的3128端口

#iptables -t nat -A PREROUTING -i eth0 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128

#iptables -t nat -A PREROUTING -i eth0 -s 192.168.1.0/24 -p tcp --dport 443 -j REDIRECT --to-ports 3128

#service iptables save


修改squid服务的代理方式改为透明代理

#vi /etc/squid/squid.conf

...

 922 http_port 3128 transparent       //设置代理方式为透明代理

...


重启服务

service squid restart


二、配置公网网站服务器(启动服务、编写网页文件)

#service httpd start

#chkconfig --level 35 httpd on

#echo "1111" > /var/www/html/index.html


三、配置客户端

添加默认网关(让代理服务器能够接收到客户端发出的请求)

#route add default gw 192.168.1.254


浏览器地址访问(实验一浏览器做的配置还原)

http://1.1.1.1



实验拓扑:


eth0 内网网站服务器            eth0 192.168.1.254

Web1 192.168.1.10----------------------|

        Squid--------------------1.1.1.1 eth1 公网客户端

Web2 192.168.1.100---------------------|

eth0 内网网站服务器       eth1 1.1.1.254


实验三:

搭建反向代理服务器(代理服务器代替公网客户端访问内网的网站服务器)


一、配置内网的网站服务器(启动服务、编写网页文件)

#service httpd start

chkconfig --level 35 httpd on

#echo "222222" > /var/www/html/index.html


删除上面实验二添加的网关

#route del default gw 192.168.1.254


二、配置代理服务器tp

删除实验二的环境、让httpd关闭开机不启动释放80端口

#setup

#service iptables stop 

#service httpd stop

#ckconfig --level 35 iptables off

#chkconfig --level 35 httpd off


修改主配置文件

#vi /etc/squid/squid.conf  

...

 922 http_port 80 vhost //让自已监听80端口

 923 cache_peer 192.168.1.10 parent 80 0 originserver //指定自已访问的网站服务器

 924 cache_peer 192.168.1.100 parent 80 0 originserver       //哪个主机在上面就先访问哪台网站服务器

...


重启服务

#service squid restart


公网客户端访问

http://1.1.1.254



补充:

公网客户端如果要重新访问内网网站服务器重新更改的网页的话,代理服务器需清空缓存,重启服务

代理服务器配置

#rm -rf /var/spool/squid/*

#service squid restart



实验拓扑:


内网网站服务器    代理缓存服务器   

eth0 192.168.1.10 eh0 192.168.1.254/24      公网客户端

Web----------------------------Squid---------------------------Web eth0 1.1.1.1

    eth1 1.1.1.254/8


实验四:

当我内网的网站服务器是用虚拟主机来搭建的,让公网客户端来访问我内网不同的虚拟主机


内网网站服务器配置

创建基于域名的虚拟主机,

#mkdir /www;mkdir /mail

#echo "www.wsyht.com" > /www/index.html;echo "mail.wsyht.com" > /mail/index.html

#vi /etc/httpd/conf/httpd.conf

...

    981 NameVirtualHost *:80

...

   1002 <VirtualHost *:80>

   1003     DocumentRoot /www

   1004     ServerName www.wsyht.com

   1005     ErrorLog logs/www.wsyht.com-error_log

   1006     CustomLog logs/www.wsyht.com-access_log common

   1007 </VirtualHost>


   1009 Listen 8080

   1010 <VirtualHost *:8080>

   1011     DocumentRoot /mail

   1012     ServerName mail.wsyht.com

   1013     ErrorLog logs/mail.wsyht.com-error_log

   1014     CustomLog logs/mail.wsyht.com-access_log common

   1015 </VirtualHost>

...

#service httppd restart


代理服务器配置

#vi /etc/squid/squid.conf

...

  922 http_port 80 vhost

  923 cache_peer 192.168.1.10 parent 80 0 originserver name=www

  924 cache_peer 192.168.1.10 parent 8080 0 originserver name=mail

  925 cache_peer_domain www www.wsyht.com

  926 cache_peer_domain mail mail.wsyht.com

...


重启服务

#service squid restart


公网客户端配置

修改hosts文件

#tail -2 /etc/hosts

1.1.1.254 www.wsyht.com www

1.1.1.254 mail.wsyht.com mail


访问测试

#elinks --dump http://www.wsyht.com

#elinks --dump http://mail.wsyht.com


练习

acl 访问控制列表

只允许局域网内192.168.1.0/24所有主机在周一到周五的工作时间,可以上网

但ip地址是192.168.1.100的主机不允许上网

上班时间所有主机都不允许访问www.taobao.com网站


acl all src 0.0.0.0/0.0.0.0     //系统默认已有的数据

acl zhuji src 192.168.1.0/24

acl dan src 192.168.1.100/32

acl shijian time MTWHF 09:00-18:00

acl taobao dsdomain   .taobao.com


http_access deny dan shijain

http_access deny  zhuji taobao

http_access allow zhuji shijain

http_access deny all   //系统默认已有的数据