Whitelist-Quell-IP-Adressen in CentOS 7

Whitelist-Quell-IP-Adressen in CentOS 7

Ich möchte die CentOS 7-Firewall so einrichten, dass alle eingehenden Anfragen blockiert werden, mit Ausnahme der ursprünglichen IP-Adressen, die ich auf die Whitelist gesetzt habe. Und für die Whitelist-IP-Adressen sollten alle Ports zugänglich sein.

Ich kann einige Lösungen dafür finden (bin nicht sicher, ob sie funktionieren), iptablesaber CentOS 7 verwendet firewalld. Ich kann nichts Ähnliches finden, das ich mit firewall-cmddem Befehl erreichen könnte.

Die Schnittstellen befinden sich in der öffentlichen Zone. Ich habe auch alle Dienste bereits in die öffentliche Zone verschoben.

Antwort1

Ich würde dies erreichen, indem ich einer Zone Quellen hinzufüge. Überprüfen Sie zunächst, welche Quellen es für Ihre Zone gibt:

firewall-cmd --permanent --zone=public --list-sources

Wenn es keine gibt, können Sie beginnen, sie hinzuzufügen. Dies ist Ihre „Whitelist“.

firewall-cmd --permanent --zone=public --add-source=192.168.100.0/24
firewall-cmd --permanent --zone=public --add-source=192.168.222.123/32

(Dadurch werden eine ganze /24und eine einzelne IP hinzugefügt, sodass Sie sowohl eine Referenz für ein Subnetz als auch für eine einzelne IP haben.)

Legen Sie den Portbereich fest, den Sie öffnen möchten:

firewall-cmd --permanent --zone=public --add-port=1-22/tcp
firewall-cmd --permanent --zone=public --add-port=1-22/udp

Dies betrifft nur die Ports 1 bis 22. Sie können dies bei Bedarf erweitern.

Laden Sie jetzt neu, was Sie getan haben.

firewall-cmd --reload

Und überprüfen Sie Ihre Arbeit:

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

Randbemerkung / Leitartikel: Es spielt keine Rolle, aber ich mag die „vertrauenswürdige“ Zone für einen Satz von IPs auf der Whitelist in Firewalld. Sie können eine weitere Einschätzung vornehmen, indem Sie lesenRedhats Vorschläge zur Auswahl einer Zone.

Siehe auch:


DROPWenn Sie Pakete außerhalb dieser Quelle löschen möchten , finden Sie hier ein Beispiel zum Löschen dieser Pakete außerhalb der /24Quelle, die ich zuvor als Beispiel verwendet habe.Sie können hierfür umfangreiche Regeln verwenden, glaube ich. Das ist konzeptionell, ich habe es nicht getestet (außer zu sehen, dass CentOS 7 den Befehl akzeptiert), aber es sollte einfach genug sein, ein PCAP durchzuführen und zu sehen, ob es sich wie erwartet verhält.

firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.100.0/24" invert="True" drop'

Antwort2

Selbst wenn eine Antwort akzeptiert und hochgevotet wurde, halte ich sie nicht für richtig. Ich kann in der Dokumentation keine klare Erklärung finden, aber vom implementierten Verhalten her sieht es so aus:

  1. Schnittstelle und Quelle dienen als Selektoren - welche Zone(n) aktiviert werden sollen
  2. beide werden für die Standardzone ignoriert (immer aktiv)

Die Antwort wäre also:

  1. Sperren Sie die Standardzone, z. B. „öffentlich“ – keine Ports geöffnet oder Dienste verfügbar
  2. in einer anderen Zone, sagen wir „Arbeit“ - Quelle definieren und Ports öffnen

Angenommen, die Standardzone ist öffentlich und hat keine offenen Ports, fügen Sie Quelle und Portbereich zur „Arbeitszone“ hinzu:

$ sudo firewall-cmd --zone=work --add-source=192.168.0.0/24
$ sudo firewall-cmd --zone=work --add-port=8080-8090/tcp

Überprüfen Sie nun die aktiven Zonen (die Standardzone ist immer aktiv):

$ sudo firewall-cmd --get-active-zones

Du wirst kriegen:

work
  sources: 192.168.0.0/24

so dass die "Arbeits"-Zonenregeln für das jeweilige Subnetz gelten. Sie haben eine Reihe offener Ports für die "Whitelist" =Subnetzwie gewünscht. Und verwenden Sie natürlich --permanentOptionen in --add-xxxAnweisungen, um das Verhalten beizubehalten.

Im Gegenzug gelten alle Ports oder Dienste, die Sie in der „öffentlichen“ (Standard-)Zone haben, für alle Schnittstellen und Quelladressen.

$ sudo firewall-cmd --list-all-zones

public (default)
interfaces:
sources:
services:
ports: 
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

work (active)
interfaces: 
sources: 192.168.0.0/24
services: dhcpv6-client ipp-client ssh
ports: 8080-8090/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Dasselbe System funktioniert auch für Schnittstellen. Fügen Sie beispielsweise die Schnittstelle „ens3“ zur „Work“-Zone hinzu:

$ sudo firewall-cmd --zone=work --add-interface=ens3

Sie verwenden die Regeln der „Arbeits“-Zone für alle Anforderungen von der jeweiligen Schnittstelle – eher ein gröberer Selektor als ein „Quellenselektor“.

Antwort3

Haftungsausschluss: Ich habe das, was ich hier vorschlage, nicht wirklich ausprobiert, aber es ist ziemlich nah an dem letzten Firewalld-Setup, das ich gemacht habe, also gehe ich davon aus. Firewalld stellt Ihnen einige vorkonfigurierte Zonen zur Verfügung, genau für diesen Zweck. Es gibt eine namens „drop“, die alles, was hereinkommt, verwirft, und eine namens „trusted“, die erlaubtbeliebigVerbindung (also, ich glaube, Sie müssen nicht einmal einzelne Ports öffnen). Der Trick besteht darin, die richtige Zone für das gewünschte Ereignis zu finden.

Firewalld wendet die Regeln für eine Zone basierend auf der folgenden Priorität an:

  • Wenn die Quell-IP mit einer an eine Zone gebundenen Quell-IP übereinstimmt, wird diese verwendet.
  • Wenn die Quell-IP keiner bestimmten Zone entspricht, wird geprüft, ob eine Zone für dieSchnittstelledas Paket angekommen ist. Wenn es eines gibt, wird dieses verwendet.
  • Wenn nichts anderes übereinstimmt, wird die Standardzone verwendet.

Als erstes möchten Sie Ihre vertrauenswürdigen IPs an die „vertrauenswürdige“ Zone binden:

firewall-cmd --permanent --zone=trusted --add-source=1.2.3.4

Stellen Sie dann entweder Ihre Standardzone auf „Drop“ ein oder binden Sie Ihre Schnittstelle daran:

firewall-cmd --permanent --set-default-zone=drop
firewall-cmd --permanent --zone=drop --change-interface=eth0

und nehmen Sie dann die Änderungen vor (Warnung: Ihre Verbindung wird wahrscheinlich unterbrochen, wenn Sie dies über das Netzwerk tun und Ihre Quell-IP nicht zur vertrauenswürdigen Zone hinzugefügt haben):

firewall-cmd --reload

Natürlich kann man diese auch einfach temporär testen, indem man das "--permanent" weglässt (und dann muss man auch nicht --reload verwenden).

Antwort4

Ich bin überrascht, dass die Antworten der vertrauenswürdigen Zone nicht die ausgewählte Antwort sind. Die vertrauenswürdige Zone hat ein Standardziel „ACCEPT“, während der Rest „Ziel: Standard“ ist. Obwohl es wirklich keine Rolle spielt, scheint es aufgrund des Namens und des Standardzielwerts die beabsichtigte Methode zu sein.

So verschließen Sie eine Box schnell, sodass nur Sie darauf zugreifen können:

firewall-cmd --zone=trusted --add-source=1.2.3.4
firewall-cmd --zone=trusted --add-source=5.6.7.8/24
firewall-cmd --zone=drop --change-interface=eth1
firewall-cmd --set-default-zone=drop
firewall-cmd --runtime-to-permanent
firewall-cmd --reload
firewall-cmd --list-all-zones

Nachdem Sie alle Zonen aufgelistet haben, sollten Sie etwa Folgendes sehen:

trusted (active)
  target: ACCEPT
  icmp-block-inversion: no
  sources: 1.2.3.4 5.6.7.8/24
  masquerade: no

drop (active)
  target: DROP
  icmp-block-inversion: no
  interfaces: eth1
  masquerade: no

Hinweis: Ich habe Zeilen mit einem Null-/fehlenden Wert entfernt. Wichtig ist, dass „Trusted“ und „Drop“ beide (aktiv) sind und „Drop“ Ihre öffentliche Schnittstelle hat.

Zur Veranschaulichung:

Chain INPUT_ZONES_SOURCE (1 references)
target     prot opt source               destination
IN_trusted  all  --  1.2.3.4         0.0.0.0/0
IN_trusted  all  --  5.6.7.8/24        0.0.0.0/0
Chain INPUT_ZONES (1 references)
target     prot opt source               destination
IN_drop    all  --  0.0.0.0/0            0.0.0.0/0
IN_drop    all  --  0.0.0.0/0            0.0.0.0/0
IN_drop    all  --  0.0.0.0/0            0.0.0.0/0

verwandte Informationen