firewalld-Basics in der Konsole

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

    Code
    firewall-cmd --get-zones
    block dmz drop external home internal public trusted work

    Läuft meine Firewall z.Z.:

    Code
    firewall-cmd --state 
    running

    Sollte der Firewall-Dienst, warum auch immer, nicht laufen, so können wir dies ändern mit:

    Code
    systemctl enable firewalld.service

    Und:

    Code
    systemctl start firewalld.service

    Um etwas auszuprobieren, kann die Firewall auch vorübergehend deaktiviert werden mit:

    Code
    systemctl stop firewalld.service

    Allgemeine Firewall-Konfiguration abfragen:

    Firewall-Konfiguration einer bestimmten Zone abfragen (z.B. Zone "drop"):

    Standard-Zone anzeigen lassen:

    Code
    firewall-cmd --get-default-zone 
    drop

    Standard-Zone ändern (z.B. in Zone "Drop"):

    Code
    firewall-cmd --set-default-zone=drop

    ...oder für immer (mit permanent):

    Code
    firewall-cmd --set-default-zone=drop --permanent

    Danach noch den Firewall-Dienst neu laden mit:

    Code
    firewall-cmd --reload 
    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:

    Code
    firewall-cmd --get-active-zones
    drop
      interfaces: wlan0

    In unseren Beispiel befinden wir uns also in der Zone "drop".
    Alle verfügbaren Dienste / Services lassen wir uns anzeigen mit:

    Code
    firewall-cmd --get-services

    Nun sehen wir, welche Services zur Auswahl stehen und können Samba in der Zone "drop" freigeben mit:

    Code
    firewall-cmd --zone=drop --add-service=samba

    ...oder für immer (mit permanent):

    Code
    firewall-cmd --permanent --zone=drop --add-service=samba
    success

    Danach noch den Firewall-Dienst neu laden mit:

    Code
    firewall-cmd --reload 
    success

    Kontrolle mit:

    Code
    firewall-cmd --zone=drop --list-services --permanent
    samba

    Samba aus der Zone "Drop" wieder entfernen:

    Code
    firewall-cmd --zone=drop --remove-service=samba --permanent 
    success

    Danach noch den Firewall-Dienst neu laden mit:

    Code
    firewall-cmd --reload 
    success

    Kontrolle mit:

    Code
    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:

    Code
    firewall-cmd --zone=drop --add-port=5555/tcp
    success

    ...oder für immer (mit permanent):

    Code
    firewall-cmd --zone=drop --add-port=5555/tcp --permanent 
    success

    Danach noch den Firewall-Dienst neu laden mit

    Code
    firewall-cmd --reload 
    success

    Kontrolle mit:

    Code
    firewall-cmd --zone=drop --list-ports --permanent
    5555/tcp

    Den freigegebenen Port löschen wir ganz einfach wieder mit:

    Code
    firewall-cmd --zone=drop --remove-port=5555/tcp --permanent 
    success

    Danach noch den Firewall-Dienst neu laden mit:

    Code
    firewall-cmd --reload 
    success

    Kontrolle mit:

    Code
    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

    Einmal 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:

    Code
    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:

    Code
    firewall-cmd --permanent --new-zone=testzone
    success

    Danach noch den Firewall-Dienst neu laden mit:

    Code
    firewall-cmd --reload 
    success

    Kontrolle mit:

    Code
    firewall-cmd --permanent --get-zones 
    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:

    Code
    firewall-cmd --permanent --zone=testzone --change-interface=wlan0 
    The interface is under control of NetworkManager, setting zone to 'testzone'.
    success

    Danach noch den Firewall-Dienst neu laden mit:

    Code
    firewall-cmd --reload 
    success

    Kontrolle mit:

    Code
    firewall-cmd --get-active-zones 
    testzone
      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":

    Code
    firewall-cmd --permanent --delete-zone=testzone
    success

    Danach noch den Firewall-Dienst neu laden mit:

    Code
    firewall-cmd --reload 
    success

    Kontrolle mit:

    Code
    firewall-cmd --get-zones
    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.

    Code
    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:

    Code
    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

    Einmal 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.)

  • Zusatz zu meinem Vorposter:


    Somit bitte vorher net-tools-deprecated nachinstallieren.

    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!

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

    Code
    lsof -i -P
    COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    dhclient 1894   root    6u  IPv4  34411      0t0  UDP *:68
    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)
    Code
    netstat -tulpan
    Aktive Internetverbindungen (Server und stehende Verbindungen)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 192.168.110.100:33112   52.10.118.253:443       VERBUNDEN   4986/firefox        
    udp        0      0 0.0.0.0:68              0.0.0.0:*                           1894/dhclient

    Einmal editiert, zuletzt von sterun ()

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