东东东 陈煜东的博客

Squid搭建正向代理

本文主要讲述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
http_access allow myip


# 允许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

分类: 网络

源码编译安装MySQL5.6.16 » « 在公司的局域网使用git或github 设置代理

1 评论

  1. 很详细,权限部分看懂了。谢谢~!

发表评论

邮箱(不会被公开)

*

Copyright © 2018 东东东 陈煜东的博客 粤ICP备13059639号-1

SITEMAP回到顶部 ↑