linux--squid服务器的配置_第1页
linux--squid服务器的配置_第2页
linux--squid服务器的配置_第3页
linux--squid服务器的配置_第4页
linux--squid服务器的配置_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一一 linux squidlinux squid 服务器的配置服务器的配置 日期 2007 11 20 来源 活力网路技术互动中心 作者 吴康 字体 大 中 小 squid 代理服务代理服务 由一台拥有标准 IP 地址的机器代替若干没有标准 IP 地址的机器和 Internet 上的 其它主机打交道 squid 工作机制与基本功能 工作机制 代理服务器有何优点 1 快速的存取 由于它是先将网页下载到本地使用 因此访问频率越高的站点速度就会越快 2 降低网络的费用 Squid 是 Linux 下最为流行的代理服务器软件 它功能强大 Squid 的做为代理 服务器 性能远远超过 WINNT 加 MSPROXY2 0 为几百人 的小型局域网代理绰绰有余 3 Squid 配置参数 squid 的配置文件 etc squid squid conf 1 http port 10 10 10 1 3128 2 cache mem 指定 squid 可以使用的内存理想值 建议设为内存的 1 3 3 cache dir ufs var spool squid 100 16 256 定义硬盘缓存空间 4 简单的代理简单的代理 Squid 访问控制的两个要素 例如 允许 10 0 0 0 8 的网段能上网 vi etc squid squid conf acl god src 192 168 100 0 24 1818 行 http access allow god 1860 行 ACL 格式 acl 列表名称 控制方式 控制目标 acl god src x x x x 24 控制方式 src 源地址 即客户机 IP 地址 dst 目标地址 即服务器 IP 地址 srcdomain 源名称 dstdomain 目标名称 time 时间 url regex URL 规则表达式匹配 例 根据 ip 控制 A 只允许 10 0 0 0 8 内的客户用代理 vi etc squid squid conf acl god src 10 0 0 0 8 http access allow god 在 http access deny all 这一行前面添加 B 多个 ip 时 可以建立一个脚本再设它的路径 acl good src etc squid authorizedip txt C 根据时间控制 time 参数 S Sunday M Monday T Tuesday W Wednesday H Thursday F Friday A Saturday 例 控制部分客户机时间控制部分客户机时间 只允许 10 0 0 0 8 内的客户在上班时间用代理 其他一律禁止 vi etc squid squid conf acl worktime time MTWHF 8 30 12 00 acl worktime time MTWHF 14 00 18 00 acl god src 10 0 0 0 8 http access allow worktime god ACL 总结总结 1 这些规则按照它们的排列顺序进行匹配检测 一旦检测到匹配的规则 匹配 检测就立即结束 2 请记住列表中的规则总是遵循由上而下的顺序 根据关键字过滤网址 A 过滤色情网站 vi etc squid squid conf acl god src 10 0 0 0 8 acl bad url regex sex xxx http access deny bad http access allow god B 控制文件类型 不允许用户下载 MP3 AVI 等文件 vi etc squid squid conf acl mmxfile urlpath regex mp3 avi exe http access deny mmxfile C 透明代理透明代理 添加或修改如下行 vi etc squid squid conf 查找 http port 3128 http port 3128 httpd accel host virtual httpd accel port 80 httpd accel with proxy on httpd accel uses host header on iptables F echo 1 proc sys net ipv4 ip forward iptables A PREROUTING t nat i eth1 p tcp dport 80 j REDIRECT to 3128 iptbales t nat A POSTROUTING o eth0 s 10 0 0 0 8 j SNAT to 202 102 12 2 service iptables save 二 Squid 配置详解 2008 01 31 17 46 源码编译安装 当然你也可以到下面的官方网站下载最新的版本进行编译安装 http www squid cache org 其中 STABLE 稳定版 DEVEL 版通常是提供给开发人员测试程序的 假定下载了 最新 的稳定版 squid 2 5 STABLE2 tar gz 用以下命令解开压缩包 tar xvfz squid 2 5 STABLE tar gz 用 bz2 方式压缩的包可能体积更小 相应的命令是 tar xvfj squid 2 5 STABLE tar bz2 然后 进入相应目录对源代码进行配置和编译 命令如下 cd squid 2 5 STABLE2 配置命令 configure 有很多选项 如果不清楚可先用 help 查看 通常情况 下 用到的选项有以下几个 prefix web squid 指定 Squid 的安装位置 如果只指定这一选项 那么该目录下会有 bin sbin man conf 等目录 而主要的配置文件此时在 conf 子目录中 为便 于管理 最好用参数 sysconfdir etc 把这个文件位置配置为 etc enable storeio ufs null 使用的文件系统通常是默认的 ufs 不过如果想要做一个不缓存任何文件的代理 服 务器 就需要加上 null 文件系统 enable arp acl 这样可以在规则设置中直接通过客户端的 MAC 地址进行管理 防止客户使用 IP 欺骗 enable err languages Simplify Chinese enable default err languages Simplify Chinese 上面两个选项告诉 Squid 编入并使用简体中文错误信息 enable linux netfilter 允许使用 Linux 的透明代理功能 enable underscore 允许解析的 URL 中出现下划线 因为默认情况下 Squid 会认为带下划线的 URL 是 非法的 并拒绝访问该地址 整个配置编译过程如下 configure prefix var squid sysconfdir etc enable arp acl enable linux netfilter enable pthreads enable err language Simplify Chinese enable storeio ufs null enable default err language Simplify Chinese enable auth basic enable baisc auth helpers NCSA enable underscore 其中一些选项有特殊作用 将在下面介绍它们 最后执行下面两条命令 将源 代码编译为可执行文件 并拷贝到指定位置 make sudo make install 编辑编辑 基本配置基本配置 安装完成后 接下来要对 Squid 的运行进行配置 不是前面安装时的配置 所有项目都在 squid conf 中完成 Squid 自带的 squid conf 包括非常详尽的说 明 相当于一篇用户手册 对配置有任何疑问都可以参照解决 在这个例子中 代理服务器同时也是网关 内部网络接口 eth0 的 IP 地址为 192 168 0 1 外部网络接 eth1 的 IP 地址为 202 103 x x 下面是一个基本的 代理所需要配置选项 http port 192 168 0 1 3128 默认端口是 3128 当然也可以是任何其它端口 只要不与其它服务发生冲突即 可 为了安全起见 在前面加上 IP 地址 Squid 就不会监听外部的网络接口 下面的配置选项是服务器管理者的电子邮件 当错误发生时 该地址会显示在 错误页面上 便于用户联系 cache mgr start 以下这些参数告诉 Squid 缓存的文件系统 位置和缓存策略 cache dir ufs var squid cache mem 32MB cache swap low 90 cache swap high 95 在这里 Squid 会将 var squid 目录作为保存缓存数据的目录 每次处理的缓 存大小是 32 兆字节 当缓存空间使用达到 95 时 新的内容将 取代旧的而不直 接添加到目录中 直到空间又下降到 90 才停止这一活动 如果不想 Squid 缓存任何文件 如某些存储空间有限的专有系统 可以使用 null 文件系统 这样不需要那些缓存策略 cache dir null tmp 下面的几个关于缓存的策略配置中 较主要的是第一行 即用户的访问记录 可以通过分析它来了解所有用户访问的详尽地址 cache access log var squid access log cache log var squid cache log cache store log var squid store log 下面这行配置是在较新版本中出现的参数 告诉 Squid 在错误页面中显示的服 务器名称 visible hostname No1 proxy 以下配置告诉 Squid 如何处理用户 对每个请求的 IP 地址作为单独地址处理 client netmask 255 255 255 255 如果是普通代理服务器 以上的配置已经足够 但是很多 Squid 都被用来做透 明代理 所谓透明代理 就是客户端不知道有代理服务器的存在 当然也不需要进行任 何与代理有关的设置 从而大大方便了系统管理员 相关的选项有以下几个 httpd accel host virtual httpd accel port 80 httpd accel with proxy on httpd accel user host header on 在 Linux 上 可以用 iptables ipchains 直接将对 Web 端口 80 的请求直接转发 到 Squid 端口 3128 由 Squid 接手 而用户浏览器仍然认为它访问的是对方的 80 端口 例如以下这条命令 iptables t nat A PREROUTING s 192 168 0 200 32 p tcp dport 80 j REDIRECT 3128 就是将 192 168 0 200 的所有针对 80 端口的访问重定向到 3128 端口 所有设置完成后 关键且重要的任务是访问控制 Squid 支持的管理方式很多 使用起来也非常简单 这也是有人宁愿使用不做任何缓存的 Squid 也 不愿意 单独使用 iptables 的原因 Squid 可以通过 IP 地址 主机名 MAC 地址 用户 密码认证等识别用户 也可 以通过域名 域后缀 文件类 型 IP 地址 端口 URL 匹配等控制用户的访问 还可以使用时间区间对用户进行管理 所以访问控制是 Squid 配置中的重点 Squid 用 ACL Access Control List 访问控制列表 对访问类型进行划分 用 http access deny 或 allow 进行控制 根据需求首先定义两组用户 advance 和 normal 还有代表所有未指明的用户组 all 及不允许上网的 baduser 配置 代 码如下 acl advance 192 168 0 2 192 168 0 10 32 acl normal src 192 168 0 11 192 168 0 200 32 acl baduser src 192 168 0 100 32 acl baddst dst acl all src 0 0 0 0 0 http access deny baduser http access allow advance http access allow normal 可以看出 ACL 的基本格式如下 acl 列表名称 控制方式 控制目标 比如 acl all src 0 0 0 0 0 其名称是 all 控制方式是 src 源 IP 地址 控制目标是 0 0 0 0 0 的 IP 地址 即所有未定义的用户 出于安全考虑 总是在最后禁止 这个列表 下面这个列表代表高级用户 包括 IP 地址从 192 168 0 2 到 192 168 0 10 的所有计算机 acl advance 192 168 0 2 192 168 0 20 32 下面这个 baduser 列表只包含一台计算机 其 IP 地址是 192 168 0 100 acl baduser 192 168 0 100 32 ACL 写完后 接下来要对它们分别进行管理 代码如下 http access deny baduser http access allow advance http access allow normal 上面几行代码告诉 Squid 不允许 baduser 组访问 Internet 但 advance normal 组允许 此时还没有指定详细的权限 由 于 Squid 是按照 顺序读取规则 会首先禁止 baduser 然后允许 normal 如果将两条规则顺序 颠倒 由于 baduser 在 normal 范围中 Squid 先允许了所有的 normal 那么 再禁止 baduser 就不会起作用 特别要注意的是 Squid 将使用 allow deny allow deny 这样的顺序套用规 则 例如 当一个用户访问代理服务器时 Squid 会顺序测试 Squid 中定义的 所有规则列表 当所有规则都不匹配时 Squid 会使用与最后一条相反的规则 就像上面这个例子 假设有一个用户 的 IP 地址是 192 168 0 201 他试图通过 这台代理服务器访问 Internet 会发生什么情况呢 我们会发现 他能够正常 访问 因为 Squid 找遍所有访问列表也没有和 192 168 0 201 有关的定义 便 开始应用规则 而最后一条是 deny 那么 Squid 默认的下一条处理规则 是 allow 所以 192 168 0 201 反而能够访问 Internet 了 这显然不是我们希望 的 所以在所有 squid conf 中 最后一条规则 永远是 http access deny all 而 all 就是前面定义的 src 0 0 0 0 编辑编辑 高级控制高级控制 前面说过 Squid 的控制功能非常强大 只要理解 Squid 的行为方式 基本上就 能够满足所有的控制要求 下面就一步一步来了解 Squid 是如何进行控制管理 的 通过 IP 地址来识别用户很不可靠 比 IP 地址更好的是网卡的 MAC 物理地址 要在 Squid 中使用 MAC 地址识别 必须在编译时加上 enable arp acl 选 项 然后可以通过以下的语句来识别用户 acl advance arp 00 01 02 1f 2c 3e 00 01 02 3c 1a 8b 它直接使用用户的 MAC 地址 而 MAC 地址一般是不易修改的 即使有普通用户 将自己的 IP 地址改为高级用户也无法通过 所以这种方式比 IP 地址可靠得多 假如不想让用户访问某个网站应该怎么做呢 可以分为两种情况 一种是不允 许访问某个站点的某个主机 比如 ok 的主机是 而其它的新浪 资源却是允许访问的 那么 ACL 可以这样写 acl sinapage dstdomain http access deny ok 由此可以看到 除了 ok 其它如 news sina c 常访问 另一种情况是整个网站都不许访问 那么只需要写出这个网站共有的域名即可 配置如下 acl qq dstdomain 注意 tcccent 前面的 正是它指出以此域名结尾的所有主机都不可访问 否则就只有 这一台主机不能访问 如果想禁止对某个 IP 地址的访问 如 202 118 2 182 可以用 dst 来控制 代 码如下 acl badaddr dst 202 118 2 182 当然 这个 dst 也可以是域名 由 Squid 查询 DNS 服务器将其转换为 IP 还有一种比较广泛的控制是文件类型 如果不希望普通用户通过代理服务器下 载 MP3 AVI 等文件 完全可以对他们进行限制 代码如下 acl mmxfile urlpath regex mp3 avi exe http access deny mmxfile 看到 regex 很多读者应该心领神会 因为这条语句使用了标准的规则表达式 又叫正则表达式 它将匹配所有以 mp3 avi 等结尾的 URL 请求 还可以 用 i 参数忽略大小写 例如以下代码 acl mmxfile urlpath regex i mp3 这样 无论是 mp3 还是 MP3 都会被拒绝 当然 i 参数适用于任何可能需要区 分大小写的地方 如前面的域名控制 如果想让普通用户只在上班时间可以上网 而且是每周的工作日 用 Squid 应 当如何处理呢 看看下面的 ACL 定义 acl worktime time MTWHF 8 30 12 00 14 00 18 00 http access deny worktime 首先定义允许上网的时间是每周工作日 星期一至星期五 的上午和下午的固 定时段 然后用 http access 定义所有不在这个时间段内的请求都是不允许的 或者为了保证高级用户的带宽 希望每个用户的并发连接不能太多 以免影响 他人 也可以通过 Squid 控制 代码如下 acl conncount maxconn 3 http access deny conncount normal http access allow normal 这样 普通用户在某个固定时刻只能同时发起三个连接 从第四个开始 连接 将被拒绝 总之 Squid 的 ACL 配置非常灵活 强大 更多的控制方式可以参考 squid conf default 编辑编辑 认证认证 用户 密码认证为 Squid 管理提供了更多便利 最常用的认证方式是 NCSA 从 Squid 2 5 版本开始 NCSA 认证包含在了 basic 中 而非以前单独的认证模块 下面来看看实现认证的具体操作 首先在编译时配置选项应包括以下配置 enable auth basic enable basic auth helpers NCSA make install 以后 需要将 helpers basic auth NCSA ncsa auth 拷贝 到用户可执行目录中 如 usr bin 如 果在该目录中找不到这个执行文件 在 编译时请使用 make all 而不是 make 或者直接在该目录中执行 make 然后 需要借助 Apache 的密码管理程序 htpasswd 来生成用户名 密码对应的文件 就 像 下面这行代码 htpasswd c var squid etc password guest 在输入两遍 guest 用户的密码后 一个 guest 用户就生成了 如果以后需要添 加用户 把上面的命令去掉 c 参数再运行即可 Squid 2 5 在认证处理上有了较大的改变 这里就只讨论 2 5 版本的处理方法 2 4 及以下版本请参考 squid conf default 在 2 5 版的 squid conf 中 包括 以下几个相关选项 该选项指出了认证方式 basic 需要的程序 ncsa auth 和对应的密码文件 password auth param basic program usr bin ncsa auth var squid etc password 指定认证程序的进程数 auth param basic children 5 浏览器显示输入用户 密码对话框时的领域内容 auth param basic realm My Proxy Caching Domain 基本的认证有效时间 auth param basic credentialsttl 2 hours 普通用户需要通过认证才能访问 Internet acl normal proxy auth REQUIRED http access allow normal 通过以上的配置即可完成认证工作 有的读者可能要问 认证只针对普通用户 而高级用户是直接上网的 该怎么处理呢 其实 这两种用户是可以共存的 如 前所述 Squid 是顺序处理 http access 的 所以在 http access 处理过程 中 如果先处理 normal 用户 那么当前用户无论是否属 于高级用户 都会被 要求进行认证 相反如果先处理高级用户 剩下的就只有需要认证的普通用户 了 例如以下配置代码 http access allow normal 需要认证 http access allow advance 不需要认证 不管是否为 noauth 用户 都要求进行用户名 密码验证 正确的方法是将二者 位置交换 代码如下 http access allow advance http access allow normal 这时 高级用户不会受到任何影响 编辑编辑 总结总结 下面把整个 squid c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论