firewalld-Basics in der Konsole

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Hinweis: In dem Thema firewalld-Basics in der Konsole gibt es 8 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • firewalld-Basics in der Konsole

    Da es immer mal wieder Fragen zu firewalld gibt, habe ich mal hier die wichtigsten Konsolen-Befehle / Beispiele aufgeführt.
    Natürlich kann man, um seine Firewall zu konfigurieren, auch Yast benutzen.
    Aber nicht jeder hat eine grafische Oberfläche bzw. der Eine oder Andere möchte es einfach nur besser verstehen.

    Anmerkung:
    Alle Firewall-Änderungen (nur als Root) können immer mit oder ohne den Befehl "--permanent" erfolgen.
    Ohne "--permanent" ist spätestens nach einem Reboot alles wieder hinfällig - somit gut zum Testen.

    Vordefinierte Standard-Zonen:
    (Der Standard ist, dass eingehende Verbindungen blockiert und ausgehende Verbindungen akzeptiert werden)

    Block:
    Eingehende Verbindungen werden blockiert, aber der Absender / Angreifer erhält zumindest eine Antwort, dass er hier von außen nicht reinkommt (icmp-host-deny oder icmp6-adm-deny).

    DMZ:
    DeMilitarisierte Zone ist für Systeme, die sich innerhalb eines Netzwerkes und zwischen zwei Firewalls befinden.

    Drop (mein Favorit - Dank an @Tamerlain):
    Alle eingehenden Verbindungen werden ohne eine Antwort blockiert und nur ausgehende Verbindungen sind möglich.

    External:
    Firewall als Gateway verwenden. Hier ist firewalld für NAT-Masquerading konfiguriert, so dass das interne Netzwerk privat aber erreichbar ist.

    Home:
    Es bedeutet im Allgemeinen, dass man den eigenen Computern im Home-Netz vertraut und dass weitere Dienste akzeptiert werden.

    Internal:
    Die andere Seite der externen Zone, die für den internen Teil eines Gateways verwendet wird. Die Computer sind ziemlich vertrauenswürdig und einige zusätzliche Dienste sind verfügbar.

    Public (Standard):
    Sie vertrauen anderen Computern nicht, sondern können ausgewählte eingehende Verbindungen manuell zulassen.

    Trusted:
    Vertraut allen Rechnern im Netzwerk - VORSICHT.

    Work:
    Wird für PC`s & Workstations verwendet. Vertraut den meisten Computern im Netzwerk. Ein paar weitere Dienste sind erlaubt.

    Welche Zonen gibt es zur Zeit auf meinem System zur Auswahl:

    Quellcode

    1. firewall-cmd --get-zones
    2. block dmz drop external home internal public trusted work
    Läuft meine Firewall z.Z.:

    Quellcode

    1. firewall-cmd --state
    2. running
    Sollte der Firewall-Dienst, warum auch immer, nicht laufen, so können wir dies ändern mit:

    Quellcode

    1. systemctl enable firewalld.service
    Und:

    Quellcode

    1. systemctl start firewalld.service
    Um etwas auszuprobieren, kann die Firewall auch vorübergehend deaktiviert werden mit:

    Quellcode

    1. systemctl stop firewalld.service
    Allgemeine Firewall-Konfiguration abfragen:

    Quellcode

    1. firewall-cmd --list-all
    2. drop (active)
    3. target: DROP
    4. icmp-block-inversion: no
    5. interfaces: wlan0
    6. sources:
    7. services:
    8. ports:
    9. protocols:
    10. masquerade: no
    11. forward-ports:
    12. source-ports:
    13. icmp-blocks:
    14. rich rules:
    Alles anzeigen
    Firewall-Konfiguration einer bestimmten Zone abfragen (z.B. Zone "drop"):

    Quellcode

    1. firewall-cmd --zone=drop --list-all
    2. drop (active)
    3. target: DROP
    4. icmp-block-inversion: no
    5. interfaces: wlan0
    6. sources:
    7. services:
    8. ports:
    9. protocols:
    10. masquerade: no
    11. forward-ports:
    12. source-ports:
    13. icmp-blocks:
    14. rich rules:
    Alles anzeigen
    Standard-Zone anzeigen lassen:

    Quellcode

    1. firewall-cmd --get-default-zone
    2. drop
    Standard-Zone ändern (z.B. in Zone "Drop"):

    Quellcode

    1. firewall-cmd --set-default-zone=drop
    ...oder für immer (mit permanent):

    Quellcode

    1. firewall-cmd --set-default-zone=drop --permanent
    Danach noch den Firewall-Dienst neu laden mit:

    Quellcode

    1. firewall-cmd --reload
    2. success

    Als Beispiel wollen wir "samba" in unserer Firewall freigeben:
    Dazu müssen wir aber ersteinmal wissen, in welcher Zone wir uns befinden.
    Und ebenfalls brauchen wir die exakten Namen der uns zur Verfügung stehenden Services.
    In welcher Zone wir uns gerade befinden, zeigt uns:

    Quellcode

    1. firewall-cmd --get-active-zones
    2. drop
    3. interfaces: wlan0
    In unseren Beispiel befinden wir uns also in der Zone "drop".
    Alle verfügbaren Dienste / Services lassen wir uns anzeigen mit:

    Quellcode

    1. firewall-cmd --get-services
    Nun sehen wir, welche Services zur Auswahl stehen und können Samba in der Zone "drop" freigeben mit:

    Quellcode

    1. firewall-cmd --zone=drop --add-service=samba
    ...oder für immer (mit permanent):

    Quellcode

    1. firewall-cmd --permanent --zone=drop --add-service=samba
    2. success
    Danach noch den Firewall-Dienst neu laden mit:

    Quellcode

    1. firewall-cmd --reload
    2. success
    Kontrolle mit:

    Quellcode

    1. firewall-cmd --zone=drop --list-services --permanent
    2. samba
    Samba aus der Zone "Drop" wieder entfernen:

    Quellcode

    1. firewall-cmd --zone=drop --remove-service=samba --permanent
    2. success
    Danach noch den Firewall-Dienst neu laden mit:

    Quellcode

    1. firewall-cmd --reload
    2. success
    Kontrolle mit:

    Quellcode

    1. firewall-cmd --zone=drop --list-services --permanent

    Ähnlich fünktioniert es, wenn wir einen bestimmten Port öffnen möchten.
    Voraussetzng ist natürlich wieder, dass wir unsere aktuelle Zone kennen - siehe weiter oben.
    Ziel ist jetzt, den Port 5555 / TCP, in der Zone "drop" zu öffnen:

    Quellcode

    1. firewall-cmd --zone=drop --add-port=5555/tcp
    2. success
    ...oder für immer (mit permanent):

    Quellcode

    1. firewall-cmd --zone=drop --add-port=5555/tcp --permanent
    2. success
    Danach noch den Firewall-Dienst neu laden mit

    Quellcode

    1. firewall-cmd --reload
    2. success
    Kontrolle mit:

    Quellcode

    1. firewall-cmd --zone=drop --list-ports --permanent
    2. 5555/tcp
    Den freigegebenen Port löschen wir ganz einfach wieder mit:

    Quellcode

    1. firewall-cmd --zone=drop --remove-port=5555/tcp --permanent
    2. success
    Danach noch den Firewall-Dienst neu laden mit:

    Quellcode

    1. firewall-cmd --reload
    2. success
    Kontrolle mit:

    Quellcode

    1. firewall-cmd --zone=drop --list-ports --permanent
    Es gibt unzählige Möglichkeiten, mit "firewall-cmd" zu arbeiten.
    firewall-cmd --[TAB][TAB]
    ... also zwei Mal schnell hintereinander die Tabulator-Taste, zeigt weitere Optionen.

    Für Interessierte kann ich diese Seite empfehlen:
    Documentation - Manual Pages - firewall-cmd | firewalld

    Viel Spaß und Gruß,
    sterun

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von sterun ()

    Für den Inhalt des Beitrages 137955 haftet ausdrücklich der jeweilige Autor: sterun

  • Was in sämtlichen (also in allen) Zonen so konfiguriert oder freigegeben wurde, sehen wir detailliert mit:

    Quellcode

    1. firewall-cmd --list-all-zones
    Mein System befindet sich in der Zone "drop".
    Zum Experimentieren möchte ich ungern vorhandene Zonen ändern (verschlimmbessern) und habe mir aus diesem Grund eine Test-Zone neu eingerichtet.

    Eine neue Zone erstellen:

    Quellcode

    1. firewall-cmd --permanent --new-zone=testzone
    2. success
    Danach noch den Firewall-Dienst neu laden mit:

    Quellcode

    1. firewall-cmd --reload
    2. success
    Kontrolle mit:

    Quellcode

    1. firewall-cmd --permanent --get-zones
    2. block dmz drop external home internal public trusted work testzone

    Die Zone "testzone" wurde jetzt erfolgreich angelegt und ich kann dieser (mit meiner WLAN-Karte = wlan0) beitreten mit:

    Quellcode

    1. firewall-cmd --permanent --zone=testzone --change-interface=wlan0
    2. The interface is under control of NetworkManager, setting zone to 'testzone'.
    3. success
    Danach noch den Firewall-Dienst neu laden mit:

    Quellcode

    1. firewall-cmd --reload
    2. success
    Kontrolle mit:

    Quellcode

    1. firewall-cmd --get-active-zones
    2. testzone
    3. interfaces: wlan0
    Auch im NetworkManager wurde die Zone "testzone" erfolgreich eingetragen.

    Ich befinde mich jetzt also in einer neu angelegten Zone und kann diese konfigurieren, testen oder einfach nur mit ihr experimentieren.
    Sollte ich es am Ende des Tages geschafft haben, dass nichts mehr funktioniert, lösche ich die Test-Zone und trete einfach wieder meiner Standard-Zone bei.

    Löschen der Zone "testzone":

    Quellcode

    1. firewall-cmd --permanent --delete-zone=testzone
    2. success
    Danach noch den Firewall-Dienst neu laden mit:

    Quellcode

    1. firewall-cmd --reload
    2. success
    Kontrolle mit:

    Quellcode

    1. firewall-cmd --get-zones
    2. block dmz drop external home internal public trusted work
    Wie man der Firewall schnell und einfach einen Service hinzufügt bzw. löscht oder einen Port freigibt, habe ich weiter oben schon beschrieben.
    Mitunter dauert es jedoch sehr lange, bis man seine Firewall bis ins Detail konfiguriert hat.

    Und möchte man diese Konfigurationen dann auch noch an mehreren Rechnern anwenden, benötigt man schon mal Stunden oder sogar Tage.
    Das geht aber auch einfacher.
    Unter:
    /etc/firewalld/zones/
    ...werden sämtliche Zonen als xml-Dateien gespeichert.
    Diese können einfach auf andere Rechner kopiert werden - Fertig.
    PS: Aus Gründen der Sicherheit wird übrigens bei jeder Änderung an einer Zone eine *.xml.old angelegt.

    Wenn man sich etwas mit firewall-cmd befasst, erscheint es schnell logisch.
    Einfach [TAB][TAB] (also zwei Mal schnell hintereinander die Tabulator-Taste) nach den zwei Bindestrichen betätigen und weitere Optionen werden zur Verfügung gestellt, bis man seinen kompletten Befehl zusammen hat.

    Viel Spaß und Gruß,
    sterun

    Für den Inhalt des Beitrages 137975 haftet ausdrücklich der jeweilige Autor: sterun

  • So, endlich widmen wir uns nun dem Ende des firewalld-Mini-Tutorials.

    Wenn man einen Service in der Firewall freigeben möchte, aber nicht genau weiß, wie dieser heißt, kann man sich alle zur Verfügung stehenden Services ersteinmal anzeigen lassen - siehe weiter oben.

    Was ist aber, wenn wir ein Tool installiert haben, welches nur mit abgeschalteter Firewall funktioniert und nun die Frage im Raum steht, welcher Port denn nun geöffnet werden muss. Tja, dann haben wir entweder das Manual des Tools nicht gelesen oder das Manual ist einfach schlecht.

    lsof kann hier jedoch helfen.
    Dieses Tool verrät alles über geöffnete Dateien und Netzwerkverbindungen und zeigt, welcher Prozess gerade welche Files und Sockets nutzt.

    Quellcode

    1. lsof -i -P
    -i (dieser Parameter zeigt uns alle Netzwerkverbindungen)
    -P (dieser Parameter zeigt uns die dazugehörigen Ports)

    Mit etwas Glück erfahren wir also, welchen Port unser Tool benötigt, den wir dann in unserer Firewall öffnen können.
    Wie man einen Port freigibt, steht ebenfalls weiter oben.
    Bzgl. lsof ein Dank an @Berichtigung

    Abschließend noch ein Hinweis zu einem kleinen Problemchen.

    Es wurden hier nun einige Konfigurations-Beispiele genannt und dabei immer erwähnt, den Firewall-Dienst neu zu starten und wie man anschließend kontrolliert, ob der letzte Befehl auch funktioniert hat.

    Dabei ist mir aufgefallen, dass die Ergebnisse (die Punkte: "Kontrolle mit:") nicht immer sofort als funktionierend angezeigt werden.
    Das hat nichts damit zu tun, dass etwas falsch gemacht wurde, sondern vielmehr damit, dass auch der NetworkManager einmal neu gestartet werden muss.
    Das machen wir mit:

    Quellcode

    1. systemctl restart NetworkManager.service
    In den meisten Fällen klappt das auch.
    Ich hatte aber 2-3 Beispiele, bei denen auch das nicht half, obwohl ich mir sicher war, alles richtig gemacht zu haben.
    In diesen Fällen muss dann einfach der Rechner neu gestartet werden und eine erneute Kontrolle zeigt dann ansch. sofort das erwünschte Ergebnis.

    So, das war jetzt das kleine 1x1 zu "firewalld".

    Zum Schluss sei noch erwähnt, dass alle Konfigurations-Änderungen auch in "iptables" zu sehen sind.
    Ein...
    iptables -L
    ...zeigt das auch.

    Die Profis konfigurieren iptables direkt.
    Aber das übersteigt meine Fähigkeiten und außerdem wäre die Anleitung dann um Längen größer, was wiederum ein Problem für mich darstellt, da ich mit zwei Fingern tippe und schlicht weg zu faul bin :)

    So, jetzt aber viel Spaß...
    sterun

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von sterun ()

    Für den Inhalt des Beitrages 138035 haftet ausdrücklich der jeweilige Autor: sterun

  • Try netstat -tulpn instead lsof -i ...

    Als root netstat -tulpn liefet auch PID und (Server)-Programmname, als User nicht.

    (lsof -i verwenden nur faule Säcke, wie ich, die genau rausgreppen, was sie wissen wollen und sich dafür längst Skripte gebastelt haben.)
    Sokrates sagte, dass er nichts wisse.
    Ich bin viel, viel klüger als Sokrates.
    Ich weiß ganz genau, dass ich gar nichts weiß.

    Für den Inhalt des Beitrages 138191 haftet ausdrücklich der jeweilige Autor: Berichtigung

  • Zusatz zu meinem Vorposter:


    cnf netstat

    Das Programm 'netstat' ist verfügbar im Paket 'net-tools-deprecated', das auf ihrem System installiert ist.


    Der absolute Pfad für 'netstat' ist '/bin/netstat'. Bitte überprüfen Sie, ob Ihre $PATH-Variable den genannten Pfad enthält.
    Somit bitte vorher net-tools-deprecated nachinstallieren.
    Links in dieser Signatur bitte zum Lesen anklicken!

    Code-Tags <<<Klick mich
    zypper <<<Klick mich
    Netzwerkprobleme <<<Klick mich

    Für den Inhalt des Beitrages 138195 haftet ausdrücklich der jeweilige Autor: Sauerland

  • oops. Das Alter- Sack- Problem halt...

    Wer mir sagen kann, wie der Nachfolger von netstat heißt, kriegt ein Herzchen mit Stern in's Linuxklassenheft!
    Sokrates sagte, dass er nichts wisse.
    Ich bin viel, viel klüger als Sokrates.
    Ich weiß ganz genau, dass ich gar nichts weiß.

    Für den Inhalt des Beitrages 138197 haftet ausdrücklich der jeweilige Autor: Berichtigung

  • Danke.

    Dann heißt das neuerdings ss --listening --family=inet --processes für IPv4 und ss --listening --family=inet6 --processes für IPv6
    Sokrates sagte, dass er nichts wisse.
    Ich bin viel, viel klüger als Sokrates.
    Ich weiß ganz genau, dass ich gar nichts weiß.

    Für den Inhalt des Beitrages 138199 haftet ausdrücklich der jeweilige Autor: Berichtigung

  • lsof -i -P
    liefert ebenfalls die PID (allerdings "Command" statt "Programmname") und Foreign Address.

    Quellcode

    1. lsof -i -P
    2. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
    3. dhclient 1894 root 6u IPv4 34411 0t0 UDP *:68
    4. firefox 4986 sterun 134u IPv4 74661 0t0 TCP 192.168.110.100:33112->ec2-52-10-118-253.us-west-2.compute.amazonaws.com:443 (ESTABLISHED)

    Quellcode

    1. netstat -tulpan
    2. Aktive Internetverbindungen (Server und stehende Verbindungen)
    3. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
    4. tcp 0 0 192.168.110.100:33112 52.10.118.253:443 VERBUNDEN 4986/firefox
    5. udp 0 0 0.0.0.0:68 0.0.0.0:* 1894/dhclient

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von sterun ()

    Für den Inhalt des Beitrages 138207 haftet ausdrücklich der jeweilige Autor: sterun