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
),確??蛻舳诉B接的是正確的broker地址。log4j.properties
),保留最近30天的日志;配置JMX監控(通過-Dcom.sun.management.jmxremote
參數),監控CPU、內存、磁盤使用情況;設置告警閾值(如磁盤空間超過80%時觸發告警)。