GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Die 50 besten Sicherheitstipps zur Linux-Härtung:Eine umfassende Checkliste

Linux betreibt den Großteil des Internets und eine beträchtliche Anzahl von Workstations auf der ganzen Welt. Einer der Hauptgründe für die ständig wachsende Popularität von Linux- und BSD-Systemen ist ihre grundsolide Sicherheitspolitik. Linux-Systeme sind aufgrund ihrer zugrunde liegenden Designprinzipien von Natur aus schwer zu knacken. Allerdings ist kein System unzerbrechlich, und wenn Sie Ihre Workstation oder Ihren Linux-Server nicht auf dem neuesten Stand halten, werden Sie wahrscheinlich Opfer verschiedener Arten von Angriffen und/oder Datenschutzverletzungen. Aus diesem Grund haben wir 50 Linux-Härtungstipps zusammengestellt, mit denen Sie Ihre Serversicherheit auf die nächste Stufe heben können.

Sicherheitstipps zur Linux-Härtung für Profis

Sicherheit ist zu einem integralen Bestandteil der Computerwelt geworden. Daher ist die Härtung Ihrer persönlichen Workstation sowie der Serversicherheit ein Muss. Lesen Sie also weiter und integrieren Sie die folgenden Tipps so weit wie möglich, um die Sicherheit Ihres Linux-Rechners zu erhöhen.

1. Host-Informationen dokumentieren

Die Dokumentation der Gastgeberinformationen kann auf lange Sicht äußerst vorteilhaft sein. Wenn Sie beabsichtigen, dasselbe System im Laufe der Zeit beizubehalten, werden die Dinge wahrscheinlich irgendwann chaotisch. Wenn Sie jedoch Ihre Workstation oder Ihren Server direkt ab dem Tag der Installation dokumentieren, haben Sie eine solide Vorstellung von der gesamten Systeminfrastruktur und den angewandten Richtlinien.

Nehmen Sie die folgenden Informationen über das System in Ihre Dokumentation auf. Fühlen Sie sich frei, einige Extras basierend auf Ihren Serveranforderungen hinzuzufügen.

  • Systemname
  • Installationsdatum
  • Asset-Nummer (Werte, die Hosts in Geschäftsumgebungen markieren)
  • IP-Adresse
  • MAC-Adresse
  • Kernel-Version
  • Name des Administrators

2. BIOS sichern und Booten über USB deaktivieren

Sie sollten Ihr BIOS mit einem geeigneten Passwort sichern, damit andere Benutzer nicht auf die Einstellungen zugreifen oder diese ändern können. Da der Zugriff auf das BIOS-Menü in modernen Mainboards ziemlich einfach ist, können Endbenutzer vorhandene Einstellungen überschreiben und sensible Konfigurationen manipulieren.

Darüber hinaus können Benutzer auch bootfähige Systeme verwenden, um auf Ihre Hostdaten zuzugreifen. Dies könnte auch die Integrität Ihres Servers gefährden. Sie können USB-Geräte mit dem folgenden Befehl vollständig deaktivieren.

# echo 'install usb-storage /bin/true' >> /etc/modprobe.d/disable-usb-storage.conf

Das USB-Booten kann auch im BIOS-Menü deaktiviert werden. Dies ist jedoch nicht zwingend erforderlich, wenn Sie eine persönliche Workstation betreiben, auf die andere Benutzer nicht zugreifen können.

- -

3. Festplattenspeicher verschlüsseln

Die Verschlüsselung Ihres Festplattenspeichers kann sich langfristig als sehr vorteilhaft erweisen. Es verhindert Datenlecks im Falle eines Diebstahls oder eines Eindringens Dritter. Glücklicherweise gibt es eine Vielzahl von Linux-Verschlüsselungstools, die dies für Administratoren problemlos machen.

Darüber hinaus bieten moderne Linux-Distributionen Administratoren an, ihr Linux-Dateisystem während des Installationsprozesses zu verschlüsseln. Sie sollten jedoch wissen, dass die Verschlüsselung den Leistungsdurchsatz beeinträchtigen und die Datenwiederherstellung wahrscheinlich erschweren wird.

4. Datenkommunikation verschlüsseln

Da Daten, die über das Netzwerk übertragen werden, mit Open-Source-Sicherheitstools einfach erfasst und analysiert werden können, sollte die Datenverschlüsselung während des Linux-Härtungsprozesses Ihre oberste Priorität sein. Viele ältere Datenkommunikationstools verwenden keine ordnungsgemäße Verschlüsselung und können daher Ihre Daten anfällig machen.

Für die Datenübertragung per Fernzugriff sollten Sie immer sichere Kommunikationsdienste wie ssh, scp, rsync oder sftp verwenden. Linux ermöglicht es Benutzern auch, entfernte Dateisysteme mit speziellen Tools wie fuse oder sshfs zu mounten. Versuchen Sie, Ihre Daten mit GPG-Verschlüsselung zu verschlüsseln und zu signieren. Andere Linux-Tools, die Datenverschlüsselungsdienste anbieten, sind OpenVPN, Lighthttpd SSL, Apache SSL und Let’s Encrypt.

5. Vermeiden Sie veraltete Kommunikationsdienste

Viele ältere Unix-Programme bieten keine wesentliche Sicherheit bei der Datenübertragung. Dazu gehören FTP, Telnet, rlogin und rsh. Ganz gleich, ob Sie Ihren Linux-Server oder Ihr persönliches System sichern, stellen Sie die Nutzung dieser Dienste für immer ein.

Sie können andere Alternativen für diese Art von Datenübertragungsaufgaben verwenden. Beispielsweise stellen Dienste wie OpenSSH, SFTP oder FTPS sicher, dass die Datenübertragung über einen sicheren Kanal erfolgt. Einige von ihnen verwenden SSL- oder TLS-Verschlüsselungen, um Ihre Datenkommunikation abzusichern. Sie können die folgenden Befehle verwenden, um alte Dienste wie NIS, Telnet und rsh von Ihrem System zu entfernen.

# yum erase xinetd ypserv tftp-server telnet-server rsh-server
# apt-get --purge remove xinetd nis yp-tools tftpd atftpd tftpd-hpa telnetd rsh-server rsh-redone-server

Verwenden Sie den ersten Befehl für RPM-basierte Distributionen wie RHEL und Centos oder jedes System, das den Yum-Paketmanager verwendet. Der zweite Befehl funktioniert auf Debian/Ubuntu-basierten Systemen.

6. Kernel und Pakete auf dem neuesten Stand halten

Um die Sicherheit Ihres Servers aufrechtzuerhalten, sollten Sie immer die neuesten Sicherheitsupdates so schnell wie möglich installieren. Dies kann die Angriffsfläche verringern, falls Schwachstellen in älteren Paketen oder Kernelmodulen entdeckt werden. Glücklicherweise ist die Aktualisierung des Systems sehr einfach und kann relativ schnell durchgeführt werden.

# yum update
# apt-get update && apt-get upgrade

Verwenden Sie den Befehl yum, um Ihre RHEL/Centos-Systeme zu aktualisieren, und den Befehl apt für Ubuntu/Debian-basierte Distributionen. Zusätzlich] können Sie diesen Prozess automatisieren, indem Sie den Linux-Cron-Job verwenden. Besuchen Sie unseren Leitfaden zu Linux crontab, um mehr über Cron-Jobs zu erfahren.

7. Aktivieren Sie SELinux

SELinux oder Security Enhanced Linux ist ein Sicherheitsmechanismus, der verschiedene Methoden zur Zugriffskontrolle auf Kernel-Ebene implementiert. SELinux wird von Red Hat entwickelt und vielen modernen Linux-Distributionen hinzugefügt. Sie können es sich als eine Reihe von Kernel-Modifikationen und User-Space-Tools vorstellen. Mit dem folgenden Befehl können Sie überprüfen, ob SELinux in Ihrem System aktiviert ist oder nicht.

# getenforce

Wenn es erzwingend zurückkehrt, bedeutet dies, dass Ihr System durch SELinux geschützt ist. Wenn das Ergebnis permissiv lautet, bedeutet dies, dass Ihr System SELinux hat, aber es wird nicht erzwungen. Für Systeme, auf denen SELinux vollständig deaktiviert ist, wird es deaktiviert zurückgegeben. Sie können SELinux erzwingen, indem Sie den folgenden Befehl verwenden.

# setenforce 1

8. Systempakete minimieren

Das Minimieren von Systempaketen kann die Gesamtsicherheit Ihres Systems erheblich erhöhen. Da Softwarefehler eines der Haupthindernisse für die Sicherheit sind, bedeutet eine geringere Anzahl von Paketen, dass die Angriffsfläche kleiner wird. Darüber hinaus erzielen Server in der Regel einen erheblichen Leistungsschub, wenn sie frei von unnötiger Bloatware sind.

# yum list installed
# yum list <package>
# yum remove <package>

Sie können die obigen yum-Befehle in Linux verwenden, um installierte Software in Ihrem System aufzulisten und diejenigen zu entfernen, die Sie eigentlich nicht benötigen. Verwenden Sie die folgenden Befehle, wenn Sie ein Debian/Ubuntu-basiertes System ausführen.

# dpkg --list
# dpkg --info <package>
# apt-get remove <package>

9. Aufgeteilte Netzwerkdienste

Wenn Sie herkömmliche monolithische Netzwerkdienste auf Ihrem Server verwenden, erhält ein Angreifer Zugriff auf Ihre gesamte Infrastruktur, sobald er einen einzigen Dienst ausnutzt. Angenommen, Sie betreiben einen LAMP-Stack. Was passiert, wenn ein Angreifer einen Fehler im Apache-Dienst ausnutzt? Er wird schließlich andere Dienste eskalieren und wahrscheinlich die volle Systemkontrolle erlangen.

Wenn Sie jedoch Ihre Netzwerkdienste aufteilen und ein Netzwerk pro Dienst verwenden, wird der Angriff weniger erfolgreich sein. Dies liegt daran, dass der Eindringling jedes Netzwerk ausnutzen muss, bevor er vollen Systemzugriff erlangen kann. Sie können die folgenden Schritte ausführen, um eine herkömmliche LAMP-Stack-Konfiguration aufzuteilen.

  • Konfigurieren Sie einen NFS-Dateiserver
  • Konfigurieren Sie einen MySQL-Datenbankserver
  • Konfigurieren Sie einen Memcached-Caching-Server
  • Konfigurieren Sie einen Apache+php5-Webserver
  • Konfigurieren Sie einen Lighttpd-Server für statische Daten
  • Konfigurieren Sie einen Nginx-Server für den Reverse-Proxy

10. Pflege von Benutzerkonten und Passwortrichtlinien

Unix-Systeme haben normalerweise mehr als ein Benutzerkonto. Ihr System ist so sicher wie die Benutzer, die es ausführen. Stellen Sie also sicher, dass nur vertrauenswürdige Personen ein bestimmtes System ausführen können. Sie können das useradd verwenden /Benutzermod Befehle zum Hinzufügen und Verwalten neuer Benutzerkonten auf Ihrem Computer.

Setzen Sie immer starke Kennwortrichtlinien durch. Ein sicheres Passwort sollte mehr als acht Zeichen lang und mindestens eine Kombination aus Buchstaben, Zahlen und Sonderzeichen sein. Benutzer sollten sich jedoch ihre Passwörter merken können. Stellen Sie außerdem sicher, dass Ihr Passwort nicht anfällig für Wörterbuchangriffe ist. Sie können das Linux-PAM-Modul namens pam_cracklib.so verwenden dafür.

11. Ablaufdaten für Passwörter festlegen

Eine weitere gängige Linux-Härtungsmethode besteht darin, den Kennwortablauf für alle Benutzerkonten zu aktivieren. Sie können ganz einfach Ablaufdaten für Benutzerpasswörter festlegen, indem Sie die Änderung verwenden Befehl unter Linux. Ihr System fordert die Benutzer auf, ein neues Passwort festzulegen, sobald ihr vorhandenes einmal abläuft.

# chage -l mary
# chage -M 30 mary
# chage -E "2020-04-30"

Der erste Befehl listet das aktuelle Ablaufdatum des Kennworts für den Benutzer mary auf. Der zweite Befehl legt das Ablaufdatum nach 30 Tagen fest. Sie können dieses Datum auch im Format JJJJ-MM-TT festlegen, indem Sie den dritten Befehl verwenden.

12. Erzwingen Sie das Linux-PAM-Modul

Sie können die Passwortstärke erhöhen, indem Sie sicherstellen, dass Benutzer keine schwachen Passwörter festlegen oder verwenden können. Passwort-Cracker können sie leicht brutal erzwingen und sich unbefugten Zugriff verschaffen. Beschränken Sie außerdem die Wiederverwendung von Passwörtern, indem Sie die folgende Zeile an Ubuntu/Debian bzw. RHEL/Centos anhängen.

# echo 'password sufficient pam_unix.so use_authtok md5 shadow remember=12' >> /etc/pam.d/common-password
# echo 'password sufficient pam_unix.so use_authtok md5 shadow remember=12' >> /etc/pam.d/system-auth

Jetzt können Ihre Benutzer keine Passwörter wiederverwenden, die in den letzten 12 Wochen verwendet wurden. Verwenden Sie außerdem die folgenden Tipps, um schwache Passphrasen vollständig zu verbieten.

# apt-get install libpam-cracklib       # install cracklib support on Ubuntu/Debian

Fügen Sie die Zeile –

an
# echo 'password required pam_cracklib.so retry=2 minlen=10 difok=6' >> /etc/pam.d/system-auth

Sie müssen cracklib nicht in RHEL/Centos installieren. Fügen Sie einfach die folgende Zeile an.

# echo 'password required /lib/security/pam_cracklib.so retry=2 minlen=10 difok=6' >> /etc/pam.d/system-auth

13. Anmeldeversuche nach Fehlschlag sperren

Administratoren sollten sicherstellen, dass sich Benutzer nach einer bestimmten Anzahl fehlgeschlagener Versuche nicht mehr bei ihrem Server anmelden können. Dies erhöht die Gesamtsicherheit des Systems, indem Kennwortangriffe abgeschwächt werden. Sie können den Linux-Faillog-Befehl verwenden, um die fehlgeschlagenen Anmeldeversuche anzuzeigen.

# faillog
# faillog -m 3
# faillog -l 1800

Der erste Befehl zeigt die fehlgeschlagenen Anmeldeversuche für Benutzer aus der /var/log/faillog-Datenbank an. Der zweite Befehl setzt die maximale Anzahl zulässiger fehlgeschlagener Anmeldeversuche auf 3. Der dritte setzt eine Sperre von 1800 Sekunden oder 30 Minuten nach der zulässigen Anzahl fehlgeschlagener Anmeldeversuche.

# faillog -r -u <username>

Verwenden Sie diesen Befehl, um einen Benutzer zu entsperren, sobald er sich nicht mehr anmelden kann. Die maximale Anzahl fehlgeschlagener Anmeldeversuche für den Root-Benutzer sollte hoch sein, sonst können Brute-Force-Angriffe dazu führen, dass Sie gesperrt bleiben.

14. Auf leere Passwörter prüfen

Benutzer sind das schwächste Glied in der Gesamtsicherheit eines Systems. Administratoren müssen sicherstellen, dass kein Benutzer auf dem System leere Passphrasen hat. Dies ist ein obligatorischer Schritt für eine ordnungsgemäße Linux-Härtung. Verwenden Sie den folgenden awk-Befehl unter Linux, um dies zu überprüfen.

# awk -F: '($2 == "") {print}' /etc/shadow

Es wird angezeigt, ob es auf Ihrem Server Benutzerkonten gibt, die ein leeres Passwort haben. Um die Linux-Serverhärtung zu erhöhen, sperren Sie alle Benutzer, die leere Passphrasen verwenden. Sie können den folgenden Befehl verwenden, um dies von Ihrem Linux-Terminal aus zu tun.

# passwd -l <username>

15. Anmeldung als Superuser deaktivieren

Administratoren sollten sich nicht häufig als Root anmelden, um die Serversicherheit aufrechtzuerhalten. Stattdessen können Sie sudo verwenden, um Linux-Terminalbefehle auszuführen, die niedrige Berechtigungen erfordern. Der folgende Befehl zeigt, wie Sie einen neuen Benutzer mit sudo-Berechtigungen erstellen.

# adduser <username> sudo

Sie können auch vorhandenen Benutzern sudo-Berechtigungen erteilen, indem Sie den folgenden Befehl verwenden.

# usermod -a -G sudo <username>

16. E-Mail-Benachrichtigungen für sudo-Benutzer festlegen

Sie können E-Mail-Benachrichtigungen so einstellen, dass der Serveradministrator immer dann per E-Mail benachrichtigt wird, wenn ein Benutzer sudo verwendet. Bearbeiten Sie die Datei /etc/sudoers und fügen Sie die folgenden Zeilen mit Ihrem bevorzugten Linux-Texteditor hinzu.

# nano /etc/sudoers
mailto "[email protected]"
mail_always on

Ersetzen Sie die E-Mail durch Ihre eigene E-Mail oder die des Prüfungspersonals. Jetzt werden Sie jedes Mal informiert, wenn jemand eine Aufgabe auf Systemebene ausführt.

17. Sicherer GRUB-Bootloader

Heutzutage sind mehrere Linux-Bootloader verfügbar. GRUB bleibt jedoch aufgrund seines vielfältigen Funktionsumfangs die erste Wahl für die meisten Administratoren. Darüber hinaus ist es der Standard-Bootloader in vielen modernen Linux-Distributionen. Administratoren, die ihre Schritte zur Linux-Härtung ernst nehmen, sollten ein sicheres Passwort für ihr GRUB-Menü festlegen.

# grub-md5-crypt

Geben Sie dies an Ihrem Terminal ein und Grub wird Sie nach dem Passwort fragen. Geben Sie das Passwort ein, das Sie festlegen möchten, und es wird ein verschlüsselter Hash mit Ihrem Passwort generiert. Jetzt müssen Sie diesen Hash in Ihr Grub-Konfigurationsmenü einfügen.

# nano /boot/grub/menu.lst
or
# nano /boot/grub/grub.conf

Fügen Sie den berechneten Hash hinzu, indem Sie die folgende Zeile zwischen den Zeilen einfügen, die das Timeout und das Startbild festlegen.

password –md5 <calculated-hash>

18. Überprüfen Sie die UID von Nicht-Root-Benutzern

Eine UID oder User-ID ist eine nicht negative Zahl, die den Benutzern eines Systems vom Kernel zugewiesen wird. Die UID 0 ist die UID des Superusers oder Roots. Es ist wichtig sicherzustellen, dass kein anderer Benutzer als root diesen UID-Wert hat. Andernfalls können sie das gesamte System als root ausgeben.

# awk -F: '($3 == "0") {print}' /etc/passwd

Sie können herausfinden, welche Benutzer diesen UID-Wert haben, indem Sie dieses awk-Programm ausführen. Die Ausgabe sollte nur einen einzigen Eintrag enthalten, der root entspricht.

19. Unnötige Dienste deaktivieren

Viele Dienste und Daemons werden während des Systemstarts gestartet. Das Deaktivieren der nicht obligatorischen Elemente kann bei der Linux-Härtung helfen und die Startzeit verbessern. Da die meisten modernen Distributionen systemd anstelle von Init-Skripten verwenden, können Sie systemctl verwenden, um diese Dienste zu finden.

# systemctl list-unit-files --type=service
# systemctl list-dependencies graphical.target

Diese Befehle zeigen solche Dienste und Daemons an. Sie können einen bestimmten Dienst mit dem folgenden Befehl deaktivieren.

# systemctl disable service
# systemctl disable httpd.service

20. Entfernen Sie die X Window-Systeme (x11)

Das X Window Systems oder x11 ist die de-facto grafische Oberfläche für Linux-Systeme. Wenn Sie Linux zum Betreiben Ihres Servers anstelle Ihres persönlichen Systems verwenden, können Sie dies vollständig löschen. Es hilft, die Sicherheit Ihres Servers zu erhöhen, indem viele unnötige Pakete entfernt werden.

# yum groupremove "X Window System"

Dieser yum-Befehl löscht x11 von RHEL- oder Centos-Systemen. Wenn Sie stattdessen Debian/Ubuntu verwenden, verwenden Sie den folgenden Befehl.

# apt-get remove xserver-xorg-core

21. Deaktivieren Sie die X Window-Systeme (x11)

Wenn Sie x11 nicht dauerhaft löschen möchten, können Sie stattdessen diesen Dienst deaktivieren. Auf diese Weise bootet Ihr System im Textmodus anstelle der GUI. Bearbeiten Sie die Datei /etc/default/grub mit Ihrem bevorzugten Linux-Texteditor.

# nano /etc/default/grub

Suchen Sie die folgende Zeile –

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

Ändern Sie es jetzt in –

GRUB_CMDLINE_LINUX_DEFAULT="text"

Aktualisieren Sie abschließend die GRUB-Datei mit –

# update-grub

Der letzte Schritt besteht darin, systemd anzuweisen, das GUI-System nicht zu laden. Sie können dies tun, indem Sie die folgenden Befehle ausführen.

# systemctl enable multi-user.target --force
# systemctl set-default multi-user.target

22. Listening-Ports überprüfen

Netzwerkangriffe auf Server sind sehr häufig. Wenn Sie einen sicheren Server unterhalten möchten, sollten Sie die lauschenden Netzwerkports von Zeit zu Zeit validieren. Dadurch erhalten Sie wichtige Informationen über Ihr Netzwerk.

# netstat -tulpn
# ss -tulpn
# nmap -sT -O localhost
# nmap -sT -O server.example.com

Sie können jeden der obigen Befehle verwenden, um zu sehen, welche Ports auf eingehende Anfragen warten. Wir haben eine frühere Anleitung, die eine detaillierte Diskussion der wesentlichen nmap-Befehle in Linux enthält.

23. IP-Adressen untersuchen

Wenn Sie eine verdächtige IP-Adresse in Ihrem Netzwerk finden, können Sie sie mit Standard-Linux-Befehlen untersuchen. Der folgende Befehl verwendet netstat und awk, um eine Zusammenfassung der laufenden Protokolle anzuzeigen.

# netstat -nat | awk '{print $6}' | sort | uniq -c | sort -n

Verwenden Sie den folgenden Befehl, um weitere Informationen zu einer bestimmten IP zu finden.

# netstat -nat |grep <IP_ADDR> | awk '{print $6}' | sort | uniq -c | sort -n

Verwenden Sie den folgenden Befehl, um alle eindeutigen IP-Adressen anzuzeigen.

# netstat -nat | awk '{ print $5}' | cut -d: -f1 | sed -e '/^$/d' | uniq

Geben Sie den obigen Befehl an wc ein, um die Gesamtzahl der eindeutigen IP-Adressen zu erhalten.

# netstat -nat | awk '{ print $5}' | cut -d: -f1 | sed -e '/^$/d' | uniq | wc -l

Besuchen Sie unseren Leitfaden zu verschiedenen Linux-Netzwerkbefehlen, wenn Sie tiefer in die Netzwerksicherheit eintauchen möchten.

24. Konfigurieren Sie IPtables und Firewalls

Linux bietet hervorragenden integrierten Schutz vor unerwünschten Netzwerkanfragen in Form von iptables. Es ist eine Schnittstelle zum Netfilter-Mechanismus, der vom Linux-Kernel bereitgestellt wird. Mit iptables können Sie ganz einfach bestimmte IP-Adressen oder einen Bereich davon blockieren.

# iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

Sie können den obigen Befehl verwenden, um alle Netzwerkanfragen für eine bestimmte IP-Adresse zu blockieren. Weitere Informationen zu diesem Tool finden Sie in unserem Handbuch zu Linux iptables. Sie können auch andere leistungsstarke Firewalls installieren und verwenden.

25. Kernel-Parameter konfigurieren

Der Linux-Kernel hat viele Laufzeitparameter. Sie können einige von ihnen leicht optimieren, um die Linux-Härtung zu verbessern. Mit dem Befehl sysctl können Administratoren diese Kernelparameter konfigurieren. Sie können auch die Datei /etc/sysctl.conf ändern, um den Kernel zu optimieren und die Sicherheit zu erhöhen.

Fügen Sie beispielsweise die folgende Zeile am Ende Ihrer sysctl-Konfiguration hinzu, um Systemneustarts nach 10 Sekunden einer Kernel-Panik zu ermöglichen.

# vim /etc/sysctl.conf
kernel.panic=10

Fügen Sie die folgende Zeile hinzu, um die Adressen für mmap-Basis-, Heap-, Stack- und VDSO-Seiten zu randomisieren.

kernel.randomize_va_space=2

Die nächste Zeile veranlasst den Kernel, ICMP-Fehler zu ignorieren.

net.ipv4.icmp_ignore_bogus_error_responses=1

Sie können Unmengen solcher Regeln hinzufügen und sie an Ihre Kernel-Anforderungen anpassen.

26. SUID- und SGID-Berechtigung deaktivieren

SUID und SGID sind spezielle Arten von Dateiberechtigungen im Linux-Dateisystem. Mit der SUID-Berechtigung können andere Benutzer ausführbare Dateien ausführen, als wären sie der Eigentümer dieser Dateien. Ebenso gewährt die SGID-Berechtigung Verzeichnisrechte ähnlich denen des Eigentümers, gibt aber auch das Eigentum an allen untergeordneten Dateien in einem Verzeichnis.

Diese sind schlecht, da Sie nicht möchten, dass andere Benutzer als Sie diese Berechtigungen auf einem sicheren Server haben. Sie sollten jede Datei finden, in der SUID und SGID aktiviert sind, und diese deaktivieren. Die folgenden Befehle listen jeweils alle Dateien auf, für die die SUID- und SGID-Berechtigung aktiviert ist.

# find / -perm /4000
# find / -perm /2000

Untersuchen Sie diese Dateien ordnungsgemäß und prüfen Sie, ob diese Berechtigungen obligatorisch sind oder nicht. Wenn nicht, entfernen Sie die SUID/SGID-Berechtigungen. Die folgenden Befehle entfernen jeweils SUID/SGID.

# chmod 0755 /path/to/file
# chmod 0664 /path/to/dir

27. Festplattenpartitionen aufteilen

Das Linux-Dateisystem unterteilt alles basierend auf seinem Anwendungsfall in mehrere Teile. Sie können die kritischen Teile des Dateisystems in verschiedene Partitionen Ihres Festplattenspeichers aufteilen. Beispielsweise sollten die folgenden Dateisysteme in verschiedene Partitionen aufgeteilt werden.

  • /usr
  • /home
  • /var &/var/tmp
  • /tmp

Sie sollten auch separate Partitionen für verschiedene Dienste erstellen, z. B. für Apache- und FTP-Server-Roots. Dies hilft, die empfindlichen Teile Ihres Systems zu isolieren. Selbst wenn ein böswilliger Benutzer Zugriff auf einen Teil des Systems erhält, kann er sich daher nicht frei durch das gesamte System bewegen.

28. Sichere Systempartitionen

Bei der Durchführung von Linux-Server-Härtungsaufgaben sollten Administratoren den zugrunde liegenden Systempartitionen besondere Aufmerksamkeit schenken. Böswillige Benutzer können Partitionen wie /tmp, /var/tmp und /dev/shm nutzen, um unerwünschte Programme zu speichern und auszuführen. Glücklicherweise können Sie Schritte zum Sichern Ihrer Partitionen implementieren, indem Sie einige Parameter zu Ihrer /etc/fstab-Datei hinzufügen. Öffnen Sie diese Datei mit einem Linux-Texteditor.

# vim /etc/fstab

Suchen Sie die Zeile, die den Speicherort /tmp enthält. Hängen Sie nun die Parameter nosuid, nodev, noexec und ro als kommaseparierte Liste nach defaults an.

Sie bieten die folgenden Funktionalitäten –

  • nosuid – SUID-Berechtigung auf dieser Partition verbieten
  • nodev -disable special devices on this partition
  • noexec – Ausführungsberechtigung für Binärdateien auf dieser Partition deaktivieren
  • ro – schreibgeschützt

29. Festplattenkontingente aktivieren

Festplattenkontingente sind einfach vom Systemadministrator festgelegte Grenzen, die die Nutzung des Linux-Dateisystems für andere Benutzer einschränken. Wenn Sie Ihre Linux-Sicherheit verstärken, ist die Implementierung von Datenträgerkontingenten für Ihren Server obligatorisch.

# vim /etc/fstab
LABEL=/home /home ext2 defaults,usrquota,grpquota 1 2

Fügen Sie die obige Zeile zu /etc/fstab hinzu, um das Festplattenkontingent für das Dateisystem /home zu aktivieren. Wenn Sie bereits eine Zeile /home haben, ändern Sie diese entsprechend.

# quotacheck -avug

Dieser Befehl zeigt alle Kontingentinformationen an und erstellt die Dateien aquota.user und aquota.group in /home.

# edquota <user>

Dieser Befehl öffnet die Kontingenteinstellungen von in einem Editor, in dem Sie die Kontingentgrenzen zuweisen können. Sie können sowohl weiche als auch harte Limits für die Größe des Festplattenkontingents sowie die Anzahl der Inodes festlegen. Verwenden Sie den folgenden Befehl, um einen Bericht über die Nutzung des Festplattenkontingents anzuzeigen.

# repquota /home

30. Deaktivieren Sie die IPv6-Konnektivität

IPv6 oder Internet Protocol Version 6 ist die neueste Version des TCP/IP-Protokolls. Es kommt mit einer erweiterten Feature-Liste und vielen Usability-Vorteilen. IPv4 ist jedoch für die meisten Server immer noch das Mittel der Wahl. Es besteht also die Möglichkeit, dass Sie IPv6 überhaupt nicht verwenden. In solchen Fällen sollten Sie dies ganz deaktivieren.

Durch das Entfernen unnötiger Netzwerkkonnektivität wird die Sicherheit Ihres Servers solider. Daher bietet das Deaktivieren von IPv6 vernünftige Linux-Härtungseffekte. Fügen Sie die folgenden Zeilen zu /etc/sysctl.conf hinzu, um die IPv6-Konnektivität auf Kernel-Ebene zu deaktivieren.

# vim /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

Führen Sie abschließend den folgenden Befehl aus, um die Änderungen auf Ihren Server zu laden.

# sysctl -p

31. Word-beschreibbare Dateien verwalten

Mit Word beschreibbare Dateien sind Dateien, in die jeder schreiben kann. Dies kann sehr gefährlich sein, da es Benutzern effektiv ermöglicht, ausführbare Dateien auszuführen. Außerdem ist Ihre Linux-Härtung nicht narrensicher, es sei denn, Sie haben die entsprechenden Sticky-Bits gesetzt. Ein Sticky-Bit ist ein einzelnes Bit, das, wenn es gesetzt ist, Benutzer daran hindert, die Verzeichnisse einer anderen Person zu löschen.

Wenn Sie also weltweit beschreibbare Dateien mit Sticky Bits haben, kann jeder diese Dateien löschen, auch wenn sie nicht ihm gehören. Dies ist ein weiteres ernstes Problem und führt oft zu Chaos bei der Serversicherheit. Glücklicherweise können Sie alle diese Dateien mit dem folgenden Befehl finden.

# find /path/to/dir -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print

Ersetzen Sie das Pfadargument durch Verzeichnisse, die solche Dateien enthalten können. Sie können auch im Stammverzeichnis „/“ Ihres Dateisystems beginnen, aber die Ausführung dauert lange. Untersuchen Sie die Dateien nach der Auflistung gründlich und ändern Sie ihre Berechtigungen nach Bedarf.

32. Noowner-Dateien pflegen

Noowner-Dateien sind Dateien, denen kein Eigentümer oder keine Gruppe zugeordnet ist. Diese können eine Reihe unerwünschter Sicherheitsbedrohungen darstellen. Daher sollten Administratoren die erforderlichen Maßnahmen ergreifen, um diese zu identifizieren. Sie können sie entweder den entsprechenden Benutzern zuweisen oder sie vollständig löschen.

Sie können den folgenden find-Befehl verwenden, um die noowner-Dateien aufzulisten, die in einem Verzeichnis vorhanden sind. Sehen Sie sich diese Anleitung an, um mehr über den Find-Befehl in Linux zu erfahren.

# find /path/to/dir -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print

Überprüfen Sie die Ergebnisse gründlich, um sicherzustellen, dass sich keine unerwünschten noowner-Dateien auf Ihrem Server befinden.

33. Serverprotokolle überprüfen

Die meisten Unix-Systeme verwenden den Syslog-Standard, um nützliche Informationen über den Kernel, das Netzwerk, Systemfehler und vieles mehr zu protokollieren. Sie finden diese Protokolle im Verzeichnis /var/log. Sie können mit mehreren Terminalserver-Befehlen unter Linux angezeigt werden. Beispielsweise zeigt der folgende Befehl die letzten Protokolleinträge über den Kernel an.

# tail /var/log/kern.log

Ebenso können Sie /var/log/auth.log für Authentifizierungsinformationen konsultieren.

# less /var/log/auth.log

Die Datei /var/log/boot.log enthält Informationen zum Systemstartvorgang.

# less /var/log/boot.log

Sie können Hardware- und Geräteinformationen auch unter /var/log/dmesg.

einsehen
# less /var/log/dmesg

Die Datei /var/log/syslog enthält Protokollinformationen über alles in Ihrem System mit Ausnahme der Authentifizierungsprotokolle. Sie sollten es überprüfen, um einen umfassenden Überblick über Ihren Server zu erhalten.

# less /var/log/syslog

Schließlich können Sie mit journalctl das systemd-Journal überprüfen. Es wird eine Menge nützlicher Protokolle liefern.

34. Verwenden Sie das logrotate-Paket

Linux-Systeme sammeln Protokolle und speichern sie für die Administratoren. Im Laufe der Zeit nehmen diese Protokolle an Größe zu und können sogar zu einem erheblichen Mangel an Speicherplatz führen. Das Paket logrotate ist in diesem Fall äußerst nützlich, da es Systemprotokolle rotieren, komprimieren und versenden kann. Auch wenn Sie seine Rolle bei der Linux-Härtung in Frage stellen, bietet es unbestreitbare Vorteile.

Dienstspezifische Konfigurationsdateien von logrotate finden Sie im Verzeichnis /etc/logrotate.d. Die globale Logrotate-Konfiguration erfolgt über /etc/logrotate.conf. Sie können hier verschiedene Parameter einstellen, wie die Anzahl der Tage, die die Protokolle aufbewahrt werden sollen, ob sie komprimiert werden sollen oder nicht und so weiter.

35. Installieren Sie Logwatch / Logcheck

Protokolldateien enthalten normalerweise viele Informationen, von denen viele für die Linux-Härtung irrelevant sind. Glücklicherweise können Administratoren Pakete wie Logwatch und Logcheck verwenden, um verdächtige Protokolle einfach zu überwachen. Sie filtern häufige Einträge heraus, die in Ihren Protokollen erwartet werden, und machen Sie nur auf ungewöhnliche Einträge aufmerksam.

Logwatch ist ein extrem leistungsstarker Protokollanalysator, der die Protokollverwaltung erheblich vereinfachen kann. Es eignet sich für Administratoren, die nach All-in-One-Lösungen suchen, da es einen einheitlichen Bericht über alle Aktivitäten auf ihren Servern bereitstellt.

# sudo apt-get install logwatch
# yum install -y logwatch

Sie können die obigen Befehle verwenden, um es auf Ubuntu/Debian- bzw. RHEL/Centos-Systemen zu installieren. Logcheck ist im Vergleich zu logwatch wesentlich einfacher. Es benachrichtigt Administratoren, sobald verdächtige Protokolle auftreten. Sie können es installieren, indem Sie –

# sudo apt-get install logcheck
# yum install -y logcheck

36. Installieren Sie IDS-Lösungen

Eine der besten Linux-Härtungsmethoden für Server ist die Verwendung einer IDS (Intrusion Detection Software). Unsere Redakteure empfehlen für diesen Zweck das Advanced Intrusion Detection Environment (AIDE). Es ist ein Host-basiertes IDS, das viele robuste Funktionen bietet, darunter mehrere Message-Digest-Algorithmen, Dateiattribute, Regex-Unterstützung, Komprimierungsunterstützung und so weiter.

# apt-get install aide
# yum install -y aide

Sie können unter Ubuntu/Debian und RHEL/Centos mit den obigen Befehlen installieren. Außerdem sollten Sie auch Rootkit-Checker installieren, wenn Sie die Linux-Sicherheit aufrechterhalten möchten. RootKits sind schädliche Programme, die entwickelt wurden, um die Kontrolle über ein System zu übernehmen. Einige beliebte Tools zur Rootkit-Erkennung sind Chkrootkit und rkhunter.

37. Deaktivieren Sie Firewire-/Thunderbolt-Geräte

Es ist immer eine gute Idee, so viele Peripheriegeräte wie möglich zu deaktivieren. Damit ist Ihr Server sicher gegen Angreifer, die sich direkten Zugriff auf die Infrastruktur verschafft haben. Zuvor haben wir gezeigt, wie Sie die USB-Geräte deaktivieren. Böswillige Benutzer können jedoch weiterhin Firewire- oder Thunderbolt-Module anschließen.

Firewire ist der generische Name der IEEE 1394-Hardwareschnittstelle. Es wird zum Anschließen digitaler Geräte wie Camcorder verwendet. Deaktivieren Sie es mit dem folgenden Befehl.

# echo "blacklist firewire-core" >> /etc/modprobe.d/firewire.conf

Ebenso bietet die Thunderbolt-Schnittstelle Verbindungen zwischen Ihrem System und Hochgeschwindigkeits-Peripheriegeräten wie Festplattenspeichern, RAID-Arrays, Netzwerkschnittstellen usw. Sie können es mit dem folgenden Befehl deaktivieren.

# echo "blacklist thunderbolt" >> /etc/modprobe.d/thunderbolt.conf

38. Installieren Sie IPS-Lösungen

Eine IPS- oder Intrusion-Prevention-Software schützt Netzwerkserver vor Brute-Force-Angriffen. Da eine beträchtliche Anzahl böswilliger Benutzer und Bots versuchen, Zugriff auf Ihren Remote-Server zu erlangen, hilft Ihnen die Einrichtung eines geeigneten IPS auf lange Sicht.

Fail2Ban ist eine der beliebtesten IPS-Lösungen für Unix-ähnliche Systeme. Es wurde mit Python geschrieben und ist auf allen POSIX-kompatiblen Plattformen verfügbar. Es wird ständig nach aufdringlichen Netzwerkanfragen suchen und diese so schnell wie möglich blockieren. Installieren Sie Fail2Ban mit dem folgenden Befehl.

# apt-get install -y fail2ban
# yum install -y fail2ban

DenyHosts ist eine weitere beliebte IPS-Lösung für die Linux-Härtung. Es schützt Ihre SSH-Server vor aufdringlichen Brute-Force-Versuchen. Verwenden Sie die folgenden Befehle, um auf Ihren Debian- oder Centos-Servern zu installieren.

# apt-get install -y denyhosts
# yum install -y denyhosts

39. Härten Sie den OpenSSH-Server

OpenSSH ist eine Software-Suite, die aus Netzwerkdienstprogrammen besteht, die eine sichere Kommunikation über öffentliche Netzwerke ermöglichen. Der OpenSSH-Server ist zur De-facto-Anwendung zur Erleichterung von SSH-Verbindungen geworden. However, the bad guys also know this and they frequently target OpenSSH implementations. So, hardening this application should be a top concern for all Linux sysadmin.

For example- always use keys over password when initiating a new session, disable superuser login, disable empty passwords, limit user access, set up firewalls on port 22, set idle timeouts, use TCP wrappers, limit incoming requests, disable host-based authentication, and so on. You may also employ advanced Linux hardening methods like chrooting OpenSSH.

40. Utilize Kerberos

Kerberos is a computer network authentication protocol that allows access to computerized infrastructures based on tickets. It uses very hard to break cryptographic logic which makes systems supported by Kerberos very secure. Admins can protect their system from eavesdropping attacks and similar passive networking attacks very easily if they use the Kerberos protocol.

Kerberos is being developed by MIT and provides several stable releases. You can download the application from their website. Consult the documentation to see how it works and how you can set it up for your usage.

41. Harden Host Network

Admins should employ strong network policies in order to protect their secure servers against malicious hackers. We have already outlined the necessity of using intrusion detection systems and intrusion prevention systems. However, you can harden your host network further by doing the following tasks.

# vim /etc/sysctl.conf
net.ipv4.ip_forward=0
# disbale IP forwarding

net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0
# disable send packet redirects

net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
# disable ICMP redirects

net.ipv4.icmp_ignore_bogus_error_responses
# enable bad error message protection

We’ve added comments using the hash symbol to outline the purpose of these network parameters.

42. Utilize AppArmor

AppArmor is a Mandatory Access Control (MAC) mechanism that makes it possible to restrict the usage of system resources based on programs. It allows admins to mandate policies on a program-level rather than users. You can simply create profiles that control the access to network, sockets, file permissions, and so on for your host applications.

Recent Debian/Ubuntu systems come with AppArmor pre-installed. The pre-existing AppArmor profiles are stored in the /etc/apparmor.d directory. You can modify these policies or even add your own policies during the Linux hardening process. Use the below command to view the AppArmor status in your system.

# apparmor_status

43. Secure Web Server

Linux servers are widely used for powering web applications. If you’re using your server for this purpose, you need to harden your server components appropriately. Some of these the PHP runtime, Apache HTTP server, and the Nginx reverse proxy server. Secure your Apache server by adding the below lines in the configuration file.

# vim /etc/httpd/conf/httpd.conf
ServerTokens Prod
ServerSignature Off
TraceEnable Off
Options all -Indexes
Header always unset X-Powered-By
# systemctl restart httpd.service

We’ve prepared a standalone guide on the Nginx server a while ago. Follow the suggestions in that guide to secure your Nginx server. Head over to this documentation for learning the best PHP security practices.

44. Configure TCP Wrappers

TCP wrappers are a host-based network filtering system that allows or denies access to your host services based on pre-set policies. However, for it to work, your host service must be compiled against the libwrap.a Bücherei. Some common TCP wrapperd Unix daemons include sshd, vsftpd, and xinetd.

# ldd /sbin/sshd | grep libwrap

This command will notify if a service is supported by TCP wrappers or not. The TCP wrappers system enforces access control using two configuration files, the /etc/hosts.allow and /etc/hosts.deny. For example, add the following lines to /etc/hosts.allow for allowing all incoming requests to the ssh daemon.

# vi /etc/hosts.allow
sshd : ALL

Add the following to /etc/hosts.deny for rejecting all incoming requests to the FTP daemon.

# vi /etc/hosts.deny
vsftpd : ALL

To see more information about the configuration options, consult the tcpd man page, or visit this documentation from FreeBSD.

45. Maintain Cron Access

Linux provides robust automation support by means of cron jobs. In short, you can specify routine tasks using the cron scheduler. Visit our earlier guide on cron and crontab to learn how cron works. Nevertheless, admins must make sure that ordinary users are unable to access or put entries in the crontab. Simply put their usernames in the /etc/cron.deny file to do this.

# echo ALL >>/etc/cron.deny

This command will disable cron for all users in your server except root. To allow access for a specific user, add his username to the /etc/cron.allow file.

46. Disable Ctrl+Alt+Delete

The Ctrl+Alt+Delete key combinations allow users to force reboot many Linux distributions. This can be particularly problematic if you’re managing a secure server. Admins should disable this hotkey in order to maintain proper Linux hardening. You can run the following command to disable this in systemd-based systems.

# systemctl mask ctrl-alt-del.target

If you’re on legacy systems that use init V instead of systemd, edit the /etc/inittab file and comment out the following line by appending a hash before it.

# vim /etc/inittab
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

47. Enable NIC Bonding

NIC or Network Interface Card bonding is a form of link aggregation in Linux. Multiple network interfaces are joined in this method for gaining better resource availability and throughput. If you’re maintaining busy Linux servers, you can use this method for reducing the workload on a single interface and distribute them across multiple interfaces.

The whole process of NIC bonding differs between Debian and RHEL/Centos systems. We will cover them in a standalone guide soon. For now, simply remember that you can achieve better reliability by enabling network bonding.

48. Restrict Core Dumps

Core dumps are memory snapshots that contain crash information of executables. These are created when binaries stop working or crash in simple terms. They contain too much sensitive information about the host system and may threaten your Linux security if fallen into the wrong hands. Thus, it is always a good idea to restrict core dumps on production servers.

# echo 'hard core 0' >> /etc/security/limits.conf
# echo 'fs.suid_dumpable = 0' >> /etc/sysctl.conf
# sysctl -p
# echo 'ulimit -S -c 0 > /dev/null 2>&1' >> /etc/profile

Run the above commands to restrict cor dumps on your server and increase Linux hardening.

49. Enable Exec Shield

The Exec Shield project was developed by Red Hat for protecting Linux systems against automated remote attacks. It performs particularly well against various buffer overflow-based exploits. You can enable exec shield for your Linux server by running the below commands.

# echo 'kernel.exec-shield = 1' >> /etc/sysctl.conf
# echo 'kernel.randomize_va_space = 1' >> /etc/sysctl.conf

This method will work on both Debian and RHEL systems.

50. Create Regular Backups

No matter how many Linux hardening methods you apply, you need to be always prepared for unforeseen problems. Backing up your workstation or server can prove extremely beneficial in the long run. Thankfully, a large number of backup utility for Linux exists to make system backups easier.

Moreover, you must automate the backup process and store your system data safely. Employing disaster management and recovery solutions can be also useful when it comes to data management.

Abschlussgedanken

Although Linux is much more secure when compared to home operating systems, admins still need to maintain a set of Linux hardening policies. We have compiled this guide with many of the best practices used by Linux security experts. You should try to employ as many of them as possible. However, do not apply these without understanding their effect on your system. You need to have a foolproof plan as well as a good understanding of server security to keep your system safe from malicious users. Hopefully, we provided you the essential tips you were looking for.


Linux
  1. 8 Tipps für die Linux-Kommandozeile

  2. Die 10 besten Instant-Messaging-Apps für Linux

  3. Hyper – Die beste Terminal-App für Linux

  4. Die besten Web-Linux-Server

  5. Linux oder Windows – das Sicherheitsproblem

Die 20 besten Linux-Sicherheitstools:Die Wahl des Linux-Experten

Die 15 besten Linux-Datenwiederherstellungstools:Die Wahl der Profis

Die 15 besten ökonometrischen und statistischen Software für Linux-Systeme

Die 20 besten Data-Mining-Software für Linux-Desktop

Wie man sysctl in Linux richtig sichert:Tipps zur Sicherheitshärtung

Die 8 besten sicheren Linux-Telefone für Datenschutz und Sicherheit