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

我们上一章介绍了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代理,他就具有具备访问公网的能力。
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。