温馨提示×

Debian Kafka安全如何设

小樊
39
2026-07-11 17:55:35
栏目: 智能运维

在 Debian 上部署 Kafka 时,安全设置一般包括 认证(Authentication)鉴权(Authorization)网络加密(SSL/TLS) 以及 操作系统与文件系统安全。下面我按生产环境常见做法,给你一个完整、可落地的 Kafka 安全配置指南。


一、Kafka 安全体系概览

Kafka 安全主要涉及四方面:

安全层 说明
认证 SASL(SCRAM / PLAIN / GSSAPI)或 mTLS
鉴权 ACL(基于用户/客户端的访问控制)
传输加密 SSL/TLS
主机安全 Debian 系统层面

二、前置条件(Debian)

sudo apt update
sudo apt install openjdk-17-jdk -y

Kafka 官方推荐:

  • Java 11+
  • Debian 11(Bullseye)或 12(Bookworm)

三、SSL/TLS 加密(推荐第一步)

1️⃣ 生成 CA 和证书

# CA
openssl genrsa -out ca-key.pem 2048
openssl req -new -x509 -key ca-key.pem -out ca-cert.pem -days 3650

# Kafka Server 证书
openssl genrsa -out kafka-server-key.pem 2048
openssl req -new -key kafka-server-key.pem -out kafka-server-csr.pem -subj "/CN=kafka01"
openssl x509 -req -in kafka-server-csr.pem -CA ca-cert.pem -CAkey ca-key.pem \
  -CAcreateserial -out kafka-server-cert.pem -days 3650

2️⃣ 转换为 Java KeyStore

openssl pkcs12 -export \
  -in kafka-server-cert.pem \
  -inkey kafka-server-key.pem \
  -out kafka-server.p12 \
  -name kafka-server \
  -passout pass:changeit

keytool -importkeystore \
  -destkeystore kafka.server.keystore.jks \
  -srckeystore kafka-server.p12 \
  -srcstoretype PKCS12 \
  -alias kafka-server \
  -storepass changeit

3️⃣ Kafka server.properties

listeners=SSL://:9093
ssl.keystore.location=/opt/kafka/ssl/kafka.server.keystore.jks
ssl.keystore.password=changeit
ssl.key.password=changeit
ssl.truststore.location=/opt/kafka/ssl/kafka.truststore.jks
ssl.truststore.password=changeit
ssl.client.auth=required

四、SASL 认证(SCRAM 推荐)

1️⃣ 启用 SASL + SSL

listeners=SASL_SSL://:9093
security.inter.broker.protocol=SASL_SSL
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512
sasl.enabled.mechanisms=SCRAM-SHA-512

2️⃣ 创建 SCRAM 用户

bin/kafka-configs.sh \
  --bootstrap-server localhost:9093 \
  --alter \
  --add-config 'SCRAM-SHA-512=[password=admin-secret]' \
  --entity-type users \
  --entity-name admin

3️⃣ JAAS 配置

/opt/kafka/config/kafka_server_jaas.conf

KafkaServer {
  org.apache.kafka.common.security.scram.ScramLoginModule required
  username="admin"
  password="admin-secret";
};

/opt/kafka/config/kafka_client_jaas.conf

KafkaClient {
  org.apache.kafka.common.security.scram.ScramLoginModule required
  username="admin"
  password="admin-secret";
};

启动 Kafka 时:

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

五、鉴权(ACL)

1️⃣ 开启 ACL

authorizer.class.name=kafka.security.authorizer.AclAuthorizer
allow.everyone.if.no.acl.found=false
super.users=User:admin

2️⃣ 示例 ACL

bin/kafka-acls.sh \
  --bootstrap-server localhost:9093 \
  --add \
  --allow-principal User:producer1 \
  --producer \
  --topic test-topic
bin/kafka-acls.sh \
  --bootstrap-server localhost:9093 \
  --add \
  --allow-principal User:consumer1 \
  --consumer \
  --topic test-topic \
  --group test-group

六、客户端连接示例

Java

security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required \
  username="producer1" \
  password="producer-secret";
ssl.truststore.location=/opt/kafka/ssl/kafka.truststore.jks
ssl.truststore.password=changeit

七、Debian 系统级安全建议

✅ 使用非 root 用户运行 Kafka
✅ 限制 Kafka 端口(9093)只允许内网
✅ 禁止 Kafka 目录写入执行权限
✅ 定期更新 Debian & Kafka
✅ 日志与数据目录分离
✅ 使用 systemd 限制资源

[Service]
User=kafka
LimitNOFILE=100000

八、推荐生产级组合 ✅

✔ SASL_SSL + SCRAM-SHA-512
✔ 强制 ACL
✔ TLS 双向认证
✔ Debian AppArmor / firewall


如果你愿意,我可以:

  • 给你 完整 server.properties 模板
  • 帮你 简化成测试环境用配置
  • 或针对 Docker / Kubernetes / 云环境 单独设计安全方案

你现在是 测试环境还是生产环境

0