原理:Squid 是一个万维网客户的高性能代理缓存服务器。它支持 FTP、gopher 以及 HTTP 数据对象。与传统的缓存软件不同,Squid 只用一个非堵塞的 I/O 驱动的进程来处理所有请求。Squid 保存元数据,把特别热门的对象缓存在内存中;它还缓存 DNS 查寻,支持非堵塞 DNS 查寻,并对失败的请求实现负缓存。
Squid 由一个主服务器程序 squid,一个域名系统查寻程序 (dnsserver),一个用来检索 FTP 数据的程序 (ftpget),以及一些管理和客户工具组成。
squid正向代理服务器
原理:正向代理就是通常所说的代理,是某台电脑通过一台服务器来上Internet网的这种方式,其中这台电脑就叫客户机,这台服务器就叫正向代理服务器也就是通常所说的代理服务器。在这种方式中,你是主动的,网站是被动的,网站那里不能得到你的真实ip地址。(通俗讲法)正向代理服务器。它只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器(一般在IE-Internet选项-连接-局域网设置),并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。
常见的代理服务器有Squid、Varnish(只做反向代理)、ATS、Nginx(既是可以做web服务器又可以做反向代理,但通常做反向代理)
按照上面的原理我们来画拓扑图
实现正向代理服务器的过程
(1)先在正向代理服务器安装squid组件,(服务器需要2块网卡,1块是(图中eth1)桥接用来连接外网,一块是(图中eth0)host-only链接方式,用于和内网主机链接)
通过rpm来安装squid软件包
[root@localhost Server]# rpm -ivh squid-2.6.STABLE21-3.el5.i386.rpm #安装squid软件包
warning: squid-2.6.STABLE21-3.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing... ########################################### [100%]
1:squid ########################################### [100%]
[root@localhost Server]# rpm -ql squid |less #安装好后我们来查看文件存放路径
/etc/httpd/conf.d/squid.conf #和apache可以一起使用
/etc/logrotate.d/squid
/etc/pam.d/squid
/etc/rc.d/init.d/squid #控制脚本
/etc/squid/squid.conf #服务器的主要配置文件
/etc/squid/squid.conf.default #如果配置文件不小心被删除,这个文件是配置文件模板
/usr/lib/squid #服务器的安装位置
/var/log/squid #日志存放位置
/var/spool/squid #缓存存放
安装好后这时我们来启动squid
[root@localhost Server]# service squid start
init_cache_dir /var/spool/squid... 启动 squid:. [确定]
#Squid的监听端口是tcp/3128 udp/3130
[root@localhost ~]# netstat -tupln |grep squid
tcp 0 0
udp 0 0
udp 0 0
[root@localhost ~]#
安装完成后squid默认配置是作为正向代理,向内网用户提供链接外网服务,可以配置squid.conf来限制内网用户上网时间,访问网址限制,访问外网文件格式和图片限制等
(2)我们进行配置
vim配置squid.conf文件 (别忘记配置前先复制备份)
squid的配置文件共有4519行
[root@localhost ~]# vim /etc/squid/squid.conf
1.# Squid normally listens to port 3128 #在920行
http_port 192.168.1.254:3128 # 让squid监听eth0对应ip的3128端口
2. # cache_mem 8 MB
cache_mem 80 MB #在1576行添加squid可以使用的内存大小
3.# TAG: visible_hostname #在1995行添加一行visible_hostname 自行解析容易出错
visible_hostname 192.168.1.254 我使用的是主机的网关
4. 查找cache_dir # 此是设置缓存目录
# TAG: cache_dir 在1638行
cache_dir ufs /var/spool/squid 100 16 256 #在安装squid软件包后,缓存就存放在该目录,100表示缓存大小100M,一般为内存的1/4,16表示16个一级子目录,256个二级子目录
5. 查找http_access
http_access allow localhost 在637行
http_access allow all #修改http_access deny all为http_access allow all 允许用户访问
上述操作仅仅是设置完内网可以通过squid访问外网,并没有对访问进行限制
启动squid服务
[root@localhost]#squid –k parse #查看语法错误
[root@localhost ~]# service squid restart
停止 squid: [确定]
启动 squid:. [确定]
(3)
PC1的设置
PC1我用的是windows server 2003虚拟机,此虚拟机用host-only连接,而且PC1不用配置网关地址,代理服务器在PC上的配置在IE浏览器→属性→连接
(4)通过编辑主配置文件的acl实现正向代理的访问控制
acl 列表名称 列表类型 列表内容
1.acl aclname src ip-address/netmask ... (clients IP address)
#基于客户端来源IP地址控制
例:1.acl MYNETWORKS src 192.168.1.100/32
http_access allow MYNETWORKS #允许上面的IP通过squid正向代理访问网络
http_access deny all #除了上面允许的访问控制之外全部拒绝访问
2.acl aclname src addr1-addr2/netmask ... (range of addresses)
#基于客户端来源IP地址范围的控制
3.acl aclname dst ip-address/netmask ... (URL host's IP address)
#基于目标主机IP地址控制
4.acl aclname myip ip-address/netmask ... (local socket IP address)
#基于本主机IP地址控制
5.acl aclname arp mac-address ... (xx:xx:xx:xx:xx:xx notation)
#基于MAC地址控制
6.acl aclname srcdomain .foo.com ... # reverse lookup, client IP
#基于来源域的控制此方法先解析ip再对ip禁止访问,格式如.abc.com
7.acl aclname dstdomain .foo.com ... # Destination server from URL
#基于目标URL控制
8.acl aclname srcdom_regex [-i] xxx ... # regex matching client name
9.acl aclname dstdom_regex [-i] xxx ... # regex matching server
10.acl aclname time [day-abbrevs] [h1:m1-h2:m2]
day-abbrevs:
S - Sunday
M - Monday
T - Tuesday
W - Wednesday
H - Thursday
F - Friday
A - Saturday
h1:m1 must be less than h2:m2
#基于时间的控制
例 acl worktime time 08:00-12:00 14:00-18:00 #在这个时间段不能上网
http_access deny worktime
11.acl aclname url_regex [-i] ^http:// ... # url_regex -i 跟完整路径-i忽略大小写
12.acl aclname urlpath_regex [-i] \.gif$ ... #urlpath_regex 部分路径,图片格式控制
13.acl aclname port 80 70 21 ... #port端口访问控制
14.acl aclname port 0-1024 ... # ranges allowed(端口范围)
15.acl aclname myport 3128 ... # (local socket TCP port)
16.acl aclname proto HTTP FTP ... #proto定义协议
17.acl aclname method GET POST ... #方法
18.acl aclname browser [-i] regexp ... # browser 浏览器访问控制
当然上面列的都是常用控制,我们这个实验是允许局域网内192.168.1.0/24网段通过代理服务器上网,可以用IP范围,也可以用网段,其他控制就要看你需求了。
1. acl ip src 192.168.1.0/24
http_access allow all ip
2.acl ip src 192.168.1.1 -192.168.1.243 255.255.255.255
http_access allow all ip