`
biaoming
  • 浏览: 270240 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

iptables+squid (一)

阅读更多
服务器类 Linux 目前已经逐步成为网络的同义词。它可以在办公环境或日常家庭中作为文件服务器、打印服务器、
邮件服务器以及应用软件服务器来使用, 并且逐渐作为代理服务器来使用。
一台代理服务器可以通过一个Internet连接在同一时间为不同的用户提供Internet访问服务。好的代理服
务器同时还为访问请求提供缓存服务,这样当一个本地访问请求到达时,代理服务器会先在缓存记录里查
找有无相同的请求,如果有,则从缓存中把数据直接回送到客户端,从而缩短访问WEB的时间并减轻带宽
的压力。
Squid 是一个支持Proxy、HTTP缓存、Ftp、Gopher 等等的软件,它也支持SSL、访问控制、DNS缓存并且为
所有的请求做记录。Squid 在 Windows NT 下也可用,详见 Logi Sense.

本文的重点是为配置一台代理服务器并为用户提供可控访问提供基本的指导

Squid 已经安装了吗?

Squid 的 rpm 文件已经和 RedHat 7.1 捆绑发行了,在安装系统的时候,如果在 Networks 选项中选中的
话,它会自动安装在系统上。您可以用下面的命令检查您的系统中是否已经安装了 Squid:
rpm -q squid
   
Squid 的最新版本可以在 Squid 主页 或它的镜像站点得到。 Squid 可以用下述命令安装在系统上:
rpm -ivh squid-2.3.STABLE4-10.i386.rpm
   
 

配置 Squid

Squid 的定制是通过编辑它的配置文件 squid.conf 来实现的,squid.conf 文件通常在 /etc/squid 目录
下。这个配置文件内容很多,但好在它的每个选项都有详尽的说明。

首先要修改的是 http_port,这个选项指定了 Squid 监听客户请求的端口,默认值是 3128。要使用代理
功能,这个端口值要和运行 Squid 的机器的 IP 地址一起使用,可以修改成下面这样:

http_port 192.168.0.1:8080

上述声明表示 Squid 绑定在 IP 地址 192.168.0.1 上,端口为 8080。端口可以设置为任意值,但要确认
没有其他程序会使用同样的端口。其他的服务请求的端口设置也可以设为类似的配置。  

访问控制

使用访问控制特性,可以控制在访问时根据特定的时间间隔进行缓存、访问特定站点或一组站点等等。 Squid 访问控制有两个要素:ACL 元素和 访问列表。访问列表可以允许或拒绝某些用户对此服务的访问。

下面列出一些重要的 ACL 元素类型
  • src : 源地址 (即客户机IP地址)
  • dst : 目标地址 (即服务器IP地址)
  • srcdomain : 源名称 (即客户机名称)
  • dstdomain : 目标名称 (即服务器名称)
  • time : 一天中的时刻和一周内的一天
  • url_regex : URL 规则表达式匹配
  • urlpath_regex: URL-path 规则表达式匹配,略去协议和主机名
  • proxy_auth : 通过外部程序进行用户验证
  • maxconn : 单一 IP 的最大连接数
为了使用控制功能,必须先设置 ACL 规则并应用。ACL 声明的格式如下:

acl   acl_element_name   type_of_acl_element values_to_acl

注:
  1. acl_element_name 可以是任一个在 ACL 中定义的名称。
  2. 任何两个 ACL 元素不能用相同的名字。
  3. 每个 ACL 由列表值组成。当进行匹配检测的时候,多个值由逻辑或运算连接;换言之,即任一 ACL
    元素的值被匹配,则这个 ACL 元素即被匹配。
  4. 并不是所有的 ACL 元素都能使用访问列表中的全部类型。
  5. 不同的 ACL 元素写在不同行中,Squid 将把它们组合在一个列表中。
我们可以使用许多不同的访问条目。下面列出我们将要用到的几个:
  • http_access: 允许 HTTP 访问。这个是主要的访问控制条目。
  • no_cache: 定义对缓存请求的响应。
访问列表的规则由一些类似 'allow' 或 'deny' 的关键字构成,用以允许或拒绝向特定或一组 ACL 元素提供服务。
注:
  1. 这些规则按照它们的排列顺序进行匹配检测,一旦检测到匹配的规则,匹配检测就立即结束。
  2. 一个访问列表可以又多条规则组成。
  3. 如果没有任何规则与访问请求匹配,默认动作将与列表中最后一条规则对应。
  4. 一个访问条目中的所有元素将用逻辑与运算连接:
    http_access Action 声明1 AND 声明2 AND 声明 OR.
    http_access Action 声明3
    多个 http_access 声明间用或运算连接,但每个访问条目的元素间用与运算连接。
  5. 请记住列表中的规则总是遵循由上而下的顺序。
 

回到配置 Squid

Squid 默认不做任何用户访问控制。若要允许某个访问,必须进行定制规则。在 squid.conf 中 http_access deny 行前输入下述文字:

acl mynetwork 192.168.0.1/255.255.255.0
http_access allow mynetwork

mynetwork 是 acl 名称,下一行则是适用于特定 acl (即 mynetwork ) 的规则。192.168.0.1 指明是网络中掩码为 255.255.255.0 的子网。mynetwork 主要是为了给出网络上一组机器,下一条规则则允许这些
机器访问 http 服务。上述修改配合 http_port 就可以让 Squid 很好的工作起来了。 修改完成后,Squid
可以用下述命令启动:

service squid start

注:
Squid 也可以在系统启动的时候自动运行,方法是在 ntsysv 或 setup(系统服务菜单)中打开 Squid。在
对配置文件做了任何更改之后,当前正运行的 Squid 进程必须重新启动。可以用下面的命令来完成:
  1. service squid restart 或
  2. /etc/rc.d/init.d/squid restart
 

配置客户端

由于客户端的请求是送到代理服务器的特定端口的,因此,客户端也要做相应配置。在继续下一步之前,请
确认要访问代理服务器的客户端已经连接在局域网中并已分配了有效的 IP 地址,请确认它们都能 ping 通
运行了 Squid 的 Linux 服务器。
在 Internet Explorer 下的配置:
  1. 点击菜单上的 工具 -> Internet 选项
  2. 选择 连接 并单击 局域网设置
  3. 选中 使用代理服务器 输入上述代理服务器的 IP 地址和端口。

在 Netscape Navigator 下的配置:
  1. 点击菜单上的编辑(Edit)->首选项(Preference)->高级(Advanced)->代理服务器(Proxies)。
  2. 选中手动配置代理服务器(Manual Proxy Configuration)。
  3. 点击查看(View) 并
  4. 输入上述代理服务器的 IP 地址和端口。
 

使用访问控制

多个访问控制及其规则为客户端访问控制提供了一种灵活的机制。下面给出通常所用到的例子:
  1. 允许列表中的机器访问 Internet。

    acl allowed_clients src 192.168.0.10 192.168.0.20 192.168.0.30
    http_access allow allowed_clients
    http_access deny !allowed_clients

    这个规则只允许 IP 地址为 192.168.0.10、192.168.0.20 及 192.168.0.30 的机器
    访问 Internet,其他 IP 地址的机器则都被拒绝访问。

  2. 限制访问时段。

    acl allowed_clients src 192.168.0.1/255.255.255.0
    acl regular_days time MTWHF 10:00-16:00
    http_access allow allowed_clients regular_days
    http_access deny !allowed_clients

    这个规则允许子网192.168.0.1中的所有客户机在周一到周五的上午10:00到下午4:00
    访问 Internet。

  3. 为不同的客户机分配不同的访问时段。

    acl hosts1 src192.168.0.10
    acl hosts2 src 192.168.0.20
    acl hosts3 src 192.168.0.30
    acl morning time 10:00-13:00
    acl lunch time 13:30-14:30
    acl evening time 15:00-18:00
    http_access allow host1 morning
    http_access allow host1 evening
    http_access allow host2 lunch
    http_access allow host3 evening
    http_access deny all

    在这个规则中,主机 host1 可以在 morning 和 evening 时段访问 Internet,主机
    host2 和 host3 分别只能在 lunch 和 evening 时段访问 Internet。

    注:
    一个访问条目中所有的元素之间用与运算按下述方式连接 :

    http_access Action statement1 AND staement2 AND statement OR.

    多个 http_access 声明之间用或运算连接而每个访问条目中的元素用与运算连接,见
    下:

    http_access allow host1 morning evening

    无法在时段 morning 和时段 evening 同时进行(morning AND evening ),这个表达
    式将不会返回真值(TRUE),从而这个条目将不会引发任何动作。

  4. 站点屏蔽
    Squid 可以屏蔽某些特定站点或含有某些特定字词的站点。可以用下面的规则实现:

    acl allowed_clients src 192.168.0.1/255.255.255.0
    acl banned_sites url_regex abc.com *()(*.com
    http_access deny banned_sites
    http_access allow allowed_clients

    也可以用以屏蔽含有某些特定字词(比如说 dummy、fake)的站点

    acl allowed_clients src 192.168.0.1/255.255.255.0
    acl banned_sites url_regex dummy fake
    http_access deny banned_sites
    http_access allow allowed_machibes

    在实际应用中,不需要把需屏蔽的所有站点或字词都列在上面,可以先保存在一个文件
    中(请查看 /etc 目录中的 banned.list文件)ACL 将从这个文件中读出所需信息用以
    屏蔽被禁止的站点。

    acl allowed_clients src 192.168.0.1/255.255.255.0
    acl banned_sites url_regex "/etc/banned.list"
    http_access deny banned_sites
    http_access allow allowed_clients

  5. 优化
    Squid 可以通过使用 maxconn 元素来限制客户端连接的数目。 要使用这个选项,必须
    先允许 client_db。

    acl mynetwork 192.168.0.1/255.255.255.0
    acl numconn maxconn 5
    http_access deny mynetwork numconn

    注:
    maxconn ACL 使用小于(less-than)对比。此 ACL 规则将在连接数大于设定值时被匹配。
    这是 ACL 不与 http_access 允许规则连用的主要原因。

  6. 缓存数据
    对于静态页面,缓存的数据能够立刻回送到发出请求的客户端。没有必要去缓存 cgi-bin
    或 Servlet,这些可以用 ACL 元素 no_cache 来禁止。

    acl cache_prevent1 url_regex cgi-bin /?
    acl cache_prevent2 url_regex Servlet
    no_cache deny cache_prevent1
    no_cache deny cache_prevent2

  7. 自定错误反馈信息
    可以用拒绝规则的 deny_info 选项来自定错误反馈信息。Squid 默认的错误信息放在
    /etc/squid/errors 目录中。这个目录可以用 error_directory 选项指定。您也可以
    定制现存的错误反馈信息。

    acl allowed_clients src 192.168.0.1/255.255.255.0
    acl banned_sites url_regex abc.com *()(*.com
    http_access deny banned_sites
    deny_info ERR_BANNED_SITE banned_sites
    http_access allow allowed_clients

    在上面的例子中,当用户试图访问被禁止的站点时,将会显示一条定制的信息。
    ERR_BANNED_SITE 选项中的文件名必须在上述的错误信息的目录中。错误信息必须是 HTML 格
    式的。上面列出了 ACL 的一些选项,您可以参看 Squid 主页上的 FAQ 文档 以获得使用 ACL
    更多的信息。
 

日志

Squid 的所有日志文件都存放在 /var/log/squid 目录中,有缓存日志、访问日志和 store.log文件。文
件 access.log 记录了有关客户机的请求、连接活动、每个 HTTP & ICP 询问、客户机 IP 地址、请求方
式、请求的 URL 等等信息。这些数据可以用来对访问进行分析。许多程序如 sargcalamaris, Squid-Log-Analyzer 都可以用来分析这些数据并产生 HTML 格式的分析报告。 这些报告可以在一组用户、一组
IP 地址或一组访问过的站点等等记录中产生。

这些记录文件也可以成为下面这样:
cache_access_log      For access.log
cache_log             For cache.log
cache_store_log       For store.log (Store manager)
pid_filename          Squid process ID file name
 

验证方式

Squid 的默认配置允许任何用户不经过验证过程就可以进行访问。Squid 通过一个外部程序提供用户验证
功能(比如说只允许有效的用户访问 Internet),这就需要一个有效的用户名和密码。可以用 proxy_auth
ACL 和 authenticate_program 来实现,在允许访问前强制进行用户名和密码的核查。下面列出一些 Squid
能用到的验证程序:
  1. LDAP : 使用 Linux Lightweight 目录访问协议(Linux Lightweight Directory Access Protocol)
  2. NCSA : 使用 NCSA 风格的用户名和密码档
  3. SMB : 使用 SMB 协议的服务,如 SAMBA 或 Windows NT
  4. MSNT : 使用 Windows NT 的域验证
  5. PAM : 使用 Linux 的可装载验证模块
  6. getpwam : 使用 Linux 密码档
必须指定使用的验证程序,可以用 authenticate_program 选项完成。请确认选定的验证程序已安装并能很
好的工作。

修改 squid.conf 文件选定验证程序
authenticate_program /usr/local/bin/pam_auth

acl pass proxy_auth REQUIRED
acl mynetwork src 192.168.0.1/255.255.255.0
http_access deny !mynetwork
http_access allow pass
http_access deny all

这个规则表示,使用 PAM 验证程序,所有用户在获得访问许可前必须进行验证。

还有些选项比如 authenticate_ttl 和 authenticate_ip_ttl,可以用来改变验证程序的动作,比如说使某个用户名及密码重新生效。  

参考资料

本文仅仅初窥了 Squid 的冰山一角,更多的参考资料可以在下面的站点找到:

(转贴自:www.linuxfocus.org,作者:D.S. Oberoi 翻译:Free Neil

分享到:
评论

相关推荐

    RH Linux下Iptables+Squid2.6透明代理+防火墙配置

    在Redhat Linux中,Iptalbes和Squid透明代理加防火墙的搭配配置是最常见的组合,也是非常实用的,下面就是详细的配置信息。

    透明防火墙架设的完全攻略(bridge+iptables+squid)

    绍透明防火墙架设的完全攻略(bridge+iptables+squid)

    git项目管理运维手册.docx

    * IPTABLES+SQUID 服务:手册中介绍了IPTABLES+SQUID的概念和应用,包括IPTABLES+SQUID服务器的设置和配置。 知识点3: 安全服务规划 * SSH 互信:手册中介绍了SSH(Secure Shell)的概念和应用,包括SSH服务器的...

    NAT+Squid配置

    在IT领域,NAT(网络地址转换)与Squid(一种代理服务器)的结合配置是一种常见的技术手段,用于提供内部网络对互联网的访问控制、流量管理以及安全性增强。以下是对这一主题的深入探讨,包括NAT与Squid的基本概念、...

    Linux搭建Squid透明代理及squid+icap环境

    二、Squid+ICAP环境搭建 1. 安装ICAP服务器 例如,你可以使用mod_security作为ICAP服务器,它提供内容过滤功能。首先,安装mod_security: ```bash sudo apt-get install libapache2-mod-security2 # Ubuntu/...

    squid+iptables透明代理配置詳解

    通过上述步骤,您可以成功搭建一个基于squid+iptables的透明代理服务器,实现内部网络用户的访问控制。这种配置不仅能够满足企业级的网络管理需求,还能够提高网络安全性和管理效率。对于初学者而言,本教程提供了...

    RHEL5下Squid+IPtables经典案例

    RHEL5下Squid+IPtables经典案例

    在RedHat linux 9.0下用squid iptables实现透明代理.pdf

    基于 RedHat Linux 9.0 的 Squid 和 iptables 透明代理...本文档详细介绍了在 RedHat Linux 9.0 环境下使用 Squid 和 iptables 搭建透明代理服务器的过程,旨在帮助读者快速搭建一个高速、支持多协议的透明代理服务器。

    单网卡squid 3.0

    在本文中,我们将详细介绍如何在CentOS 5.5系统上使用Squid 3.0和iptables实现这一功能。 首先,我们需要安装Squid代理服务器。在CentOS系统中,可以使用`yum`命令直接安装Squid 3.0: ```bash yum install squid-...

    iptables应用手册详细介绍

    在实际应用中,iptables 可以与代理服务器(如 squid)结合,以获得更加好的安全性。此外,iptables 也是一个非常灵活的工具,可以根据不同的需求进行配置和调整。 iptables 是一个功能强大且灵活的工具,能够满足...

    squid单网卡

    在单网卡环境中配置 Squid 透明代理,主要涉及到 Squid 配置文件的修改和 iptables 规则的设置。 首先,我们来看一下基本的拓扑结构。在这个例子中,Squid 服务器只有一个网卡,IP 地址为 192.168.220.128,它通过...

    squid代理服务器、iptables防火墙(安全)的设置和各自的功能.wps

    squid代理服务器、iptables防火墙(安全)的设置和各自的功能

    squid缓存服务器的研究

    #### 一、Squid 概述 Squid 是一款广泛应用于互联网数据缓存的开源软件。其主要功能是接收来自客户端的请求,并根据请求内容,从远程服务器获取数据后缓存至本地。当下次再次请求相同的数据时,Squid 可直接从本地...

    squid中文权威指南

    Squid 是一个广泛使用的开源代理服务器,主要功能是作为缓存代理,用于提高网络访问速度和效率。它支持多种协议,包括 HTTP、HTTPS、FTP 和 gopher,使得 Squid 成为互联网流量管理和优化的重要工具。在企业环境中,...

    squid 透明代理的实现与配置

    #### 一、Squid 透明代理概述 透明代理是一种代理服务器的工作模式,在这种模式下,客户端无需进行任何配置就能通过代理服务器访问互联网资源。Squid 作为一款广泛使用的高性能代理缓存软件,支持多种代理方式,...

    squid详细配置

    #### 一、Squid 概述及工作原理 **Squid** 是一种广泛使用的开源代理服务器,主要用于缓存网页内容,从而提高访问速度并减少网络流量。它主要作为应用层代理,支持多种协议如 HTTP、HTTPS 和 FTP 等。 ##### 1.1 ...

    squid配置文档

    最后,使用 iptables 进行端口重定向,将目标服务器的服务端口转发到 Squid 的监听端口。 需要注意的是,Squid 的反向代理功能依赖于 DNS 解析,不能仅通过 `/etc/hosts` 文件来解析域名。这个配置适用于 Squid 2.6...

Global site tag (gtag.js) - Google Analytics