前言
一:Squid代理服务概述
1.1:概述
- Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
1.2:工作机制
-
-
缓存网页对象,减少重复请求
-
它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求
-
也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如:http://squid.nlanr.net/)并向这个页面发出请求
-
然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。
1.3:Squid基本类型
- 传统代理
- 普通的代理服务,适用于Internet,需明确指定服务端
- 透明代理
- 客户机不需要指定代理服务器的地址和端口,是通过默认路由,防火墙将web重定向给代理
- 使用代理可以提高web的访问速度,同时可以隐藏客户机的真实IP地址,从而起到一定的保护作用
- 另一方面,squid也可以针对要访问的目标、客户机的地址、访问的时间段进行过滤控制。
二:环境
- VMware软件
- 一台centos7虚拟机作为squid服务器,IP地址为:192.168.100.140
- 一台centos7虚拟机作为web服务器,IP地址为:192.168.100.150
- 一台win10虚拟机作为client测试机,IP地址为:192.168.100.10
三:传统代理试验过程
-
Squid服务器配置
1.解压squid软件包 monut.cifs //192.168.1.150/qq-Download /mnt cd /mnt tar xzvf squid-3.4.6.tar.gz -C /opt 2.安装相关软件包 yum install gcc gcc-c++ make -y 3.配置服务模块,编译安装 cd /opt/suqid-3.4.6/ ./configure \ --prefix=/usr/local/squid \ --sysconfdir=/etc --enable-arp-acl \ --enable-linux-netfilter \ --enable-linux-tproxy \ --enable-async-io=100 \ --enable-err-language="Simplify_Chinese" \ --enable-underscore \ --enable-poll \ --enable-gnuregex make && make install 4.创建软链接,优化服务控制方式 ln -s /usr/local/squid/sbin/squid /usr/local/sbin/ 5.创建squid用户 useradd -M -s /sbin/nologin squid 6.修改squid中的var的属性 chowm -R squid.squid /usr/local/squid/var/ 7.编辑squid的配置文件 vim /etc/squid.conf 55 # And finally deny all other access to this proxy 56 http_access allow all 57 http_access deny all //允许所有用户访问 58 59 # Squid normally listens to port 3128 60 http_port 3128 61 cache_mem 64 MB //指定缓存功能所使用的内存空间大小 62 reply_body_max_size 10 MB //允许用户下载的最大文件大小 63 maximum_object_size 4096 KB //允许保存到缓存空间的最大对象大小 64 cache_effective_user squid //添加指定程序用户 65 cache_effective_group squid //添加指定账户基本组 66 67 # Uncomment and adjust the following to add a disk cache directory. 68 #cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256 8.编辑防火墙规则 iptables -F //清除所有规则 iptables -I INPUT -p tcp --dport 3128 -j ACCEPT //允许目标端口3128做转发 9.检查语法并且开启服务 squid -k parse //检查配置文件语法 squid -z //初始化缓存目录 squid //启动服务 [root@squid ~]# netstat -natp | grep squid tcp6 0 0 :::3128 :::* LISTEN 36414/(squid-1) [root@squid ~]# 10.编辑脚本,优化服务控制方式(service 工具) vim /etc/init.d/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...." echo "成功启动" $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..." echo "关闭成功" $0 start &> /dev/null echo "正在启动 squid..." echo "启动成功" ;; reload) $CMD -k reconfigure ;; check) $CMD -k parse ;; *) echo "用法:$0{start|stop|status|reload|check|restart}" ;; esac chmod +x /etc/init.d/squid //添加服务执行权限 chkconfig --add squid //添加到service的服务列表 chkconfig --level 35 squid on //开机自启 [root@localhost ~]# service squid restart 正在关闭 squid... 关闭成功 正在启动 squid... 启动成功 [root@localhost ~]#
-
Web服务器配置
[root@apache ~]# yum install httpd -y [root@apache ~]# systemctl stop firewalld.service [root@apache ~]# setenforce 0 [root@apache ~]# systemctl start httpd.service [root@apache ~]# netstat -natp | grep 80
-
客户机Win10的配置
配置地址192.168.100.10 网关192.168.100.2
-
浏览器访问Web服务器测试
这里看不出来,到底是代理访问的Apache还是客户端访问的,我们要看Apache的日志
[root@apache ~]# cat /var/log/httpd/access_log
日志显示是代理来访问的Web服务器
那么问题来了,客户机要选择代理,若是客户不会操作的,由此,产生Squid透明模式,下文介绍如何搭建
四:透明代理实验过程
-
网络拓扑图
-
实验环境
类别 IP地址 系统 软件包 squid服务器 ens33:192.168.100.140/24;ens36:192.168.10.1/24 centos7 squid-3.4.6.tar.gz web服务器 192.168.100.150 centos7 客户机 192.168.10.10 win10 -
配置squid服务器
1.配置网卡 ens33为NAT模式 ens36为仅主机模式 cd /etc/sysconfig/network-scripts/ cp -p ifcfg-ens33 ifcfg-ens36 vim ifcfg-ens36 TYPE="Ethernet" PROXY_METHOD="none" BROWSER_ONLY="no" BOOTPROTO="none" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" IPV6_ADDR_GEN_MODE="stable-privacy" NAME="ens36" DEVICE="ens36" ONBOOT="yes" IPADDR="192.168.10.1" '这个地址是客户机的网关' PREFIX="24" IPV6_PRIVACY="no" ~ service network restart [root@squid network-scripts]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.100.140 netmask 255.255.255.0 broadcast 192.168.100.255 inet6 fe80::7264:7578:de4e:190 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:17:9c:75 txqueuelen 1000 (Ethernet) RX packets 96630 bytes 110402508 (105.2 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 94922 bytes 172796714 (164.7 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.10.1 netmask 255.255.255.0 broadcast 192.168.10.255 ...... [root@squid ~]# 2.配置路由转发功能 vim /etc/sysctl.conf net.ipv4.ip_forward=1 sysctl -p '使其生效' 3.配置squid文件 vim /etc/squid.conf 59 # Squid normally listens to port 3128 60 http_port 192.168.10.1:3128 transparent 配置网卡网关地址及端口 service squid restart 4.添加防火墙规则 iptables -F //清空规则 iptables -t nat -F iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128 iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128 iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
-
配置web服务器
yum install httpd -y route add -net 192.168.10.0/24 gw 192.168.100.140 //添加静态路由 下一跳 systemctl stop firewalld.service setenforce 0
-
配置客户端,虚拟机处于仅主机模式
-
验证服务配置
查看Web服务日志
注意: 在web服务器中,添加到路由表的静态路由有时间限制