Elasticsearch kommt nicht mit jeder Art von Sicherheit aus der Box. Es ist so offen und zugänglich sind, kann jeder. Ja, es gibt Schutz gegen die DELETE-Aufruf, aber es ist möglich. Kürzlich veröffentlichte Elastic die für die verschlüsselte Kommunikation zu ermöglichen, Zugriffskontrolle und eine ganze Reihe von anderen Sicherheits-Features, aber es kostet Geld. Vor dem Schild hatte man Elasticsearch in einem Proxy wie Nginx wickeln irgendeine Art von Zugriffskontrolle und Verschlüsselung zu aktivieren. Dies ist immer noch ein gangbarer Weg, wenn Sie nicht über ein Schild Lizenz kaufen möchten, oder wenn Sie das Gefühl Schild ist übertrieben.
Dieser Beitrag wird untersucht, für die Sicherung von Elasticsearch Nginx als Proxy konfigurieren.
Sie müssen sicherstellen, dass Sie Nginx installiert haben, sowie Apache Utils das HTTP-Passwort-Datei zu erstellen:
sudo apt-get nginx apache2-utils installieren
Sie müssen auch eine Kennwortdatei für die HTTP-Authentifizierung zu erstellen. Der folgende Befehl fordert Sie auf, ein Passwort für den Benutzer, den Sie festgelegt:
sudo htpasswd -c /etc/nginx/conf.d/search.htpasswd exampleuser
Die erstellte Datei sollte nur durch den Benutzer zugänglich sein, die Nginx läuft.
So aktivieren Sie SSL benötigen Sie ein Zertifikat und einen Schlüssel. Für dieses Beispiel nehmen wir an Sie beide haben, sonst auf diesem Posten betrachten.
Die erste Konfiguration ist nur der Proxy mit und wird als Basis-Konfiguration dienen. Wir werden SSL in der zweiten Konfiguration hinzuzufügen.
Server { hören *: 80; server_name search.eagerelk.com; access_log /var/log/nginx/search.access.log; Lage / { AUTH_BASIC "EagerELK Suche"; auth_basic_user_file /etc/nginx/conf.d/eagerelk.htpasswd; # Schicken alles an den Elasticsearch Endpunkt try_files @elasticsearch; } # Endpoint zu Elasticsearch Abfragen passieren zu Lage @elasticsearch { proxy_pass proxy_read_timeout 90; }} Wie Sie es ist eine relativ einfache Einrichtung zu sehen. Die Einfachheit kommt aus der ganzen Elasticsearch Setup hinter Nginx setzen und Proxying nur die Anfragen durch.
Die Daten sind nur so sicher wie die Linie, um sie über Reisen, also lassen Sie uns die SSL-Verschlüsselung zu diesem Setup hinzu:
# Redirect alle unsicheren Anforderungen an den sicheren PortServer { hören *: 80; server_name search.eagerelk.com; Rückkehr 301}# Serve SSL verschlüsselten DatenServer { hören *: 443 default_server ssl; server_name search.eagerelk.com; access_log /var/log/nginx/search.access.log; # Geben Sie das Zertifikat und den Schlüssel ssl_certificate /etc/nginx/ssl/search.eagerelk.com.crt; ssl_certificate_key /etc/nginx/ssl/search.eagerelk.com.rsa; Lage / { AUTH_BASIC "EagerELK Suche"; auth_basic_user_file /etc/nginx/conf.d/eagerelk.htpasswd; # Schicken alles an den Elasticsearch Endpunkt try_files @elasticsearch; } # Endpoint zu Elasticsearch Abfragen passieren zu Lage @elasticsearch { proxy_pass proxy_read_timeout 90; }} Wenn Sie zu öffnen, bestimmte Elasticsearch Aktionen wollen, können Sie einfach mehr Standortklauseln hinzufügen oder den Standort / Klausel zwicken, um diese Anforderungen zu ermöglichen. Da wir den @elasticsearch Endpunkt definiert ist, ist es einfach, verschiedene Standorte hinzufügen, die als Proxy wird mit oder ohne Authentifizierung es durch. Nginx Spiele auf dem die meisten bestimmten Ort erste, die Sie feinkörnige Kontrolle über ausgeübt werden kann, was erlaubt ist und was nicht:
Server {# ... # Lassen Sie nur den Zugang der Öffentlichkeit zu lesen Lage / { try_files @elasticsearch; limit_except GET { AUTH_BASIC "EagerELK Suche"; auth_basic_user_file /etc/nginx/conf.d/eagerelk.htpasswd; try_files @elasticsearch; } }# ...} Machen Sie den öffentlichen Index öffentlichen und den privaten Index privat:
Server {# ... In # Zugriffskontrolle auf den privaten Index Lage / private { AUTH_BASIC "EagerELK Suche"; auth_basic_user_file /etc/nginx/conf.d/eagerelk.htpasswd; try_files @elasticsearch; } # Machen Sie den öffentlichen Index Öffentlichkeit Lage / public { try_files @elasticsearch; }# ...} Lassen Sie alles andere als Anrufe löschen:
Server {# ... Lassen Sie alles # aber DELETE Anrufe Lage / { try_files @elasticsearch; limit_except DELETE { leugnen alle; } }# ...} Da Nginx eine Menge von Ressourcen nicht nehmen, es ist bequem und einfach genug, um es auf dem gleichen Server wie Elasticsearch zu installieren, wenn Sie mit nur einem Client-Knoten eine einzelne Maschine Cluster oder einen Cluster laufen. Wenn Sie einen Cluster mit mehreren Clients haben, können Sie es auf einem Master-Knoten installieren und haben es Balance zwischen den Knoten zu laden, oder einfach installieren und konfigurieren Sie es auf jedem der Client-Knoten.
Dies sollte man mit mindestens einer Basiskonfiguration geben Sie Ihre Elasticsearch Cluster zu sichern. Viel Spaß beim Suchen!
Weitere interessante Tipps: