Firewall-cmd Firewalld: 5 Tipps für Linux Host-Schutz

Blockiere Brute-Force Angriffe mithilfe von firewall-cmd (firewalld) für den Linux Host-Schutz. Ein bash-Skript, das eine IP-Adresse mit firewall-cmd (firewalld) sperrt, und es ermöglicht eine IP-Adresse durch firewall-cmd (firewalld) entfernen.

Firewall-cmd Firewalld: 5 Tipps für Linux Host-Schutz

Firewall Daemon („firewalld“) für den Schutz vor laufenden Brute-Force Attacken, bei der Erkennung versuchter Angriffe auf ein Linux Host. Blockiere verdächtige Quellen schnell. Das folgende bash Script sperrt die IP, diese als Argument übergeben wird und von firewall-cmd auf reject gesetzt wird.

#!/bin/bash
# permanently reject or remove suspicious sources by kernel firewall
# dependency: firewalld (fail2ban optional)
if [[ $1 == "add" && $2 =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
   echo "$2 add to reject"
   firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="'$2'" reject'

elif [[ $1 == "remove" && $2 =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
   echo "$2 being to remove"
   firewall-cmd --permanent --zone=public --remove-rich-rule='rule family="ipv4" source address="'$2'" reject'

 elif [[ $1 == "add6" && $2 =~ ^[A-Za-z0-9]{1,4}\:[A-Za-z0-9]{1,4}\: ]]; then
    echo "$2 add to reject"
    firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv6" source address="'$2'" reject'

  elif [[ $1 == "remove6" && $2 =~ ^[A-Za-z0-9]{1,4}\:[A-Za-z0-9]{1,4}\: ]]; then
    echo "$2 being to remove"
    firewall-cmd --permanent --zone=public --remove-rich-rule='rule family="ipv6" source address="'$2'" reject'

  else
    echo "Usage: fw add|remove [source IPv4]"
    echo "       fw add6|remove6 [source IPv6]"
    exit 0
fi
firewall-cmd --reload
sleep 1
if [[ -f /run/fail2ban/fail2ban.pid ]]; then
  systemctl restart fail2ban
else
  echo "fail2ban not running"
fi
sleep 2
firewall-cmd --list-all

Das Script wurde auf Debian 10 (buster) geschrieben, bei Debian muss firewalld erst installiert werden, wie auch unter Ubuntu 20. Bei RHEL und CentOS Linux 7 und höher wie auch bei Fedora ist firewalld im Standard und das Script ist gleich anwendbar.

Speichere die Skriptzeilen in eine Datei, beispielsweise als fw und mache sie ausführbar, dann führe das Skript aus, um eine IP-Adresse mit add zu blockieren.

$ chmod u+x fw
./fw add 192.168.89.56

Mit remove kann die IP Adresse wieder aus der Kette entfernt werden.

Firewalld Installation auf Debian

Das firewalld-Paket ist in den offiziellen Debian Repositorys verfügbar. Die Installation ist unschwer wie folgender Ablauf zeigt.

$ sudo apt update
$ sudo apt -y install firewalld

Firewalld Bereitstellung

Bereitstellung von Firewalld im Terminal als root.

$ sudo ufw disable

Wenn ufw aktiviert ist, muss die Uncomplicated Firewall (ufw) zur Verwaltung der Netfilter deaktiviert werden, um firewalld zur Standard-Firewall zu machen.

$ sudo systemctl enable firewalld
$ sudo systemctl start firewalld

Den Firewall daemon starten und für den Systemstart aktivieren.

$ sudo firewall-cmd --state
running

Ausführung und Erreichbarkeit überprüfen.

$ sudo firewall-cmd --reload

Laden der neuen Firewall-Regeln unter beibehalten des Status.

Es erscheint bei Debian nach firewall-cmd --reload der Fehler:

Error: COMMAND_FAILED: ‚/usr/sbin/ip6tables-restore -w -n‘ failed: ip6tables-restore v1.8.2 (nf_tables:
line 4: RULE_REPLACE failed (no such file or directory): rule in chain OUTPUT

Die Lösung ist das Ausführen von update-alternatives, um die Verlinkung für iptables und ip6tables anstelle von nftables zu verwenden.

$ sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
$ sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

Nach dem wechsel von nftables zu iptables den Linux Rechner mit reboot neu starten.

Firewalld Konfiguration

Firewalld ist eine Firewall-Verwaltungslösung als Frontend für das vom Linux-Kernel bereitgestellte iptables-Paketfiltersystem. firewall-cmd ist das Dienstprogramm zum Verwalten der Firewall-Konfiguration. Der firewalld Daemon verwaltet Gruppen von Regeln mithilfe von Entitäten, die als „Zonen“ bezeichnet werden. Zonen sind wie Regelsätze, die festlegen, welcher Datenverkehr zugelassen werden soll, anhand des Vertrauen der Netzwerke, mit denen der Computer verbunden ist. Den Netzwerkschnittstellen wird eine Zone zugewiesen, um das Verhalten festzulegen, das die Firewall zulassen soll.

Firewalld Zonen und Interfaces

Ein Netzwerk Interface zur Default Zone public zuweisen, unter Verwendung des firewall-cmd Tools, mit dem Befehl zur Überprüfung von Zonen und Interfaces.

$ sudo firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: dhcpv6-client https ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
        rule family="ipv4" source address="10.10.10.1" reject

Erscheint bei interfaces keine Netzwerk Schnittstelle, muss dieses der Zone noch zugeweisen werden, dazu mit ip oder ifconfig (net-tools) die Schnittstellen abfragen.

$ ip link
$ ip addr
$ ifconfig

Hier bei einem virtuellen Debian (buster) ist es Link 2 ens33.

Das Interface ens33 wird zur Default Zone public zugewiesen.

$ sudo firewall-cmd --zone=public --change-interface=ens33

Das zur Zone zugewiesene Interface überprüfen mit der Ausgabe.

$ firewall-cmd --get-active-zones
public
  interfaces: ens33
$ sudo firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources:
  services: dhcpv6-client https ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
        rule family="ipv4" source address="10.10.10.1" reject

Das Interface ens33 ist nun mit der Zone verbunden.

Fail2ban und Firewalld Interaktion

Fail2ban (Fehlschlag führt zum Bann) ist ein in Python entwickeltes IPS und Framework zur Vorbeugung gegen Einbrüche, das für alle Unixoide OS verfügbar ist, die ein manipulierbares Paketfiltersystem oder eine Firewall besitzen wie iptables oder firewalld.

Beim Script (oben), wird falls vorhanden und ausgeführt, die von Fail2ban verbannten (banned) Adressen nach der manipulation von firewalld, von fail2ban wieder hergestellt.

firewall-cmd add | remove source addr

Mit firewall-cmd verdächtige Anfragen durch die Firewall ablehnen.

$ sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.10.10.1" reject'

Die abgelehnte IP-Adresse wird wie folgt wieder entfernt.

$ sudo firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="10.10.10.1" reject'

Jede änderung muss mit firewall-cmd –reload aktiviert werden.

$ sudo firewall-cmd --reload

Anwendung und Hilfe zu firewall-cmd

$ sudo firewall-cmd --zone=public --list-all

Ausgabe der geänderten und aktivierten Regel der Zone Public.

$ sudo firewall-cmd --list-all

Aktuelle Firewall Regeln überprüfen mit iptables.

$ sudo iptables -vxnL

Standardzone für Verbindungen und Schnittstellen ausgeben.

$ firewall-cmd --get-default-zone

Eine Zone zur Defaultzone festlegen.

$ sudo firewall-cmd --set-default-zone=zone_name

Derzeit aktive Zonen ausgeben.

$ firewall-cmd --get-active-zones

Vordefinierte Zonen ausgeben.

$ firewall-cmd --get-zones

Hilfe und man page von firewall-cmd ausgeben.

$ firewall-cmd --help
$ man firewall-cmd

Netzwerk Drucker Verwaltung mit printui.dll im Command Prompt

printui.dll ist eine ausführbare Datei für die automatisierte Drucker Verwaltung, vor allem von Netzwerk Drucker und für Konfigurationsaufgaben. Mit Funktionen die von den Dialogfeldern für die Druckerkonfiguration verwendet werden. Diese Funktionen können auch aus einem Skript oder einer Befehlszeilen-Batchdatei heraus aufgerufen werden, oder interaktiv über die Eingabeaufforderung ausgeführt werden.

Netzwerk Drucker Verwaltung mit printui.dll

printui.dll wird mit rundll32.exe ausgeführt um Werkzeuge für anspruchsvolle Aufgaben bereitzustellen, für Drucker hinzufügen, Verwalten, löschen und Netzwerkdruckerverbindung herstellen.

Eigenschaften von Druckerserver öffnen

Netzwerk Drucker Verwaltung mit printui.dll im Command Prompt
Eigenschaften von Druckerserver öffnen
Eigenschaften von Druckerserver Abschnitt Treiber

Verbindung zu Netzwerk Drucker mit rundll32 printui.dll herstellen:

rundll32.exe printui.dll,PrintUIEntry /in /n \\server\LaserJet

Der auf dem SERVER freigegebene Netzwerkdrucker LaserJet wird auf dem Client Computer installiert und mit dem Server verbunden.

Drucker Installation mithilfe von rundll32 printui.dll und der Druckertreiber INF-Datei:

rundll32 printui.dll,PrintUIEntry /if /b "AddressLabel" /f C:\Driver\Zebra\ZBRN\ZBRN.inf /r "10.10.10.89" /m "ZDesigner GK420t" /Z

/if Installiert Drucker mithilfe der angegebenen INF-Datei.
/b Basisdruckername AddressLabel
/f Pfad zu der Druckertreiber INF-Datei.
/r Portname oder IP Adresse.
/m Modellname des Druckertreibers aus der INF-Datei.
/Z Drucker freigeben, Verwendung nur mit Option „/if“ möglich.

Lokaler Druckertreiber löschen mit rundll32 printui.dll:

rundll32 printui.dll,PrintUIEntry /dd /m "LaserJet" /q

/dd Löscht den lokalen Druckertreiber.
/m Modellname des Druckertreibers.
/q Mögliche Fehlermeldungen nicht ausgeben.

Verbindung zu Netzwerk Drucker löschen mit rundll32 printui.dll:

rundll32 printui.dll,PrintUIEntry /dn /n "LaserJet" /q

/dn Löscht die Netzwerkdruckerverbindung.
/n Der Name des Druckers.

  Hilfe zu printui.dll wird mit folgendem Kommando in der Eingabeaufforderung ausgegeben.

rundll32 printui.dll,PrintUIEntry /?

Batch Beispiel: Netzwerk Drucker Verbinden mit rundll32 printui.dll:

Beispiel für Netzwerkdruckerverbindung aus einem Loginscript.

@echo off
@REM Batchdatei Netzwerkdruckerverbindung
if /i %computername:~0,2%==BE goto Bern 
if /i %computername:~0,2%==BS goto Basel
if /i %computername:~0,7%==SPECTRE goto LAPTOP
goto END
:Bern
@REM Netzwerkdruckerverbindung Bern
rundll32 printui.dll,PrintUIEntry /in /n \\SERVER\LaserJet_BE
goto END
:Basel
@REM Netzwerkdruckerverbindung Basel
rundll32 printui.dll,PrintUIEntry /in /n \\SERVER\LaserJet_BS
goto END
:LAPTOP
@REM Netzwerkdruckerverbindung SPECTRE
rundll32 printui.dll,PrintUIEntry /in /n \\SERVER\OfficeJet_HO
goto END
:END