描述 #
Imaxe Hardened Memcached 是一款经过加固、可直接用于生产的 Memcached AMI,旨在直接替代「Memcached packaged by Bitnami」。它使用 Ubuntu 的标准软件包安装 Memcached — apt、systemd 和 FHS 标准路径,没有 /opt 下的单体目录树,也没有专有的进程管理器 — 构建在 imaxe 的加固基线之上。
与 Bitnami 产品相比,出厂即有两点安全差异:SASL 认证默认启用(而非禁用),每个实例拥有唯一密码;网络流量通过 TLS 加密,证书同样在每个实例上生成。由于 memcached 唯一的 SASL 机制是 PLAIN,没有 TLS 时密码将以明文传输 — 在这里这不可能发生。
其余部分是 imaxe 的加固基线:默认拒绝的防火墙、强化的 SSH、处于 enforce 模式的 AppArmor、基于 auditd 的审计、AIDE 文件完整性校验、rkhunter rootkit 检测、ClamAV 防病毒以及 fail2ban 暴力破解防护。每次发布均通过 Lynis 审计验证,完整报告可在下方阅读。
快速指南:5 分钟投入使用 #
从零到一套已加固的生产缓存,所需的全部步骤。
无需与 AWS 控制台搏斗。imaxe 启动器是一个引导式表单,只询问必要的信息 — 区域、实例类型、网络和 SSH 访问 — 并生成一份 CloudFormation 模板,部署已配置好的 AMI。它帮您避开手动启动的常见错误(架构选错、安全组开放过度、未分配密钥对),并把整个堆栈完全置于您自己账户的控制之下。
如果您更愿意手动操作,完整流程共五个步骤:
| 步骤 | 操作 | 位置 | 时间 |
|---|---|---|---|
| 1 | 订阅并启动 AMI — 任意 arm64(Graviton)实例;推荐使用 t4g.medium。含 7 天免费试用。 | AWS Marketplace → EC2 | 约 2 分钟 |
| 2 | 在安全组中开放端口 22,并限制为您的 IP 或 CIDR。11211 端口是特意关闭的:仅当您的应用运行在另一台机器上时,才将其开放给您 VPC 的 CIDR。 | EC2 控制台 | 1 分钟 |
| 3 | 读取 SASL 凭据 — 位于系统控制台(EC2 的 System Log),或通过 SSH 执行 sudo imaxe memcached credentials。首次启动时密码为 instance-id。 | EC2 控制台或 SSH | 1 分钟 |
| 4 | 用 TLS + SASL 连接您的客户端:用户 memcached、实例的密码和端口 11211。证书为自签名:让您的客户端信任 /etc/memcached/tls/server.crt。 | 您的应用 | 约 1 分钟 |
| 5 | 完成 — 缓存大小已按实例调整好。使用 imaxe memcached status 查看状态。 | 实例内 | — |
没有配置向导,也没有必须执行的后续步骤:镜像出厂即已加固并完成规格调整。本页其余内容均为可选。如遇问题,请直接前往故障排查。
特性 #
镜像包含的全部内容,按标准功能与我们的独有功能分组。
通用
- Memcached 1.6 来自 Ubuntu 26.04 LTS(resolute,arm64)的官方软件包,由 systemd 管理 — 没有
/opt目录树,也没有专有脚本。 - Ubuntu 基线在每次构建时更新,并启用自动安全补丁(
unattended-upgrades)。 ufw防火墙默认拒绝:本地仅允许 22(SSH)和 11211(memcached);Marketplace 的安全组只开放 22。- 强化的 SSH:禁止 root、禁止密码,仅允许公钥,采用现代加密算法(ed25519、chacha20-poly1305、后量子密钥交换 sntrup761x25519)。
- AppArmor 安装了额外配置文件,且全部处于 enforce 模式。
- 通过 sysctl 强化内核,挂载点使用
noexec,nosuid,nodev,/proc使用hidepid=2。 - 基于
auditd的完整审计、AIDE 与 debsums 完整性校验、rkhunter 与 ClamAV 反恶意软件,以及与 ufw 集成的 fail2ban。
特有
- SASL 出厂即强制启用: 用户
memcached,每个实例拥有唯一密码(首次启动时为 instance-id),并输出到 EC2 系统控制台 — 从 Bitnami 迁移过来的用户会到这里寻找它。AMI 中不烘焙任何凭据:每个实例都使用全新凭据。 - 11211 端口标配 TLS(最低 TLS 1.2):每个实例自行签发自签名证书 — EC P-256 密钥,以 instance-id 为 CN,以实例的 IP 和名称为 SAN — 在服务启动之前完成。您也可以安装自己的证书。
- 11212 明文端口仅监听 loopback,供系统工具使用(
memcstat等工具不支持 TLS)。它仍然要求 SASL,且无法从外部访问。 - UDP 被明确禁用(
-U 0):memcached 的 UDP 协议是经典的 DDoS 放大攻击载体。 - 每次启动自动调优:
imaxe memcached optimize根据实际的 CPU 和内存重新计算缓存内存、连接数和线程数 — 停止实例、更换类型、再启动,缓存就会自动重新调整规格。 - 无需重启的 SASL 用户管理:
imaxe memcached users add/rotate/delete— SASL 数据库在每次认证时读取,缓存不会被清空。 - 内置
imaxe工具: 一个 CLI,用于操作服务、凭据、证书和全部加固,无需手动编辑文件。 - 每次发布都执行 Lynis 审计,完整报告发布在本页。
imaxe 模块
预置在这款 AMI 中的 imaxe 工具模块及其文档:
| 模块 | 功能 | 文档 |
|---|---|---|
| memcached | 产品模块:状态、凭据、SASL 用户、TLS 以及服务的自动调优。 | 查看文档 → |
| os | 系统基础:无人值守更新、locale、时区、主机名和时间。 | 查看文档 → |
| ssh | 授权密钥、host keys、活动会话,以及一条命令完成 sshd 加固。 | 查看文档 → |
| firewall | ufw 状态、封禁/解封 IP,以及开放或关闭端口。 | 查看文档 → |
| audit | auditd 事件和 CIS 审计规则,无需与 auditctl 搏斗。 | 查看文档 → |
| aide | 基于 AIDE 的文件完整性(FIM)。 | 查看文档 → |
| rkhunter | 扫描服务器查找 rootkit。 | 查看文档 → |
| clamav | 运行时的 ClamAV 防病毒。 | 查看文档 → |
| lynis | 系统加固审计,输出可执行的报告。 | 查看文档 → |
| fail2ban | jail 状态、被封禁的 IP,以及手动封禁和解封。 | 查看文档 → |
| secrets | 生成、读取和轮换实例的本地机密 — 包括 SASL 密码。 | 查看文档 → |
| info | AMI 清单,位于 /etc/imaxe/info.yaml,不含机密。 | 查看文档 → |
| global-alerts | 实例的全局告警总线(SNS)。 | 文档准备中 |
规格与成本 #
这款 AMI 可运行于 AWS 上任何 arm64(Graviton)实例,并自动调整规格:每次启动时,imaxe memcached optimize 将可用内存的 60%(预留 512 MB 给操作系统和代理之后)分配给缓存,并根据实例规格推算线程数和连接数。请按所需缓存容量选择实例类型:内存越大 = 缓存越大,无需改动任何配置。推荐的起步实例是 t4g.medium,本镜像的构建和测试也在其上执行。
| 项目 | 价格 |
|---|---|
| 按小时订阅 | 每实例 0.014 美元/小时 |
| 按年订阅 | 每实例 99 美元/年 |
| 免费试用 | 7 天 |
订阅价格之外还需支付常规的 AWS 费用(EC2 实例、EBS 磁盘和流量),按您的费率直接支付给 AWS。Memcached 是内存缓存:选择实例时请优先考虑内存而非磁盘。
Lynis 报告 #
每个已发布版本的 Lynis 加固审计结果:加固指数、警告和建议,附逐行完整报告。
加固指数由 Lynis 根据通过的测试计算得出。我们在每次发布时重新执行审计,并在镜像上架 Marketplace 之前人工复核每一条警告和建议;未解决事项的详细信息见报告本身。
可用版本 #
已在 AWS Marketplace 发布的此 AMI 版本:
| 版本 | Memcached | Ubuntu | 架构 | 状态 | 发布时间 |
|---|---|---|---|---|---|
| v2.0 | 1.6 | 26.04 LTS (resolute) | arm64 | ✓ 活跃 | 2026-08 |
| v1.0 | 1.6 | 24.04 LTS (noble) | arm64 | ✓ 活跃 | 2026-08 |
生命周期
v2.0 是当前版本,处于活跃维护中:Ubuntu 的安全补丁通过 unattended-upgrades 自动到达实例,我们也按固定节奏在 Marketplace 发布新版本的 AMI,每个版本都有自己的 Lynis 审计。新版本发布后将出现在此表格和更新日志中。
如何启动 AMI #
该 AMI 遵循 EC2 在 arm64(Graviton)实例上的标准启动流程。Marketplace 的安全组只开放一个端口:
| 类型 | 协议 | 端口 | 来源 |
|---|---|---|---|
| (*) SSH | TCP | 22 | 您的 CIDR |
| Memcached(可选) | TCP | 11211 | 仅限您 VPC 的 CIDR 或客户端的安全组 |
与 Bitnami 产品一样,11211 端口在安全组中是特意关闭的。即便有 TLS 保护,也只应向您的私有网络开放 — 绝不要使用 0.0.0.0/0。内部防火墙(ufw)已经允许该端口,因此只需添加安全组规则即可。如需从外部临时访问,请使用 SSH 隧道:ssh -i clave.pem -L 11211:127.0.0.1:11211 ubuntu@<ip-publica>(本 AMI 允许端口转发,这一点与其他 imaxe 镜像不同)。在实例内部,sudo imaxe memcached open-port --cidr <您的网段> 和 close-port 用于控制本机防火墙。
v2.0 面向 arm64 架构发布:请选择 Graviton 系列(t4g、m7g/m8g、c6g–c8g、r7g/r8g…)。它无法在 x86_64 实例上启动。
启动之后 — SSH: 使用启动时选择的密钥对,以 ubuntu 用户登录。没有可访问的 root 用户,也没有密码认证。缓存凭据: SASL 用户 memcached,初始密码为 instance-id,可在 EC2 系统控制台查看,或通过 SSH 执行:
ssh -i mi-keypair.pem ubuntu@<ip-de-la-instancia>
sudo imaxe memcached credentials # usuario, password y puerto
imaxe memcached tls show # huella del certificado de esta instancia镜像内部 # 专家
AMI 内部运行的一切、各项内容的位置,以及日常会用到的命令。
服务与端口
| 服务 | systemd 单元 | 端口 | 功能 |
|---|---|---|---|
| Memcached | memcached.service | 11211 | 缓存服务,强制 TLS(最低 1.2)和 SASL |
| Memcached(loopback) | memcached.service | 11212 | 仅在 127.0.0.1 上明文监听,供本地工具使用;SASL 仍然是强制的 |
| 实例初始化 | imaxe-memcached-instance-setup.service | — | 每次启动时先于 memcached 运行:TLS 证书、SASL 凭据和调优。幂等 |
| OpenSSH | ssh.service | 22 | 强化的远程访问(drop-in 99-imaxe-harden.conf) |
| ufw | ufw.service | — | 默认拒绝的防火墙(允许 22 和 11211) |
| auditd | auditd.service | — | 系统审计(身份、sudoers、sshd、登录) |
| fail2ban | fail2ban.service | — | 通过 ufw 封禁 SSH 暴力破解,读取 journal |
| AppArmor | apparmor.service | — | 强制访问控制,所有配置文件均处于 enforce 模式 |
| freshclam | clamav-freshclam.service | — | ClamAV 病毒库更新,每天 24 次 |
| unattended-upgrades | apt-daily-upgrade.timer | — | 自动安全补丁 |
memcached 服务在烘焙阶段保持停止状态,首次启动发生在您的实例上:AMI 中既没有证书也没有凭据。标记文件 /etc/memcached/tls/.generated-for 保存证书对应的 instance-id;克隆实例时 id 不匹配,材料会自动重新生成。
关键路径
| 路径 | 说明 |
|---|---|
| /etc/memcached.conf | 服务配置;BEGIN/END imaxe memcached optimize 区块由模块在每次启动时重写 |
| /etc/memcached/tls/ | 本实例的 TLS 证书和密钥(server.crt / server.key) |
| /etc/sasl2/memcached-sasldb2 | SASL 用户数据库(通过 imaxe memcached users 管理) |
| /etc/imaxe/secrets/memcached/password | 实例的 SASL 密码(0600,root) |
| /etc/imaxe/memcached.yml | imaxe memcached 模块的配置 |
| /etc/ssh/sshd_config.d/99-imaxe-harden.conf | sshd 加固(drop-in,不改动主配置文件) |
| /etc/sysctl.d/99-zz-imaxe-harden-kernel.conf | 通过 sysctl 加固内核 |
| /var/log/sudo.log | 所有 sudo 使用记录 |
| /usr/local/bin/imaxe | imaxe CLI 二进制文件 |
常用命令
| 任务 | 命令 |
|---|---|
| 服务状态、监听、TLS、SASL 和统计信息 | imaxe memcached status |
| 本实例的凭据 | sudo imaxe memcached credentials |
| 轮换 SASL 密码(无需重启,不清空缓存) | sudo imaxe memcached users rotate |
| SASL 用户:新增 / 列出 / 删除 | sudo imaxe memcached users add app1 |
| 当前证书(主题、SAN、有效期、指纹) | imaxe memcached tls show |
| 重新生成证书(例如更换公网 IP 之后) | sudo imaxe memcached tls renew –force |
| 查看本实例的推荐调优 | imaxe memcached optimize –show |
| 立即应用调优(会重启:清空缓存) | sudo imaxe memcached optimize |
| 服务日志 | journalctl -u memcached |
| 实例初始化日志 | journalctl -u imaxe-memcached-instance-setup |
使用系统工具进行本地检查 — libmemcached-tools 不支持 TLS,因此使用 loopback 的明文端口(加 --binary 是因为 libmemcached 仅在二进制协议上支持 SASL):
memcstat --binary --servers=127.0.0.1:11212 --username=memcached \
--password=$(sudo imaxe memcached credentials --show-password --json | jq -r .password)如需安装自己的证书替换自签名证书:
sudo install -m 0644 -o root -g root mi.crt /etc/memcached/tls/server.crt
sudo install -m 0640 -o root -g memcache mi.key /etc/memcached/tls/server.key
sudo rm -f /etc/memcached/tls/.generated-for # sin testigo, el módulo no lo toca
sudo systemctl restart memcached此外,加固的每个子系统在 imaxe CLI 中都有对应模块 — 参见 imaxe 模块。
备份与更新 #
- 自动补丁:
unattended-upgrades每天自动应用 Ubuntu 安全更新,无需干预。 - 病毒库: freshclam 每天更新 ClamAV 数据库 24 次。
- 新 AMI: 我们按固定节奏在 Marketplace 发布镜像的更新版本;每个版本发布前都会通过自己的 Lynis 审计。
- 备份:设计上就没有。 Memcached 是易失性缓存:其内容在每次重启时丢失,不应存放任何数据的唯一副本。没有任何东西需要备份或恢复。
任何 systemctl restart memcached — 包括 sudo imaxe memcached optimize 应用调优时执行的那次 — 都会清空缓存。相反,SASL 用户和密码的变更不需要重启。此外,如果您安装或修改了软件,请重新生成 AIDE 基线(sudo aideinit 或通过 imaxe 的 aide 模块)。
故障排查 #
几乎所有工单集中的问题,及其常见原因和解决方法。
| 症状 | 可能原因 | 解决方法 |
|---|---|---|
| 实例无法启动 | 使用了 x86_64 实例类型 | 该 AMI 为 arm64:请使用 Graviton 系列(t4g、c6g–c8g、m7g…) |
| 无法通过 SSH 连接 | 安全组未开放端口 22,或 IP 不在允许的 CIDR 内 | 检查安全组 — 参见如何启动 AMI |
Permission denied (publickey) | 密码认证已被禁用 | 使用启动时的密钥对以 ubuntu 登录:ssh -i clave.pem ubuntu@<ip> |
| 多次尝试后 SSH 不再响应 | fail2ban 封禁了您的 IP(10 分钟内 5 次失败 = 封禁 1 小时) | 等待一小时,或从另一个 IP 执行:sudo fail2ban-client set sshd unbanip <ip> |
| 无法从其他机器访问 11211 | Marketplace 的安全组只开放了 22 | 为 11211 添加一条限制为您 CIDR 的安全组规则 — ufw 已经允许该端口 |
| 客户端一连接 socket 就被关闭 | 客户端不支持 TLS,或没有做 SASL | 使用支持 TLS + SASL 的库(pymemcache 配 tls_context、php-memcached 配 OPT_USE_TLS…),并信任 /etc/memcached/tls/server.crt |
memcstat 连接 11211 无响应 | libmemcached-tools 编译时未启用 TLS | 使用 loopback 的明文端口:memcstat --binary --servers=127.0.0.1:11212 … |
| 克隆/替换实例后认证失败 | 凭据会为新的 instance-id 重新生成 | 读取新凭据:sudo imaxe memcached credentials(或 EC2 系统控制台) |
| 更换实例类型后缓存没有用满内存 | 调优在启动时应用 | 重启实例,或执行 sudo imaxe memcached optimize |
常见问题 #
memcached 的密码在哪里?
首次启动时,SASL 用户 memcached 以 instance-id 作为密码创建。它会输出到 EC2 系统控制台(System Log)— 从 Bitnami 迁移过来的用户会到这里寻找它 — 并保存在 /etc/imaxe/secrets/memcached/password。通过 SSH:sudo imaxe memcached credentials。
如何更改密码或添加用户?
sudo imaxe memcached users rotate 生成一个新的随机密码;--stdin 可接受指定密码而不留在命令历史中。users add / users delete 用于管理更多用户。任何操作都不会重启服务或清空缓存。
为什么我的客户端连不上,而在 Bitnami 上可以?
因为这里 SASL 和 TLS 出厂即启用(在 Bitnami 中 SASL 默认禁用)。您的客户端需要支持 TLS + SASL 并信任实例的证书。这是有意为之:memcached 唯一的 SASL 机制是 PLAIN,没有 TLS 时密码将以明文传输。
我可以把 11211 开放到互联网吗?
能是能 — 但请不要这样做。将安全组规则限制为您 VPC 的 CIDR 或客户端的安全组,或使用 SSH 隧道(-L)进行临时访问。公开的缓存是经典的攻击目标,即便加了密也一样。
证书是自签名的吗?我可以用自己的证书吗?
是的,都可以。默认证书由每个实例为自己签发(CN = instance-id,SAN 包含其 IP 和名称);其 SHA-256 指纹会输出到系统控制台,也可通过 imaxe memcached tls show 查看。要使用自己的证书,把 crt/密钥复制到 /etc/memcached/tls/,删除标记文件 .generated-for 并重启 — 参见镜像内部。
缓存怎么定规格?不够用了怎么办?
不需要手动定规格:每次启动时模块会把可用内存的 60% 分配给缓存,并根据实例规格推算线程数和连接数。如果需要更大的缓存,停止实例、更换为内存更大的类型再启动 — 调优会自动重新计算。
它能在 x86_64 实例上运行吗?
不能。v2.0 面向 arm64(AWS Graviton)发布:t4g、c6g–c8g、m6g–m8g、r6g–r8g 等系列。
订阅具体包含什么?
加固的 AMI、产品生命周期内的新版本,以及构建团队的支持。按实例付费:0.014 美元/小时或 99 美元/年,含 7 天免费试用。
更新日志 #
AMI 的历史。日期对应每个版本在 AWS Marketplace 的发布时间。
基线升级至 Ubuntu 26.04,Lynis 100/100
AMI 在 Ubuntu 26.04 LTS(resolute)arm64 上重新构建,Lynis 审计达到最高指数。
首次发布
在 AWS Marketplace 的首个公开版本,基于 Ubuntu 24.04 LTS arm64。
imaxe memcached optimize),并内置带 13 个模块的 imaxe 工具。