Effektive und einfache Webserver-Sicherheitsmaßnahmen "Linux"

Dies ist die letzte Ausgabe von "Effektive und einfache Sicherheitsmaßnahmen für Webserver". Die Hauptfigur ist diesmal Linux, dh Sicherheitsmaßnahmen für das Betriebssystem.

Bisher verwenden 70% der Webdienste weltweit Linux. Dies bedeutet, dass Linux bereits weit verbreitet ist. Wenn Sie die Anzahl der Benutzer erhöhen, werden Linux-Schwachstellen früher entdeckt.

In den letzten fünf Jahren haben wir auch viele Linux-Kernel gesehen, die schwerwiegenden CVE-Schwachstellen ausgesetzt waren.

Aber ich denke nicht, dass das eine schlechte Sache ist. Da Linux selbst Open Source ist, werden alle gefundenen CVE-Schwachstellen sofort behoben. Ich denke, es ist eine Verkörperung lebendiger Ökologie.

Um Ihren Linux-Server zu schützen, müssen wir selbst gute Sicherheitspraktiken einhalten.

Regelmäßige Systemaktualisierungen

Sie können die neuesten Sicherheitslücken vermeiden, indem Sie Ihren Linux-Kernel und Ihre Pakete regelmäßig aktualisieren.

Normalerweise verwende ich eine stabile Version von Linux Distro (Ubuntu LTS, Debian Stable, CentOS usw.), die Stabilität voraussetzt. Der Kernel aktualisiert nur eine kleine Version und es gibt kein direktes Upgrade auf den neuesten Kernel, also den Kernel Machen Sie sich keine Sorgen über Fehler, die durch Updates oder Kompatibilitätsprobleme verursacht werden.

System- oder Paketaktualisierung:

Debian/Ubuntu

  apt-get update && apt-get upgrade -y && apt-get autoremove -y && apt-get clean -y

Oder:

  apt update && apt upgrade -y && apt autoremove -y && apt clean -y

CentOS

  yum update -y && yum upgrade -y

Natürlich können Sie auch automatische Updates für verschiedene Linux-Distributionen nutzen.

SSH-Sicherheit

Die SSH-Sicherheit ist wohl eine der wichtigsten Sicherheitsmaßnahmen für Linux. Die meisten Fälle von Linux-Server-Hacks sind auf ein geknacktes SSH-Passwort zurückzuführen.

Um die Sicherheit Ihres Linux-Servers zu gewährleisten, müssen Sie zunächst SSH sicherstellen.

Normalerweise würden viele sagen, dass Fail2ban für den SSH-Schutz verwendet wird, um zu verhindern, dass SSH-Passwörter gesprengt werden. Es stellte sich jedoch heraus, dass ein illegaler Eindringling viel Proxy-IP verwendete, um grob in SSH einzudringen. Infolgedessen kann Fail2ban nicht mehr effektiv geschützt werden.

Daher ist die Verwendung von Fail2ban zum Schutz von SSH nicht besonders effektiv und wird nicht empfohlen. Umgekehrt belegt Fail2ban auch viele iptables-Regeln, was sich auf die Leistung von iptables auswirkt.

Wie schützen Sie SSH? Wir empfehlen folgende Methoden:


1. Setzen Sie das SSH-Passwort auf ein sicheres Passwort

Brute-Force-Cracking in SSH wird grundsätzlich mit einem schwachen kryptografischen Wörterbuch versucht. Daher musste ich das SSH-Passwort in ein stärkeres ändern.

Normalerweise wird das Passwort auf 12 Zeichen oder mehr geändert und die Zahlen werden mit speziellen Symbolen hinzugefügt. Dies verhindert stark, dass das Passwort grob geknackt wird.

So ändern Sie Ihr Passwort:

  passwd root

2. Ändern Sie den Standardport von SSH

Schädliche Scanner für SSH scannen normalerweise nur Port 22.

Sie können diesen Teil des böswilligen Scanners verhindern, indem Sie einfach den Standardport von SSH in einen anderen Port ändern.

So ändern Sie den Standardport:

1. Öffnen Sie die SSH-Konfigurationsdatei:

    vim /etc/ssh/sshd_config

2. Ändern Sie die folgenden Parameter:

Port 22322 # <---- Bitte wählen Sie Ihren Lieblingsport aus

3. Wenn iptables aktiviert ist, müssen Sie die geänderten SSH-Ports auf die Whitelist setzen:

    iptables -A INPUT -p tcp --dport 22322 -j ACCEPT

4. Starten Sie den SSH-Dienst neu:

    /etc/init.d/ssh restart

3. Melden Sie sich mit Ihrem SSH-Zertifikat an

Sie können sich mit einem SSH-Zertifikat anmelden, um zu verhindern, dass Ihr SSH-Kennwort von Brute Force geknackt wird. Weil ich überhaupt kein Passwort habe. Wie knackt man ohne Passwort?

1. Generieren Sie ein SSH-Zertifikat

Hier wird der Zertifikatsgenerator von PuTTY verwendet, um die öffentlichen und privaten Schlüssel zu generieren und nach der Generierung zu speichern.

933308-20170802175036271-384330402.png

2. Laden Sie den öffentlichen Schlüssel auf den Server hoch

Hier wird davon ausgegangen, dass der öffentliche Schlüssel in "/etc/ssh/key/public.key" hochgeladen wurde.

Stellen Sie dann den öffentlichen Schlüssel auf die richtigen Systemberechtigungen ein:

chmod 700 /etc/ssh/key
chmod 600 /etc/ssh/key/public.key

3. Ändern Sie die folgenden Parameter in der SSH-Konfigurationsdatei, damit sich das SSH-Zertifikat anmeldet:

Öffnen Sie die SSH-Konfigurationsdatei:

    vim /etc/ssh/sshd_config

Ändern Sie die folgenden Parameter:

    ......
    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile /etc/ssh/key/public.key
    PermitEmptyPasswords no
    AllowTcpForwarding no
    X11Forwarding no
    PasswordAuthentication no
    ......

4. Starten Sie den SSH-Dienst neu:

    /etc/init.d/ssh restart

4. Ermöglicht nur der angegebenen IP-Adresse die Verbindung zum SSH-Port

Dies ist die sicherste SSH-Anmeldung. Es ist noch sicherer als die Anmeldung zum SSH-Zertifikat.

Das SSH-Zertifikat kann kompromittiert werden, aber die Art und Weise, wie sich nur die angegebene IP bei SSH anmelden kann, ist praktisch unzerbrechlich.

Nur wenn Sie einen festen Proxyserver haben und die Sicherheitsmaßnahmen des Proxyservers stark sind.

Persönlich verwende ich Kabelschutz, um eine Verbindung zu meinem Netzwerk herzustellen, bevor ich auf das Internet zugreife. Meine Export-IP ist also festgelegt.

Daher sind alle meine Server für SSH-Verbindungen auf meine Exit-IP beschränkt.

Wir empfehlen, dass Sie zwei IPs für Ihren Proxyserver als Whitelist festlegen. Einer der Proxyserver als Backup. Wir empfehlen außerdem, dass sich beide Proxyserver in unterschiedlichen Regionen befinden.

Weiße Liste festlegen:

    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A OUTPUT -j ACCEPT
    iptables -A INPUT -s xxx.xxx.xxx.xxx -p TCP --dport 22322 -j ACCEPT
    iptables -A INPUT -p tcp --dport 22322 -j DROP

Speichern Sie die Einstellungen für iptables (Debian / Ubuntu):

    /etc/init.d/netfilter-persistent save
    /etc/init.d/netfilter-persistent reload

5. Laden Sie den SSH-Client von der offiziellen Website herunter

Selbst in PuTTY haben PuTTY-Dateien, die auf viele inoffizielle Websites heruntergeladen wurden, eine Hintertür, die das SSH-Passwort eines Benutzers illegal stehlen kann.

PuTTY offizielle Website

Lassen Sie nur den angegebenen Empfangsport zu

Normalerweise ist der vom Webserver verwendete Port festgelegt. Beispiel: HTTP 80-Port oder HTTPS 443-Port. Wenn nur Verbindungen zu diesen Ports zugelassen werden, wird das Auftreten unbekannter Angriffe verhindert.

Besonders hervorzuheben ist hier der DNS-Port. Jeder weiß, dass DNS das UDP-Protokoll verwendet, aber UDP verfügt nicht über die Konnektivitätserhaltungsfunktionen des TCP-Protokolls. Öffnen Sie daher Port 53 für eine ordnungsgemäße DNS-Auflösung.

Abgesehen von der DNS-Auflösung benötigen typische Webserver jedoch nicht das UDP-Protokoll. Um DDoS-Angriffe zu verhindern, blockiere ich im Allgemeinen alle UDP-Protokolle. Es schützt jedoch nicht vor allen DDoS-Angriffen. In einem späteren Artikel werde ich erklären, wie man sich vor DDoS-Angriffen schützt.

Verwenden Sie iptables, um Ports zu begrenzen:

iptables -A INPUT -i lo -j ACCEPT # <-Allow lokale Loopback-Schnittstelle (dh lokalen Zugriff auf lokalen Computer durchführen) iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT # <-Allow den Durchgang von hergestellten oder verwandten Verbindungen iptables -A OUTPUT -j ACCEPT # <-Allow out outbound access iptables -A INPUT -s xxx.xxx.xxx.xxx -p TCP --dport 22322 -j ACCEPT # <- Ermöglicht nur der angegebenen IP-Adresse die Verbindung zum SSH-Port iptables -A INPUT -p tcp --dport 80 -j ACCEPT #<-- HTTP iptables -A INPUT -p tcp --dport 443 -j ACCEPT #<-- HTTPS iptables -A INPUT -p udp --dport 53 -j ACCEPT #<-- DNS iptables -A INPUT -j REJECT # <- Verbieten Sie den Zugriff auf andere nicht autorisierte Regeln iptables -A FORWARD -j REJECT # <- Verbieten Sie den Zugriff auf andere nicht autorisierte Regeln


Fazit

Damit ist das Lernprogramm in der Reihe "Effektive und einfache Sicherheitsmaßnahmen für Webserver" abgeschlossen.

Grundsätzlich können Sie Ihren Webserver schützen, indem Sie die von mir eingeführten Sicherheitsmaßnahmen befolgen.

Um eine 100% ige Serversicherheit zu gewährleisten, ist es jedoch auch erforderlich, das Bewusstsein für die Sicherheit persönlicher Server zu schärfen. Sie müssen immer auf zukünftige Sicherheitsbedrohungen vorbereitet sein.

das ist alles.

Recommended Posts

Effektive und einfache Webserver-Sicherheitsmaßnahmen "Linux"
Webserverkonstruktion mit Apache 2.4 (httpd 2.4.43) + PHP 7.4 unter Linux ―― 4. Sicherheit (chown und firewalld)
Aufbau eines Linux-Webservers (Ubuntu & Apache)
Schnellste und stärkste Webserver-Architektur
Erstellen Sie einen einfachen WebDAV-Server unter Linux
Installieren und konfigurieren Sie den TigerVNC-Server unter Linux
Linux-Sicherheitsmaßnahmen Snort Intrusion Detection
Installieren Sie Python3 und Django unter Amazon Linux (EC2) und führen Sie den Webserver aus
Stellen Sie Docker in Windows Home und führen Sie einen einfachen Webserver mit Python aus
Quellkompilierung Apache2.4 (httpd 2.4.43) + PHP7.4 unter Linux zum Erstellen eines Webservers ―― 1. Einführung in Apache
Quellkompilierung Apache2.4 (httpd 2.4.43) + PHP7.4 unter Linux zum Erstellen eines Webservers --2 PHP-Einführung
Starten Sie mit Docker einen einfachen Python-Webserver
Starten Sie einen Webserver mit Python und Flask
Linux Server Befehl
Linux-Sicherheitsmaßnahmen Erkennung von Host-Eindringlingen (chkrootkit / rkhunter / maldetect)
[Linux] [Kernelmodul] Erstellen und laden Sie ein einfaches ladbares Kernelmodul
[Teil 2] Erstellen wir einen Webserver mit EC2 Linux
Erstellen Sie Apache HTTP Server und Wildfly unter Oracle Linux 8
Führen Sie einen Befehl auf dem Webserver aus und zeigen Sie das Ergebnis an
Aufbau eines Websystems (super einfach) ③: Aufbau eines DB-Servers und grundlegende Bedienung
Vergleich von Windows Server und freiem Linux und kommerziellem Linux
HTTP-Server und HTTP-Client mit Socket (+ Webbrowser) - Python3
Aufbau eines Websystems (super einfach) ②: Aufbau eines AP-Servers und grundlegende Bedienung
So starten Sie einen einfachen WEB-Server, der CGI von PHP und Python ausführen kann