squid代理服务器

安装squid

有的发行版本会预装squid服务,有的则没有。

# yum install squid

代理服务器概述

squid提供缓存加速,应用层过滤控制的功能。当客户机通过代理请求web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要的页面,则直接将缓存的页面内容返回给客户机;如果缓存中没有客户机要访问的页面,则由代理服务器向internet中发送访问请求,当获得返回的web页面以后,将网页数据保存到缓存中并发送给客户机。

http代理的缓存加速对象主要是文字,图像等静态web元素。使用缓存后减少了向internet提交重复的web请求的过程,提高了客户机的web访问相应速度。

由于客户机的web访问请求实际上是由代理服务器代替完成的,从而可以隐藏用户的真是IP地址,起到一定的保护作用。代理服务器也可以起到过滤作用。

代理服务器的基本类型


1)。传统代理

就是普通代理服务,在客户机的浏览器,QQ聊天工具等软件中,必须手动设置代理服务器的地址和端口,然后才能使用代理来访问网络。对于也米娜浏览器来说,访问网站是的域名解析请求也要发给指定的代理服务器。

2)。透明代理

提供的功能与传统代理相同,区别在于透明代理不用指定代理服务器的地址和端口。而是通过默认路由,防火墙策略将WEB访问重定向,这个过程对于客户机来说是透明的,客户机不知道自己使用了代理,所以叫透明代理。使用透明代理时,网页浏览器访问网站时的域名解析请求将优先发给DNS服务器。

实际应用中传统代理多用于internet中,例如:电脑程序使用代理可以隐藏本机真实的IP地址,为下载工具使用多个代理可以规避服务器的并发连接限制。透明代理多用于局域网环境。

Squid的配置文件

squid 的配置文件位于 /etc/squid/squid.conf

http_port 3128    //代理服务监听的地址和端口(默认端口为3128);如果服务器有多个网络接口,但只希望给一个IP 提供服务,还可以指定IP地址和接口,例: http_port 192.168.1.33:3128

cache_mem 64 MB    //指定缓存功能所使用的内存大小,单位为MB,容量应为4的倍数,建议设为实际内存的1/4到1/3,具体根据服务器的性能和负载而定。

maximum_object_size 4096 KB      //允许保存到缓存空间的最大对象(文件)大小,单位KB,超过限制大小的文件将不会被缓存,而是直接发给用户,默认的4096KB基本可以满足一般页面,但是希望代理音频,视频等缓存文件时,则应适当增加参数。

reply_body_max_size 10240000 allow all    //允许用户下载的最大文件大小,以字节(byte)为单位,默认设置为0字节,表示不限制。其中 all 指任意用户。

cache_dir ufs    /var/spool/squid 100 16 256    //指缓存数据所使用的目录,容量,子目录个数等相关参数。ufs(UNIX file system,squid最早使用的缓存文件的格式)/var/spool/squid 缓存数据的默认存放目录;后面的数字依次表示为缓存目录分配的磁盘空间大小(MB),以及子目录个数,二级子目录个数。当代理的用户数量较多时,可以适当增大缓存目录大小。

access_log /var/log/squid/access.log squid    //指定代理服务器的日志位置及记录格式(squid

visible_hostname proxy.dyq.com    //    代理服务器本机的可见主机名

dns_testnames www.google.com www.sina.com.cn www.162.com     //用来指定DNS解析,为了确保解析正常,最好设置多个DNS。

传统代理构建

传统代理的特点在于,客户机的相关程序必须指定代理服务器的地址,端口等基本信息。下面举例说明。

例子说明:

    服务器A →→  服务器B(squid代理) →→ 客户机c

192.168.1.12        192.168.1.13                     192.168.1.14

配置Squid 实现传统代理服务时,需要注意两个地方:

1. 配置好可见的主机名

2. 添加 http_access allow all 访问策略,以允许任何客户机都可以使用代理服务。

修改squid.conf 配置文件

# vim /etc/squid/squid.conf

http_port 3128

visible_hostname localhost.localdomain

reply_body_max_size 10240000 allow all    #允许下载的最大文件大小

http_access allow all    #放在http_access deny all 之前

初始化并启动 squid 服务

第一次启动squid服务时,会启动并初始化缓存目录,在没有可用的squid服务脚本的情况下,也可以直接滴啊用squid程序来启动服务,这时需要先进程初始化。

squid -z     //-z选项用来初始化缓存目录

squid -D    //启动squid服务;-D 表示不DNS测试

修改完squid.conf 配置文件以后,需要重新加载才能生效。

service squid reload 

squid -k reconfigure        //这两个命令都可以重新加载配置。

确认squid 服务运行正常

# netstat -anpt | grep "squid"

tcp        0      0 :::3128                     :::*                        LISTEN      8556/(squid)

设置客户端配置

一般的浏览器,程序都有配置代理的选项,这个百度就好,不多说了

验证代理服务器

使用代理后的浏览器访问网站,然后再查看服务器的日子文件,查看访问日志,看同一时间的IP 有没有变化。

透明代理

透明代理与传统代理提供的服务是一致的,但是其 透明 的实现依赖与默认路由和防火墙的重定向策略,因此更适合于为互联网主机服务,而不适合为internet中的客户机提供服务。

基于局域网主机通过linux网关访问internet的环境,描述如下:

(1)在linux网关上,构建squid为客户机访问internet提供代理服务。

(2)在所有的局域网客户机上,只需正确设置IP地址,默认网关,不需要手动指定代理服务器的地址,端口等信息

透明代理的关键在于linux网关服务器,而对于客户机仅需正确设置网络地址,默认网关,而并不需要指定代理服务器。

至于客户机的DNS解析功能,最好是通过正常DNS解析,不推荐交给代理服务器处理。下面主要介绍squid服务的透明代理设置,防火墙策略设置,其他操作参考前面的传统代理配置过程。

配置Squid支持透明代理

squid默认不支持透明代理,如果要设置的话,要在 http_port 配置后面加上 transparent(透明)选项,就可以支持了。

# vim /etc/squid/squid.conf

http_port 192.168.1.33:3128 transparent

:wq

# service squid reload

设置iptables的重定向策略

squid服务是构建在linux网关之上的,因此只需正确设置防火墙策略,就可以将局域网主机访问internet的数据包转交给squid进行处理。这需要用到iptables的REDIRECT(重定向)策略,其作用是实现本机端口的重新定向,将访问网站协议http https的外发数据包转交给本机的squid服务(3128端口)

REDIRECT 也是一种数据包控制类型,只能在nat表的PREROUTING或 OUTPUT 链以及被其调用的链中使用,通过  --to-port 端口号 的形式来指定映射的目标端口。

例:192.168.4.0/24 访问的http  https 等协议的数据包,转交给运行在本机3128 端口上的squid服务处理

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

# iptabbles -t nat -A PREROUTING -i eth1 -s 192.168.4.0/24 -p tcp --dport 443 -j REDIRECT --to-ports 3128

FTP协议因为涉及多个端口,多个连接,使用透明代理不太好实现,所以推荐用传统代理,手动指定代理IP,端口。

验证透明代理的使用

有些软件可以设置代理服务器的地址,在linux中也可以用unset命令清楚 HTTP_PROXY , HTTPS_PROXY 等变量

# unset HTTP_PROXY HTTPS_PROXY

###

ACL访问控制

squid服务器通过合理设置ACL(Access Control List  访问控制列表)并进行限制,可以针对源地址,目标地址,访问的URL路径,访问的时间等各种条件进行过滤。

在配置文件squid.conf中,ACL访问控制通过以下两个步骤来实现:

(1)使用acl配置项定义需要控制的条件

(2)通过http_access配置项对已定义的列表做”允许“或”拒绝“访问的控制。

定义ACL列表

格式:

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

其中,”列表名称“可以随便起;”列表类型“必须使用squid预定义的值,对应不同类别的控制条件;”列表内容“是控制的具体对象,不同类型的列表所对应的内容也不一样。可以有多个值(以空格分隔,为”或“的关系)

访问控制的关键在于,选择的列表类型,具体条件对象。

设置 acl 访问权限

定义好访问控制列表以后,需要使用 httpd_access  配置项来进行控制。注意:http_access 配置行必须放在对应的acl配置行之后,每一行http_access配置确定一条访问控制规则。

格式:

http_access allow或deny 列表名...

每一条 http_access 规则中可以包含多个列表名,每个列表名之间用空格分开(与 的关系),表示必须满足所有acl列表对应的条件才会进行限制。使用取反条件时,可以在acl 列表前添加 ”!“感叹号。

# vim /etc/squid/squid.conf

http_access den MYLAN MEDIAFLE        //禁止客户机下载mp3,mp4等文件

http_access allow MYLAN WORKTIME        //允许客户机在工作时间上网

http_access deny all        //默认禁止所有客户机使用代理

执行访问控制时,squid将按照各条规则的顺序依次进行检查,如果找到一条相匹配的规则就不再向后搜索(这点与iptables的规则匹配类似)。因此,规则的顺序安排是非常重要的,一下两种默认情况需要我们注意:

(1)没有设置任何规则时:squid服务将拒绝客户端的请求。

(2)有规则但找不到相匹配的项:squid将采用与最后一条规则相反的权限,即如果最后一条规则时allow ,就拒绝客户端的请求,否则允许该请求。

通常情况 下,把最常用到的控制规则放在最前面,以减少squid的负载。在访问控制的总体策略上,建议采用"先拒绝后允许"或“先允许后拒绝”的方式,最后一条规则设为默认策略,设为“http_access allow all”或者“http_access deny all”


你可能感兴趣的:(代理服务器,浏览器,internet,IP地址,客户机)