Squid代理服务器搭建和简单使用

news/2024/10/14 17:20:43

1 Squid的介绍

1.1 前言简介

代理服务器(Proxy Server)的功能是代理网络用户去取得网络信息。形象地说,它是网络信息的中转站,是个人网络和Internet服务商之间的中间代理机构,负责转发合法的网络信息,对转发进行控制和登记。 [1]
代理服务器作为连接Internet与Intranet的桥梁,在实际应用中发挥着极其重要的作用,它可用于多个目的,最基本的功能是连接,此外还包括安全性、缓存、内容过滤、访问控制管理等功能。更重要的是,代理服务器是Internet链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互联(OSI)模型的对话层。

1.2 Squid简介

Squid服务器缓存频繁要求网页、媒体文件和其它加速回答时间并减少带宽堵塞的内容。
Squid代理服务器(Squid proxy server)一般和原始文件一起安装在单独服务器而不是网络服务器上。Squid通过追踪网络中的对象运用起作用。Squid最初担当中介,仅仅是把客户要求传递到服务器并存储要求对象的拷贝。如果同一个客户或同一批客户在要求还在Squid缓存(cache)时要求相同的对象,Squid就可以立刻服务,加速下载并保存带宽。

2 Squid安装和环境

2.1 Squid安装过程

Squid是开源免费的,可以直接到官网查看
博主是在Ubuntu22.04里安装的,Windows应该也可以安装,就是比较麻烦。(不推荐)
输入指令安装

sudo apt-get install squid -y

安装好后输入指令查看一下状态

sudo systemctl status squid

如果绿色字是active(running)就是正常运行,不然就要查看一下下面的logfile显示哪里有错误,如果是未开启的,则输入指令开启,下面有几种常用的指令

sudo systemctl status squid  # 查看状态
sudo systemctl start squid   # 开启服务
sudo systemctl stop squid    # 停止服务
sudo systemctl restart squid # 重启服务

查看日志

journalctl -xeu squid.service

2.2 搭建的环境

需要一台服务器安装好Squid,需要双网卡双IP:
外网IP:172.28.28.0/16,网关:172.28.18.1 内网IP:172.28.18.0/16
需要一台内网的电脑配置内网IP:172.28.18.0/16

2.3 配置环境

先配置内网电脑IP
IP:172.28.18.7/16,网关不用填

因为没网关,正常情况下是无法上网的。

再配置能连接外网的服务器IP
第一网卡(能外网)IP:172.28.28.104/16,网关:172.28.18.1,DNS:119.29.29.29
第二网卡(内网)IP:172.28.18.92/16

测试服务器能否上网
可以使用指令curl www.baidu.com,查看是否出现百度一下

最好查看双IP是否生效

ping 172.28.28.104
ping 172.28.18.92

输入上面指令都通的情况就说明生效了

3 正向代理

3.1 配置Squid配置文件

主配置文件一般都在/etc/squid/squid.conf,我们需要先复制一份做备份,预防修改坏了,使用指令

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak

然后再进行编辑sudo vim /etc/squid/squid.conf,我们找到配置IP地址的那行,默认是没有172.28.0.0/16的,我们环境需要添加一行,再这里我们也能找到默认端口号3128

acl localnet src 172.28.0.0/16

acl:访问列表
src:源IP

然后在编辑子配置文件sudo vim /etc/squid/conf.d/debian.conf,将http_access allow localnet取消注释

最后我们重启一下Squid服务,每次修改配置文件后都需要重启Squid服务来生效

sudo service squid restart

3.2 配置代理服务器

内网电脑正常情况是无法上网的,如图:

我们需要在internet选项设置,依次选择连接→局域网设置

打开局域网设置后,勾选代理服务器,地址填写服务器的内网IP172.28.18.92,端口写3128,然后点确定

我们尝试打开网页,发现可以正常打开网页,其实是不通的。实际我们是通过服务器来上网的。

大部分软件也可以通过添加代理服务器的方式来上网,例如QQ,微信之类,设置方式不尽相同,这里就不展示了。

4 限制访问

我们可以通过修改配置文件来达到限制用户上网,配置文件是通过从上往下来读取指令的。

4.1 限制IP访问

我们可以通过限制固定IP来上网,需要在配置文件里分别位置添加

acl badhost src 172.28.18.7
http_access deny badhost

http_access:加载访问列表
deny:拒绝

因为是从上往下读取的关系,因此需要在http_access allow localhost的上面添加http_access deny badhost
修改完后记得使用指令sudo service squid restart重启Squid服务,之后就不重复这操作了
在内网机器里重新打开网页会提示访问被拒绝

因为只限制了一个IP,只要换个IP就正常了,也可以限制一个IP范围

acl badhost src 172.28.18.7-172.28.18.10

4.2 规定时间内禁止上网

在配置文件里相关地方添加相关语句

acl worktime time MTWHF 17:00-18:00
http_access deny worktime

4.3 禁止访问指定服务器IP

例如禁百度网址,先查看望都网站的IP,在Windows可上网的电脑上打开命令窗口,然后输入nslookup,再输入www.baidu.com,红框里的IP就是百度网站的IP。这种大型网站一般都会变动,每个人查看的IP都不尽相同。

在配置文件里相关地方添加相关语句

acl baddst dst 183.240.98.198
acl baddst dst 183.240.98.161
http_access deny baddst

4.4 禁止访问指定的域名

在配置文件里相关地方添加相关语句,可以用空格来一行多个

acl baddomain dstdomain .taobao.com .pinduoduo.com
http_access deny baddomain

4.5 访问列表组合

例如禁止区域IP访问指定域名

http_access deny badhost baddomain

4.6 # 禁止访问IP地址的网址

需要使用正则表达式来写条件,这样就能杜绝ban了域名还能用IP来访问网站了

acl xhost dstdom_regex ((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])
http_access deny xhost

5 Squid支持WebSocket配置

资料来源于:https://cloud-atlas.readthedocs.io/zh-cn/latest/web/proxy/squid/squid_websocket.html
对于 WebSocket 实际上是HTTP协议连接 upgrade (升级)成 WebSocket 连接,所以,要解决代理服务器兼容WebSocket,需要配置代理服务器允许协议升级( HTTP upgrade request )。

Squid从 v5 版本开始,支持 http_upgrade_request_protocols 配置参数,允许客户端发起的控制和服务器确认机制通过使用HTTP/1.1 Upgrade机制转换成其他协议。

配置 /etc/squid/squid.conf 添加:

http_upgrade_request_protocols WebSocket allow all

需要注意,版本低于 squid v5 无法解析上述配置。例如 Ubuntu 20.04.3 LTS 发行版提供的是 4.10 版本Squid 会出现报错。解决方法是 Ubuntu环境编译Squid 5

6 透明代理

6.1 安装ssl版本Squid

需要使用透明代理的情况,需要另外安装ssl版本。因为需要使用到ssl。

sudo apt-get install squid-openssl

6.2 配置http透明代理

网页一般使用两种端口,一个是http的80端口,一个是https的443端口。
Squid支持http端口。直接修改配置文件,不要修改Squid的默认端口,添加一个端口,这里添加3129这个端口做http的透明代理端口,再添加intercept
PS:intercept模式,支持IP层NAT拦截,将流量传递到此Squid端口。

http_port 3128
http_port 3129 intercept

6.3 配置https透明代理

6.3.1 生成测试证书

https则需要用到ssl证书,这里演示就生成测试用的证书。

mkdir -p /etc/squid/certs/
cd /etc/squid/certs/
# This puts the private key and the self-signed certificate in the same file
openssl req -new -newkey rsa:4096 -sha256 -days 3650 -nodes -x509 -keyout myCA.pem -out myCA.pem
# This can be added to browsers
openssl x509 -in myCA.pem -outform DER -out myCA.der

其中openssl req -new -newkey rsa:4096 -sha256 -days 3650 -nodes -x509 -keyout myCA.pem -out myCA.pem意思是:
OpenSSL创建一个自签名的X.509证书,不要对私钥进行加密,有效期为10年。
输入指令后需要填写各项信息(可以随便填写),1.地方,2.地方省,3.地方区,4.公司,5.组织,6.姓名,7.email
openssl x509 -in myCA.pem -outform DER -out myCA.der意思是:
名为myCA.pem的PEM格式证书文件转换为名为myCA.der的DER格式证书文件,提供测试机导入证书使用。

6.3.2 修改Squid配置文件

编辑Squid配置文件,在http_port 3129 intercept下面添加

https_port 3130 ssl-bump tls-cert=/etc/squid/certs/myCA.pem generate-host-certificates=on dynamic_cert_mem_cache_size=4MB transparent

我们使用3130端口代替https的443端口,tls-cert指定证书位置(需要绝对位置),transparent:透明代理情况下传输数据。
添加语句后如图:

6.4 添加防火墙语句

先查看一下防火墙,这里使用iptables

sudo iptables -t nat -A PREROUTING -s 172.28.0.0/16 -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3130
sudo iptables -t nat -A PREROUTING -s 172.28.0.0/16 -i eth1 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3130
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo iptables -t nat -A PREROUTING -s 172.28.0.0/16 -j DNAT -p tcp --dport 53 --to 172.28.18.1
sudo iptables -t nat -A PREROUTING -s 172.28.0.0/16 -j DNAT -p udp --dport 53 --to 172.28.18.1

第一和第二句代表80和443端口转发到代理服务器上:
将所有来自172.28.0.0/16网段且目标端口为443和80的TCP数据包的目标端口更改为3130,并且只处理通过eth1接口进入的数据包。eth1是外网的网卡名称
第三句代表处理地址转换
对所有通过eth0接口离开的数据包执行MASQUERADE操作,即动态地改变它们的源IP地址。处理出口数据。
第四和第五句代表DNS服务转发到代理服务器上:
将所有来自172.28.0.0/16网段且目标端口为53的TCP和UDP数据包的目标IP地址更改为172.28.18.1。

添加完毕后可以输入指令sudo iptables -t nat -L查看状态:

6.5 设置客户机IP和查看效果

6.5.1 设置客户机

因为博主第一台机体已经投入生产了,只能弄第二台服务器来演示透明代理。这里博主的第二台服务器IP发生了少许变化。
外网:172.28.28.105,内网:172.28.38.1

所以客户机设置的IP为:
IP:172.28.38.93/16
网关:172.28.38.1(填写Squid服务器的内网IP)
DNS:172.28.38.1(填写Squid服务器的内网IP)
如图:

1-1.因为现在网站基本都是https,我们需要在Windows导入服务器生成的证书文件。

打开internet属性下的内容,打开证书,点击导入

1-2.点击下一步,选择证书的时候需要点击所有文件,因为我们是自己生成的测试证书。

1-3.选择存放在受信任的根证书颁发机构,然完成

6.5.2 测试效果

配置是限制taobao网,如果没有导入证书,会一直多一步提示有证书危险,可以直接点击忽略就行了。

7 后言

Squid还有很多功能,这里就不一一展示了,可以去官网查看。Squid是一个很强大的代理服务器。或者你们想知道什么功能,我可以查看一下有没这功能, 怎样实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/71522.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

win电脑快速关机的另类方法

1、在桌面上新建一个快捷方式 2、填写对应参数目标:%windir%\System32\SlideToShutDown.exe 起始位置:%windir%\System32 快捷键按自己喜好来,我这里输入:%windir%\System32 如下图所示:接下来按双击或者使用自己的快捷键就可以实现关机啦Love for Ever Day

CAP 8.3 版本发布通告

前言 我们很高兴宣布 CAP 发布 8.3 版本正式版,我们在这个版本中主要根据用户反馈添加了一些细节的功能增强特性,例如RabbitMQ对于Queue的配置控制选项和Kafka的额外失败消费者重试等,同时升级了依赖的NuGet包到最新版本。 下面,具体看一下我们新版本的功能吧。 总览 可能有…

参赛故事|我也想成为一名金蝶云苍穹开发布道师

金蝶云苍穹开发者大赛参赛有感!迷茫到突破 站在人生的十字路口,作为一名大三学生,我感受到了前所未有的压力。毕业的脚步越来越近,校园内的竞争愈发激烈,身边的同学早已通过奖学金、竞赛获奖等为自己的简历增光添彩。而我,望着自己那份平淡无奇的简历,不禁感到迷茫和焦虑…

UE-GAS CreateDefaultSubobjectUAbilitySystemComponent返回为nullptr

前因 原先在项目中用了默认的ASC(UAbilitySystemComponent),后面因为新的需求导致需要改为自己的ASC。结果改了之后,发现在Pre-Init(构造函数)时,CreateDefaultSubobject的返回值是nullptr。 过程 于是去论坛求助:论坛的人的回答是,你修改了ASC的类,导致前一个ASC反序…

vue3 antvX6的使用源码

npm install --save @antv/x6<template><div class="dashboard-container"><p>选择节点</p><button @click="save">保存</button><div class="antvBox"><div class="menu-list"><…

程序员攻占小猿口算,炸哭小学生!

小学生口算 PK,已经演变为各大高校和程序员之间的算法学术交流竞赛!小学生万万没想到,做个加减乘除的口算练习题,都能被大学生、博士生、甚至是程序员大佬们暴打!最近这款拥有 PK 功能的《小猿口算》App 火了,谁能想到,本来一个很简单的小学生答题 PK,竟然演变为了第四…

注塑机接插件航空插头工厂数据采集产量监控系统

测试机柜温湿度01.温度7dp8dp 测试机柜温湿度01.湿度压接计数器02.产量计数 测试机柜温湿度02.温度测试机柜温湿度02.湿度3eftkf 压接计数器03.产量计数 压接计数器01.产量计数压接计数器04.产量计数200121 压接计数器05.产量计数5gd1qg 海天温湿度.温度6h0c2l 海天温湿度.湿度…

C#中使用Socket请求Web服务器过程

最开始我们需要明白一件事情,因为这是这篇文章的前提: HTTP协议只是一个应用层协议,它底层是通过TCP进行传输数据的。因此,浏览器访问Web服务器的过程必须先有“连接建立”的发生。而有人或许会问:众所周知,HTTP协议有两大特性,一个是“无连接”性,一个是“无状态”性。…