Serverhärtung ist der Prozess der Verbesserung der Serversicherheit durch verschiedene Methoden. Wir haben viele Schritte, um einen Server zu sichern. Halten Sie sich und Ihr Unternehmen fern, indem Sie Ihre Linux-Systeme vor Hackern, Crackern und Angreifern schützen! Mit den folgenden Schritten können Sie eine anfällige Box in einen gehärteten Server verwandeln. Es wird Ihnen helfen, Angriffe von außen zu verhindern. Hier beschreibe ich die Serverhärtung von CentOS.
Wissenswertes
Dieser Leitfaden führt Sie durch die Schritte, die zur Sicherheitshärtung von CentOS 7 erforderlich sind. Das Härten eines Systems macht es restriktiver und Sie können auf Probleme stoßen. Ich empfehle, eine doppelte virtuelle Maschine zu erstellen, die Sie zur Fehlerbehebung verwenden können. Nachfolgend finden Sie eine Liste grundlegender Schritte, die Sie unternehmen können und sollten, um Ihre Server unmittelbar nach der Bereitstellung zu härten.
1. Sicherer Fernzugriff
Manchmal greifen wir über Remote-Methoden auf unseren Server zu, und wenn es nicht sicherer ist, können wir unseren Server offenlegen. OpenSSH-Optionen werden über /etc/ssh/sshd_config
gesteuert Datei.
a. Deaktivieren Sie die SSH-Passwort-Authentifizierungsmethode und aktivieren Sie die Public-Key-Authentifizierungsmethode
Es ist wichtig, die Kennwort-Remote-Anmeldemethode zu deaktivieren und den öffentlichen Authentifizierungsschlüssel zu aktivieren
Ändern Sie ChallengeResponseAuthentication und PasswordAuthentication auf nein um die Passwortmethode zu deaktivieren
PasswordAuthentication noChallengeResponseAuthentication no
Authentifizierung mit öffentlichem Schlüssel autorisieren
RSAAuthentication yesPubkeyAuthentication yes
Jetzt können Sie ein neues Schlüsselpaar generieren
# ssh-keygen -t rsa
b. Direkte Root-Anmeldung deaktivieren
Es ist ein Sicherheitsrisiko, root zu erlauben, sich direkt beim Server anzumelden. Stattdessen sollten Sie sich mit Ihrem Konto beim System anmelden und dann su - ausführen als root anmelden. Sie müssen also PermitRootLogin yes ändern auf RootLogin-Nr zulassen
PermitRootLogin-Nr.
c. Ändern Sie den standardmäßigen SSH-Listening-Port (zB:8500)
Manchmal wird es nicht empfohlen, den Standardport zu verwenden, da er weltweit bekannt ist und ein Sicherheitsrisiko darstellt. Es ist gut, den zu verwendenden Port zu personalisieren
Port 8500
2. Bootloader mit Grub-Passwort sichern
Durch die Sicherung des Bootloaders können wir den Zugriff auf den Einzelbenutzermodus verhindern, der sich automatisch als Root anmeldet. Dies geschieht mit GRUB, indem ein Passwort gesetzt wird, das standardmäßig im Klartext gespeichert wird.
Für Debian-System
# grub-mkpasswd-pbkdf2
Für Centos
# grub2-mkpasswd-pbkdf2
3. Listening Network Ports
Nach der Konfiguration von Netzwerkdiensten ist es wichtig, darauf zu achten, welche Ports tatsächlich an den Netzwerkschnittstellen des Systems lauschen. Alle offenen Ports können ein Beweis für einen Einbruch sein.
# nmap -sT -O localhostStarting Nmap 6.40 ( http://nmap.org ) at 2017-06-07 23:13 UTCNmap scan report for localhost (127.0.0.1)Host is up (0.000061s Latency).Other Adressen für localhost (nicht gescannt):127.0.0.1rDNS-Eintrag für 127.0.0.1:centos-01Nicht angezeigt:995 geschlossene PortsPORT STATE SERVICE22/tcp open ssh25/tcp open smtp80/tcp open http111/tcp open rpcbind2049/tcp open nfsVerwenden Sie den folgenden Befehl, um alle offenen Ports und zugehörigen Programme aufzulisten
# netstat -tulpnAktive Internetverbindungen (nur Server)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Programmname tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd tcp 0 0 0.0 .0.0:20048 0.0.0.0:* HÖREN4. Berechtigungen eingrenzen
Schränken Sie die Berechtigungen für Systemdateien und -ordner ein, um die Risiken zu begrenzen.
# chmod 700 /root# chmod 700 /var/log/audit# chmod 740 /etc/rc.d/init.d/iptables# chmod 740 /sbin/iptables# chmod -R 700 /etc/skel# chmod 600 /etc/rsyslog.conf# chmod 640 /etc/security/access.conf# chmod 600 /etc/sysctl.conf5. Überprüfen von Konten auf leere Passwörter
Jedes Konto mit einem leeren Passwort bedeutet, dass es für unbefugten Zugriff auf das Internet geöffnet ist und ein Teil der Sicherheit innerhalb eines Linux-Servers ist. Um Konten mit leerem Passwort zu überprüfen, verwenden Sie den folgenden Befehl
# cat /etc/shadow | awk -F:'($2==""){print $1}'paulAus Sicherheitsgründen ist es gut, alle leeren Passwortkonten zu sperren:
# passwd -l paulSperrpasswort für Benutzer paul.passwd:Erfolgreich6. Kernel-Parameter abstimmen
Sysctl ist eine Schnittstelle zum Untersuchen und dynamischen Ändern von Parametern im Linux-Betriebssystem. Bearbeiten Sie
/etc/sysctl.conf
Datei zur Optimierung der KernelparameterSysctl ist der Befehl, der verwendet wird, um Kernelparameter zur Laufzeit zu ändern.
# sysctl -a
# sysctl -A
# sysctl net.ipv4.conf.all.rp_filter
To load settings, enter:
# sysctl -p
Kopieren Sie den folgenden Inhalt und fügen Sie ihn in
/etc/sysctl.conf
ein# Turn on execshield kernel.exec-shield=1 kernel.randomize_va_space=1 # Enable IP spoofing protection net.ipv4.conf.all.rp_filter=1 # Disable IP source routing net.ipv4.conf.all.accept_source_route=0 # Ignoring broadcasts request net.ipv4.icmp_echo_ignore_broadcasts=1 net.ipv4.icmp_ignore_bogus_error_messages=1 # Make sure spoofed packets get logged net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.default.log_martians = 1 # Disable ICMP routing redirects sysctl -w net.ipv4.conf.all.accept_redirects=0 sysctl -w net.ipv6.conf.all.accept_redirects=0 sysctl -w net.ipv4.conf.all.send_redirects=0 sysctl -w net.ipv6.conf.all.send_redirects=0 # Disables the magic-sysrq key kernel.sysrq = 0 # Turn off the tcp_sack net.ipv4.tcp_sack = 0 # Turn off the tcp_timestamps net.ipv4.tcp_timestamps = 0 # Enable TCP SYN Cookie Protection net.ipv4.tcp_syncookies = 1 # Enable bad error message Protection net.ipv4.icmp_ignore_bogus_error_responses = 1
7. Unerwünschte Dienste deaktivieren
Sie müssen alle unerwünschten Dienste und Daemons (Dienste, die im Hintergrund laufen) aus dem Systemstart entfernen, die beim Booten in Runlevel 3 gestartet werden .
# chkconfig --list | grep '3:on'
Um den Dienst zu deaktivieren, geben Sie Folgendes ein:
# service serviceName stop # chkconfig serviceName off
8. Authentifizierung für Einzelbenutzermodus erforderlich
Es wird empfohlen, beim Aufrufen des Einzelbenutzermodus das Root-Passwort anzufordern. Öffnen Sie
/etc/sysconfig/init
Datei und fügen Sie die Zeile hinzu:SINGLE=/sbin/sulogin
9. Sicherheitsoptimiertes Linux (SELinux)
SELinux ist eine Reihe von Sicherheitsregeln, die bestimmen, welcher Prozess auf welche Datei, Verzeichnisse, Ports usw. zugreifen kann. Jede Datei, jeder Prozess, jedes Verzeichnis und jeder Port hat ein spezielles Sicherheitslabel namens SELinux-Kontexte. Ein Kontext ist einfach ein Name, der von der SELinux-Richtlinie verwendet wird, um zu bestimmen, ob ein Prozess auf eine Datei, ein Verzeichnis oder einen Port zugreifen kann oder nicht. Standardmäßig lässt die Richtlinie keine Interaktion zu, sodass explizite Regeln den Zugriff gewähren. Wenn es keine Allow-Regel gibt, wird kein Zugriff erlaubt.
getenforce Der Befehl sagt uns, in welchem Modus sich SELinux befindet.
Wir können den SELinux-Modus in Erzwingen ändern, indem wir
SELINUX=enforcing
ändern in/etc/sysconfig/selinux
Es gibt drei Direktiven in dieser Datei, wie unten erklärt.
- Durchsetzung: Die SELinux-Sicherheitsrichtlinie wird durchgesetzt.
- Zulässig: SELinux gibt Warnungen aus, anstatt sie zu erzwingen.
- Deaktiviert: SELinux ist vollständig deaktiviert.
Sie können den Status von SELinux mit dem Befehl
überprüfen# sestatus
SELinux status: disabled
Sie sehen, dass es deaktiviert ist. Um es zu aktivieren, können Sie
verwenden# setenforce enforcing
10. Firewall mit iptables einrichten
iptables ist ein Userspace-Anwendungsprogramm, mit dem ein Systemadministrator die von der Linux-Kernel-Firewall bereitgestellten Tabellen und die darin gespeicherten Ketten und Regeln konfigurieren kann.
a. Schließen Sie alle unerwünschten Ports
iptables -A INPUT -p tcp --dport PORT_NUMBER -j DROP
b. Blockiere schlechte IPs
iptables -A INPUT -s IP_ADDRESS -j DROP
c. Verbindungen zu einer Netzwerkschnittstelle blockieren
Um Verbindungen von einer bestimmten IP-Adresse zu einer bestimmten Netzwerkschnittstelle zu blockieren, verwenden Sie den Befehl
# iptables -A INPUT -i ens0 -s 6.6.6.6 -j DROP
d. Iptables-Regeln auflisten
Sie können alle iptables-Regeln mit dem Befehl
seheniptables -L -n -v
11. Überprüfung des Dateisystems
Alle Dateien mit aktivierten SUID/SGID-Bits können für böswillige Aktivitäten verwendet werden, wenn die ausführbare SUID/SGID-Datei ein Sicherheitsproblem aufweist. Alle lokalen oder entfernten Benutzer können diese Datei verwenden.
a. Identifizieren Sie unerwünschte SUID- und SGID-Binärdateien
find / \( -perm -4000 -o -perm -2000 \) -print
find / -path -prune -o -type f -perm +6000 -ls
b. Identifizieren Sie weltweit beschreibbare Dateien
find /dir -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print
c. Identifizieren Sie verwaiste Dateien und Ordner
find /dir -xdev \( -nouser -o -nogroup \) -print
12. Belassen Sie /boot als schreibgeschützt
Der Linux-Kernel und die zugehörigen Dateien befinden sich im /boot-Verzeichnis, das standardmäßig schreibgeschützt ist. Wenn Sie es auf schreibgeschützt ändern, verringert sich das Risiko einer nicht autorisierten Änderung kritischer Boot-Dateien. Wir müssen /etc/fstab
bearbeiten Datei und fügen Sie die folgende Zeile ein<
LABEL=/boot /boot ext2 defaults,ro 1 2
13. Alle TCP-Wrapper ablehnen
TCP-Wrapper können eine schnelle und einfache Methode zur Steuerung des Zugriffs auf mit ihnen verknüpfte Anwendungen bieten. Daher wird empfohlen, alle nicht verwendeten Anwendungen zu blockieren und dann nur die Anwendungen zu autorisieren, die verwendet werden.
Beispielsweise werden wir alle Anwendungen blockieren, außer autorisiertem SSH
echo "ALL:ALL" >> /etc/hosts.deny
echo "sshd:ALL" >> /etc/hosts.allow
14. Cronjobs für nicht autorisierte Benutzer sperren
Cron wird verwendet, um Jobs zu einem bestimmten Zeitpunkt zu automatisieren. Es ist möglich festzulegen, wer Jobs ausführen darf und wer nicht. Dies wird durch die Verwendung von Dateien namens /etc/cron.allow
gesteuert und /etc/cron.deny
. Um einen Benutzer mit cron zu sperren, fügen Sie einfach Benutzernamen in cron.deny hinzu und um einem Benutzer zu erlauben, cron auszuführen, fügen Sie in der Datei cron.allow hinzu.
# echo ALL >>/etc/cron.deny
15. Sichern Sie den Server gegen Pufferüberlauf
Ein Pufferüberlauf tritt auf, wenn ein Programm oder Prozess versucht, mehr Daten in einen Speicherblock mit fester Länge oder einen Puffer zu schreiben, als dem Puffer zugewiesen ist. Es ist wichtig, Ihren Server vor diesem Angriff zu schützen
a. Aktivieren Sie ExecShield
Es hilft, das Zerbrechen des Stapels zu verhindern. Typischerweise überschreibt ein Pufferüberlauf-Exploit eine Rücksprungadresse, sodass eine Funktion zu einer vom Angreifer gewählten Adresse zurückkehrt. Sie müssen den aktuellen Kernel aktivieren
sysctl -w kernel.exec-shield=1
Sie können die folgende Zeile auch zu /etc/sysctl.conf
hinzufügen
kernel.exec-shield = 1
b. Überprüfen/aktivieren Sie ASLR
Die Adressraum-Layout-Randomisierung ist eine Abwehrfunktion, um Pufferüberläufe zu erschweren. ASLR erschwert es dem Angreifer, eine Adresse zu finden, zu der er springen kann. Sie müssen die zufällige Platzierung virtueller Speicherbereiche aktivieren, indem Sie die Laufzeit für kernel.randomize_va_space festlegen
sysctl -q -n -w kernel.randomize_va_space=2
Fügen Sie die folgende Zeile zu /etc/sysctl.conf
hinzu falls es noch nicht existiert
kernel.randomize_va_space = 2
Schlussfolgerung
Dies sind einige der grundlegenden Überlegungen für neue Benutzer, die versuchen, ihre eigenen Server zu betreiben. Denken Sie daran, dass Cracker immer einen Schritt voraus sind; Sie suchen ständig nach Löchern, um sich in Ihren Server zu hacken. Es ist wichtig zu erkennen, dass Sicherheitsmaßnahmen zwar besser spät als nie an Wirksamkeit verlieren, je länger Sie mit der Implementierung warten