Squid--传统代理
一、suqid的介绍
1.1、squid是什么?
Squid 是一个高性能的http代理服务器和web缓存服务器,可以很好的实现HTTP和FTP以及DNS查询、SSL等应用的缓存代理。
-
1、代理用户向web服务器请求数据并进行缓存,可以过滤流量帮助网络安全。
-
2、可以作为代理服务器链中的一环,向上级代理转发数据或直接连接互联网。
-
3、可以用在局域网中,使局域网用户通过代理上网。
-
4、可以将数据缓存在内存中,同时也缓存DNS查询的结果,还支持非模块化的DNS查询,对失败的请求进行消极缓存。
-
5、Squid支持SSL,支持ACL访问控制。
Web代理的工作机制
- 缓存网页对象,减少重复请求
1.2、squid的优势
- 1、提高客户端访问速度。
- 2、隐蔽内部主机的ip地址。
- 3、部署简单,可以实现访问控制。
1.3、squid的作用
- 1、代理上网 (传统代理,透明代理)
- 2、网站静态页面缓存加速(反向代理)
二、squid的代理类型
-
1、传统代理又叫做正向代理,适用于Internet,需明确指定服务端。
-
2、透明代理,客户机不需要指定代理服务器的地址和端口,而是通过默认路由、防火墙策略将Web访问重定向给代理服务器处理
-
3、反向代理
三、squid传统代理的部署
传统代理模式
- 客户端必须在自己的浏览器里指定服务器的ip地址和监听的端口号,才能通过squid代理服务器**上网。
3.1、 案例介绍
如上图所示,在服务器B上构建Squid代理服务器,允许客户机指定squid代理服务器作为Web代理,访问网站服务器,但禁止通过代理下载超过10MB的文件,超过4MB的文件不进行缓存。
- 环境介绍
主机 | 系统 | IP地址 | 主要软件 |
---|---|---|---|
squid代理服务器 | CentoS7.6 | 20.0.0.10 | squid-3.5.27.tar.gz |
WEB服务器 | CentoS7.6 | 20.0.0.20 | Apache |
客户机 | win10 | 20.0.0.30 | 自带的浏览器 |
先修改主机名,方便实验效果
[root@server1 ~]# hostnamectl set-hostname squid [root@server1 ~]# bash [root@squid ~]#
[root@server2 ~]# hostnamectl set-hostname web [root@server2 ~]# bash [root@web ~]#
3.2、部署过程
1、在squid服务器部署squid服务
1、解压squid的安装包 tar zxvf squid-3.4.6.tar.gz -C /opt/ cd /opt/squid-3.4.6/ #先安装编译包 yum -y install gcc gcc-c++ make pcre pcre-devel zlib-devel perl #配置编译 ./configure --prefix=/usr/local/squid \ ##自定义安装路径 --sysconfdir=/etc \ ##单独将配置文件修改到/etc目录下 --enable-arp-acl \ ##可在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、修改配置文件,编写脚本优化服务启动项
vim /etc/squid.conf //增添下句并注释deny http_access allow all #http_access deny all //在端口port下增添两行代码 http_port 3128 cache_effective_user squid cache_effective_group squid coredump_dir /usr/local/squid/var/cache/squid squid -k parse #检查配置文件语法 squid –k rec ##重新加载配置文件 squid -z #初始化缓存目录 squid #启动服务 netstat -ntap | grep 3128 #查看服务是否启动 //编写优化脚本 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 #设置为开机自启动 service squid stop service squid start netstat -ntap | grep 3128
3、配置squid传统模式
vim /etc/squid.conf http_port 3128 cache_mem 64 MB #内存空间大小 reply_body_max_size 10 MB #允许下载最大文件大小 maximum_object_size 4096 KB #允许保存缓存的空间最大对象大小 http_access deny all #前面两行需要放在这行之上才生效 iptables -F #清空防火墙规则 iptables -t nat -F iptables -I INPUT -p tcp --dport 3218 -j ACCEPT #-I:插入input链 -p:协议 允许3128端口访问外网的WEB服务器 //重新加载squid服务 service squid reload netstat -ntap | grep 3128
4、配置web服务器
[root@Web ~]# systemctl stop firewalld [root@Web ~]# setenforce 0 [root@Web ~]# yum -y install httpd
5、验证
看客户机能否成功访问Apache首页
查看日志,还是客户自身的IP
设置Squid代理,查看来访IP变化
1、先清除浏览器缓存
2、在浏览器中设置代理
再次访问后查看日志
成功变成代理ip