CentOS 7系统如何设置全局HTTP代理上网?

在CentOS 7系统中配置HTTP代理服务器是一项常见且重要的网络管理任务,它能够实现网络访问控制、内容缓存、提升访问速度以及增强网络安全性,在企业或组织内部,通过部署代理服务器,可以集中管理所有客户端的网络请求,有效过滤不良信息,并对常用资源进行缓存,减少外部带宽的消耗,本文将以业界广泛使用的Squid软件为例,详细介绍在CentOS 7上搭建、配置和管理HTTP代理服务器的完整流程。

CentOS 7系统如何设置全局HTTP代理上网?

安装Squid代理服务器

Squid是一个功能强大、遵循GNU通用公共许可证的高性能代理缓存服务器,在CentOS 7上安装Squid非常直接,首先确保系统软件包是最新的,然后通过Yum包管理器进行安装。

打开终端,执行以下命令:

sudo yum update -y
sudo yum install squid -y

安装过程会自动处理所有依赖关系,安装完成后,Squid服务默认不会启动,其主配置文件位于/etc/squid/squid.conf,在进行任何修改之前,强烈建议备份原始配置文件,以便在出现问题时可以快速恢复。

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.bak

核心配置详解

Squid的强大功能主要体现在其灵活的配置上。/etc/squid/squid.conf文件包含了所有运行参数,我们将逐一解析关键的配置项。

定义访问控制列表 (ACL)

ACL是Squid进行访问控制的基础,它允许管理员根据源IP、目标域名、端口、时间等多种条件定义规则,其基本语法为 acl 名称 类型 值

以下是一些常用的ACL示例:

  • 定义允许访问代理的内部网络段

    acl localnet src 192.168.1.0/24  # 允许192.168.1.0网段的所有主机
    acl localnet src 10.0.0.0/8       # 允许10.0.0.0网段的所有主机
  • 定义禁止访问的网站列表

    acl blocked_sites dstdomain .example.com .badsite.net

    这里使用了dstdomain类型,它会匹配目标域名,注意域名前的点,它会匹配所有子域名。

  • 定义允许访问的网站白名单

    acl allowed_sites dstdomain .wikipedia.org .github.com
  • 定义SSL端口

    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后,需要使用http_access指令来应用这些规则。http_access规则遵循“自上而下,匹配即停止”的原则,因此规则的顺序至关重要。

一个安全且典型的规则顺序如下:

  1. 禁止访问不安全的端口

    http_access deny !Safe_ports
  2. 禁止访问非SSL的SSL端口

    CentOS 7系统如何设置全局HTTP代理上网?

    http_access deny CONNECT !SSL_ports
  3. 禁止访问黑名单网站

    http_access deny blocked_sites
  4. 允许本地网络管理(可选):

    http_access allow localhost manager
    http_access deny manager
  5. 允许定义的内部网络访问代理

    http_access allow localnet
  6. 拒绝所有其他访问

    http_access deny all

    这是最重要的安全防线,确保只有明确允许的流量才能通过代理。

其他重要参数

  • 监听端口http_port指令定义了Squid监听的端口,默认为3128,可以修改为其他端口,http_port 8080
  • 可见主机名:设置visible_hostname可以避免在错误日志或某些页面中显示主机名解析问题。
    visible_hostname proxy-server.mydomain.com
  • 缓存目录cache_dir指令定义了缓存数据的存储位置、大小和存储结构,默认配置通常足够使用。
    # cache_dir ufs /var/spool/squid 100 16 256

    这表示使用ufs存储方案,缓存目录为/var/spool/squid,总大小为100MB,分为16个一级子目录和256个二级子目录。

防火墙与端口管理

CentOS 7默认使用firewalld作为防火墙管理工具,配置完成后,必须开放Squid的监听端口,否则外部客户端无法连接。

执行以下命令开放默认的3128端口:

sudo firewall-cmd --permanent --add-port=3128/tcp
sudo firewall-cmd --reload

--permanent参数表示规则永久生效,--reload使规则立即生效,如果修改了http_port,请确保开放对应的端口。

启动与管理Squid服务

配置和防火墙设置完毕后,就可以启动Squid服务了。

sudo systemctl start squid
sudo systemctl enable squid  # 设置开机自启

可以使用以下命令检查服务状态:

sudo systemctl status squid

如果修改了配置文件,可以使用以下命令平滑地重载配置,无需中断服务:

sudo squid -k reconfigure

或者重启服务:

sudo systemctl restart squid

客户端配置指南

代理服务器搭建完成后,客户端需要进行相应配置才能使用。

命令行环境变量

对于需要通过代理访问网络的命令行工具(如yum, wget, curl),可以设置环境变量。

CentOS 7系统如何设置全局HTTP代理上网?

export http_proxy="http://192.168.1.10:3128"
export https_proxy="http://192.168.1.10:3128"
export no_proxy="localhost,127.0.0.1,192.168.1.0/24" # 定义不使用代理的地址

要将这些变量永久生效,可以将其添加到~/.bashrc/etc/profile文件中。

图形界面与浏览器设置

在Windows、macOS或Linux的图形界面中,通常在网络设置中找到代理配置选项,选择“手动代理配置”,然后输入代理服务器的IP地址和端口号(168.1.103128)。

在Firefox或Chrome浏览器中,也可以在各自的设置菜单中找到代理配置选项,并进行同样设置。


为了更清晰地回顾整个流程,下表小编总结了关键步骤:

步骤 命令/操作 说明
安装 sudo yum install squid -y 通过Yum安装Squid软件包。
备份配置 sudo cp /etc/squid/squid.conf ... 备份原始配置文件以防万一。
编辑配置 sudo vi /etc/squid/squid.conf 修改ACL和http_access规则。
开放防火墙 sudo firewall-cmd --add-port=3128/tcp --permanent 允许流量通过3128端口。
重载防火墙 sudo firewall-cmd --reload 使防火墙规则生效。
启动服务 sudo systemctl start squid 启动Squid代理服务。
设置开机自启 sudo systemctl enable squid 确保系统重启后服务自动运行。
客户端配置 设置浏览器或系统代理 指向代理服务器的IP和端口。

相关问答FAQs

问题1:我配置了Squid,但客户端无法连接,最可能的原因是什么?

答: 客户端无法连接是代理配置中最常见的问题,排查思路应遵循“由外到内”的原则:

  1. 防火墙问题:这是最常见的原因,请确认您已经使用firewall-cmd开放了Squid监听的端口(如3128),并且已经执行了--reload,可以使用sudo firewall-cmd --list-all来验证。
  2. ACL规则问题:检查http_access deny all规则是否放在了错误的位置,导致在允许您的客户端网络之前就拒绝了所有连接,请确保http_access allow localnet(或您自定义的ACL)在http_access deny all之前。
  3. SELinux问题:如果SELinux处于强制模式,它可能会阻止Squid监听非标准端口或连接到网络,可以临时将其设置为宽松模式(sudo setenforce 0)进行测试,如果问题解决,则需要为Squid配置正确的SELinux策略,而不是长期关闭它。
  4. 网络连通性:确保客户端能够ping通代理服务器的IP地址,并且两者之间没有其他网络设备(如硬件防火墙)阻断连接。

问题2:如何为Squid代理设置用户名和密码认证?

答: 为Squid添加基本认证可以有效控制代理的使用权限,步骤如下:

  1. 创建密码文件:使用htpasswd工具(由httpd-tools包提供)创建一个密码文件,如果尚未安装,请先运行sudo yum install httpd-tools -y

    # 创建密码文件并添加第一个用户(会提示输入密码)
    sudo htpasswd -c /etc/squid/passwd user1
    # 向现有文件添加更多用户(不要再用-c参数)
    sudo htpasswd /etc/squid/passwd user2
  2. 修改Squid配置:在/etc/squid/squid.conf文件中,添加认证相关的配置,通常在ACL定义部分添加:

    auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
    auth_param basic children 5
    auth_param basic realm Squid proxy-caching web server
    auth_param basic credentialsttl 2 hours
    acl authenticated proxy_auth REQUIRED
  3. 更新访问规则:将http_access规则从基于IP改为基于认证,找到类似http_access allow localnet的行,将其修改为:

    # http_access allow localnet  # 注释掉或删除基于IP的允许规则
    http_access allow authenticated
  4. 重载配置并重启服务

    sudo squid -k reconfigure

    完成后,客户端在首次使用代理时,浏览器会弹出一个对话框,要求输入在/etc/squid/passwd文件中设置的用户名和密码。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-08 13:08
下一篇 2025-10-08 13:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信