Эта статья была впервые опубликована в мой блог
Обеспечение ваших экземпляров Elasticsearch и сохранение всех веселых
Часто мы выбираем удобство за безопасность. Многие современные инструменты, такие как MongoDB и Elasticsearch, выращивали популярность, отчасти из-за их простого в настроек и танкера — с природой. Просто выключите экземпляр, укажите браузер правым URL, и вы готовы начать отправку запросов.
К сожалению, одна вещь приходит для другой, а как Мы недавно видели Elasticsearch осталось на открытом воздухе может быть уязвимой целью, такой же, как Монгодб был в его расцвете. В свете Недавние атаки На многих открытых эластиковых исследованиях по всему миру я решил поделиться быстрым наконечником о том, как установить удаленные экземпляры ES, и сохраняйте их безопасными, не укомплектованными на его простой в игру — с природой.
Часть первая: ограничение доступа к вашему eLasticsearch
Давайте начнем. Самый простой способ настроить экземпляр Elasticsearch — Сверяние контейнера Выкл. Изображение докера по умолчанию:
docker pull docker.elastic.co/elasticsearch/elasticsearch:docker run -p 9200:9200 -e "http.host=0.0.0.0" -e "transport.host=127.0.0.1" elasticsearch:
Запуск вышеуказанной линии создаст сопоставление порции от 9200 в контейнере, в порт 9200 на хост-машина. Одной из проблем здесь, это то, что делая это, это также обнажает его внешнему миру. Этого можно легко увидеть, работая iptables
против вашего хозяина:
iptables -t nat -L -n # Outputs ... target prot opt source destination DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:9200 to:XXX.XXX.XXX.XXX:9200 ...
Действительно, Докер требует тяжелых снятий на настройку вашего iptables
Брандмауэр, но часто это может привести к конфигурации, которая слишком допустима. Вместо этого следует сделать, предоставляет определенный IP к конфигурации отображения порта. К счастью, Docker поддерживает это, поэтому все, что нам нужно сделать, это изменить вышеуказанную команду, используя IP: Host_Port: Container_Port
сопоставление:
docker run -p 127.0.0.1:9200:9200 -e "http.host=0.0.0.0" -e "transport.host=127.0.0.1" elasticsearch:
Идеально! Положить 127.0.0.1
гарантирует, что контейнер будет доступен внутри хозяина, но не доступен снаружи. Быстрое доказательство этого снова смотрит на iptables:
target prot opt source destination DNAT tcp -- 0.0.0.0/0 127.0.0.1 tcp dpt:9200 to:XX.XXX.XXX.XXX:9200
Если вы укажите свой браузер в порт 9200, вы не сможете ничего увидеть, но выполнение `Curl 127.0.0.1:9200 изнутри хост-аппарат должен работать.
Часть вторая: Доступ к вашему экземпляру Elasticsearch по безопасному способу
То, что мы все было хорошо, но как сейчас доступа к нашему экземпляру Elasticsearch Now, не теряя гибкость быстрого тестирования материалов на ES? Легко, используя * швейцарский нож Swiss Nix — SSH
Отказ SSH — это инструмент, который большинство программистов используют ежедневно, но меньше из них знают, что SSH позволяет для переадресации локальных и удаленных портов. Что это значит, что SSH может создать зашифрованный туннель между вашим компьютером и вашим сервером, так что вы сможете удаленно обращаться к службам, как если бы они работали на Loclahost (локальная пересылка). Существует также удаленная экспедиция, которая в качестве альтернативы позволяет вам надежно получить доступ к локально запущенным сервисам с вашего удаленного сервера.
Хотя мы собираемся использовать локальный переадресацию портов в нашем случае, оба аналогичны друг другу:
ssh -l/-r
В нашем конкретном случае это выглядит так:
SSH -L 9200: 127.0.0.1: 9200 user@xx.xxx.xxx.xxx
Это в основном говорит: карта моего местного порта 9200
к звонку 127.0.0.1:9200
на Xx.xxx.xxx.xxx
сервер. Когда вы укажите браузер на http://localhost: 9200
Теперь вы должны увидеть знакомый вывод ElaSticsearch, хотя, как и прежде Xx.xxx.xxx.xxx:9200
ничего не возвращается. Вы можете позволить вышеуказанной команде запустить в фоновом режиме и работать как демон.
Заключение
Эти два шага — это все, что вам нужно, чтобы продолжать наслаждаться свободой игры с помощью Elasticsearch или MongoDB, но делать это полностью безопасно. Этот рецепт может быть применен только к любому обслуживанию. И вам действительно не нужно докер. Тот факт, что я упомянул об этом частично, это потому, что это облегчает настройку, а также спасает вас от того, чтобы потираться с iptables.
сами.
ЗАМЕТКА: Пожалуйста, имейте в виду, что во время работы в туннеле SSH просто идеально подходит для целей тестирования и развития, это не может быть оптимальным решением для производства. Причиной этого является задержка, вызванная EN/расшифровкой данных и перетаситься через туннель. Это может стать узким местом со многими входящими запросами, работающими параллельно. Я еще представляющу эту настройку и поделитесь моими наблюдениями в дальнейшем посте. Я также буду поделиться еще более идеями о том, как надежно получить доступ к экземпляру Elasticsearch, но и продуктивным образом.
Оригинал: «https://dev.to/preslavrachev/securing-your-elasticsearch-instances»