Skip to content

Memcached 防火墙配置

防火墙基础知识

1. 防火墙的作用

  • 网络隔离:将 Memcached 服务与外部网络隔离,限制访问范围
  • 访问控制:只允许特定 IP 地址或网络访问 Memcached 服务
  • 端口保护:保护 Memcached 默认端口(11211)免受未授权访问
  • 安全加固:作为 Memcached 安全防护的第一道防线

2. 常见防火墙类型

  • 硬件防火墙:物理设备,通常部署在网络边界
  • 软件防火墙:运行在服务器上的软件,如 iptables(Linux)、Windows 防火墙
  • 云防火墙:云服务提供商提供的防火墙服务,如 AWS Security Groups

Linux 防火墙配置

1. iptables 配置

允许特定 IP 访问 Memcached 端口

bash
# 允许本地访问
iptables -A INPUT -p tcp -s 127.0.0.1 --dport 11211 -j ACCEPT

# 允许特定 IP 访问
iptables -A INPUT -p tcp -s 192.168.1.100 --dport 11211 -j ACCEPT

# 允许特定网段访问
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 11211 -j ACCEPT

# 拒绝其他所有访问
iptables -A INPUT -p tcp --dport 11211 -j DROP

# 保存配置(CentOS/RHEL)
service iptables save

# 保存配置(Debian/Ubuntu)
iptables-save > /etc/iptables/rules.v4

允许 UDP 端口(如果使用 UDP 协议)

bash
iptables -A INPUT -p udp -s 192.168.1.0/24 --dport 11211 -j ACCEPT
iptables -A INPUT -p udp --dport 11211 -j DROP

2. firewalld 配置(CentOS 7+)

允许特定 IP 访问

bash
# 允许本地访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="127.0.0.1" port protocol="tcp" port="11211" accept'

# 允许特定 IP 访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="11211" accept'

# 允许特定网段访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="11211" accept'

# 重新加载配置
firewall-cmd --reload

Windows 防火墙配置

1. 图形界面配置

  1. 打开 "Windows Defender 防火墙" → "高级设置"
  2. 选择 "入站规则" → "新建规则"
  3. 选择 "端口" → 下一步
  4. 选择 "TCP",并在 "特定本地端口" 中输入 "11211"
  5. 选择 "允许连接" → 下一步
  6. 选择适用的网络类型 → 下一步
  7. 输入规则名称(如 "Memcached 11211")→ 完成
  8. 右键点击新建的规则 → "属性" → "作用域"
  9. 在 "远程 IP 地址" 中选择 "下列 IP 地址",添加允许访问的 IP 地址或网段

2. PowerShell 配置

powershell
# 新建入站规则,允许特定 IP 访问 11211 端口
New-NetFirewallRule -DisplayName "Memcached 11211" -Direction Inbound -Protocol TCP -LocalPort 11211 -Action Allow -RemoteAddress 192.168.1.0/24,127.0.0.1

# 查看现有规则
Get-NetFirewallRule -DisplayName "Memcached*"

云环境防火墙配置

1. AWS Security Groups

  1. 登录 AWS 控制台,进入 EC2 服务
  2. 选择 "安全组" → "创建安全组"
  3. 输入安全组名称和描述
  4. 在 "入站规则" 中添加:
    • 类型:TCP
    • 端口范围:11211
    • 源:特定 IP 地址或网段(如 192.168.1.0/24)
  5. 点击 "创建安全组"
  6. 将安全组关联到运行 Memcached 的 EC2 实例

2. 阿里云安全组

  1. 登录阿里云控制台,进入 ECS 服务
  2. 选择 "安全组" → "创建安全组"
  3. 输入安全组名称和描述
  4. 在 "入站规则" 中添加:
    • 协议类型:TCP
    • 端口范围:11211/11211
    • 授权对象:特定 IP 地址或网段(如 192.168.1.0/24)
  5. 点击 "确定"
  6. 将安全组关联到运行 Memcached 的 ECS 实例

Memcached 自身安全配置

1. 绑定本地地址

在 Memcached 启动命令中绑定到本地地址或特定 IP,限制监听范围:

bash
# 仅监听本地地址
memcached -l 127.0.0.1

# 监听特定 IP
memcached -l 192.168.1.50

# 监听多个 IP(需要编译时支持)
memcached -l 127.0.0.1,192.168.1.50

2. 修改默认端口

bash
# 使用自定义端口
memcached -p 11212

3. 启用认证(如果使用支持认证的版本)

bash
# 使用 SASL 认证
memcached -S

防火墙配置最佳实践

1. 最小权限原则

  • 只允许必要的 IP 地址或网段访问 Memcached 服务
  • 只开放必要的端口(通常是 11211/TCP)
  • 避免使用 "允许所有 IP" 的配置

2. 分层防护

  • 结合使用网络防火墙和主机防火墙
  • 云环境中使用安全组 + 主机防火墙的双层防护
  • 对于敏感数据,考虑使用 VPN 或专用网络

3. 定期审计

  • 定期检查防火墙规则,移除不再需要的规则
  • 审计允许访问 Memcached 的 IP 列表
  • 定期测试防火墙规则的有效性

4. 日志记录

  • 启用防火墙日志记录
  • 定期分析防火墙日志,检测异常访问尝试
  • 配置日志告警,及时发现可疑活动

防火墙故障排除

1. 无法连接到 Memcached

bash
# 检查 Memcached 是否在监听正确的 IP 和端口
netstat -tuln | grep 11211
ss -tuln | grep 11211

# 检查防火墙规则
iptables -L INPUT -n | grep 11211
firewall-cmd --list-all | grep 11211

# 测试本地连接
telnet 127.0.0.1 11211

# 测试远程连接(从客户端)
telnet memcached-server-ip 11211

2. 防火墙规则不生效

  • 检查规则顺序:iptables 规则按照顺序匹配,确保允许规则在拒绝规则之前
  • 检查是否有其他防火墙服务在运行(如 firewalld 和 iptables 同时运行)
  • 检查网络路径中的其他防火墙设备

3. 性能问题

  • 避免过于复杂的防火墙规则,可能影响性能
  • 考虑使用硬件防火墙处理高流量场景
  • 定期清理和优化防火墙规则

常见问题(FAQ)

Q1: Memcached 应该使用 TCP 还是 UDP?

A1: 建议使用 TCP 协议,因为 TCP 提供可靠的连接,而 UDP 可能导致数据丢失。默认情况下,Memcached 同时监听 TCP 和 UDP 端口,建议只开放 TCP 端口。

Q2: 如何允许多个 IP 地址访问 Memcached?

A2: 可以在防火墙规则中添加多个源 IP 地址或网段:

  • 在 iptables 中使用多条 -s 规则
  • 在 firewalld 中创建多个 rich 规则
  • 在云安全组中添加多个源 IP 范围

Q3: 为什么 Memcached 不建议开放到公网?

A3: Memcached 设计时没有考虑安全性,默认没有认证机制。如果开放到公网,可能导致:

  • 未授权访问和数据泄露
  • 被用于 DDoS 攻击(反射攻击)
  • 数据被恶意修改或删除

Q4: 如何配置 Memcached 只监听内部网络?

A4: 有两种方式:

  1. 使用 -l 参数绑定到内部 IP 地址:memcached -l 192.168.1.50
  2. 配置防火墙只允许内部网络访问 Memcached 端口

Q5: 防火墙规则配置后需要重启 Memcached 吗?

A5: 不需要重启 Memcached,防火墙规则的变更会立即生效(前提是保存并重新加载了配置)。

Q6: 如何检测 Memcached 被恶意访问?

A6: 可以通过以下方式检测:

  • 分析防火墙日志,查找异常 IP 访问
  • 监控 Memcached 的连接数和命令数
  • 使用第三方工具监控 Memcached 流量
  • 配置异常访问告警

Q7: 云环境中,安全组和主机防火墙哪个优先级更高?

A7: 云环境中,网络流量先经过安全组,再经过主机防火墙。建议两者都配置,形成双层防护:

  • 安全组:限制外部网络访问
  • 主机防火墙:作为最后一道防线,限制服务器内部访问

Q8: 如何备份和恢复防火墙配置?

A8:

  • iptables:使用 iptables-save > /etc/iptables/rules.v4 备份,iptables-restore < /etc/iptables/rules.v4 恢复
  • firewalld:配置文件位于 /etc/firewalld/,可以直接备份该目录
  • Windows 防火墙:使用 netsh advfirewall export firewall-policy.wfw 备份,netsh advfirewall import firewall-policy.wfw 恢复
  • 云安全组:可以通过 API 或控制台导出/导入配置

Q9: 如何处理大量客户端访问 Memcached 的情况?

A9: 对于大量客户端访问的情况:

  • 使用网段规则代替单个 IP 规则,简化防火墙配置
  • 考虑使用负载均衡器,在负载均衡器层面配置访问控制
  • 确保防火墙性能足以处理高流量
  • 考虑使用硬件防火墙或云防火墙服务

Q10: 防火墙配置会影响 Memcached 的性能吗?

A10: 防火墙配置可能会对性能产生轻微影响,特别是复杂的规则集。建议:

  • 保持防火墙规则简洁
  • 避免使用过于复杂的规则匹配条件
  • 对于高流量场景,考虑使用高性能防火墙设备
  • 定期优化和清理防火墙规则