1. Elasticsearch 配置(elasticsearch.yml

需配置:

  • 自身的實體證書(用於 Transport 層節點間通信、HTTP 層外部客户端通信);
  • CA 根證書(用於驗證其他節點 / 組件的實體證書)。

yaml

 

 

# 基本配置
cluster.name: my-elk-cluster
node.name: es-node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch

# 網絡配置(需與實體證書中的hostname一致)
network.host: 192.168.1.100  # 實際IP/域名
http.port: 9200

# 1. Transport層(節點間通信)SSL配置
xpack.security.transport.ssl.enabled: true
# 自身的實體證書(包含公鑰+私鑰,p12格式)
xpack.security.transport.ssl.keystore.path: certs/es-node.p12
xpack.security.transport.ssl.keystore.password: your_es_keystore_pwd  # 實體證書密碼
# CA根證書(用於驗證其他節點的實體證書)
xpack.security.transport.ssl.truststore.path: certs/elastic-ca.p12
xpack.security.transport.ssl.truststore.password: your_ca_pwd  # CA證書密碼(若設置)

# 2. HTTP層(與Kibana/Logstash通信)SSL配置
xpack.security.http.ssl.enabled: true
# 可複用Transport層的實體證書(或單獨生成,此處複用)
xpack.security.http.ssl.keystore.path: certs/es-node.p12
xpack.security.http.ssl.keystore.password: your_es_keystore_pwd
# CA根證書(用於驗證客户端如Kibana的實體證書,可選,若開啓客户端證書驗證)
xpack.security.http.ssl.truststore.path: certs/elastic-ca.p12
xpack.security.http.ssl.truststore.password: your_ca_pwd

# 啓用安全功能(必須開啓,否則SSL配置不生效)
xpack.security.enabled: true

 

2. Logstash 配置(/etc/logstash/conf.d/logstash.conf

需配置:

  • 輸入端(如 Beats):自身的實體證書(供 Filebeat 驗證)+ CA 根證書(驗證 Filebeat 的實體證書);
  • 輸出端(到 Elasticsearch):CA 根證書(驗證 ES 的實體證書)+ 自身的實體證書(供 ES 驗證,可選)。

ruby

 

 

# 輸入:接收Filebeat數據(需SSL加密)
input {
  beats {
    port => 5044
    # 啓用SSL
    ssl => true
    # 自身的實體證書(公鑰,供Filebeat驗證Logstash身份)
    ssl_certificate => "/etc/logstash/certs/logstash-cert.pem"
    # 自身的實體私鑰
    ssl_key => "/etc/logstash/certs/logstash-key.pem"
    # CA根證書(用於驗證Filebeat的實體證書是否可信)
    ssl_certificate_authorities => ["/etc/logstash/certs/elastic-ca.pem"]
    # 強制驗證Filebeat的證書(確保來源可信)
    ssl_verify_mode => "force_peer"
  }
}

# 過濾:按需添加(示例)
filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
}

# 輸出:發送到Elasticsearch(需SSL加密)
output {
  elasticsearch {
    hosts => ["https://192.168.1.100:9200"]  # ES的HTTPS地址
    # 訪問ES的賬號密碼(需提前在ES中創建)
    user => "logstash_writer"
    password => "logstash_pwd"
    # 啓用SSL
    ssl => true
    # CA根證書(用於驗證ES的實體證書是否可信)
    cacert => "/etc/logstash/certs/elastic-ca.pem"
    # 若ES開啓了客户端證書驗證,需添加Logstash的實體證書(可選)
    # ssl_certificate => "/etc/logstash/certs/logstash-cert.pem"
    # ssl_key => "/etc/logstash/certs/logstash-key.pem"
  }
}

 

3. Filebeat 配置(filebeat.yml

需配置:

  • 輸出到 Logstash:自身的實體證書(供 Logstash 驗證)+ CA 根證書(驗證 Logstash 的實體證書)。

yaml

 

 

# 啓用模塊(按需開啓,如nginx、syslog等)
filebeat.modules:
- module: nginx
  access:
    enabled: true
    paths:
      - /var/log/nginx/access.log

# 輸出到Logstash
output.logstash:
  hosts: ["192.168.1.101:5044"]  # Logstash地址
  # SSL配置
  ssl:
    enabled: true
    # CA根證書(用於驗證Logstash的實體證書是否可信)
    certificate_authorities: ["/etc/filebeat/certs/elastic-ca.pem"]
    # 自身的實體證書(供Logstash驗證Filebeat身份)
    certificate: "/etc/filebeat/certs/filebeat-cert.pem"
    # 自身的實體私鑰
    key: "/etc/filebeat/certs/filebeat-key.pem"

# 日誌配置(可選)
logging.level: info
logging.to_files: true
logging.files:
  path: /var/log/filebeat

 

4. Kibana 配置(kibana.yml

需配置兩部分:

  • 內部通信(與 ES):自身的實體證書(供 ES 驗證)+ CA 根證書(驗證 ES 的實體證書);
  • 外部訪問(用户瀏覽器):公共 CA 簽發的實體證書(供瀏覽器信任)。

yaml

 

 

# 基本配置
server.name: kibana
server.host: "192.168.1.102"  # 實際IP/域名

# 1. 與Elasticsearch內部通信的SSL配置
elasticsearch.hosts: ["https://192.168.1.100:9200"]  # ES的HTTPS地址
# 訪問ES的賬號密碼(kibana_system用户,需提前在ES中創建)
elasticsearch.username: "kibana_system"
elasticsearch.password: "kibana_pwd"
# CA根證書(用於驗證ES的實體證書是否可信)
elasticsearch.ssl.certificateAuthorities: ["/etc/kibana/certs/elastic-ca.pem"]
# 自身的實體證書(供ES驗證Kibana身份,可選,若ES開啓客户端驗證)
elasticsearch.ssl.certificate: "/etc/kibana/certs/kibana-cert.pem"
elasticsearch.ssl.key: "/etc/kibana/certs/kibana-key.pem"

# 2. 外部訪問(用户瀏覽器)的HTTPS配置(公共CA證書)
server.ssl.enabled: true
# 公共CA簽發的實體證書(公鑰,如Let's Encrypt的kibana.yourdomain.com證書)
server.ssl.certificate: "/etc/kibana/certs/public-kibana-cert.pem"
# 公共CA證書對應的私鑰
server.ssl.key: "/etc/kibana/certs/public-kibana-key.pem"
# 公共CA的根證書(可選,瀏覽器通常已預裝,無需配置)
# server.ssl.certificateAuthorities: ["/etc/kibana/certs/public-ca-root.pem"]

# 日誌配置(可選)
logging:
  appenders:
    file:
      path: /var/log/kibana
      name: kibana-log
  root:
    appenders: [file]

 

配置要點總結

  1. 每個組件都需要兩類證書:
  • 自身的實體證書(xxx-cert.pem/xxx.p12 + 私鑰):證明 “我是誰”;
  • CA 根證書(elastic-ca.pem/elastic-ca.p12):驗證 “對方的實體證書是否可信”。
  1. Kibana 的特殊性:
  • 內部與 ES 通信:用自簽名 CA 體系(elastic-ca.pem + 自身實體證書);
  • 外部用户訪問:用公共 CA 證書(public-kibana-cert.pem),確保瀏覽器信任。
  1. 證書路徑與權限:
  • 所有證書路徑建議用絕對路徑;
  • 確保組件進程(如elasticsearchkibana用户)對證書文件有讀取權限(chown命令設置)。
  1. 一致性檢查:
  • 實體證書中的hostname必須包含組件實際通信的 IP / 域名(否則 SSL 驗證會報 “主機名不匹配” 錯誤);
  • 所有實體證書必須由同一 CA 根證書(elastic-ca)簽發。

按此配置後,ELK 內部通信會通過自簽名 CA 實現加密互信,Kibana 外部訪問會通過公共 CA 實現瀏覽器信任,兼顧安全性和易用性。