Stärkung der Web-Stack-Sicherheit (LAMP) mit Netzwerk-Service-Isolierung per VM-Systeme
12:11, 26.03.2024
Ein Web-Stack ist eine Sammlung verschiedener quelloffener Software, wie z. B. Programmiersprachen für die Serverseite, Betriebssysteme, Datenbankserver und Webserver. Der am weitesten verbreitete Stack wird LAMP genannt. Dieser Name ist eine Abkürzung für Linux, Apache Server, MySQL und PHP (in manchen Fällen auch Python oder Perl). Aus Sicherheitsgründen ist die beste Variante, verschiedene Netzwerkdienste auf separaten virtuellen Maschinen oder Systemen laufen zu lassen. Bei einem solchen System ist es offensichtlich, dass potenzielle Angreifer nicht viele Dienste knacken können.
In diesem Artikel finden Sie hilfreiche Informationen über die Einrichtung einer Lösung, die Caching, dynamische/statische Inhalte und Datenbanken auf virtuellen Maschinen oder separaten Servern bereitstellen kann.
LAMP: Traditionelle Einrichtung versus geteilte Konfiguration
Die herkömmliche Serverkonfiguration, bei der sich alle Dienste auf einem einzigen Rechner befinden, ist heutzutage extrem riskant. Es gibt so viele Hacker, die mit nur einem Versuch auf Ihren Server und alle darauf befindlichen Daten zugreifen können. Um solche Probleme auszuschließen, ist es besser, eine geteilte Konfiguration in Betracht zu ziehen.
Bei der Spit-Konfiguration werden der Cache, die Datenbank und andere Teile pro Server aufgeteilt. Die Vorteile eines solchen Ansatzes sind die folgenden:
- Optimieren
- Sicherheit
- Leichte Bedienbarkeit
- Wachstum und Skalierbarkeit
- Vereinfacht die Überwachung
Definierte Rollen für jede VM/Server in der geteilten LAMP-Architektur
Das folgende Beispiel beschreibt verschiedene VMs, die für Blogs, maßgeschneiderte Anwendungen oder Drupal-basierte Websites relevant sein können.
Server/VM | Beschreibung | Software |
VM0 | Ein solcher Knoten/VM sollte 2 Schnittstellen haben - eine private und eine öffentliche. Die öffentliche Schnittstelle hilft den Benutzern, sich mit dem Standort zu verbinden. Die private Schnittstelle wird für den Netzwerkverkehr zwischen den Knoten verwendet. | Netfilter als Firewall und haproxy/nginx als Reverse-Proxy |
VM1 | Dieser Knoten wird für die Bereitstellung statischer Dateien wie css, Bilder oder js verwendet. Die Dateien sollten auf dem VM5-Server gespeichert werden. | Tux, Linux nfs-Client, lighttpd und nginx |
VM2 | Für dynamische Seiten wird dieser Knoten verwendet. Zum Beispiel können die benutzerdefinierte App und das installierte WordPress auf dieser VM liegen. Die Dateien der App werden auf VM5 gespeichert. | Linux nfs-Client und Apache 2 mit python/php5/fastcgi/perl/etc |
VM3 | Der Knoten wird verwendet, um Objekte und Daten im RAM zwischenzuspeichern. Dies reduziert die Häufigkeit von Aufrufen externer Daten und beschleunigt so alles. | Redis oder Memcached |
VM4 | Dieser Teil ist für die Speicherung von mysql- oder postgresql-Daten in RDBMS zuständig. | Mysql-Server |
VM5 | Dieser Knoten funktioniert wie ein verteiltes Dateisystem. Auf diesem Server werden nur solche Daten wie Bilder, php/python-Dateien, css, js gespeichert. Ein Mount-Befehl wird verwendet, um auf Daten zuzugreifen, die von VM2 und VM1 angefordert werden. | NFSv4-Server |
Uplink-Anschluss oder ISP-Router | VM0 ist über einen vom ISP bereitgestellten Uplink mit dem Internet verbunden. | Standortbezogen |
Tatsächliche Server-Einrichtung aufgedeckt
- Installieren und konfigurieren Sie den NFS-Server.
- Installieren und konfigurieren Sie den MySQL-Server.
- Installieren und konfigurieren Sie den Memcached-Server.
- Installieren und konfigurieren Sie den Apache-Server.
- Installieren und konfigurieren Sie den Lighttpd-Server.
- Installieren und konfigurieren Sie den Nginx-Server.
Leistungs- und Sicherheitsvorteile der Aufteilung von LAMP-Diensten
Einige der Hauptvorteile der Aufteilung von LAMP-Diensten sind folgende:
- Skalierung. Mit den separaten Diensten ist es viel einfacher, das gesamte System zu skalieren. Wenn Sie zum Beispiel nur einen Server/vm haben, muss die Strategie sehr komplex sein, um jede kleine Komponente einzubeziehen. Sie sollten auch den Lastausgleich berücksichtigen, der die Leistungsmerkmale drastisch beeinflusst.
- Einsatz. In der Regel sind diese Knoten unveränderlich. Das bedeutet, dass die Bereitstellung durch das Anlegen eines neuen Knotens erfolgt und nicht durch das Hinzufügen von Elementen zu einem bereits vorhandenen Knoten. Der Prozess ist viel einfacher, wenn sich die Datenbank und die Anwendung in verschiedenen Knoten befinden.
- Sicherheit. Im Falle eines Angriffsrisikos können Sie den Zugang zu einem Knoten verlieren, aber nicht zu allen auf einmal, was die Probleme stark minimiert.
Verwaltung der Wechselwirkungen zwischen geteilten LAMP-Komponenten
Für ein praktischeres Verständnis der Wechselwirkungen zwischen den Komponenten erstellen wir ein konkretes Beispiel und erklären alles anhand dieses Beispiels. Der Name der Website lautet www.ex.com und bezieht sich auf die IPv4-Adresse 102.23.1.4, die eth0 zugewiesen ist. Die interne IP lautet 837.234.1.1 und ist eth1 zugewiesen. Alle Dienste befinden sich im LAN und die Website ist ein Reverse-Proxy.
Die Hardware-Firewall-Regeln lassen nur 102.23.1.4 an den Ports 443 und 80 zu. Die übrigen Ports sind blockiert. Jeder Knoten erlaubt den Zugriff auf die erforderlichen Ports und führt iptables aus. Der Serverpool ist wie folgt definiert:
vorgelagertes mybackend {
Server 837.234.1.10:80; #server1
Server 837.234.1.11:80; #Server2
....
..
..
server 837.234.1.100:80; # server100
}
Der lighttpd- und der Apache-Server können über den nfs-Server auf Dateien in VM05 zugreifen. Der Apache-Server ist mit PHP konfiguriert. Die PHP-Anwendung ist so konfiguriert, dass sie mit der Datenbank auf VM04 verknüpft ist. Cache-SQL über den Memcached-Server auf VM03 wird für die PHP-Anwendung verwendet.
Darüber hinaus ist es möglich, den Reverse Proxy auf der DMZ und anderen Servern in der Firewall zu platzieren, um das Sicherheitsniveau zu erhöhen. Auf diese Weise lassen sich die Kosten des Projekts maximieren.
Resümee
Um das Sicherheitsniveau der Webanwendung immens zu erhöhen, ist es wichtig, das Netzwerk der VMs für jede Schicht dieses Stacks einzusetzen. Wenn man über das Budget für diese Art der Verbesserung spricht, ist es natürlich keine billige Option, die Wartung und Einrichtung des Systems kann teuer sein. Trotz der Kosten für diese Strategie ist die Sicherheitsverbesserung enorm und in jedem Fall von Vorteil. Darüber hinaus macht die Virtualisierung des Servers die Prozesse der Wiederherstellung, Sicherung und Migration auf andere Hardware so viel schneller und einfacher.
Aufgrund der binären Natur der virtuellen Maschinen auf dem Host-Dateisystem ist es viel einfacher, sie bei Bedarf auf andere Maschinen zu portieren. Auch die etwas höheren Kosten, die in dieses System investiert werden, werden fast unbedeutend, wenn Sie alle Maschinen in wenigen Minuten wiederherstellen können. Wenn Sie sich in einer solchen Situation befinden, werden Sie die großen Vorteile, die mit der Isolierung von Netzwerkdiensten pro VM-System einhergehen, wirklich verstehen. Außerdem ist es mit diesem Ansatz viel einfacher, verschiedene VMs im Netzwerk zu überwachen.