Kafka在Linux上的安全配置指南
firewalld或iptables限制Kafka端口的访问,仅允许可信IP或子网访问Broker端口(默认9092,SSL端口如9093)。例如,通过firewall-cmd开放9093端口并重载规则:sudo firewall-cmd --permanent --zone=public --add-port=9093/tcp && sudo firewall-cmd --reload。PLAINTEXT监听器(如listeners=PLAINTEXT://:9092),仅保留SASL_SSL或SSL协议,避免明文传输数据。server.properties中设置security.inter.broker.protocol=SASL_PLAINTEXT(若结合SSL则为SASL_SSL),sasl.enabled.mechanisms=PLAIN(或SCRAM-SHA-256/SCRAM-SHA-512)。kafka_server_jaas.conf),定义用户凭证:KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin-secret"
user_admin="admin-secret";
};
--override kafka.server.jaas.config=/path/to/kafka_server_jaas.conf启动Kafka,或在server.properties中添加sasl.jaas.config参数。security.mechanism.inter.broker.protocol设置为SCRAM-SHA-256,并通过kafka-configs.sh创建用户:kafka-configs.sh --zookeeper localhost:2181 --alter --add-config 'SCRAM-SHA-256=[iterations=8192,password=admin-secret]' --entity-type users --entity-name admin。keytool生成密钥库(Keystore,存储Broker私钥)和信任库(Truststore,存储客户端公钥):# 生成密钥库(Broker端)
keytool -genkey -alias kafka-server -keystore kafka.server.keystore.jks -storepass password -validity 3650 -keyalg RSA
# 导出Broker证书
keytool -export -alias kafka-server -file kafka.server.crt -keystore kafka.server.keystore.jks -storepass password
# 生成信任库(客户端)
keytool -import -alias kafka-server -file kafka.server.crt -keystore kafka.client.truststore.jks -storepass password -noprompt
server.properties中启用SSL,指定证书路径:listeners=SSL://:9093
security.inter.broker.protocol=SSL
ssl.keystore.location=/path/to/kafka.server.keystore.jks
ssl.keystore.password=password
ssl.truststore.location=/path/to/kafka.client.truststore.jks
ssl.truststore.password=password
ssl.enabled.protocols=TLSv1.2,TLSv1.3 # 仅启用安全协议版本
client.properties需匹配Broker的信任库和协议:security.protocol=SSL
ssl.truststore.location=/path/to/client.truststore.jks
ssl.truststore.password=password
```。
server.properties中设置authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer,并禁用默认允许无ACL的配置:allow.everyone.if.no.acl.found=false。kafka-acls.sh脚本定义用户对Topic、消费组等资源的访问权限。例如,允许用户admin读取test-topic:kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:admin --operation Read --topic test-topic。kafka)下,避免使用root。通过chown设置Kafka数据目录(如/var/lib/kafka)和配置文件的权限:chown -R kafka:kafka /var/lib/kafka && chmod -R 750 /var/lib/kafka。kafka profile以覆盖其运行所需权限。log4j.properties中设置log4j.logger.kafka=INFO,记录Broker操作、客户端连接等信息。kafka-acls.sh的--list命令定期检查ACL规则,或集成外部SIEM工具(如Elasticsearch、Splunk)实时监控Kafka活动,及时发现异常访问。