Sicherer LAMP-Server für die Produktion

10

Wie wird ein Linux-, Apache-, MySQL-, PHP-Server (oder sogar Perl) für die Produktion gesichert?

Welche anderen (möglicherweise nicht so offensichtlichen) Schritte sollten außer dem Festlegen des MySQL-Passworts und des Root-Passworts für Linux unternommen werden?

Welche Schritte kann ich auch unternehmen, wenn ich extra paranoid sein würde, was normalerweise nicht notwendig ist?

Dies ist für eine grundlegende Verwendung an einem einzelnen Standort vorgesehen, muss jedoch sicher sein.

WalterJ89
quelle
Apache Hardening auf einer Schwesterseite.
Marcin

Antworten:

13

Diese Empfehlungen sind mir ein Rätsel und sollen nicht umfassend sein.

Schauen Sie sich Bastille an, eine Reihe von Skripten, die Best Practices unter Linux implementieren.

Senden Sie keine Authentifizierungsdaten über Klartextprotokolle. Deaktivieren Sie beispielsweise FTP. Wenn Sie Authentifizierungsdaten über Apache senden, verwenden Sie SSL.

Deaktivieren und entfernen Sie unnötige Software einschließlich der GUI-Oberfläche.

Überprüfen Sie alle Dateien mit gesetztem SUID-Bit und entfernen Sie sie. (Dies wird die Fähigkeiten von Nicht-Wurzeln stark einschränken. Verstehen Sie die Auswirkungen auf jede einzelne Änderung.)

Überprüfen Sie öffentliche beschreibbare Verzeichnisse und entfernen Sie das beschreibbare Bit. (Lass / tmp in Ruhe.)

Vermeiden Sie es, einen Daemon als Root auszuführen.

Informieren Sie sich ausführlich über alle Mehrbenutzersoftware, die Sockets abhört, auf bewährte Sicherheitsmethoden.

Das Vermeiden des Hinzufügens von Benutzern zum System ist einer der besten Ansätze. Mehrbenutzersysteme erfordern mehr Liebe zum Detail.

Kennwortstandards erzwingen. Zum Beispiel: mindestens 10 Zeichen, nicht alphanumerische Zeichen, mit Buchstaben und Zahlen. Dies soll das brutale Forcen im Falle einer Kompromittierung der Kennwortdatei erschweren. Erzwingen Sie dies über das System.

Sperren Sie Benutzer nach 5 fehlgeschlagenen Authentifizierungsversuchen mit einer Sperrung von mindestens 10 Minuten. Pflegen Sie einen Kennwortverlauf, damit Benutzer die letzten 5 Kennwörter nicht verwenden können.

Wenn Sie eine größere Umgebung haben, ist die Verwendung der Netzwerksegregation mit mehreren Subnetzen zur Risikodämmung unbedingt erforderlich. In einer kleineren Umgebung wird empfohlen, eine Firewall auf dem lokalen System auszuführen, um die Gefährdung zu begrenzen. Zum Beispiel nur SSH für Ihre IP zulassen. tcpwrapper können auch für eine zusätzliche Schicht verwendet werden. (/etc/hosts.allow, /etc/hosts.deny)

Und natürlich die gesamte Software auf dem neuesten Stand halten. Besonders öffentlich zugängliche Dämonen.

Mit SSH:

  • Deaktivieren Sie das SSH-Protokoll 1
  • Nur Root-Authentifizierung zulassen without-password(nur Schlüsselpaar)

Mit Apache:

  • Deaktivieren Sie alle Module, die nicht benötigt werden
  • Deaktivieren Sie .htaccess und öffentliche Verzeichnisse
  • Deaktivieren Sie FollowSymlink und alle unnötigen Optionen
  • Installieren Sie PHP nicht, wenn Sie es nicht benötigen.

Mit MySQL:

  • Deaktivieren Sie Standardbenutzer.
  • Verwenden Sie keine Platzhalter-Hosts.
  • Stellen Sie sicher, dass Sie für jeden Benutzer einen eindeutigen Host festlegen.
  • Hören Sie nicht auf TCP, es sei denn, dies ist erforderlich. (Ungewöhnlich unvermeidlich.)
  • Beschränken Sie die Benutzerrechte der Anwendung so weit wie möglich. (SELECT, INSERT, UPDATE, DELETE ideal zum Schreiben und SELECT zum Lesen)

Ich würde empfehlen, die Optimierung von php.ini speziell auf Sicherheit zu untersuchen. Standardmäßig ist die Software riskanter.

Bastille

Warner
quelle
Ich werde vorschlagen, cyberciti.biz/tips/php-security-best-practices-tutorial.html für PHP-Tuning zu lesen
ALex_hha
2

Hier ist ein guter Artikel, den Sie als Basis für Ihr Setup verwenden und entsprechend Ihrer Verteilung ändern können: http://it.toolbox.com/blogs/rayheffer/how-to-build-a-secure-lamp-web- Server-mit-Centos-5-36786

Alexandre Nizoux
quelle
Laden Sie jedoch grundsätzlich keine Module, die Sie nicht explizit benötigen, verstecken Sie nicht alle Versionsnummern und Debug- / Informationsseiten, erstellen Sie für jede Anwendung einen MySQL-Benutzer mit gehärteten Kennwörtern, lassen Sie immer Leute mit einem normalen Benutzerkonto auf Ihrem Server arbeiten und machen Sie sie sudo Wenn sie Root-Berechtigungen benötigen, verwenden Sie eine Firewall wie iptables und öffnen Sie nur Ports, die auf dem basieren, was Sie unbedingt in Ihrer Box benötigen ... Dies und die neuesten Patches bieten Ihnen bereits eine recht sichere Einrichtung.
Alexandre Nizoux
Dieser Artikel ist nicht gut. Selinux deaktivieren, nichts über das Härten von MySQL, das Deaktivieren unnötiger Apache-Module ...
Sumar
0

Die Defense Information Security Agency verfügt über eine Reihe von Sicherheitschecklisten , die ein guter Ausgangspunkt sind. Noch besser ist es, die Gründe für jeden Eintrag zu verstehen, aber das ist keine schnelle Antwort. Ich würde empfehlen, dass Sie sich die Enclave-, Network-, Unix- und Webserver- STIGs ansehen .

mpez0
quelle