在 Debian 上部署 Kafka 时,“保证安全”通常包含认证(Authentication)、授权(Authorization)、传输加密(TLS)、网络隔离、权限与运维安全几个方面。下面按实用角度给你一个系统说明。
listeners=PLAINTEXT://192.168.10.10:9092
advertised.listeners=PLAINTEXT://192.168.10.10:9092
ufw allow from 192.168.10.0/24 to any port 9092
useradd -r -s /usr/sbin/nologin kafka
chown -R kafka:kafka /opt/kafka
keytool -keystore kafka.server.keystore.jks -alias kafka -validity 365 -genkey
listeners=SSL://:9093
advertised.listeners=SSL://kafka1.example.com:9093
ssl.keystore.location=/opt/kafka/ssl/kafka.server.keystore.jks
ssl.keystore.password=xxx
ssl.key.password=xxx
ssl.truststore.location=/opt/kafka/ssl/kafka.server.truststore.jks
ssl.truststore.password=xxx
ssl.client.auth=required
✅ 效果:
ssl.client.auth=required
listeners=SASL_SSL://:9093
security.inter.broker.protocol=SASL_SSL
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN
jaas 文件:
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret"
user_user1="user1-secret";
};
⚠ 注意:PLAIN 必须配合 SSL 使用
bin/kafka-configs.sh --bootstrap-server localhost:9093 \
--alter --add-config 'SCRAM-SHA-256=[password=secret]' \
--entity-type users --entity-name user1
authorizer.class.name=kafka.security.authorizer.AclAuthorizer
super.users=User:admin
bin/kafka-acls.sh --bootstrap-server localhost:9093 \
--add --allow-principal User:user1 \
--operation Read --topic test-topic \
--group group1
✅ 可控制:
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-256
ssl.truststore.location=/path/client.truststore.jks
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="user1" password="secret";
[Service]
User=kafka
NoNewPrivileges=true
ProtectSystem=full
apt update && apt upgrade
/var/log/kafka/
journalctl -u kafka
✅ KRaft + SASL/SCRAM + TLS + ACL
如果你愿意,我可以: