Die Geschichte der Erstellung einer Home Cloud. Teil 2. Server erstellen - LAMP in Debian einrichten

Auf dem Weg zu unserem eigenen Cloud-Service haben wir uns gerade an das Debian-System gewöhnt . Jetzt ist die Zeit für den nächsten Schritt gekommen - die Erstellung und Konfiguration eines Webservers, auf dessen Grundlage Nextcloud gestartet werden kann.


Inhaltsverzeichnis


Teil 1. Einrichten Ihrer Debian-Umgebung für den täglichen Gebrauch
Teil 2. Server erstellen - LAMP in Debian einrichten
Teil 3. Erstellen einer persönlichen Cloud - Installieren und Konfigurieren von Nextcloud
Teil 4. Update 2018 - Debian 9 und Nextcloud 13
Teil 5. Aktualisierung 2019 - PHP 7.2, MariaDB 10.4 und Nextcloud 17



Schnelle Kapitelnavigation


Vorwort
Softwareinstallation
Konfigurieren des Apache2-Webservers und Zugriff auf ihn über HTTP- und HTTPS-Protokolle
SQL-Optimierung
PHP-Setup
SSH-Zugriffseinstellungen
Zugangsschutz
Webserver-Referenz
MySQL-Referenz
Fail2ban Referenzmaterial



Vorwort


Der erste Teil dieser Geschichte zeigte eine der möglichen Optionen zum Einrichten der Debian-GUI für die bequeme und vertraute (ausschließlich subjektive Sichtweise des Autors) Verwendung durch eine Person, die von Windows zu Linux kam. Und wenn ich nur das Host-System zum Konfigurieren der virtuellen Maschine mit Debian verwendet habe, habe ich speziell nur in dieser virtuellen Maschine gearbeitet, im Internet nach Informationen gesucht, Notizen in Notepadqq oder gedit gemacht, Musik über Audacious gehört, Dateien über LibreOffice und dergleichen geöffnet. Auf diese Weise können Sie sich daran gewöhnen und sich viel tiefer fühlen und die Arbeit mit dem Betriebssystem und seiner Umgebung schätzen, die im Standard-Debian-Paket ziemlich voll und funktionsfähig ist.

Derzeit ist unser System so konfiguriert, dass Sie in Zukunft nur die Befehlszeile mit einem Konsolentexteditor verwenden können, z. B. nano, oder den Double Commander-Dateimanager mit dem integrierten Notepadqq-Editor. Sie können diese beiden Methoden kombinieren, indem Sie beispielsweise im System navigieren und Konfigurationsdateien über den Dateimanager und alle anderen Befehle über die Konsole bearbeiten. Alle Methoden sind gleichwertig, um das Endergebnis zu erzielen.

Das aktuelle Ziel ist die Erstellung eines Servers, dem dieser Teil gewidmet sein wird. Der Server kann mit oder ohne Installation und Verwendung der grafischen Oberfläche konfiguriert werden. Im zweiten Fall können Sie im vorherigen Teil einfach die Abschnitte über die Installation und Konfiguration der Software für die grafische Oberfläche und ihre Einstellungen sowie die Installation von Grafiksoftwarepaketen und VMware-Tools überspringen.

Ich sehe nichts Falsches daran, die grafische Oberfläche beim Erstellen eines Servers zu verwenden: Wenn es für eine Person vertrauter, bequemer und komfortabler ist, ihren ersten oder zweiten Server in einer grafischen Umgebung zu erstellen - warum nicht? Am Ende hat mein Webserver mit grafischer Oberfläche ein Jahr lang funktioniert und wird so viele Jahre wie nötig funktionieren. Sie müssen jedoch einige Punkte beachten.

Im Idealfall muss das System nach der Konfiguration sehr lange ohne unser Eingreifen arbeiten. Mein Server in der "Finish" -Version wurde in zwei Tagen konfiguriert und arbeitete fast ein Jahr lang ohne Intervention. Dies bedeutet, dass die grafische Oberfläche 0,05% der aktiven Existenz des Servers belegt war (der Computer funktioniert nur einen halben Tag) und gleichzeitig Ressourcen beanspruchte: RAM, Speicherplatz, Prozessorzeit. All diese Ressourcen werden besser für die Sicherstellung der Funktionsweise des Servers selbst verwendet: Erhöhen Sie beispielsweise memory_limit für PHP oder speichern Sie mehr Benutzerdaten auf der Festplatte. Darüber hinaus ist es bei Problemen und Fehlfunktionen bei der Arbeit mit einem echten Remote-Server häufig viel einfacher, den SSH-Zugriff zu verwenden . In diesem Zusammenhang ist das Vorhandensein einer grafischen Oberfläche unerwünscht. Aus diesem Grund war der zweite Server in meinem Netzwerk bereits eine virtuelle Maschine ohne grafische Umgebung, auf der nur Midnight Commander von der grafischen Software installiert wurde, mit der ich im Dateisystem navigiert und die Konfigurationsdateien über den mcedit-Editor bearbeitet habe . Daher ist das Folgende eine universelle Anweisung: Gegebene Befehle mit Schwerpunkt auf der Verwendung der Befehlszeile verstehen jedoch, dass der Benutzer den Computer zum ersten Mal mit einer grafischen Umgebung konfiguriert, was auf die Verwendung eines Browsers zurückzuführen ist, um die Verfügbarkeit der erstellten Sites und einige Funktionen zum Einrichten des Mail-Programms lokal zu überprüfen.

Beim Erstellen des Servers und beim Hinzufügen neuer Websites habe ich einige Hintergrundinformationen gesammelt, die für Anfänger nützlich sein können. Ich habe es nach dem Material zur Installation und Konfiguration des Servers beschrieben.

Hinweis
Beim weiteren Lesen der Konstruktionen des Formulars http: // 127.0.0.1 (https: // 127.0.0.1) muss der Leerzeichen nach http: // (https: //) beim Aufrufen der Adressleiste des Browsers entfernt werden. Beim Veröffentlichen dieses Artikels wurde ein Leerzeichen eingefügt, um zu verhindern, dass die Engine automatisch Text in Links konvertiert.



Softwareinstallation


Apache und Nginx sind zwei Open-Source-Webserver, auf denen etwa 55% der Server weltweit aufgebaut sind. Apache ist der beliebteste Webserver seit 1995 und ich habe ihn ausgewählt, in der Hoffnung auf gute Dokumentation, Popularität und sozusagen wollte ich von vorne beginnen. Dies bedeutet nicht, dass Nginx schlechter ist: Nginx verbraucht effizienter Ressourcen und arbeitet unter Last. Im russischen Segment des Internets belegt der Nginx-Server etwa 65%, während Apache etwa 18% ausmacht. Ein guter Vergleichsartikel von zwei Servern wird auf dem Hub veröffentlicht

Installieren von Apache2 Web Server:

# apt-get install apache2 apache2-doc

Und das ist alles. Etwa zwanzig Megabyte und ein Webserver sind bereits installiert. Es sind keine Neustarts oder Einstellungen erforderlich - der Server weiß bereits, wie HTML- Seiten geöffnet werden. Eine moderne Website im Internet besteht jedoch nicht nur aus statischen Dateien, Stilen, Schriftarten und dergleichen wie vor zwanzig Jahren. Eine moderne Site enthält in PHP geschriebene Skripte, und dynamische Informationen (z. B. Textinhalte, Kommentare, Benutzerprofile) werden nicht in Dateien neben PHP-Dateien geschrieben, sondern in eine spezielle SQL-Datenbank . Für einen vollständigen Server müssen Sie diese Technologien unterstützen. Darüber hinaus ist es nicht schwierig:

# apt-get installiere mysql-server mysql-client phpmyadmin
# apt-get installiere php5 php5-mysql libapache2-mod-php5

Während der Installation von MySQL werden Sie aufgefordert, das Kennwort für den MySQL-Superuser festzulegen, und Sie müssen den Apache2-Server auswählen, um die Arbeit mit MySQL automatisch zu konfigurieren. Bei der Installation des phpmyadmin- Pakets habe ich zugestimmt, das Paket automatisch zu konfigurieren, und überall das mysql-Root-Passwort eingegeben. Die PHP-Installation erfolgt ohne Anforderungen.

Ich habe weder schnelleres PHP7 noch kostenlose MariaDB als alternativen Open-SQL-Ersatz verwendet und mich entschlossen, meinen Server auf dem „kanonischen“ LAMP = Linux + Apache + MySQL + PHP mit alten und bewährten Lösungen aufzubauen, falls ich Probleme schnell lösen könnte und leicht Informationen im Internet zu finden.

Drei Teams (die tatsächlich auf eins reduziert werden können) und wir haben lokal einen vollwertigen und modernen Server installiert. Es ist sehr einfach!

Die Servereinrichtung dauert jedoch viel länger als die Installation der Komponenten. Anfangs wollte ich in diesem Teil meine typischen Fehler, falschen Lösungen für Probleme und die Ergebnisse, zu denen sie führten, zeigen, aber es stellte sich heraus, dass viele Dinge in einem Jahr aus meinem Gedächtnis gelöscht wurden. Ich musste viel aus den Aufzeichnungen wiederherstellen, daher wird im Folgenden nur eine Arbeitsanweisung mit kleinen Angaben aufgeführt Kommentare, um ein universelles Arbeitsergebnis zu erzielen.



Konfigurieren Sie den Apache2-Webserver


Zuerst müssen Sie sicherstellen, dass der Webserver funktioniert. Öffnen Sie dazu einen Browser und wählen Sie die Adresse http: // 127.0.0.1 ( localhost ). Eine ermutigende Inschrift sollte sich öffnen: „Apache2 Debian Default Page. Es funktioniert! " Der Server funktioniert wirklich. Wenn Sie eine Reihe von Site-Dateien für das Jahr 2000 haben, können Sie diese im Verzeichnis / var / www / html ablegen und sie werden wahrscheinlich auf unserem Server geöffnet.



Alle grundlegenden Webservereinstellungen werden im Pfad / etc / apache2 gespeichert. Wenn Sie dieses Verzeichnis öffnen, sehen Sie die Hauptkonfigurationsdatei apache2.conf und die Verzeichnisse conf-available, mod-available, sites-available. Diese Verzeichnisse enthalten vorkonfigurierte Dateien mit Einstellungen (sogenannte Snippets), die Sie standardmäßig mit Ihren eigenen Änderungen verwenden oder als Vorlage zum Erstellen eigener Konfigurationen verwenden können. Im Verzeichnis "sites-available" befindet sich beispielsweise die Standardhostkonfigurationsdatei 000-default.conf. Wenn Sie es öffnen und studieren, stellt sich heraus, dass diese Datei nur den Pfad festlegt, auf dem unsere Website unter der Adresse http: // 127.0.0.1: „DocumentRoot / var / www / html“ geöffnet wird. Darüber hinaus bedeutet die Zeile „<VirtualHost *: 80>“, dass ich, wenn ich meinen Computer in einem lokalen Netzwerk freigebe und über Port 80 (Port für HTTP ) darauf zugreife, eine Site im Pfad / var / www öffne / html. Wie kann ich das überprüfen?

Zuerst müssen Sie die IP-Adresse ermitteln, die der virtuellen Maschine nach dem Laden zugewiesen wurde. Führen Sie Folgendes aus, um die Konfiguration von Netzwerkadaptern anzuzeigen:

# ifconfig

Anhand der auf der Konsole angezeigten Informationen kann leicht festgestellt werden, dass für den eth0-Adapter die folgende Adresse festgelegt ist:

inet addr:192.168.233.138

Jetzt öffne ich auf dem Host-Computer die Browser-Adresse http: // 192.168.233.138 im Browser und erwarte, dass eine vertraute Seite geöffnet wird. Aber ... sie öffnet nicht. Nach einiger Zeit schreibt mein Browser: "Die Verbindung ist abgelaufen." Und er schreibt richtig. In der Tat habe ich im ersten Teil die Firewall eingeschaltet, aber Port 80 wurde nicht geöffnet! Lassen Sie uns das beheben:

# ufw erlauben 80

Versuchen Sie erneut, die Adresse http: // 192.168.233.138 zu öffnen, und stellen Sie sicher, dass die erwartete Seite geöffnet wird. Der virtuelle Host in der virtuellen Maschine wurde von außerhalb dieser gesamten Virtualisierung geöffnet. Wir haben einen kleinen Schritt unternommen, um unser eigenes kleines virtuelles Internet aufzubauen.

Zusätzlich zu den verfügbaren Verzeichnissen gibt es auch aktivierte Verzeichnisse, die das enthalten, was derzeit "enthalten" ist. Wenn Sie sie sich ansehen, können Sie sehen, dass diese Verzeichnisse Links zu Dateien enthalten, die sich in den verfügbaren Verzeichnissen befinden. Derzeit befindet sich nur ein Link im Sites-fähigen Verzeichnis - die Datei /etc/apache2/sites-available/000-default.conf. Dies ist sehr praktisch - wir können Verknüpfungen auf oder außerhalb von Hosts steuern, ohne deren Konfigurationsdateien zu bearbeiten. Darüber hinaus ist die Quelle der Konfiguration, ob eine Konfigurationsdatei jetzt unabhängig enthalten ist oder nicht. Dies verhindert Fehler, wenn etwas in einer Datei korrigiert und in einer anderen vergessen wird. Um unseren Host zu deaktivieren, müssen Sie die erforderliche Verknüpfung löschen und zum Aktivieren erstellen. Um Verknüpfungen nicht manuell zu löschen oder zu erstellen, ist es einfacher und zuverlässiger, spezielle Dienstprogramme zu verwenden.

Deaktivieren Sie den virtuellen Host:

# a2dissite 000-default

Schalten Sie den virtuellen Host ein:

# a2enssite 000-default

Nach jeder Änderung müssen Sie die Hostkonfigurationen neu starten oder den Server neu starten:

# service apache2 reload

oder

# service apache2 restart

Daher ist jetzt ein grundlegendes Verständnis für die Konfiguration regulärer Hosts in Apache verfügbar. Anschließend werde ich ein Beispiel dafür zeigen, wie ich meinen Server für die Arbeit mit HTTP- und HTTPS- Protokollen konfiguriert habe.

Sie müssen mit der Tatsache beginnen, dass beim Trennen des virtuellen Hosts mit 000 Standardeinstellungen keine Trennung als solche auftritt. Das heißt, die Site wird von innerhalb und außerhalb der virtuellen Maschine geöffnet - und unabhängig davon geöffnet, ob sich ihre Konfiguration im Ordner "sites-enabled" befindet. Dies war unerwartet und ich verbrachte relativ lange Zeit, um zu verstehen, ob ich alles richtig gemacht oder verstanden habe. Bis zum Ende habe ich das immer noch nicht verstanden, anscheinend liegt dies daran, dass der Pfad / var / www / html global als Standardverzeichnis für DocumentRoot festgelegt ist. Da ich nicht wollte, dass etwas Unnötiges aufgenommen wird und darauf zugegriffen werden kann, habe ich beschlossen, das HTML-Verzeichnis selbst zu entfernen und für alle verschachtelten / var / www den Zugriff standardmäßig zu verweigern.

Um den virtuellen Standardhost zu konfigurieren, habe ich seine Konfigurationsdatei bearbeitet:

# nano /etc/apache2/sites-available/000-default.conf

Der Inhalt der Konfigurationsdatei lautet wie folgt:

 <VirtualHost *:80> ServerName localhost ServerAdmin user@localhost DocumentRoot /var/www <Directory /var/www> Options FollowSymLinks AllowOverride All Require all denied </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

Mit dieser Konfiguration habe ich das Standardverzeichnis auf / var / www zurückgesetzt, dem Server erlaubt, symbolischen Links in diesem Verzeichnis zu folgen, dem Server erlaubt, alle in den gefundenen .htaccess-Dateien deklarierten Anweisungen auszuführen, und den Zugriff auf dieses Verzeichnis verweigert. Die Logik dieser Aktionen besteht darin, dass ich den Zugriff auf dieses Verzeichnis steuern kann, ohne auf die Einstellungen des Webservers zuzugreifen und ohne ihn neu zu starten. Jetzt müssen Sie diese Lösung überprüfen.
Übertragen Sie die Datei:

# mv /var/www/html/index.html /var/www/index.html

Und löschen Sie das Verzeichnis:

# rm / var / www / html

Wir starten den Server neu, damit die neuen Standardeinstellungen des virtuellen Hosts wirksam werden:

# service apache2 restart

Erstellen Sie eine Datei:

# nano /var/www/.htaccess

In der wir eine Zeile (ohne Anführungszeichen) schreiben: "Erfordere alle gewährt".

Zusammenfassend. Jetzt gibt es keinen Pfad / var / www / html, aber der Standardhost wird in den Pfad / var / www neu konfiguriert, in dem sich die Datei index.html befindet. Standardmäßig wird auf Webserverebene der Zugriff auf dieses Verzeichnis verweigert, der Inhalt ist jedoch lokal zulässig die dort befindliche .htaccess-Datei.

Öffnen Sie den Browser http: // 127.0.0.1 und sehen Sie sich die bereits bekannte Seite „Apache2 Debian Default Page. Es funktioniert. " Überprüfen wir nun die Funktionsfähigkeit der "lokalen" Zugriffskontrolle:
Löschen Sie die .htaccess-Datei:

# rm /var/www/.htaccess

Und wir aktualisieren die geöffnete Seite im Browser - die Seite mit dem Hinweis auf Zugriffsbeschränkung (Verboten) sollte geöffnet werden. Ja, das alles funktioniert, also wird alles richtig gemacht.

Grundsätzlich reichen diese einfachen Einstellungen für den weiteren problemlosen Betrieb des Webservers aus. Aber es schien mir nicht genug. Jetzt kann unser Webserver nur noch mit dem HTTP-Protokoll arbeiten. Aber was ist mit dem HTTPS-Protokoll? Wenn in Zukunft Projekte auf Basis dieses Webservers ins Internet gebracht werden sollen, ist die Möglichkeit, an diesem Protokoll zu arbeiten, zumindest wünschenswert. Und ich habe beschlossen, die HTTPS-Unterstützung basierend auf der Erstellung eines selbstsignierten SSL- Zertifikats zu organisieren.

Zuerst benötigen Sie ein SSL-Zertifikat, das auf unserem Server installiert wird. Wir haben keine Domain und auch keine statische IP-Adresse. All dies spielt jedoch keine Rolle, da ich das Zertifikat selbst mit den Tools meines Systems erstellen werde.

Achtung! In den folgenden Anweisungen wird davon ausgegangen, dass der Server auf einem namenlosen Computer installiert ist. Wenn es eine echte IP oder einen echten Domainnamen gibt, müssen diese an DREI Stellen angegeben werden: <Common Name IP / Domain>; <Servername IP / Domain>; <Redirect "/" "https: // IP / Domain /"> - Ersetzen Sie in geeigneten Konstruktionen IP / Domain durch eine IP-Adresse oder einen Domainnamen. Im folgenden Text wird localhost anstelle von IP / Domain verwendet.

Generieren Sie ein SSL-Zertifikat:

# openssl req -x509 -nodes -days 3650 -newkey rsa: 2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

Mit diesem Befehl wird sofort für 10 Jahre ein selbstsigniertes Zertifikat des X.509-Standards erstellt, wobei die Zertifikatschutzoption mit einer Passphrase übersprungen wird. Dies ist erforderlich, damit der Apache-Server beim Starten des Apache-Servers die Datei ohne Benutzereingriff lesen kann, da Sie nach dem Festlegen eines Kennworts nach jedem Start oder Neustart ein Kennwort eingeben müssen Server. Zusammen mit dem Zertifikat wird ein neuer RSA-Schlüssel für 2048 Bit erstellt, mit dem das Zertifikat signiert wird. Die Optionen –keyout und –out geben die Pfade an, auf denen OpenSSL den Schlüssel und das Zertifikat generieren soll.

Bei der Erstellung des Zertifikats werden Fragen gestellt, zu denen ich folgende Daten angegeben habe:

Ländername = MW
Name des Bundesstaates oder der Provinz = Sonnensystem
Ortsname = Mond
Name der Organisation = Hellium Inc.
Name der Organisationseinheit = 2
Allgemeiner Name = localhost
E-Mail-Adresse = user @ localhost

Erstellen Sie als Nächstes die Diffie-Hellman-Schlüssel, um PFS- Unterstützung bereitzustellen:

# openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Punkte und Pluspunkte werden im Terminal ausgeführt. Nach dem Ende des Cartoons können Sie die Datei ssl-params.conf erstellen, in der die SSL-Parameter für den Server definiert werden:

# nano /etc/apache2/conf-available/ssl-params.conf

Für ein sicheres, aktuelles Setup habe ich den im Generator generierten Code zum Konfigurieren von SSL auf mozilla.imtqy.com verwendet . Im Generator habe ich den Apache2-Server und das Modern-Profil ausgewählt und die Versionen des Servers und von OpenSSL korrekt festgelegt, die mit den folgenden Befehlen erkannt werden können:

# apache2 -v
# openssl version

Als Ergebnis erhielt ich folgenden Text:

 # 14-01-2018 / for apache2 2.4.10 & openssl 1.0.1t # from https://mozilla.imtqy.com/server-side-tls/ssl-config-generator/ # parametrs help: https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html # modern configuration, tweak to your needs SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 SSLHonorCipherOrder on SSLCompression off # OCSP Stapling, only in httpd 2.3.3 and later SSLUseStapling on SSLStaplingResponderTimeout 5 SSLStaplingReturnResponderErrors off SSLStaplingCache shmcb:/var/run/ocsp(128000) 

Konfigurieren Sie nun den virtuellen Host mit SSL-Unterstützung:

# nano /etc/apache2/sites-available/default-ssl.conf

Ich habe den Text dieser Datei in das folgende Formular gebracht:

 <IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin user@localhost ServerName localhost DocumentRoot /var/www <Directory /var/www> Options FollowSymLinks AllowOverride All Require all denied </Directory> # HSTS (mod_headers is required) (15768000 seconds = 6 months) Header always set Strict-Transport-Security "max-age=15768000" ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule> 

Aus dem Obigen folgt, dass wir auch / var / www als DocumentRoot-Verzeichnis definiert haben, dessen Zugriff ähnlich wie in den vorherigen Einstellungen konfiguriert ist. Der HSTS- Mechanismus ist aktiviert , wodurch die Verbindung über das HTTPS-Protokoll erzwungen werden kann. Das verwendete Zertifikat und der verwendete Schlüssel enthalten SSL-Unterstützung sowie Unterstützung für die Verarbeitung von Zertifikatdaten in PHP- und CGI- Skripten. Der letzte Abschnitt dient der Kompatibilität mit früheren Versionen von Internet Explorer und ist im Allgemeinen nicht erforderlich.

Jetzt machen wir den letzten Schliff.

Öffnen wir den Port für SSL:

# ufw erlauben 443

Aktivieren Sie Apache-Module für die SSL- und HSTS-Unterstützung:

# a2enmod ssl
# a2enmod Header

Aktivieren Sie die SSL-Konfiguration:

# a2enconf ssl-params

SSL-fähigen virtuellen Host aktivieren:

# a2ensite default-ssl

Starten Sie den Server neu, um alle neuen Einstellungen zu akzeptieren:

# service apache2 restart

Der interessante Moment ist also gekommen - die Überprüfung der Funktionsfähigkeit der neuen Funktionalität des konfigurierten Systems.

Erstellen Sie eine Datei:

# nano /var/www/.htaccess

In dem wir eine Zeile vorschreiben: "Erfordere alles, was gewährt wird".

Öffnen Sie im Browser https: // 127.0.0.1. Eine Seite über ein unbekanntes Zertifikat sollte geöffnet werden. Nach dem Akzeptieren (einmalige oder dauerhafte Berechtigung) wird eine vertraute Seite mit einer Benachrichtigung über einen laufenden Webserver geöffnet.

Löschen Sie die .htaccess-Datei:

# rm /var/www/.htaccess

Und wir aktualisieren die geöffnete Seite im Browser - die Seite mit dem Hinweis auf Zugriffsbeschränkung (Verboten) sollte geöffnet werden. Alles funktioniert richtig. Jetzt sind unsere Websites über HTTP und HTTPS zugänglich.

Der HTTP-Zugriff kann aktiviert, deaktiviert oder gezwungen werden, zu HTTPS umzuleiten.

Für den HTTP-fähigen Zugriff muss nichts unternommen werden, da der Server die Anforderungen für die Ports 80 und 443 einzeln verarbeitet und unsere Site im Ordner / var / www sowohl über HTTP als auch über HTTPS geöffnet wird.

Um den HTTP-Zugriff zu deaktivieren, müssen Sie nur den entsprechenden virtuellen Host deaktivieren und den Webserver neu starten:

# a2dissite 000-default
# service apache2 restart

Wenn Sie jetzt http: // 127.0.0.1 in einem Browser öffnen, sollte eine Seite mit einer Benachrichtigung über das Fehlen einer Seite (nicht gefunden) geöffnet werden.

Die interessanteste dritte Option. In diesem Fall bleibt HTTP formal aktiviert, die Datenverarbeitung wird jedoch zwangsweise über HTTPS umgeleitet.

Aktivieren Sie dazu zunächst das Umleitungsmodul:

# a2enmod umschreiben

Öffnen Sie nun die Datei 000-default.conf:

# nano /etc/apache2/sites-available/000-default.conf

Fügen Sie vor dem schließenden Tag den folgenden Text hinzu:

 RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] 

Starten Sie den Server neu:

# service apache2 restart

Erstellen Sie eine Datei:

# nano /var/www/.htaccess

In dem wir eine Zeile vorschreiben: "Erfordere alles, was gewährt wird".

Wenn Sie nun die Adresse http: // 127.0.0.1 in einem Browser öffnen, werden wir automatisch mit einer Warnung zu einem unbekannten Zertifikat (falls es zuvor nicht zur Ausschlussliste im Browser hinzugefügt wurde) zu https: // 127.0.0.1 umgeleitet. Nach dem Akzeptieren wird eine bereits vertraute Adresse geöffnet Webserver-Benachrichtigungsseite.



SQL-Optimierung


Führen Sie für die Ersteinrichtung von MySQL einfach den folgenden Befehl aus:

# mysql_secure_installation

Nachdem ich das Passwort für den MySQL-Superuser eingegeben hatte, beantwortete ich die gestellten Fragen in der folgenden Reihenfolge:

  • weigerte sich, das Root-Passwort zu ändern;
  • bestätigte das Entfernen anonymer Benutzer aus der Datenbank;
  • Bestätigt das Blockieren der Remoteverbindung für root (aus Sicherheitsgründen ist root nur lokal verbunden);
  • bestätigte das Entfernen von Testdatenbanken;
  • vereinbart, Berechtigungstabellen neu zu laden.

Um den Zustand von MySQL zu überprüfen, können Sie den folgenden Befehl ausführen:

# mysql -uroot -p

Nach Eingabe des MySQL-Superuser-Passworts wird die MySQL-Eingabeaufforderung angezeigt. Dies bedeutet, dass der Dienst aktiv ist. Sie können das MySQL-Terminal beenden, indem Sie den Befehl exit eingeben.

Öffnen Sie die Adresse http: // 127.0.0.1/phpmyadmin im Browser, um die Leistung von phpmyadmin zu überprüfen. Wenn eine Seite mit einer Einladung zur Eingabe von phpmyadmin geöffnet wird, ist der Dienst aktiv.



PHP-Setup


Nach der Installation von PHP habe ich die Einstellungsdatei geöffnet:

# nano /etc/php5/apache2/php.ini

Und er brachte einige Parameter in die folgende Form:

  • memory_limit = 1024M
  • default_charset = "UTF-8"
  • upload_max_filesize = 256M
  • sendmail_path = /usr/bin/fake_sendmail.sh

Mit dem PHP-Modul können Sie das Zwischenspeichern von Daten im Speicher bereitstellen. Das Caching ist nützlich bei hoher Serverlast für Daten, deren Generierung eine große Menge an Ressourcen erfordert, z. B. die Ergebnisse von Abfragen an die Datenbank oder die Verarbeitung "schwerer" Teile einer Site-Vorlage. Als Caching-Server habe ich das Memcached- Modul ausgewählt.

Memcache installieren:

[ Dieser Text wurde speziell für die Site geektimes.ru von AlexanderS geschrieben .
Der Link zur Quelle ist optional, aber die Referenz ist sehr wünschenswert! ]]

# apt-get install memcached php5-memcached

Schauen wir uns die Einstellungen für die Dienstkonfiguration an:

# nano /etc/memcached.conf

In den Einstellungen habe ich den für das Caching verwendeten Speicher vergrößert: -m 64 -> -m 256. Außerdem habe ich die Verfügbarkeit des Betriebsmodus nur in der lokalen Zone überprüft: -l 127.0.0.1.

Wir starten den Caching-Dienst und den Webserver neu:

# Service memcached Neustart
# service apache2 restart

Jetzt müssen Sie sicherstellen, dass der Dienst funktioniert. Erstellen Sie dazu eine Datei:

# nano /var/www/info.php

Und fügen Sie den folgenden Text hinzu:

 <?php phpinfo (); ?> 

Vergessen Sie nicht, das Vorhandensein der .htaccess-Datei im Verzeichnis / var / www mit den entsprechenden zulässigen Inhalten zu überprüfen. Wenn diese nicht vorhanden ist, erstellen Sie sie

Jetzt können Sie in Ihrem Browser http: // 127.0.0.1/info.php öffnen - eine Seite mit Informationen zu PHP sollte geöffnet werden, auf der Sie den darin gespeicherten Abschnitt überprüfen müssen. Wenn die Tabelle angezeigt wird, funktioniert PHP.

Sie können den ausgeführten memcached-Dienst folgendermaßen überprüfen:

$ ps -aux | grep memcached

Das Terminal sollte eine Zeichenfolge zurückgeben, die zwischengespeicherte Einstellungen enthält.

Erstellen eines Mail Stubs für PHP

In den PHP-Einstellungen wurde ein Shell-Skript als Parameter sendmail_path angegeben. Die Funktion dieses Skripts besteht darin, Briefe, die über die Standardfunktion php mail () auf dem lokalen Computer gesendet wurden, in einem geeigneten Ordner zu speichern und nicht irgendwohin zu senden.

Erstellen Sie eine Datei:

# nano /usr/bin/fake_semdmail.sh

Mit folgendem Inhalt:

 #!/bin/sh prefix="/var/mail/sendmail/new" numPath="/var/mail/sendmail" if [ ! -f $numPath/num ]; then echo "0" > $numPath/num fi num=`cat $numPath/num` num=$(($num + 1)) echo $num > $numPath/num name="$prefix/letter_$num.txt" while read line do echo $line >> $name done chmod 777 $name /bin/true 

Machen Sie diese Datei ausführbar:

# chmod + x /usr/bin/fake_semdmail.sh

Erstellen Sie die erforderlichen Verzeichnisse, die Sie möglicherweise benötigen, wenn Sie die Briefsammlung mit dem Mailprogramm konfigurieren:

# mkdir / var / mail / sendmail / var / mail / sendmail / cur / var / mail / sendmail / new / var / mail / sendmail / tmp

Und wir weisen Rechte zu, damit der Server Dateien in diesen Ordner schreiben kann:

# chmod 777 -R / var / mail / sendmail

Jetzt werden alle ausgehenden E-Mails zu / var / mail / sendmail hinzugefügt. Sie können mit einem Texteditor angezeigt oder per E-Mail-Programm gesammelt werden. Die vorinstallierte Debian-Software wird mit einem Evolution-E-Mail-Client geliefert. Wählen Sie beim Einrichten eines Kontos als Servertyp "Mail-Verzeichnisse im Maildir-Format" aus, geben Sie den Pfad zum Mail-Verzeichnis (/ var / mail / sendmail) an und wählen Sie als Server "Sendmail" aus.

Das ist alles. Im Allgemeinen sind wir mit dem Server fertig - es wird eine universelle virtuelle Maschine erhalten, auf deren Grundlage Sie Ihre Netzwerkdienste aufbauen können. Ich habe sowohl HTTP- als auch HTTPS-Zugriffe hinterlassen. Nachdem ich jedoch Erfahrung mit dem Erstellen und Konfigurieren eines Servers sowie dem Hinzufügen von Sites (siehe unten) gesammelt habe, würde ich empfehlen, eine neue virtuelle Maschine mit einem Server ohne grafische Oberfläche als optimalen Ressourcenverbrauch zu erstellen.



SSH-Zugriffseinstellungen


Ein Server wäre kein vollständiger Server ohne Zugriff über SSH. Mit der sogenannten „Shell“ können Sie schnell und sicher eine Verbindung zu einem Remote-Server herstellen, beispielsweise mit einem kleinen Kittprogramm. Auf dem lokalen Computer erhalten Sie direkten Zugriff auf das Terminal des Remote-Servers.

Serviceinstallation:

# apt-get install ssh

Lassen Sie uns den Port für SSH öffnen (tatsächlich sollte der Standardport die Nummer 22 sein, aber unten habe ich den Port in der SSH-Konfiguration neu definiert):

# ufw erlauben 106

Öffnen Sie die Datei, um den Zugriff für unseren Benutzer zu arrangieren:

# nano / etc / ssh / sshd_config

Und fügen Sie die Direktive am Ende der Datei hinzu:

AllowUsers Benutzer

Außerdem habe ich aus Sicherheitsgründen die folgenden Änderungen an dieser Datei vorgenommen:

  • Port von 22 auf einen anderen geändert ( Liste der Ports ): Port 22 -> Port 106
  • deaktivierte das Legacy-Protokoll: Protokoll 2.1 -> Protokoll 2
  • Deaktivierter Fernzugriff für root: PermitRootLogin yes (oder PermitRootLogin without-password) -> PermitRootLogin no

Starten Sie dann den Dienst neu:

# service sshd neu starten

Jetzt kann ich das Putty-Programm auf dem Host-Computer ausführen und im Konsolenmodus eine Verbindung zu meinem Server herstellen, indem ich die Verbindungsadresse 192.168.233.138, Port 106 und den Benutzernamen-Benutzer eingebe. Wenn Sie eine Verbindung herstellen, müssen Sie zustimmen, um die Schlüssel zu akzeptieren und das Kennwort für den Benutzer einzugeben. Wenn Sie Befehle vom Superuser ausführen müssen, können Sie den bereits bekannten Befehl su verwenden.



Zugangsschutz


- DDoS, , VPS/VDS, , «» , . Slow HTTP DDoS , , IP .

DDoS - . , , . - SSH, , , SSH – .

, – , SSH. «» IP , , , SSH FTP. , -, , .

, fail2ban:

# apt-get install fail2ban

Unmittelbar nach der Installation ist das Dienstprogramm bereits zum Schutz der meisten Ports konfiguriert. Wenn innerhalb von zehn Minuten mehr als sechs fehlgeschlagene Verbindungsversuche in den Systemprotokollen angezeigt werden, wird der Eindringling für zehn Minuten blockiert. Der Funktionsmechanismus von fail2ban ist recht einfach - sogenannte Jails, die eine Aktion zum Schutz der Anwendung auslösen, werden durch bestimmte Trigger ausgelöst.

Blockierungsparameter können individuell eingestellt werden:

# nano /etc/fail2ban/jail.local

In der erstellten Datei müssen die Einstellungen festgelegt werden, die standardmäßig die vorhandenen ersetzen. Ein Beispiel für meinen Dateiinhalt:

#
[DEFAULT]
ignoreip = 127.0.0.1
bantime = 2592000
findtime = 43200
maxretry = 6
banaction = iptables-multiport
#
destemail = user@localhost
sendername = Fail2Ban
mta = sendmail
action = %(action_mwl)s

# SSH
[ssh]
enabled = true
port = 106
filter = sshd
logpath = /var/log/auth.log

#
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log

# php
[apache-noscript]
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/apache*/*error.log

#
[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/log/apache*/*error.log
maxretry = 2

#
[apache-nohome]
enabled = true
port = http,https
filter = apache-nohome
logpath = /var/log/apache*/*error.log
maxretry = 2


Mit der obigen Einstellung können Sie den lokalen Zugriff nicht steuern. Bei sechs falschen Anmeldeversuchen innerhalb von 12 Stunden wird die IP-Adresse des Angreifers mithilfe von iptables für 30 Tage gesperrt. Es steuert nicht nur den Portzugriff für SSH, sondern auch verdächtige Aktionen, die den Betrieb des Webservers destabilisieren sollen.



Webserver-Referenz


Starten, Stoppen und Neustarten des Servers:

# service apache2 start
# service apache2 stop
# service apache2 restart


Neuladen der Serverkonfigurationen:

# service apache2 reload Ein-

und Ausschalten des

Testhosts
: # a2ensite test # a2dissite test

Ein- und Ausschalten der

Testkonfiguration
: # a2enconf test # a2disconf test

Überprüfen der Syntax von Dateien (sollte

Folgendes zurückgeben: "Syntax OK"): # apache2ctl configtest

Option zum Hinzufügen einer Site mit HTTP- oder HTTPS-Zugriff unter Verwendung eines vorhandenen virtuellen Hosts

, , site.com, /home/user/www. , user .

( ):

# chmod 755 /home/user

:

$ mkdir /home/user/www /home/user/www/site.com

:

# ln -s /home/user/www/site.com /var/www/site.com

HTTP :

# nano /etc/apache2/sites-available/000-default.conf

HTTPS :

# nano /etc/apache2/sites-available/default-ssl.conf

Fügen Sie der geöffneten Datei vor dem schließenden / VirtualHost-Tag den folgenden Inhalt hinzu:

 <Directory /var/www/site.com> Options FollowSymLinks AllowOverride All Require all granted </Directory> 

-:

# service apache2 restart

http:// 127.0.0.1/site.com https:// 127.0.0.1/site.com ( — . ). , .htaccess, : «Require all granted».

HTTP HTTPS , IP

– , : , , site.com, /home/user/www. .

( ):

# chmod 755 /home/user

:

$ mkdir /home/user/www/site.com

:

# ln -s /home/user/www/site.com /var/www/site.com

HTTP :

# nano /etc/apache2/sites-available/site.com.conf

:

 <VirtualHost *:80> ServerName site.com ServerAlias www.site.com ServerAdmin user@localhost DocumentRoot /var/www/site.com <Directory /var/www/site.com> Options FollowSymLinks AllowOverride All Require all granted </Directory> # Redirect HTTP->HTTPS #RewriteEngine On #RewriteCond %{HTTPS} off #RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

HTTPS :

# nano /etc/apache2/sites-available/site.com-ssl.conf

:

 <IfModule mod_ssl.c> <VirtualHost _default_:443> ServerName site.com ServerAlias www.site.com ServerAdmin user@localhost DocumentRoot /var/www/site.com <Directory /var/www/site.com> Options FollowSymLinks AllowOverride All Require all granted </Directory> # HSTS (mod_headers is required) (15768000 seconds = 6 months) Header always set Strict-Transport-Security "max-age=15768000" ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule> 

/etc/hosts «127.0.0.1 site.com»:

# echo >> /etc/hosts 127.0.0.1 site.com

HTTP :

# a2ensite site.com.conf

HTTPS :

# a2ensite site.com-ssl.conf

-:

# service apache2 restart

http:// site.com https:// site.com ( – . ). , .htaccess, : «Require all granted».

. «» . Es ist nicht schwer.Wir kennen den Domainnamen und die IP-Adresse des Gastcomputers. Wenn das Hostsystem Windows ist, müssen Sie die Datei c: \ Windows \ System32 \ drivers \ etc \ hosts öffnen und ganz am Ende die folgende Zeile hinzufügen:

192.168.233.138 site.com

. , site.com . , .

, HTTPS, HTTP :

— /etc/apache2/sites-available/site.com.conf ,
— /etc/apache2/sites-available/site.com.conf RewriteEngine/RewriteCond/RewriteRule
— site.com.conf,
- Starten Sie den Server neu: # service apache2 restart

Überprüfen des Zustands der hinzugefügten Site

Der einfachste Weg, die Verfügbarkeit der Site zu überprüfen, besteht darin, die Datei index.html mit einigen Inhalten in ihrem Stammverzeichnis abzulegen.

Erstellen Sie eine index.html-Datei:

$ nano /home/user/www/site.com/index.html

und fügen Sie den folgenden Inhalt hinzu:

 <html> <head> <title>TEST OK</title> </head> <body> <h1>TEST OK</h1> </body> </html> 

Öffnen Sie je nach Methode zum Hinzufügen der Site in Ihrem Browser die Adresse http: // 127.0.0.1/site.com (https: // 127.0.0.1/site.com) oder http: // site.com (https: // site.com) ) - Eine Seite mit dem Text "TEST OK" sollte geöffnet werden.



MySQL-Referenz


user123 pass123 db123 .

mysql, mysql :

# mysql -u root -p

( «mysql>» , ):

mysql> CREATE DATABASE `db123`;

user123 pass123:

mysql> CREATE USER 'user123'@'localhost' IDENTIFIED BY 'pass123';

:

mysql> GRANT ALL PRIVILEGES ON `db123`.* TO 'user123'@'localhost';

:

mysql> FLUSH PRIVILEGES;

mysql:

mysql> exit

http:// 127.0.0.1/phpmyadmin user123/ pass123. db123.

root mysql c pass123 pass456:

# mysqladmin -uroot -ppass123 password pass456

user123 c pass123 pass456:

# mysqladmin -uuser123 -ppass123 password pass456

user123:

mysql> DROP USER 'user123'@'localhost';

db123:

mysql> DROP DATABASE `db123`;



fail2ban


:

# service fail2ban restart

:

# fail2ban-client status

sshd:

# fail2ban-client status ssh

:

# fail2ban-client set ssh unbanip Banned_IP



, .



Die Geschichte der Erstellung einer Home Cloud. 2. — LAMP Debian.
: 1.0.1.
: 30.01.2018.
: 15.01.2020.

1.0.1 [15-01-2020]
Aktualisieren des Inhaltsverzeichnisses.

1.0.0 [30-01-2018]
Die erste Version.
Beschreibt, wie LAMP in Debian 8.7.x installiert und konfiguriert wird.

Source: https://habr.com/ru/post/de409915/


All Articles