Squid代理linux
目标:web
了解squid的工做原理,熟练掌握squid的配置,实现其普通代理,透明代理,方向透明代理,http_access控制正则表达式
内容:apache
A.Squid简介:vim
Squid代理是目前使用很是广泛的一种将局域网和interner链接到一块儿的方式,这样作的理由和好处入下:浏览器
1, 能够预存缓存,减轻服务器的访问压力,同是也能够提升client的访问速度。例如咱们平时用的126,163,都是基于squid代理缓存
2, 在必定程度上很大的解决了IP紧张的问题。安全
3, 它能够对web访问的方式基于应用层内容进行过滤控制,同时由于它介于服务器和client之间,在必定程度上提升了服务器的安全性。服务器
缺点:网络
Squid支持的服务种类较少:HTTP. FTP.
Squid根据代理的方式分为普通代理,透明代理,方向透明代理。
1. 标准的代理缓冲服务器
一个标准的代理缓冲服务器主要用来存储用户访问过的网页信息,当client向squid服务器请求时,squid服务器在向web请求数据,将数据传给client的同时会缓存一份在本身缓存器中,在必定时间内有一样的请求时,squid就不用再向webserver请求数据,而是直接将缓存中的数据恢复给库户端,这样既提升了client的访问速度,又大大减轻了服务器的访问压力。可是其最大的缺点是client须要在本身的web浏览器中配置squid代理服务器的地址和端口号,这很大程度上增长了client的难度和网络管理员的管理难度。所以出项了下面的透明代理
2. 透明代理缓冲服务器
透明代理缓冲服务和标准代理服务器的功能彻底相同。可是,代理操做对客户端的浏览器是透明的(即无需指明代理服务器的IP和端口)。咱们须要在linux squid代理服务器上作最一些相应的改动,并作iptables的端口转发便可。这对与企业的网管主机共享接入到Internet很实用。
3. 反向代理缓冲服务器
反向代理是和前两种代理彻底不一样的一种代理服务。使用它能够下降本地WEB服务器的负载。反向代理服务器承担了对原始WEB服 务器的静态页面的请求,防止本地服务器过载。它位于本地WEB服务器和Internet之间,处理全部对WEB服务器的请求, 组织了WEB服务器和Internet的直 接通讯。若是互联网用户请求的页面在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。若是没有缓冲则先向WEB服务器发出请求,取回数据,本地缓存后再发送给用户。这种方式经过下降了向WEB服务器的请求数从而下降了WEB服务器的负载
B.Squid的基本配置
v squid软件包
ü 软件包名:squid-2.6.STABLE6
ü 服务名:squid
ü 主程序:/usr/sbin/squid
ü 配置目录:/etc/squid/
ü 主配置文件:/etc/squid/squid.conf
ü 默认监听端口:TCP 3128
ü 默认访问日志文件:/var/log/squid/access.log
v 经常使用配置项
ü http_port 3128
ü cache_mem 64 MB (为本身物理内存的1/3便可)
ü maximum_object_size 4096 KB
ü reply_body_max_size 10240000 allow all
ü access_log /var/log/squid/access.log squid
ü visible_hostname proxy.test.com
ü cache_dir ufs (unix file system) /var/spool/squid (为缓存目录分配的磁盘空间) 100 (为缓存目录分配的磁盘空间(MB) 16 (缓存空间的一级子目录个数)256 (缓存空间的二级子目录个数)
经常使用命令
Squid –z 初始化缓存
Squid -k parser 分析配置文件语法错误
Squid -d 调试启动 -D 启动squid服务。
咱们来作个简单实验来实现一个简单的透明代理:
实验环境:
外网:192.168.0.254 (httpd,ftp)
Squid:eth0 192.168.0.20
eth1 10.0.2.150
内网:10.0.2.20
注意:
Squid默认是deny all的。咱们须要事先在squid.conf配置文件中在http_access deny all 的前面加入http_access allow all。启动squid代理服务。在10.0.2.20的IE中加入squid的端口号以及IP地址。显示出 RedHat enterprise test page为正常
下面咱们来正是开始咱们的实验:
1. 实现透明代理
透明代理的实现步骤:
修改squid.conf配置文件,并从新加载该配置
http_port 192.168.0.20:8080 transparent
[root@congtou squid]# service squid reload
添加iptables规则
[root@congtou squid]# iptables -t nat -A PREROUTING -i eth1 -s 10.0.2.150 -p tcp --dport 80 -j REDIRECT --to-ports 8080
客户机浏览器
不须要在浏览器中指定代理服务器的地址、端口 http;//192.168.0.254
2. 实现反向透明代理
http_port 218.29.30.31:80 vhost
cache_peer 192.168.10.7 parent 80 0 originserver weight=5 max-conn=30
cache_peer 192.168.10.8 parent 80 0 originserver weight=5 max-conn=30
注意:
这里须要注意的是反向透明代理是不能和透明代理一块的实现的。
咱们须要取消掉刚才透明代理的配置,再开始作反向透明代理。
反向透明代理的实现步骤
[root@mail postfix]# vim /etc/squid/squid.conf 在配置文件中添加以下语句:
http_port 10.0.2.100:80 vhost
cache_peer 192.168.0.254 parent 80 0 originserver weight=5 max-conn=30
cache_peer Web服务器地址 服务器类型 http端口 icp端口 [可选项]
(由于咱们这里只有一个web服务服务器,这里的意思是想让你们了解下这个语句的用法) 权重为5,最大的连接数为30
测试
在10.0.2.150地址栏输入 http;//10.0.2.100 出现测试页为正常
查看日志记录
[root@congtou named]# tail -1 /var/log/squid/access.log
1267973512.539 40 10.0.2.150(source) TCP_MISS/200 2795 GET http://10.0.2.100(destination)/icons/apache_pb2.gif - FIRST_UP_PARENT/192.168.0.254 (server)image/gif
下面咱们来作一些访问规则的配置测试
v 访问控制规则的匹配顺序
ü 没有设置任何规则时
—— 将拒绝全部客户端的访问请求
ü 有规则但找不到相匹配的项时
n 将采用与最后一条规则相反的权限,即若是最后一条规则是allow,那么就拒绝客户端的请求,不然容许该请求
n 当两个命令罗列到一块是取其交集
选项:
ü src
ü dst
ü port
ü srcdomain 来源域限制
ü dstdomain 转发域限制
ü time 时间限制
ü maxconn 最大链接数限制
ü url_regex 正则表达式限制
ü urlpath_regex 正则表达路径限制
ü arp mac限制
ü proto 协议限制
规则示例:
ü acl LAN1 src 192.168.10.0/24
ü acl PC1 src 192.168.10.12/32
ü acl Blk_Domain dstdomain .qq.com
ü acl Work_Hours time MTWHF 08:30-17:30
ü acl Max20_Conn maxconn 20
ü acl Blk_URL url_regex -i ^rtsp:// ^mms://
ü acl Blk_Words urlpath_regex -i sex adult
ü acl RealFile urlpath_regex -i \.rmvb$ \.rm$
要求:
容许10.0.2.0网段的主机在天天的8:00-18:00登陆192.168.0.254ftp服务,可是不能下载pdf格式的文件。
容许10.0.2.0网段的主机在22:00 -23:59 00:00-8:00 访问服务器的httpd服务
在配置文件中作以下修改:
acl srcnetwork src 10.0.2.0/24 来源限制
acl desnetwork dst 192.168.0.0/24
acl ftptime time 8:00-18:00
acl httptime time 22:00-23:59
acl httptime time 00:00-8:00
acl ftp proto FTP
acl http proto HTTP
acl class url_regex ^.*\.pdf$
http_access allow srcnetwork desnetwork ftptime ftp !class
http_access allow srcnetwork desnetwork httptime http ==========》经测试成功,以上均成功
其余的命令你们能够本身测试试试。
Over