代码改变世界

Squid缓存服务器方案

2011-12-17 05:14  游乐场123  阅读(501)  评论(0编辑  收藏  举报

1. 缓存服务器方案的提出主要是能满足节省企业出口线路带宽,给用户带来更高速的web页面访问速度。
2. 根据我们内网的结构需求制定适合我们企业网内合适的用户方案。
3. 根据目前网络的结构背景,结构如下:
   
4. Squid 版本2.6与2.5存在不少区别,所以二者在配置上有所差异,尤其在透明代理上的配置上。关于两个软件的下载和安装方法,网上已经有许多文章了,请根据自己的发行版本搜索查看,本文主要写如何配置以实现透明代理+缓存。
5. 
配置iptables,实现NAT,关于iptables作为防火墙使用的安全配置,不是本文的重点。
#首先加载模块
modprobe ip_tables
modprobe ip_nat_ftp
modprobe ip_nat_irc
modprobe -ip_conntrack
modprobe -ip_conntrack_ftp
modprobe -ip_conntrack_irc
#清空旧有配置
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -Z
/sbin/iptables -F -t nat
/sbin/iptables -X -t nat
/sbin/iptables -Z -t nat
#设置默认策略
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD ACCETP
echo "1" > /proc/sys/net/ipv4/ip_forward #启用iptbles的数据转发功能,重点步骤一!!
echo "1" > /proc/sys/net/ipv4/tcp_syncookies #安全措施,防syn攻击


6. iptables -t nat -A PREROUTING -s 0.0.0.0/0 -p tcp --dport 80 -j DNAT –to代理服务器IP:3128 #端口重定向,实现透明代理的重点步骤一,有了这一步,客户端就不必设置代理了,服务器根据用户请求目标端口为80,则自动重定向到3128,交由squid处理,由此实现了http代理;同理,根据Squid的协议支持情况,也可设置ftp代理等。

7. iptables -t nat -A POSTROUTING -s 0.0.0.0/24 –d 代理服务器IP -j MASQUERADE #实现SNAT,即源地址转换(也称为IP隐藏)执行了这句以后,内网用户无需设置代理,不过此时Squid还没有起作用。

8. 配置Squid.conf
一些基本的配置这里就不再赘述了,几个关键点讲下。
http_port 3128 transparent #配置Squid的监听端口,默认为3128,
#参数transparent是squid 2.6版本与先前旧版本一个比较重要的区别,是实现透明代理的重点步骤二,没有该参数则无法实现透明代理,将出现以下错误
9.  
10. 
cache_dir ufs /var/spool/squid 100 16 256 #设置缓存大小,一级目录、二级目录数量
cache_swap_low 90
cache_swap_high 95
access_log /var/log/squid/access.log #记录访问日志
cache_log /var/log/squid/cache.log #记录缓存日志
cache_store_log /var/log/squid/store.log
client_netmask 255.255.255.255

cache_mgr xin.xunzhao@gmail.com #设置管理员邮箱
cache_effective_user proxy #设置squid以proxy用户身份运行,这点涉及系统安全,具体参见“chroot技术或jail监禁、jail监牢 ”
cache_effective_group proxy #功能同上
visible_hostname squid_ubuntuXZ #设置主机名
coredump_dir /var/spool/squid

acl badurl1 dstdomain -i .qq.com
acl badclient src 192.168.33.20
acl our_networks src 192.168.33.0/24 #定义内网ip范围

http_access deny badclient #拒绝某些用户上网
http_access deny badurl1 #禁止用户访问某些网站
http_access allow our_networks #允许内网用户使用
http_access deny all #拒绝所有未定义动作

(四)其他功能扩展配置

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.51.55:80 #端口重定向
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.51.55:3389 #端口重定向
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 53 -j DNAT --to-destination 202.101.107.85:53 #端口重定向,本句起到智能DNS的作用
iptables -t filter -A INPUT -i eth1 -p icmp -j DROP #禁用icmp
iptables -t filter -A FORWARD -i eth0 -d 192.168.33.20/31 -j DROP #禁止IP为192.168.33.20的客户端上网
iptables -t filter -A FORWARD -d 58.60.9.246 -j DROP #禁止所有用户访问某IP
注意:iptables的配置会在每次系统重启后被还原,因此需要设定自动导入配置文件,在/etc/rc.local中添加相应命令即可,用户可以先用iptables-save导出当前配置,然后用文本编辑器配置好后,再用iptables-restore导入配置即可,如我设定的开机自动导入配置文件为iptables-restore < /var/lib/iptables/saved.cfg 。

当然,iptables 和Squid的功能还不只以上所述,关于其他方面的配置,还请关注网上的相关文章,我也将陆续整理一些自己使用中的经验笔记与大家分享,也欢迎大家批评指教,指出我文章中的缺点与不足,呵呵。
http_port 3128 transparent #红色部分是支持透明代理,这是squid新版本的改进。

具体实施步骤:
1. 测试web访问外网网站等,迅雷,BT, 电驴,超级旋风,下载都没有问题,web端口以目的端口80的走缓存服务器,其实等相关程序还是走三线。
2. 网络环境搭建,squid缓存服务器接入2812F旁的华为5000系列交换机上,第10口,用超6类直通线相连。
3. 各设备的具体配置如下
4. 10.0.1.1 服务器的配置 iptables -t nat -A PREROUTING -s 10.1.0.0/24 -p tcp --dport 80 -j DNAT –to 10.0.1.15:3128 #端口重定向,实现透明代理的重点步骤一,有了这一步,客户端就不必设置代理了,服务器根据用户请求目标端口为80,则自动重定向到3128,交由squid处理,由此实现了http代理;同理,根据Squid的协议支持情况,也可设置ftp代理等。
iptables -t nat -A POSTROUTING -s 10.1.0.0/24 –d 10.0.1.15 -j MASQUERADE 这一条加上主要是对squid服务器的访问做地址转换,如果不加入这一条路由不通,所以就无法直接把数据包路由到代理服务器上。
缓存服务器的配置:首先要保证缓存服务器能够正常上网,ip地址配置为10.0.1.15
网关配置为10.0.1.1 能够保证缓存服务器访问外网能正常通过3线出去访问。Squid.conf的具体配置,我在上面已经写的很清楚了,仔细看看就知道怎么配置了。
5. 单点故障解决方法,在31上面远程侦听缓存服务器的3128端口,如果缓存服务上的3128端口DOWN掉,远程执行删除10.0.1.1服务器上面的iptables -t nat –D PREROUTING -s 10.1.0.0/24 -p tcp --dport 80 -j DNAT –to 10.0.1.15:3128
iptables -t nat –D POSTROUTING -s 10.1.0.0/24 –d 10.0.1.15 -j MASQUERADE
       上面两条语句删除就可以了,然后所有的数据还是走三线,不会走缓存服务器了。
6. 静态/动态的缓存功能,缓存服务器一般只能缓存静态页面,而动态的页面是缓存不了的,动态的页面一般都是.asp开始的,目前我们主要是针对大型网站能够缓存到2及页面就能够满足我们的需求了,比如新浪,搜狐,中关村在线等。
7. 流量的节省和给用户带来的速度是否能满足我们的需求,要权衡方案给企业带来的性价比。
8. # cache_vary on
9. 难道我的配置文件是off不成?赶紧检查,发现还真是off,sign,原来就是这个问题折磨我,改成on,将Apache的Deflate配置启用,再观察内存对象,发现静态网页真的被缓存了!