![]() |
Server sichern mit ufw - Druckversion +- GridTalk.de (https://www.gridtalk.de) +-- Forum: Werkstatt (https://www.gridtalk.de/forumdisplay.php?fid=4) +--- Forum: Technik (https://www.gridtalk.de/forumdisplay.php?fid=25) +---- Forum: Q & A Forum (https://www.gridtalk.de/forumdisplay.php?fid=112) +---- Thema: Server sichern mit ufw (/showthread.php?tid=4988) |
Server sichern mit ufw - Manfred Aabye - 07.02.2025 Anfängerhilfe Server vor Fremdangriffen sichern Die Uncomplicated Firewall (UFW) ist ein benutzerfreundliches Frontend für iptables und hilft dabei, die Sicherheit Deines Servers zu gewährleisten, indem sie unerwünschte Verbindungen blockiert. In dieser Anleitung zeige ich Dir, wie Du offene Ports ermitteln und die notwendigen Regeln in UFW konfigurieren kannst. Schaut auch bei einem Neustart Eures Servers die offenen Ports und Apps an (sudo ufw app list) und sucht nach unbekannten verhalten. Datei readopenport.sh Dieses Skript ermittelt die offenen Ports auf Deinem Server und speichert sie in einer Datei namens offene_ports.txt. --- bash Code: #!/bin/bash Datei setufwports.sh Dieses Skript überprüft, ob UFW installiert ist, und installiert es bei Bedarf. Anschließend erstellt es ein weiteres Skript ufw_commands.sh, das die UFW-Befehle zum Öffnen der ermittelten Ports enthält. --- bash Code: #!/bin/bash Zum Schluss müsst ihr noch Eure Firewall starten: sudo ufw enable Hier sind die wichtigsten UFW Befehle zur Verwaltung Deiner Firewall: sudo ufw enable: Aktiviert die Firewall sudo ufw disable: Deaktiviert die Firewall sudo ufw default ARG: Setzt die Standardrichtlinie sudo ufw logging LEVEL: Setzt das Logging auf LEVEL sudo ufw allow ARGS: Fügt eine Erlaubnisregel hinzu sudo ufw deny ARGS: Fügt eine Ablehnungsregel hinzu sudo ufw reject ARGS: Fügt eine Zurückweisungsregel hinzu sudo ufw limit ARGS: Fügt eine Begrenzungsregel hinzu sudo ufw delete RULE|NUM: Löscht REGEL oder NUMMER sudo ufw insert NUM RULE: Fügt REGEL an Stelle NUMMER ein sudo ufw prepend RULE: Fügt REGEL am Anfang ein sudo ufw route RULE: Fügt eine Routenzuweisungsregel hinzu sudo ufw route delete RULE|NUM: Löscht Routenzuweisungsregel oder NUMMER sudo ufw route insert NUM RULE: Fügt Routenzuweisungsregel an Stelle NUMMER ein sudo ufw reload: Lädt die Firewall neu sudo ufw reset: Setzt die Firewall zurück sudo ufw status: Zeigt den Firewall-Status an sudo ufw status numbered: Zeigt den Firewall-Status als nummerierte Liste der REGELN an sudo ufw status verbose: Zeigt den ausführlichen Firewall-Status an sudo ufw show ARG: Zeigt den Firewall-Bericht sudo ufw version: Zeigt Versionsinformationen an Anwendungsprofil-Befehle: sudo ufw app list: Listet Anwendungsprofile auf sudo ufw app info PROFILE: Zeigt Informationen zu PROFILE an sudo ufw app update PROFILE: Aktualisiert PROFILE sudo ufw app default ARG: Setzt die Standard-Anwendungsrichtlinie RE: Server sichern mit ufw - Pius Noel - 09.02.2025 Um es gleich vorweg zu nehmen, ich bin ein grosser Fan der ufw und finde jeden Beitrag gut, der dazu motiviert dieses Tool zu verwenden. Bei der Verwendung dieses Scripts sehe ich allerdings auch Probleme, denn Tools wie ss (oder netstat) zeigen nicht die tatsächlich offenen Ports, sondern Ports die von einem gerade laufenen Programm abgehört werden. Dabei werden auch Ports gelistet die an die interne lokale Adresse gebunden sind und eigentlich gar nicht nach aussen geöffnet werden müssen. Ich persönlich bin der Meinung, dass man wissen sollte, welche Ports von welcher Anwendung benötigt werden. Vorausgesetzt, dass alle Systeme laufen, kann das mit dem Befehl 'ss -tulp' oder 'ss -tulpn' (Port Nummern statt Namen) abgerufen werden. Ein leicht abgeändertes Besipiel von einem Raspberry Pi der hinter einem Home-Router mit DHCP-Server steht: Code: Netid State Local Addr:Port Process Die Anbindung des Ports an die Adresse 0.0.0.0 steht unabhängig von der tatsächlichen IP-Adresse für alles was von aussen über IPv4 an den Rechner adressiert wird. [::] gilt entsprechend für IPv6. 127.0.0.1 gilt für Ports die an die interne Adresse (localhost) gebunden sind und somit von aussen nicht zugänglich sein müssen (und somit auch nicht dürfen). Ein * gilt für alle Adressen, egal ob intern oder extern, IPv4 oder IPv6. Im Beispiel ist der Port 9000 für udp und tcp interessant. Er gehört zum Prozess dotnet. Es sollte allen Betreiber*innen eines OpenSim Servers klar sein, dass es sich damit um OpenSimulator handeln könnte, das mit 'dotnet OpenSim.dll' gestartet wurde. Damit in Verbinung steht mariadb das an die interne Adresse gebunden ist und im konkreten Fall von der OpenSim benutzt wird. Wenn falsch konfiguriert, kann der Port auch an die externe Adresse gebunden werden und das möchten wir natürlich nicht. Deshalb wollen wir diesen Port auch niemals nach aussen hin öffnen. Ähnliches gilt für den Prozess containerd, der zu Docker gehört, sowie den Port 2019 von caddy. Caddy ist ein Web Server, der hier auf allen Schnittstellen an den TCP Ports http (80) und https (443) hört. Da Caddy auch DNS über https unterstützt muss hier der https Port nach aussen hin geöffnet werden. Das kann man der Dokumentation von Caddy entnehmen. Der Port 2019 hingegegen, darf niemals nach aussen hin zugänglich sein, weil darüber über ein API die gesamte Konfiguration zugänglich und somit veränderbar ist. Da ich mich auf desem Pi von aussen nur über SSH einlogge muss auch dieser Port geöffnet sein. Da ssh-Login-Versuche von aussen aber extrem häufig stattfinden verwende ich auf all meinen Systemen eine andere Port Nummer. Das bedeutet nicht, dass mein System deswegen sicherer ist, aber es hält mir die Logs wesentlich sauberer. Da bleiben noch die offenen Ports vom Prozess dhcpcd, der auf jedem Raspberry Pi vorinstelliert ist und den es in der Regel auch braucht. Er dient dazu beim Starten von einem DHCP Server (in der Regel vom Router) eine IP Adresse im LAN oder WLAN zu erhalten. Hmmm... muss dieser Port jetzt offen sein oder nicht? Da noch andere Komponenten mithineinspielen ist die Frage gar nicht so einfach zu beantworten. Bevor ich den Port aus den allow-Rules entfernte musste ich mir zuerst eine Notfallstratgeie überlegen, was zu tun ist, falls es nicht funktioniert. Es hat sich dann herausgestellt, dass sich in meinem Fall der Pi beim Starten die IP vom Router holt und in der Tat keine Verbindung von aussen her nötig ist. Ohne den dhcpcd Prozess, hätte mein Pi aber keine im LAN/WAN gültige IP Adresse und er wäre nicht erreichbar. Der langen Rede kurzer Sinn: ich benötige zur Konfiguration meiner Firewall nur folgende vier Befehle: Code: sudo ufw allow ssh Dem gegenüber steht das Resultat des Scripts von Manni: Code: #!/bin/bash Meine Devise: alles dicht machen und nur öffnen, was es unbedingt braucht! Damit behalte ich auch den Überblick. P.S. Ja, es kann schon mal passieren, dass man sich selber aussperrt. Nach dem 2. Mal passiert es seltener. RE: Server sichern mit ufw - nihal - 09.02.2025 nur eine firewall eizurichten ist reichlich blauäugig, jeder sollte mal auf seinem server Code: grep "Failed" /var/log/auth.log ausführen. es dürfte erschreckend sein. ohne fail2ban wird die ausgabe des befehls schnell sehr unübersichtlich. im übrigen ist ein portscan mit Code: sudo nmap -Pn -sS -sV --version-all --reason -v -A -O --osscan-guess -p0-65535 IP-ADRESSE zu empfehlen. RE: Server sichern mit ufw - Manfred Aabye - 12.02.2025 Ubuntu Server Absicherung – Eine Einfache Anleitung für Anfänger Die Absicherung eines Servers ist entscheidend, um unbefugte Zugriffe und Angriffe zu verhindern. Eine gute Firewall, sichere Anmeldeoptionen und die Konfiguration von SSH sind nur einige der Maßnahmen, die dir helfen, deinen Ubuntu-Server sicherer zu machen. 1. Installiere und Aktiviere UFW (Uncomplicated Firewall) Eine der einfachsten Möglichkeiten, deinen Server zu sichern, ist die Verwendung einer Firewall. Die UFW ist eine benutzerfreundliche Möglichkeit, eine Firewall zu konfigurieren und zu verwalten. Schritt 1: Installiere UFW Öffne dein Terminal und gebe folgenden Befehl ein, um sicherzustellen, dass UFW auf deinem Server installiert ist: sudo apt-get update sudo apt-get install ufw Schritt 2: Aktiviere die Firewall Standardmäßig wird die Firewall nach der Installation deaktiviert. Um sie zu aktivieren, gebe den folgenden Befehl ein: sudo ufw enable Dies blockiert alle eingehenden Verbindungen, es sei denn, du gibst explizit an, welche Verbindungen erlaubt werden sollen. Schritt 3: Erlaube den SSH-Zugang Wenn du per SSH auf deinen Server zugreifen möchtest (was normalerweise der Fall ist), musst du sicherstellen, dass SSH-Verbindungen zugelassen werden: sudo ufw allow ssh Alternativ kannst du den spezifischen Port angeben (Standardport ist 22), aber dies wird später in diesem Tutorial geändert. Schritt 4: Überprüfe den Status der Firewall Um zu prüfen, ob die Firewall aktiv ist und welche Regeln momentan angewendet werden, kannst du folgendes eingeben: sudo ufw status 2. Ändere den Standard-SSH-Port für zusätzliche Sicherheit Eine einfache, aber sehr effektive Methode zur Verbesserung der Sicherheit ist das Ändern des SSH-Ports. Der Standard-SSH-Port (Port 22) ist weithin bekannt und ein Ziel für viele Angreifer. Das Ändern des Ports kann potenzielle Angreifer abschrecken. Schritt 1: Ändere den SSH-Port Öffne die SSH-Konfigurationsdatei mit einem Texteditor: sudo nano /etc/ssh/sshd_config Suche nach der Zeile `Port 22` und ändere den Port auf eine Zahl zwischen 30000 und 65535, zum Beispiel: Port 34567 Schritt 2: Firewall anpassen Nachdem du den SSH-Port geändert hast, musst du sicherstellen, dass der neue Port in der UFW-Firewall erlaubt ist. Zum Beispiel, wenn du Port `34567` gewählt hast, gib folgenden Befehl ein: sudo ufw allow 34567/tcp Den Standard-Port 22 kannst du dann blockieren, um unnötige Verbindungen zu verhindern: sudo ufw deny 22/tcp Schritt 3: SSH-Dienst neu starten Damit die Änderungen wirksam werden, musst du den SSH-Dienst neu starten: sudo systemctl restart ssh Jetzt wird der SSH-Zugang nur noch über den neuen Port ermöglicht. Wenn du dich mit deinem Server verbinden möchtest, musst du beim SSH-Befehl den neuen Port angeben: ssh -p 34567 username@server_ip 3. Verwende SSH-Schlüssel anstelle von Passwörtern Passwörter sind oft anfällig für Brute-Force-Angriffe. Eine sichere Alternative sind SSH-Schlüssel , die viel schwieriger zu erraten oder zu knacken sind. Schritt 1: SSH-Schlüssel erzeugen Erzeuge ein SSH-Schlüsselpaar auf deinem lokalen Rechner (deinem PC) mit folgendem Befehl: ssh-keygen Drücke `Enter`, um den Standard-Speicherort zu wählen. Du kannst auch ein Passwort für zusätzlichen Schutz setzen. Schritt 2: Kopiere den öffentlichen Schlüssel auf deinen Server Übertrage deinen öffentlichen Schlüssel auf den Ubuntu-Server: ssh-copy-id -p 34567 username@server_ip Gib dein Passwort ein, wenn du dazu aufgefordert wirst. Schritt 3: Deaktiviere die Passwort-Authentifizierung Um sicherzustellen, dass nur Schlüssel-basierte Authentifizierung verwendet wird, öffne die SSH-Konfigurationsdatei erneut: sudo nano /etc/ssh/sshd_config Stelle sicher, dass die folgenden Zeilen auf "no" gesetzt sind: PasswordAuthentication no ChallengeResponseAuthentication no Schritt 4: SSH-Dienst neu starten Starte den SSH-Dienst neu, damit die Änderungen wirksam werden: sudo systemctl restart ssh 4. Aktualisiere regelmäßig dein System Sicherheitslücken werden ständig entdeckt, daher ist es wichtig, dass dein Ubuntu-System immer auf dem neuesten Stand bleibt. Schritt 1: Automatische Sicherheitsupdates aktivieren Du kannst sicherstellen, dass Sicherheitsupdates automatisch installiert werden, indem du folgendes tippst: sudo apt-get install unattended-upgrades Schritt 2: Manuelles Update durchführen Um sicherzustellen, dass dein System alle verfügbaren Updates erhält, führe regelmäßig folgende Befehle aus: sudo apt-get update sudo apt-get upgrade 5. Verwende Fail2Ban zur Abwehr von Brute-Force-Angriffen Fail2Ban ist ein Programm, das automatisch IP-Adressen sperrt, die versuchen, sich wiederholt mit falschen Anmeldeversuchen in dein System einzuloggen. Schritt 1: Installiere Fail2Ban Installiere Fail2Ban auf deinem Server: sudo apt-get install fail2ban Schritt 2: Starte und aktiviere Fail2Ban Starten und aktivieren den Fail2Ban-Dienst: sudo systemctl start fail2ban sudo systemctl enable fail2ban Schritt 3: Überwache Fail2Ban Um zu sehen, ob Fail2Ban Angreifer blockiert hat, kannst du folgendes eingeben: sudo fail2ban-client status Zusammenfassung der wichtigsten Maßnahmen 1. Installiere und aktiviere UFW , um nur erlaubte Verbindungen zu deinem Server zu lassen. 2. Ändere den SSH-Port von 22 auf einen zufälligen Port zwischen 30000 und 65535, um Brute-Force-Angriffe zu erschweren. 3. Verwende SSH-Schlüssel anstelle von Passwörtern, um eine sicherere Authentifizierung zu gewährleisten. 4. Aktualisiere regelmäßig dein System, um immer die neuesten Sicherheitsupdates zu erhalten. 5. Installiere und aktiviere Fail2Ban , um Brute-Force-Angriffe zu verhindern. Mit diesen grundlegenden Schritten kannst du deinen Ubuntu-Server gut absichern. Natürlich gibt es noch viele weitere Möglichkeiten, die Sicherheit zu erhöhen, aber dies sind die wichtigsten, die dir helfen sollten, viele der gängigen Angriffe zu verhindern. RE: Server sichern mit ufw - Manfred Aabye - 15.02.2025 # ? Was dieses Skript macht: # 1️⃣ Firewall & Sicherheitsmaßnahmen # ✅ UFW (Uncomplicated Firewall) prüfen & installieren # ➡ Falls UFW nicht installiert ist, wird sie automatisch installiert. # ✅ SSH-Port ändern # ➡ Der Benutzer kann einen neuen SSH-Port wählen, um Angriffe auf Port 22 zu vermeiden. # ✅ SSH-Schlüssel-Authentifizierung aktivieren # ➡ Deaktiviert das Login per Passwort und erlaubt nur noch Schlüssel-Authentifizierung. # ✅ Automatische Sicherheitsupdates aktivieren # ➡ Installiert unattended-upgrades, um sicherzustellen, dass dein Server immer aktuell bleibt. # ✅ Fail2Ban installieren & aktivieren # ➡ Schützt vor Brute-Force-Angriffen durch das automatische Sperren von IP-Adressen. # 2️⃣ Offene Ports & Firewall-Regeln # ✅ Alle offenen Ports anzeigen # ➡ Zeigt, welche Ports von welchen Programmen genutzt werden (ss -tulpn). # ✅ Benutzer entscheidet, welche Ports geöffnet werden # ➡ Er kann manuell wählen, welche Ports über UFW freigegeben werden sollen. # ✅ Firewall-Regeln anwenden # ➡ Blockiert alle eingehenden Verbindungen, erlaubt aber ausgehenden Traffic. # ✅ SSH-Dienst neu starten # ➡ Wendet alle Änderungen an der SSH-Konfiguration an. # 3️⃣ Erhöhte Sicherheit & Analyse # ✅ Überprüfung fehlgeschlagener Login-Versuche # ➡ Nutzt grep "Failed" /var/log/auth.log, um Angriffsversuche zu erkennen. # ✅ Optionaler Portscan mit nmap # ➡ Falls gewünscht, führt nmap einen umfassenden Scan aller 65.535 Ports durch. # ? Warum ist dieses Skript wichtig? # ✔ Minimiert Angriffsfläche: UFW schließt alle unnötigen Ports. # ✔ Schützt gegen Brute-Force: SSH-Schlüssel & Fail2Ban sichern den Zugriff. # ✔ Reduziert Sicherheitsrisiken: Automatische Updates verhindern Exploits. # ✔ Gibt dir volle Kontrolle: Du entscheidest, welche Ports wirklich nötig sind. Skript osmsafty.sh PHP-Code: #!/bin/bash |