温馨提示×

ubuntu kafka安全怎么设

小樊
42
2026-09-20 21:15:29
栏目: 智能运维

在 Ubuntu 上部署 Kafka 时,常见的安全设置主要包括 认证(SASL)、授权(ACL)、加密(SSL/TLS) 以及 网络与系统层面加固。下面按实用程度给你一个清晰方案。


一、基础安全(必须先做)

1. 不要使用 root 运行 Kafka

sudo useradd -m kafka
sudo su - kafka

2. 限制端口访问

Kafka 默认端口:

  • 9092:客户端
  • 2181:ZooKeeper(如果用)

防火墙示例(ufw)

sudo ufw allow 22
sudo ufw allow from 10.0.0.0/8 to any port 9092
sudo ufw enable

二、启用 SASL 认证(最常用)

1. 修改 server.properties

listeners=SASL_PLAINTEXT://:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN

2. 配置用户密码

新建文件:

/opt/kafka/config/kafka_server_jaas.conf

内容:

KafkaServer {
  org.apache.kafka.common.security.plain.PlainLoginModule required
  username="admin"
  password="admin-secret"
  user_admin="admin-secret"
  user_user1="user1-secret";
};

3. 启动 Kafka 时加载 JAAS

修改 kafka-server-start.sh 或加环境变量:

export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf"

三、客户端连接(SASL)

security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
  username="user1" password="user1-secret";

四、启用 SSL/TLS 加密(推荐生产)

1. 生成证书

keytool -keystore kafka.server.keystore.jks -alias localhost -validity 365 -genkey

2. server.properties

listeners=SSL://:9093
ssl.keystore.location=/opt/kafka/ssl/kafka.server.keystore.jks
ssl.keystore.password=123456
ssl.key.password=123456
ssl.truststore.location=/opt/kafka/ssl/kafka.server.truststore.jks
ssl.truststore.password=123456

五、ACL 授权(防止乱发消息)

kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \
  --add --allow-principal User:user1 \
  --operation Write --topic test

常用权限:

  • Read / Write(topic)
  • Describe
  • Create

六、ZooKeeper 安全(常被忽略)

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl

七、生产环境建议组合

✅ 最推荐

SASL_SSL + ACL

✅ 简单测试

SASL_PLAINTEXT

❌ 不建议

PLAINTEXT(无任何安全)

八、常见安全问题

  • Kafka 暴露公网 → 被挖矿
  • ZooKeeper 无认证 → 被删 topic
  • 使用 root 运行 → 被提权

如果你愿意,我可以:

  • ✅ 给你一套 完整 Kafka + SASL_SSL 配置示例
  • ✅ 写成 systemd 服务 + 自动化脚本
  • ✅ 针对 Docker / Kubernetes 场景说明

你现在是 测试环境还是生产环境?单节点还是集群?

0 踩