Docker安装Squid代理服务

Docker安装Squid代理服务

CoderJia 116 2024-01-24

前提

有两台服务器,一台可以翻墙,一台不能,现在想使用那台能翻墙的服务器做代理服务器,网上搜一下教程,发现使用 docker部署 squid比较简单,于是记录下使用过程。

Squid介绍

Squid是一款非常流行的开源代理和缓存服务器。它主要用于各种网络协议的内容缓存,以提高访问速度,减少带宽使用,并提供更有效的网络服务。以下是 Squid的一些核心特点和应用场景:

核心特点

  1. 缓存和加速Squid可以缓存请求的网页、图片和其他文件,这样当同一个资源再次被请求时,它可以快速从本地缓存提供,而不是每次都从原始服务器下载。
  2. 控制访问Squid可以用来控制哪些内容可以被用户访问。它支持强大的访问控制列表(ACLs),允许管理员根据源地址、目的地、使用的协议等标准过滤内容。
  3. 提供安全性Squid可以作为一个透明代理来提高网络安全,可以用来拦截恶意流量和提供 SSL/TLS加密的代理服务。
  4. 减少带宽使用:通过缓存频繁访问的内容,Squid可以显著减少带宽需求,特别是在网络连接有限或昂贵的环境中非常有用。
  5. 提高响应时间:由于从近距离缓存提供内容,Squid能够减少数据的往返时间,从而提高响应速度。
  6. 支持多种协议Squid支持 HTTPHTTPSFTP等多种网络协议。

应用场景

  1. 企业网关:在企业环境中,Squid通常用作网关代理,来管理和监控员工的互联网使用。
  2. ISP缓存解决方案:互联网服务提供商(ISP)使用 Squid来减少带宽使用,加快用户访问互联网资源的速度。
  3. 内容分发网络Squid可以用作内容分发网络(CDN)的一部分,来提供地理分布式的缓存服务。
  4. 反向代理和负载均衡Squid还可以配置为反向代理,用于负载均衡和为后端服务器提供缓存服务。
  5. 安全和匿名浏览Squid还可用于提高浏览的安全性和匿名性,尤其是当结合 VPNTor使用时。

Docker部署Squid

拉镜像

[root@sk4z3dzp01yel1a3 ~]# docker search squid
[root@sk4z3dzp01yel1a3 ~]# docker pull ubuntu/squid

配置文件

新建目录和 Squid配置文件目录映射,并且需要准备 squid.conf 配置文件。如 /usr/local/squid/squid.conf,文件内容如下,需要修改的见注释。

acl localnet src 0.0.0.1-0.255.255.255  # RFC 1122 "this" network (LAN)
acl localnet src 10.0.0.0/8             # RFC 1918 local private network (LAN)
acl localnet src 100.64.0.0/10          # RFC 6598 shared address space (CGN)
acl localnet src 169.254.0.0/16         # RFC 3927 link-local (directly plugged) machines
acl localnet src 172.16.0.0/12          # RFC 1918 local private network (LAN)
acl localnet src 192.168.0.0/16         # RFC 1918 local private network (LAN)
acl localnet src fc00::/7               # RFC 4193 local private network range
acl localnet src fe80::/10              # RFC 4291 link-local (directly plugged) machines
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
# 这里配置哪些ip可以使用本代理服务器,多个用空格隔开或写到文件里
acl allowed_ips src 112.17.xx.xx
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access allow localhost
http_access allow localnet
# 这里运行自己配置的ip
http_access allow allowed_ips
# 其他一律拒绝
http_access deny all
# 绑定ip和端口号
http_port 0.0.0.0:3128
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 \/(Packages|Sources)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims
refresh_pattern \/InRelease$ 0 0% 0 refresh-ims
refresh_pattern \/(Translation-.*)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
refresh_pattern .               0       20%     4320
logfile_rotate 0

运行容器

注意端口号 3128是否占用,是否放行!

docker run --name squid -d --restart=always --publish 3128:3128 --volume /usr/local/squid:/etc/squid/ ubuntu/squid:latest

查看容器运行

docker logs squid

测试服务启动

curl -I http://localhost:3128

测试效果1-windows

未配置代理服务器

未配置代理服务器.png

配置代理服务器

设置->网络和Internet->代理->手动设置代理

1BVJX783R~3AFTB%DIWTETY.png

查看出口 ip已经是代理服务器 ip了:

20240124103407.png

打开需要翻墙的 openai官网也是可以的:

20240124103325.png

测试效果2-curl

未设置代理

[root@hecs-141602 ~]# sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:02:07 --:--:--     0curl: (7) Failed connect to github.com:443; 连接超时

设置代理

[root@hecs-141602 ~]# sudo curl --proxy "https://154.198.x.x:3128" -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
100 58.1M  100 58.1M    0     0  1263k      0  0:00:47  0:00:47 --:--:-- 1398k

结论

Squid是一个功能强大且灵活的工具,它的应用范围从简单的缓存代理到复杂的网络流量管理和安全增强。它的高度可配置性使它适用于各种网络环境,从小型办公室到大型企业和 ISP网络。

但是和VPN还是有区别的:

  • Squid主要用于缓存和控制 HTTP/HTTPS流量,而 VPN用于保护整个网络连接的安全和隐私。
  • Squid在隐私保护方面不如 VPN,因为它不会对所有流量进行加密,也不会隐藏用户的真实 IP地址。
  • Squid的配置可能比 VPN复杂,尤其是在进行高级过滤和控制时。