当前位置:文档之家› Squid代理服务器应用案例 多出口多用户认证上网

Squid代理服务器应用案例 多出口多用户认证上网

【51CTO独家特稿】最近帮朋友接了个小项目,客户在他们的美国机房租了几台服务器,然后想在上面做上网用的代理服务器,供客户在国内使用。具体需求如下:

1、客户的这台服务器具有多个出口ip地址

2、客户希望使用认证的方式使用代理服务器上网

3、客户希望通过不同的认证用户实现从不同的出口ip访问网络

4、隐藏代理信息,隐藏真实上网ip

此客户需求相当明确,根据上面罗列,条理也很清晰。本文的目的就是向大家介绍笔者实现这个需求的思路和步骤。

这里先看下我设计的逻辑图:

根据图中所示,红色的用户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安装包(下载地址)。笔者这里使用的是2.7 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

make install

如果以上步骤中无报错,squid就被正确安装完毕了。

接下来执行:

cd /usr/local/squid/

#(之后的所有操作均在此目录下完成)

grep -v "^#" etc/squid.conf.default|uniq > etc/squid.conf

将创建一份未注释的配置文件。

接下来编辑此文件

vi etc/squid.conf

修改编辑的内容如下:

20 acl CONNECT method CONNECT

21

22 http_access allow manager localhost

这两行中间加入:include "/usr/local/squid/etc/auth.conf"。auth.conf文件的内容后面会有详细介绍。

32 icp_access deny all

33

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 #设置是否区分大小写

5

# 后面这三行分别定义了三个用户组。每个用户组指定了一个用户文件。

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"

9

# 后面三条允许这三个组的用户可以访问网络

10 http_access allow usergroup1

11 http_access allow usergroup2

12 http_access allow usergroup3

13

# 这三条用来分配哪个组的用户走哪个出口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,填入如下内容

user1

user2

保存退出。这里用户数量不限,每个用户名占用一行。

如果一开始没有那么多用户,建议使用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服务已经正常运行了

tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN

到此为止,一个支持用户身份验证的多出口代理服务器就完全配置完毕了,赶快打开浏览器,配置好代理服务器,测试一下吧。看看浏览网页是否会弹出验证的提示。

另外还可以登录proxy checker工具网站查看使用不同的用户组的用户,是否上网ip不一样,同时这个页面还能查看当前上网方式是否使用了代理。

由上图可知,最上面是上网的ip地址,最下方的proxy detected如果是no表示未检测出使用代理上网。

如果想让squid在开机的时候自动启动只需要在/etc/rc.loacl文件中加入

/usr/local/squid/sbin/squid –ND &

相关主题
文本预览
相关文档 最新文档