2017-02-03 13 views
0

В настоящее время, я бегу elasticsearch 5.2.0 в моем цифровой океан server.To удаленный доступ к rest apis из elasticsearch, я сделал следующие изменения в config/elasticsearch.yml файле:Как включить удаленный доступ в Elasticsearch 5.2.0 только с выбранных устройств/компьютеров?

network.host: 0.0.0.0 

С этим изменением, я возможность доступа к elasticsearch APIs из любого места с помощью запроса:

http://server_url:9200/...... 

Но я хочу, чтобы получить доступ к elasticsearch APIs только local and selected devices/computers.

для например: для доступа только из localhost(within server) и computerA, я попытался настройки как:

network.host: [_computerAIp_,_local_] 

но не работает. Как мне настроить это требование?

ответ

1

Нет, вы не могли бы этого сделать из конфигурации Elasticsearch. Один из возможных способов - использовать некоторый HTTP-сервер, который будет обеспечивать функциональность брандмауэра, например. Apache HTTPD или Nginx.

Почему вы coudln't пользователя network.bind_host

Это определяет, какой сетевой интерфейс (ы) узел должен связать в порядке для прослушивания входящих запросов. Узел может связываться с несколькими интерфейсами, например. две сетевые карты или локальный адрес сайта и локальный адрес.

Это означает, что если вы развернуть ES на каком-то сервере, вы можете, например, привязать его к localhost или 89.2.34.3 (просто пример). В первом случае он будет доступен только из localmachine, второй из которых позволит дойти до него из Интернета. Но это не поможет вам создать набор правил, которые машины/устройства могли бы достичь, а какие не могли.

+0

В эластичной поисковой документации для 'network.bind_host' здесь: https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html#advanced-network-settings. В нем объясняется: «Это указывает, к каким сетевым интерфейсам (узлам) должен подключаться узел, чтобы прослушивать входящие запросы». Итак, почему я не могу настроить, что эластичный поиск прослушивает/связывается только с выбранными устройствами? В моем вопросе устройство будет 'computerA'. Пожалуйста, помогите мне понять это. – oblivion

+1

@oblivion, я обновил ответ с ответом на ваш вопрос в комментариях, а также – Mysterion

+0

благодарю вас за обновленный ответ. Итак, 'network.bind_host' в основном определяет адрес' where', который ES прослушивает, а не 'who', который он слушает правильно? И позволяет сказать, что адрес «Ip address» сервера (где ES развернут) - «101.104.154.163'. В этом сценарии, каковы адреса, которые я могу использовать для 'network.bind_host', чтобы сделать ES доступным для Интернета? Я знаю '0.0.0.0' и' 101.104.154.163' работает. Могу ли я использовать некоторые другие адреса здесь? – oblivion

2

elasticsearch network.host Настройки в elasticsearch.yml - установить адрес привязки для входящего HTTP-трафика и связи узла с узлом.

С точки зрения вашего кода, кажется, вы неправильно интерпретируете его с IP-адресом клиентов для фильтрации ip.

Здесь в elasticsearch.yml конфигурации вы можете сделать следующее -

1) порт трафика изменение HTTP (по умолчанию 9200) для входящего HTTP-трафика с помощью http.port: 9200.

2) изменить порт tcp для транспортных клиентов для связи между узлами и узлами, используя transport.tcp.port: 9300.

3) вы можете изменить адрес привязки elasticsearch для сервера elasticsearch, где прослушивать трафик, используя network.bind_host: 192.168.0.1. Вы можете изменить это на «network.bind_host: localhost», чтобы ограничить доступ общественности.

Более подробную информацию о конфигурации см. this и official documentation.

Теперь, чтобы добиться того, что вы пытаетесь, я предлагаю вам использовать shield plugin, который теперь поставляется с X-Pack. Shield предлагает поддержку фильтрации IP-адресов, где вы можете определить IP-адрес, который может получить доступ к вашему поиску elastics.

Плагин Shield позволит вам блокировать, разрешать IP-адреса для доступа к вашему серверу elasticsearch, расширяя один и тот же файл elasticsearch.yml. После успешного установки защитного плагина вы сможете использовать модуль shield в файле elasticsearch.yml.

shield.transport.filter.enabled: false 
shield.http.filter.enabled: true 
shield.transport.filter.allow: [ "192.168.0.1", "192.168.0.2", "192.168.0.3", "192.168.0.4" ] 
shield.transport.filter.deny: _all 

Теперь эти настройки в elasticsearch.yml будут жесткие настройки и после каждого изменения, возможно, придется перезагрузить сервер. Поскольку вы упомянули выбранные устройства и компьютеры и если IP-адрес для этих устройств изменяется динамически. Затем эластичная также выставить настройки/настройки/изменения IP-адреса для фильтрации IP-за их REST API следующим образом, где вы можете изменить IP-адреса на лету без перезагрузки

curl -XPUT localhost:9200/_cluster/settings -d '{ 
    "persistent" : { 
     "shield.transport.filter.allow" : "172.16.0.0/24" 
    } 
}' 

curl -XPUT localhost:9200/_cluster/settings -d '{ 
    "persistent" : { 
     "shield.transport.filter.enabled" : false 
    } 
}' 

Это хороший REST API для динамического изменения IP-адреса для эластичная наряду с другими функциями щита, такими как аутентификация, авторизация, роли уровня документа, могут помочь вам создать действительно причудливый консольный интерфейс/приложение для управления кластером elasticsearch.

Для получения дополнительной информации о конфигурации также обратитесь к экрану поиска elastics ip filtering documentation.

Надеюсь, это поможет.

+0

Итак, для конфигурации 'network.bind_host: 192.168.0.1' это означает, что тогда смогут подключиться любые компьютеры в одной подсети (все, что начинается с 192.168.0). Это означает, что если 'computerA' находится в одной подсети, он сможет подключиться правильно? И будет ли защищать меня (computerA), чтобы подключиться к эластичному серверу, если он находится в «совершенно другой сети»? (За пределами 192.168.0.1). Я все еще смущен правильным использованием 'network.bind_host: 192.168.0.1' – oblivion

+0

сомневаюсь. вот хороший пост, объясняющий разницу между bind_host и publish_host для elasticsearch. http://stackoverflow.com/questions/24063644/whats-the-difference-between-bind-host-and-publish-host-in-elasticsearch. Кроме того, у меня нет большого количества знаний о сетевом домене. – user3775217

+0

publish_host означает: «Позвони мне по этому номеру», bind_host означает: «Я отвечу на этот номер» – user3775217