代理服务器-Squid介绍和应用

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们上一章介绍了Web服务器,其中以Nginx为主,本章我们来讲解几个代理软件:Squid,Haproxy,LVS,FRP(内网穿透)。

前面我们在介绍Web服务器的时候,介绍过Nginx的正向代理,实际上如果要使用正向代理,一般不会使用Nginx来做,而是使用更专业的代理软件:Squid来实现。当然Squid实际上有很多功能,我们这里主要介绍他的正向代理(或者叫透明代理)。

在讲解代理之间,我们先普及几个Linux系统里面关于代理的几个参数或者说环境变量:

http_prxoy:当你尝试通过HTTP访问网络资源时,你的请求会首先被发送到这个指定的代理服务器。格式通常是:http_proxy=http://proxy-server:port如果代理服务器需要认证,可能还需要提供用户名和密码,如:http_proxy=http://username:password@proxy-server:port。

https_proxy:和http_类似,只是请求的是https。

默认这2个参数在未配置之前,是找不到这2个环境变量,如果配置以后,则对应的请求都会先转发到对应的代理服务器上面,然后从代理服务器在转发出去。

Squid部署

bash 复制代码
yum -y install squid
systemctl start squid
systemctl enable squid

Squid配置文件介绍

普通部署核心就是修改允许通过的ip和端口。

yaml 复制代码
# 定义了名为 localnet 的来源 IP 地址段,供后面引用
acl localnet src 10.0.0.0/8         # RFC1918 可能的内部网络
acl localnet src 172.16.0.0/12      # RFC1918 可能的内部网络
acl localnet src 192.168.0.0/16     # RFC1918 可能的内部网络
acl localnet src fc00::/7           # RFC 4193 本地私有网络范围
acl localnet src fe80::/10          # RFC 4291 链路本地(直接连接)机器
# 定义目标端口名称,供后面引用
acl SSL_ports port 443              # HTTPS 端口
acl Safe_ports port 80              # HTTP
acl Safe_ports port 21              # FTP
acl Safe_ports port 443             # HTTPS
acl Safe_ports port 210             # WAIS
acl Safe_ports port 1025-65535      # 未注册端口
acl Safe_ports port 280             # HTTP-MGMT
acl Safe_ports port 488             # GSS-HTTP
acl Safe_ports port 591             # FileMaker
acl Safe_ports port 777             # 多语言 HTTP
# 定义 CONNECT 方法的 ACL
acl CONNECT method CONNECT
# 拒绝非目标端口的访问
http_access deny !Safe_ports        # 只允许上面定义的目标端口通过
http_access deny CONNECT !SSL_ports # 只允许 CONNECT 方法访问 SSL 端口
# 只允许来自本地管理请求
http_access allow localhost manager # 允许本地管理请求
http_access deny manager            # 拒绝其他管理请求
# 允许来自上面定义的 IP 地址段和本机使用代理,其他都拒绝
http_access allow localnet          # 允许 localnet 定义的地址段
http_access allow localhost         # 允许本机访问
http_access deny all                # 拒绝所有其他请求
# 监听默认端口
http_port 3128
# 崩溃信息存储目录
coredump_dir /var/spool/squid
# 缓存刷新策略
refresh_pattern ^ftp:               1440  20%  10080
refresh_pattern -i (/cgi-bin/|\?)   0     0%   0
refresh_pattern .                   0     20%  4320

使用Squid

ini 复制代码
#临时定义,永久定义需要 添加到环境变量里面 
export http_proxy=192.168.31.120:3128
export https_proxy=192.168.31.120:3128
bash 复制代码
#成功使用的网络链接
 tcp 0  0 192.168.31.121:39314    192.168.31.120:3128     ESTABLISHED 6846/wget 

#成功的日志
1744359965.994    723 192.168.31.198 TCP_TUNNEL/200 5793 CONNECT objects.githubusercontent.com:443 - HIER_DIRECT/185.199.108.133 -

#拒绝的日志
1744360105.239      0 192.168.31.198 TCP_DENIED/403 3922 CONNECT dlcdn.apache.org:443 - HIER_NONE/- text/html

这里的代码和http的代码是一样的,200是成功,403是没权限(失败)。

案例

某私有云有一个yum服务器,为内网服务器提供yum源。但是由于这个机器是不通外网的,所以他没有办法去外网同步资源,这个时候我们就可以找一台具有公网能力,并且和这个yum服务器互通的机器,然后在这个机器部署Squid软件,并根据需求配置对于的ip和端口限制,这样我们的yum服务器只需要添加对于的http_proxy或者https_proxy代理,他就具有具备访问公网的能力。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

相关推荐
AOwhisky3 分钟前
Python 学习笔记(第十四期)——运维自动化(下·中篇):远程文件传输——paramiko进阶篇
运维·python·学习·云原生·自动化·文件传输·paramiko
imc.1133 分钟前
linux基础IO
linux·运维·服务器
躺不平的理查德34 分钟前
让Ubuntu 的第二块网卡 ens37 永久固定为 192.168.30.111
运维·服务器
bitbrowser1 小时前
Facebook 验证反复回到原页面,应该从哪里排查
运维·服务器·facebook
Land03291 小时前
AI网页元素变化无法自动修复?自带元素自愈的自动化解决方案
运维·人工智能·ai·自动化·rpa
fengyehongWorld1 小时前
Jenkins 安装与简单配置
运维·jenkins
云智慧AIOps社区2 小时前
2026 国产化 ITSM 替代指南:横向测评 ServiceNow、轻帆云、Jira等五款主流IT服务管理平台
运维·人工智能·运维开发·it服务管理·itsm平台
Urbano2 小时前
针织卫衣全流程生产工序科普:自动化替代、产能优化与设备选型实战方案
运维·自动化
BelongPanda2 小时前
Linux Nginx 纯手动 Let‘s Encrypt 泛域名证书配置教程
linux·nginx
AC赳赳老秦2 小时前
招投标公开数据自动化采集实战:基于 OpenClaw 的定时抓取与业务关键词精准推送
运维·服务器·数据库·自动化·测试用例·deepseek·openclaw