ElasticSearch 7.17 安全管理筆記

前言

公司有一臺外網(wǎng)的測試服務器安裝了elasticsearch 7.17集群,其中一個容器使用默認的端口9200,而且還沒有設置密碼。雖然沒什么重要數(shù)據(jù),但還是被攻擊了。集群全部的索引都被刪除了,增加了一個名為read-me的索引,打開看到里面的內(nèi)容是:轉0.01比特幣(BTC)給指定地址,并發(fā)郵件通知才能找回數(shù)據(jù)。雖然我不會花錢給攻擊者的,但是elasticsearch的安全問題還是需要重視的。我使用了以下的策略或方法:

一、不使用默認的端口

1.1 修改默認的端口

9200、9300最好改為其他端口,防止惡意軟件按端口掃描到。在elasticsearch.yml中增加配置項:

http.port: 9202
transport.port: 9302

1.2 安裝包運行

如果是手動下載wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.4-linux-x86_64.tar.gz 壓縮包,并解壓后運行的??梢栽诜阑饓χ信渲脙?nèi)網(wǎng)訪問或者白名單來限制訪問。
配置白名單命令如下,將<IP地址>修改成你的白名單地址??梢愿臑椴煌腎P地址多次執(zhí)行:

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="<IP地址>/32" accept'
firewall-cmd --reload

1.3 容器內(nèi)運行

如果是在dockerpodman容器內(nèi)運行的話,默認外網(wǎng)總是能訪問到elasticsearch的映射端口,firewalld防火墻配置也不起作用,這比較麻煩。

解決辦法是:在運行容器的時候不加映射端口參數(shù)-p 9202:9200 -p 9302:9300,并且用固定IP地址運行,這樣外網(wǎng)是訪問不到各容器的9200和9300端口的,集群參數(shù)就配置內(nèi)網(wǎng)的固定IP。運行容器時固定IP地址的命令如下:

# 查看橋接網(wǎng)絡的默認網(wǎng)關,我查出的結果是:172.17.0.1
docker network inspect bridge|grep Gateway
# 運行時指定IP:172.17.0.101(與網(wǎng)關地址的前面一致)
docker run -d --network bridge --ip 172.17.0.102 -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e TZ=Asia/Shanghai --privileged -v /opt/es/test/es2.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /opt/es/test/data:/usr/share/elasticsearch/data   --name es2 elasticsearch:7.17.4

# 同樣,如果是podman命令如下:
podman network inspect podman|grep gateway
sudo podman run -d --network podman --ip 10.88.0.103 -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e TZ=Asia/Shanghai --privileged  -v /opt/es/test3/es3.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /opt/es/test3/data:/usr/share/elasticsearch/data   --name es3 elasticsearch:7.17.4

詳細用法可以參考這篇文章:http://www.itdecent.cn/p/58e207a675e7
用類似172.17.0.102這樣的內(nèi)網(wǎng)IP地址的9200和9300來配置集群和kibana訪問。

如果你不想安裝kibana,想臨時從外網(wǎng)訪問容器來測試怎么辦?
其實也可以配置一下防火墻,來做端口轉發(fā):

firewall-cmd  --add-masquerade  --permanent 
firewall-cmd --add-forward-port=port=9202:proto=tcp:toaddr=172.17.0.102:toport=9200 --permanent 
firewall-cmd --reload

試了下開通了之后就可以通過宿主機的9202端口來訪問了,但是不能配置白名單,意味著所有人都能訪問這個端口了。網(wǎng)上查找了很久,也沒有解決方案,所以建議還是用kibana來訪問,不要開通9202端口。

二、配置Elastic Search密碼和集群證書

因為不同版本的配置會不一樣,我主要還是參照官方的文檔來做:
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/security-basic-setup.html

2.1 生成證書

以下兩個命令,可以輸入證書密碼,但要自己保存下來。文件名就直接回車用默認的即可。

./elasticsearch-certutil ca 
./elasticsearch-certutil cert --ca elastic-stack-ca.p12

可以在任意一個節(jié)點生成,生成完成之后把兩個.p12文件(elasticsearch的根目錄下)復制到所有集群節(jié)點config目錄下。另外在每一個集群節(jié)點都執(zhí)行下面的語句:

./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

運行時,可能需要輸入之前的證書密碼。

2.2 修改Elastic Search配置文件

所有集群節(jié)點,編輯elasticsearch.yml加入以下內(nèi)容:

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.client_authentication: required
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

然后全部重啟,如果啟動失敗,先刪除data目錄下的數(shù)據(jù)后再重啟。

2.3 設置密碼

保證全部節(jié)點都正常啟動了,然后在任意一個節(jié)點下面運行下面的密碼設置各個系統(tǒng)默認用戶的密碼。

./elasticsearch-setup-passwords interactive  

注意:elastic 為超級管理員,密碼一定要記得。
kibana_systemkibana配置文件中用到的賬號,權限較低。
其他用戶密碼可以隨便設置,后面可以kibana中修改密碼。

2.4 配置Kibana

編輯kibana.yml文件加入以下配置項:

elasticsearch.username: "kibana_system"

然后再執(zhí)行下面兩條命令:

./kibana-keystore create
./kibana-keystore add elasticsearch.password

注意上面的命令要輸入前面設置的kibana_system用戶的密碼,其實就是將密碼加密后保存在文件中。比直接明文寫在kibana.yml中要更安全些。

三、Kibana配置為網(wǎng)站子目錄訪問

Kibana默認端口為5601,多暴露一個端口就多一分危險;配置到網(wǎng)站的子目錄中,還能更方便在瀏覽器地址欄中輸入訪問。編輯kibana.yml文件加入以下配置項:

server.basePath: "/kibana" 

然后nginx.conf中加入以下配置:

location /kibana {
  proxy_pass http://127.0.0.1:5601/;
  rewrite ^/kibana/(.*)$ /$1 break;
}

最后,重啟KibanaNginx即可。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容