分类: LINUX
2011-12-02 16:22:09
Squid代理服务器
设置前,请确保selinux iptables为disable
一 Squid简介
Squid为代理缓存服务器
其作用有以下几点:
1. 通过缓存方式为用户提供Web访问加速
2. 对用户的Web访问进行过滤控制
其分类有:
普通代理服务器(正向代理)
透明代理服务器
反向代理服务器
普通代理服务器----即为传统的标准代理服务器,其需要客户端在浏览器中指定代理服务器的IP与端口
透明代理服务器----之所以称为“透明代理”是因为客户端感觉不到代理的存在,客户端无需设置代理服务器的IP 和端口等信息,只需设置防火墙策略将客户端的web访问数据交由代理服务器处理。在Linux平台下,使用iptables squid来实现透明代理和网络地址转换。当客户端访问
Internet资源,请求Internet资源的数据包途径Linux服务器转发时,Linux服务器上的防火墙iptables服务应用NAT技术将终端客户的HTTP请求重定向到Squid代理服务器,有Squid代理服务器代替终端客户访问外部的Internet信息资源,再将获取的信息资源回传给终端客户
反省代理服务器----主要为Internet 用户访问企业Web站点提供缓存加速,使用者为企业的Web服务器。反向代理服务器是针对 WEB 服务器设置的,后台 WEB 服务器对互联网用户是透明的,用户只能看到反向代理服务器的地址,不清楚后台 WEB 服务器是如何组织架构的。当互联网用户请求 WEB 服务时,DNS 将请求的域名解析为反向代理服务器的 IP 地址,这样 URL 请求将被发送到反向代理服务器,由反向代理服务器负责处理用户的请求与应答、与后台 WEB 服务器交互。利用反向代理服务器减轻了后台 WEB 服务器的负载,提高了访问速度,同时避免了因用户直接与 WEB 服务器通信带来的安全隐患。
更多关于反向代理的说明参考:
/developerworks/cn/linux/l-cn-squid/
二 Squid服务设置
安装
# yum install squid -y
#cd /dev/shm //使用tmpfs动态文件系统加速squid
# mkdir squid
#chown squid.squid squid
#chmod 750 squid/
# mount - -bind /dev/shm/squid /var/spool/squid
注:/var/spool/squid/此为squid的默认缓存文件放置目录,在/etc/squid/squid.conf文件中的
cache_dir ufs /var/spool/squid 参数设置指定,可更改
note:/dev/shm/是linux下一个非常有用的目录,因为这个目录不在硬盘上,而是在内存里.默认系统就会加载/dev/shm ,它就是所谓的tmpfs.tmpfs 是一个文件系统,而不是块设备;您只是安装它,它就可以使用了.
tmpfs有以下优势:
1,动态文件系统的大小
2,tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的
3,tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载,绑定的操作
巧用tmpfs加速你的linux服务器,就是使用虚拟磁盘来存放squid的缓存文件和php的seesion
启动服务
# service squid start
# cd /dev/shm/squid 或 cd /var/spool/squid/
# ls //会发现产生了许多的用于缓存的目录
正向代理设置
1)设置监听的端口和IP
# vi /etc/squid/squid.conf
http_port 3124 //此为默认端口,可更改
除此之外,可使用http_port参数来指明在某指定接口地址的端口上进行监听,格式为:
http_port IP:port
2)设置缓冲大小
cache_dir参数用于设置Squid以何种方式存储cache文件到磁盘的什么位置,定义格式为:
cache_dir scheme directory size L1 L2 [options]
字段注释
scheme 指定存储机制,有 ufs aufs diskd等,默认为ufs
directory 指定缓存文件放置路径
size 指定cache目录的大小,是Squid能使用的cache_dir目录的上限,单位为MB
L1 L2 指定Squid在cache目录(默认为/var/spool/squid/)下可以创建的目录数量.L1 L2分 别指定了第一级和第二级目录的数量
options cache_dir的选项,有2个.
read-only 指定Squid只从cache目录中读取文件,但不写入新目标
max-size 指定cache目录里的最大目标大小
系统默认设置为:
cache_dir ufs /var/spool/squid 100 16 256
cache_mem 参数 定义缓存大小,默认为64MB
cache_mem 64 MB
其他重要参数:
cache_mgr (定义服务器管理员)
maximum_object_size 4096 KB (定义最大的缓存对象为4096KB)
reply_body_max_size 10240000 allow all (定义访问响应对象不能大于10MB)
access_log /var/log/squid/access.log squid(定义访问日志位置)
visible_hostname localhost.example.com(定义可用主机名)
cache_effective_user 设定使用缓存的有效用户
cache_effective_group 设定使用缓存的有效组
dns_nameservers IP 为使Squid能解析域名,必须告诉Squid有效的DNS服务器地址
3)访问控制
acl (access control list,访问控制列表)为Squid进行网络控制的工具参数,用来过滤进出代理服务器的数据,格式为:
acl 列表名称 列表类型 [-i] 列表值1 列表值2 ......
参数说明:
列表名称 用于区分Squid的各个访问控制列表ACL,任何两个访问控制列表ACL不能定义 相同的列表名称
列表类型
定义可被Squid识别的类型,常见类型有:
src 指定客户端的源IP地址
dst 指定目标服务器IP地址
myip 指定Squid的IP地址,被客户端链接
dstdomain 指定目标主机域名,常用于基于域名的访问控制,阻止对某些站点的 访问
srcdomain 客户机所在的域
port 指定端口号,常用来限制对某些目标服务器端口号的访问
time 日期以及时间控制
日期控制有
# # S - Sunday
# # M - Monday
# # T - Tuesday
# # W - Wednesday
# # H - Thursday
# # F - Friday
# # A – Saturday
时间控制格式 h1:m1-h2:m2 # h1:m1 must be less than h2:m2
proxy_auth 设置通过外部程序进行认证
maxconn 指定同一时间来自客户端的最大连接数
[-i] 忽略大小写
设置范例:
#访问控制
acl INTERNAL src 192.168.0.0/24
acl BADPC src 192.168.0.25 //控制列表
http_access deny BADPC //允许或拒绝某个控制列表的HTTP请求
http_access allow INTERNAL
#限制访问时段
acl KIDsPC src 192.168.0.25
acl CLEANTIME time MTWHF 15:00-18:00 //设置了星期与时间段
http_access deny KIDsPC CLEANTIME
站点屏蔽
#echo 151.11.56.58 > /etc/squid/***ip
#echo .***.com > /etc/squid/***dn
#echo > /etc/squid/***url
#echo *** > /etc/squid/***tag
#chown root:squid /etc/squid/***{ip,dn,url,tag}
#chmod 640 /etc/squid/***{ip,dn,url,tag}
#vi /etc/squid/squd.conf
添加如下:
acl ***ip dst "/etc/squid/***ip" //***ip 记录不法 ip 地址
acl ***dn dstdomain "/etc/squid/***dn" // ***dn记录不法域名)
acl ***url url_regex "/etc/squid/***url" // ***url记录不法网址)
acl ***tag urlpath_regex "/etc/squid/***tag" //***tag记录不法关键字
http_access deny ***dn
http_access deny ***ip
http_access deny ***url
http_access deny ***tag
#限制访问端口
acl SSL_ports port 443
acl Safe_ports port 80
acl Safe_ports port 21
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
设置完成,重启服务
# squid -k reconfigure
代理客户端的设置
1 Windows系统下的IE代理设置
鼠标邮件单击Internet Explorer---->属性---->”连接”选项卡---->单击“局域网设置”
---->在”局域网(LAN)设置”对话框中,勾选”为LAN石油代理服务器”,在“地址”文本框中输入正确的代理服务器IP地址和端口号------>单击确定
2 Linux系统下的Firefox代理设置
打开Firefox浏览器---->编辑(Edit)----首选项(Preferences)---->在弹出的对话框中选择”高级”(Advanced)---->网络(Network)---->设置(Settings...)----在打开的对话框中选择“手动设置”
(Manual proxy configuration)----输入相关代理服务器的IP地址与端口号
反向代理设置
此为web服务器使用squid,以实现用户快速访问站点
webserver 192.168.0.20 192.168.0.30
# vi /etc/squid/squid.conf
http_port 192.168.0.254:80 transparent vhost vport
cache_peer 192.168.0.20 parent 80 0 no-query originserver name=webserver1 round-robin
cache_peer 192.168.0.0 parent 80 0 no-query originserver name=webserver2 round-robin
cache_peer_domain webserver1 webserver2
//如此,当用户访问该站点的某台Web服务器时,直接访问 ,该设置实现了Web服务的负载均衡,当一台Web停止工作时,另一台将继续被使用
注:记得在web服务器上添加对的地址解析,使其指向代理服务器Squid的主机地址
squid 用户认证
# htpasswd /etc/squid/passwd test
#chown root:squid /etc/squid/passwd
#chmod 640 /etc/squid/passwd
#vi /etc/squid/squid.conf
acl INTERNAL src 192.168.0.0/24
acl AUTHUSERS proxy_auth REQUIRED
http_access allow INTERNAL AUTHUSERS
auth_param basic program /usr/lib64/squid/ncsa_auth /etc/squid/passwd //注意认证密码,程序的 // 放置路径
auth_param basic children 5
auth_param basic realm Squid-Home Proxy Server
auth_param basic credentialsttl 2 hours //认证的设置尽量写在前面,防止 //被其他设置覆盖
重启服务
# squid -k reconfigure
当在使用代理服务时,将要求输入设置的代理服务器密码
Note: 在squid.conf文件的设置中,按从上到下进行过滤,如同iptables,写在前面的优先生效,
故用户自行设置的选项参数尽量写在文件前端
其他一些相关命令:
squid -z (初始化缓存目录结构)
squid -D(也可启动squid服务,但不做dns解析测试)
squid -k shutdown 关闭
squid -k interrupt 关闭
squid -k reconfigure 重载配置文件
squid -k check 检测状态
日志文件路径 :/var/log/squid/ 配置出错时可查看日志文件
注意:正向代理、反向代理、透明代理均不可同时
使用任意两者。