分类: 安全相关

  • FortiGate 无法连接 FortiGuard:2026 年 9 月 CRL Scope 错误解决方法

    今天登录飞塔防火墙遇到一个比较奇怪的 FortiGate 故障:管理界面突然提示:

    无法连接到 FortiGuard 服务器

    刚开始我以为是普通的网络或者 DNS 问题,因此按照常规思路进行了排查。

    甚至连续重启了 3 次设备,但问题依然存在。

    之后又检查了 Internet 连通性、Ping 公网 IP、Ping FortiGuard 服务器,并且更换了 DNS,但还是没有解决。

    最后在继续排查的过程中,我查到了 Fortinet 官方社区发布的 Technical Tip,才发现这是 2026 年 9 月 FortiGuard Anycast 的 CRL Scope 问题。

    最终通过 Fortinet 官方给出的方式重新初始化 FortiGuard Anycast,问题恢复。

    本文记录整个排查和解决过程,希望能够帮助遇到相同问题的 FortiGate 用户。

    1. 故障现象

    FortiGate 管理界面出现:

    Unable to connect to FortiGuard servers
    

    中文界面则类似:

    无法连接到 FortiGuard 服务器
    

    同时 FortiGuard 相关服务出现异常,安全数据库也无法正常更新。

    这类问题第一反应通常是:

    • Internet 是否断了?
    • DNS 是否异常?
    • 默认路由是否有问题?
    • FortiGuard 服务器是不是故障了?
    • 上游防火墙是不是拦截了 FortiGuard?
    • FortiGate 是否需要重启?

    因此我也是按照这个思路开始排查。


    2. 第一步:重启设备

    最简单的方法当然是重启。

    但是这次比较尴尬的是:

    重启一次没有解决。

    于是又重启了一次。

    还是没有解决。

    最后甚至连续重启了 3 次,问题依然存在。

    这时候基本可以确定:

    这不像是简单的 FortiGate 临时状态异常。

    如果只是某个进程或者临时连接状态卡住,正常情况下重启应该有一定概率恢复。

    但连续重启仍然无法解决,说明需要进一步从网络和 FortiGuard 服务本身进行排查。


    3. 检查 Internet 是否正常

    首先通过 FortiGate CLI 测试公网 IP:

    execute ping 8.8.8.8
    

    可以正常收到响应。

    例如:

    4 packets transmitted, 4 packets received, 0% packet loss
    

    这说明:

    • WAN 正常
    • 默认路由正常
    • FortiGate 可以访问 Internet

    因此可以基本排除:

    FortiGate 完全无法访问 Internet。


    4. 检查 FortiGuard 服务器

    接下来测试 FortiGuard 相关域名:

    execute ping service.fortiguard.net
    

    然后:

    execute ping update.fortiguard.net
    

    以及:

    execute ping guard.fortinet.net
    

    这些域名都可以正常解析,并且可以收到服务器返回的数据。

    例如:

    PING update.fortiguard.net
    

    可以正常解析到 Fortinet 的服务器地址,并收到 ICMP 响应。

    这时候就出现了一个非常奇怪的现象:

    Internet              pass
    DNS                   pass
    FortiGuard 域名解析     pass
    Ping FortiGuard       pass
    FortiGuard 服务       error
    

    也就是说,FortiGate 明明可以访问 Fortinet 的服务器,但是 FortiGuard 依然提示无法连接。


    5. 更换 DNS

    既然 FortiGuard 出现问题,第二个怀疑对象就是 DNS。

    于是又更换了 DNS 服务器进行测试。

    例如:

    1.1.1.1
    8.8.8.8
    

    更换 DNS 后重新测试:

    execute ping update.fortiguard.net
    

    域名依然能够正常解析。

    但是:

    FortiGuard 仍然无法正常连接。

    所以到这里,基本可以排除普通 DNS 故障。


    6. 手动执行 FortiGuard 更新

    接下来通过 CLI 强制执行一次 FortiGuard 更新:

    execute update-now
    

    这个命令用于立即触发 FortiGuard 数据库更新。

    需要注意:

    execute update-now 是更新 FortiGuard 安全数据库,并不是升级 FortiOS 固件。

    执行之后没有看到特别明显的错误信息。

    但是检查数据库版本后发现,FortiGuard 数据库依然没有正常更新。

    这时候就越来越不像普通的网络故障了。


    7. 最终发现:CRL Scope 错误

    如果基础网络正常,但 FortiGuard 仍然无法连接,可以进一步打开更新服务 Debug:

    diagnose debug application update -1
    diagnose debug application forticldd -1
    diagnose debug enable
    [...]
    [365] __ssl_crl_verify_cb: Cert error 44, different CRL scope. Depth 2
    [1436] SSL_dump_handshake_err: Certificate failed verification. Error: 44 (different CRL scope), depth: 2, subject: /C=US/O=DigiCert Inc/OU=http://www.digicert.com/CN=DigiCert High Assurance EV Root CA.
    [...]
    

    Debug 中出现:

    Cert error 44, different CRL scope
    
    Certificate failed verification.
    Error: 44 (different CRL scope)
    

    继续排查之后,我也发现了 Fortinet 官方社区发布的相关 Technical Tip。

    官方确认,2026 年 9 月出现了一起 FortiGate 无法访问部分 FortiGuard 服务的问题。

    Fortinet 官方说明,这个问题影响使用特定 DigiCert 证书链的 FortiGuard Anycast 服务。

    这也解释了为什么:

    Ping FortiGuard       pass
    DNS                          pass
    Internet                    pass
    FortiGuard TLS       error
    

    问题并不是网络层无法到达服务器,而是TLS 连接建立过程中,证书撤销检查出现了问题。


    8. CRL 是什么?

    CRL 的全称是:

    Certificate Revocation List

    中文一般叫:

    证书吊销列表

    它用于检查一个数字证书是否已经被证书颁发机构吊销。

    FortiGate 在与 FortiGuard 建立 TLS 连接的时候,会对服务器证书链进行验证,其中就涉及证书撤销检查。

    而这次问题与 DigiCert 对相关 CRL 文件进行调整有关。

    Fortinet 官方说明,2026 年 9 月 9 日,DigiCert 更新了相关 CRL 的内容,并增加了:

    Issuing Distribution Point
    

    也就是:

    IDP
    

    扩展。

    FortiGate 在执行证书撤销检查时触发了 CRL Scope 校验问题,最终出现:

    Error 44: different CRL scope
    

    导致 TLS 握手失败。

    需要特别注意:

    这并不意味着相关 DigiCert 证书真的被吊销。

    Fortinet 官方明确说明,这次问题不是证书被吊销,而是 CRL / IDP 的变化触发了 FortiGate 当前证书撤销检查机制中的问题。


    9. 为什么重启和换 DNS 都没用?

    现在回头看整个故障过程,就比较容易理解了。

    我的排查过程实际上是:

    FortiGate
       │
       ├── Internet ───────────── pass
       │
       ├── DNS ─────────────── pass
       │
       ├── Ping FortiGuard ──────── pass
       │
       ├── FortiGuard TCP/TLS ───── error
       │
       └── Certificate / CRL
                    │
                    └── Error 44
                        different CRL scope
    

    所以:

    重启设备

    只能解决设备自身进程、连接状态等临时问题。

    但是无法解决远端证书链和本地 CRL 验证逻辑之间的问题。

    更换 DNS

    只能解决域名解析问题。

    但 DNS 本身就是正常的,所以换 DNS 自然也不会解决 TLS 证书验证失败。

    Ping FortiGuard

    只能证明 ICMP 网络可达。

    Ping 通并不代表 HTTPS/TLS 一定能够正常建立。

    这也是这次故障最容易误判的地方。


    10. Fortinet 官方解决方法

    幸运的是,在排查过程中发现了 Fortinet 官方社区的 Technical Tip。

    Fortinet 后续更新说明,DigiCert 已经撤回了相关 CRL 的 IDP 修改,因此 Anycast FortiGuard 服务本身的问题已经得到缓解。

    对于仍然受到影响的设备,Fortinet 建议清理 FortiGate 上的相关 CRL Cache。

    官方给出的操作非常简单。

    首先关闭 FortiGuard Anycast:

    config system fortiguard
        set fortiguard-anycast disable
    end
    

    然后重新开启:

    config system fortiguard
        set fortiguard-anycast enable
    end
    

    最后执行一次:

    execute update-now
    

    执行之后,FortiGuard 恢复正常。

    也就是说,最终并没有修改:

    • DNS
    • WAN
    • 默认路由
    • 防火墙策略
    • Internet 出口

    而是通过重新初始化 FortiGuard Anycast,让设备清理相关 CRL Cache,恢复了 FortiGuard 的连接。


    11. 如果仍然无法解决

    Fortinet 官方还提供了一个更直接的临时 workaround:

    关闭 Anycast,改用 Unicast FortiGuard。

    config system fortiguard
        set fortiguard-anycast disable
        set protocol udp
        set port 8888
        set sdns-server-ip 208.91.112.220 173.243.140.53 210.7.96.53 200.91.112.220
    end
    
    execute update-now
    

    Fortinet 说明,这种方式通过切换到 Unicast FortiGuard 来绕开受影响的 Anycast 服务。

    同时,这些设置不会影响 FortiGate 正常的生产转发流量。

    不过现在 DigiCert 已经撤回相关 CRL 的 IDP 修改,因此如果重新启用 Anycast 后已经恢复正常,通常没有必要长期关闭 Anycast。

    12. 这次故障给我的一个经验

    这次问题其实挺有意思。

    一开始我认为是:

    “FortiGuard 连不上,是不是我的网络有问题?”

    于是:

    1. 重启设备;
    2. 再次重启;
    3. 第三次重启;
    4. 检查 Internet;
    5. Ping 8.8.8.8;
    6. Ping FortiGuard;
    7. 检查 DNS;
    8. 更换 DNS;
    9. CLI 手动执行更新。

    结果全部没有解决。

    还好最后继续查了 Fortinet 官方社区。

    才发现原来 2026 年 9 月 Fortinet 官方已经针对这个问题发布了 Technical Tip。

    这也让我意识到:

    遇到 FortiGuard 这类云服务异常时,不要只盯着本地网络排查,也要及时检查 Fortinet 官方社区和官方服务状态。

    尤其是当:

    Internet 正常
    DNS 正常
    Ping FortiGuard 正常
    

    但 FortiGuard 仍然不可用的时候,就应该开始考虑:

    • TLS
    • 证书
    • CRL
    • FortiGuard Anycast
    • FortiGuard 服务端变化

    而不是一直重复修改 DNS 或重启设备。 真正的问题是 2026 年 9 月 FortiGuard Anycast 与 DigiCert CRL / IDP 变化引发的 CRL Scope 验证问题。 这次排障也再次说明:

    网络能通 ≠ 应用层服务一定正常。

    尤其是涉及 HTTPS、TLS、证书链和 CRL 的服务,仅仅 Ping 通服务器远远不够。

  • Copy Fail 与 Dirty Frag:Linux Page Cache 提权漏洞中的状态一致性问题

    最近Linux 内核安全研究中出现了两起受到广泛关注的本地提权漏洞:

    • Copy Fail(CVE-2026-31431)
    • Dirty Frag(CVE-2026-43284 / CVE-2026-43500)

    从公开分析来看,两者都属于 Linux Local Privilege Escalation(LPE)类别,但其技术路径并不完全落在传统的 memory corruption 模型中。

    更值得注意的是,它们都指向了同一个方向:

    Linux Kernel 在 Page Cache、Pipe Buffer 以及跨子系统对象生命周期管理中的状态一致性问题,正在逐渐演化为一类新的攻击面。

    传统 LPE 研究通常围绕:

    • use-after-free
    • heap corruption
    • race condition
    • refcount bug

    但近年来的漏洞开始更多涉及:

    • Page Cache consistency
    • splice / zero-copy data path
    • buffer ownership transfer
    • fragment lifecycle transition
    • subsystem state synchronization

    从安全研究与云安全的角度,尝试对这类问题进行更谨慎的结构化分析,而不依赖未完全确认的 root-cause 假设。

    1. 攻击面变化:Page Cache 的角色正在改变

    Linux Page Cache 原本的设计目标是性能优化与 I/O 加速,它横跨多个关键子系统:

    • VFS(Virtual File System)
    • Memory Management
    • Block Layer
    • File Mapping
    • Writeback Mechanism

    在理想模型中,Page Cache 应当满足严格的一致性约束:

    文件内容、缓存视图与权限状态应保持一致。

    但从近年来漏洞演化来看,这一假设在复杂路径下正在变得脆弱。

    以 Dirty Pipe 为代表的一类问题已经证明:

    攻击者可以通过 buffer 语义与内核路径组合,影响 Page Cache 中的只读映射行为。

    Copy Fail 与 Dirty Frag 则进一步将问题扩展到:

    Page Cache 与跨 subsystem 状态同步之间的边界问题。

    2. Copy Fail:Page Cache 写入路径的异常语义

    根据 Microsoft 与 Tenable 的公开分析,Copy Fail(CVE-2026-31431)与 Linux AF_ALG 子系统及 splice() 路径相关。

    漏洞的核心并不在于单一 memory corruption,而更接近于:

    在特定 copy/pipe 组合路径中,Page Cache 写入权限状态被错误继承或误判。

    可以抽象为如下逻辑结构:

    splice(fd, ..., pipefd[1], ...);
    
    /* kernel state: page appears writable under certain conditions */
    
    write(pipefd[1], buf, len);

    利用 splice + pipe buffer 的状态机缺陷,使 write() 误写入 Page Cache,从而实现内核级数据污染或提权

    关键问题不在 syscall 本身,而在于:

    • page ownership state
    • write permission inference
    • pipe buffer semantics

    之间的不一致。

    从结果来看,该类问题可能导致:

    • 文件缓存内容被间接修改
    • 磁盘文件本身未发生变化
    • 传统完整性检测无法直接观测异常

    因此其风险模型更接近:

    Page Cache-based integrity divergence

    而非传统 file overwrite exploit。

    3. Dirty Frag:跨子系统 fragment 状态一致性问题(仍在研究中)

    Dirty Frag(CVE-2026-43284 / CVE-2026-43500)在公开资料中被描述为涉及:

    • ESP/IPSec
    • RxRPC
    • 网络封装与 fragment 处理路径

    相关分析可参考:

    从目前公开信息来看,需要谨慎区分两点:

    已确认部分

    • 漏洞可用于本地提权
    • exploit 不依赖传统 race condition
    • 与 fragment/page 相关内核路径有关
    • 涉及网络 stack 与 memory subsystem 交互

    未完全确认部分

    • 完整 root-cause 机制
    • 是否为单点 bug 或组合条件问题
    • 是否主要来自 refcount / ownership 错误 / state machine error

    因此,更稳妥的研究表述是:

    Dirty Frag 可能反映了 Linux 内核在 page/fragment 生命周期管理中跨 subsystem 状态同步的复杂性问题。

    而不是将其归因于单一类型 bug。

    4. 为什么这类漏洞对云环境影响更显著

    从云安全角度来看,这类 LPE 漏洞的风险模型与传统主机环境不同。

    原因在于:

    现代云基础设施普遍具有以下特征:

    • container 与 host kernel 共享
    • 多租户运行在同一 kernel 上
    • runtime 依赖 namespace/cgroup isolation
    • CI/CD 与 ephemeral workload 大量存在

    因此一旦低权限进程具备 LPE 能力,其影响可能扩展为:

    • Container escape
    • Node compromise
    • Kubernetes workload takeover
    • Multi-tenant isolation bypass

    更关键的是:

    在 Page Cache 类漏洞中,攻击行为可能不会直接修改磁盘文件,因此:

    • 文件完整性检测(FIM)
    • hash-based monitoring
    • 基于落地行为的 EDR

    可能无法完整覆盖攻击路径。

    5. Linux Kernel exploitation 的趋势变化

    从历史来看,Linux kernel exploit 主要集中在:

    • heap corruption
    • use-after-free
    • race condition
    • type confusion

    但随着内核加固机制逐步增强:

    • KASLR
    • SMEP / SMAP
    • refcount hardening
    • allocator hardening

    传统 memory corruption exploit 的成本正在上升。

    与此同时,研究方向逐渐转向:

    • object ownership model
    • lifecycle transition correctness
    • cache coherence assumptions
    • subsystem interaction boundaries
    • state machine consistency

    Copy Fail 与 Dirty Frag 更接近这一趋势,而不是传统漏洞类型的简单延续。

    特别是在:

    • Page Cache
    • splice / zero-copy path
    • pipe buffer semantics
    • fragment handling

    这些复杂路径中,状态一致性问题正在变得更加重要。

    6. 安全运营视角:可观测性问题而非单点漏洞问题

    从安全运营角度来看,这类漏洞的核心挑战不在于“是否已修复”,而在于:

    攻击行为在 runtime 层可能不可见。

    原因包括:

    • 文件未发生变化
    • syscall 行为合法
    • 无明显 persistence artifact
    • 内核层状态异常不反映到用户态

    因此传统检测体系可能需要补充:

    6.1 Runtime telemetry(优先 eBPF)

    • syscall graph tracing
    • kernel function behavior monitoring
    • unusual splice / pipe activity detection

    6.2 容器层隔离强化

    • seccomp profiles
    • minimal capability sets
    • rootless container design

    6.3 高风险路径建模

    重点关注:

    • splice()
    • pipe buffer reuse patterns
    • AF_ALG usage patterns
    • Page Cache write anomaly signals

    7. Copy Fail 与 Dirty Frag 并不只是新增的 Linux LPE 漏洞。

    它们更重要的意义在于:

    Linux Kernel 的攻击面正在从“内存破坏模型”,逐步扩展到“状态一致性模型”。

    尤其是在 Page Cache 与跨 subsystem 交互路径中,传统基于 memory corruption 的安全假设正在被逐步弱化。

    对于安全研究而言,这意味着攻击面正在变得更抽象、更系统化。

    而对于云安全与安全运营而言,挑战也在发生变化:

    问题不再只是“是否存在漏洞”,而是:

    如何在 runtime 层观测到这些“非破坏型状态异常”。

  • AI代码生成安全策略:内网隔离与私有化模型落地指南

    AI代码生成进入企业应用后,安全成核心问题,使用AI快速生成代码已成为现实。但一个随之而来的问题也变得紧迫:生成的代码涉及商业逻辑、客户数据、技术架构,是否应该继续依赖云端模型,还是应该隔离到内网? 内网隔离和私有化模型不是可有可无的功能,而是企业安全策略的重要组成。与其担心成本,不如从风险角度审视:一次泄露损失远大于长期的架构投资。

    现在的问题不是”要不要用AI生成代码”,而是”如何安全地用AI生成代码”。 这不仅是技术问题,更是关乎企业安全战略的决策。本文基于实践经验,分享我的观察和思考。

    为什么要重新审视AI代码生成的安全性?

    在过去,代码是有形资产,保管在源代码库和服务器里。但AI改变了这一切:

    1. 数据流动的不透明性

    当你将代码片段发送给云端AI模型(如ChatGPT、Claude)来生成代码时:

    • 代码被上传到第三方服务器
    • 可能被用于模型训练(如果未关闭相关选项)
    • 存储在云端的日志中
    • 可能在隐私政策更新时被用于新的目的

    风险:公司的业务逻辑、系统架构、API设计等敏感信息外泄。

    2. 法规遵从的困境

    不同国家和行业有不同的数据保护要求:

    • 欧盟:GDPR对数据跨境传输有严格限制
    • 中国:网络安全法、数据安全法要求重要数据本地存储
    • 金融行业:更严格的信息安全要求
    • 医疗行业:HIPAA等法规对患者数据保护

    3. 竞争情报泄露

    AI模型经过大规模数据训练,理论上可以记忆或推断输入数据模式。虽然开发者声称不会这样做,但:

    • 技术上仍存在风险
    • 合同条款可能变更
    • 子公司可能有不同的政策

    4. 供应链安全考虑

    一旦依赖某个AI厂商,就引入了新的供应链风险:

    • 服务可用性(宕机、限流)
    • 价格变化
    • 政策突变
    • 地缘政治风险

    现状对比:云端vs内网模型

    云端模型(如ChatGPT、Claude)

    优势:

    • 能力最强,模型参数量大
    • 无需本地计算资源
    • 维护成本低
    • 快速迭代,总是最新版本

    劣势:

    • 数据可能外泄
    • 成本随使用量增加
    • 依赖网络连接
    • 无法自定义
    • 法规遵从困难

    私有化蒸馏模型(本地部署)

    优势:

    • 数据完全本地化,无外泄风险
    • 符合各类法规要求
    • 可离线运行
    • 长期成本更低
    • 可针对公司业务优化

    劣势:

    • 需要本地计算资源(特别是GPU)
    • 模型能力较弱(通常比开源模型好,比闭源模型差)
    • 需要技术团队维护
    • 初期部署成本高
    • 需要持续更新

    我的建议方案:分层防御

    基于安全性、成本与工程可实现性,推荐将AI代码生成方案分成三层,形成层级防护策略:

    第一层:云端模型(开放区)

    使用场景:

    • 学习和探索性编程
    • 公开技术讨论
    • 通用工具代码(如数据处理函数)
    • 非敏感算法实现

    操作规范:

    • 允许:通用函数、公开库调用、技术原理咨询
    • 禁止:核心业务逻辑、API密钥、数据库连接字符串、客户数据、架构图

    第二层:私有化蒸馏模型(内网区)

    使用场景:

    • 核心业务逻辑编码
    • 敏感模块生成
    • 涉及客户或企业数据的功能
    • 系统架构与权限控制相关代码

    第二层目标:数据在企业可控网络内流转,避免敏感信息进入公共云。

    第三层:代码审查与合规控制

    不论模型部署方式,都应强制执行:

    1. 不直接上生产:AI生成代码需人工审核
    2. 代码审查:资深工程师复核
    3. 敏感词扫描:自动检测敏感字段(密钥、账号、IP等)
    4. 依赖评估:验证第三方库安全性
    5. 安全审计:定期检查模型调用日志与数据流

    常见疑虑和解答

    Q: 私有化模型的能力会不会太弱?

    A: 这取决于选择。目前的开源模型在代码生成上已经相当不错。虽然不如最强的闭源模型,但对企业内部使用完全足够。关键是合适即可,不必最强。而且私有化模型可以微调,针对公司代码风格优化。

    Q: 我们公司很小,负担不起模型的投入啊?

    A: 有几个选择:

    1. 使用开源模型,租用按小时计费的GPU
    2. 多个公司共享一套私有化部署(虽然涉及信息共享)
    3. 优先保护最敏感的部分,其他部分先用云端
    4. 等待模型成本进一步下降(正在发生)

    Q: 云端模型是否真的会泄露数据?

    A: 根据公开信息:

    • OpenAI、Anthropic都承诺不用对话来训练模型(可选中禁用)
    • 但源代码中的数据依然被传输和储存
    • 即使不主动泄露,也存在被黑客窃取、员工泄露等风险
    • 风险永远存在于数据传输过程

    Q: 团队不愿意放弃ChatGPT怎么办?

    A: 这很正常。建议:

    1. 明确禁止使用ChatGPT处理敏感代码(制度强制)
    2. 为团队提供同样好用的内部替代品
    3. 展示安全事件的案例(激励改变)
    4. 渐进式迁移而不是一刀切
  • 在 FortiGate 中配置 Spamhaus DROP 列表:实现恶意网段自动同步与拦截

    通过 FortiGate 外部连接器 (External Connectors) 自动化集成 Spamhaus DROP 威胁情报。该方案通过 curl 与 jq 提取恶意 CIDR 网段,并利用防火墙的 Threat Feed 功能实现动态同步,旨在为企业边界安全提供一层自动化的“零误伤”过滤屏障。

    一、 环境准备:获取并整理 DROP 列表

    Spamhaus 提供的 DROP (Don’t Route Or Peer) 列表包含了由恶意组织控制的网段。其原始格式为 JSON,需转换为 FortiGate 兼容的纯文本。

    1. 原始格式预览

    {"cidr":"1.10.16.0/20","sblid":"SBL256894","rir":"apnic"}
    {"cidr":"1.19.0.0/16","sblid":"SBL434604","rir":"apnic"}

    2. 数据提取脚本

    在你的 Web 服务器(或中转服务器)上运行以下命令,提取 cidr 字段并生成纯文本:

    # 下载、解析并保存为文本文件
    curl -s https://www.spamhaus.org/drop/drop_v4.json | jq -r '.cidr' > spamhaus_drop.txt

    注意:FortiGate 无法直接解析该 JSON 文件,因此必须通过上述步骤将其托管在内部或公网的 HTTP/HTTPS 服务器上。

    二、 FortiGate 配置步骤

    1. 创建外部连接器 (Threat Feed)

    1. 登录 FortiGate,进入 Security Fabric > External Connectors。
    2. 点击 Create New,在 Threat Feeds 类别下选择 IP Address。
    3. 参数配置详情:
    • Name: Spamhaus_DROP
    • URL: http://yourserver.com/spamhaus_drop.txt
    • Refresh Rate: 设置为 60 分钟(平衡实时性与服务器负载)。

    2. 状态验证

    保存配置后,在列表中观察连接器图标状态:

    • 绿色箭头:连接正常。
    • 红色感叹号:请检查 FortiGate 是否有权限访问该 URL,或 DNS 解析是否正常。
    • 查看内容:右键点击连接器选择 View Entries,确认是否已成功拉取 IP 列表。

    三、 应用安全策略

    获取列表后,必须将其应用到安全策略中才会生效。

    1. 进入 Policy & Objects > Firewall Policy。
    2. 创建一条新的拦截策略:
    • Name: Deny_Spamhaus_Inbound
    • Incoming Interface: WAN (外部接口)
    • Source: 选择刚才创建的动态对象 Spamhaus_DROP
    • Destination: All
    • Service: ALL
    • Action: DENY
    1. 关键操作:在策略列表中,手动将该策略 移至顶端 (Top)。

    提示:为了防范内网主机被感染后回连 C&C 服务器,建议额外创建一条 Source 为 Internal、Destination 为 Spamhaus_DROP 的拦截策略。


    四、 自动化更新

    为了确保列表始终最新,建议在 Web 服务器上设置 Crontab 定时任务:

    # 每小时自动更新一次列表
    0 * * * * curl -s https://www.spamhaus.org/drop/drop_v4.json | jq -r '.cidr' > /var/www/html/spamhaus_drop.txt
  • 使用 AbuseIPDB 与 FortiGate 打造全自动威胁情报拦截系统

    通过FortiGate 的“外部连接器(External Connectors)”功能,实时联动 AbuseIPDB 威胁情报库。通过构造动态 API 请求,防火墙可自动获取并更新全球恶意 IP 黑名单,实现对攻击源的毫秒级自动封禁,有效提升企业边界安全。

    准备工作

    • 注册一个AbuseIPDB账户
    • 在My API 栏目生成一个 API Key
    • 设置 API 请求链接

    构造如下格式的 URL:

    https://api.abuseipdb.com/api/v2/blacklist?plaintext=true&confidenceMinimum=75&limit=131072&key=[YOUR API KEY HERE]

    confidenceMinimum:黑名单中包含的最低滥用置信度分数(25-100),建议 ≥75,避免误报。

    FortiGate 配置步骤

    1. 创建外部连接器 (Threat Feed)

    • 登录 FortiGate,进入 Security Fabric > External Connectors
    • 点击 Create New,在 Threat Feeds 类别下选择 IP Address。
    • 参数配置
      • Name: AbuseIPDB_IP_Blacklist
      • URL: 粘贴你在第一阶段构造好的 URL
      • Refresh Rate: 设置为 60 分钟(避免请求过于频繁导致 API 超限)

    2. 验证连接

    保存后,观察连接器图标:

    • 绿色箭头:连接成功,已获取数据
    • 红色/感叹号:检查 URL 是否正确,或防火墙是否有权限访问互联网
    • 点击 View Entries:确认列表内已填充大量恶意 IP

    3. 应用安全策略

    获取到数据后,必须通过策略才能生效:

    • 进入 Policy & Objects > Firewall Policy
    • 创建拦截策略:
      • Incoming Interface: WAN (或外部接口)。
      • Source: 选择刚才创建的对象 AbuseIPDB_IP_Blacklist
      • Destination: All
      • Action: DENY
    • 排序:将该策略 移至顶端(Top),确保流量在匹配放行策略前先经过黑名单过滤。
  • Debian 13 GNOME 启用 root 登录教程

    Debian 13 GNOME 默认不允许 root 登录桌面,但在测试或开发机上可以通过修改 PAM 配置和重启 GDM 实现。
    生产环境请勿直接用 root,日常操作用普通用户更安全

    1. 切换到 root

    su - root

    2. 修改 GDM PAM 配置

    打开 PAM 文件:

    nano /etc/pam.d/gdm-password

    找到这一行:

    auth required pam_succeed_if.so user != root quiet_success

    在前面加 # 注释掉:

    # auth required pam_succeed_if.so user != root quiet_success

    保存并退出 (Ctrl+O → Enter → Ctrl+X)。

    3. 重启 GDM

    systemctl restart gdm3