Basics
- mkdir ordername -> erstellt neue Ordner
- cd /PFAD/ZUM/ORDNER -> damit kannst du dich zu anderen Ordner innerhalb von SSH bewegen
- ls -> Ordnerinhalt anzeigen
- cp QUELLE ZIEL -> Datei kopieren
- mv QUELLE ZIEL -> Dateien verschieben, aber auch umbennen
Wahl des Betriebssystems
Fangen wir erstmal bei der Wahl des Betriebssystems an.
Persönlich nutze ich Ubuntu Server ganz gerne - in der Regel ist die Dokumentation hier besonders üppig.
Dementsprechend würde ich das zum Einstieg auch empfehlen.
Erste Verbindung
Nachdem du die Installation im SCP abgeschlossen hast, willst du dich mit dem Server verbinden.
Unter Linux erfolgt dies über ein Terminal - SSH genannt.
Hierfür brauchst du "PuTTY".
Ich lade mir dort immer die "Alternative binary files" herunter und platziere diese an einem beliebigen Ort.
Anschließend erstelle ich mir eine Verknüpfung und ändere das "Ziel" wie folgt ab:
-ssh root@SERVERIP -P 22 -pw DEINPASSWORT
Damit verbindet sich PuTTY direkt mit deinem Server.
Bei der ersten Verbindung wirst du diese gesondert bestätigen müssen (einfach auf Ja klicken).
Es geht hierbei darum den Host Key in deiner Registry zu speichern und somit dem Server zu vertrauen.
Nachdem das erledigt ist, bist du "drin".
System-Update
Das erste was du machen willst, ist es die Paketquellen zu aktualisieren und bereits installierte Pakete zu upgraden.
Dies macht man so:
"apt" ist hierbei der Paketmanager.
Im übrigen lassen sich mehrere Befehle auch in einer Zeile zusammenfassen, dies erfolgt durch "&&" und sieht z.B. so aus:
apt update && apt upgrade
Eventuell kann es notwendig sein den Server zu rebooten (vor allem bei Kernel Updates!).
Dies kannst du jedoch auch am Ende der Anleitung erledigen, dann siehst du auch ob die Dienste einen Neustart "überleben".
SSH Hardening
Das erste was ich mache, ist es den Zugang zu SSH zu erschweren.
Dies kannst du auf vielfältige Art und Weise machen.
Manche User präferieren es sich nur über Keys anzumelden, wieder andere - mich eingeschlossen - ziehen es vor immer auf ihren Server zugreifen zu können.
Als "Basis" empfehle ich es erstmal den Standard-Port von SSH von 22 auf einen beliebigen Port zu wechseln.
Achtung, folgende Ports werden von vielen Diensten benutzt:
- 21
- 23
- 25
- 53
- 80
- 143
- 443
- 465
- 587
- 3306
- 8080
Nachfolgend setzen wir SSH z.B. einfach mal auf "198".
Hierfür führst du folgenden Befehl aus:
nano /etc/ssh/sshd_config
Dir sollte "Port 22" sofort ins Auge stechen.
Die 22 auf 198 ändern und darauf achten, dass die Zeile nicht auskommentiert ist (es darf kein "#" davor stehen).
Einmal "STRG+X" drücken und mit "Y" bestätigen.
Anschließend SSH neustarten:
Du kannst jetzt versuchen dich über den Port 198 zu verbinden.
Hierfür kannst du die zuvor genutzten Paramter der Verknüpfung anpassen.
Wir gehen jetzt noch einen Schritt weiter und fügen eine zweite "Schicht" zur Absicherung hinzu.
Vielleicht kennst du das schon von deinem Mail-Provider oder Amazon - 2FA.
Schau dir dazu folgende Anleitung an:
https://ubuntu.com/tutorials/configure-ssh-2fa#1-overview
Kleiner Tipp - ich nutze Authy, damit meine 2FA Codes immer abgesichert sind.
Solltest du den Login mit Schlüsseln bevorzugen, schau dir mal diese Anleitung an:
https://www.server-world.info/…os=Ubuntu_20.04&p=ssh&f=4
Im übrigen - du kannst Dateien zwischen deinem Server und deinem Rechner ganz bequem mit "WinSCP" transferieren.
Damit hast du erstmal die Grundlagen zur Absicherung deines SSH Terminals erledigt.
Natürlich könnte man noch mehr Arbeit betreiben, aber das würde hier den Rahmen sprengen.
Als nächstes können wir tatsächlich damit anfangen dein "Stack" für deine Web-Anwendungen zu erstellen.
MariaDB
Beginnen wir mit dem SQL Server.
Hierfür nutzen wir MariaDB, du musst eigentlich nur die Anleitungen auf dieser Seite befolgen:
https://downloads.mariadb.org/…=host-europe&version=10.6
Anschließend führst du diesen Befehl aus:
mysql_secure_installation
Lies dir die folgenden Abfragen besonders aufmerksam durch!
Du willst keine "anonymen" User oder Testdatenbanken.
Ebenfalls willst du auf GAR KEINEN FALL, dass sich jemand außerhalb von "localhost" als root User auf deinem Datenbankserver anmeldet.
Nun fragst du dich vermutlich wie du auf deinen Datenbankserver zugreifen kannst.
Hierfür empfiehlt sich "HeidiSQL".
Du wählst für deine Verbindung "MariaDB or MySQL (SSH Tunnel)" aus.
Hinweis: HeidiSQL kann kein 2FA, eventuell müsstest du diesen temporär deaktivieren oder du gehst von Anfang an auf Keys.
Du kannst dort deine Benutzer und Datenbanken beliebig anlegen.
Achte nur darauf, dass du den Benutzern nur die entsprechenden Zugriffsrechte auf die Datenbanken gibst und NICHT globale Rechte.
NGINX
Als nächstes brauchen wir einen Webserver sowie Interpreter für unsere Anwendungen (ich gehe mal davon aus, dass du nur PHP brauchst).
Ich verwende hierfür NGINX.
Dieses kannst du über diese Repo beziehen:
http://nginx.org/en/linux_packages.html#Ubuntu
Idealerweise willst du die "stable" nutzen.
Alternativ kannst du mithilfe meines Anhangs immer die aktuellste Version von NGINX und OpenSSL
zusammen mit Google PageSpeed selbst compilen (etwas zu viel für den Einstieg).
PHP-FPM
Bei PHP-FPM handelt es sich um besagten Interpreter.
PHP Skripte werden nämlich zur Laufzeit compilet und sind somit "dynamisch".
Ruft jemand z.B. deine WordPress Seite auf gibt NGINX die Anfrage an PHP-FPM weiter.
Auch hierfür richten wir zunächst wieder eine Repo ein:
apt install software-properties-common
add-apt-repository ppa:ondrej/php
Je nachdem welche PHP-Version deine Anwendungen benötigen, musst du die nachfolgenden Befehle anpassen.
Nachfolgend die Installation von PHP 8.0 und 7.4:
apt install php7.4-fpm php7.4-mysql php7.4-xml php7.4-mbstring php7.4-curl php7.4-gd
apt install php8.0-fpm php8.0-mysql php8.0-xml php8.0-mbstring php8.0-curl php8.0-gd
Zwischenschritt
Um sicher zu gehen, dass alle unsere Dienste nach einem Reboot von alleine starten, führen wir jetzt folgende Befehle aus.
systemctl enable mysql
systemctl enable nginx
systemctl enable php7.4-fpm
systemctl enable php8.0-fpm
Grundsätzlich sollte das bei den meisten automatisch erfolgen, aber sicher ist sicher.
Wir starten jetzt auch einfach mal den Server mit folgendem Befehl neu und schauen, ob die Dienste wie gewünscht funktionieren: