您的位置:首页 > 运维架构 > 反向代理

Squid搭建

2016-06-18 12:53 357 查看
<--目录-->

1)Squid理论知识
2)Squid服务器的搭建

【Squid理论知识】
Squid代理缓存服务器

一、搭建代理服务器
1、什么是代理服务器,用在哪里
当一个用户想要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid连接
所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页
面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快,nginx只能缓存静态页面。



能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同的资
源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公网,我接
收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的缓存里回复你,
如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替你去访问公网

2、实现代理服务的软件有哪些 (Squid nginx varnish)

3、工作原理
Cache
^|
2||3
|v
___ 1 ___ 5 ____
| | -------------> | |-------------> | |
|___| <------------- |___|<------------- |____|
4 6
客户机 Squid代理服务器 www.163.com

首先代理服务器要有两块网块,一块连接公网,一块连接私网,如果私网有两个网段,那就要三块网卡,一块连接公网,两块连接
私网;然后在客户机浏览器里指定代理服务器的IP地址和端口号,访问网站的时候,就会读浏览器里的配置,就会把请求发给指的
IP主机,而端口号就是Squid响应用户的哪个请求,代理服务器接收到了,首先会先查看acl(访问控制列表),acl在配置文件里定义,看满不满
足acl的控制列表的控制,如果满足,会先在缓存里查询,有就直接回应,没有就代替你去访问真正的目标主机,然后会先保存一份
放在缓存里,然后再回应用户的请求

4、拓扑图

192.168.1.0/24
内网客户端主机 Squid代理 公网Web服务器

192.168.1.254/24
eth0 192,168.1.10 eth0
pc100---------------------squid--------------web eth01.1.1.1
eth1
访问 1.1.1.254/8 http://1.1.1.1
准备3台rhel5的操作系统的服务器,彼此间可以正常通信,其中代理服务器有2块网卡
关闭所有服务器的 selinux iptables; 开发工具、开发库软件包组已安装
如果代理服务器连接两个不网段的主机那就要三个网卡,两个连接不同网段的内网,一个连接公网

常用配置项
主配置文件路径 /etc/squid/squid.conf
主配置文件 squid.conf
模板文件 /etc/squid/squid.conf.defualt
监听端口号 http_port 3128
查询缓存的大小 cache_mem 8 MB //设置为真机内存的三分之一或三分之二
cache_dir ufs /var/spool/squid 100 16 256
文件类型 缓存目录名 目录大小M 一级目录个数 二级目录个数
access_log /var/log/squid/access.log suqid //日志存路径,最后面的squid是记录文件的格式

visible_hostname proxy.wsyht.com //设置代理服务器的主机名

/etc/hosts
192.168.1.254 proxy.wsyht.com proxy //在代理服务器本机设置了主机名,也要在hosts里面设置,可以内网IP或外网IP,必须要设,否则服务启不来

maximum_object_size 4096 KB //允许缓存的最大对像
reply_body_max_size 10240000 allow all //允许访问的最大对像

进程名 squid
端口 3128
进程所有者 squid
传输协议 TCP

代理方式

普通代理:
客户端必须在自已的浏览器里指定代理服务器的IP地址和监听的端口号,
才能通过代理服务器访问公网的网站服务

普通代理的好处:节省缓存服务器到公网这部分的带宽,加大访问速度

透明代理
客户端不需要在浏览器里指定代理服务器的IP地址和监听的端口号就可以
直接访问公网上的网站服务器给用户的感觉就是自已直接和公网通信的

适用于企业的网关主机(共享接入Internet)中
客户机不需要指定代理服务器地址、端口等信息
需要设置防火墙策略将客户机的Web访问数据转交给代理服务程序处理

透明代理的好处:节省缓存服务器到公网这部分的带宽,加大访问速度,
客户端不用在浏览器设置指定IP和端口号

普通代理和透明代理都是代替局域网用户访问公网

反向代理(代替公网客户端访问内网的网站服务器)
反向代理的好处:
加快公网的访问速度
节省内网到缓存服务器这部分的带宽
减少服务器的压力
使公网的用户不知道我真正的服务器的IP

acl 访问控制列表
acl的作用:squid服务使用acl限制客户端通过自已可以访问的网络资源

inside-web<------------反向代理 <------------ internet

透明代理
pc--------------------> -------------> internet-web
普通代理

acl在主配置文件squid.conf文件中定义
定义acl格式:

acl acl名称 类型 匹配内容

acl类型
src 源地址
acl all src 0.0.0.0/0.0.0.0 //所有网段的所有主机
acl pc1 src 192.168.1.1/255.255.255.255 //只有1.1可以访问
acl pc2 src 192.168.1.0/8 //前三位必段固定匹配,后面一位数字可以改变,条件匹配才可以访问
http_access allow pc1
http_access deny all
网段
IP地址

dst 目标地址
网段
IP地址

port 端口
80
21,22,25
25-101

dsdomain 目标域
www.baidu.com
.sina.com.cn

time 访问时间
acl 名称 time 星期 起始时间-结束时间 //星期是周一到周日单词的首字母
acl aclname time [day-abbrevs] [h1:m1-h2:m2]
例:
acl worktime MTWHFAS 09:00-18:00
http_access deny pc2 worktime
# day-abbrevs:
# S - Sunday
# M - Monday
# T - Tuesday
# W - Wednesday
# H - Thursday
# F - Friday
# A - Saturday

maxconn 最大并发连接
20
例:
acl pc2 maxconn 10

url_regex 目标URL地址 http:// ftp://

Urlpath_regex 整个目标URL路径 http://xxx.xxx.xx
acl的使用规则:
先定义后调用,acl名称具有唯一性要有标识性,acl也可以只定义不调用
类型关健字是固定的,类型acl已经提供好的,不同的类型匹配不同的数据
匹配内容根据类型写不同的匹配方式

调用acl的命令
http_access deny acl名称列表(acl名称用空格间隔)

http_access allow acl名称列表(acl名称用空格间隔)

deny 拒绝
allow 允许

http_access的匹配顺序:
遇到匹配的就执行,后边的就不在匹配了

安例:

http_access deny/allow acl名称列表

vim squid.conf
acl notpc src 192.168.1.250/255.255.255.255
http_access deny notpc

acl all src 0.0.0.0/0.0.0.0
acl my192 src 192.168.1.0/24
acl my193 src 192.168.2.0/24
acl my193 src 192.168.3.0/24

http_access allow my192
http_access deny all

vim /etc/squid/ipblosck.list //定义条件匹配文件,名字随便起,但所属组和所属用户必须为squid,路径存放在哪里都行
61.135.16.36
60.28.16.0./24

vim /etc/wquid/dmblock.list
.qq.com
.msn.com

vim /etc/quid/squid.conf
acl ipaddress dst "/etc/squid/ipblock.list"
acl dmname dstdomain "/etc/squid/dmblock.list"
http_access deny ipaddress
http_access deny Dmname

Acl案例
acl LAN1 src 192.168.1.0/24
acl PC1 src 192.168.1.66/32
acl Blk_Domain dstdomain .qq.com .kaixin001.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$ \.mp3$

http_access deny LAN1 Blk_URL
http_access deny LAN1 Blk_Words
http_access deny PC1 RealFile
http_access deny PC1 Max20_Conn
http_access deny LAN1 Work_Hours

【Squid服务器的搭建】
实验拓扑:

内网客户端 代理缓存服务器
eth0 192.168.1.10 eh0 192.168.1.254/24 公网网站
Pc100----------------------------Squid---------------------------Web eth0 1.1.1.1
eth1 1.1.1.254/8

三台主机公共配置(实验一、二、三都需配置)
#service iptables stop
#chkconfig --level 35 iptables off
#setenforce 0
#yum -y groupinstall "开发工具" "开发库"

实验一:
普通代理服务器的搭建(代理服务器代替局域网用户访问公网网站)

一、配置代理服务器
安装提供代理服务的软件包(Squid)
#yum -y install squid
#chkconfig --level 35 squid on

修改主配置文件
#vi /etc/squid
...
1579 cache_mem 8MB //取消注释
1786 cache_dir ufs /var/spool/squid 100 16 256 //取消注释
637 http_access allow all //取消注释,允许所有访问
...

启动代理服务
#service squid start

二、配置公网网站服务器(启动服务、编写网页文件)
#echo "00000" /var/www/html/index.html
#service httpd start
#chkconfig --level 35 httpd on

三、配置客户端(192.168.1.10)
在浏览器里指定服务器的ip地址和端口号
#firefox &
点击菜单栏 编辑->首选项->高级->网络->设置->HTTP 代理: 192.168.1.254 端口: 3128

浏览器地址栏访问 http://1.1.1.1
实验二:
透明代理服务器的搭建(代理服务器代替局域网用户访问公网网站)

一、配置代理服务器
开启防火墙
#setup
#service iptables start
#iptables -F
#iptables -nvL
#service iptables save
#chkconfig --level 35 iptables on

在代理服务器上配置防火墙规则,把本机接收到的访问目标端口是80的请求转机本机的3128端口
#iptables -t nat -A PREROUTING -i eth0 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128
#iptables -t nat -A PREROUTING -i eth0 -s 192.168.1.0/24 -p tcp --dport 443 -j REDIRECT --to-ports 3128
#service iptables save

修改squid服务的代理方式改为透明代理
#vi /etc/squid/squid.conf
...
922 http_port 3128 transparent //设置代理方式为透明代理
...

重启服务
service squid restart

二、配置公网网站服务器(启动服务、编写网页文件)
#service httpd start
#chkconfig --level 35 httpd on
#echo "1111" > /var/www/html/index.html

三、配置客户端
添加默认网关(让代理服务器能够接收到客户端发出的请求)
#route add default gw 192.168.1.254

浏览器地址访问(实验一浏览器做的配置还原) http://1.1.1.1
实验拓扑:

eth0 内网网站服务器 eth0 192.168.1.254
Web1 192.168.1.10----------------------|
Squid--------------------1.1.1.1 eth1 公网客户端
Web2 192.168.1.100---------------------|
eth0 内网网站服务器 eth1 1.1.1.254

实验三:
搭建反向代理服务器(代理服务器代替公网客户端访问内网的网站服务器)

一、配置内网的网站服务器(启动服务、编写网页文件)
#service httpd start
chkconfig --level 35 httpd on
#echo "222222" > /var/www/html/index.html

删除上面实验二添加的网关
#route del default gw 192.168.1.254

二、配置代理服务器tp
删除实验二的环境、让httpd关闭开机不启动释放80端口
#setup
#service iptables stop
#service httpd stop
#ckconfig --level 35 iptables off
#chkconfig --level 35 httpd off

修改主配置文件
#vi /etc/squid/squid.conf
...
922 http_port 80 vhost //让自已监听80端口
923 cache_peer 192.168.1.10 parent 80 0 originserver //指定自已访问的网站服务器
924 cache_peer 192.168.1.100 parent 80 0 originserver //哪个主机在上面就先访问哪台网站服务器
...

重启服务
#service squid restart

公网客户端访问 http://1.1.1.254
补充:
公网客户端如果要重新访问内网网站服务器重新更改的网页的话,代理服务器需清空缓存,重启服务
代理服务器配置
#rm -rf /var/spool/squid/*
#service squid restart

实验拓扑:

内网网站服务器 代理缓存服务器
eth0 192.168.1.10 eh0 192.168.1.254/24 公网客户端
Web----------------------------Squid---------------------------Web eth0 1.1.1.1
eth1 1.1.1.254/8

实验四:
当我内网的网站服务器是用虚拟主机来搭建的,让公网客户端来访问我内网不同的虚拟主机

内网网站服务器配置
创建基于域名的虚拟主机,
#mkdir /www;mkdir /mail
#echo "www.wsyht.com" > /www/index.html;echo "mail.wsyht.com" > /mail/index.html
#vi /etc/httpd/conf/httpd.conf
...
981 NameVirtualHost *:80
...
1002 <VirtualHost *:80>
1003 DocumentRoot /www
1004 ServerName www.wsyht.com
1005 ErrorLog logs/www.wsyht.com-error_log
1006 CustomLog logs/www.wsyht.com-access_log common
1007 </VirtualHost>

1009 Listen 8080
1010 <VirtualHost *:8080>
1011 DocumentRoot /mail
1012 ServerName mail.wsyht.com
1013 ErrorLog logs/mail.wsyht.com-error_log
1014 CustomLog logs/mail.wsyht.com-access_log common
1015 </VirtualHost>
...
#service httppd restart

代理服务器配置
#vi /etc/squid/squid.conf
...
922 http_port 80 vhost
923 cache_peer 192.168.1.10 parent 80 0 originserver name=www
924 cache_peer 192.168.1.10 parent 8080 0 originserver name=mail
925 cache_peer_domain www www.wsyht.com
926 cache_peer_domain mail mail.wsyht.com
...

重启服务
#service squid restart

公网客户端配置
修改hosts文件
#tail -2 /etc/hosts
1.1.1.254 www.wsyht.com www
1.1.1.254 mail.wsyht.com mail

访问测试
#elinks --dump http://www.wsyht.com #elinks --dump http://mail.wsyht.com
练习
acl 访问控制列表
只允许局域网内192.168.1.0/24所有主机在周一到周五的工作时间,可以上网
但ip地址是192.168.1.100的主机不允许上网
上班时间所有主机都不允许访问www.taobao.com网站

acl all src 0.0.0.0/0.0.0.0 //系统默认已有的数据
acl zhuji src 192.168.1.0/24
acl dan src 192.168.1.100/32
acl shijian time MTWHF 09:00-18:00
acl taobao dsdomain .taobao.com

http_access deny dan shijain
http_access deny zhuji taobao
http_access allow zhuji shijain
http_access deny all //系统默认已有的数据
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  服务器 Squid 代理