squid 安装 配置

来源:互联网 发布:竞彩足球 大数据分析 编辑:程序博客网 时间:2024/06/05 00:57
squid 安装 配置
2009年05月11日 星期一 08:34
http://home.arcor.de/jeffpang/squid/

摘要
该文讨论了如何在Linux2.4环境下如何通过iptables和squid实现透明代理。(2002-06-24 12:55:35)

By 处处

摘要:该文讨论了如何在Linux2.4环境下如何通过iptables和squid实现透明代理。

硬件环境:联想奔月 双网卡

软件环境:kernel 2.4.7 squid-2.4.STABLE1

1.什么是代理服务器?

所谓代理服务器是指代表内部私有网中的客户连接互联网www资源的外部服务器的程序。客户与代理服务器对话,它们接收客户请求,然后连接真实的服务器,请求得到数据并将响应数据返回给客户。代理服务器发挥了中间转接作用。

在代理方式下,私有网络的数据包从来不能直接进入互联网,而是需要经过代理的处理。同样,外部网的数据也不能直接进入私有网,而是要经过代理处理以后 才能到达私有网,因此在代理上就可以进行访问控制,地址转换等功能。目前,代理服务器软件有很多,如Netscape Suit Proxy,MS Proxy,Wingate,squid等。这些代理服务器不仅能起到防火墙的作用,而且还可以加速局域网用户对INTERNET的访问,因为代理服务器 有一个大的缓冲器,将每次浏览的网页都保存起来,在下一次访问该页时就直接从缓冲器里调出,而无需再次访问原始服务器。

2.什么是透明代理?

透明代理技术中的透明是指客户端感觉不到代理的存在,不需要在浏览器中设置任何代理,客户只需要设置缺省网关,客户的访问外部网络的数据包被发送到缺 省网关,而这时缺省网关运行有一个代理服务器,数据实际上被被重定向到代理服务器的代理端口(如8080),即由本地代理服务器向外请求所需数据然后拷贝 给客户端。理论上透明代理可以对任何协议通用。

但是在这种情况下客户端必须正确设置DNS服务器。因为现在浏览器不设置任何代理。则DNS查询必须由browser来解析,也就是要由客户端必须在TCP/IP中设置的正确的DNS服务器,其完成dns解析。

例如: 从私有网络上访问因特网上的 web 站点。

私有网地址为192.168.1.*, 其中客户机是192.168.1.100,防火墙机器网卡是192.168.1.1。透明web代理被安装在防火墙机器上并配置端口为8080。内核使用 iptables把与防火墙端口80的连接重定向到代理服务。私有网上的Netscape被配置为直接连接方式。私有网络的客户机需要设置DNS服务器。 私有网络上机器的默认路由(别名网关)指向防火墙机器。客户机机器上的 Netscape 访问 http://slashdot.org。

1.Netscape通过查找"slashdot.org", 得到它的地址为207.218.152.131. 然后它使用端口1050与此地址建立一个连接,并向web站点发出请求。

2.当包由客户机 (port 1050)通过防火墙送往slashdot.org(port 80)时, 它们重定向到代理服务重定的8080端口。透明代理使用端口1025与207.218.152.131的端口80(这是原始包的目的地址)建立一个连接。

3. 当代理服务收到从 web 站点传来的页面后, 通过已经建立的连接把它复制给 Netscape。

4. Netscape 显示此页面。

5. 从slashdot.org 的角度来看,连接是由1.2.3.4(防火墙的拨号连接IP地址)的端口1025到 207.218.152.131的端口80。从客户机的角度来看,连接是从192.168.1.100(客户机)端口1050连接到 207.218.152.131(slashdot.org)的端口80, 但是, 它实际是在与透明代理服务器对话。

这就是透明代理的操作流程。

3.内核编译

一般来讲,透明代理所在机器往往是带动整个局域网联入互联网的入口,因此该机器往往需要配置防火墙规则以对内部网络进行防护。因此在编译内核时也许要考虑将防火墙支持选项编译进去。一般来说需要在使用make menuconfig命令配置时打开如下选项:

[*]Networking support
[*]Sysctl support
[*]Network packet filtering
[*]TCP/IP networking
[*]/proc filesystem support
[*] Kernel/User netlink socket
[*] Netlink device emulation
[*] Connection tracking (required for masq/NAT)
[*] FTP protocol support
[*] IP tables support (required for filtering/masq/NAT)
<*> limit match support
[*] MAC address match support
[*] Netfilter MARK match support
[*] Multiple port match support
[*] TOS match support
[*] Connection state match support
[*] Packet filtering
[*] REJECT target support
[*] Full NAT
[*] MASQUERADE target support
[*] REDIRECT target support
[*] Packet mangling
[*] TOS target support
[*] MARK target support
[*] LOG target support


然后make dep ; make clean ;make bzImage命令来编译内核。如果使用到了模块,还需要使用下面命令生成和安装模块make modules;make modules-install。

将System.map复制到/boot目录中,将 /usr/src/linux/arch/i386/boot/bzImage复制到 /boot目录中并改名为 vmlinuz-2.4.7。最后安装新内核并重新起动:lilo;shutdown -r now即可。

4.squid的安装配置

下载:

可以从squid主网站下载:

http://www.squid-cache.org/Versions/v2/2.4/squid-2.4.STABLE1-src.tar.gz

也可以从本地下载:

http://www.linuxaid.com.cn/download/solution/squid-2.4.STABLE1-src.tar.gz

编辑安装:

[root@proxy src]# tar xvfz squid-2.4.STABLE1-src.tar.gz
[root@proxy src]# cd squid-2.4.STABLE1
[root@proxy src]# ./configure
[root@proxy src]# make all
[root@proxy src]# make install

配置:

编辑/usr/local/squid/etc/squid.conf,修改以下内容,确保以下配置:

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
cache_effective_user nobody
cache_effective_group nobody
http_access allow all

(所有的http_access命令都注释掉,只留下这条,其实严格上来说应该限制只允许局域网用户使用代理,具体可以参考squid手册中关于Access Control Lists的内容来限制访问代理)

cache_dir ufs /usr/local/squid/cache 100 16 256

cache_dir type Directory-Name Mbytes Level-1 Level2

(说明:指定squid用来存储对象的交换空间的大小及其目录结构。可以用多个cache_dir命令来定义多个这样的交换空间,并且这些交换空间可 以分布不同的磁盘分区。"directory "指明了该交换空间的顶级目录。如果你想用整个磁盘来作为交换空间,那么你可以将该目录作为装载点将整个磁盘mount上去。缺省值为 /var/spool/squid。"Mbytes"定义了可用的空间总量。需要注意的是,squid进程必须拥有对该目录的读写权力。"Level- 1"是可以在该顶级目录下建立的第一级子目录的数目,缺省值为16。同理,"Level-2"是可以建立的第二级子目录的数目,缺省值为256。为什么要 定义这么多子目录呢?这是因为如果子目录太少,则存储在一个子目录下的文件数目将大大增加,这也会导致系统寻找某一个文件的时间大大增加,从而使系统的整 体性能急剧降低。所以,为了减少每个目录下的文件数量,我们必须增加所使用的目录的数量。如果仅仅使用一级子目录则顶级目录下的子目录数目太大了,所以我 们使用两级子目录结构。

那么,怎么来确定你的系统所需要的子目录数目呢?我们可以用下面的公式来估算。

已知量:

DS = 可用交换空间总量(单位KB)/ 交换空间数目

OS = 平均每个对象的大小= 20k

NO = 平均每个二级子目录所存储的对象数目 = 256

未知量:

L1 = 一级子目录的数量

L2 = 二级子目录的数量

计算公式:

L1 x L2 = DS / OS / NO

(注意这是个不定方程,可以有多个解)

然后创建cache子目录,并修改该目录所有者为nobody:

[root@proxy squid]# /usr/local/squid/cache
[root@proxy squid]# chown nobody:nobody /usr/local/squid/cache

修改squid记录目录的所有者以允许squid访问:

[root@proxy squid]# chown nobody:nobody /usr/local/squid/logs

最后启动squid:

[root@iptable logs]# /usr/local/squid/bin/RunCache &

查看进程列表:

[root@iptable logs]# ps ax

应该出现如下几个进程:

1372 pts/0 S 0:00 /bin/sh /usr/local/squid/bin/RunCache
1375 pts/0 S 0:00 squid -NsY
1376 ? S 0:00 (unlinkd)

并且系统中应该有如下几个端口被监听:

[root@proxy logs]# netstat -ln
tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN
udp 0 0 0.0.0.0:3130 0.0.0.0:*
这些说明squid已经正常启动了。

然后/etc/rc.d/rc.local文件最后添加 /usr/local/squid/bin/RunCache & 以使得系统启动时自动启动squid服务器。

5.iptables的设置

在/etc/rc.d/目录下用touch命令建立firewall文件,执行chmod u+x firewll以更改文件属性,编辑/etc/rc.d/rc.local文件,在末尾加上/etc/rc.d/firewall以确保开机时能自动执行该脚本。

firewall文件内容为:

#!/bin/sh

echo "Enabling IP Forwarding..."
echo 1 > /proc/sys/net/ipv4/ip_forward

echo "Starting iptables rules..."

#Refresh all chains

/sbin/iptables -F -t nat

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp
--dport 80 -j REDIRECT --to-ports 3128

iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o
eth1 -j SNAT --to-source 200.200.200.200

如果需要还可以添加一些防火墙规则以增强安全性,具体参考:

http://www.linuxaid.com.cn/engineer/bye2000/doc/iptables1.htm

http://www.linuxaid.com.cn/engineer/bye2000/doc/iptables2.htm



一、代理服务器简介

  代理服务器能够让多台没有IP地址的电脑使用其代理功能高速、安全地访问互联网资源。当代理服务器客户端发出一个对外的资源访问请求,该请求先 被代理服务器识别并由代理服务器代为向外请求资源。由于一般代理服务器拥有较大的带宽,较高的性能,并且能够智能地缓存已浏览或未浏览的网站内容,因此, 在一定情况下,客户端通过代理服务器能更快速地访问网络资源。代理服务器应用的常见例子:拥有上百台电脑的局域网通过一台能够访问外部网络资源的代理服务 器而也能访问外部互联网。

  二、SQUID软件简介

  能够让普通电脑成为 代理服务器的软件就称为代理服务器软件,著名的有微软的MS PROXY2.0(现在已经更名为ISA.NET了),WINGATE,SYGATE, NETSCAPE的PROXY SERVER,以及我们要介绍的LINUX下免费的SQUID。

  SQUID是Linux环境下最为流行的代理服务器软件,它功能强大:支持对HTTP,FTP,GOPHER,SSL和WAIS等协议的代理;设置简单:只要改动配置文件中的一项就可使得代理服务器运转起来。

  三、SQUID代理服务器的设置

  设置目标:配置一台RedHat Linux7.0的电脑成为所有网段的代理服务器。说明:考虑到是初次接触SQUID软件,出于方便,下面的安装过程都是以root身份进行的。

  第一步:下载、编译和安装SQUID软件

  从www.squid-cache.org下载SQUID软件,这里以稳定的squid-2.4.STABLE1-src.tar.gz为例。 运行“tar zxf squid-2.4.STABLE1-src.tar.gz”,产生“squid-2.4.STABLE1”目录。由于SQUID的运行需要nobody 用户和nobody组,所以你先运行Linuxconf命令查看是否有这个用户和组;没有的话,建立。进入“squid-2.4.STABLE1”目录, 运行“./configure --prefix=/usr/local/squid”;完成后,再运行“make all”;完成后,接着运行“make install”安装软件。至此,squid已经成功安装到/usr/local/squid目录下了。

  第二步:配置SQUID软件

  1、“chmod 777 /usr/local/squid/logs”,设置logs为可写。这样,不特定的SQUID代理客户才能正常访问代理服务器,才能在logs目录才产生access.log、cache.log等文件。

  2、“/usr/local/squid/bin/squid -z”,手工建立squid的缓存目录/usr/local/squid/cache。

  3、修改SQUID的配置文件squid.conf。SQUID的配置文件共有125个配置项,但是对于一般的web cache proxy server来说,只要修改几个配置项即可。编辑/usr/local/squid/etc/squid.conf文件,找到“http_access deny all”并改为“http_access allow all”令所有的电脑都能透过代理服务访问互联网资源。其实只要该一项,SQUID服务就可以启动了。

  4、“/usr/local/bin/RunCache”,启动squid代理服务。

  如果没有1和2,运行RunCache脚本后,查看/usr/local/squid/cache/cache.log文件,可以看到相关的错误信息。

  第三步、设置客户端,测试代理服务

  在另一台win98的电脑上,(以Internet Explore5.0为例)运行IE,单击“工具”,接着单击“Internet选项”,再单击“连接”选项卡,单击“局域网设置”;在“局域网设置”窗 口中,在“地址”处填上SQUID服务器的IP地址,在“端口”处填上“3218”(SQUID软件默认代理用端口号),确定后退出。接下来,通过浏览一 些网站,也可以查看logs下的access.log和cache.log,看看是否代理运行正常。

  四、其它

  1、cache_mem:设置代理服务使用的内存大小,一般推荐为物理内存的三分之一。

  2、cache_dir:指定cache目录的路径,默认为/usr/local/squid/cache。

  3、http_port:代理服务使用的端口号,默认为3128,你可以使用其他的端口,不过注意两点:一、使用端口不能和其他的服务重复;二、使用1024以下的端口,SQUID必须以root身份运行。

  4、/usr/local/libexec下有个脚本cachemgr.cgi,把它拷贝到你的Web的cgi-bin目录下(Apache安装后默认的web根是/var/www),通过浏览器运行,可以进入web方式的一些管理。

  五、结语

  要想完全发挥SQUID的功能,仅仅了解以上那些是远远不够的;你应该常常去SQUID的老家www.squid-cache.org看看,才能更上层楼

http://www.abcdown.net/InfoView/Article_154813_3.html
http://tech.sina.com.cn/roll/2007-06-26/1126347163.shtml
原创粉丝点击