作者:cjaklxn_490 | 来源:互联网 | 2023-09-05 19:28
原文地址,转载请注明出处:https://blog.csdn.net/qq_34021712/article/details/79657849 ©王赛超
官网地址:https://www.elastic.co/guide/en/x-pack/6.2/ip-filtering.html
通过X-pack使用IP过滤来允许或拒绝来自特定IP地址或地址范围的请求。如果某个节点的IP地址位于黑名单中,则X-Pack安全性仍然允许与Elasticsearch连接,但它会立即丢弃,并且不会处理任何请求。
启用IP筛选
X-Pack安全功能具有访问控制功能,允许或拒绝主机,域或子网。通过在elasticsearch.yml中指定xpack.security.transport.filter.allow 和 xpack.security.transport.filter.deny 来配置IP筛选,允许规则优先于拒绝规则。
xpack.security.transport.filter.allow: "192.168.0.1"
xpack.security.transport.filter.deny: "192.168.0.0/24"
也可以使用数组允许多个IP然后使用_all关键字可用于拒绝所有未明确允许的连接。
xpack.security.transport.filter.allow: ["192.168.0.1","192.168.0.2","192.168.0.3","192.168.0.4"]
xpack.security.transport.filter.deny: _all
IP过滤配置也支持IPv6地址
xpack.security.transport.filter.allow: "2001:0db8:1234::/48"
xpack.security.transport.filter.deny: "1234:0db8:85a3:0000:0000:8a2e:0370:7334"
当DNS查找可用时,还可以按主机名进行过滤
xpack.security.transport.filter.allow: localhost
xpack.security.transport.filter.deny: '*.google.com'
如果针对HTTP协议传输进行IP筛选
xpack.security.http.filter.allow: 172.16.0.0/16
xpack.security.http.filter.deny: _all
禁用IP过滤
在某些情况下禁用IP筛选可以稍微改善性能。要完全禁用IP过滤,请设置elasticsearch.yml配置文件中xpack.security.transport.filter.enabled值为false
xpack.security.transport.filter.enabled: false
您也可以禁用IP筛选,但是启用HTTP协议传输IP过滤功能:
xpack.security.transport.filter.enabled: false
xpack.security.http.filter.enabled: true
动态更新IP过滤器设置
如果在具有高度动态IP地址的环境(如基于云的托管)中运行,在配置计算机时很难知道IP地址。您可以使用集群更新设置API来代替更改配置文件并重新启动节点。例如:
PUT /_cluster/settings
{"persistent" : {"xpack.security.transport.filter.allow" : "172.16.0.0/24"}
}
也可以动态禁用完全过滤功能
PUT /_cluster/settings
{"persistent" : {"xpack.security.transport.filter.enabled" : false}
}
自己测试结果
我只是测试了根据IP筛选,但是测试结果却和官网写的有些出入,可能是我理解的错误,具体情况如下:
环境介绍主机 | 安装软件 |
172.20.1.186 | elasticsearch |
172.20.1.187 | logstash |
172.20.1.188 | logstash |
测试环境是 一个elasticsearch节点,两个logstash节点。
①如果明确设置了禁止某个logstash节点,则该节点无法连接到elasticsearch,并不像官网所说的可以连接到,配置如下:
xpack.security.transport.filter.allow: ["172.20.1.180"]
xpack.security.transport.filter.deny: ["172.20.1.188"]
172.20.1.180为一台不相干的服务器,配置该服务器为允许,配置172.20.1.188服务器为拒绝,则结果是:
172.20.1.187上的logstash节点可以连接到elasticsearch并且可以写入日志
172.20.1.188上的logstash节点无法连接到elasticsearch,并报如下警告:
[2018-03-22T05:01:17,601][INFO ][logstash.outputs.elasticsearch] Running health check to see if an Elasticsearch connection is working {:healthcheck_url=>http://elastic:xxxxxx@172.20.1.181:9200/, :path=>"/"}
[2018-03-22T05:01:17,627][WARN ][logstash.outputs.elasticsearch] Attempted to resurrect connection to dead ES instance, but got an error. {:url=>"http://elastic:xxxxxx@172.20.1.181:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::HostUnreachableError, :error=>"Elasticsearch Unreachable: [http://elastic:xxxxxx@172.20.1.181:9200/][Manticore::ClientProtocolException] 172.20.1.181:9200 failed to respond"}
②如果将禁止属性设置为_all 则172.20.1.187 和 172.20.1.188 两个logstash节点都无法连接到elasticsearch,都报如上警告。配置如下:
xpack.security.transport.filter.allow: ["172.20.1.180"]
xpack.security.transport.filter.deny: _all
③建议设置xpack.security.transport.filter.deny: _all ,然后设置允许的logstash所有节点,如下配置:
xpack.security.transport.filter.allow: ["172.20.1.187","172.20.1.188"]
xpack.security.transport.filter.deny: _all