我之前寫了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。按照以下步驟安裝:
-
安裝search-guard-ssl插件
切換到elasticsearch的目錄(一般是/usr/share/elasticsearch)
命令安裝插件:
sudo bin/plugin install com.floragunn/search-guard-ssl/2.3.4.16
- 1
- 1
注意版本,這里elasticsearch的版本就是2.3.4,它是要跟search-guard的版本進行對應的。
-
克隆search-guard-ssl項目,生成相關證書
克隆項目命令:
sudo git clone https://github.com/floragunncom/search-guard-ssl.git
- 1
- 1
一般來說創建數字證書流程如下:
創建證書流程:
1.創建ROOT CA(根證書/CA認證機構)
2.應用服務器創建CSR(證書簽名請求文件),同時會創建好自己的密鑰對(公鑰和私鑰)
3.將CSR發送到CA認證機構
4.CA機構將返回一個數字簽名證書
首先切換到剛剛克隆的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
- 1
- 1
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: false
http配置,這里我只是為了測試方便,配置完,應該設置為true
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: true
這里注意,下面的配置一定要和簽的客戶端證書一致,否則不能插入配置
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
- 1
- 1
這里同樣,版本注意與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
- 1
- 1
需要注意的是這時候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