一、代理服务器
代理服务器(Proxy Server)是一种重要的服务器安全功能,它的工作主要在开放系统互联(OSI)模型的会话层,从而起到防火墙的作用。代理服务器大多被用来连接INTERNET(国际互联网)和Local Area Network(局域网)。
Squid cache(简称为Squid)是一个流行的自由软件,它符合GNU通用公共许可证。Squid作为网页服务器的前置cache服务器,可以代理用户向web服务器请求数据并进行缓存,也可以用在局域网中,使局域网用户通过代理上网。Squid主要设计用于在Linux一类系统运行。
squid 分类
按照代理类型的不同,可以将Squid 代理分为正向代理和反向代理,正向代理中,根据实现方式的不同,又可以分为普通代理和透明代理。
· 普通代理:需要客户机在浏览器中指定代理服务器的地址、端口;
· 透明代理:适用于企业的网关主机(共享接入Internet)中,客户机不需要指定代理服务器地址、端口等信息,代理服务器需要设置防火墙策略将客户机的Web访问数据转交给代理服务程序处理;
· 反向代理:是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
官方地址:http://www.squid-cache.org/
参考文档:http://www.squid-cache.org/Doc/config/
操作系统:CentOS release 6.4 (Final)
二、系统环境
操作系统:CentOS release 6.6 (Final)
Squid版本:squid-3.1.10-29.el6.i686
SELINUX=disabled
HTTP Service: stoped
防火墙:普通代理模式关闭、其他模式开启
三、安装Squid服务
3.1 检查squid软件是否安装
# rpm -qa|grep squid
3.2 如果未安装,则使用yum 方式安装
# yum -y install squid
3.3 设置开机自启动
chkconfig --level 35 squid on //在3、5级别上自动运行squid服务
四、squid服务器的配置文件说明
http_port 3128 //设置监听的IP与端口号
cache_mem 64 MB //额外提供给squid使用的内存,squid的内存总占用为 X * 10+15+“cache_mem”,其中X为squid的cache占用的容量(以GB为单位),比如下面的cache大小是100M,即0.1GB,则内存总占用为0.1*10+15+64=80M,推荐大小为物理内存的1/3-1/2或更多。
maximum_object_size 4 MB //设置squid磁盘缓存最大文件,超过4M的文件不保存到硬盘
minimum_object_size 0 KB //设置squid磁盘缓存最小文件
maximum_object_size_in_memory 4096 KB //设置squid内存缓存最大文件,超过4M的文件不保存到内存
cache_dir ufs /var/spool/squid 100 16 256 //定义squid的cache存放路径 、cache目录容量(单位M)、一级缓存目录数量、二级缓存目录数量
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh //log文件日志格式
access_log /var/log/squid/access.log combined //log文件存放路径和日志格式
cache_log /var/log/squid/cache.log //设置缓存日志
logfile_rotate 60 //log轮循 60天
cache_swap_high 95 //cache目录使用量大于95%时,开始清理旧的cache
cache_swap_low 90 //cache目录清理到90%时停止。
acl localnet src 192.168.1.0/24 //定义本地网段
http_access allow localnet //允许本地网段使用
http_access deny all //拒绝所有
visible_hostname centossd //主机名
cache_mgr [email protected] //管理员邮箱
五、普通代理服务
即标准的、传统的代理服务,需要客户机在浏览器中指定代理服务器的地址、端口。
实验拓扑图如下:
5.1 配置Squid 代理服务器IP地址
将eth0的IP地址修改为192.168.1.168(内网地址)
将eth1的IP地址修改为192.168.0.128(外网地址)
配置好后如下图所示:
5.2 编辑squid 主配置文件/etc/squid/squid.conf
把已存在的配置文件备份mv /etc/squid/squid.conf /etc/squid/squid.conf.bak
编辑配置文件vi /etc/squid/squid.conf
http_port 3128
cache_mem 64 MB
maximum_object_size 4 MB
cache_dir ufs /var/spool/squid 100 16 256
access_log /var/log/squid/access.log
acl localnet src 192.168.1.0/24
http_access allow localnet
http_access deny all
visible_hostname centossd
cache_mgr [email protected] // 可以不添加
5.3 初始化
# squid –z
几个常用命令
5.4 启动Squid
5.5 配置Web 服务器
配置服务器再次不做详述
查看web服务器ip地址
5.6 配置客户端IP地址
5.7 配置浏览器代理
5.8 测试
测试成功。
如若想测试域名访问可以通过设置本地dns或者修改hosts文件来测试,此处不做详述。
通过上图可以看到客户端可以和代理服务器端通信,不能和web服务器通信。
5.9 测试错误页面
可以看到在squid 配置文件里设置的参数在错误页面里的显示。
六、透明代理服务
适用于企业的网关主机,客户机不需要指定代理服务器地址、端口等信息,通过iptables将客户机的Web访问数据转交给代理服务程序处理。
实验拓扑图如下:
6.1 修改squid 主配置文件/etc/squid/squid.conf
在http_port 3128 后添加transparent 关键字。
http_port 3128 transparent
cache_mem 64 MB
maximum_object_size 4 MB
cache_dir ufs /var/spool/squid 100 16 256
access_log /var/log/squid/access.log
acl localnet src 192.168.1.0/24
http_access allow localnet
http_access deny all
visible_hostname centossd
cache_mgr [email protected]
6.2 reload
reload 让上面的配置生效。
# /etc/init.d/squid reload
6.3 添加iptables规则,把内部的http请求重定向到3128端口
a) 启动iptables服务
b) [[email protected] Desktop]# service iptables start
c) iptables: Applying firewall rules: [ OK ]
d) 清除现有规则
e) 保存iptables 设置
f) 查看nat表
g) 添加nat规则并保存
配置iptables设定nat,即透明代理
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-ports 3128
如果只设置下面一句而上面一句不设置,客户端也可以上网,只是不通过squid哈~
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
保存iptables设置
service iptables save
6.4 客户端设置
1) 设置网络
将网关设置为代理服务器内网地址
2) 在浏览器中将使用代理服务器选项勾除。
6.5 浏览器访问测试
说明透明代理设置成功
七、反向代理服务
为Internet用户访问企业Web站点提供缓存加速。
实验拓扑图如下:
内网服务器是server 2008 R2
7.1 关闭内网服务器防火墙
7.2 修改Web Server 主页
创建目录和主页
7.3 配置squid
http_port 80 accel vhost //这个参数的用于支持主机映射
http_access allow all
cache_peer 192.168.1.118 parent 80 0 originserver round-robin weight=1 //指定第1台真实服务器的位置
cache_peer 192.168.1.119 parent 80 0 originserver round-robin weight=1 //指定第2台真实服务器的位置
visible_hostname centossd
7.4 启动Squid服务
注:要确保80端口没被使用
7.6 测试
squid 采用了round-robin,所以客户端的访问将轮询两台web服务器,采用 "Ctrl + F5" 来深度刷新测试。
web1
web2
八、日志
再来看看日志信息。如图,所有的行为都被日志记载。
使用tail –f 可以实时监控日志最后一行的变化。
注: 此文有参阅http://zpp2009.blog.51cto.com/730423/297023
http://bbs.51cto.com/thread-564760-1.html
http://www.cnblogs.com/mchina/p/3812190.html
三篇文章 ,感谢三位博主!