Linux环境下Kafka安全设置全流程指南
Kafka作为分布式消息系统,其安全性需覆盖网络隔离、身份认证、权限控制、数据加密、审计监控五大核心维度,以下是具体实施步骤:
firewalld或iptables限制Kafka端口(默认9092,SSL端口9093)的访问,仅允许可信IP段接入。例如,通过firewalld开放端口并重载规则:sudo firewall-cmd --permanent --add-port=9092/tcp --add-port=9093/tcp
sudo firewall-cmd --reload
/etc/selinux/config,设置SELINUX=disabled,并通过setenforce 0立即生效。kafka_server_jaas.conf,定义用户凭据(如admin用户):KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="admin-secret";
};
server.properties:启用SASL并指定JAAS配置:listeners=SASL_SSL://:9093
security.inter.broker.protocol=SASL_SSL
sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256
sasl.enabled.mechanisms=SCRAM-SHA-256
sasl.jaas.config=/path/to/kafka_server_jaas.conf
客户端需对应配置security.protocol和sasl.mechanism,例如生产者/消费者配置文件client.properties:
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-256
server.properties,设置AclAuthorizer为默认授权器,并禁止未配置ACL的默认访问:authorizer.class.name=kafka.security.authorizer.AclAuthorizer
allow.everyone.if.no.acl.found=false
kafka-acls.sh脚本为用户分配权限(如允许producer用户向test-topic写入,consumer用户读取):# 生产者写入权限
kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \
--add --allow-principal User:producer --operation Write --topic test-topic
# 消费者读取权限
kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 \
--add --allow-principal User:consumer --operation Read --topic test-topic
keytool生成自签名证书(生产环境建议使用CA签发):# 生成密钥库(Keystore)
keytool -genkey -alias kafka-server -keystore kafka.server.keystore.jks -storepass changeit -keypass changeit -validity 365
# 导出证书
keytool -export -alias kafka-server -file kafka.server.crt -keystore kafka.server.keystore.jks -storepass changeit
# 生成信任库(Truststore)并导入证书
keytool -import -alias kafka-server -file kafka.server.crt -keystore kafka.server.truststore.jks -storepass changeit
server.properties:启用SSL并指定密钥库/信任库路径:listeners=SSL://:9093
security.inter.broker.protocol=SSL
ssl.keystore.location=/path/to/kafka.server.keystore.jks
ssl.keystore.password=changeit
ssl.key.password=changeit
ssl.truststore.location=/path/to/kafka.server.truststore.jks
ssl.truststore.password=changeit
ssl.enabled.protocols=TLSv1.2,TLSv1.3
security.protocol=SSL
ssl.truststore.location=/path/to/client.truststore.jks
ssl.truststore.password=changeit
log4j.properties,设置Kafka及ZooKeeper的日志级别为INFO,记录关键操作:log4j.logger.kafka=INFO
log4j.logger.org.apache.zookeeper=INFO
server.properties、kafka_server_jaas.conf)及数据目录(log.dirs)仅能被Kafka运行用户(如kafka)访问:chown -R kafka:kafka /path/to/kafka/config /path/to/kafka/data
chmod -R 700 /path/to/kafka/config /path/to/kafka/data
通过以上步骤,可构建Linux环境下Kafka的多层安全防护体系,有效防范未授权访问、数据泄露及恶意攻击。