在Ubuntu系统中搭建代理服务器是企业或个人用户常用的网络管理方式,可用于访问控制、流量监控、安全防护等场景,本文以Squid代理服务器为例,详细介绍在Ubuntu 20.04/22.04系统中搭建HTTP代理的完整流程,包括环境准备、安装配置、用户认证及高级优化等内容。

环境准备
在开始搭建前,需确保满足以下基本条件:
- 系统要求:推荐使用Ubuntu 20.04 LTS或22.04 LTS服务器版,最小化安装即可(关闭防火墙或提前放行代理端口)。
- 网络配置:服务器需具备静态IP地址(如192.168.1.100),并确保客户端能访问该IP。
- 权限要求:使用root用户或通过
sudo获取管理员权限。
关闭防火墙(临时)
若使用UFW防火墙,需放行代理默认端口(3128):
sudo ufw allow 3128/tcp sudo ufw reload
安装Squid代理服务器
Squid是开源的代理缓存服务器,支持HTTP、HTTPS、FTP等多种协议。
更新系统并安装Squid
sudo apt update && sudo apt upgrade -y sudo apt install squid -y
验证安装
安装完成后,检查Squid服务状态:

sudo systemctl status squid
若显示active (running),则表示服务已启动,默认情况下,Squid监听3128端口,仅允许本地访问。
配置Squid代理服务器
Squid的主配置文件位于/etc/squid/squid.conf,需根据实际需求修改关键参数。
备份原始配置
sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak
修改核心配置
使用vim或nano编辑配置文件:
sudo vim /etc/squid/squid.conf
以下为关键参数说明及修改建议:
| 参数 | 默认值 | 修改建议 | 说明 |
|---|---|---|---|
http_port |
3128 | http_port 3128 |
监听端口,可修改为其他未被占用的端口(如8080) |
visible_hostname |
无 | visible_proxy.example.com |
代理服务器主机名,客户端显示时使用 |
cache_dir |
/var/spool/squid |
cache_dir ufs /var/spool/squid 100 16 256 |
缓存目录设置(大小100MB,16个子目录,256级子目录) |
acl localnet src |
0.0.1/32 | acl localnet src 192.168.1.0/24 |
允许访问的网段,根据实际局域网段修改 |
http_access deny all |
deny all |
http_access allow localnet |
访问控制规则,默认拒绝所有,需添加允许规则 |
auth_param basic program |
无 | auth_param basic /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords |
启用基本认证(需提前创建密码文件) |
启用用户认证(可选)
为提高安全性,可配置用户名密码认证:
- 安装
apache2-utils工具(用于生成密码):sudo apt install apache2-utils -y
- 创建密码文件(如
/etc/squid/passwords)并添加用户:sudo touch /etc/squid/passwords sudo htpasswd -c /etc/squid/passwords user1 # 首次创建使用-c,后续添加用户去掉-c
- 修改Squid配置,添加认证规则:
在http_access段前添加:acl auth_users proxy_auth REQUIRED http_access allow auth_users
优化配置
- 禁用缓存(若仅需代理功能,无需缓存):
在cache_dir行前添加注释该行。 - 设置超时时间:
在配置文件末尾添加:request_timeout 120 # 请求超时120秒 read_timeout 300 # 读取超时300秒
启动并测试代理服务
重启Squid服务
sudo systemctl restart squid sudo systemctl enable squid # 设置开机自启
客户端配置测试
以Windows浏览器为例:
- 打开“Internet选项”→“连接”→“局域网设置”;
- 勾选“为LAN使用代理服务器”,输入服务器IP(192.168.1.100)和端口(3128);
- 若启用认证,需在浏览器中输入用户名密码。
命令行测试
使用curl命令验证代理是否生效:
curl -x http://user1:password@192.168.1.100:3128 http://www.example.com ``` 则表示代理配置成功。 ### 五、常见问题排查 1. **端口被占用**: 检查`netstat -tuln | grep 3128`,若被占用,修改`http_port`为其他端口。 2. **权限错误**: 确保Squid用户(`squid`)对配置文件和密码文件有读写权限: ```bash sudo chown -R squid:squid /etc/squid/passwords sudo chmod 600 /etc/squid/passwords
相关问答FAQs
Q1: 如何限制客户端只能访问特定网站?
A1: 可通过Squid的acl和http_access规则实现,仅允许访问example.com和test.com:
acl allowed_sites dstdomain .example.com .test.com http_access allow allowed_sites http_access deny all
修改后重启Squid服务即可生效。
Q2: Squid代理如何支持HTTPS流量?
A2: 默认情况下,Squid仅处理HTTP流量,若需支持HTTPS,需启用ssl_bump功能并配置证书:
- 在
squid.conf中添加:ssl_bump stare all http_port 3128 ssl-bump generate-host-certificates=on cert=/etc/squid/ssl_cert/squid.crt
- 生成证书并重启服务,注意:HTTPS代理需要客户端安装根证书,且可能存在中间人攻击风险,建议仅在信任网络中使用。
