首页 > 技术文章 > Squid代理服务

fengyutech 2015-11-15 21:46 原文

Squid代理服务

  1. Squid

1、本章结构

2、代理服务器概述

3squid简介

Squid是一个在GNU/GPL协议下发布的既可作为代理服务器,同时也可作为Web缓存守护进程的应用软件。Squid主要是支持像HTTPFTP那样的协议,但是对其它的协议比如HTTPSSSL,TLS等同样也能支持。其特点是Web缓存守护进程通过从经常上访问的网站里缓存WebDNS数据,从而让上网速度更快。Squid支持所有的主流平台,包括LinuxUNIX,微软公司的Windows和苹果公司的Mac

每一台代理服务器上都有若干颗硬盘,每个硬盘又分割成多个分区,每一个分区又可建立多个目录,目录下存放文件,squid称这些文件为object

查询方式:

  • 通过查询表的方式来定位某个资源的位置。
  • 所查询的表叫hash table和digest table
  • digest类似于摘要或索引,记录了每个分区,每个目录里存放的缓存摘要,
  • hash类似于目录或提纲,它记录了所有的digest表的信息
  • squid接收到请求后,先查看hash,再根据hash所指向的digest去查询所需要的信息。

4、代理的基本类型

①传统代理:适用于Internet,需明确指定服务端

[传统代理]

  • SQUID被绑定到代理服务器的3128端口。
  • 客户端浏览器被配置使用代理服务器的3128端口。
  • 客户端不需要配置DNS。
  • 代理服务器上需要配置DNS。
  • 客户端不需要配置缺省路由。

②透明代理:适用于共享上网网关,不需指定服务端

[透明代理]

透明代理的意思是客户端根本不需要知道有代理服务器的存在。

  • 配置透明代理服务器软件运行在代理服务器的3128端口。
  • 配置代理服务器将所有对80端口的连接重定向到3128端口。
  • 配置客户端浏览器直接连接到Internet。
  • 在客户端配置好DNS。
  • 配置客户端的缺省网关,如:192.168.1.1。

③反向代理:位于网站前端,代理web接受客户端的请求

5、使用代理的好处

①提高web访问速度

②隐藏客户机的真实IP地址

6、代理服务器概述

7、常见配置

http_port 3128 #代理服务器的端口

access_log /var/log/squid/access.log squid #squid记录的日志

cache_mem 64 MB #缓存程序所使用的空间

cache_dir ufs /var/spool/squid 100 16 256

  • ufs为文件系统,全名unix file system
  • 100为缓存的数据大小
  • 16为一级目录的数量限制
  • 256为二级目录的数量限制

visible_hostname proxy.wdd.com #告诉squid它的主机名,必须写

dns_testnames www.google.com www.163.com#可以测试squid是否可用

maximum_object_size 4096 KB #限制squid能够在本地缓存的文件的大小

reply_body_max_size 10 MB #用户通过squid能够下载的最大文件大小

error_directory /usr/share/squid/errors/Simplify_Chinese #中文错误信息

hierarchy_stoplist cgi-bin ? #用来强制某些特定的对象不被缓存,主要是处于安全的目的

coredump_dir /var/log/squid #定义dump的目录

refresh_partern #刷新缓存的规则

8acl访问控制

ACLAccess Control List,访问控制列表):根据源地址、目标URL、文件类型等定义列表。

acl 列表名称 列表类型 列表内容

②针对已定义的acl列表进行限制

http_access allowdeny 列表名称

③访问规则

  • 从上至下依次查看
  • 没有任何规则时,默认拒绝squid访问
  • 有规则,但没有匹配的项时,采取与最后一条相反的操作

如下所示:

#vim /etc/squid/squid.conf

….

acl all src 192.168.131.0/24

http_access deny all

#service squid reload

④列表类型

src

源地址

dst

目标地址

port

目标端口

dstdomain

目标域

time

访问时间

maxconn

最大并发连接数

url_regex

目标URL地址

urlpath_regex

整个目标URL路径

如下所示

#vim /etc/squid/squid.conf

acl all src 0.0.0.0/0.0.0.0

acl MYLAN src 192.168.1.0/24 192.168.4.0/24

acl WORKTIME time MTWHF 08:30-17:30

http_access allow MYLAN WORKTIME

http_access deny all

#service squid reload

注:HTTP_PROXY HTTP协议提供代理

HTTPS_PROXY HTTPS协议提供代理

FTP_PROXY FTP协议提供代理

NO_PROXY 添加不使用代理的客户机地址

二、传统代理

试验准备:主机ABCIP地址分别为192.168.131.137192.168.131.130192.168.131.136,主机B和主机C操作系统为RHEL6.4 x86_64,为最小化安装,主机A为桌面化安装。主机ABC均在同一个网段,主机A作为客户端,主机B作为squid服务器,主机C作为网站服务器。

均关闭防火墙和SELINUX

1、主机C操作

#yum –y install httpd

#service httpd start

#vim /var/www/html/index.html

I am host c

在浏览器输入http://192.168.131.136/

2、主机B操作

# yum -y install squid

# vim /etc/squid/squid.conf

http_port 3128

visible_hostname www.taobao.com #一定要填写

# service squid start

3、主机A操作

#vim /etc/sysconfig/network-scripts/ifcfg-eth0

#service NetworkManager stop

#ifdown eth0

#ifup eth0

#ifconfig

3、客户端测试

①图形化测试

修改火狐浏览器设置:"Edit""Preferences""Advanced""Network""Settings""Manual proxy configuration",填写好代理服务器端口和3128端口,如下

点击"ok"即可。

在浏览器输入http://192.168.131.136

squid代理服务器停掉

#service squid stop

发现访问不了了

重新启动squid

#service squid start

又可以访问了

②字符界面测试

# yum -y install elinks #安装字符浏览器

#vim /etc/profile

HTTP_PROXY=http://192.168.131.130:3128

export HTTP_PROXY

# elinks 192.168.131.136

停止squid服务器

#service squid stop

在访问192.168.131.130,连接被拒绝

三、透明代理

实验准备:主机A作为内网测试机,IP地址为192.168.10.2,主机B作为代理服务器,两块网卡,第一张网卡eth0于主机A在同一个网段,IP地址为192.168.10.1;第二张网卡IP地址为200.200.200.1,主机C在同一个网段。主机C作为外网服务器,其IP地址为200.200.200.2。三台主机均清楚防火墙和禁用SLEINUX

1、主机A操作

#vim /etc/sysconfig/network-scripts/ifcfg-eth0

#指定网关

#service NetworkManager stop

#ifdown eth0

#ifup eth0

2、主机C操作

#vim /etc/sysconfig/network-scripts/ifcfg-eth0

#service network restart

#yum –y install httpd

#service httpd start

#vim /var/www/html/index.html

www.baidu.com

3、主机B操作

#vim /etc/sysconfig/network-scripts/ifcfg-eth0

#vim /etc/sysconfig/network-scripts/ifcfg-eth1

#service network restart

#vim /etc/sysctl.conf

#sysctl –p

#yum –y install squid

#vim /etc/squid/squid.conf

#service squid start

#iptables –F #清楚防火墙策略

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

#配置防火墙策略 iptables -t nat -I PREROUTING -i 内网接口名 -s 内网网段 -p tcp --dport 80 -j REDIRECT --to-ports 3128

4、测试

①用内网测试机,访问外网

在客户端主机输入http://200.200.200.2

把代理服务器停掉

#service squid stop

发现无法访问了

②限制下载大小

代理服务器

#vim /etc/squid/squid.conf

reply_body_max_size 10 MB #10MB之间是有空格的,否则报错

#service squid reload #重新加载配置文件

网站服务器

#dd if=/dev/zero of=/var/www/html/wdd.txt bs=1M count=15

客户端测试

在浏览器输入http://200.200.200.2/wdd.txt

四、反向代理

试验准备:主机ABCD,主机A作为外网客户端,IP地址为200.200.200.2,主机B为代理服务器,双网卡,第一张网卡eth0与内网主机C和主机D在同一个网段,IP地址为192.168.10.1;第二张网卡与外网主机在同一网段,IP地址为200.200.200.1;主机C和主机D作为网站服务器,其IP地址分别为192.168.10.2192.168.10.3,均关闭防火墙和SELINUX。主机A为图形化安装,主机BCD为最小化安装,操作系统为RHEL6.4 x86_64

1、主机A操作

#vim /etc/sysconfig/network-ifcfg-eth0

#service NetworkManager stop

#ifdown eth0

#Ifup eth0

2、主机C操作

#vim /etc/sysconfig/network-ifcfg-eth0

#ifdown eth0

#ifup eth0

#yum -y install httpd

#service httpd start

#vim /var/www/html/index.html

I am web1

3、主机C操作

#vim /etc/sysconfig/network-ifcfg-eth0

#ifdown eth0

#ifup eth0

#yum -y install httpd

#service httpd start

#vim /var/www/html/index.html

I am web2

4、主机B操作

#vim /etc/sysconfig/network-ifcfg-eth0

#vim /etc/sysconfig/network-ifcfg-eth1

#service network restart

#yum –y install squid

#vim /etc/squid/squid.conf

acl wan src 200.200.200.0/24

http_access allow wan

http_port 200.200.200.1:80 vhost

visiable_hoatname www.taobao.com

cache_peer 192.168.10.2 parent 80 0 originserver round-robin weight=1

cache_peer 192.168.10.3 parent 80 0 originserver round-robin weight=1

#service squid start

5、测试

在外网主机输入http://200.200.200.1,按F5刷新得到如下结果

推荐阅读