CentOS-7.2 部署 Squid 服务
![CentOS-7.2部署Squid服务](https://static001.geekbang.org/infoq/5d/5d82dfef9b607254a2c2db6d5dc095ab.png)
一、安装 Squid 代理服务器
![](https://static001.geekbang.org/infoq/48/4803ec2366f1f474d77518b71be8386a.png)
1、启动 Squid 服务和设置开机启动
![](https://static001.geekbang.org/infoq/e9/e9cb6421fc7eb08ab8ff6df5e4f5e94c.png)
2、详解 Squid 服务器配置文件
默认的/etc/squid/squid.conf 文件内容和文件结构如下,该文件由访问控制列表、参数设置和刷新模式三部分组成,更详细的内容可以参考**/usr/share/doc/squid-*/squid.conf.documented 模板文件**
3、介绍/etc/squid/squid.conf 文件中可添加和修改的主要参数,以下内容为添加、修改内容,
仅作为参考,不作为修改内容,此处仅作介绍,可直接跳过此步骤
1)网络设置 #vi /etc/squid/squid.conf
![](https://static001.geekbang.org/infoq/3a/3aaf3b4ac21349549f953c7ce89a5c25.png)
第 59 行
![](https://static001.geekbang.org/infoq/0f/0f000fbbb1112a9fecbc8c8668a6bfb8.png)
添加如下内容:icp_port 3130 //设置 Squid 发送/接受 ICP 查询时使用的端口 htcp_port 4827 //设置 Squid 发送/接收 HTCP 查询时使用的端口
![](https://static001.geekbang.org/infoq/57/578ac4eba753af9e3da1c551795047eb.png)
2)临近代理设置 cache_peer 192.168.100.20 parent 3128 3130 no-digest no-netdb-exchange //表示指定其他代理服务器,192.168.100.20 为上层服务器,http_port 为 3128,icp_port 为 3130,不发出建立摘要表的请求,不交换管理信息
cache_peer_access example.com allow aclcom //表示用不通的代理服务器获取特定的目标资源,使用 example.com 服务器去访问 aclcom 中定义的目标主机资源,这里的 aclcom 为用户自定义的 ACL 名称
![](https://static001.geekbang.org/infoq/a0/a0258a042ca3fe55ab6da9261988bb9b.png)
3)缓存设置 cache_mem 256 MB //设置缓存区大小,一般为实际内存的 1/3。
cache_dir ufs /var/spool/squid 100 16 256 //设置磁盘缓存目录和大小,ufs 表示缓存格式,/var/spool/squid 表示目录缓存,100 表示磁盘缓存容量 100MB,16 表示最大 16 个二级子目录,256 表示每个二级子目录最大有 256 个三级子目录
cache_swap_high 95 //设置最高缓存百分比,当实际缓存超过 cache_swap_hig 设置的百分比时,服务器会开始删除缓存直到百分比下降到 cache_swap_low 的设定值
cache_swap_low 90 //设置最高缓存百分比,当实际缓存超过 cache_swap_hig 设置的百分比时,服务器会开始删除缓存数据,直至容量达到 cache_mem 容量的 90%
maxi mum_object_size 4096 KB //设置能缓存的最大单个文件的大小
maximum_object_size_in_memory 8 KB //在内存中单个文件最大缓存大小,超过这个大小将不缓存到内存中
ipcache_size 1024 //设置 IP 地址的最大缓存大小
fqdncache_size 1024 //设置完全合格的域名的最大缓存大小
![](https://static001.geekbang.org/infoq/9c/9c5e4e91df67ccf5e33b3ef370cc3155.png)
4)日志文件名设置 cache_log /var/log/squid/cache.log //设置缓存日志文件路径,它记录服务器启动,关闭以及系统相关信息
cache_store_log /var/log/squid/store.log //网页缓存日志文件路径,记录了网页在缓存中的调用情况
access_log /var/log/squid/access.log //设置访问日志文件路径,记录了用户访问 Internet 的详细信息,可以查看每个用户的上网记录,格式由 logformat 参数指定
pid_filename /var/run/squid.pid //设置将 squid 的进程号记录在哪个文件中
![](https://static001.geekbang.org/infoq/b7/b76adc698ac49abbb329ade3aa41385f.png)
5)认证设置 auth_param basic children 5 //设置鉴权程序的进程数
auth_param basic realm Squid proxy-caching web server //定义 Web 浏览器显示认证对话框时的领域名称,即用户输入用户名密码时看到的提示信息
auth_param basic credentialsttl 2 hours //用户通过认证后的有效时间,超出则必须重新认证
auth_param basic casesensitive off //用户名是否需要匹配大小
acl ncsa_users proxy_auth REQUIRED //所有成功鉴权的用户都归于 ncsa_users 组。
http_access allow nsca_uesrs //允许 ncsa_users 组的用户使用 Proxy
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/squid_passwd //指定密码文件和用来验证密码的程序
![](https://static001.geekbang.org/infoq/6e/6e1c441eaddff683a3027a99d64d41a1.png)
6)禁止缓存 hierarchy_stoplist cgi-bin ? //出现 cgi-bin 或者?的 URL 不予缓存
hierarchy_stoplist -i ^https://?acl QYERY urlpath_regex -i cgi-bin /? /.asp /.php /.jsp /.cgiacl denyssl urlpath_regex -i ^https://no_cache deny QUERYno_cache deny denyssl 以上几条设置遇到 URL 中包换有 cgi-bin 和以 https://开头的都不要缓存,asp\cgi\php\等动态脚本也不要缓存,。https://开头的不缓存是因为一般我们进行电子商务交易,例如银行付款等都是采用这个,如果把信用卡号等进行缓存是十分危险的!
![](https://static001.geekbang.org/infoq/f7/f7efd122fa6059f5704298d86f4c8dc8.png)
7)超时设置 connect_timeout 1 minute //设置连接超时时间 peer_connect_timeout 30 seconds //设置与上层服务器之间的连接超市时间。request_timeout 5 minutes //设置建立连接后请求的超时时间 persistent_request_timeout 1 minute //设置持续请求的超时时间
![](https://static001.geekbang.org/infoq/99/99bc0e19a70991f3764b320eb4e4474f.png)
4、详解 Squid 访问控制列表(ACL)1)内容格式 Squid 服务支持访问控制,可以控制客户是否能够连接,以及连接后可以使用的资源,使用 acl 命令对不通性质的客户进行分类赋予名称,然后使用 http_access 命令对某一类客户实施允许还是拒绝的操作,下面给出 Squid 访问控制列表的内容格式,其中类型如下表 1 所示,时间表示方法如表 2 所示,匹配模式如表 3 所示,参数-i 使 Squid 不区分大小写:acl ACL 名称 ACL 类型 [-i] 值|文件 http_access allow|deny ACL 名称
![](https://static001.geekbang.org/infoq/f1/f11c072eb9b2b948557cfeab63cb0665.png)
![](https://static001.geekbang.org/infoq/d2/d2c4dd3017542e62153a9e35a9a6b583.png)
![](https://static001.geekbang.org/infoq/34/3451c2c33d137d9a6a99c903027f2c6c.png)
二、配置正向代理服务器
1、Squid 服务器与客户端网卡设置
![](https://static001.geekbang.org/infoq/82/8279644efae16d3d687d096e78041171.png)
2、规划代理服务器参数
项目要求:在公司内部配置一台 Squid 服务器,为公司网络内的用户提供代理上网服务,具体参数如下表所示
![](https://static001.geekbang.org/infoq/f9/f9c8c98135385f0fb058f547ae07a1ed.png)
1、编辑服务器配置文件
修改以添加如下内容:修改并添加添加 acl 规则,允许 192.168.100.0/24 访问,并将 192.168.0.0/16 这行注释掉
![](https://static001.geekbang.org/infoq/cd/cd6ca98df0d83fb25ef65a57d67ffa62.png)
![](https://static001.geekbang.org/infoq/bc/bc6f0c83a1a704aa694613d0f112fccd.png)
2、重启 squid 服务器
![](https://static001.geekbang.org/infoq/03/037b9a5c321ef19f49a54232ab1788d0.png)
3、打开内核转发功能
编辑文件/etc/sysctl.conf,添加如下内容
![](https://static001.geekbang.org/infoq/8f/8fab35339646bba76f5d481bd3edea36.png)
生效配置
![](https://static001.geekbang.org/infoq/34/34c45c00af69421ff8af083f3406f15d.png)
4、本机测试 Squid 服务
![](https://static001.geekbang.org/infoq/2d/2da92a796ae241a4de7b38465e233a95.png)
停止 squid 服务再次测试
![](https://static001.geekbang.org/infoq/78/7881e6228bb302922eb2b1ccfb69aae5.png)
5、配置 Squid 客户端
1)标准正向代理当 Squid 服务程序顺利启动后,默认即可使用标准正向代理模式,在此模式下,Windows 客户端只需设置 IP 地址和子网掩码即可,网关和 DNS 可不设置。在 Win7 中打开浏览器,依次单击”工具”,”Internet 选项”,在“Internet 选项”对话框中单击,“连接”,“局域网设置”,“局域网设置”对话框,填写 Squid 服务器的 IP 地址和端口号,然后尝试访问互联网网站
先确保您的 Squid 服务已重新启动
设置 Win7 的 VM1 的 IP 地址
![](https://static001.geekbang.org/infoq/fc/fcbce00d9909b9064d27487b7f704b8e.png)
![](https://static001.geekbang.org/infoq/57/572e782afc9b839e2a022a035bb5180f.png)
![](https://static001.geekbang.org/infoq/4d/4d34689c96da58235a23077e609d20f6.png)
2)透明正向代理(此处仅作介绍,并不演示)Linux 网关提供透明代理服务,局域网可以通过透明代理访问 Internet 中的网站,在使用透明正向代理服务器时,无需在修改客户端的浏览器选项,但必须将客户端的网关 IP 指向 Squid 服务器,可不设置 DNS,然后尝试访问互联网网站,会发现失败,无法解析目标主机域名,原来 Squid 服务程序是不支持 DNS 解析代理的,这个就需要配置 SNAT
版权声明: 本文为 InfoQ 作者【指剑】的原创文章。
原文链接:【http://xie.infoq.cn/article/4ec101ec4cfae5031e0fc01c5】。文章转载请联系作者。
评论