如何在Linux上用Squid搭建代理服务器

如何在Linux上用Squid搭建代理服务器,第1张

1、首先下载:squid-329tarbz2

2、上传到服务器后解压:

解压: tar -vxjf squid-329tarbz2

解压后生成目录:squid-329

进入目录翻看文档INSTALL:

xxxx> more INSTALL

To build and install the Squid Cache, type:

% /configure --prefix=/usr/local/squid

% make all

% make install

To run a Cache, you will need to:

1 customize the squidconf configuration file:

% vi /usr/local/squid/etc/squidconf

2 Initalise the cache:

% /usr/local/squid/sbin/squid -z

3 start the cache:

Squid是Linux下最为流行的代理服务器软件,它功能强大,支持对HTTP、FTP、Gopher、SSL、WAIS等协议的代理; 设置简单,只需对配置文件稍稍改动就可使代理服务器运转起来。此外,Squid具有页面缓存功能,它接受用户的下载申请,并自动处理所下载的数据。 前期准备 Squid对硬件的要求是: 内存不应小于128M,硬盘转速越快越好,最好使用服务器专用SCSI硬盘,对CPU的要求不高,400MHz以上即可。笔者所管理的代理服务器是Inter2150,安装了Red Hat Linux 72,安装时就带有Squid。有两块网卡,一块eth0配外部地址(比如211889966),一块eth1配内网地址(比如19216851)。如果安装了Gnome或其他图形界面,就可以在netconfig中给两块网卡配置IP地址,不然的话,可在/etc/sysconfig/network-script路径下更改文件ifcfg-eth0和ifcfg-eth1。 首先编辑ifcfg-eht0,有以下几项: DEVICE=eth0 (表示用哪块网卡) IPADDR=211889966 (设置该网卡的IP地址) NETMASK=255255255252 (设置子网掩码) 同样编辑ifcfg-eth1,然后运行命令network restart就可以使配置生效了。对eth0、eth1进行配置后,可以用ifconfig命令来查看是不是配置成功。 如果服务器只有一张网卡,也不用担心,Linux可以在一块网卡上绑定多个IP地址。在图形界面下配置很简单,不赘述。如果在文本状态下配置,可以将ifcfg-eth0复制并命名为ifcfg-eth0:1,把它完全当成两块网卡来配就可以了。 Squid的安装 1 安装Linux 安装Linux在硬盘分区时要注意,最好不要让系统自己分区,而是手动分区。通常,在Linux系统中有且仅有一个交换分区(在文件系统形式中选择Linux swap),它用做虚拟内存,建议将交换分区的大小设置为内存的两倍。当硬盘的大小超过了8G,要再建立一个128M(稍稍大一点,不会出错)的boot分区,这是为了避免将系统内核文件放到1024磁道以外,如果将boot作为root分区的一个子目录,内核文件就会安装在root分区的任何地方。因为要用做代理服务器,建议再分一个分区“var”,作为Squid的缓冲区,所以根据磁盘大小尽量分配大一点,最后将硬盘的剩余空间全部分给root分区。 2 安装Squid 新手安装Squid,建议在安装Linux时就选中Squid,它并不是默认选中项,而且也不在选择的大类中,要在详细列表中查找。如果没有安装,又不想重装系统,可以从 下载Squid软件。 Squid代理服务器的设置 安装好Squid后几乎就可以用了,用编辑器打开/etc/squid/squidconf文件(以root登录),Squid的配置文件共有125个配置项,但是一般来说,只要修改几个配置项即可。找到“http_access deny all”并改为“http_access allow all”令所有的电脑都能通过代理服务访问互联网资源。其实只要修改该项,Squid服务就可以启动了。 为了更好地控制代理服务器的行为,还有几个可配置项需要考虑: 1 cache_mem: 设置代理服务使用的内存大小,一般推荐为物理内存的三分之一。 2 cache_dir:设定缓存的位置、大小。一般格式如下: cache_dir /var/spool/squid/cache 100 16 256 cache_dir指定cache目录的路径,默认为/var/spool/squid/cache。 /var/spool/squid/cache代表缓存的位置,使用squid -z指令会在这个目录下建立存储交换文件(swap files)的目录。100表示缓存最大为100M,16和256代表一级和二级目录数。实际使用时,100M是不够的,如果硬盘够大,可以增加存储空间,比如:cache_dir /var/spool/squid/cache 2000 16 256。 3 http_port:代理服务使用的端口号,默认为3128,可以使用其他的端口,注意将前面的注释符号“#”去掉。另外,使用端口不能和其他的服务重复,如果使用1024以下的端口,Squid必须以root身份运行。 4 maximum_object_size: 指定Squid可以接收的最大对象的大小。Squid缺省值为4M,可以根据自己的需要进行设定。 启动Squid Squid可以设置为自动启动。运行命令setup,在System services选项中选中Squid。设置后每次重新开机,都会自动执行Squid。 如果是第一次启动,要建立/var/spool/squid下的暂存资料目录,先输入squid -z,再启动Squid(直接运行Squid即可)。 启动Squid后,在另一台Windows电脑上(以Internet Explorer 50为例)运行IE,单击“工具”,接着单击“Internet选项”,再单击“连接”选项卡,选择“局域网设置”。在“局域网设置”窗口中的“地址”处填上Squid服务器的IP地址,在“端口”处填上“3218”(Squid软件默认代理的端口号),确定后退出。接下来,随意浏览一些网站检查Squid的运行情况,也可以查看logs下的accesslog和cachelog,看看代理是否运行正常。

使用透明代理有几个好处。首先,对最终用户来说,透明代理可以改善上网浏览体验,因为缓存了经常访问的网站内容,同时给他们带来的配置开销最小。对管理员来说,透明代理可用于执行各种管理政策,比如内容/URL/IP过滤和速率限制等。

代理服务器充当客户端和目的地服务器之间的中介。客户端将请求发送到代理服务器,随后代理服务器评估请求,并采取必要的动作。在本教程中,我们将使用Squid搭建一个Web代理服务器,而Squid是一种健壮的、可定制的、稳定的代理服务器。就个人而言,大概一年来我管理着一台拖有400多个客户端工作站的Squid服务器。虽然平均而言我大概一个月就要重启一次服务,但处理器和存储使用率、吞吐量以及客户端响应时间都表现不错。

我们将配置Squid以获得下列拓扑结构。CentOS/RHEL设备有一块网卡(eth0)连接到专有局域网,另一块网卡(eth1)则连接到互联网。

Squid的安装

想使用Squid搭建透明代理系统,我们首先要添加必要的iptables规则。这些规则应该会帮助你开始上手,不过务必要确保它们与任何的现有配置没有冲突。

# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE # iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

第一条规则将引起来自eth1(广域网接口)的所有出站数据包都有eth1的源IP地址(也就是启用NAT)。第二条规则将把来自eth0(局域网接口)的所有入站HTTP数据包(发往TCP 80)重定向至Squid侦听端口(TCP 3128),而不是直接将其转发到广域网接口。

我们使用yum,开始安装Squid。

# yum install squid

现在,我们将改动Squid配置,将其变成透明代理系统。我们将局域网子网(比如1010100/24)定义为有效的客户端网络。不是来自该局域网子网的任何流量将被拒绝访问。

# vim /etc/squid/squidconf visible_hostname proxyexampletst http_port 3128 transparent ## 定义我们的网络## acl our_network src 1010100/24 ## 确保我们的网络允许访问## http_access allow our_network ## 最后拒绝其他的所有流量## http_access deny all

现在我们开启Squid服务,确保它已被添加到启动项。

# service squid start # chkconfig squid on

鉴于Squid已搭建并运行起来,我们可以测试其功能了,为此只需监测Squid日志。从连接至该局域网的计算机访问任何URL,你应该会在日志中看到类似以下的内容。

# tailf /var/log/squid/accesslog 1402987348816 1048 10101010 TCP_MISS/302 752 GET http://wwwgooglecom/ - DIRECT/17319439178 text/html 1402987349416 445 10101010 TCP_MISS/302 762 GET http://wwwgooglecombd/ - DIRECT/17319478 94 text/html

据日志文件显示,IP地址为10101010的机器试图访问googlecom,Squid处理了这个请求。

一种最基本的Squid代理服务器现已准备就绪。在本教程的余下部分,我们将调整Squid的一些参数,以控制出站流量。请注意:这仅仅为了演示。实际的政策应加以定制,以满足你的具体要求。

准备工作

在开始配置之前,我们先明确几个要点。

Squid配置解析

在阅读配置文件时,Squid以一种自上而下的方式来解析文件。自上而下地解析规则,直到发现匹配为止。一旦发现匹配,该规则就被执行;其下面的其他任何规则将被忽视。所以,添加过滤规则的最佳实践就是,按下列顺序指定规则。

explicit allow

explicit deny

allow entire LAN

deny all

Squid重启与Squid重新配置

一旦Squid配置经过改动,Squid服务就需要重启。重启服务可能需要一段时间,有时要几分钟,长短取决于活动连接的数量。在这个期间,局域网用户无法访问互联网。想避免这种服务中断,我们可以使用下面这个命令,而不是使用“service squid restart”。

# squid -k reconfigure

该命令将允许Squid使用更新后的参数来运行,而不需要重启本身。

按照IP地址过滤局域网主机

在这个演示中,我们想要搭建这样的Squid:禁止拥有IP地址10101024的主机和IP地址10101025的主机访问互联网。为此,我们创建了一个文本文件“denied-ip-file”,里面含有所有被拒绝访问的主机的IP地址,然后将该文件添加到Squid配置中。

# vim /etc/squid/denied-ip-file 10101024 10101025 # vim /etc/squid/squidconf ## 首先我们创建访问控制列表(ACL),隔离被拒绝访问的IP地址##acl denied-ip-list src "/etc/squid/denied-ip-file" ##然后,我们应用ACL ## http_access deny denied-ip-list ## 明确拒绝## http_access allow our_network ## 允许局域网## http_access deny all ## 拒绝所有deny all ##

现在我们需要重启Squid服务。Squid将不再认可来自这些IP地址的请求。如果我们检查squid日志,就会发现来自这些主机的请求处于“TCP_DENIED”状态。

过滤黑名单中的网站

这个方法将只适用于HTTP。假设我们想阻止badsitecom和denysitecom,就可以将这两个网址添加到文件,并且将引用添加到squidconf。

# vim /etc/squid/badsite-file badsite denysite # vim /etc/squid/squidconf ## ACL定义##acl badsite-list url_regex "/etc/squid/badsite-file" ## ACL 应用## http_access deny badsite-list http_access deny denied-ip-list ## 之前设置,但这里不起作用## http_access allow our_network http_access deny all

请注意:我们使用了ACL类型“url_regex”,这将与所请求的URL中的“badsite”和“denysite”这两个词相匹配。也就是说,凡是在URL中含有“badsite”或“denysite”(比如badsiteorg、newdenysitecom或otherbadsitenet)的请求一律被阻止。

合并多个ACL

我们将创建一个访问列表,阻止IP地址为101010200的客户端和IP地址为101010201的客户端访问custom-block-sitecom。其他任何客户端都能够访问该网站。为此,我们将首先创建一个访问列表以隔离这两个IP地址,然后创建另一个访问列表以隔离所需的网站。最后,我们将同时使用这两个访问列表,以满足要求。

# vim /etc/squid/custom-denied-list-file 101010200 101010201 # vim /etc/squid/custom-block-website-file custom-block-site # vim /etc/squid/squidconf acl custom-denied-list src "/etc/squid/custom-denied-list-file" acl custom-block-site url_regex "/etc/squid/custom-block-website-file" ## ACL应用 ## http_access deny custom-denied-list custom-block-site http_access deny badsite-list ## 之前设置,但这里不起作用## http_access deny denied-ip-list ## 之前设置,但这里不起作用## http_access allow our_network http_access deny all # squid -k reconfigure

被阻止的主机现在应该无法访问上述网站了。日志文件/var/log/squid/accesslog应该含有相应请求的“TCP_DENIED”。

设定最大下载文件大小

Squid可以用来控制最大的可下载文件大小。我们想把IP地址为101010200的主机和IP地址为101010201的主机的最大下载大小限制在50MB。我们之前已经创建了ACL“custom-denied-list”,以隔离来自这些源地址的流量。现在,我们将使用同一个访问列表来限制下载文件大小。

# vim /etc/squid/squidconf reply_body_max_size 50 MB custom-denied-list # squid -k reconfigure

建立Squid缓存层次体系

Squid支持缓存的方式是,将经常访问的文件存储在本地存储系统中。设想一下:你的局域网上有100个用户在访问googlecom。要是没有缓存功能,就要为每一个请求单独获取Google标识或涂鸦。Squid可以将标识或涂鸦存储在缓存中,以便从缓存来提供。这不仅改善了用户感觉得到的性能,还减少了带宽使用量。这可以说是一举两得。

想启用缓存功能,我们可以改动配置文件squidconf。

# vim /etc/squid/squidconf cache_dir ufs /var/spool/squid 100 16 256

数字100、16和256 有下列含义。

•为Squid缓存分配100 MB存储空间。如果你愿意,也可以加大所分配的空间。

•16个目录(每个目录里面含有256个子目录)将用于存储缓存文件。这个参数不应该改动。

我们可以通过日志文件/var/log/squid/accesslog来证实Squid缓存是否被启用。如果缓存成功命中,我们应该会看到标有“TCP_HIT”的项。

总而言之,Squid是一种功能强大的、基于行业标准的Web代理服务器,被全球各地的系统管理员们广泛使用。Squid提供了简易的访问控制功能,可用于管理来自局域网的流量。它既可以部署到大企业网络中,也可以部署到小公司网络中。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何在Linux上用Squid搭建代理服务器

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情