缓存代理概述:
作为应用层的代理服务软件, squid 主要提供缓存加速和应用层过滤控制的功能.
代理的基本类型:
传统代理: 也就是普通的代理服务, 首先必须在客户机的浏览器, 聊天工具, 下载软件等程序中手动设置代理服务器的地址和端口, 然后才能使用代理服务来访问网络. 对于网页浏览器, 访问网站时的域名解析请求也会发送给指定的代理服务器.
透明代理: 提供与传统代理相同的功能和服务, 其区别在于客户端不需要指定代理服务器的地址和端口, 而是通过默认路由, 防火墙策略将 web 访问重定向, 实际上仍然交给代理服务器来处理. 重定向的过程对客户机来说是 "透明" 的, 用户甚至不知道自己在使用代理服务, 所以称为 "透明代理".
实验环境表:
安装及运行控制
1. 编译安装 Squid
配置 Squid 的编译选项时, 将安装目录设置为 / usr/local/squid, 其他具体选项根据实际需要来确定, 配置前可参考./configure --help 给出的说明.
- tar zxvf squid-3.4.6.tar.gz -C /opt/
- cd /opt/squid-3.4.6
- ./configure --prefix=/usr/local/squid \ #安装目录
- --sysconfdir=/etc \ #单独将配置文件修改到其他目录
- --enable-arp-acl \ #直接通过客户端 MAC 进行管理, 防止客户端使用 IP 欺骗
- --enable-linux-netfilter \ #使用内核过滤
- --enable-linux-tproxy \ #支持透明模式
- --enable-async-io=100 \ #异步 I/O, 提升存储性能.
- --enable-err-language="Simplify_Chinese" \ #错误信息的显示语言
- --enable-underscore \ #允许 URL 中有下划线
- --enable-poll \ #使用 poll() 模式, 提升性能.
- --enable-gnuregex #使用 GNU 正则表达式
- make && make install
安装完成后, 创建链接文件, 创建用户和组.
- ln -s /usr/local/squid/sbin/*/usr/local/sbin/
- useradd -M -s /sbin/nologin squid
- chown -R squid.squid /usr/local/squid/var/
2.squid 的配置文件
squid 服务的配置文件位于 / etc/squid.conf, 充分了解配置行的作用将有助于管理员根据实际情况灵活地配置代理服务.
- vim /etc/squid.conf
- http_port 3128 #用来指定代理服务监听的地址和端口 (默认端口号为 3128)
- cache_effective_user squid #添加 指定程序用户
- cache_effective_group squid #添加 指定账号基本组
3.squid 运行控制
(1) 检查配置文件的语法是否正确
squid -k parse
(2) 启动, 停止 squid
第一次启动 squid 服务时, 会自动初始化缓存目录. 在没有可用的 squid 服务器脚本的情况下, 也可以直接调用 squid 程序来启动服务, 这时需要先进行初始化.
- squid -z // 初始化缓存目录
- squid // 启动服务
(3) 使用 squid 服务脚本
为了使 squid 服务的启动, 停止, 重载等操作更加方便, 可以编写 squid 服务脚本, 并使用 chkconfig 和 service 工具来进行管理.
- cd /etc/init.d/
- vim squid
- #!/bin/bash
- #chkconfig: 2345 90 25
- PID="/usr/local/squid/var/run/squid.pid"
- CONF="/etc/squid.conf"
- CMD="/usr/local/squid/sbin/squid"
- case "$1" in
- start)
- netstat -natp | grep squid &> /dev/null
- if [ $? -eq 0 ]
- then
- echo "squid is running"
- else
- echo "正在启动 squid..."
- $CMD
- fi
- ;;
- stop)
- $CMD -k kill &> /dev/null
- rm -rf $PID &> /dev/null
- ;;
- status)
- [ -f $PID ] &> /dev/null
- if [ $? -eq 0 ]
- then
- netstat -natp | grep squid
- else
- echo "squid is not running"
- fi
- ;;
- restart)
- $0 stop &> /dev/null
- echo "正在关闭 squid..."
- $0 start &> /dev/null
- echo "正在启动 squid..."
- ;;
- reload)
- $CMD -k reconfigure
- ;;
- check)
- $CMD -k parse
- ;;
- *)
- echo "用法:$0{start|stop|status|reload|check|restart}"
- ;;
- esac
- chmod +x squid
- chkconfig --add squid #添加为系统服务
- chkconfig --level 35 squid on
传统代理
1.squid 服务器的配置
配置 squid 实现传统代理服务时, 需要注意添加 http_access allowall 访问策略, 以便允许任意客户机使用代理服务.
1) 修改 squid.conf 配置文件
- [root@localhost init.d]# vim /etc/squid.conf
- http_access allow all
- http_access deny all
- http_port 3128
- cache_mem 64 MB #指定缓存功能所使用的内存空间大小, 便于保持访问较频繁的 WEB 对象, 容量最好为 4 的倍数, 单位为 MB, 建议设为物理内存的 1/4
- reply_body_max_size 10 MB #允许用户下载的最大文件大小, 以字节为单位. 默认设置 0 表示不进行限制
- maximum_object_size 4096 KB #允许保存到缓存空间的最大对象大小, 以 KB 为单位, 超过大小限制的文件将不被缓存, 而是直接转发给用户
2) 在防火墙上添加允许策略:
- [root@localhost init.d]# iptables -F
- [root@localhost init.d]# setenforce 0
- [root@localhost init.d]# iptables -I INPUT -p tcp --dport 3218 -j ACCEPT
- [root@localhost init.d]# service squid reload #重新加载
2. 客户机的代理配置
在 Windows 系统中开启浏览器
Internet 选项 ---连接 ----局域网设置 ----ip:squid 服务器地址 端口: 3128
地址栏输入 web 服务器地址.
3. 代理服务器的验证
在客户机中通过浏览器访问目标 Web 服务器网站 http://192.168.126.178/, 然后观察 squid 代理服务器, Web 服务器的访问日志, 以验证代理服务是否发挥作用.
1) 查看 squid 访问日志的新增记录
在 squid 代理服务器中, 通过跟踪 squid 服务的访问日志文件, 应该能够发现客户机 192.168.126.177 访问网站服务器 192.168.126.178 的记录.
- [root@localhost init.d]# tail /usr/local/squid/var/logs/access.log
- 1532758490.972 5 192.168.126.177 TCP_MISS/404 512 GET http://192.168.126.178/noindex/CSS/fonts/Light/OpenSans-Light.eot? - HIER_DIRECT/192.168.126.178 text/html
- 1532758490.974 5 192.168.126.177 TCP_MISS/404 524 GET http://192.168.126.178/noindex/css/fonts/LightItalic/OpenSans-LightItalic.eot? - HIER_DIRECT/192.168.126.178 text/html
2) 查看 Web 访问日志的新增记录
在被访问的 Web 服务器中, 通过跟踪 httpd 服务器的访问日志文件, 应该能够发现来在代理服务器 192.168.126.138 的访问记录. 说明当前客户机使用代理后, Web 服务器并不知道客户机的真实地址, 实际上是由代理服务器在替它访问.
- [root@localhost ~]# cd /etc/httpd/logs/
- [root@localhost logs]# ls
- access_log error_log
- [root@localhost logs]# cat access_log
- 192.168.126.138 - - [28/Jul/2018:14:14:50 +0800] "GET / HTTP/1.1" 403 4897 "-" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)" //
透明代理
1. 配置 Squid 支持透明代理
1) 在 squid 代理服务器上添加双网卡, 分别是内网地址 192.168.100.1 和外网地址 12.0.0.1.Web 服务器地址改为 12.0.0.12 外网地址, 客户端地址改为 192.168.100.100 内网地址.
- [root@localhost network-scripts]# ifconfig
- ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 #内网地址
- inet 192.168.100.1 netmask 255.255.255.0 broadcast 192.168.100.255
- ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 #外网地址
- inet 12.0.0.1 netmask 255.255.255.0 broadcast 12.0.0.255
2) 修改 squid 的配置文件, 在 http_port 配置上加上 transparent(透明) 选项, 就可以支持透明代理了.
- [root@localhost network-scripts]# vim /etc/squid.conf
- http_port 192.168.100.1:3128 transparent #只在其中一个 IP 地址上提供服务
- [root@localhost network-scripts]# service squid reload
2. 设置 iptables 的重定向策略
防火墙做重定向操作, 将访问本机 80,443 端口的请求重定向到 3128 端口
- [root@localhost network-scripts]# iptables -F
- [root@localhost network-scripts]# iptables -F -t nat #清除防火墙规则
- [root@localhost network-scripts]# iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
- [root@localhost network-scripts]# iptables -t nat -I PREROUTING -i ens33 -s 192.168.100.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
- [root@localhost network-scripts]# iptables -I INPUT -p tcp --dport 3218 -j ACCEPT
3. 验证透明代理
在客户机 192.168.100.100 中通过浏览器访问目标网站 http://12.0.0.12/, 然后观察 squid 代理服务器, Web 服务器的访问日志, 以验证透明代理是否发挥作用.
squid 代理服务器的访问日志:
- [root@localhost network-scripts]# tail /usr/local/squid/var/logs/access.log
- 1532761302.140 3 192.168.100.100 TCP_MISS/404 512 GET http://12.0.0.12/noindex/css/fonts/Light/OpenSans-Light.eot? - ORIGINAL_DST/12.0.0.12 text/html
- 1532761302.143 2 192.168.100.100 TCP_MISS/404 524 GET http://12.0.0.12/noindex/css/fonts/LightItalic/OpenSans-LightItalic.eot? - ORIGINAL_DST/12.0.0.12 text/html
- 1532761302.146 2 192.168.100.100 TCP_MISS/404 516 GET http://12.0.0.12/noindex/css/fonts/Regular/OpenSans-Regular.eot? - ORIGINAL_DST/12.0.0.12 text/html
Web 服务器的访问日志:
- [root@localhost ~]# cd /var/log/httpd/
- [root@localhost httpd]# vim access_log
- 12.0.0.1 - - [28/Jul/2018:15:06:43 +0800] "GET /noindex/css/fonts/ExtraBold/OpenSans-ExtraBold.eot? HTTP/1.1" 404 248 "http://12.0.0.12/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)"
- 12.0.0.1 - - [28/Jul/2018:15:06:43 +0800] "GET /noindex/css/fonts/ExtraBoldItalic/OpenSans-ExtraBoldItalic.eot? HTTP/1.1" 404 260 "http://12.0.0.12/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)"
代理成功
来源: http://blog.51cto.com/13642258/2151655