以下是关于网络代理及其各种配置的详细说明:

网络代理介绍

网络代理是一种中介服务器,它位于客户端和目标服务器之间,负责转发客户端的请求并返回目标服务器的响应。代理服务器可以用于多种用途,包括提升安全性、隐藏客户端的真实IP地址、访问受限制的网站、以及进行负载均衡。它在企业环境、渗透测试、匿名浏览和流量管理中非常常用。

代理的主要功能

  • 匿名性:代理服务器可以隐藏用户的真实IP地址,从而提高隐私和匿名性。
  • 缓存加速:代理可以缓存用户访问的数据,在多次请求时加速访问速度。
  • 访问控制:可以在代理服务器上配置规则,限制某些网站或服务的访问。
  • 负载均衡:将用户请求分配给不同的服务器,减少单一服务器的压力。
  • 安全性:防止直接暴露内部网络,可以通过代理服务器配置防火墙规则。

正向代理与反向代理

正向代理(Forward Proxy)

  • 定义:正向代理位于客户端和目标服务器之间,代表客户端向目标服务器发起请求。客户端必须配置使用正向代理的地址和端口,才能通过代理访问外部资源。

  • 用途

    • 突破网络限制:帮助用户访问被防火墙或地域封锁的内容。
    • 缓存管理:通过缓存常用数据来减少带宽消耗。
    • 提高匿名性:隐藏客户端的真实IP地址。
  • 示例

    • 用户访问一个被封锁的网站时,正向代理会接收用户的请求,再将请求转发给目标服务器,并将响应返回给用户。

反向代理(Reverse Proxy)

  • 定义:反向代理位于目标服务器前面,代表目标服务器处理来自客户端的请求。客户端不需要知道反向代理的存在,因为反向代理对客户端是透明的。

  • 用途

    • 负载均衡:将客户端请求分配到多个后端服务器上,以减少单个服务器的负载。
    • 增强安全性:通过隐藏内部服务器的真实IP来提高系统的安全性。
    • SSL卸载:处理SSL加密请求,减轻后端服务器的加密/解密负担。
  • 示例

    • 使用 Nginx 作为反向代理服务器,将来自互联网的请求分发到多台Web服务器上。

APT代理配置

APT 是 Debian 和 Ubuntu 系列 Linux 系统中的包管理工具。通过配置代理,可以让 APT 在受限网络环境中正常下载和更新软件包。

配置方法

  1. 全局代理配置:编辑 apt 的配置文件,添加代理设置
1
2
3
4
5
sudo vim /etc/apt/apt.conf.d/95proxies
#
# proxy
Acquire::http::Proxy "http://proxy_ip:proxy_port";
Acquire::https::Proxy "http://proxy_ip:proxy_port";
  1. 临时配置代理:可以在运行 apt 命令时指定代理
1
sudo apt-get update -o Acquire::http::Proxy="http://proxy_ip:proxy_port"
  1. 环境变量:设置 http_proxyhttps_proxy 环境变量,让所有命令行工具,包括 apt 使用指定的代理
1
2
export http_proxy="http://proxy_ip:proxy_port"
export https_proxy="http://proxy_ip:proxy_port"

Docker代理配置

在一些企业环境中,Docker需要通过代理服务器访问外部网络以下载镜像或更新。

Docker安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

配置 Docker Daemon 使用代理 (Docker pull生效)

创建或编辑 /etc/systemd/system/docker.service.d/http-proxy.conf 文件:

1
2
3
4
[Service]
Environment="HTTP_PROXY=http://proxy_ip:proxy_port"
Environment="HTTPS_PROXY=http://proxy_ip:proxy_port"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com"

重启 Docker 使配置生效:

1
2
sudo systemctl daemon-reload
sudo systemctl restart docker

配置容器内的代理(Docker run生效)

临时方法:启动容器时,可以通过环境变量传递代理配置:

1
docker run -e HTTP_PROXY=http://proxy_ip:proxy_port -e HTTPS_PROXY=http://proxy_ip:proxy_port my_image

在容器运行阶段,如果需要代理上网,则需要配置 ~/.docker/config.json。以下配置,只在Docker 17.07及以上版本生效。

1
2
3
4
5
6
7
8
9
10
11
{
"proxies":
{
"default":
{
"httpProxy": "http://proxy_ip:proxy_port",
"httpsProxy": "http://proxy_ip:proxy_port",
"noProxy": "localhost,127.0.0.1,.example.com"
}
}
}

这个是用户级的配置,除了 proxies,docker login 等相关信息也会在其中。而且还可以配置信息展示的格式、插件参数等。

此外,容器的网络代理,也可以直接在其运行时通过 -e 注入 http_proxy 等环境变量。这两种方法分别适合不同场景。config.json 非常方便,默认在所有配置修改后启动的容器生效,适合个人开发环境。在CI/CD的自动构建环境、或者实际上线运行的环境中,这种方法就不太合适,用 -e 注入这种显式配置会更好,减轻对构建、部署环境的依赖。当然,在这些环境中,最好用良好的设计避免配置代理上网。

Docker Build 代理

虽然 docker build 的本质,也是启动一个容器,但是环境会略有不同,用户级配置无效。在构建时,需要注入 http_proxy 等参数。

1
2
3
4
5
docker build . \
--build-arg "HTTP_PROXY=http://proxy.example.com:8080/" \
--build-arg "HTTPS_PROXY=http://proxy.example.com:8080/" \
--build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \
-t your/image:tag

注意:无论是 docker run 还是 docker build,默认是网络隔绝的。如果代理使用的是 localhost:3128 这类,则会无效。这类仅限本地的代理,必须加上 –network host 才能正常使用。而一般则需要配置代理的外部IP,而且代理本身要开启 Gateway 模式。

Proxychains代理配置

Proxychains 是一种工具,它允许你通过Socks4、Socks5或HTTP代理运行任何命令行程序。它通常用于在渗透测试中,将工具的流量通过代理服务器或匿名网络(如Tor)进行转发。

配置方法

  1. 安装 Proxychains:在 Debian/Ubuntu 系统上安装
1
sudo apt-get install proxychains
  1. 编辑配置文件:编辑 proxychains 的配置文件 /etc/proxychains.conf~/.proxychains/proxychains.conf,添加代理设置
1
2
[ProxyList]
socks5 127.0.0.1 9050 # 例如,通过本地的 Tor 代理
  1. 使用 Proxychains 运行命令:通过 proxychains 运行命令行程序
1
proxychains nmap -sT example.com

Proxifier代理配置

Proxifier 是一款适用于 Windows 和 macOS 的代理客户端,它允许通过代理服务器转发应用程序的网络流量。与 Proxychains 类似,Proxifier 可以强制未提供代理设置的应用程序通过指定的代理服务器进行通信。

配置方法

  1. 下载和安装:从 Proxifier 官方网站 下载并安装客户端。

  2. 添加代理服务器

    • 打开 Proxifier,点击“Profile” > “Proxy Servers”,然后点击“Add”按钮。
    • 输入代理服务器的 IP 地址和端口,以及协议类型(如 HTTP、Socks4、Socks5)。
  3. 配置规则

    • Proxifier 允许你为特定应用程序设置规则,决定哪些应用程序流量通过代理转发。
    • 点击“Profile” > “Proxification Rules”,设置哪些应用需要通过代理,以及哪些应用可以直接访问。
  4. 测试代理

    • 使用 Proxifier 可以监控和调试代理连接,查看流量是否正确通过代理服务器进行转发。