So sichern Sie Memcached durch Reduzieren der Belichtung

Einführung

Am 27. Februar 2018 wurdenCloudflare posted a story about a severe increase in the volume of memcached amplification attacks. Memcached, ein beliebtes Objekt-Caching-System, wird häufig verwendet, um die Antwortzeiten und die Belastung der Komponenten während einer Bereitstellung zu reduzieren. Der Amplification-Angriff zielt auf Memcached-Bereitstellungen ab, die über UDP im öffentlichen Netzwerk verfügbar gemacht werden.

Um den Angriff abzuschwächen, ist es am besten, Memcached an eine lokale Schnittstelle zu binden, UDP zu deaktivieren und Ihren Server mit herkömmlichen Best Practices für die Netzwerksicherheit zu schützen. In diesem Handbuch erfahren Sie, wie Sie dies tun und wie Sie den Service ausgewählten externen Kunden zur Verfügung stellen.

[.Warnung]##

Note: Aufgrund der möglichen Auswirkungen dieses Verstärkungsangriffs auf die Netzwerkstabilität hat DigitalOcean ab dem 1. März 2018 sowohl den UDP- als auch den TCP-Verkehr auf der öffentlichen Schnittstelle zu Port 11211 deaktiviert. Dies wirkt sich auf den Zugriff auf Droplets von außerhalb des Rechenzentrums aus, Verbindungen innerhalb des Rechenzentrums sind jedoch weiterhin zulässig.

Wenn Sie aus Sicherheitsgründen Memcached-Zugriff zwischen Droplets innerhalb desselben Rechenzentrums benötigen, können Sie durch die Bindung an die private Netzwerkschnittstelle Ihres Droplets und die Verwendung von Firewall-Regeln zur Begrenzung der zulässigen Quelladressen nicht autorisierte Anforderungen verhindern.

Sichern von Memcached auf Ubuntu- und Debian-Servern

Bei Memcached-Diensten, die auf Ubuntu- oder Debian-Servern ausgeführt werden, können Sie die Dienstparameter anpassen, indem Sie die Datei/etc/memcached.conf mitnano bearbeiten. Beispiel:

sudo nano /etc/memcached.conf

Standardmäßig binden Ubuntu und Debian Memcached an die lokale Schnittstelle127.0.0.1. An127.0.0.1gebundene Installationen sind nicht anfällig für Verstärkungsangriffe aus dem Netzwerk. Überprüfen Sie, ob die Option-l auf diese Adresse eingestellt ist, um das Verhalten zu bestätigen:

/etc/memcached.conf

. . .
-l 127.0.0.1
. . .

Für den Fall, dass die Abhöradresse in Zukunft geändert wird, um offener zu werden, ist es auch eine gute Idee, UDP zu deaktivieren, das von diesem bestimmten Angriff mit größerer Wahrscheinlichkeit ausgenutzt wird. Fügen Sie zum Deaktivieren von UDP (TCP funktioniert weiterhin wie erwartet) die folgende Option am unteren Rand oder in Ihrer Datei hinzu:

/etc/memcached.conf

. . .
-U 0

Wenn Sie fertig sind, speichern und schließen Sie die Datei.

Starten Sie Ihren Memcachedienst neu, um Ihre Änderungen zu übernehmen:

sudo service memcached restart

Stellen Sie sicher, dass Memcached derzeit an die lokale Schnittstelle gebunden ist und nur auf TCP wartet, indem Sie Folgendes eingeben:

sudo netstat -plunt
OutputActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
. . .
tcp        0      0 127.0.0.1:11211         0.0.0.0:*               LISTEN      2383/memcached
. . .

Sie solltenmemcached sehen, die nur mit TCP an die Adresse von127.0.0.1gebunden sind.

Sichern von Memcached auf CentOS- und Fedora-Servern

Bei Memcached-Diensten, die auf CentOS- und Fedora-Servern ausgeführt werden, können Sie die Dienstparameter anpassen, indem Sie die Datei/etc/sysconfig/memcached mitvi bearbeiten. Beispiel:

sudo vi /etc/sysconfig/memcached

Im Inneren möchten wir eine Bindung an die lokale Netzwerkschnittstelle herstellen, um den Datenverkehr auf Clients auf demselben Computer mithilfe der Option-l 127.0.0.1 zu beschränken. Dies kann für einige Umgebungen zu restriktiv sein, ist jedoch ein guter Ausgangspunkt.

Wir werden auch-U 0 setzen, um den UDP-Listener zu deaktivieren. UDP als Protokoll ist für Amplifikationsangriffe viel effektiver. Wenn Sie es deaktivieren, wird die Stärke einiger Angriffe eingeschränkt, wenn Sie den Bindungsport zu einem späteren Zeitpunkt ändern.

Fügen Sie diese beiden Parameter in die VariableOPTIONSein:

/etc/sysconfig/memcached

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1 -U 0"

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Starten Sie den Memcachedienst neu, um die Änderungen zu übernehmen:

sudo service memcached restart

Stellen Sie sicher, dass Memcached derzeit an die lokale Schnittstelle gebunden ist und nur auf TCP wartet, indem Sie Folgendes eingeben:

sudo netstat -plunt
OutputActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
. . .
tcp        0      0 127.0.0.1:11211         0.0.0.0:*               LISTEN      2383/memcached
. . .

Sie solltenmemcached sehen, die nur mit TCP an die Adresse von127.0.0.1gebunden sind.

Zugriff über das private Netzwerk zulassen

Die obigen Anweisungen weisen Memcached an, nur die lokale Schnittstelle abzuhören. Dies verhindert den Verstärkungsangriff, indem die Memcached-Schnittstelle keinen externen Parteien ausgesetzt wird. Wenn Sie den Zugriff von anderen Servern zulassen müssen, müssen Sie die Konfiguration anpassen.

Die sicherste Möglichkeit, den Zugriff zu erweitern, besteht darin, Memcached an die private Netzwerkschnittstelle zu binden.

Begrenzen Sie den IP-Zugriff mit Firewalls

Bevor Sie dies tun, sollten Sie Firewall-Regeln einrichten, um die Computer einzuschränken, die eine Verbindung zu Ihrem Memcached-Server herstellen können. Sie müssen dieclient servers private IP addresseskennen, um Ihre Firewall-Regeln zu konfigurieren.

Wenn Sie die Firewall vonUFWverwenden, können Sie den Zugriff auf Ihre Memcached-Instanz einschränken, indem Sie Folgendes eingeben:

sudo ufw allow OpenSSH
sudo ufw allow from client_servers_private_IP/32 to any port 11211
sudo ufw enable

Weitere Informationen zu UFW-Firewalls finden Sie in unserenessentials guide.

Wenn Sie Iptables verwenden, können Sie eine grundlegende Firewall einrichten, indem Sie Folgendes eingeben:

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp -s client_servers_private_IP/32 --dport 11211 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -P INPUT DROP

Stellen Sie sicher, dass Sie Ihre Iptables-Firewallregeln mit dem von Ihrer Distribution bereitgestellten Mechanismus speichern. Sie können mehr über Iptables erfahren, indem Sie sich unsereessentials guideansehen.

Anschließend können Sie den Memcachedienst so anpassen, dass er an die private Netzwerkschnittstelle Ihres Servers bindet.

Memcached an die private Netzwerkschnittstelle binden

Nachdem Ihre Firewall eingerichtet ist, können Sie die Memcached-Konfiguration so anpassen, dass sie anstelle von127.0.0.1 an die private Netzwerkschnittstelle Ihres Servers gebunden wird.

Öffnen Sie fürUbuntu- oderDebian-Server die/etc/memcached.conf-Datei erneut:

sudo nano /etc/memcached.conf

Suchen Sie im Inneren die Zeile-l 127.0.0.1und ändern Sie die Adresse entsprechend der privaten Netzwerkschnittstelle Ihres Servers:

/etc/memcached.conf

. . .
-l memcached_servers_private_IP
. . .

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Öffnen Sie für die ServerCentOS undFedora die Datei/etc/sysconfig/memcached erneut:

sudo vi /etc/sysconfig/memcached

Ändern Sie im Inneren den Parameter-l 127.0.0.1in der VariablenOPTIONS, um auf die private IP Ihres Memcached-Servers zu verweisen:

/etc/sysconfig/memcached

. . .
OPTIONS="-l memcached_servers_private_IP -U 0"

Speichern und schließen Sie die Datei, wenn Sie fertig sind.

Starten Sie als Nächstes den Memcachedienst erneut:

sudo service memcached restart

Überprüfen Sie Ihre neuen Einstellungen mitnetstat, um die Änderung zu bestätigen:

sudo netstat -plunt
OutputActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
. . .
tcp        0      0 memcached_servers_private_IP:11211         0.0.0.0:*               LISTEN      2383/memcached
. . .

Testen Sie die Konnektivität Ihres externen Clients, um sicherzustellen, dass Sie den Dienst weiterhin erreichen können. Es ist empfehlenswert, auch den Zugriff eines nicht autorisierten Clients zu überprüfen, um sicherzustellen, dass Ihre Firewall-Regeln wirksam sind.

Fazit

Der Memcached Amplification-Angriff kann schwerwiegende Auswirkungen auf den Netzwerkzustand und die Stabilität Ihrer Dienste haben. Der Angriff kann jedoch durch Befolgen der Best Practices für die Ausführung von Netzwerkdiensten effektiv abgewehrt werden. Nach dem Anwenden der Änderungen in diesem Handbuch sollten Sie Ihre Dienste weiterhin überwachen, um sicherzustellen, dass die ordnungsgemäße Funktionalität und Konnektivität erhalten bleibt.