Firewalld blockieren / ablegen und per IP zulassen

1199
Daniel Böttner

Wir haben einen Linux-Root-Server, der hauptsächlich nur ein Docker-Server ist. Hosting von Containern und eines CI-Läufers.

Um diesen Server zu schützen, ist zunächst die Grundidee

  • Blockiere den gesamten Verkehr
  • mit Ausnahme einer (oder mehrerer) IPs, die zulässig sind.

Ich habe gestern ein reiches Regelwerk für ip4 hinzugefügt

  • blockieren 0.0.0.0/0
  • explizit erlauben unsere statische IP

Dies führte dazu, dass ich für den Zugriff gesperrt wurde. Docker-Container waren noch erreichbar. Die Container generieren eine neue Schnittstelle. Soweit ich weiß, sollten diese Schnittstellen nur für die Kommunikation vom Host zum Container verantwortlich sein. Ich hoffe zumindest, dass die Firewall den Verkehr filtert, bevor der Verkehr von zB eth0 an dockerinterface1234 weitergeleitet wird.

Meine bisherigen Forschungen deuten darauf hin. Durch das Auslassen von Schnittstelleninformationen in einer Zone ist die Zone für den gesamten Verkehr verantwortlich. Mein eigener Test deutet jedoch darauf hin, dass ich sie entweder falsch konfiguriert habe oder dass meine Forschung falsch war.

2

2 Antworten auf die Frage

1
Aeyoun

Übernahme aus meinem Tutorial zu IP-basierten Zonen für Firewalld :

Beginnen Sie, indem Sie die Standardzone in drop ändern:

firewallctl config set default-zone drop 

Die Drop-Zone löscht alle eingehenden Verbindungen. Möglicherweise möchten Sie die blockZone in Betracht ziehen, die dasselbe tut, außer, dass eine blockierte Verbindung zurückgegeben wird, anstatt sie nur stumm zu trennen. Erstellen Sie dann eine neue Zone und binden Sie sie an ein Subnetz von IP-Adressen (oder eine einzelne Adresse):

 firewallctl new --permanent zone --name "myzone" firewallctl zone "myzone" --permanent add source "198.51.100.0/24" firewallctl zone "myzone" --permanent add source "2001:0DB8::/32" 

(Denken Sie daran, IPv6-fähig zu sein!) Überprüfen Sie, ob Ihre Zonen in Ordnung sind:

 firewallctl info zones --active 

An dieser Stelle beginnen Sie , Ports oder Services hinzuzufügenmyzone . Auf diese Dienste kann nur von der Zone / dem IP-Subnetz aus zugegriffen werden, die Sie hinzufügen, und nicht in der standardmäßigen Drop / Public-Zone.

0
unilynx

Wikipedia bietet ein schönes Paketflussschema unter https://upload.wikimedia.org/wikipedia/commons/3/37/Netfilter-packet-flow.svg

Docker setzt seine Port-Mapping-Regeln in die Phase "Mangle Prerouting". Diese Phase wird vor der Filtereingabe ausgeführt, bei der die meisten Firewalls versuchen, ihre Eingabefilterregeln zu platzieren. Wenn Sie sich jedoch den Schaltplan ansehen, können Sie feststellen, dass Pakete diese Phase vermeiden (Routing-Entscheidung), wenn sie weitergeleitet werden. Was passiert wahrscheinlich für Sie?

Anstatt mit den Regeln von Docker zu kämpfen, können Sie sie mithilfe der 'raw'-Tabelle vollständig ausschließen. Um den gesamten Datenverkehr von 'eth0' an Port 12345 abzulegen

iptables -t raw -I PREROUTING -i eth0 -p tcp --dport 12345 -j LOG

Beachten Sie, dass die 'raw'-Tabelle auch den internen (Docker) Datenverkehr beeinflusst. Wenn Sie also nach Quell-IP-Adressen wechseln, sollten Sie auch die lokalen IP-Bereiche von localhost und docker auf die Positivliste setzen