Kafka在CentOS上的安全配置指南
在配置Kafka安全前,需先强化CentOS系统本身的安全:
passwd -l <用户名>
锁定不必要的账户);设置复杂口令(包含大小写字母、数字、特殊字符中的至少三种,长度大于10位);使用chattr +i
命令保护/etc/passwd
、/etc/shadow
等关键文件,防止未授权修改。firewall-cmd
开放Kafka必需端口(默认9092,SSL端口9093),并通过--add-rich-rule
限制访问源IP(如仅允许内网网段192.168.1.0/24
访问)。SASL(Simple Authentication and Security Layer)是Kafka主流的身份认证机制,推荐使用SCRAM-SHA-256(更安全的哈希算法):
/etc/kafka
)下创建kafka_server_jaas.conf
,内容如下(替换为实际用户名和密码):KafkaServer { org.apache.kafka.common.security.scram.ScramLoginModule required user_admin="admin-secret" user_producer="producer-secret" user_consumer="consumer-secret"; };
server.properties
,添加以下参数:security.inter.broker.protocol=SASL_PLAINTEXT # broker间通信协议 sasl.enabled.mechanisms=SCRAM-SHA-256 # 启用的认证机制 sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256 # broker间使用的机制 sasl.jaas.config=/etc/kafka/kafka_server_jaas.conf # JAAS文件路径
security.protocol=SASL_PLAINTEXT sasl.mechanism=SCRAM-SHA-256 sasl.jaas.config='org.apache.kafka.common.security.scram.ScramLoginModule required username="producer" password="producer-secret";'
为防止数据在传输过程中被窃取或篡改,需启用SSL/TLS加密:
# 生成密钥库(包含服务端私钥和证书) keytool -genkey -alias kafka-server -keystore kafka.server.keystore.jks -storepass password -validity 365 -keysize 2048 # 导出证书 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.server.truststore.jks -storepass password
server.properties
中添加SSL参数:listeners=SSL://:9093 # SSL监听端口 security.protocol=SSL # 安全协议 ssl.keystore.location=/etc/kafka/kafka.server.keystore.jks # 密钥库路径 ssl.keystore.password=password # 密钥库密码 ssl.key.password=password # 私钥密码 ssl.truststore.location=/etc/kafka/kafka.server.truststore.jks # 信任库路径 ssl.truststore.password=password # 信任库密码 ssl.enabled.protocols=TLSv1.2 # 启用的协议版本(禁用TLSv1.0/1.1) ssl.cipher.suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384 # 加密套件
通过ACL(Access Control List)实现细粒度的权限控制,定义用户对主题的操作权限(如读、写、创建):
server.properties
中设置:authorizer.class.name=kafka.security.authorizer.AclAuthorizer # 使用AclAuthorizer allow.everyone.if.no.acl.found=false # 无ACL时拒绝访问(生产环境必须设为false)
kafka-acls.sh
工具添加规则,例如允许用户producer
向主题test-topic
写入数据:bin/kafka-acls.sh --bootstrap-server localhost:9093 --add --allow-principal User:producer --operation Write --topic test-topic
查看ACL规则:bin/kafka-acls.sh --bootstrap-server localhost:9093 --list --topic test-topic
firewall-cmd
开放端口并限制访问源:# 开放SSL端口 sudo firewall-cmd --permanent --add-port=9093/tcp # 限制访问IP(仅允许内网192.168.1.0/24访问) sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept' sudo firewall-cmd --reload
advertised.listeners
参数(如advertised.listeners=SSL://broker-ip:9093
),确保客户端连接的是正确的broker地址。log4j.properties
),保留最近30天的日志;配置JMX监控(通过-Dcom.sun.management.jmxremote
参数),监控CPU、内存、磁盘使用情况;设置告警阈值(如磁盘空间超过80%时触发告警)。