So installierst und konfigurierst du die Config Server Firewall (CSF) unter Rocky Linux 9

Config Server Security and Firewall (CSF) ist eine iptables-basierte Firewall, die ein hohes Maß an Sicherheit für das Linux-System bietet. Dazu führt sie eine Stateful Packet Inspection (SPI) durch.

Sie verfügt über zahlreiche Funktionen wie IP-Blockierung, Port-Blockierung und DDoS-Schutz. Außerdem unterstützt es Ratenbegrenzung, Verbindungsverfolgung und SSH-Login-Erkennung. Außerdem enthält es Tools zur Überprüfung der System- und Dateiintegrität. Die Software verfügt über ein GUI-Dashboard, über das du die Einstellungen verwalten kannst. Du kannst CSF auch in Control Panels wie DirectAdmin, cPanel, Cyberpanel, Vesta und Webmin integrieren.

In diesem Lernprogramm lernst du, wie du CSF auf einem Rocky Linux 9 Server installierst und verwaltest.

Voraussetzungen

  • Ein Server mit Rocky Linux 9 und mindestens 1 GB RAM.
  • Ein Nicht-Root-Benutzer mit sudo-Rechten.
  • Ein Fully Qualified Domain Name (FQDN) wie csf.example.com, der auf deinen Server zeigt.
  • Alles ist auf dem neuesten Stand.
    $ sudo dnf update
    
  • Ein paar wichtige Pakete werden benötigt, damit das Tutorial und das Craft CMS laufen. Einige davon befinden sich bereits auf deinem Server.
    $ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y
    

Schritt 1 – Deaktiviere die Firewalld Firewall

Rocky Linux verwendet standardmäßig die Firewalld Firewall. Wir müssen sie zuerst deaktivieren, damit sie die CSF nicht beeinträchtigt.

Überprüfe zuerst den Status der Firewalld-Firewall.

$ sudo systemctl status firewalld
? firewalld.service - firewalld - dynamic firewall daemon
     Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; preset: enabled)
     Active: active (running) since Tue 2023-12-05 07:00:53 UTC; 40s ago
       Docs: man:firewalld(1)
   Main PID: 58756 (firewalld)
      Tasks: 2 (limit: 4424)
     Memory: 25.9M
        CPU: 496ms
     CGroup: /system.slice/firewalld.service
             ??58756 /usr/bin/python3 -s /usr/sbin/firewalld --nofork --nopid

Dec 05 07:00:52 csf.example.com systemd[1]: Starting firewalld - dynamic firewall daemon...
Dec 05 07:00:53 csf.example.com systemd[1]: Started firewalld - dynamic firewall daemon.

Stoppe und deaktiviere den Firewalld-Dienst.

$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld

Schritt 2 – Erforderliche Perl-Module installieren

Der CSF benötigt bestimmte Perl-Module, um zu laufen. Aber zuerst brauchen wir das EPEL-Repository. Installiere sie.

$ sudo dnf install epel-release

Installiere sie mit dem folgenden Befehl.

$ sudo dnf install perl-core perl-libwww-perl.noarch perl-LWP-Protocol-https.noarch perl-GDGraph -y

Schritt 3 – CSF herunterladen und installieren

CSF ist nicht im Rocky Linux Repository verfügbar. Daher müssen wir es manuell installieren.

Lade die neueste Version des CSF-Archivs von der Website herunter.

$ wget https://download.configserver.com/csf.tgz

Entpacke das Archiv.

$ tar xzf csf.tgz

Wechsle in das entpackte Verzeichnis.

$ cd csf

Installiere CSF, indem du das Installer-Skript aufrufst.

$ sudo ./install.sh

Du solltest die folgende Ausgabe erhalten.

...............
Don't forget to:
1. Configure the following options in the csf configuration to suite your server: TCP_*, UDP_*
2. Restart csf and lfd
3. Set TESTING to 0 once you're happy with the firewall, lfd will not run until you do so
'lfd.service' -> '/usr/lib/systemd/system/lfd.service'
'csf.service' -> '/usr/lib/systemd/system/csf.service'
Created symlink /etc/systemd/system/multi-user.target.wants/csf.service ? /usr/lib/systemd/system/csf.service.
Created symlink /etc/systemd/system/multi-user.target.wants/lfd.service ? /usr/lib/systemd/system/lfd.service.
Unit /etc/systemd/system/firewalld.service is masked, ignoring.
The unit files have no installation config (WantedBy=, RequiredBy=, Also=,
Alias= settings in the [Install] section, and DefaultInstance= for template
units). This means they are not meant to be enabled or disabled using systemctl.

Possible reasons for having this kind of units are:
• A unit may be statically enabled by being symlinked from another unit's
  .wants/ or .requires/ directory.
• A unit's purpose may be to act as a helper for some other unit which has
  a requirement dependency on it.
• A unit may be started when needed via activation (socket, path, timer,
  D-Bus, udev, scripted systemctl call, ...).
• In case of template units, the unit is meant to be enabled with some
  instance name specified.
'/etc/csf/csfwebmin.tgz' -> '/usr/local/csf/csfwebmin.tgz'

Installation Completed

Prüfe, ob die erforderlichen iptables-Module verfügbar sind.

$ sudo perl /usr/local/csf/bin/csftest.pl

Du solltest die folgende Ausgabe sehen.

Testing ip_tables/iptable_filter...OK
Testing ipt_LOG...OK
Testing ipt_multiport/xt_multiport...OK
Testing ipt_REJECT...OK
Testing ipt_state/xt_state...OK
Testing ipt_limit/xt_limit...OK
Testing ipt_recent...OK
Testing xt_connlimit...OK
Testing ipt_owner/xt_owner...OK
Testing iptable_nat/ipt_REDIRECT...OK
Testing iptable_nat/ipt_DNAT...OK

RESULT: csf should function on this server

Überprüfe die CSF-Version.

$ sudo csf -v
csf: v14.20 (generic)
*WARNING* TESTING mode is enabled - do not forget to disable it in the configuration

Schritt 4 – CSF konfigurieren

CSF speichert seine Konfiguration in der Datei /etc/csf/csf.conf. Öffne die Datei zur Bearbeitung.

$ sudo nano /etc/csf/csf.conf

Der erste Schritt besteht darin, den Testmodus zu deaktivieren. Ändere den Wert der Variable TESTING von 1 in 0.

TESTING = "0"

Suche die Zeile RESTRICT_SYSLOG = "0" und ändere ihren Wert auf 3. Das bedeutet, dass nur Mitglieder der RESTRICT_SYSLOG_GROUP auf die syslog/rsyslog Dateien zugreifen können. Die RESTRICT_SYSLOG_GROUP enthält standardmäßig die Benutzer root, mysql, rpc, daemon, dbus und mehrere cPanel und DirectAdmin Benutzer. Du kannst weitere Benutzer hinzufügen, indem du die Datei /etc/csf/csf.syslogusers bearbeitest.

Schritt 5 – Ports konfigurieren

CSF hält standardmäßig die folgenden Ports offen.

# Allow incoming TCP ports
TCP_IN = "20,21,22,25,53,853,80,110,143,443,465,587,993,995"

# Allow outgoing TCP ports
TCP_OUT = "20,21,22,25,53,853,80,110,113,443,587,993,995"

# Allow incoming UDP ports
UDP_IN = "20,21,53,853,80,443"

# Allow outgoing UDP ports
# To allow outgoing traceroute add 33434:33523 to this list
UDP_OUT = "20,21,53,853,113,123"

Die Dienste, die diese Ports nutzen, sind:

  • Port 20: FTP-Datenübertragung
  • Port 21: FTP-Kontrolle
  • Port 22: Sichere Shell (SSH)
  • Port 25: Einfaches Mail-Übertragungsprotokoll (SMTP)
  • Port 53: Domain Name System (DNS)
  • Anschluss 80: Hypertext-Übertragungsprotokoll (HTTP)
  • Anschluss 110: Post Office Protocol v3 (POP3)
  • Anschluss 113: Authentifizierungsdienst/Identifizierungsprotokoll
  • Anschluss 123: Netzwerkzeitprotokoll (NTP)
  • Port 143: Internet Message Access Protocol (IMAP)
  • Port 443: Hypertext-Übertragungsprotokoll über SSL/TLS (HTTPS)
  • Anschluss 465: URL Rendezvous-Verzeichnis für SSM (Cisco)
  • Anschluss 587: Übermittlung von E-Mail-Nachrichten (SMTP)
  • Port 993: Internet Message Access Protocol über SSL (IMAPS)
  • Anschluss 995: Post Office Protocol 3 über TLS/SSL (POP3S)

Wenn du nicht alle diese Ports offen haben musst, kannst du einige von ihnen entfernen, um die Sicherheit zu erhöhen. Wenn du IPv6 für deine Dienste verwendest, musst du die Ports TCP6_IN, TCP6_OUT, UDP6_IN und UDP6_OUT wie gezeigt konfigurieren.

# Allow incoming IPv6 TCP ports
TCP6_IN = "20,21,22,25,53,853,80,110,143,443,465,587,993,995"

# Allow outgoing IPv6 TCP ports
TCP6_OUT = "20,21,22,25,53,853,80,110,113,443,587,993,995"

# Allow incoming IPv6 UDP ports
UDP6_IN = "20,21,53,853,80,443"

# Allow outgoing IPv6 UDP ports
# To allow outgoing traceroute add 33434:33523 to this list
UDP6_OUT = "20,21,53,853,113,123"

Ändere die Ports entsprechend deinen Anforderungen.

Schritt 6 – Zusätzliche CSF-Einstellungen

Es gibt eine Menge Einstellungen zu konfigurieren. Gehen wir einige der am häufigsten verwendeten Einstellungen durch.

ICMP_IN – Wenn du diese Variable auf 1 setzt, werden Pings an deinen Server zugelassen, während 0 solche Anfragen abweist. Es wird empfohlen, ICMP-Anfragen zuzulassen, wenn du öffentliche Dienste hostest, damit festgestellt werden kann, ob dein Dienst verfügbar ist.

ICMP_IN_LIMIT – legt die Anzahl der Anfragen fest, die von einer einzelnen IP-Adresse innerhalb einer bestimmten Zeitspanne zugelassen werden. Es wird empfohlen, den Wert unverändert zu lassen.

DENY_IP_LIMIT – schränkt die Anzahl der IP-Adressen ein, die vom CSF blockiert werden. Wenn die Anzahl der gesperrten IPs diese Zahl übersteigt, hebt der CSF die Sperrung der ältesten IP auf, die der erste Eintrag in der Datei /etc/csf/csf.deny ist. Wenn du diese Zahl zu hoch ansetzt, kann der Server langsamer werden. Wähle die Zahl entsprechend den Ressourcen deines Servers.

DENY_TEMP_IP_LIMIT – dasselbe wie oben, aber für temporäre IP-Adresssperren.

PACKET_FILTER – filtert ungültige, unerwünschte und illegale Datenpakete.

CONNLIMIT – begrenzt die Anzahl der gleichzeitigen aktiven Verbindungen, die auf einem einzelnen Port erlaubt sind. Du kannst ihn wie folgt einstellen.

CONNLIMIT = "22;5;443;20"

Der obige Wert bedeutet, dass nur 5 gleichzeitige Verbindungen auf Port 22 pro IP-Adresse und nur 20 gleichzeitige Verbindungen auf Port 443 pro IP-Adresse erlaubt sind.

PORTFLOOD – begrenzt die Anzahl der Verbindungen pro Zeitintervall, in dem neue Verbindungen zu bestimmten Ports hergestellt werden können. Du kannst ihn wie folgt einstellen.

PORTFLOOD = "22;tcp;5;250"

Der obige Wert blockiert die IP-Adresse, wenn innerhalb von 250 Sekunden mehr als 5 Verbindungen über das TCP-Protokoll auf Port 22 aufgebaut werden. Die Sperre wird nach 250 Sekunden wieder aufgehoben. Du kannst weitere Ports hinzufügen, indem du Kommas setzt.

PORTFLOOD = "22;tcp;5;250,80;tcp;10;300"

Wenn du fertig bist, speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Starte und aktiviere die Dienste CSF und LFD.

$ sudo systemctl start csf lfd
$ sudo systemctl enable csf lfd

Überprüfe den Status des CSF-Dienstes.

$ sudo systemctl status csf
? csf.service - ConfigServer Firewall & Security - csf
     Loaded: loaded (/usr/lib/systemd/system/csf.service; enabled; preset: disabled)
     Active: active (exited) since Tue 2023-12-05 13:57:59 UTC; 2min 7s ago
   Main PID: 11050 (code=exited, status=0/SUCCESS)
        CPU: 1.192s

Dec 05 13:57:59 csf.example.com csf[11050]: ACCEPT  all opt    in * out lo  ::/0  -> ::/0
Dec 05 13:57:59 csf.example.com csf[11050]: LOGDROPOUT  all opt    in * out !lo  ::/0  -> ::/0
Dec 05 13:57:59 csf.example.com csf[11050]: LOGDROPIN  all opt    in !lo out *  ::/0  -> ::/0
Dec 05 13:57:59 csf.example.com csf[11050]: csf: FASTSTART loading DNS (IPv4)
Dec 05 13:57:59 csf.example.com csf[11050]: csf: FASTSTART loading DNS (IPv6)
Dec 05 13:57:59 csf.example.com csf[11050]: LOCALOUTPUT  all opt -- in * out !lo  0.0.0.0/0  -> 0.0.0.0/0
Dec 05 13:57:59 csf.example.com csf[11050]: LOCALINPUT  all opt -- in !lo out *  0.0.0.0/0  -> 0.0.0.0/0
Dec 05 13:57:59 csf.example.com csf[11050]: LOCALOUTPUT  all opt    in * out !lo  ::/0  -> ::/0
Dec 05 13:57:59 csf.example.com csf[11050]: LOCALINPUT  all opt    in !lo out *  ::/0  -> ::/0
Dec 05 13:57:59 csf.example.com systemd[1]: Finished ConfigServer Firewall & Security - csf.

Überprüfe die offenen Ports, wenn der CSF-Dienst läuft.

$ sudo csf -p
Ports listening for external connections and the executables running behind them:
Port/Proto Open Conn  PID/User             Command Line                            Executable
22/tcp     4/6  2     (863/root)           sshd: /usr/sbin/sshd -D [listener] 0... /usr/sbin/sshd
111/tcp    -/-  -     (1/root)             /usr/lib/systemd/systemd --switched-... /usr/lib/systemd/systemd
111/tcp    -/-  -     (642/rpc)            /usr/bin/rpcbind -w -f                  /usr/bin/rpcbind
111/udp    -/-  -     (1/root)             /usr/lib/systemd/systemd --switched-... /usr/lib/systemd/systemd
111/udp    -/-  -     (642/rpc)            /usr/bin/rpcbind -w -f                  /usr/bin/rpcbind
323/udp    -/-  -     (679/chrony)         /usr/sbin/chronyd -F 2                  /usr/sbin/chronyd

AUTO_UPDATES – Der Wert 0 deaktiviert die automatischen Updates. Ändere ihn in 1, wenn du automatische Aktualisierungen möchtest. Dadurch wird ein Cron-Job erstellt, der einmal am Tag läuft, um automatische Aktualisierungen durchzuführen und die Dienste csf und lfd neu zu starten.

ETH_DEVICE – Standardmäßig filtert der CSF den Datenverkehr auf allen Netzwerkkarten, mit Ausnahme der Loopback-Karte. Wenn du möchtest, dass die Regeln nur für die eth0 Karte gelten, dann setze den Wert auf eth0.

LF_DAEMON – setze den Wert auf 1, um die Funktion zur Erkennung von Login-Fehlern im CSF zu aktivieren.

LF_CSF – setze den Wert auf 1, um die Funktion für den automatischen Neustart des CSF zu aktivieren. Sie wartet alle 300 Sekunden, um die Prüfung durchzuführen.

LF_SELECT – setzt den Wert auf 1, wenn die IP-Adresse gegen die LFD-Regeln verstößt, wird nur der Datenverkehr zu dem Dienst blockiert, bei dem die IP-Anmeldung fehlschlägt, anstatt den gesamten Datenverkehr zu blockieren.

LF_SSHD – legt die Anzahl der Male fest, nach denen die falsche SSH-Verbindung blockiert wird.

CT_LIMIT – begrenzt die Anzahl der Verbindungen von einer einzelnen IP-Adresse zum Server. Wenn die Anzahl der Verbindungen den eingestellten Wert überschreitet, wird die IP-Adresse vorübergehend blockiert.

Schritt 7 – IP-Adressen zulassen und blockieren

Das Sperren und Zulassen von IP-Adressen ist eine der grundlegendsten Fähigkeiten einer Firewall. Im CSF kannst du IP-Adressen mit Hilfe der Konfigurationsdateien csf.deny, csf.allow und csf.ignore sperren (Blacklist), zulassen (Whitelist) oder ignorieren.

Öffne die Datei csf.deny zur Bearbeitung.

$ sudo nano /etc/csf/csf.deny

Gesperrte IP-Adressen oder Bereiche müssen in einer Zeile hinzugefügt werden. Wenn du zum Beispiel die IP-Adresse 1.2.3.4 und den Bereich 2.3.*.* sperren willst, füge sie wie folgt hinzu.

1.2.3.4 2.3.0.0/16

Wenn du fertig bist, speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Die erlaubten IP-Adressen müssen in der Datei csf.allow konfiguriert werden. Die erlaubten IP-Adressen sind auch dann erlaubt, wenn sie in der Datei csf.deny blockiert sind, also musst du darauf achten.

Öffne die Datei csf.allow zur Bearbeitung.

$ sudo nano /etc/csf/csf.allow

Die IP-Adressen müssen auf dieselbe Weise hinzugefügt werden wie in der Sperrdatei.

Ignorierte IP-Adressen sind von den Firewall-Filtern ausgeschlossen. Sie können nur blockiert werden, wenn sie in der Datei csf.deny aufgeführt sind. Öffne die Datei csf.ignore zur Bearbeitung.

$ sudo nano /etc/csf/csf.ignore

Wenn du alle notwendigen Änderungen vorgenommen hast, musst du die Firewall neu starten. Verwende dazu den folgenden Befehl.

$ sudo csf -r

Schritt 8 – Schutz vor DDoS-Angriffen

Wir wollen uns ansehen, wie die CSF zum Schutz vor Distributed Denial of Service (DDoS)-Angriffen beitragen kann, indem wir die folgenden Konfigurationen vornehmen.

SYN Flood-Schutz

Dies ist eine Art von DDoS-Angriff, bei dem ein Angreifer eine große Anzahl von SYN-Paketen an einen Server sendet. Um den Schutz vor solchen Angriffen zu aktivieren, aktiviere die folgenden Einstellungen in der Datei /etc/csf/csf.conf.

SYNFLOOD = "1"
SYNFLOOD_RATE = "100/s"
SYNFLOOD_BURST = "150"

Dadurch wird der SYN-Flood-Schutz aktiviert und die Raten- und Burst-Grenzen für eingehende Angriffe konfiguriert. Diese Optionen sollten nur aktiviert werden, wenn du von einem SYN-Angriff betroffen bist, weil dadurch alle neuen Verbindungen von jeder IP-Adresse verlangsamt werden.

Blocklisten

CSF lässt sich in verschiedene IP-basierte Blocklisten integrieren, um zu verhindern, dass sich bösartige IP-Adressen mit dem Server verbinden. CSF speichert bereits die Konfiguration für beliebte Blocklisten wie Spamhaus, Project Honey Pot, BruteForceBlocker, Blocklist.de, Stop Forum Spam, etc. in der Datei /etc/csf/csf.blocklists. Öffne die Datei zur Bearbeitung.

$ sudo nano /etc/csf/csf.blocklists

Hebe die Kommentare in den folgenden Abschnitten auf, um die Spamhaus-Blocklisten zu aktivieren.

# Spamhaus Don't Route Or Peer List (DROP)
# Details: http://www.spamhaus.org/drop/
SPAMDROP|86400|0|http://www.spamhaus.org/drop/drop.txt

# Spamhaus IPv6 Don't Route Or Peer List (DROPv6)
# Details: http://www.spamhaus.org/drop/
SPAMDROPV6|86400|0|https://www.spamhaus.org/drop/dropv6.txt

# Spamhaus Extended DROP List (EDROP)
# Details: http://www.spamhaus.org/drop/
SPAMEDROP|86400|0|http://www.spamhaus.org/drop/edrop.txt

Wenn du fertig bist, speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst. Du kannst auch deine Blockliste hinzufügen. Das Format für das Hinzufügen einer neuen Liste ist wie folgt.

NAME|INTERVAL|MAX|URL

NAME – ist der Name der Liste mit allen Großbuchstaben und ohne Leerzeichen und maximal 25 Zeichen.

INTERVALL – Aktualisierungsintervall zum Herunterladen der Liste. Es sollte mindestens 3600 Sekunden betragen.

MAX – maximale Anzahl der IP-Adressen, die aus der Liste verwendet werden sollen. Ein Wert von 0 bedeutet alle IP-Adressen.

URL – die URL, von der die Liste heruntergeladen werden soll.

Sperrung auf Länderebene

Mit CSF kannst du den Zugriff aus bestimmten Ländern blockieren. Das kann nützlich sein, wenn du den Zugang aus Ländern einschränken willst, die dafür bekannt sind, DDoS-Angriffe zu starten. Es gibt zwei Methoden für CSF, um IP-Adressen mit Ländern abzugleichen. Die Standardmethode verwendet DB-IP, ipdeny.com und iptoasn.com als Quellen. Sie sind kostenlos und erfordern keinen Lizenzschlüssel, können aber unzuverlässig sein. Wenn du eine genaue Blockierung willst, brauchst du einen MaxMind-Lizenzschlüssel. MaxMind bietet ebenfalls eine kostenlose Lizenz an. Du kannst sie benutzen. Sobald du den Lizenzschlüssel hast, konfiguriere die folgenden zwei Einstellungen in der Datei /etc/csf/csf.conf.

MM_LICENSE_KEY = "XXXXXXXXXXX"
CC_SRC = "1"

Sobald du das konfiguriert hast, verwende die folgende Konfiguration, um IP-Adressen aus Russland zu blockieren.

CC_DENY = "RU"

Mit der folgenden Einstellung kannst du Verbindungen nur aus bestimmten Ländern zulassen.

CC_ALLOW_FILTER = "IN,GB"

Mit dieser Einstellung werden nur Verbindungen aus Indien und dem Vereinigten Königreich (UK) zugelassen. Speichere und schließe die Datei, wenn du fertig bist.

Starte die Firewall neu, sobald du die Konfiguration abgeschlossen hast.

$ sudo csf -r

Es gibt noch andere Möglichkeiten, DDoS-Angriffe zu verhindern, wie z. B. Port Flooding und Verbindungsbegrenzung, die wir bereits in Schritt 6 besprochen haben.

Schritt 9 – Häufig verwendete CSF-Befehle

Aktiviert und startet CSF.

$ sudo csf -e

Deaktiviert CSF.

$ sudo csf -x

Startet die Firewall-Regeln.

$ sudo csf -s

Flush/Stopp der Firewall-Regeln.

$ sudo csf -f

Startet die Firewall neu.

$ sudo csf -r

Fügt die IP-Adresse zur temporären Verbotsliste hinzu. (/var/lib/csf/csf.tempban)

$ sudo csf -td 1.2.3.4

Entfernt die IP-Adresse aus der temporären Verbotsliste.

$ sudo csf -tr 1.2.3.4

Löscht alle IP-Adressen aus den temporären Einträgen.

$ sudo csf -tf

Fügt die IP-Adresse zur Deny-Liste hinzu.

$ sudo csf -d 1.2.3.4

Entfernt die IP-Adresse aus der Verweigerungsliste.

$ sudo csf -dr 1.2.3.4

Entfernt alle IP-Adressen aus der Verweigerungsliste.

$ sudo csf -dr

Erlaubt eine IP-Adresse.

$ sudo csf -a 1.2.3.4

Entfernt eine IP-Adresse aus der allow-Liste.

$ sudo csf -ar 1.2.3.4

Durchsucht die iptables- und ip6tables-Regeln nach einer IP-Adresse, CIDR und Portnummer.

$ sudo csf -g 1.2.3.4
$ sudo csf -g 80

Schritt 10 – Aktivieren der CSF-GUI

Die CSF verfügt über eine webbasierte Oberfläche zur Verwaltung der Firewall. Sie ist standardmäßig deaktiviert. Bevor wir die GUI aktivieren, müssen wir noch ein paar Perl-Module installieren.

$ sudo dnf install perl-IO-Socket-SSL.noarch perl-Net-SSLeay perl-IO-Socket-INET6 perl-Socket6 -y

Öffne die CSF-Konfigurationsdatei.

$ sudo nano /etc/csf/csf.conf

Suche die Zeile UI = "0" und ändere den Wert wie unten angegeben.

UI = "1"

Ändere den Port, über den das Webpanel erreichbar ist. CSF verwendet standardmäßig Port 6666, der aber vom Chrome-Browser als unsicherer Port blockiert wird. Deshalb müssen wir seinen Wert ändern. Wähle einen Port, der größer als 1024 ist. Für unser Tutorial werden wir Port 1037 verwenden.

UI_PORT = "1037"

Verwende die folgende Variable, um nur ausgewählten IP-Adressen zu erlauben, sich mit dem Webpanel zu verbinden. Lass sie leer, um alle IP-Adressen auf dem Server zu verbinden.

UI_IP = "1.2.3.4"

Konfiguriere die Anmeldedaten für das Webpanel.

UI_USER = "username"
UI_PASS = "password"

Standardmäßig erlaubt CSF den Zugriff auf das Web-Panel nur von den IP-Adressen, die in der Datei /etc/csf/ui/ui.allow aufgeführt sind. Wenn du möchtest, dass es von allen IP-Adressen aus zugänglich ist, setze die Variable UI_ALLOW auf 0.

UI_ALLOW = "0"

Wenn du fertig bist, speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Auch die gesperrten IP-Adressen müssen der Datei /etc/csf/ui/ui.ban hinzugefügt werden.

Das CSF-Webpanel verwendet selbstsignierte Zertifikate. Du kannst dafür auch Let’s Encrypt SSL-Zertifikate verwenden.

Schritt 11 – Let’s Encrypt SSL installieren und konfigurieren

Wir müssen Certbot installieren, um das SSL-Zertifikat zu erstellen. Dazu verwenden wir den Snapd-Paketinstaller. Da Rocky Linux nicht mit diesem Paket ausgeliefert wird, installierst du den Snapd-Installer. Er benötigt das EPEL (Extra Packages for Enterprise Linux) Repository, um zu funktionieren. Da wir es aber bereits in Schritt 2 installiert haben, können wir direkt fortfahren.

Installiere Snapd.

$ sudo dnf install -y snapd

Aktiviere und starte den Snap-Dienst.

$ sudo systemctl enable snapd --now

Installiere das Snap-Kernpaket und vergewissere dich, dass deine Snapd-Version auf dem neuesten Stand ist.

$ sudo snap install core && sudo snap refresh core

Erstelle die notwendigen Links, damit Snapd funktioniert.

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

Installiere Certbot.

$ sudo snap install --classic certbot

Stelle mit dem folgenden Befehl sicher, dass der Certbot-Befehl ausgeführt werden kann, indem du einen symbolischen Link auf das Verzeichnis /usr/bin erstellst.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Überprüfe, ob Certbot richtig funktioniert.

$ certbot --version
certbot 2.7.4

Führe den folgenden Befehl aus, um ein SSL-Zertifikat zu erzeugen.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m name@example.com -d csf.example.com

Mit dem obigen Befehl wird ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/csf.example.com auf deinem Server heruntergeladen.

Benenne die alten selbstsignierten Zertifikate um.

$ sudo mv /etc/csf/ui/server.crt /etc/csf/ui/server.crt.old
$ sudo mv /etc/csf/ui/server.key /etc/csf/ui/server.key.old

Kopiere die generierten SSL-Zertifikate in das Verzeichnis /etc/csf/ui.

$ sudo cp /etc/letsencrypt/live/csf.example.com/fullchain.pem /etc/csf/ui/server.crt
$ sudo cp /etc/letsencrypt/live/csf.example.com/privkey.pem /etc/csf/ui/server.key

Starte die Dienste CSF und LFD neu.

$ sudo systemctl restart csf lfd

Es gibt noch eine Sache, die wir konfigurieren müssen. Das SSL-Zertifikat wird alle 90 Tage automatisch erneuert, was bedeutet, dass du die Zertifikate manuell kopieren musst. Wir können dies jedoch automatisieren.

Erstelle die Datei /etc/csf/certcopy.sh, um die Zertifikate nach jeder Erneuerung zu kopieren, und öffne sie zur Bearbeitung.

$ sudo nano /etc/csf/certcopy.sh

Füge den folgenden Code in die Datei ein.

#!/bin/sh
cp -f /etc/letsencrypt/live/csf.example.com/fullchain.pem /etc/csf/ui/server.crt
cp -f /etc/letsencrypt/live/csf.example.com/privkey.pem /etc/csf/ui/server.key

Wenn du fertig bist, speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst. Mache die Datei ausführbar.

$ sudo chmod +x /etc/csf/certcopy.sh

Öffne die Datei /etc/letsencrypt/renewal/csf.example.com.conf zur Bearbeitung.

$ sudo nano /etc/letsencrypt/renewal/csf.example.com.conf

Füge die folgende Zeile am Ende der Datei ein.

post_hook = /etc/csf/certcopy.sh

Wenn du fertig bist, speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst. Mit der Option post_hook wird das Skript certcopy.sh nach jeder Erneuerung ausgeführt, sodass die Zertifikate nicht mehr manuell kopiert werden müssen.

Überprüfe den Certbot Erneuerungsdienst.

$ sudo systemctl list-timers

Dort findest du snap.certbot.renew.service als einen der Dienste, die für die Ausführung vorgesehen sind.

NEXT                        LEFT         LAST                        PASSED     UNIT                      ACTIVATES     
---------------------------------------------------------------------------------------------------------------------------               
Wed 2023-12-06 07:23:57 UTC 18min left Wed 2023-12-06 06:04:46 UTC 1h 0min ago dnf-makecache.timer          dnf-makecache.service
Wed 2023-12-06 07:24:15 UTC 40min left Wed 2023-12-06 00:00:01 UTC 6h ago      logrotate.timer              logrotate.service
Wed 2023-12-06 18:39:00 UTC 10h left   Wed 2023-12-06 03:25:07 UTC 2h 4min ago snap.certbot.renew.timer     snap.certbot.renew.service

Führe einen Probelauf durch, um zu prüfen, ob die SSL-Erneuerung einwandfrei funktioniert.

$ sudo certbot renew --dry-run

Wenn du keine Fehler siehst, bist du bereit. Dein Zertifikat wird automatisch erneuert. Die Zertifikate werden kopiert und du kannst sie überprüfen, indem du die Auflistung des Verzeichnisses /etc/csf/ui überprüfst.

$ sudo ls /etc/csf/ui -al
drw-------. 3 root root  130 Dec  6 05:57 .
drw-------. 4 root root 4096 Dec  6 06:09 ..
drw-------. 3 root root 4096 Dec  6 00:06 images
-rw-r--r--. 1 root root 5242 Dec  6 06:09 server.crt
-rw-------. 1 root root 1220 Jun 17  2020 server.crt.old
-rw-------. 1 root root  241 Dec  6 06:09 server.key
-rw-------. 1 root root 1704 Jun 17  2020 server.key.old
-rw-------. 1 root root   15 Dec  5 23:34 ui.allow
-rw-------. 1 root root    0 Feb  1  2013 ui.ban

Schritt 12 – Zugriff auf das CSF-Webpanel

Besuche die URL https://csf.example.com:1037 und du wirst von der folgenden Anmeldeseite begrüßt.

CSF Login Seite

Gib deine Anmeldedaten ein und klicke auf die Eingabetaste, um dich einzuloggen und du erhältst die folgende Seite.

CSF Web Panel Homepage

Es gibt sogar eine mobile Ansicht, zu der du über die Schaltfläche Mobile Ansicht wechseln kannst.

CSF Mobile View

Im Webpanel kannst du alle Firewall-Einstellungen konfigurieren. Dieses Web-Panel lässt sich gut mit anderen Control Panels integrieren.

Schritt 13 – CSF deinstallieren

Wenn du CSF aus irgendeinem Grund entfernen möchtest, kannst du mit dem folgenden Befehl das Deinstallationsskript ausführen.

$ sudo sh /etc/csf/uninstall.sh

Aktiviere und starte die Firewalld Firewall.

$ sudo systemctl enable firewalld --now

Fazit

Damit ist der Lehrgang zur Installation und Konfiguration der Config Server Firewall (CSF) auf einem Rocky Linux 9 Server abgeschlossen. Wenn du noch Fragen hast, schreibe sie in die Kommentare unten.

Das könnte dich auch interessieren …