Elasticsearch:使用 IP 過濾器限制連接


轉載自:https://blog.csdn.net/UbuntuTouch/article/details/107154165

可以將 IP過濾 應用於應用程序客戶端,節點客戶端或傳輸客戶端來限制或允許一些 IP 對於 Elasticsearch 的訪問。如果節點的IP地址在黑名單中,則 Elasticsearch 安全功能允許連接到 Elasticsearch,但該連接將立即被丟棄,並且不處理任何請求。Elasticsearch 安裝並非旨在通過 Internet 公開訪問。 IP過濾和 Elasticsearch 安全功能的其他功能不會改變這種情況。在使用這項功能的時候,必須注意的一點是:IP過濾 是白金許可的一部分。

使用 HTTP filter

為了使用 HTTP filter,我們來修改 Elasticsearch 的配置文件 config/elasticsearch.yml:

config/elasticsearch.yml

xpack.security.http.filter.allow: "192.168.0.4"
xpack.security.http.filter.deny: "192.168.0.0/24"

我們在 Elasticsearch 的配置文件中添加上面的兩行配置。重新啟動 Elasticsearch。上面的兩行表示只允許從 IP 地址 192.168.0.4 來進行訪問,但是不支持從任何其它的 IP 地址,比如 192.168.0.0/24 進行訪問。

為了驗證這個,我們最如下的實驗。我們的 Elasticsearch 運行於 IP 地址 192.168.0.3 上。這個可以通過如下的命令來進行查詢:

ifconfig | grep 192
$ ifconfig | grep 192	
		inet 192.168.0.3 netmask 0xffffff00 broadcast 192.168.0.255

我們在當前 Elasticsearch 運行的電腦上運行:

curl 192.168.0.3:9200 -u elastic:password
$ ifconfig | grep 192
	inet 192.168.0.3 netmask 0xffffff00 broadcast 192.168.0.255
liuxg:~ liuxg$ curl 192.168.0.3:9200 -u elastic:password
curl: (52) Empty reply from server

顯然,上面的訪問是失敗的。我們接下來使用另外一個電腦,它的 IP 地址是:192.168.0.4:

$ ifconfig | grep 192
        inet 192.168.0.4  netmask 255.255.255.0  broadcast 192.168.0.255
liuxg@liuxgu:~$ curl 192.168.0.3:9200 -u elastic:password
{
  "name" : "liuxg",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "PpiZRc6DQyin2reBiEngZg",
  "version" : {
    "number" : "7.8.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "757314695644ea9a1dc2fecd26d1a43856725e65",
    "build_date" : "2020-06-14T19:35:50.234439Z",
    "build_snapshot" : false,
    "lucene_version" : "8.5.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

上面顯示在 192.168.0.4 電腦上發送的請求,我們可以得到相應的輸出,表明我們的 IP filter 是正確工作的。

在很多的情況下,我們更喜歡通過 API 來進行操作,因為這樣更容易維護。否則每次都需要重新編輯 config/elasticsearch.yml 文件,並重新啟動 Elasticsearch。

剛才在上面,我們可以看到,在安裝 Elasticsearch 的電腦上,我們並不能訪問 Elasticsearch,這是因為 192.168.0.3 這個 IP地址被禁止了。我們在下面通過 API 的方式來重新打開這個 IP 地址的訪問。到目前為止,我們的 Kibana 也不能訪問。

curl -u elastic:password -XPUT 'http://192.168.0.3:9200/_cluster/settings?pretty=true' -H 'Content-Type: application/json' -d '
{
    "persistent": {
    "xpack.security.http.filter.deny": "_all",
    "xpack.security.http.filter.allow": ["localhost"]
  }
}'

在上面,我們允許 localhost 這個 IP 地址的訪問,並且屏蔽其他 IP 地址的訪問。在上面,我們必須在目前允許的 IP 地址 192.168.0.4 的機器上運行上面的命令,因為只有這台機器是可以被訪問的。運行的結果是:

經過上面的執行后,我們重新在 IP 地址為 192.168.0.4 上的機器上重新運行如下的命令:

顯然目前的這台機器的訪問已經被阻止了。

我們回到 Elasticsearch 運行的機器上,並使用 localhost 來進行訪問:

上面顯示,我們針對 localhost 的訪問是成功的。這正說明了我們的 API 的使用是成功的。它可以動態地為我們做 http filter.

使用 IP filter

按照同樣的道理,我們可以針對 transport 來做 IP filter,只不過我們使用如下的一對設置:

xpack.security.transport.filter.allow: "192.168.0.1"
xpack.security.transport.filter.deny: "192.168.0.0/24"

使用這個可以有效地阻止一些不相關的節點加入我們的集群。

參考:
【1】https://www.elastic.co/guide/en/elasticsearch/reference/current/ip-filtering.html#_enabling_ip_filtering


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM