使用squid 反向代理代理服务有哪些公司

您所在的位置: &
使用Squid配置反向代理服务器
使用Squid配置反向代理服务器
TechTarget中国
反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
配置反向代理服务器确保企业网络服务安全
反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
值得注意的是:通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。由于外部网络上的主机并不会配置并使用这个代理服务器,普通代理服务器也被设计为在Internet上搜寻多个不确定的服务器,而不是针对Internet上多个客户机的请求访问某一个固定的服务器,因此普通的Web代理服务器不支持外部对内部网络的访问请求。
当一个代理服务器能够代理外部网络上的主机,访问内部网络时,这种代理服务的方式称为反向代理服务。此时代理服务器对外就表现为一个Web服务器,外部网络就可以简单把它当作一个标准的Web服务器而不需要特定的配置。不同之处在于,这个服务器没有保存任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对反向代理服务器的攻击并不会使得网页信息遭到破坏,这样就增强了Web服务器的安全性。
反向代理方式和包过滤方式或普通代理方式并无冲突,因此可以在防火墙设备中同时使用这两种方式,其中反向代理用于外部网络访问内部网络时使用,正向代理或包过滤方式用于拒绝其他外部访问方式并提供内部网络对外部网络的访问能力。因此可以结合这些方式提供最佳的安全访问方式。
目前有许多反向代理软件,比较有名的有 Nginx 和 Squid 。其他还包括Socks、Apache、Jigsaw、Delegate等。
使用Squid配置反向代理服务器
Squid作为反向代理服务器使用时,其工作原理为:客户端请求访问 Web 服务时,DNS 将访问的域名解析为 Squid 反向代理服务器的 IP 地址,这样客户端的 URL 请求将被发送到反向代理服务器。如果 Squid 反向代理服务器中缓存了该请求的资源,则将该请求的资源直接返回给客户端,否则反向代理服务器将向后台的 Web 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。
Squid反向代理一般只缓存可缓冲的数据(比如 HTML网页和图片等),而一些 CGI 脚本程序或者 ASP、JSP 之类的动态程序默认不缓存。它根据从 Web 服务器返回的 HTTP 头标记来缓冲静态页面。有四个最重要HTTP头标记:
Last-Modified:告诉反向代理页面什么时间被修改
Expires:告诉反向代理页面什么时间应该从缓冲区中删除
Cache-Control:告诉反向代理页面是否应该被缓冲
Pragma:用来包含实现特定的指令,最常用的是Pragma:no-cache
要配置反向代理服务器,需要在squid的主配置文件里面添加如下内容:
http_port 80 accel vhost vport
cache_peer 192.172.1.133 parent 80 0 no-query originserver
cache_peer_domain
192.172.1.133
acl sites dstdomain
http_access allow sites
http_access deny all
cache_dir ufs /var/spool/squid3 100 16 256
cache_mem 64 MB
maximum_object_size_in_memory 1028 KB
access_log /var/log/squid3/access.log squid
上述配置的详细解释如下:
http_port 80 accel vhost vpor:指定Squid所服务的端口为80,vhost和vport指的是所采用的虚拟主机的方式:基于IP地址和基于端口的;
cache_peer 192.172.1.133 parent 80 0 no-query originserver:指定真实Web Server的IP地址;
cache_peer_domain
192.172.1.133:告诉反向代理服务器,当客户端有对的访问请求时,需要从真实Web Server 192.172.1.133上取得数据;
acl sites dstdomain :定义客户端能够通过反向代理服务器访问的主机;
http_access allow sites、http_access deny all:限制客户端通过反向代理服务器能够访问的范围;
cache_dir ufs /var/spool/squid3 100 16 256、cache_mgr 、cache_mem 64 MB、maximum_object_size_in_memory 1028 KB、access_log /var/log/squid3/access.log squid:代理服务器的常规配置。
【编辑推荐】
SquidClamAv 6.0 发布(含下载)
linux下用squid和squidGuard配置代理服务器
用SafeSquid实现跨多个远程代理服务器的集中安全管理
Squid访问控制:ACL元素以及访问列表
Squid访问控制方法的实例
【责任编辑:蓝雨泪 TEL:(010)】
关于&&的更多文章
和Web服务器、FTP服务器、邮件服务器一样,Squid服务器也是Linux
虽然网购有诸多优点,越来越多的人热衷于此,但网购的安全性也逐渐凸显
Blackhat安全技术大会是世界上最好的能够了解未来安全
今天, 组织越来越重视通过大数据技术来获取安全智能。
7月17日,乌云漏洞报告平台、SCANV网站安全中心等安全
本书第1版曾被KDnuggets的读者评选为最受欢迎的数据挖掘专著,是一本可读性极佳的教材。它从数据库角度全面系统地介绍了数据挖掘
51CTO旗下网站上层代理 Squid使用其它的代理服务器
上层代理 Squid使用其它的代理服务器
  当我们访问国外网站比较慢的时候,可以通过设置代理访问,那么我们自己的代理服务器能否也设置别人的代理来访问国外的网站呢?答案是肯定的。  例如有代理proxy能以较快的速度访问国外,且我们访问它也比较快,所以我们用它来作为我们访问国外网站的上层代理。  我们需要在nf中添加如下参数:  &主机名称/地址& &类别& &其他参数&  类别主要有上层的parent和同一层的sibling两种,我们这里主要介绍的是上层代理,就是parent,如果你需要架设代理服务器集群的话可以采用sibling,这里我们就不做讨论了。  其他参数有:  proxy-only :只向上层代理要资料,自己不缓存到本地proxy中。  weight=n :比重,当我们设置多台上层代理的时候,这几台代理的功能都相同的,可以通过设置此项来决定那台上层代理比较重要,n越大表示越重要。  no-query :当使用sibling类别的时候,向同一层的proxy索要资料的时候就会向其送出icp请求,可以使用no-query来取消icp请求,一般我们向上层proxy请求资料的时候可以不需要发送icp包,以降低流量。  default :表示将这台proxy设置为默认proxy  no-netdb-exchange :表示不向proxy送出imcp包的请求。  no-digest :表示不纪录向上层proxy提交的请求。  #上层proxy设置  cache_peer proxy parent
no-digest no-netdb-exchange  #设置访问规则,可以用域名,也可以用IP  acl usa .us #美.us的网站  acl usaip dst 18.0.0.0/8 #美国的部分IP段  (T002)  #放行禁止规则  cache_peer_access proxy allow usa #允许usa规则使用此上层proxy  cache_peer_access proxy deny !usa #禁止所有非usa规则使用此上层proxy  cache_peer_access proxy allow usaip  cache_peer_access proxy deny !usaip
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
港口与航道工程建设工程法规及相关知识建设工程经济考试大纲矿业工程市政公用工程通信与广电工程
操作系统汇编语言计算机系统结构人工智能数据库系统微机与接口
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
Powerpoint教程WPS教程
电子政务客户关系管理首席信息官办公自动化大数据
职称考试题目
就业指导签约违约职业测评
招生信息考研政治
网络安全安全设置工具使用手机安全
3DMax教程Flash教程CorelDraw教程Director教程
Dreamwaver教程HTML教程网站策划网站运营Frontpage教程
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
互联网电信IT业界IT生活
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
组织运营财务资本
视频播放文件压缩杀毒软件输入法微博
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&linuxme 的BLOG
用户名:linuxme
文章数:59
评论数:94
访问量:547505
注册日期:
阅读量:5863
阅读量:12276
阅读量:309252
阅读量:1025427
51CTO推荐博文
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& squid介绍及其简单配置
SquidInternet
webSquidSquid
http//squid.nlanr.net/Squid
SquidHTTPFT
PGOPHERSSLWAISPOPNNTPRealAudio
htmlwebIPweb
IPHTTP80webLinuxIptablesIpchainsISPInternet
WEBWEBWEBInternetWEBWEBInternetWEBWEBWEB
&& /usr/sbin/squid
&& /etc/squid
&& /etc/squid/squid.conf
&& tcp3128
/var/log/squid/access.log
5.squid (/etc/squid/squid.conf)
&& &&http_port 3128 (ip& http_port 192.168.0.1:3128)
&&&&&&&& cache_mem 64MB&&&&&&&& #
&&&&&&&& maximum_object_size 4096KB&&&&&&&&&&& #
&&&&&&&& reply_body_max_size& 1024000 allow all& #
&&&&&&&& access_log /var/log/squid/access.log&& #
&&&&&&&& visible_hostname& proxy.test.xom& #
&&&&&&&& cache_dir ufs /var/spool/squid 100 16 256
&&&&&&&& usf:
&&&&&&&&&&&&&&& /var/spool/squid
&&&&&&&&&&&&&&& 100 : M
&&&&&&&&&&&&&&& 16
&&&&&&&&&&&&&&& 256
&&&&&&&& cache_mgr & &&#
&&&& http_access deny all&& #
* srcdomain :
* dstdomain :
* url_regex : URL
* urlpath_regex: URL-path
* proxy_auth :
* maxconn :
acl acl_element_name type_of_acl_element values_to_acl
1. acl_element_name
* http_access:
* no_cache:
http_access Action 1 AND 2 AND
http_access Action 3
http_access
&&&& &a.squid
&&&&& &&&squid
&&&&&&&&&&&&&&& eth0:192.168.1.1 eth1:10.106.34.12
&&&&&&&&&&
&&&&&&&& vim /etc/squid/squid.conf
&&&&&&&&&&&&&&& http_port 192.168.1.12:3128 ()
&&&&&&&& &&& cache_mem 64MB&&&&&&&&
&&&&&&&& &&& maximum_object_size 4096KB&&&&&&&&&&&
&&&&&&&& &&& reply_body_max_size& 1024000 allow all
&&&&&&&& &&& access_log /var/log/squid/access.log&
&&&&&&&& &&& visible_hostname& proxy.test.xom
cache_mgr & &&&&&&
http_access allow all&
&&&&&&&&&&& squid &z
&&&&&&&&&&&&&&&&&&&& squid &k parse
&&&&&&&&&&&&&&&&&&&& service squid start squid
&&&&&&&&&&&&&&&&&&&& chkconfig squid on
&&&&&&&&&&&&&&&&&&&& netstat &nltp&& 3128
&&&&&&&&&&&&&&&&&&&& ip : 192.168.1.12 gw:192.168.1.1
&&&&&&&&& 192.168.1.1 3128
&&&&&&&&& http//,easy
a. aquid&&&&&&
&&&& http_port 192.168.1.12:3128 transparent
b.iptables
iptables -t nat -I PREROUTING &-s 192.168.1.0/24 -p tcp -dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -p tcp --dport 53 -j SNAT -to-source 10.106.34.12
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -p udp --dport 53 -j SNAT -to-source 10.106.34.12
squid &k parse
&&&&&&&&&&&&& service squid reload
Squid/etc/squid/squid.conf
&http_port 10.106.34.1280 vhost
&&&&&&&&&& Cache_peer 192.168.1.12 parent 80 0 originserver weight=5 max-conn=30
http icp& []
squid &k parse
&&&&&&&&&&&&&&&&&&&& service squid reload
&&&&&&&&&&&&&& web
&&&&&&&&& web
&&&&&&&&&&&&&&&
&本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:未分类┆阅读(0)┆评论(0)3119人阅读
Web开发(30)
Squid是一个单进程的异步代理缓存服务器,支持HTTP,FTP,GOPHER,ICP等协议。通过配置,可以实现反向代理、透明代理的功能,并且支持缓存,是实现高性能网站的必备基础设施之一。通常部署在应用服务器的前端。
Squid的安装就比较简单,可以yum安装或源码安装,安装完之后,配置在/etc/squid/目录下。
1 命令行参数
-a port 同配置中的http_port
-f file 指定使用的配置文件,默认为/etc/squid/squid.conf
-k & & &此命令有多个选项,行为是重新加载配置,将选项发送给进程实例
& &reconfigure &重新载配置
& &rotate & & & 切换日志
& &shutdown & & 关闭
& &kill & & & & 终止
& &check & & & &检查
& &parse & & & &分析日志
-s & & & 将日志输出到syslog
-z & & & 初始化缓存目录
-N & & & 非daemon模式运行
2 配置说明
最新配置项说明索引:
一个分类的指令索引:
2.6版本的权威指南:&
下面说明核心的指令作用,并针对反向代理(加速)场景进行示例说明。
2.1 http_port&
格式:http_port [host/ip]:port [option] &
用于指定服务监听的端口和模式,可以指定多个地址。
有如下可用的选项
accel & & & & & & & 加速模式,必须至少配置vhost/vport/defaultsite 选项
模式支持accel intercept tproxy ssl-bump
加速模式的选项如下:
defaultsite=domain 设置HTTP HOST头的域名,访问虚拟主机时必须设置
no-vhost &禁用HTTP的HOST头
vport & &使用HTTP_PORT指定的端口进行连接,而非HOST头中的端口
vport=NN 使用此处指定的端口进行连接,而非HOST头中的端口
allow-direct 加速模式下允许直接转发请求
格式:acl name type parm... 多个参数之间为OR的关系,也可以将多个参数写成多行,使用同一个列表名称即可。
由于在处理时,会针对一系列列表进行匹配对比,因此参数的顺序及表示方式对性能有较大影响,将最有可能的匹配放在头部可以减少延时 。范围不要重叠,否则会导致出错。
squid有25种type,常用的类型及功能作用列举如下:
指定控制源或目标的IP地址列表
acl localnet src 192.168.1.0/24
acl localnet src 172.16.10.0-172.16.19.0/24 & & &
地址控制勿用主机名,解析比较慢,主机对应IP变化后会失效,要使用srcdom等;
指定源或目的的域名列表
acl servers dstdomain &.
.作为通配符,它匹配此域的任何主机域,包括域名自身。无.则为精确匹配。
srcdom_regex&
dstdom_regex
urlpath_regex
ident_regex & & &
proxy_auth_regex
req_mime_type & & & & &
指定按照指定的字段
进行正则表达式的匹配
acl servers dstdom_regex -i baidu&
支持一些参数,如-i 大小写不敏感;
ident/proxy_auth
支持身份过滤
acl auser ident proxy
支持端口的过滤
acl SafePort port &80
端口比较适合用范围来表示,通常
myip/myport
指定squid服务器的地址与端口
acl aport myport 80
acl pport myport 3128
myip用于在系统有多个接口时指定自己的IP
myport用于squid在多个端口上监听时指示不同PORT
支持HTTP请求方法的过滤
acl Uploads method PUT POST
支持不同协议的过滤
HTTP/HTTS/FTP等
acl ftpcl proto ftp
指定每个IP的最大连接数
acl MaxCon maxconn 10
检测客户端的MAC地址
acl mybox arp 00:10:20:30:40:50
如果有一个很长的ACL列表,则可以分类写在不同文件中,通过 acl 指令包含多个文件即可。
acl name &filename&
2.3 http_access
格式:http_access allow|deny aclname ...
设置接受或拒绝哪些alc设置的请求条目,对于一行中的多个acl是and的关系,即均要满足。多行http_access之间会顺序执行,只到有一条满足,则不再向下匹配。因此控制链的顺序也会对性能产生一定的影响,最常见的访问请求,最好列于控制链的顶层。
示例1 & 只允许192.168.0.0/16内网访问3128的代理服务
acl localnet src 192.168.0.0/16
http_access allow localnet ProxyPort
http_access deny localnet
示例2 &在示例1的基础上增加端口80的反向代理功能
acl AccelPort
acl ProxyPort
myport 3128
http_access allow AccelPort
http_access allow localnet ProxyPort
2.4 cache_dir
格式:cache_dir fs_type path size L1 L2 [option]
设置缓存使用的存储类型、位置及大小,大小按MB来计算。L1和L2分别指定path下的一级目录和二级目录的个数。
文件类型有:ufs aufs diskd null
ufs是一个同步写磁盘的版本,而aufs是一个使用线程的异步版本,即IO操作被线程池执行,执行结束后信号通知主线程。二者的文件存储结构一样,比较容易切换使用。diskd不使用线程,而是使用消息队列和共享内存的进程间IPC来实现磁盘操作。null类型用于指定不写磁盘,通常用来测试当前硬件的squid性能上限。
squid为每个缓存文件分配一个唯一的ID,并使用算法将ID和文件路径映射起来,一旦激活squid,再改变L1和L2会导致原有的文件无法访问到。
可用的选项:
read-only &用来设置某个缓存目录为只读,这用来迁移共享目录时比较有用
max-size & 用于指定本存储目录中存储的最大目标的大小,单位为字节。多个cache_dir 行最好按照max-size由小到大排序。
2.4.1 cache_swap_low&
格式:cache_swap_low &N&
用于指定当缓存高于N时进行文件的删除,通常设置为90
2.4.2 maximum_object_size
格式:maximum_object_size N MB
用来指定支持缓存的最大对象的大小。当然如果所有的cache_dir设置的大小都比此值小,此仍然无法缓存此对象。
2.4.3 cache_replacement_policy
格式:cache_replacement_policy lru|GDSF|LFUDA...
用于指定cache的替换策略。不同的 cache_dir可以使用不同的策略,需要在这些cache_dir行的之前执行策略的设置即可。
2.4.4 删除缓存对象
关闭squid,然后删除缓存目录即可。如果文件很多,则删除过程会较长。较好的作法是进行重命名,然后创建新的cache目录并在初始化后重启。
2.5 cache_mem
格式:cache_mem N MB
2.6 cache_peer
格式:cache_peer hostname type http-port icp-port [option]
用于指定层次缓存结果的PEER节点位置及类型。多个cache服务器之间可以是父子关系或兄弟关系,区别在于父可以向子提供 cache未命中时的数据,而兄弟之间不能这样做。
hostname用于指定主机名,不能在邻居之间使用相同的主机名,即使其端口不同。运行期间,squid会不断探测主机名对应的IP地址。
type用于指定cache的类型,有parent sibling 和multicast
port用于指定端口,如果为0,则为禁用,然而应该使用no-query选项来禁止这些协议。
通常选项:
proxy-only 不存储来自邻居的响应数据
connect-timeout
connect-fail-limit=N
allow-miss
max-conn = N
login=user:pass
connection-auth=on|off
反向代理选项:
orignserver &指定此peer为源web服务器
forceddomain 指定为HTTP HOST头设置的域名
no-digest & &对URL不计算摘要
peer选择方法及选项:
round-robin
weighted-round-robin
sourcehash
multicast-siblings
2.6.1 cache_peer_access
格式:cache_peer_access cache_host allow|deny aclname ...
定义对邻居cache的访问列表。可以决定哪些请求通过或禁止发送到邻居。
例如,只允许HTTP的请求发给peer192.168.1.1
cache_peer &192.168.1.1 parent 3128 0
acl HTTP proto http
cache_peer_access 192.168.1.1 allow HTTP
2.6.2 cache_peer_domain
格式:cache_peer_domain cache-host domain [...]
定义可将请求发送到哪些域名的邻居
2.6.3 never_direct
格式:never_direct allow|deny &aclname
指定不需要发给源服务器的请求的ACL。通常是发给父cache。例如squid要经过防火墙,而不是直接代理外部站点,此时要使用never_direct设置必须经过防火墙的请求。
2.6.4 always_direct
格式:always_direct allow|deny &aclname
指定总是要发给源服务器请求ACL。
2.6.5 hierarchy_stoplist
格式:hierarchy_stoplist [word] ...
指定一些串,匹配这些串的请求将不会被转发给peer。此选项会被never-direct覆盖。
2.6.6 prefer_direct
格式:prefer_direct on|off
默认请求先转发给邻居,后才给源。打开此选项,可以反转这个顺序。
2.6.7 控制的组合与决策
2.7 forwarded_for
如果为on则会添加客户端的IP地址到HTTP请求头中。
X-Forwarded-For:192.168.1.2。如果为OFF,则IP为unknown。
设置为transparent,则不进行任务操作;设置为delete,则删除X-Forwared-for头。
2.8 refresh_pattern
格式:refresh_pattern [-i] regexp min percent max [option]
用于指定哪些请求从缓存中读取,哪些直接从上游请求。
-i 用于指定regexp是否为大小敏感的
min &用于指定某个响应被cache的最短分钟数,如果低此则不过期。
max 用于指定某个响应被cache的最长分钟数,超过则立即过期。
在min和max之间的时段内,squid根据源服务器回应头中的last-modified和date的值计数一个修改系数,如果此系数小于refresh_pattern中指定的percent,则存活,否则过期。
refresh_pattern &-i \.js$ 30 50% 1440
2.9 其他控制规则
除了在2.3节中的http_access还有其他几种类型的访问控制
http_reply_access &基于服务器返回进行控制
icp_access 用于控制icp协议的访问
no_cache &用于控制不缓存的访问
cache_peer_access 控制发送到邻居cache的HTTP请求和ICP/HTTP查询
header_access & 配置删除某些HTTP头部
header_replace &配置远的某些HTTP头部
在下有不同控制的示例。
squid有三个日志,cache.log access.log与store.log,cache日志包含状态和调试信息,access日志包含访问者的信息。store日志记录了访问cache的一些信息。
通过下面的指令可以指定日志文件的路径。
cache_log path
cache_access_log path
cache_store_log path
3.1 普通代理
普通代理下,浏览器发送完整的请求给代理服务器,形如 GET&
Squid在收到这些请求后,进行解析,转发到指定请求的域服务器上,并将接收到的数据返回给客户端。
3.2 反向代理
必须使用accel模式,此时浏览器发送的请求为解析后的请求,形如:GET /&
Squid在收到这些请求后,转发给配置文件中指定的真正的web服务器或上层代理服务器,并将接收到的数据返回给客户端。
场景1:有一台外网的web服务器,页面中有较大的js文件及图片,除了这些页面,其他页面访问速度还可以接受,但这些大页面的打开让人无法忍受。为了让内网用户能更好的使用这个web服务,在内网搭建一个squid的反向代理,为内网1网段的用户提供加速。
场景2: 通过Squid+DNS实现多站点代理
首先在本地网络的DNS中将example1/2的域名覆盖为Squid服务器的地址
然后配置sqiud,针对不的源站点应用不同访问acl。
3.3 透明代理
此种方式不需要配置客户端的浏览器,只需要配置整个网络的出口的路由器或交换机,将流量按规则导入到squid上。实施时需要按网络的具体结构及设备型号来考虑,不在此说明。
4 有用工具
squidclient提供了管理和查看squid运行状态的方式。
-r url &重新加载指定url的缓存,即令历史数据失效
-m uri 删除指定的uri缓存,需要配置acl允许此操作,默认拒绝,注意只支持单个对象,一组对象,需要从access.log中查找过滤并使用此指令。清空所有cache的方法重命令原有cache目录,再启动squid生成新空缓存。
squidclient -p 3128 mgr: 可以列出其所支持众多的命令
info 列出了基础信息
mem &列出了内存使用
objects 列出了缓存列表
diskd &列出了磁盘使用情况
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:511980次
积分:6015
积分:6015
排名:第2758名
原创:152篇
转载:58篇
评论:47条
(1)(1)(1)(1)(1)(1)(1)(7)(5)(4)(3)(2)(19)(2)(4)(1)(1)(5)(4)(3)(3)(1)(2)(3)(6)(1)(10)(4)(3)(1)(3)(4)(4)(2)(3)(5)(2)(7)(6)(1)(5)(4)(3)(3)(3)(11)(6)(2)(1)(5)(3)(7)(3)(7)(1)(2)(2)(1)(3)(1)您所在的位置: &
Squid代理服务器应用案例 多出口多用户认证上网
Squid代理服务器应用案例 多出口多用户认证上网
笔者最近帮朋友接了个小项目,客户在他们的美国机房租了几台服务器,然后想在上面做上网用的代理服务器,供客户在国内使用,希望具有多个出口ip地址供不同用户通过认证上网的方式使用。本文的目的就是向大家介绍笔者实现这个需求的思路和步骤。整个方案通过Squid代理服务器实现。
【51CTO独家特稿】最近帮朋友接了个小项目,客户在他们的美国机房租了几台服务器,然后想在上面做上网用的代理服务器,供客户在国内使用。具体需求如下:
1、客户的这台服务器具有多个出口ip地址
2、客户希望使用认证的方式使用代理服务器上网
3、客户希望通过不同的认证用户实现从不同的出口ip访问网络
4、隐藏代理信息,隐藏真实上网ip
此客户需求相当明确,根据上面罗列,条理也很清晰。本文的目的就是向大家介绍笔者实现这个需求的思路和步骤。
作者简介:刘晗昭,网名蚊子(),某通信业国企系统工程师,熟悉各种主流开源软件的使用,部署和组合应用,以及主流网站架构。目前关注系统架构和系统优化。
笔者使用了Squid来实现这一需求。Squid是一种在Linux系统下使用的优秀的代理服务器软件,还可以用在AIX、Digital Unix、FreeBSD、HP-UX、Irix、NetBSD、Nextstep、SCO和Solaris等系统上。更多关于squid的介绍就不在这里多讲了,有需要的去上看吧,。
这里先看下我设计的逻辑图:
根据图中所示,红色的用户1会通过红色的出口ip1访问internet,绿色的用户2会通过绿色的出口ip2访问internet,用户3和用户4同样对应相应颜色的出口访问internet。
接下来根据上面的需求进行逐一的分解。
一、需求分析
1、服务器具有多个出口ip地址
这个没什么可说的,客户的出口ip为:
10.100.10.1
10.100.10.2
10.100.10.3
2、使用认证的方式使用代理服务器上网
这里要用到squid的认证功能。squid的认证功能大类包括basic_auth,digest_auth,external_acl,negotiate_auth,ntlm_auth这5种(注:squid-2.7.STABLE9版本),每个大类下面还有具体的认证方式,如NCSA,LDAP,DB等等,具体支持哪些可以去这些目录下面看。
笔者在这里主要介绍的是NCSA的方式,此种认证方式类似apache的auth认证方式,通过用户名密码来验证,密码文件也是通过htpasswd程序来创建。后面会给出具体配置。
3、通过不同的认证用户实现从不同的出口ip访问网络
先说实现不同出口ip访问网络,这个主要是依靠squid的tcp_outgoing_address配置实现的,此参数可以根据source ip或者用户名的不同,分配不同的出口ip出去。
如此一来,搭配第二个需求中的用户验证,正好就可以实现第三个需求了。后面会给出具体的配置。
4、隐藏代理信息,隐藏真实上网ip
这个需求很多人应该都想到使用什么配置文件了,对,就是squid的header_access这个参数。主要就是隐藏掉HTTP_VIA,VIA和X-forwarded-for。后面会给出具体配置。
二、安装配置
首先要做的就是下载一个squid安装包()。笔者这里使用的是&STABLE9,操作的当前目录是/tmp,下面所有涉及到目录的都是基于此目录。squid源文件路径是/tmp/squid-2.7.STABLE9.tar.gz
安装步骤如下:
tar zxvf squid-2.7.STABLE9.tar.gz
cd squid-2.7.STABLE9
./configure --prefix=/usr/local/squid --enable-async-io=320 --enable-icmp --enable-delay-pools --enable-kill-parent-hack --enable-snmp --enable-arp-acl --enable-htcp --enable-cache-digests --enable-removal-policies=heap,lru --enable-default-err-language=Simplify_Chinese --enable-x-accelerator-vary --enable-follow-x-forwarded-for --with-aufs-threads=320 --with-pthreads --with-dl --with-maxfd=65536 --enable-basic-auth-helpers=DB,NCSA --enable-digest-auth-helpers=password --enable-large-cache-files --with-large-files
make install
如果以上步骤中无报错,squid就被正确安装完毕了。
接下来执行:
cd /usr/local/squid/
#(之后的所有操作均在此目录下完成)
grep -v &^#& etc/squid.conf.default|uniq & etc/squid.conf
将创建一份未注释的配置文件。
接下来编辑此文件
vi etc/squid.conf
修改编辑的内容如下:
acl CONNECT method CONNECT
22&&http_access allow manager localhost
这两行中间加入:include &/usr/local/squid/etc/auth.conf&。auth.conf文件的内容后面会有详细介绍。
icp_access deny all
34&&http_port 3128
这两行中间加入:always_direct allow all,意思是对所有ip过来的请求都允许转发。
将49&&broken_vary_encoding allow apache行后面的所有内容删除,加上如下内容
forwarded_for off
#隐藏x-forwarded-for头
header_access HTTP_VIA deny all&&&&&&&
#隐藏HTTP_VIA头
header_access VIA deny all&&&&&&&&&&&&&&&&&&
#隐藏VIA头
& cache_effective_group daemon&&&&&&
#设置squid执行的用户组,这里使用了系统自带的daemon用户组
cache_effective_user daemon&&&&&&&&&
#设置squid执行的用户,这里使用了系统自带的daemon用户
visible_hostname test&&&&&&&&&&&&&&&
#设置错误页面中出现的服务器名称,可自行更改
cache_dir aufs /usr/local/squid/cache 100 16 256&&&&&&&&&&&&&&
#设置squid的缓存,可自行调整
cache_store_log none&&&&&&&&&&&&&&&
#关闭store.log
都修改添加完毕后,保存退出。
紧接着我们来创建auth.conf。
vi /usr/local/squid/etc/auth.conf
输入如下内容
# 设置验证相关的配置内容,指定密码文件
1&&auth_param basic program /usr/local/squid/libexec/ncsa_auth /usr/local/squid/etc/passwd
2&&auth_param basic children 10&&&&&&&&&&#设置验证子进程数
3&&auth_param basic credentialsttl 2 hours&&&&&&&&&#设置验证有效期
4&&auth_param basic casesensitive off&&&&&&&&&#设置是否区分大小写
#&后面这三行分别定义了三个用户组。每个用户组指定了一个用户文件。
6&&acl usergroup1 proxy_auth &/usr/local/squid/etc/ip1user&
7&&acl usergroup2 proxy_auth &/usr/local/squid/etc/ip2user&
8&&acl usergroup3 proxy_auth &/usr/local/squid/etc/ip3user&
#&后面三条允许这三个组的用户可以访问网络
10&&http_access allow usergroup1
11&&http_access allow usergroup2
12&&http_access allow usergroup3
#&这三条用来分配哪个组的用户走哪个出口ip
14&&tcp_outgoing_address10.100.10.1 usergroup1
15&&tcp_outgoing_address10.100.10.2 usergroup2
16&&tcp_outgoing_address 10.100.10.3 usergroup3
编辑完成后保存退出。
接下来是创建用户文件,vi /usr/local/squid/etc/ip1user,填入如下内容
保存退出。这里用户数量不限,每个用户名占用一行。
如果一开始没有那么多用户,建议使用touch命令将文件创建好,不然启动squid的时候会出错。
接下来创建用户的密码文件,第一次创建密码文件请使用下面的命令
htpasswd -cb /usr/local/squid/etc/passwd user1 111111
倒数第二个字段是用户名,最后一个字段是用户对应的密码
如果之前创建过了密码文件,使用下面的命令就可以了
htpasswd -b /usr/local/squid/etc/passwd user2 111111
命令解释同上。
到此为止,配置文件等相关工作就基本完成了。下面来说说squid的初始化工作。
首先,mkdir cache,创建cache目录
然后执行,chown -R daemon.daemon,变更当前目录及所有子目录的的属主与属组。笔者这里使用系统自有的daemon用户和组。
这些工作都做好之后呢,就来执行&sbin/squid -z对squid进行初始化,如果没有报错信息呢,初始化工作就算是做完了,下面启动squid服务即可了,启动命令为
sbin/squid -ND &
然后通过下面的命令查看一下3128端口是否启动
netstat -ln|grep 3128
如果出现下面的内容,说明squid服务已经正常运行了
0 0.0.0.0:3128
到此为止,一个支持用户身份验证的多出口代理服务器就完全配置完毕了,赶快打开浏览器,配置好代理服务器,测试一下吧。看看浏览网页是否会弹出验证的提示。
另外还可以登录查看使用不同的用户组的用户,是否上网ip不一样,同时这个页面还能查看当前上网方式是否使用了代理。
由上图可知,最上面是上网的ip地址,最下方的proxy detected如果是no表示未检测出使用代理上网。
如果想让squid在开机的时候自动启动只需要在/etc/rc.loacl文件中加入
/usr/local/squid/sbin/squid &ND &
【编辑推荐】
【责任编辑: TEL:(010)】
关于&&的更多文章
和Web服务器、FTP服务器、邮件服务器一样,Squid服务器也是Linux
Linux界极具活力,面向不同的用户可以使用不同的Linux发行版,比如适合新手和游戏爱好者等。
开源技术的不断发展为IT人员的工作提供了便利,在开源
本专题总结了Apache软件基金会(简称ASF)中的十个命
日,Velocity China 2013 Web 性能与运维
本书将实时系统、实时统一建模语言、实时系统的统一开发过程和Rational Rose RealTime建模环境有机地结合起来,以案例为基础,系
51CTO旗下网站

我要回帖

更多关于 squid 反向代理 的文章

 

随机推荐