Kookiejarz/Auto_XDP

GitHub: Kookiejarz/Auto_XDP

一个基于 eBPF/XDP 的高性能防火墙项目,通过在内核预栈层过滤流量并提供自动端口白名单与 DDoS 防护,解决传统防火墙延迟高与 CPU 开销大的问题。

Stars: 21 | Forks: 0

# 自动 XDP **一个轻量级的 XDP/eBPF 防火墙,用于 Linux 主机上的自动端口白名单和基础 DDoS 防护。**

License Kernel >= 4.18 Distro Checks systemd and OpenRC eBPF/XDP

Debian/Ubuntu supported Fedora/RHEL supported openSUSE supported Arch supported Alpine supported

Although there are some XDP firewall solutions available, Auto XDP provides users with automatic port whitelisting, which makes maintenance significantly easier. ***⚠️ XDP 仅过滤到达网卡的流量。如果你的上行带宽已被体积型攻击饱和,此工具无法提供帮助。大规模 DDoS 缓解请考虑使用上游清洗服务或具备 DDP 防护的主机提供商。*** ## 概述 ### 什么是 XDP? **XDP(eXpress Data Path)** 是一个基于 eBPF 的高性能数据包处理路径,它在**数据包进入 Linux 网络协议栈之前**运行(在网卡驱动层)。这使其比传统的 `iptables`/`nftables` 过滤显著更快。 ### 为什么要使用 Auto XDP? 个人云实例会不断受到扫描和探测。虽然 `iptables` 这类传统防火墙有效,但它们在**内核网络协议栈之后**处理数据包,会增加延迟和 CPU 开销。 **Auto XDP** 在**任何内核处理之前**挂钩到网卡驱动层。此外,与其他 XDP 方案不同,它**为你管理端口白名单**:守护进程监控系统中实际开放的端口,并自动与活动后端保持同步。当主机无法运行 XDP 时,它可以回退到 `nftables` 规则集,而不是直接失败。 ## 工作原理 ``` Incoming Packet │ ▼ ┌─────────────┐ │ NIC Driver │ ← XDP hooks here (before kernel stack) └──────┬──────┘ │ ▼ ┌──────────────────────────────┐ │ xdp_port_whitelist │ │ │ │ ETH → IPv4/IPv6 → TCP/UDP │ │ │ │ IPv4 TCP SYN? → whitelist + │ │ conntrack │ │ IPv4 TCP ACK? → conntrack │ │ IPv4 UDP? → ct/port/IP │ │ ICMP/ICMPv6? → rate-limit │ │ ARP/NDP? → PASS │ │ │ │ Not in whitelist → DROP │ └──────────────────────────────┘ │ ▼ XDP_PASS / XDP_DROP ``` ## 组件 1. **`xdp_firewall.c`** — eBPF/XDP 内核程序,以线速过滤数据包 2. **`tc_flow_track.c`** — eBPF `tc` 出口辅助程序,记录出站 IPv4/IPv6 TCP SYN 包和 UDP 回复元组 3. **`xdp_port_sync.py`** — 用户空间守护进程,同步 TCP/UDP 监听端口和可信 IPv4 源 IP 4. **`axdp`** — 操作员 CLI,用于统计、同步、服务控制和守护进程日志级别 5. **`setup_xdp.sh`** — 安装脚本,编译 BPF 对象,安装运行时启动器,并设置开机自动同步 ## 关键特性 - **线速过滤**:通过 XDP(绕过内核网络协议栈) - **约 40–65 纳秒每包延迟**,在真实硬件上测量(参见[基准测试](#-real-world-performance-benchmark)) - **自动同步白名单**:守护进程监控监听套接字并实时更新活动后端 - **IPv4 + IPv6 TCP 连接跟踪加固**:纯 SYN 创建临时状态;未请求的 ACK 包会被丢弃 - **内核侧出站状态跟踪**:`tc` 出口程序记录主机发起的 IPv4/IPv6 TCP SYN 包和 UDP 回复元组,使返回流量可在 XDP 处匹配而无需重新打开旧绕过 - **IPv4 UDP 加固**:入站服务器端口使用 `udp_whitelist`,回复流量可通过 `udp_conntrack` 匹配,且可通过 `trusted_src_ips` 显式允许可信 IPv4 源 - **IPv6 UDP 有状态过滤**:回复流量使用共享的 `udp_conntrack`,入站服务器流量仍使用 `udp_whitelist`(注意:`trusted_src_ips` 目前仅支持 IPv4) - **IPv6 支持**,包括 XDP 和 tc 出口路径上的扩展头遍历,以及显式非初始片段丢弃 - **周期性连接跟踪同步(种子已建立流)**:守护进程现在定期将现有 IPv4/IPv6 TCP 会话播种到 `tcp_conntrack`,这有助于在重新附加 XDP 或手动清理映射后保留活动会话 - **可重载的 XDP 附着**:安装程序也会在初始附着前预播种现有会话 - **固定的 BPF 映射**:在重载后仍存在,并可在运行时更新 - **ICMP 令牌桶速率限制器**:XDP 级的 ICMP/ICMPv6 洪水防护;100 pps 突发上限,每秒令牌补充,同时允许 ARP 和 IPv6 NDP 控制流量(RS/RA/NS/NA) - **每 IP SYN 速率限制(反暴力破解)**:按端口配置的 SYN 速率限制,使用 1 秒固定窗口按源 IP 计数;对 SSH/MySQL 使用更严格默认值,对邮件服务使用更高值 - **开机加载器**:重启后恢复防护,而不仅仅是同步用户态状态 - **支持 systemd 和 OpenRC**:在存在时自动安装服务 - **可配置的守护进程详细程度**:`axdp log-level debug|info|warning|error` 更新已安装服务配置并重启 - **原生 + 通用 XDP**:优先尝试 native 模式,失败后回退到 generic - **nftables 回退**:如果 XDP 附着失败,自动使用动态 `nftables` 规则集进行端口白名单 ## 要求 - Linux 内核 **≥ 4.18** 以支持 XDP 后端 - 支持主流包管理器的 Linux 发行版:Debian/Ubuntu、Fedora/RHEL、openSUSE、Arch 或 Alpine - 根权限(sudo) - 自动使用 `nftables` 作为 XDP 无法附着时的兼容回退 ### 自动安装的依赖项 - `clang`、`llvm` — 编译 BPF - `libbpf` 或 `libbpf-dev` / `libbpf-devel` — BPF 头文件(取决于发行版) - `bpftool` — 管理 BPF 映射 - `iproute2` 或 `iproute` — 提供 `ip` 和 `tc` 用于 XDP 附着和 UDP 出口跟踪 - `python3` — 同步守护进程运行时 - `nftables` — 兼容回退后端 ## 快速开始 ``` curl --proto '=https' --tlsv1.2 -sSfL https://raw.githubusercontent.com/Kookiejarz/Auto_XDP/refs/heads/main/setup_xdp.sh | sudo bash ``` ### 安装特定版本 ``` curl --proto '=https' --tlsv1.2 -sSfL https://raw.githubusercontent.com/Kookiejarz/Auto_XDP/refs/tags/v26.4.7a/setup_xdp.sh | sudo bash ``` 使用标签可提供可重现的安装器版本,而非跟踪最新的 `main` 分支。 当从 `stdin`(`curl | bash`)执行安装器时,它会优先使用匹配的 GitHub 源文件,而不是当前工作目录中的陈旧本地文件。 ## 自动发行版检查 该仓库包含一个 GitHub Actions 矩阵,它在受支持的 Linux 容器镜像中安装基础运行时工具并运行一次非破坏性的 `setup_xdp.sh --dry-run` 冒烟测试。 安装器通过读取 `/etc/os-release` 来识别发行版系列,然后选择匹配的包管理器和依赖集合。 你也可以在本地运行非破坏性冒烟测试: ``` bash setup_xdp.sh --dry-run ``` 如果你只想探测包管理器和初始化系统,可使用: ``` bash setup_xdp.sh --check-env ``` ## 从源码安装 ``` git clone https://github.com/Kookiejarz/Auto_XDP.git cd auto_xdp # 自动检测接口 sudo bash setup_xdp.sh # 或指定接口 sudo bash setup_xdp.sh eth0 # 先与 GitHub 比较本地文件,再交互式决定 sudo bash setup_xdp.sh --check-update # CI/自动化非交互模式 sudo bash setup_xdp.sh --check-update --force ``` ## `setup_xdp.sh` 逐步执行 1. 检查 root 权限 2. 自动检测默认网络接口 3. 通过检测到的包管理器安装缺失依赖 4. 默认使用本地的 `xdp_firewall.c` / `tc_flow_track.c` / `xdp_port_sync.py` / `axdp`;从 `stdin` 执行时优先使用匹配的 GitHub 副本 5. 在主机具备所需工具链时编译 XDP 和 tc BPF 对象 6. 在附着 XDP 前预播种当前 IPv4/IPv6 已建立的 TCP 会话到 `tcp_conntrack` 7. 加载并附着 `tc clsact egress` 程序以记录出站 TCP SYN 和 UDP 回复元组 8. 尝试以 native 模式附着 XDP,失败后回退到 generic 模式 9. 如果 XDP 无法附着,自动回退到 `nftables` 10. 在 `/usr/local/bin/auto_xdp_start.sh` 安装运行时启动器 11. 在 `/usr/local/bin/xdp_port_sync.py` 安装同步守护进程 12. 使用选定的后端运行初始端口同步 13. 在可用时注册并启动 `xdp-port-sync` 到 `systemd` 或 `OpenRC` ## BPF 映射 固定目录:`/sys/fs/bpf/xdp_fw/` | 映射 | 类型 | 最大条目数 | 键 | 值 | |:-:|:-:|:--:|:-:|:-:| | `tcp_whitelist` | ARRAY | 65536 | `__u32` 端口(主机字节序) | `__u32`(1 = 允许) | | `udp_whitelist` | ARRAY | 5536 | `__u32` 端口(主机字节序) | `__u32`(1 = 允许) | | `tcp_conntrack` | LRU_HASH | 65536 | `struct ct_key { family, sport, dport, saddr[4], daddr[4] }` | `__u64` ktime_ns | | `udp_conntrack` | LRU_HASH | 65536 | `struct ct_key { family, sport, dport, saddr[4], daddr[4] }` | `__u64` ktime_ns | | `trusted_src_ips` | HASH | 256 | `__be32` IPv4 源地址 | `__u32`(1 = 可信) | | `pkt_counters` | PERCPU_ARRAY | 12 | `__u32` 计数器索引 | `__u64` 包计数 | | `icmp_tb` | ARRAY | 1 | `__u32`(0) | `struct icmp_token_bucket { last_ns, tokens }` | | `syn_rate_ports` | HASH | 64 | `__u32` 目标端口 | `struct syn_rate_port_cfg { rate_max }` | | `syn_rate_map` | LRU_HASH | 65536 | `struct syn_rate_key { dest_port, saddr[4] }` | `struct syn_rate_val { window_start_ns, count }` | ### 手动添加/移除端口 ``` # 允许 TCP 端口 8080 bpftool map update pinned /sys/fs/bpf/xdp_fw/tcp_whitelist \ key 0x90 0x1f 0x00 0x00 value 0x01 0x00 0x00 0x00 # 移除 TCP 端口 8080 bpftool map delete pinned /sys/fs/bpf/xdp_fw/tcp_whitelist \ key 0x90 0x1f 0x00 0x00 # 查看当前 TCP 白名单 bpftool map dump pinned /sys/fs/bpf/xdp_fw/tcp_whitelist ``` 键编码说明:映射类型现在是 **ARRAY**(`BPF_MAP_TYPE_ARRAY`),因此键是一个 4 字节小端 `__u32` 端口号(主机字节序)。示例:`8080` = `0x00001F90` → 字节 `0x90 0x1F 0x00 0x00` ## 为何使用 ARRAY 而非 HASH? 最初该项目使用 **BPF_MAP_TYPE_HASH** 作为白名单。我们转向 **BPF_MAP_TYPE_ARRAY** 有以下关键原因: - **O(1) 查找时间**:Array 映射通过直接索引内存提供常数时间查找($O(1)$)。Hash 映射平均为 O(1),但在哈希冲突下会退化,而 Array 映射保证 O(1),无冲突可能:)))) - **零哈希冲突**:共有 65,536 个条目(覆盖所有可能端口),不存在哈希冲突。在 Hash 映射中,若 `max_entries` 较小(例如 64),高流量扫描时冲突频繁,导致延迟尖峰。 - **CPU 缓存效率**:Array 是连续内存块,CPU 预取器能更高效处理,而 Hash 映射的指针追逐效率较低。 ## 自动同步守护进程 守护进程 `xdp_port_sync.py` 在启动器 `/usr/local/bin/auto_xdp_start.sh` 后运行,提供**实时更新**: 1. **事件驱动**:使用 Linux **Netlink Process Connector** 立即检测 `exec()` 和 `exit()` 事件 2. **高效发现**:使用 `psutil` 直接读取 `/proc` 获取监听端口(无需慢速 `ss` 或 `netstat` 子进程) 3. **安全回退**:每 **30 秒**执行完整同步以确保一致性 4. **后端同步**:更新固定的 BPF 映射或 `nftables` 集合,取决于主机支持 5. **UDP 发现规则**:因 UDP 无 `LISTEN` 状态,守护进程将未连接绑定的 UDP 套接字(无远程对端)同步到 `udp_whitelist`,这是服务器风格 UDP 端口的一种实用近似 6. **可信源 IP**:可选的 IPv4 地址可同步到 XDP 侧的 `trusted_src_ips` 映射,用于响应式 UDP 流量(如 DNS 或 NTP) 7. **后端安全护栏**:在 `auto` 模式下,守护进程仅在存在所需固定映射时选择 XDP,否则回退到 `nftables` 而非崩溃 内核侧的出站 TCP/UDP 回复跟踪:`tc` 出口程序将反向回复元组记录到 `tcp_conntrack` 和 `udp_conntrack`,XDP 入口路径在这些映射中检查后再回退到 `tcp_whitelist`、`udp_whitelist` 或 `trusted_src_ips`。 ### 永久端口 编辑 `xdp_port_sync.py` 以始终允许特定端口: ``` TCP_PERMANENT = {22: "SSH-fallback"} # Optional: add ports you never want blocked UDP_PERMANENT = {50000: "custom-udp-service"} # Use this for real high-port UDP services TRUSTED_SRC_IPS = {"1.1.1.1": "cloudflare-dns"} ``` 如果真实的 UDP 服务器使用高位端口,请显式添加到 `UDP_PERMANENT`,以便在守护进程的套接字启发式无法清晰区分时仍保持白名单。 你也可以在运行时添加可信 IPv4 源: ``` python3 /usr/local/bin/xdp_port_sync.py --backend auto --trusted-ip 1.1.1.1 cloudflare-dns python3 /usr/local/bin/xdp_port_sync.py --backend auto --trusted-ip 129.6.15.28 ntp-nist --dry-run ``` `--trusted-ip` 目前仅影响 XDP 后端。`nftables` 回退仍使用其自身的兼容性规则集。 ### 守护进程管理 ``` # systemd systemctl status xdp-port-sync journalctl -u xdp-port-sync -f # OpenRC rc-service xdp-port-sync status # 手动前台运行 /usr/local/bin/auto_xdp_start.sh # 一次性同步并自动选择后端 python3 /usr/local/bin/xdp_port_sync.py --backend auto python3 /usr/local/bin/xdp_port_sync.py --backend auto --dry-run # 临时提高前台详细程度 python3 /usr/local/bin/xdp_port_sync.py --backend auto --log-level debug ``` ## 统计信息 Auto XDP 安装了一个便捷命令 `/usr/local/bin/axdp`。统计信息现已内置于 `axdp` 中,因此安装后你只需一个操作命令。 ``` # 单次快照 sudo axdp # 实时刷新 sudo axdp watch # 显示增量速率(pps / bps) sudo axdp stats --rates # 两者结合 sudo axdp stats --watch --rates --interval 2 # 运行一次手动同步 sudo axdp sync # 检查当前允许的 TCP/UDP 端口(带每 IP SYN 速率统计) sudo axdp ports sudo axdp ports --tcp sudo axdp ports --udp # 查看或更改守护进程日志级别 sudo axdp log-level sudo axdp log-level debug # 服务控制 sudo axdp start sudo axdp stop sudo axdp restart sudo axdp status ``` 它显示: 1. `xdp` 后端:来自 `/sys/fs/bpf/xdp_fw/pkt_counters` 的每类包计数器,加上接口 RX 总量 2. `nftables` 后端:`inet auto_xdp input` 链的当前丢弃计数,加上接口 RX 总量 3. `--rates`:XDP 计数器的包增量,以及字节计数器可用时的包/比特增量 `axdp` 中的计数器标签有意设计为可读: 1. `TCP_NEW_ALLOW` 统计被 `tcp_whitelist` 允许的纯 SYN 包 2. `TCP_ESTABLISHED` 统计被 `tcp_conntrack` 允许的 TCP 包 3. `TCP_CT_MISS` 统计因无连接跟踪条目而被丢弃的 TCP ACK 包 4. `IPv6_ICMP` 涵盖 ICMPv6 及所有非 TCP/IPv6 的 IPv6 流量(通过速率限制器) 5. `ARP_NON_IP` 统计 ARP 及其他非 IP 以太网流量 6. `ICMP_DROP` 统计被令牌桶速率限制器丢弃的 ICMP/ICMPv6 回显包 7. `SYN_RATE_DROP` 统计被每 IP SYN 速率限制器丢弃的 TCP SYN 包 ## 安装后常用命令 安装后,以下是你实际会用到的主要命令: ``` # 帮助 sudo axdp help # 当前统计快照 sudo axdp # 实时统计 sudo axdp watch # 增量速率 sudo axdp stats --rates # 实时增量速率 sudo axdp stats --watch --rates --interval 2 # 运行一次手动同步 sudo axdp sync # 检查当前允许的端口 sudo axdp ports sudo axdp ports --tcp sudo axdp ports --udp # 更改守护进程日志详细程度并重启服务 sudo axdp log-level sudo axdp log-level debug sudo axdp log-level info # 服务控制 sudo axdp start sudo axdp stop sudo axdp status sudo axdp restart ``` ### 源码更新检查 当你从克隆的仓库运行安装器时,优先使用本地源文件。若希望脚本先与 GitHub 上的版本进行比较,请使用: ``` sudo bash setup_xdp.sh --check-update ``` 在 `--check-update` 模式下,安装器会: 1. 下载 GitHub 版本的 `xdp_firewall.c`、`tc_flow_track.c`、`xdp_port_sync.py` 和 `axdp` 到临时文件 2. 比较本地与 GitHub 的 SHA-256 哈希 3. 提示你差异 4. 仅在你确认后拉取 GitHub 副本 ### 非交互模式 用于 CI 或自动化部署: ``` sudo bash setup_xdp.sh --force ``` 或结合源码比较: ``` sudo bash setup_xdp.sh --check-update --force ``` 在 `--force` 模式下,安装器跳过确认提示并: 1. 自动拉取 GitHub 副本(当 `--check-update` 发现哈希不匹配时) 2. 在重新安装前自动卸载任何已存在的 XDP 程序 ## 数据包过滤逻辑 ### TCP - **IPv4 + IPv6 有状态路径**: - 若数据包为**纯 SYN**且目标端口在 `tcp_whitelist` 中 → 插入连接跟踪键到 `tcp_conntrack` 并**放行** - 若设置了 **ACK** 且连接跟踪键存在于 `tcp_conntrack` 中 → **放行** - 若设置了 **ACK** 但无连接跟踪条目 → 计数 `CNT_TCP_CT_MISS` 并**丢弃** - 其他情况 → **丢弃** - **内核辅助**:`tc` 出口程序会立即记录主机发起的 IPv4/IPv6 TCP SYN 包,避免极短出站连接在 SYN-ACK 返回前就建立连接的竞争条件- **重载辅助**:`setup_xdp.sh` 在重新附着 XDP 前预播种现有 IPv4/IPv6 TCP 会话到 `tcp_conntrack`,有助于在重新安装/重启时保留活动会话 ### UDP - **IPv4 有状态路径**: - 若连接跟踪键存在于 `udp_conntrack` 中 → **放行** - 若目标端口在 `udp_whitelist` 中 → **放行** - 否则若源 IPv4 地址在 `trusted_src_ips` 中 → **放行** - 否则 → **丢弃** - **IPv6 有状态路径**: - 若连接跟踪键存在于 `udp_conntrack` 中 → **放行** - 若目标端口在 `udp_whitelist` 中 → **放行** - 否则 → **丢弃** - **用户态辅助**:可信 IPv4 源地址仍作为响应式 UDP 流量的显式回退可用 ### IPv6 扩展头 遍历最多 **6 层** 的 IPv6 扩展头以定位传输协议,防止构造头部的绕过攻击。此逻辑同时存在于 XDP 入口路径和 `tc` 出口跟踪器,因此 IPv6 回复状态跟踪不限于最简单的 `nexthdr` 情况。非初始 IPv6 分片在传输解析前被显式计数并丢弃,防止因边界检查失败而绕过。 ## 卸载 ``` # 如果已附加,则分离 XDP ip link set dev eth0 xdp off # 移除 TCP/UDP 回复跟踪器 tc filter del dev eth0 egress pref 49152 2>/dev/null || true # 移除固定的映射和 nftables 回退表 rm -rf /sys/fs/bpf/xdp_fw nft delete table inet auto_xdp 2>/dev/null || true # systemd systemctl disable --now xdp-port-sync 2>/dev/null || true rm /etc/systemd/system/xdp-port-sync.service systemctl daemon-reload 2>/dev/null || true # OpenRC rc-service xdp-port-sync stop 2>/dev/null || true rc-update del xdp-port-sync default 2>/dev/null || true rm /etc/init.d/xdp-port-sync # 移除已安装的运行时文件 rm /usr/local/bin/xdp_port_sync.py rm /usr/local/bin/axdp rm /usr/local/bin/auto_xdp_start.sh rm -rf /usr/local/lib/auto_xdp rm -rf /etc/auto_xdp ``` ## **📊 实际性能基准测试** 本基准测试模拟了体积型 UDP 洪水攻击。我们使用高性能的 **AMD EPYC™ 7Y43** 服务器作为“攻击者”,对受 Auto XDP 保护的 **1 vCPU AMD Ryzen 9 3900X** 实例进行测试。 ### **测试环境** + 🇭🇰 **攻击者**:AMD EPYC™ 7Y43 @ 2.55GHz(生成约 367k PPS / 188 Mbps) + 🇺🇸 **目标(接收端)**:AMD Ryzen 9 3900X @ 2.0GHz(1 vCPU,1GB 内存) + **工具**:`pktgen`(Linux 内核数据包生成器) + **攻击者与目标通过 *公网*** 连接 ### **对比结果** | 指标 | Auto XDP **关闭** | Auto XDP **开启** | 提升 | | -------------------------- | ------------------------- | ----------------------- | ------------------ | | **软中断(si)CPU 使用率** | **85.9%** | **3.0%** | **约 28 倍降低** | | **系统响应性** | 极度卡顿 | **流畅** | 显著改善 | | **数据包处理** | 由内核协议栈处理 | 在驱动层丢弃 | - | **XDP 关闭** — 洪水攻击下软中断占用 85.9%: ![XDP OFF](https://s3.liuu.org/blog/uPic/Screenshot%202026-02-27%20at%205.35.30%E2%80%AFPM.png) **XDP 开启** — 相同洪水攻击,CPU 降至 3.0%: ![XDP ON](https://s3.liuu.org/blog/uPic/Screenshot%202026-02-27%20at%205.37.43%E2%80%AFPM.png) **XDP 开启** — 攻击前: ![XDP ON, before attack](https://s3.liuu.org/blog/uPic/Screenshot%202026-02-27%20at%205.38.05%E2%80%AFPM.png) **XDP 开启** — 攻击后: ![XDP ON, After attack](https://s3.liuu.org/blog/uPic/Screenshot%202026-02-27%20at%205.38.14%E2%80%AFPM.png) ### **如何复现** ``` # 加载内核模块 modprobe pktgen # 配置设备(将 enp3s0 替换为你的接口名称) PGDEV=/proc/net/pktgen/INTERFACE echo "rem_device_all" > /proc/net/pktgen/kpktgend_0 echo "add_device INTERFACE" > /proc/net/pktgen/kpktgend_0 # 设置攻击参数 echo "count 10000000" > $PGDEV # Send 10 million packets echo "pkt_size 64" > $PGDEV # Small packets put more stress on the CPU echo "dst TARGET_IP" > $PGDEV # Target IP echo "dst_mac TARGET_MAC" > $PGDEV # Target MAC echo "clone_skb 100" > $PGDEV # Speed up packet generation ``` ## 🤝 **贡献** 欢迎贡献!如果你有错误修复、性能改进或新功能的想法: 1. 叉出仓库 2. 创建功能分支(`git checkout -b feature/my-improvement`) 3. 提交你的更改 4. 发起拉取请求 如有错误或问题,请[打开议题](https://github.com/Kookiejarz/Auto_XDP/issues)。 ## 星标历史 Star History Chart ## 📄 许可证 [MIT](./LICENSE) © 2026 Yunheng Liu
标签:certspotter, DDoS防护, Docker镜像, LangChain, Linux内核, MacOS取证, TCP/UDP, XDP, 主机防护, 低延迟, 入侵防御, 内核旁路, 反DDoS, 开源防火墙, 性能优化, 检测绕过, 流量控制, 状态跟踪, 线速转发, 网络安全, 网络防护, 自动流量控制, 自动端口白名单, 轻量级, 逆向工具, 防火墙, 隐私保护, 零配置, 高速包处理