1. 启用强认证机制
Kafka在Ubuntu上的安全基础是身份认证,需通过以下方式实现:
SCRAM-SHA-256或SCRAM-SHA-512(比PLAIN更安全)作为认证机制。配置server.properties文件,设置security.inter.broker.protocol=SASL_PLAINTEXT(或SASL_SSL)、sasl.mechanism.inter.broker.protocol=SCRAM-SHA-512、sasl.enabled.mechanisms=SCRAM-SHA-512;创建JAAS配置文件(如kafka_server_jaas.conf),定义用户凭据(如admin用户的密码);通过kafka-configs.sh命令将用户添加到Kafka中(如./bin/kafka-configs.sh --zookeeper localhost:2181 --alter --add-config "SCRAM-SHA-512=[password=Root@123]" --entity-type users --entity-name admin)。kafka/hostname@REALM),配置Kafka的JAAS文件引用Kerberos keytab文件,客户端通过kinit命令获取票据后连接。2. 配置SSL/TLS加密通信
加密数据传输可防止中间人攻击,需完成以下步骤:
keytool或OpenSSL生成密钥库(Keystore,存储服务器私钥和证书)和信任库(Truststore,存储客户端信任的证书)。例如,用keytool生成服务器密钥库:keytool -genkey -alias kafka -keyalg RSA -keystore kafka.server.keystore.jks -validity 3650;导出证书并导入信任库:keytool -export -alias kafka -file kafka.server.crt -keystore kafka.server.keystore.jks,keytool -import -alias kafka -file kafka.server.crt -keystore kafka.client.truststore.jks。server.properties,设置listeners=SASL_SSL://:9093(同时启用SASL和SSL)、security.inter.broker.protocol=SASL_SSL、ssl.keystore.location=/path/to/kafka.server.keystore.jks、ssl.keystore.password=your_password、ssl.truststore.location=/path/to/kafka.client.truststore.jks、ssl.truststore.password=your_password、ssl.client.auth=required(要求客户端提供证书)。security.protocol=SASL_SSL、ssl.truststore.location=/path/to/client.truststore.jks、ssl.truststore.password=your_password、sasl.mechanism=SCRAM-SHA-512、sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="Root@123";。3. 细粒度访问控制(ACL)
通过ACL限制用户对主题/分区的操作权限(如读、写、创建、删除),防止未授权访问:
kafka-configs.sh命令管理ACL。例如,允许Reader用户读取test主题:./bin/kafka-configs.sh --zookeeper localhost:2181 --add-acl --auth-principal User:Reader --allow-principal User:Reader --topic test --operation Read;禁止Writer用户写入admin主题:./bin/kafka-configs.sh --zookeeper localhost:2181 --remove-acl --auth-principal User:Writer --topic admin --operation Write。4. 网络与防火墙隔离
限制Kafka集群的网络访问范围,减少暴露风险:
ufw)仅允许特定IP访问Kafka端口(默认9092或9093):sudo ufw allow from 192.168.1.0/24 to any port 9093。PLAINTEXT端口(若无需明文通信),在server.properties中移除PLAINTEXT监听器。5. 操作系统权限控制
降低Kafka进程的系统权限,防止恶意操作:
kafka用户),避免使用root。创建用户:sudo useradd -r -s /bin/false kafka;修改Kafka目录权限:sudo chown -R kafka:kafka /opt/kafka。kafka用户读写。6. 日志与监控审计
通过日志记录和监控及时发现异常行为:
log4j.properties中配置安全相关日志级别为DEBUG(如log4j.logger.org.apache.kafka.security=DEBUG),记录认证、授权事件。7. 定期更新与补丁管理
保持Kafka和Ubuntu系统的安全性: