本文主要讲述squid正向代理,如果你需要反向代理,可以参考一下Nginx的反向代理
网络环境复杂,不是所有的机器都能直接访问目标服务器的,总是有那么多的阻隔。比如我们的机器处于内网环境中(公司内网、墙内、学校内网),无法直接访问。这个时候如果有个机器能够访问外网的资源,那么我们就可以通过这个机器进行跳转。如下图。

正向代理
不只是普通的上网可以使用正向代理,我们的程序部署在内网内,但是又要主动请求外部资源的时候,这个时候也可以使用能够访问互联网资源的机器搭建正向代理服务。以此达到安全的服务。通过Squid,我们可以使用HTTP代理,这样就可以访问外网了。
安装Squid
快速的安装squid就是使用yum或者apt-get了。
yum install squid
默认的配置文件介绍
默认的文件在/etc/squid/squid.conf
。
############################################################################# # squid权限控制 acl和http_access ############################################################################# acl manager proto cache_object acl localhost src 127.0.0.1/32 ::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 # 局域网内的IP,看情况是否考虑需要 acl localnet src 10.0.0.0/8 # 一般大型企业或者学校使用,或者虚拟机中的网络 acl localnet src 172.16.0.0/12 # 一般很少用 acl localnet src 192.168.0.0/16 # 一般家用路由器或者虚拟机中的网络 acl localnet src fc00::/7 # IPv6 acl localnet src fe80::/10 # IPv6 # 定义ssl端口、一些安全端口和http访问的connect方法 acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports 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 # multiling http acl CONNECT method CONNECT # 推荐最小访问权限配置 # 允许本机管理缓存,其他的拒绝 http_access allow manager localhost http_access deny manager # 拒绝非安全端口 http_access deny !Safe_ports # 拒绝connect到非ssl 443端口(上面定义了) http_access deny CONNECT !SSL_ports # 强烈建议去除注释。防止通过代理来访问本代理服务器上的web程序 # 以免认为是localhost用户访问web服务。 #http_access deny to_localhost # 下面插入你自己的规则 #--------- # 允许localhost和局域网内用户的请求,根据需要调整 http_access allow localnet http_access allow localhost # 最后,拒绝其他的对代理的访问 http_access deny all ############################################################################# ## Squid的基本配置 ############################################################################# # 默认监听3128端口 http_port 3128 # 设置对外显示的主机名 visible_hostname proxy.daoiqi.com ############################################################################# ### squid缓存配置 ############################################################################# # 建议最少使用下面一行 hierarchy_stoplist cgi-bin ? # 去除注释并调整下面这行语句来增加一个磁盘缓存目录 #cache_dir ufs /var/spool/squid 100 16 256 # 将核心输出保存在第一个缓存目录 coredump_dir /var/spool/squid # 添加自己的刷新缓存的正则 refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320
其中visible_hostname
是我自己添加上去的,如果没有这个配置,会报warning。
默认的log路径为/var/log/squid/
。可以进行查看一下相关的日志。
运行服务
service squid start # 启动squid service squid stop 关闭squid service squid restart 重启squid
以上部分基本上squid就可以正常工作了。
权限控制
默认的配置文件定义了局域网内用户都可以访问代理。但是在机房中,机器很多,他们都可能是处于内网上,这个需要注意。看看这些机器间是否有开启隔离,否则很危险。
对于云服务器来说这个应该还是安全的,他们会进行过滤。据我所知,目前云服务器上的隔离,主要是在宿主机(母机)上进行控制的,云服务器有一个内网IP和外网IP,对于内网IP的请求包,会在母机上使用iptables进行过滤。防止不同开发商的机器互相访问。
因此默认配置的局域网IP需要特别的注意一下。
附:我的squid配置
#############################################################################
# squid权限控制 acl和http_access
#############################################################################
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
# 声明我的IP,来自我的IP,可以请求squid。注意一定要有掩码
acl myip src 121.14.10.9/32
# 局域网内的IP,看情况是否考虑需要
acl localnet src 10.0.0.0/8 # 一般大型企业或者学校使用,或者虚拟机中的网络
acl localnet src 172.16.0.0/12 # 一般很少用
acl localnet src 192.168.0.0/16 # 一般家用路由器或者虚拟机中的网络
acl localnet src fc00::/7 # IPv6
acl localnet src fe80::/10 # IPv6
# 定义ssl端口、一些安全端口和http访问的connect方法
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
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 # multiling http
acl CONNECT method CONNECT
# 推荐最小访问权限配置
# 允许本机管理缓存,其他的拒绝
http_access allow manager localhost
http_access deny manager
# 拒绝非安全端口
http_access deny !Safe_ports
# 拒绝connect到非ssl 443端口(上面定义了)
http_access deny CONNECT !SSL_ports
# 强烈建议去除注释。防止通过代理来访问本代理服务器上的web程序
# 以免认为是localhost用户访问web服务。
#http_access deny to_localhost
# 下面插入你自己的规则
#---------
# 允许我的IP访问squid
acl AuthClients src 211.64.58.228/32
http_access allow AuthClients
# 允许localhost和局域网内用户的请求,根据需要调整
http_access allow localnet
http_access allow localhost
# 最后,拒绝其他的对代理的访问
http_access deny all
#############################################################################
## Squid的基本配置
#############################################################################
# 默认监听3128端口
http_port 3128
# 设置对外显示的主机名
visible_hostname proxy.daoiqi.com
# 对于本地配置hosts的网站,没有此配置,squid无法访问本地的hosts。
# 但是官网文档默认值就是/etc/hosts,我要显示声明才有效。
hosts_file /etc/hosts
#############################################################################
### squid缓存配置
#############################################################################
# 建议最少使用下面一行
hierarchy_stoplist cgi-bin ?
# 去除注释并调整下面这行语句来增加一个磁盘缓存目录
#cache_dir ufs /var/spool/squid 100 16 256
# 将核心输出保存在第一个缓存目录
coredump_dir /var/spool/squid
# 添加自己的刷新缓存的正则
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客
本文链接地址: Squid搭建正向代理 – https://www.chenyudong.com/archives/squid-forward-proxy.html
2015 年 11 月 26 日 — 14:03
很详细,权限部分看懂了。谢谢~!