squid代理服务器
Posted 阳光小王子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了squid代理服务器相关的知识,希望对你有一定的参考价值。
squid代理服务器
一:squid代理服务器概述
1.1:squid简介
- squid是一个支持http、https、ftp等服务的web缓存代理软件,通过缓存页面实现降低宽带占用提高页面响应时间。
- 另外,squid提供访问控制,squid的缓存页面存放在内存和硬盘中,在选择服务器时候内存和硬盘要求高,对于数据过期更新,需要不定期的清理缓存的数据。
1.2:squid代理请求流程
- 客户端访问squid代理服务器
- 代理服务器代表客户端访问后端真实服务器
- 真实服务器把数据返回给squid代理服务器
- 代理服务器吧响应数据发送给客户端,并把页面缓存在本地的内存及磁盘中
- 客户端再次请求相同数据是,代理服务器直接将缓存的数据返回给客户端
1.3:squid代理服务类型
- 正向代理:主要应用于内部网络访问外部网络时缓存页面数据,提供统一网络接口连接到外网,所有的内网客户端无需配置外网IP即可通过squid上网,在这种模式下,squid主要负责提供缓存加速及访问控制的功能
- 透明代理:与正向代理类似,不需要终端用户进行特殊设置,需要结合网管部署,所有操作均由管理员在网关服务器和代理服务器进行设置,这些对用户透明的。
- 反向代理:反向代理集合智能DNS可以实现基本的CDN框架,此时的squid代理服务器可以直接代表后端服务器提供页面访问,用户并感觉不到自己是直接访问代理服务器,有利于减轻真实服务器压力,提高并发和响应速度。
二:部署环境实验操作
2.1:环境案例
主机 | IP地址 |
---|---|
squid | 20.0.0.20 |
web1 | 20.0.0.21 |
web2 | 20.0.0.22 |
2.2:安装squid服务
--------------------------------------------安装squid服务-----------------------------------------------------------------
squid服务器:
[root@localhost ~]# hostnamectl set-hostname squid #设置主机名squid
[root@localhost ~]# su #刷新
web服务器:
[root@localhost ~]# hostnamectl set-hostname web #设置主机名web
[root@localhost ~]# su
squid服务器配置:
将软件包上传到服务器中
[root@squid ~]# tar zxvf squid-3.4.6.tar.gz -C /opt/ ###将包解压到/opt目录下
[root@squid ~]# cd /opt/squid-3.4.6/
[root@squid squid-3.4.6]# yum -y install gcc gcc-c++ ###安装编译工具gcc、gcc-c++
[root@squid squid-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
--------------------------------------------上面配置的解释---------------------------------------------------------
./configure \\
--prefix=/usr/local/squid \\ #指定安装路径
--sysconfdir=/etc \\ #配置文件所存在的目录
--enable-arp-acl \\ #启用acl访问控制列表
--enable-linux-netfilter \\ #内核过滤表
--enable-linux-tproxy \\ #支持透明代理
--enable-async-io=100 \\ #io的优化
--enable-err-language="Simplify_Chinese" \\ #支持err语言(也就是报错是简体中文形式)
--enable-underscore \\ #url支持下划线
--enable-poll \\ #字符设备驱动函数(内核函数)
--enable-gnuregex \\ #支持正则表达式
----------------------------------------------------------------------------------------------------------
[root@squid squid-3.4.6]# make -j4 && make install #编译并安装
[root@squid squid-3.4.6]# ln -s /usr/local/squid/sbin/* /usr/local/sbin/ #让可用命令让系统所能识别
[root@squid squid-3.4.6]# useradd -M -s /sbin/nologin squid ###建立一个程序性用户
[root@squid squid-3.4.6]# chown -R squid.squid /usr/local/squid/var/ ###给用户一个权限
[root@squid squid-3.4.6]# vim /etc/squid.conf #改主配置文件
#http_access deny all #默认拒绝所有,注销掉,或者放下面,从上往下读,不会拒绝掉
http_access allow all #加上这条allow,允许所有终端来访问,并且可用访问其他的源端服务器
http_port 3128
cache_effective_user squid ###在端口下面加上缓存管理用户
cache_effective_group squid ###在端口下面加上缓存管理组
[root@squid squid-3.4.6]# squid -k parse ###检查配置文件语法
[root@squid squid-3.4.6]# squid -z ###初始化缓存目录
[root@squid squid-3.4.6]# squid ###启动服务
[root@squid squid-3.4.6]# netstat -anpt | grep 3128 ###可用查看一下启动了没
tcp6 0 0 :::3128 :::* LISTEN 40026/(squid-1)
[root@squid squid-3.4.6]# cd /etc/init.d/
[root@squid init.d]# vim 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)
[ -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@squid init.d]# chmod +x squid ###给个执行权限
[root@squid init.d]# chkconfig --add squid ###service添加一个列表名称
[root@squid init.d]# service squid stop ###关闭squid服务网
[root@squid init.d]# netstat -anpt | grep 3128 ###查看一下是否关闭掉了
[root@squid init.d]# service squid start ###在启动
正在启动 squid....
2.3:传统代理模式(正向)
------------------------------------------配置传统代理服务器(传统模式),还在squid服务器上配置--------------------------------------------------------
[root@squid init.d]# vim /etc/squid.conf
#配置主配置文件,在端口下面添加这三条!
cache_mem 64 MB
#指定缓存功能所使用的内存空间大小
reply_body_max_size 10 MB
#允许用户下载的单个文件最大文件大小,以字节为单位。设置0表示不限制
maximum_object_size 4096 KB
#允许保存到缓存空间的最大对象大小,以KB为单位,超过大小限制的文件将不被缓存,优化指令(大文件保存在用户浏览器缓存里,不用来找服务器了,不然会占用服务器的资源)
[root@squid init.d]# iptables -F #清空防火墙规则
[root@squid init.d]# iptables -t nat -F #清空防火墙表规则
[root@squid init.d]# setenforce 0 #关闭核心防护(临时的)
[root@squid init.d]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT ###-I在开头插入input链(一个链包含多个规则),-p定义一个tcp协议,-dport 端口,-j 允许操作
[root@squid init.d]# service squid reload #重载配置文件
- 配置web1端
[root@web ~]# systemctl stop firewalld #关闭防火墙
[root@web ~]# setenforce 0 #关闭核心防护
[root@web ~]# yum -y install httpd #安装Apache
[root@web ~]# systemctl start httpd #启动Apache服务
- 测试
1、打开谷歌浏览器
2、打开设置
3、点开高级
4、点击左下角系统
5、点击页面上的 打开您计算机的代理设置
6、手动设置代理下面设置,使用代理,地址是你的代理服务器的ip地址,端口是3128,点击保存
7、然后浏览器输入20.0.0.21,去访问web服务器
- web1服务器上查看
[root@web httpd]# cd /var/log/httpd/ ###到httpd目录下
[root@web httpd]# cat access_log ###查看access日志
20.0.0.20 - - [30/Oct/2020:00:28:16 -0400] "GET /noindex/css/fonts/Bold/OpenSans-Bold.ttf HTTP/1.1" 404 238 "http://20.0.0.21/noindex/css/open-sans.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
20.0.0.20 - - [30/Oct/2020:00:28:16 -0400] "GET /noindex/css/fonts/Light/OpenSans-Light.ttf HTTP/1.1" 404 240 "http://20.0.0.21/noindex/css/open-sans.css" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
-------从上面的就能看出,访问web服务器的是代理服务器的ip,并不是真机的ip地址
2.4:透明模式
------------------------------------------配置透明代理服务器,还在squid服务器配置----------------------------------------------------
在代理服务器上添加一块网卡,设置成主机模式
[root@squid ~]# cd /etc/sysconfig/network-scripts/
[root@squid network-scripts]# cp -p ifcfg-ens33 ifcfg-ens36
[root@squid network-scripts]# vim ifcfg-ens36
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.10.3
NETMASKE=255.255.255.0
UUID、DNS都不用设置,可以删掉
[root@squid network-scripts]# systemctl restart network
[root@squid network-scripts]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1 #开启路由转发功能,1是开启,0是不开启
[root@squid network-scripts]# sysctl -p #加载一下
-------------------------------------web1端上也要配置一个回去的路由----------------------------------------------------
[root@web ~]# route add -net 192.168.10.0/24 gw 20.0.0.20
----------------------------------------squid服务器配置--------------------------------------------------------
[root@squid network-scripts]# vim /etc/squid.conf
http_port 192.168.10.3:3128 transparent #把3182端口的地方改成透明模式
[root@squid network-scripts]# service squid start #重启服务
[root@squid network-scripts]# iptables -F #清除一下防火墙规则
[root@squid network-scripts]# iptables -t nat -F #清除一下表缓存
[root@squid network-scripts]# iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 80 -j REDIRECT --to 3128 #添加一个80端口访问的规则
[root@squid network-scripts]# iptables -t nat -I PREROUTING -i ens36 -s 192.168.10.0/24 -p tcp --dport 443 -j REDIRECT --to 3128 #访问的是https的就要改成443端口
[root@squid network-scripts]# iptables -I INPUT -p tcp --dport 3128 -j ACCEPT
- 测试
客户端的网关填写刚刚配置的代理服务器ens36网卡的ip地址,192.168.10.3
然后浏览器输入20.0.0.21访问apache网站
在Apache服务器查看
[root@web httpd]# cd /var/log/httpd/ #到httpd目录下
[root@web httpd]# cat access_log #查看access日志
20.0.0.20 - - [30/Oct/2020:03:03:55 -0400] "GET /favicon.ico HTTP/1.1" 404 209 "http://20.0.0.21/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
只要访问的ip地址是代理服务器的就可以了!!!
2.5:ACL访问控制
---------------------------squid代理服务器操作,在透明模式之后做--------------------------
[root@squid ~]# vim /etc/squid.conf
acl hostlocal src 192.168.10.99/32 #写在acl第一个就行,
http_access deny hostlocal #调用上面的ip地址和名称拒绝访问,写在http格式的第一个就行
[root@squid ~]# service squid reload #重启
测试:客户端浏览器输入20.0.0.21就显示访问被拒绝了!
2.6:反向代理(客户端访问代理服务器就能到web服务器的网站上)
--------------------------------------------------反向代理---在web1服务器------------------------------------------
[root@web httpd]# cd /var/www/html/
[root@web html]# echo "this is test1 web" > index.html ###创建一个网站,网页要区分
测试:浏览器输入:20.0.0.21,就能看见 this is test1 web
-------------------------------------------------squid代理服务器操作-------------------------------------------
[root@web html]# systemctl start firewalld ###开启防火墙
[root@web html]# iptables -F ###清除一下防火墙规则
[root@web html]# iptables -t nat -F ###清除一下防火墙表缓存
[root@web html]# iptables -I INPUT 以上是关于squid代理服务器的主要内容,如果未能解决你的问题,请参考以下文章