Squid传统代理 + 透明代理

squid代理概述

Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
流程示意图↓
在这里插入图片描述

  1. 存网页对象,减少重复请求
  2. 它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求
  3. 也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如:http://squid.nlanr.net/)并向这个页面发出请求
  4. Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。

squid常见的类型

传统代理
普通的代理服务,适用于Internet,需明确指定服务端

透明代理
客户机不需要指定代理服务器的地址和端口,是通过默认路由,防火墙将web重定向给代理

使用代理可以提高web的访问速度,同时可以隐藏客户机的真实IP地址,从而起到一定的保护作用
另一方面,squid也可以针对要访问的目标、客户机的地址、访问的时间段进行过滤控制。

来吧!展示!!

传统代理实验

实验描述
squid服务器IP:20.0.0.11
web 服务器IP:20.0.0.3
访问测试客户机:20.0.0.101

在 squid 服务器上部署服务

[root@localhost bao]# ls
squid-3.4.6.tar.gz
[root@localhost bao]# tar zxvf squid-3.4.6.tar.gz
[root@localhost squid-3.4.6]# yum -y install \   ##安装C语言环境
> gcc gcc-c++ 
[root@localhost squid-3.4.6]# ./configure \
> --prefix=/usr/local/squid \    ##安装路径
> --sysconfdir=/etc \			 ##配制文件路径
> --enable-arp-acl \			 ##支持ACL访问控制列表
> --enable-linux-netfilter \	 ##支持网络筛选
> --enable-linux-tproxy \		 ##支持透明模式
> --enable-async-io=100 \		 ##I/O优化
> --enable-err-language="Simplify_Chinses" \  ##以中文显示报错信息
> --enable-underscore \			 ##支持带有下划线
> --enable-poll \				 ##开启 poll ,优化性能
> --enable-gnuregex				 ##支持正则
[root@localhost squid-3.4.6]# make && make install
[root@localhost squid-3.4.6]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/   ##创建软连接,方便用户使用
[root@localhost squid-3.4.6]# useradd -M -s /sbin/nologin squid
[root@localhost squid-3.4.6]# chown -R squid:squid /usr/local/squid/var/

优化服务

[root@localhost squid-3.4.6]# cd /etc/   ##刚安装时设置在 /etc下的配置文件
[root@localhost etc]# ll |grep squid
-rw-r--r--.  1 root root     2347 9月   6 11:05 squid.conf
-rw-r--r--.  1 root root     2347 9月   6 11:05 squid.conf.default
-rw-r--r--.  1 root root   281814 9月   6 11:05 squid.conf.documented
[root@localhost etc]# vim squid.conf
56 http_access allow all   ##把deny 改成 allow

58 # Squid normally listens to port 3128  ##默认端口 3128
59 http_port 3128
60 cache_effective_user squid    ##添加用户
61 cache_effective_group squid   ##添加组
[root@localhost etc]# squid -k parse  ##检查语法
[root@localhost etc]# squid -z  ##初始化缓存目录
[root@localhost etc]# 2020/09/06 11:20:54 kid1| Set Current Directory to /usr/local/squid/var/cache/squid
2020/09/06 11:20:54 kid1| Creating missing swap directories
2020/09/06 11:20:54 kid1| No cache_dir stores are configured.
##kao!这边要自己回车,我等了好久,以为报错了!!!
[root@localhost etc]# 
[root@localhost etc]# squid   ##启动服务
[root@localhost etc]# netstat -ntap |grep 3128
tcp6       0      0 :::3128                 :::*                    LISTEN      106428/(squid-1)  

将 squid 添加到 service 管理

[root@localhost etc]# vim /etc/init.d/squid
#!/bin/bash
#chkconfig: 2345 90 25  ##启动级别
PID="/usr/local/squid/var/run/squid.pid"   ##PID文件进程号
CONF="/etc/squid.conf"   ##主配置文件
CMD="/usr/local/squid/sbin/squid"   ##启动命令

case "$1" in
start)
                netstat -ntap | grep squid &> /dev/null
                if [ $? -eq 0 ]
                then 
                 echo "squid is running"
                 else
                 echo "正在启动 squid...." 
                 $CMD
                fi
                ;;
stop)
                $CMD -k kill &> /dev/null   ##关闭squid
                rm -rf $PID &> /dev/null   ##删除PID文件
                ;;
status)1
                [ -f $PID ] &> /dev/null
                 if [ $? -eq 0 ]
                                then
                                 netstat -ntap | 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|reload|status|check|restart}"
                ;;
esac
[root@localhost etc]# chmod +x /etc/init.d/squid    ##加权
[root@localhost etc]# chkconfig --add squid 		##添加
[root@localhost etc]# chkconfig --level 35 squid on ##设置 3 5 自启

配置传统代理

[root@localhost etc]# vim /etc/squid.conf
# Squid normally listens to port 3128
http_port 3128
cache_effective_user squid
cache_effective_group squid		##在下面添加
cache_mem 64 MB    ##缓存空间大小 64 M
reply_body_max_size 10 MB	##允许下载最大文件的大小,若为0,则不限制
maximum_object_size 4096 KB		##允许保存到缓存空间的最大对象的大小,以KB为单位,超过限制不会缓存,直接转到web端
[root@localhost etc]# service squid stop
[root@localhost etc]# netstat -ntap |grep 3128
[root@localhost etc]# service squid start
[root@localhost etc]# iptables -F
[root@localhost etc]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT  增加规则,方通 3128 端口
[root@localhost etc]# setenforce 0

配置 WEB 服务器

[root@web01 ~]# yum -y install httpd
[root@web01 ~]# setenforce 0
[root@web01 ~]# systemctl stop firewalld
[root@web01 ~]# systemctl start httpd

在客户端设置 Squit 的代理
打开 IE 浏览器,根据以下步骤设置
在这里插入图片描述
在这里插入图片描述在这里插入图片描述使用客户端访问web 20.0.0.3

在这里插入图片描述
从WEB01 服务器查看日志

[root@web01 ~]# cd /var/log/httpd/
[root@web01 httpd]# ls
access_log  error_log
[root@web01 httpd]# cat access_log 
##查看到访问IP为squid的IP
20.0.0.11 - - [06/Sep/2020:13:57:31 +0800] "GET /noindex/css/fonts/Light/OpenSans-Light.ttf HTTP/1.1" 404 240 "http://20.0.0.3/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363"
20.0.0.11 - - [06/Sep/2020:13:57:31 +0800] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363"

传统代理实验结束,功能成功

透明代理实验

根据上面的 IP 地址来
squid服务器新增一块网卡,IP地址为 192.168.10.10,放进 LAN区段1
访问测试机器IP地址改为 192.168.10.20,系统关闭代理设置,放进 LAN区段1,网关设置成 192.168.10.10
在这里插入图片描述

[root@localhost etc]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens37
[root@localhost network-scripts]# vim ifcfg-ens37
NAME=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=192.168.10.10
PREFIX=24
GATEWAY=192.168.10.10
DNS1=114.114.114.114
[root@localhost network-scripts]# systemctl restart network

设置 squid 服务器

[root@localhost network-scripts]# vim /etc/sysctl.conf   ##路由转发设置
net.ipv4.ip_forward=1
[root@localhost network-scripts]# sysctl -p
net.ipv4.ip_forward = 1

修改主配置文件

[root@localhost network-scripts]# vim /etc/squid.conf
 58 # Squid normally listens to port 3128
 59 http_port 192.168.10.10:3128 transparent  ##改这行
 60 cache_effective_user squid
 61 cache_effective_group squid
 62 cache_mem 64 MB
[root@localhost network-scripts]# iptables -F
[root@localhost network-scripts]# iptables -t nat -F
[root@localhost network-scripts]# iptables -t nat -I PREROUTING -i ens37 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
[root@localhost network-scripts]# iptables -t nat -I PREROUTING -i ens37 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128
[root@localhost network-scripts]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT

在 WEB 服务器上设置

[root@localhost ~]# route add -net 192.168.10.0/24 gw 20.0.0.11
[root@localhost ~]# ping 192.168.10.20
PING 192.168.10.20 (192.168.10.20) 56(84) bytes of data.
64 bytes from 192.168.10.20: icmp_seq=1 ttl=127 time=0.793 ms
64 bytes from 192.168.10.20: icmp_seq=2 ttl=127 time=0.434 ms
^C
--- 192.168.10.20 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.434/0.613/0.793/0.181 ms

实验验证
在这里插入图片描述
在apache上查看日志

[root@localhost ~]# cat /var/log/httpd/access_log 
20.0.0.11 - - [06/Sep/2020:15:08:55 +0800] "GET /noindex/css/fonts/Light/OpenSans-Light.ttf HTTP/1.1" 404 240 "http://20.0.0.3/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363"
20.0.0.11 - - [06/Sep/2020:15:08:55 +0800] "GET /noindex/css/fonts/Bold/OpenSans-Bold.ttf HTTP/1.1" 404 238 "http://20.0.0.3/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18363"

实验完成

猜你喜欢

转载自blog.csdn.net/Ora_G/article/details/108428918