CentOS環境下Kafka安全設置指南
在CentOS上部署Kafka時,需通過認證、加密、授權、網絡隔離及監控等多層措施保障集群安全。以下是具體實施步驟:
/etc/passwd排查id=0的賬戶(除root外),使用passwd -l <用戶名>鎖定無用超級賬戶,或將其shell改為/sbin/nologin(如usermod -s /sbin/nologin testuser),防止未授權root訪問。authconfig --passminlen=10 --passcomplexity=1 --update設置)。使用chattr +i /etc/shadow鎖定口令文件,防止篡改。SCRAM-SHA-256機制(推薦):
kafka-configs.sh添加用戶及SCRAM密碼(如kafka-configs.sh --zookeeper localhost:2181 --entity-type users --entity-name kafka-user --alter --add-config SCRAM-SHA-256=[iterations=8192,password=test123])。/etc/kafka/kafka_server_jaas.conf):指定SCRAM登錄模塊及用戶信息(如KafkaServer { org.apache.kafka.common.security.scram.ScramLoginModule required username="kafka-user" password="test123"; };)。server.properties:啟用SASL,指定機制及JAAS文件路徑(如security.inter.broker.protocol=SASL_SSL、sasl.enabled.mechanisms=SCRAM-SHA-256、sasl.mechanism.inter.broker.protocol=SCRAM-SHA-256、sasl.jaas.config=file:/etc/kafka/kafka_server_jaas.conf)。PLAIN機制(測試用,不推薦生產):
JAAS文件配置示例:KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin-secret" user_admin="admin-secret"; };,server.properties中設置sasl.mechanism.inter.broker.protocol=PLAIN。
keytool -genkey -alias kafka-server -keystore kafka.server.keystore.jks -storepass kafka123 -validity 365 -keysize 2048;導出證書并導入信任庫:keytool -export -alias kafka-server -file kafka.server.crt -keystore kafka.server.keystore.jks -storepass kafka123;keytool -import -alias kafka-server -file kafka.server.crt -keystore kafka.server.truststore.jks -storepass kafka123)。server.properties中啟用SSL,指定證書路徑及密碼(如listeners=SSL://:9093、ssl.keystore.location=/etc/kafka/kafka.server.keystore.jks、ssl.keystore.password=kafka123、ssl.truststore.location=/etc/kafka/kafka.server.truststore.jks、ssl.truststore.password=kafka123、ssl.enabled.protocols=TLSv1.2、ssl.cipher.suites=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384)。server.properties,設置授權器為AclAuthorizer,禁止無ACL時的全局訪問(如authorizer.class.name=kafka.security.authorizer.AclAuthorizer、allow.everyone.if.no.acl.found=false)。kafka-configs.sh添加用戶(如kafka-configs.sh --zookeeper localhost:2181 --entity-type users --entity-name user1 --alter --add-config SCRAM-SHA-256=[password=test123]);創建用戶組并添加成員(如kafka-configs.sh --zookeeper localhost:2181 --entity-type groups --entity-name group1 --alter --add-config Members=user1,user2)。kafka-acls.sh定義權限(如允許user1向topic1生產消息:kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:user1 --operation Produce --topic topic1;允許group1從topic1消費消息:kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal Group:group1 --operation Consume --topic topic1)。firewall-cmd開放Kafka端口(默認9092用于SASL_PLAINTEXT,9093用于SSL;若使用Zookeeper,需開放2181端口),并限制訪問源(如firewall-cmd --permanent --zone=public --add-port=9093/tcp;firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="9093" protocol="tcp" accept';firewall-cmd --reload)。server.properties中配置listeners為具體IP(如listeners=SASL_SSL://192.168.1.100:9093),而非0.0.0.0,避免暴露給無關網絡。server.properties中配置日志路徑(如log.dirs=/var/log/kafka),通過log4j.properties調整日志級別(如log4j.logger.kafka.authorizer.logger=WARN),記錄用戶訪問、權限變更等活動。grep、awk等工具分析日志(如grep "Unauthorized" /var/log/kafka/server.log),及時發現未授權訪問嘗試。setenforce 0)或調整其策略(如setsebool -P kafka_connect_any 0);避免使用默認的Zookeeper端口(2181),修改為非標準端口。yum update kafka),修復已知漏洞;定期備份/var/lib/kafka數據目錄(如使用rsync或tar),防止數據丟失。/etc/security/limits.conf,增加Kafka進程的文件描述符(如kafka hard nofile 65536)和進程數限制(如kafka hard nproc 65536),防止DoS攻擊。通過以上步驟,可構建CentOS環境下Kafka的多層安全防護體系,滿足生產環境的基本安全需求。需根據實際場景調整配置(如使用Kerberos替代SCRAM-SHA-256實現更高級的身份認證)。