grey padlocks on the grey fence - symbol of security

Amazon Web Services: Sicherheitsgruppen

Sicherheit ist eines der Elemente der Infrastrukturkonfiguration, das sehr oft übersehen wird. Häufig konzentrieren sich Administratoren darauf, Funktionalität bereitzustellen und Anforderungen zu erfüllen, ohne sich darum zu kümmern, die Infrastruktur gegen Angriffe abzusichern, in der Annahme, dass es wahrscheinlich gut gehen wird. Wir bei Droptica bauen oft Unternehmenswebsites auf Drupal für Banken und andere Institutionen, die großen Wert auf Sicherheit legen, daher haben wir nicht den Luxus, nicht an Sicherheit zu denken.

 Allerdings benötigen Sie keine sehr ausgeklügelten Mechanismen und Lösungen, um grundlegende Sicherheit zu gewährleisten... Lassen Sie uns sehen.

Filtern von Netzwerkverkehr

Eine der Möglichkeiten, Netzwerke und Systeme gegen Eindringlinge zu schützen, sind Firewalls - Werkzeuge zum Blockieren unerwünschter ein- und ausgehender Verbindungen und damit zur Ablehnung von Anfragen für den Zugang zu Netzwerken oder Dienstleistungen, die als gefährlich angesehen werden.

Der einfachste Typ einer Firewall ist ein Paketfilter, der Netzwerkadressen und Ports von Paketen überprüft, um zu entscheiden, ob sie abgelehnt oder zum Zielrechner durchgelassen werden sollen. In einer solchen Lösung verfügt die Firewall über eine Reihe von Regeln, die das Schicksal des Pakets in Abhängigkeit von der Verbindungsrichtung (insbesondere von welcher Adresse und zu welcher Adresse es geleitet wird), der Nummer des Netzwerkports und dessen Art (zum Beispiel TCP, UDP oder ICMP) bestimmen.

AWS: Sicherheitsgruppen

Sicherheitsgruppen-Richtlinien funktionieren genauso wie eine Paketfilter-Firewall und werden zur Steuerung des Datenverkehrs im AWS-Netzwerk verwendet. Amazon erlaubt Ihnen, Regeln für die meisten ihrer Produkte zu definieren, die externen Netzwerken ausgesetzt sind.

Wenn eine neue EC2-Instanz hochgefahren wird, weist der Administrator ihr mindestens eine Richtlinie zu. Jede von ihnen kann jederzeit geändert werden - alle Änderungen werden automatisch und sofort angewendet.

Amazon ermöglicht Ihnen die Konfiguration sowohl eingehender als auch ausgehender Datenverkehrsrichtlinien. Das Beispiel - Regeln für unseren Testserver - ist unten zu sehen.

Beispiel von Regeln


Konfiguration von Sicherheitsgruppen

Das Hauptziel der Sicherheitsgruppenrichtlinien ist es, die Dienste, die es erfordern, der Außenwelt zugänglich zu machen. Das Ausführen zusätzlicher Software auf Servern (zum Beispiel Solr, Redis, Memcached) ist gängige Praxis, aber diese sollten den Benutzern nicht zugänglich gemacht werden. Daher ist es wichtig, zunächst zu überlegen, was für andere sichtbar sein sollte.

Im Fall eines Webservers könnte die Richtlinie für offene Ports wie folgt aussehen:

  • SSH (22) - wenn Sie den Server remote verwalten möchten (Sie können nur den Datenverkehr aus dem internen Netzwerk zulassen),
  • HTTP (80) - für ungesicherten Datenverkehr;
  • HTTPS (443) - für gesicherten Datenverkehr.

Natürlich sind das nicht die einzigen Dienste. Manchmal ist es erforderlich, einen Mailserver (SMTP, IMAP) oder ein dediziertes API (Port 8080 und andere) einzurichten. Dies ist jedoch die grundlegende empfohlene Konfiguration.

Beispiel mit Terraform

Es ist auch eine gute Praxis, dem Konzept der Infrastructure as Code zu folgen - es erleichtert und optimiert die Verwaltung Ihrer Server, weshalb wir diesen Ansatz bei Droptica verwenden. Unten finden Sie ein Beispiel für Terraform-Code, der zur Verwaltung von Sicherheitsgruppen verwendet wird.

resource "aws_security_group" "web-sg" {
  name        = "web-sg"
  vpc_id      = "${aws_vpc.vpc.id}"
  description = "Erlaube eingehende WEB-Verbindungen"

  tags {
    Name = "web-sg"
  }

  # Erlauben eingehendes SSH
  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  # Erlauben eingehendes HTTP
  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  # Erlauben eingehendes HTTPS
  ingress {
    from_port   = 443
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  # Erlauben eingehendes ICMP
  ingress {
    from_port   = -1
    to_port     = -1
    protocol    = "icmp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  # Erlaube allen ausgehenden Datenverkehr
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

Zu Beginn definieren wir nur die grundlegenden Informationen - den Namen, die Beschreibung und die Netzwerk-ID, denen die gegebene Richtlinie zugewiesen wird. Als Nächstes definieren wir die Filter (wir verwendeten die im vorherigen Abschnitt beschriebenen Filter).

Die Werte from_port und to_port ermöglichen es, Bereiche zu definieren - Sie können zum Beispiel alle Ports von 8000 bis 9000 öffnen. Die ingress-Abschnitte beziehen sich auf eingehenden und die egress-Abschnitte auf ausgehenden Datenverkehr.

Zusammenfassung

Sicherheitsgruppen sind kaum eine ultimative Lösung, die Ihre Server in uneinnehmbare Festungen verwandelt, aber sie erlauben es Ihnen, die Sichtbarkeit dessen, was nicht öffentlich zugänglich sein sollte, einzuschränken. Das Zuweisen von Standardrichtlinien zu allen Diensten ist ein häufiger Fehler von unerfahrenen Administratoren, der dazu führt, dass alle Dienste der Öffentlichkeit zugänglich gemacht werden. Aus diesem Grund lohnt es sich, mehr zu lernen und dieses Thema zu verstehen.

3. Best practices for software development teams