Website-Suche

Ersteinrichtung des Servers mit Ubuntu 20.04/18.04 und 16.04


Dieses Tutorial führt Sie durch die ersten grundlegenden Schritte, die Sie zur Konfiguration auf einem neu installierten Ubuntu-Server benötigen, um die Sicherheit und Zuverlässigkeit Ihres Servers zu erhöhen.

Die in diesem Thema erläuterten Konfigurationen sind für alle Ubuntu-Serversysteme nahezu gleich, unabhängig von der zugrunde liegenden Betriebssystemplattform, unabhängig davon, ob Ubuntu auf einem Bare-Metal-Server, in einer privaten virtuellen Maschine oder einer virtuellen Maschine installiert ist Ausgelagert in einer öffentlichen VPS-Cloud.

Anforderungen

  • Ubuntu 20.04 Serverinstallation
  • Ubuntu 18.04 Serverinstallation
  • Ubuntu 16.04 Serverinstallation

Aktualisieren und aktualisieren Sie das Ubuntu-System

Der erste Schritt, den Sie im Falle einer Neuinstallation eines Ubuntu-Servers oder eines neu bereitgestellten Ubuntu VPS erledigen müssen, besteht darin, sicherzustellen, dass das System und alle Systemkomponenten, wie z Der Kernel, der apt-Paketmanager und alle anderen installierten Pakete sind mit den neuesten veröffentlichten Versionen und Sicherheitspatches auf dem neuesten Stand.

Um den Ubuntu-Server zu aktualisieren, melden Sie sich mit einem Konto mit Root-Rechten oder direkt als Root an der Serverkonsole an und führen Sie die folgenden Befehle aus, um den Update- und Upgrade-Vorgang durchzuführen.

sudo apt update 

Nachdem Sie den Update-Befehl ausgeführt haben, sehen Sie die Anzahl der verfügbaren Pakete für den Upgrade-Prozess und den Befehl, der zum Auflisten der Paket-Upgrades verwendet wird.

sudo apt list --upgradable

Nachdem Sie die Liste der für die Aktualisierung verfügbaren Pakete konsultiert haben, geben Sie den folgenden Befehl ein, um den Systemaktualisierungsprozess zu starten.

sudo apt upgrade

Um alle lokal heruntergeladenen Deb-Pakete und alle anderen apt-get-Caches zu entfernen, führen Sie den folgenden Befehl aus.

sudo apt autoremove
sudo apt clean

Erstellen Sie ein neues Konto in Ubuntu

Aus Sicherheitsgründen ist das Root-Konto in Ubuntu standardmäßig vollständig deaktiviert. Um ein neues Konto auf dem System zu erstellen, melden Sie sich mit dem Kontobenutzer mit Root-Rechten am System an und erstellen Sie mit dem folgenden Befehl ein neues Konto.

Diesem neuen Konto werden über den Befehl sudo Root-Berechtigungen gewährt und es wird zum Ausführen administrativer Aufgaben im System verwendet. Stellen Sie sicher, dass Sie ein sicheres Passwort einrichten, um dieses Konto zu schützen. Befolgen Sie die Eingabeaufforderung adduser, um die Benutzerdetails und das Passwort einzurichten.

sudo adduser ubuntu_user

Wenn dieses Konto einem anderen Systemadministrator zugewiesen wird, können Sie den Benutzer durch Eingabe des folgenden Befehls dazu zwingen, sein Passwort beim ersten Anmeldeversuch zu ändern.

sudo chage -d0 ubuntu_user

Derzeit kann der neu hinzugefügte Benutzer keine Verwaltungsaufgaben über das Dienstprogramm sudo ausführen. Um diesem neuen Benutzerkonto Administratorrechte zu gewähren, sollten Sie den Benutzer zur Systemgruppe „sudo“ hinzufügen, indem Sie den folgenden Befehl ausführen.

sudo usermod -a -G sudo ubuntu_user

Standardmäßig dürfen alle Benutzer, die zur Gruppe „sudo“ gehören, Befehle mit Root-Rechten über das Dienstprogramm sudo ausführen. Der Sudo-Befehl muss verwendet werden, bevor der zur Ausführung erforderliche Befehl geschrieben wird, wie im folgenden Beispiel gezeigt.

sudo apt install package_name

Testen Sie, ob der neue Benutzer über die Root-Berechtigungen verfügt, indem Sie sich beim System anmelden und den Befehl apt update mit dem Präfix sudo ausführen.

su - ubuntu_user
sudo apt update

Konfigurieren Sie den System-Hostnamen in Ubuntu

Normalerweise wird der Hostname der Maschine während des Systeminstallationsprozesses oder bei der Erstellung des VPS in der Cloud eingerichtet. Sie sollten jedoch den Namen Ihres Computers ändern, um das Ziel Ihres Servers besser widerzuspiegeln oder seinen endgültigen Zweck besser zu beschreiben.

In einem großen Unternehmen werden Maschinen nach komplexen Namensschemata benannt, um die Maschine in den Racks des Rechenzentrums leicht zu identifizieren. Wenn Ihre Ubuntu-Maschine beispielsweise einen Mailserver betreibt, sollte der Name der Maschine diese Tatsache widerspiegeln und Sie können den Hostnamen der Maschine beispielsweise als mx01.mydomain.lan einrichten.

Um Details zum Hostnamen Ihres Computers anzuzeigen, führen Sie den folgenden Befehl aus.

hostnamectl

Um den Namen Ihres Computers zu ändern, geben Sie den Befehl hostnamectl mit dem neuen Namen ein, den Sie für Ihren Computer konfigurieren, wie im folgenden Auszug dargestellt.

sudo hostnamectl set-hostname tecmint

Überprüfen Sie den neuen Namen Ihres Systems mit einem der folgenden Befehle.

hostname
hostname -s
cat /etc/hostname 

Richten Sie SSH mit Public-Key-Authentifizierung in Ubuntu ein

Um den Systemsicherheitsgrad eines Ubuntu-Servers zu erhöhen, sollten Sie die SSH-Authentifizierung mit öffentlichem Schlüssel für ein lokales Konto einrichten. Um ein SSH-Schlüsselpaar, den öffentlichen und privaten Schlüssel, mit Angabe einer Schlüssellänge, z. B. 2048 Bit, zu generieren, führen Sie den folgenden Befehl an Ihrer Serverkonsole aus.

Stellen Sie sicher, dass Sie mit dem Benutzer, für den Sie den SSH-Schlüssel einrichten, am System angemeldet sind.

su - ubuntu_user
ssh-keygen -t RSA -b 2048

Während der Schlüssel generiert wird, werden Sie aufgefordert, eine Passphrase hinzuzufügen, um den Schlüssel zu sichern. Sie können eine starke Passphrase eingeben oder die Passphrase leer lassen, wenn Sie Aufgaben über den SSH-Server automatisieren möchten.

Nachdem der SSH-Schlüssel generiert wurde, können Sie den öffentlichen Schlüssel auf einen Remote-Server kopieren, indem Sie den folgenden Befehl ausführen. Um den öffentlichen Schlüssel auf dem Remote-SSH-Server zu installieren, benötigen Sie ein Remote-Benutzerkonto mit den richtigen Berechtigungen und Anmeldeinformationen, um sich beim Remote-Server anzumelden.

ssh-copy-id remote_user@remote_server

Sie sollten in der Lage sein, sich automatisch über SSH beim Remote-Server anzumelden, indem Sie die Authentifizierungsmethode mit öffentlichem Schlüssel verwenden. Sie müssen das Remote-Benutzerkennwort nicht hinzufügen, wenn Sie die SSH-Authentifizierung mit öffentlichem Schlüssel verwenden.

Nachdem Sie sich beim Remote-Server angemeldet haben, können Sie mit der Ausführung von Befehlen beginnen, z. B. dem w-Befehl, um per SSH-Remote angemeldete Benutzer aufzulisten, wie im folgenden Screenshot gezeigt.

Geben Sie in der Konsole „exit“ ein, um die Remote-SSH-Sitzung zu schließen.

ssh remote_user@remote_server
w
exit

Um den Inhalt Ihres öffentlichen SSH-Schlüssels anzuzeigen und den Schlüssel manuell auf einem Remote-SSH-Server zu installieren, geben Sie den folgenden Befehl ein.

cat ~/.ssh/id_rsa.pub

Sicherer SSH-Server in Ubuntu

Um den SSH-Daemon zu sichern, sollten Sie die Standard-SSH-Portnummer von 22 auf einen zufälligen Port, höher als 1024, ändern und den Remote-SSH-Zugriff auf das Root-Konto über verbieten Geben Sie ein Kennwort oder einen Schlüssel ein, indem Sie die Hauptkonfigurationsdatei des SSH-Servers öffnen und die folgenden Änderungen vornehmen.

sudo vi /etc/ssh/sshd_config

Suchen Sie zunächst die kommentierte Zeile #Port22 und fügen Sie darunter eine neue Zeile hinzu (ersetzen Sie die Nummer des Überwachungsports entsprechend):

Port 2345

Schließen Sie die Datei nicht, scrollen Sie nach unten und suchen Sie nach der Zeile #PermitRootLogin ja, kommentieren Sie die Zeile aus, indem Sie das #-Zeichen (Hashtag) vom Anfang der Zeile entfernen und Ändern Sie die Zeile so, dass sie wie im folgenden Auszug aussieht.

PermitRootLogin no

Anschließend starten Sie den SSH-Server neu, um die neuen Einstellungen zu übernehmen und testen die Konfiguration, indem Sie versuchen, sich von einem Remote-Rechner aus bei diesem Server mit dem Root-Konto über die neue Portnummer anzumelden. Der Zugriff auf das Root-Konto über SSH sollte eingeschränkt werden.

sudo systemctl restart sshd

Führen Sie außerdem netstat oder den ss-Befehl aus und filtern Sie die Ausgabe über den grep-Befehl, um die neue Überwachungsportnummer für den SSH-Server anzuzeigen.

sudo ss -tlpn| grep ssh
sudo netstat -tlpn| grep ssh

Es gibt Situationen, in denen Sie nach einer Zeit der Inaktivität möglicherweise alle zu Ihrem Server eingerichteten Remote-SSH-Verbindungen automatisch trennen möchten.

Um diese Funktion zu aktivieren, führen Sie den folgenden Befehl aus, der die Bash-Variable TMOUT zur versteckten Datei .bashrc Ihres Kontos hinzufügt und jede hergestellte SSH-Verbindung mit dem Namen des Kontos erzwingt Benutzer wird nach 5 Minuten Inaktivität getrennt oder ausgeschieden.

echo 'TMOUT=300' >> .bashrc

Führen Sie den Befehl tail aus, um zu überprüfen, ob die Variable korrekt am Ende der Datei .bashrc hinzugefügt wurde. Alle nachfolgenden SSH-Verbindungen werden von nun an nach 5 Minuten Inaktivität automatisch geschlossen.

tail .bashrc

Im folgenden Screenshot ist die Remote-SSH-Sitzung vom Drupal-Rechner zum Ubuntu-Server über das ubuntu_user-Konto abgelaufen und die automatische Abmeldung erfolgt nach 5 Minuten.

Konfigurieren Sie die Ubuntu-Firewall UFW

Jeder Server benötigt eine gut konfigurierte Firewall, um das System auf Netzwerkebene abzusichern. Der Ubuntu-Server verwendet die UFW-Anwendung, um die iptables-Regeln auf dem Server zu verwalten.

Überprüfen Sie den Status der UFW-Firewallanwendung in Ubuntu, indem Sie die folgenden Befehle ausführen.

sudo systemctl status ufw
sudo ufw status

Normalerweise ist der UFW-Firewall-Daemon auf dem Ubuntu-Server aktiv, die Regeln werden jedoch nicht standardmäßig angewendet. Bevor Sie die UFW-Firewall-Richtlinie in Ihrem System aktivieren, sollten Sie zunächst eine neue Regel hinzufügen, um den SSH-Verkehr durch die Firewall über den geänderten SSH-Port zuzulassen. Die Regel kann durch Ausführen des folgenden Befehls hinzugefügt werden.

sudo ufw allow 2345/tcp

Nachdem Sie den SSH-Verkehr zugelassen haben, können Sie die UFW-Firewallanwendung mit den folgenden Befehlen aktivieren und überprüfen.

sudo ufw enable
sudo ufw status

Um neue Firewall-Regeln für andere Netzwerkdienste hinzuzufügen, die später auf Ihrem Server installiert werden, z. B. einen HTTP-Server, einen Mailserver oder andere Netzwerkdienste, verwenden Sie die folgenden Beispiele für Firewall-Befehle als Leitfaden.

sudo ufw allow http  #allow http traffic
sudo ufw allow proto tcp from any to any port 25,443  # allow https and smtp traffic

Um alle Firewall-Regeln aufzulisten, führen Sie den folgenden Befehl aus.

sudo ufw status verbose

Stellen Sie die Ubuntu-Serverzeit ein

Um die Uhr des Ubuntu-Servers und andere zugehörige Zeiteinstellungen zu steuern oder abzufragen, führen Sie den Befehl timedatectl ohne Argument aus.

Um die Zeitzoneneinstellungen Ihres Servers zu ändern, führen Sie zunächst den Befehl timedatectl mit dem Argument list-timezones aus, um alle verfügbaren Zeitzonen aufzulisten, und stellen Sie dann die Zeitzone Ihres Systems ein, wie im folgenden Auszug gezeigt.

sudo timedatectl 
sudo timedatectl list-timezones 
sudo timedatectl set-timezone Europe/Vienna

Der neue Systemd-Daemon-Client systemd-timesyncd kann in Ubuntu verwendet werden, um eine genaue Zeit für Ihren Server im gesamten Netzwerk bereitzustellen und die Zeit mit einem übergeordneten Peer-Server zu synchronisieren.

Um diese neue Funktion von Systemd anzuwenden, ändern Sie die Daemon-Konfigurationsdatei systemd-timesyncd und fügen Sie die geografisch nächstgelegenen NTP-Server zur NTP-Anweisungszeile hinzu, wie im folgenden Dateiauszug gezeigt:

sudo nano /etc/systemd/timesyncd.conf

Fügen Sie der Datei timesyncd.conf die folgende Konfiguration hinzu:

[Time]
NTP=0.pool.ntp.org 1.pool.ntp.org
FallbackNTP=ntp.ubuntu.com

Um die geografisch nächstgelegenen NTP-Server hinzuzufügen, konsultieren Sie die NTP-Pool-Projektserverliste unter der folgenden Adresse: http://www.pool.ntp.org/en/

Starten Sie anschließend den Systemd-Timesync-Daemon neu, um die Änderungen zu übernehmen, und überprüfen Sie den Daemon-Status, indem Sie die folgenden Befehle ausführen. Nach dem Neustart beginnt der Daemon mit der Synchronisierung der Zeit mit dem neuen NTP-Server-Peer.

sudo systemctl restart systemd-timesyncd.service 
sudo systemctl status systemd-timesyncd.service

Deaktivieren und entfernen Sie nicht benötigte Dienste in Ubuntu

Um eine Liste aller TCP- und UDP-Netzwerkdienste zu erhalten, die standardmäßig auf Ihrem Ubuntu-Server ausgeführt werden, führen Sie den Befehl ss oder netstat aus.

sudo netstat -tulpn
OR
sudo ss -tulpn

Ab der Version Ubuntu 16.10 wird der Standard-DNS-Resolver nun durch den Dienst systemd-resolved gesteuert, wie aus der Ausgabe von netstat oder SS-Befehle.

Sie sollten auch den Dienststatus systemd-resolved überprüfen, indem Sie den folgenden Befehl ausführen.

sudo systemctl status systemd-resolved.service

Der systemd-resolved-Dienst bindet an alle aktivierten Netzwerkschnittstellen und überwacht die Ports 53 und 5355 TCP sowie UDP.

Das Ausführen eines systemaufgelösten Caching-DNS-Daemons auf einem Produktionsserver kann aufgrund der zahlreichen DDOS-Angriffe, die von böswilligen Hackern gegen ungesicherte DNS-Server durchgeführt werden, gefährlich sein.

Um diesen Dienst zu stoppen und zu deaktivieren, führen Sie die folgenden Befehle aus.

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved

Überprüfen Sie, ob der Dienst gestoppt und deaktiviert wurde, indem Sie den Befehl ss oder netstat ausgeben. Die vom Systemd aufgelösten Überwachungsports 53 und 5355 TCP und UDP sollten nicht in der Netstat- oder SS-Befehlsausgabe aufgeführt werden, wie unten dargestellt.

Sie sollten die Maschine auch neu starten, um alle vom Systemd aufgelösten Daemon-Dienste vollständig zu deaktivieren und die Standarddatei /etc/resolv.conf wiederherzustellen.

sudo ss -tulpn
sudo netstat -tulpn
sudo systemctl reboot

Obwohl Sie die Ausführung einiger unerwünschter Netzwerkdienste auf Ihrem Server deaktiviert haben, sind auf Ihrem System auch andere Dienste installiert und ausgeführt, z. B. der lxc-Prozess und der snapd-Dienst. Diese Dienste können leicht über die Befehle ps, top oder pstree erkannt werden.

sudo ps aux
sudo top
sudo pstree

Falls Sie die LXC-Containervirtualisierung auf Ihrem Server nicht verwenden oder nicht mit der Installation von über den Snap-Paketmanager gepackter Software beginnen möchten, sollten Sie diese Dienste vollständig deaktivieren und entfernen, indem Sie die folgenden Befehle ausführen.

sudo apt autoremove --purge lxc-common lxcfs
sudo apt autoremove --purge snapd

Das ist alles! Jetzt ist der Ubuntu-Server für die Installation zusätzlicher Software vorbereitet, die für benutzerdefinierte Netzwerkdienste oder -anwendungen benötigt wird, beispielsweise für die Installation und Konfiguration eines Webservers, eines Datenbankservers, eines Dateifreigabedienstes oder anderer spezifischer Anwendungen.