我以前寫了ELK+shield的部署文檔,因爲shield是商業收費的,不少人都推崇開源項目search-guard來作ELK的安全組件,準確來講是elasticsearch的安全組件。search-guard的部署很簡單,可是開始着手弄,徹底不瞭解的狀況下仍是會踩一些坑,加上網上對新版本使用介紹少,因此我決定寫一遍search-guard的部署文檔。
search-guard插件包含兩部分,search-guard-ssl和search-guard-2兩個插件(官網提供了一個特殊的包,包含了search-guard和elasticsearch的一個壓縮包,裏面東西齊全,可是有點亂,還有windows的執行文件,因此我仍是一步步安裝插件)。
咱們先安裝search-guard-ssl。按照如下步驟安裝:php
安裝search-guard-ssl插件java
切換到elasticsearch的目錄(通常是/usr/share/elasticsearch)
命令安裝插件:node
sudo bin/plugin install com.floragunn/search-guard-ssl/2.3.4.16
注意版本,這裏elasticsearch的版本就是2.3.4,它是要跟search-guard的版本進行對應的。
克隆search-guard-ssl項目,生成相關證書git
克隆項目命令:github
sudo git clone https://github.com/floragunncom/search-guard-ssl.git
通常來講建立數字證書流程以下:
建立證書流程:
1.建立ROOT CA(根證書/CA認證機構)
2.應用服務器建立CSR(證書籤名請求文件),同時會建立好本身的密鑰對(公鑰和私鑰)
3.將CSR發送到CA認證機構
4.CA機構將返回一個數字簽名證書windows
首先切換到剛剛克隆的search-guard-ssl的項目目錄下
修改etc目錄下的配置文件
example-pki-scripts/etc/root-ca.conf
example-pki-scripts/etc/signing-ca.conf
根據本身狀況改成公司相關信息等
利用腳本,寫入密碼,生成根證書安全
sudo ./gen_root_ca.sh paswd paswd
search-guard-ssl 還提供瞭如下腳本
gen_node_cert.sh
能夠修改爲本身的信息,生成相應服務器證書,裏面包含了上述生成數字證書的過程。
gen_client_node_cert.sh
同理生成客戶端數字證書。這裏記住-dname參數後面的信息,後面認證客戶端,就靠這個。
修改完腳本,就能夠執行腳本,就會生成相關證書了。
- 配置ssl
將生成的證書,keystore.jks 和 truststore.jks複製到/etc/elasticsearch目錄下,而後配置elasticsearch.yml添加配置
searchguard.ssl.transport.enabled: true
searchguard.ssl.transport.keystore_filepath: example-keystore.jks
searchguard.ssl.transport.keystore_password: paswd
searchguard.ssl.transport.truststore_filepath: truststore.jks
searchguard.ssl.transport.truststore_password: paswd
searchguard.ssl.transport.enforce_hostname_verification: false
searchguard.ssl.transport.resolve_hostname: falsebash
searchguard.ssl.http.enabled: false
searchguard.ssl.http.keystore_filepath: example-keystore.jks
searchguard.ssl.http.keystore_password: paswd
searchguard.ssl.http.truststore_filepath: truststore.jks
searchguard.ssl.http.truststore_password: paswd服務器
searchguard.allow_all_from_loopback: trueelasticsearch
searchguard.authcz.admin_dn:
- CN=example, OU=client, O=client, L=Test, C=DE
安裝search-guard-2插件
sudo bin/plugin install -b com.floragunn/search-guard-2/2.3.4.4
這裏一樣,版本注意與elasticsearch對應。
切換目錄到/usr/share/elasticsearch/plugins/search-guard-2/
修改該目錄下的sgconfig目下的配置文件
這裏和shield相似,修改用戶,角色,角色映射幾個配置文件便可。
注意,這裏用戶密碼,能夠經過plugins下的tools/hash.sh工具生成密碼的hash加密文本
配置文件修改完成後,經過命令將配置插入到elasticsearh中,
sudo tools/sgadmin.sh -cd sgconfig/ -ks sgconfig/example-keystore.jks -kspass paswd -ts sgconfig/truststore.jks -tspass paswd -nhnv
須要注意的是這時候elasticsearch的服務必須是運行狀態。若是插入配置失敗,檢查配置文件,好比前面提到的,生成客戶端證書的時候dname的參數 必須與配置文件中searchguard.authcz.admin_dn:下的認證列表進行對應。
接下來就是配置kibana和logstash的了。
注意:
爲了logstash經過ssl鏈接elasticsearch,須要將elasticsearch的證書導入到Java的cacerts中
其中要求必須是 x509標準的證書
錯誤提示如:keytool 錯誤: java.lang.Exception: 所輸入的不是 X.509 證書
這時候就須要把咱們的jks的證書作以下轉換
sudo keytool -export -alias example -file example.der -keystore example.jks
sudo openssl x509 -inform der example.der -out example.pem
sudo openssl x509 -outform der -in example.pem -out example.crt sudo keytool -importcert -file example.crt -alias example -keystore cacerts -storepass changeit