15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用
18.10.2024

如何为您的 cPanel 主机配置防火墙

在没有正确配置防火墙的情况下保护 cPanel 服务器,就像把数据中心的前门敞开一样。ConfigServer Security & Firewall (CSF) 是加固 cPanel 和 WHM 环境的事实标准——它直接集成到 WHM 界面中,封装了 iptables(或新版内核上的 nftables),并附带一个名为 Login Failure Daemon (LFD) 的守护进程,用于处理实时入侵检测。本指南将完整介绍生产级 CSF 部署:安装、规则架构、高级威胁缓解以及持续维护工作流程。

无论您运行的是 带 cPanel 的 VPS 还是完整的独立服务器,配置原则完全相同。区别在于,在独立服务器上您拥有独占的内核访问权限,这意味着 CSF 更激进的连接跟踪和 SYN 洪水防护功能可以被充分利用,而不会影响其他租户。

为什么 cPanel 服务器上的软件防火墙不可或缺

cPanel 在设计上暴露了大量攻击面。默认安装会开放数十个服务端口——WHM(2086/2087)、cPanel(2082/2083)、FTP(21)、邮件提交(587)、IMAP(993)、POP3(995)等。每个开放端口都是潜在的入侵向量。如果这些服务前面没有有状态的数据包过滤器:

  • 针对 SSH、FTP 和 Webmail 的暴力破解攻击会悄无声息地成功
  • 凭据填充机器人会猛烈攻击 xmlapicpsrvd 端点
  • 基于放大的 DDoS 流量会在应用层响应之前就使网卡饱和
  • 被入侵的共享主机账户可以在服务器内横向移动

网络边缘的硬件防火墙有所帮助,但它无法感知应用层上下文——它不知道某个 IP 在 60 秒内连续 20 次 IMAP 登录失败。CSF + LFD 在主机层面运行,能够精确响应这类行为信号。

CSF 与其他 cPanel 防火墙选项的对比

功能CSF + LFDFirewallDUFWAPF(已弃用)
WHM GUI 集成原生支持部分支持(旧版)
暴力破解检测内置(LFD)需要 BFD 插件
国家级封锁内置(CC_DENY/CC_ALLOW)
连接跟踪 / 速率限制内置(CT_LIMIT)仅手动规则仅手动规则
端口扫描检测内置(PS_INTERVAL)
SYN 洪水防护内置(SYNFLOOD)部分支持
集群/多服务器同步内置
持续维护是(2024)已停止维护

在 cPanel 环境中,CSF 在每个重要维度上都胜出。选择 firewalldufw 的唯一理由是您运行的是非 cPanel 技术栈,并且偏好更轻量的工具。

第一步:安装前检查清单

在执行任何命令之前,请完成以下检查。跳过这些步骤是管理员意外将自己锁定在生产服务器之外的原因。

验证您的带外访问。确认您可以访问托管服务商的控制台(KVM over IP、IPMI 或基于 Web 的 VNC 控制台)。如果 CSF 在测试期间封锁了您的 IP,控制台访问是您的恢复路径。

记录您的管理 IP 地址。在本地机器上运行以下命令:

curl -4 ifconfig.me

在启用强制模式之前,您需要在 CSF 中将此 IP 加入白名单。

检查现有的 iptables 状态:

iptables -L -n --line-numbers

如果已有其他防火墙工具(APF、firewalld)处于活动状态,请在安装 CSF 之前停止并禁用它,以防止规则冲突。

确认已安装 Perl(CSF 基于 Perl):

perl -v

在全新的 CentOS/AlmaLinux/CloudLinux 系统上,Perl 默认已安装。在最小化 Ubuntu 构建上,使用 apt install perl 安装它。

第二步:在 cPanel 服务器上安装 CSF

root 身份通过 SSH 连接到您的服务器:

ssh root@YOUR_SERVER_IP

下载、解压并运行安装程序:

cd /usr/src
wget https://download.configserver.com/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh

安装程序会将 CSF 注册为系统服务,安装 WHM 插件,并将主配置文件放置在 /etc/csf/csf.conf

运行内置的依赖检查,确认所有必需的 Perl 模块均已安装:

perl /usr/local/csf/bin/csftest.pl

标记为 FATAL 的行必须在继续之前解决。标记为 WARN 的行是可选功能——请查看,但它们不会阻止 CSF 正常运行。

验证已安装的版本:

csf -v

第三步:在 /etc/csf/csf.conf 中进行核心配置

在您偏好的编辑器中打开主配置文件:

nano /etc/csf/csf.conf

该文件包含大量注释。以下指令对安全影响最大,每次新部署时都必须审查。

测试模式

CSF 首次安装时,TESTING = "1" 默认启用。在此模式下,LFD 不会启动,也不会执行任何封锁——规则已加载但为临时状态。在将管理 IP 加入白名单并验证所有端口规则之前,请勿禁用测试模式。

TESTING = "0"   # Set this only after full validation

入站和出站端口允许列表

TCP_INTCP_OUT 定义了每个方向允许的 TCP 端口。一个最小但功能完整的 cPanel 服务器需要:

TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995,2077,2078,2082,2083,2086,2087,2095,2096"
TCP_OUT = "20,21,22,25,53,80,110,113,443,587,993,995"
UDP_IN = "20,21,53"
UDP_OUT = "20,21,53,113,123"

重要操作说明:端口 2087 是 WHM SSL,端口 2083 是 cPanel SSL。如果在将您的 IP 加入白名单之前从 TCP_IN 中删除这些端口,您将立即失去对控制面板的访问权限。端口 123(UDP 出站)是 NTP——删除它会破坏时间同步,进而导致 SSL 证书验证失败和邮件投递被拒。

关闭所有未在使用中的端口。在最终确定此列表之前,运行 ss -tlnp 审计实际监听的端口。

将管理 IP 加入白名单

在禁用测试模式之前,将您的 IP 添加到 /etc/csf/csf.allow

echo "YOUR.MANAGEMENT.IP # My office IP" >> /etc/csf/csf.allow

或者,直接使用 CSF 命令:

csf -a YOUR.MANAGEMENT.IP "Management workstation"

白名单中的 IP 可绕过所有 LFD 封锁和所有速率限制规则。请保持此列表最小化——每个条目都是对您安全策略的永久例外。

封锁已知恶意 IP

永久封锁写入 /etc/csf/csf.deny

csf -d MALICIOUS.IP.ADDRESS "Confirmed scanner"

对于从威胁情报源(Spamhaus DROP、Emerging Threats 等)批量导入的情况,直接将 CIDR 追加到 /etc/csf/csf.deny 并重新加载:

csf -r

第四步:配置 Login Failure Daemon (LFD)

LFD 是 CSF 的行为入侵检测组件。它实时追踪系统日志文件,统计每个源 IP 的认证失败次数,并在超过阈值时触发临时封锁。这是您抵御凭据暴力破解攻击的主要防线。

csf.conf 中的关键 LFD 指令:

指令推荐值效果
`LF_TRIGGER``10`触发临时封锁前的失败次数
`LF_INTERVAL``3600`回溯窗口(秒)
`LF_DURATION``3600`封锁持续时间(秒)
`LF_PERMBLOCK_COUNT``4`临时封锁达到此次数后永久封禁
`LF_PERMBLOCK_INTERVAL``86400`统计临时封锁次数的时间窗口
`LF_SSH``5`SSH 专用失败阈值
`LF_FTPD``10`FTP 失败阈值
`LF_CPANEL``10`cPanel 登录失败阈值
`LF_MODSEC``10`ModSecurity 触发阈值

需要了解的边缘情况:如果您的服务器位于 NAT 网关或共享办公室路由器后面,多个合法用户共享同一个外部 IP。将 LF_TRIGGER 设置得过低,会在几次输入错误后封锁整个办公室。要么提高阈值,要么在 csf.allow 中将办公室 IP 加入白名单。

LFD 还会监控可疑进程、目录监视事件和文件变更检测(LF_DIRWATCHLF_INTEGRITY 功能)。启用 LF_INTEGRITY 以检测对系统二进制文件的未授权修改:

LF_INTEGRITY = "3600"   # Check every hour

第五步:高级威胁缓解功能

SYN 洪水防护

SYN 洪水攻击通过发送大量 SYN 数据包而不完成握手来耗尽 TCP 连接表。启用 CSF 的内置缓解功能:

SYNFLOOD = "1"
SYNFLOOD_RATE = "100/s"
SYNFLOOD_BURST = "150"

这些值允许每秒 100 个新 SYN 数据包,突发允许量为 150,超过后规则触发。请根据您的合法峰值流量调整这些数值——促销活动期间的电商网站可能需要更高的突发值。

连接跟踪

连接跟踪限制单个 IP 在所有端口上的并发连接总数。这对于低速率 DDoS 攻击和连接耗尽攻击非常有效:

CT_LIMIT = "300"
CT_INTERVAL = "30"
CT_BLOCK_TIME = "1800"
CT_SKIP_LOCAL = "1"

CT_SKIP_LOCAL 防止本地主机和回环连接计入限制——在 cPanel 守护进程通过 TCP 内部通信的服务器上至关重要。

端口扫描检测

CSF 可以检测并封锁在短时间内探测多个端口的主机:

PS_INTERVAL = "300"
PS_LIMIT = "10"
PS_BLOCK_TIME = "3600"
PS_PERMANENT = "0"

在 300 秒内访问 10 个或更多关闭端口的 IP 将被封锁一小时。仅在您确信合法用户不会意外触发此规则时才设置 PS_PERMANENT = "1"——某些邮件客户端和监控工具在连接协商期间会探测多个端口。

国家级封锁

如果您的应用在某些高风险地区没有合法用户,在国家级别进行封锁可以显著减少日志中的噪音并降低 LFD 的工作负载。编辑 csf.conf

CC_DENY = "CN,RU,KP,NG"
CC_ALLOW = ""

国家代码遵循 ISO 3166-1 alpha-2 标准。CSF 会自动下载 GeoIP 数据。请谨慎使用——封锁整个国家是一种粗暴的手段。对于大多数部署,更好的方法是使用 CC_ALLOW(仅允许您用户所在的国家)并结合 CC_ALLOW_PORTS,将基于国家的访问限制在特定端口。

SMTP 出站限制

被入侵的 WordPress 安装和存在漏洞的脚本经常被用作垃圾邮件中继。CSF 可以将出站 SMTP 限制为仅授权的邮件进程:

SMTP_BLOCK = "1"
SMTP_ALLOWUSER = "mailman"
SMTP_ALLOWGROUP = "mail"

这会封锁所有端口 25 上的出站连接,除非来自以指定用户或组运行的进程。通过您的 MTA(cPanel 上的 Exim)进行的合法邮件投递不受影响,因为 Exim 以 mail 组运行。这一条指令消除了整类被入侵账户的垃圾邮件滥用问题。

如果您需要在托管服务旁边配备专业级出站邮件基础设施,可以考虑将您的服务器与专用的邮件托管解决方案配合使用,用于事务性和营销邮件。

第六步:应用和测试配置

审查完所有指令后,重新加载 CSF 以应用更改,无需完全重启:

csf -r

完全重启 CSF 和 LFD:

csf -ra

检查当前状态和活动规则数量:

csf -l

验证 LFD 是否正在运行:

systemctl status lfd

从外部 IP(非您的白名单管理 IP)测试端口封锁是否按预期工作。在另一台机器上使用 nmap

nmap -sS -p 1-65535 YOUR_SERVER_IP

只有 TCP_IN 中明确列出的端口应显示为开放状态。其他所有端口应返回 filtered

仅在此验证通过后才禁用测试模式:

# In /etc/csf/csf.conf, set TESTING = "0", then:
csf -r

第七步:WHM GUI 配置

对于偏好图形界面的管理员,CSF 完全集成到 WHM 中。导航至 WHM > 插件 > ConfigServer Security & Firewall。在此您可以:

  • 查看实时封锁列表并手动解封 IP
  • 添加临时和永久的允许/拒绝条目
  • 触发配置检查以验证 csf.conf 语法
  • 在分页、可搜索的界面中查看 LFD 日志
  • 在管理多台服务器时运行集群同步工具

WHM 界面对于需要在没有 SSH 访问权限的情况下解封合法客户 IP 的支持人员特别有用。有选择地向 WHM 经销商账户授予 CSF 插件访问权限——并非每个经销商都需要防火墙管理能力。

第八步:监控、日志分析和维护

实时日志监控

LFD 将封锁事件写入 /var/log/lfd.log。在活跃事件期间追踪它:

tail -f /var/log/lfd.log

CSF 自身的活动日志位于 /var/log/csf.log。查看过去 24 小时内最频繁被封锁的 IP 摘要:

grep "Blocked" /var/log/lfd.log | awk '{print $NF}' | sort | uniq -c | sort -rn | head -20

邮件告警

配置 LFD 向您的管理地址发送告警:

LF_ALERT_TO = "admin@yourdomain.com"
LF_ALERT_FROM = "lfd@yourdomain.com"

启用特定告警类型:

LF_EMAIL_ALERT = "1"      # Block alerts
LT_EMAIL_ALERT = "1"      # Login tracking alerts
RT_EMAIL_ALERT = "1"      # Resource usage alerts

避免在繁忙的服务器上启用所有告警类型——告警疲劳会导致管理员开始忽略通知,这完全违背了初衷。

更新 CSF

CSF 频繁发布更新。运行内置更新程序:

csf -u

这会下载最新版本,保留您的配置文件,并重启服务。在每周 cron 任务中安排此操作:

0 3 * * 0 /usr/sbin/csf -u >> /var/log/csf_update.log 2>&1

与 cPHulk 集成

cPanel 附带了自己的暴力破解防护工具 cPHulk。同时运行 cPHulk 和 LFD 会产生冗余封锁,并在事件响应期间造成混乱。推荐做法:禁用 cPHulk,完全依赖 LFD,后者更具可配置性,并与 CSF 的统一封锁列表集成。

通过 WHM 的 安全中心 > cPHulk 暴力破解防护禁用 cPHulk。

多服务器环境的防火墙架构

如果您管理多台 cPanel 服务器——这在VPS 托管集群或主 Web 服务器与独立数据库服务器配对的常见模式中很常见——CSF 的集群同步功能可让您同时将封锁列表传播到所有节点。

/etc/csf/csf.conf 中配置集群成员:

CLUSTER_MASTER = "PRIMARY_SERVER_IP"
CLUSTER_SENDTO = "SECONDARY_SERVER_IP"
CLUSTER_RECVFROM = "PRIMARY_SERVER_IP"
CLUSTER_KEY = "your_shared_secret_key"

当 LFD 在主服务器上封锁某个 IP 时,该封锁会在几秒内自动推送到所有集群成员。当扫描您 Web 服务器的扫描器同时尝试对您的数据库节点进行 SSH 暴力破解时,这尤为有价值。

对于与 Web 服务并行运行 GPU 密集型工作负载的高流量环境,GPU 托管基础设施同样受益于相同的 CSF 加固方法——防火墙配置完全相同,但 CT_LIMIT 值通常需要更高,以适应合法的并行 API 连接。

SSL 和端口安全注意事项

防火墙控制对端口的访问,但不验证这些端口上连接的加密完整性。确保通过防火墙规则暴露的每个服务都受到有效 SSL/TLS 证书的保护。端口 443 开放但证书过期或使用自签名证书,是钓鱼和中间人攻击的风险。

将您的防火墙配置与来自受信任 CA 的正规证书配合使用。AlexHost 提供直接与 cPanel AutoSSL 工作流集成的 SSL 证书,确保您暴露的 HTTPS 端点在加密上是可靠的。

常见陷阱及如何避免

初始设置时将自己锁定在外。在设置 TESTING = "0" 之前,务必将您的 IP 加入 csf.allow 白名单。在进行强制模式更改之前,务必确认控制台访问权限。

封锁 cPanel 自身的内部服务。cPanel 守护进程通过本地主机通信,有时也通过服务器的主 IP 通信。CT_SKIP_LOCAL = "1" 和对 TCP_OUT 的仔细审查可防止自我造成的服务中断。

在共享主机上过于激进的 LF_DURATION如果合法用户与攻击者共享同一个 NAT IP,24 小时封锁会惩罚无辜客户。使用 LF_DURATION = "3600"LF_PERMBLOCK_COUNT = "4",仅将重复违规者升级为永久封禁。

忘记开放监控代理端口。如果您使用外部监控服务(Zabbix、Nagios、Datadog),其代理需要一个开放的入站端口。将其添加到 TCP_IN,并在 csf.allow 中将监控服务器的 IP 加入白名单。

不测试出站规则。管理员专注于入站 TCP_IN,却忽视了 TCP_OUT。过于严格的出站规则会破坏 cPanel 的更新系统、Let’s Encrypt 证书续期(到 ACME 服务器的端口 80 出站)以及远程 MySQL 连接。

在使用 Cloudflare 代理的服务器上运行 CSF。当流量通过 Cloudflare 时,CSF 看到的源 IP 是 Cloudflare 边缘节点 IP,而非真实访客 IP。封锁某个 Cloudflare IP 会封锁通过该边缘节点的所有流量。使用 csf.allow 文件将 Cloudflare 发布的 IP 范围加入白名单,并配置您的应用读取 CF-Connecting-IP 头部以获取真实访客 IP。

技术决策矩阵:选择您的 CSF 配置方案

服务器类型`CT_LIMIT``LF_TRIGGER``SYNFLOOD_RATE``CC_DENY``SMTP_BLOCK`
小型博客 / 个人网站100550/s可选1(启用)
商业 cPanel 共享主机20010100/s推荐1(启用)
高流量电商50015300/s可选1(启用)
开发 / 测试服务器100020200/s0(禁用)
多租户 WHM 经销商30010150/s推荐1(启用)

关键要点:生产就绪检查清单

在认为您的 CSF 部署已达到生产就绪状态之前,请验证以下每一项:

  • 管理 IP 已存在于 /etc/csf/csf.allow 中,并通过 csf -g YOUR.IP 确认
  • TESTING = "0" 已设置,且 csf -r 已运行
  • TCP_IN 仅包含具有活跃、有意开放服务的端口——已通过 ss -tlnp 验证
  • SMTP_BLOCK = "1" 已启用,除非服务器是专用邮件中继
  • LFD 正在运行——已通过 systemctl status lfd 确认
  • LF_PERMBLOCK_COUNTLF_PERMBLOCK_INTERVAL 已配置为对重复违规者进行升级处理
  • CT_LIMIT 已设置并根据预期峰值并发连接数进行调整
  • SYNFLOOD = "1" 已启用,速率值适合您的流量规模
  • 邮件告警已配置,且已收到测试告警
  • cPHulk 已在 WHM 中禁用,以防止与 LFD 冲突
  • 每周 csf -u cron 任务已安排
  • 控制台/IPMI 访问已独立于 SSH 进行测试
  • 出站端口规则(TCP_OUT)已验证——cPanel 更新、Let’s Encrypt 和 NTP 均正常运行
  • 如果使用 Cloudflare,Cloudflare IP 范围已在 csf.allow 中加入白名单

常见问题

CSF 与硬件防火墙有什么区别,我需要两者都用吗?

硬件防火墙在网络边界运行,在流量到达服务器网卡之前进行过滤。CSF 在操作系统层面运行,提供硬件防火墙无法实现的应用感知行为检测——例如在 IP 多次 cPanel 登录失败后将其封锁。在生产环境中,两个层次相互补充。硬件过滤减少容量型 DDoS 负载;CSF 处理有针对性的入侵尝试。

如何解封 CSF 永久封禁的 IP?

运行 csf -dr BLOCKED.IP.ADDRESS 将其从拒绝列表中移除,然后运行 csf -r 重新加载规则。或者,使用 WHM CSF 插件界面中的”解封 IP”功能。为防止重新封锁,使用 csf -a IP.ADDRESS "reason" 将该 IP 添加到 csf.allow

CSF 会干扰 Let’s Encrypt / AutoSSL 证书续期吗?

只有在 TCP_OUT 中封锁了端口 80 出站,或 Let’s Encrypt 验证服务器 IP 意外出现在 csf.deny 中时才会。确保端口 80 同时存在于 TCP_IN(用于 HTTP-01 质询响应)和 TCP_OUT(用于 ACME 服务器通信)中。如果安装 CSF 后续期失败,检查 csf.deny 中是否有 Let’s Encrypt IP 范围,并查看 /var/log/lfd.log 中被封锁的出站连接。

如何在不冒锁定风险的情况下安全测试新的 CSF 规则?

通过在 csf.conf 中设置 TESTING = "1" 并运行 csf -r 临时重新启用测试模式。在测试模式下,规则已加载但不强制执行,LFD 也不会启动。验证您的更改后,设置 TESTING = "0" 并重新加载。在切换回强制模式之前,务必确认控制台访问权限。

CSF 能防护 SQL 注入或 XSS 等应用层攻击吗?

不能。CSF 在网络层和传输层(L3/L4)运行,对 HTTP 请求负载没有可见性。应用层攻击需要 Web 应用防火墙(WAF),例如带有 OWASP 核心规则集的 ModSecurity,它与 cPanel 服务器上的 Apache 和 Nginx 集成。CSF 和 ModSecurity 相互补充——CSF 处理网络层威胁,而 ModSecurity 处理 HTTP 层攻击。LFD 可以通过 LF_MODSEC 指令配置为封锁反复触发 ModSecurity 规则的 IP。

15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用