温馨提示×

kafka在ubuntu上的安全设置怎么做

小樊
46
2026-01-07 18:26:48
栏目: 智能运维

Kafka 在 Ubuntu 的安全设置清单

一 系统级加固

  • 保持系统与依赖更新:执行 apt update && apt upgrade,及时修复已知漏洞;关注 Kafka 官方安全公告并优先升级到稳定版本。
  • 最小化暴露面:仅开放必要端口(如 9092 客户端、2181 Zookeeper),使用 ufw 或云安全组限制来源 IP。
  • 强化 SSH:禁用密码登录(PasswordAuthentication no)、改用密钥登录、可变更默认端口并限制可登录用户/来源网段。
  • 进程与文件权限:以专用系统用户(如 kafka:kafka)运行 Kafka;数据目录(如 /var/lib/kafka)权限 750,配置文件(如 server.properties)权限 640;必要时启用 AppArmor 限制进程能力。
  • 审计与监控:启用系统审计(如 auditd)记录关键命令执行;部署日志收集/告警,持续观察异常连接与操作。

二 传输加密 SSL TLS

  • 生成密钥库与信任库(JKS,示例):
    • 服务器密钥库:
      keytool -genkey -alias kafka -keyalg RSA -keystore kafka.server.keystore.jks -validity 3650
    • 导出服务器证书:
      keytool -export -alias kafka -file kafka.cer -keystore kafka.server.keystore.jks
    • 导入为信任库(供客户端使用):
      keytool -import -alias kafka -file kafka.cer -keystore kafka.server.truststore.jks
  • Broker 端配置 server.properties(示例为仅启用 SSL 的监听器):
    • listeners=SSL://:9093
    • advertised.listeners=SSL://:9093
    • security.inter.broker.protocol=SSL
    • ssl.keystore.location=/path/to/kafka.server.keystore.jks
    • ssl.keystore.password=
    • ssl.key.password=
    • ssl.truststore.location=/path/to/kafka.server.truststore.jks
    • ssl.truststore.password=
    • ssl.enabled.protocols=TLSv1.2,TLSv1.3
    • ssl.client.auth=required(双向校验)
  • 客户端连接示例:
    • security.protocol=SSL
    • ssl.truststore.location=/path/to/kafka.server.truststore.jks
    • ssl.truststore.password=
      说明:生产环境建议优先使用 SASL_SSL 或仅开放 SSL 端口,避免明文通道。

三 身份认证 SASL

  • 推荐机制:使用 SASL/SCRAM(如 SCRAM-SHA-256),支持动态新增用户且无需重启集群。
  • 创建 JAAS 配置 kafka_server_jaas.conf:
    KafkaServer {
    org.apache.kafka.common.security.scram.ScramLoginModule required
    username=“admin”
    password=“admin-secret”
    user_admin=“admin-secret”
    user_producer=“producer-secret”
    user_consumer=“consumer-secret”;
    };
  • Broker 端 server.properties(示例为仅 SASL 的监听器):
    • listeners=SASL_PLAINTEXT://:9092
    • advertised.listeners=SASL_PLAINTEXT://:9092
    • security.inter.broker.protocol=SASL_PLAINTEXT
    • sasl.enabled.mechanisms=SCRAM-SHA-256
    • sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
    • listener.name.sasl_plaintext.scram-sha-256.sasl.jaas.config=file:/path/to/kafka_server_jaas.conf
  • 动态创建用户(无需重启):
    • bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config ‘SCRAM-SHA-256=[password=producer-secret]’ --entity-type users --entity-name producer
    • bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config ‘SCRAM-SHA-256=[password=consumer-secret]’ --entity-type users --entity-name consumer
  • 客户端示例(SASL_PLAINTEXT):
    • security.protocol=SASL_PLAINTEXT
    • sasl.mechanism=SCRAM-SHA-256
    • sasl.jaas.config=‘org.apache.kafka.common.security.scram.ScramLoginModule required username=“producer” password=“producer-secret”;’
      如需更高安全等级,可改用 SASL/SSL 或将 inter.broker.protocol 提升到 SASL_SSL

四 授权与访问控制 ACL

  • 启用 ACL(Broker 端 server.properties):
    • authorizer.class.name=kafka.security.authorizer.AclAuthorizer
    • allow.everyone.if.no.acl.found=false(未匹配 ACL 时默认拒绝)
  • 常用 ACL 操作(示例):
    • 为主题授予生产者写权限:
      bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:producer --operation WRITE --topic test-topic
    • 为主题授予消费者组读权限:
      bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:consumer --operation READ --topic test-topic --group test-group
    • 查看 ACL:
      bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --list --topic test-topic
      说明:ACL 与 SASL 用户一一对应,建议按“最小权限”原则分配。

五 网络与运维安全

  • 防火墙与网络隔离:仅放通 9092/9093(Kafka)与 2181(Zookeeper)到受控来源;在云环境使用 VPC/安全组 白名单控制。
  • 禁用明文端口:完成 SASL/SSL 验证后,关闭 PLAINTEXT 监听,避免降级攻击面。
  • 日志与审计:在 log4j.properties 中合理配置日志级别与输出;结合 auditd 记录 Kafka 相关关键操作,便于追溯。
  • 持续维护:定期更新 Kafka/Zookeeper/Java 与相关依赖;定期轮换证书与凭据、复核 ACL 与防火墙策略。

0