blockiere alle bis auf ein paar ips mit firewalld

17

Auf einem Linux-Netzwerkcomputer möchte ich die Anzahl der Adressen in der "öffentlichen" Zone einschränken (Firewall-Konzept), die diese erreichen dürfen. Das Endergebnis wäre also, dass keine andere Maschine auf einen Port oder ein Protokoll zugreifen kann, außer auf die explizit zugelassenen

  --add-rich-rule='rule family="ipv4" source not  address="192.168.56.120" drop'

  --add-rich-rule='rule family="ipv4" source not  address="192.168.56.105" drop'

Das obige Problem ist, dass dies keine echte Liste ist, sondern alles blockiert, denn wenn die eine Adresse blockiert wird, indem sie nicht mit der anderen übereinstimmt, was einen versehentlichen "Drop All" -Effekt erzeugt, wie würde ich eine bestimmte Non "entsperren" zusammenhängender Satz? Akzeptiert source eine Liste von Adressen? Ich habe noch nichts in meinem Blick auf die Dokumente oder das Google-Ergebnis gesehen.


EDIT: Ich habe gerade folgendes erstellt:

# firewall-cmd  --zone=encrypt --list-all
encrypt (active)
  interfaces: eth1
  sources: 192.168.56.120
  services: ssh
  ports: 6000/tcp
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 

Aber ich kann immer noch Port 6000 erreichen, da .123 ich beabsichtigte, dass eine Quelle, die nicht aufgeführt ist, keinen Dienst oder Port erreichen sollte

Mike
quelle

Antworten:

24

Die reichen Regeln sind überhaupt nicht notwendig.

Wenn Sie eine Zone auf einen bestimmten Satz von IP-Adressen beschränken möchten, definieren Sie diese IP-Adressen einfach als Quellen für die Zone selbst (und entfernen Sie eventuell vorhandene Schnittstellendefinitionen, da sie Quell-IP-Adressen überschreiben).

Wahrscheinlich möchten Sie dies jedoch nicht für die "öffentliche" Zone tun, da dies semantisch bedeutet, dass öffentlich zugängliche Dienste für die Welt offen sind.

Versuchen Sie stattdessen, eine andere Zone wie "intern" für meist vertrauenswürdige IP-Adressen zu verwenden, um auf potenziell vertrauliche Dienste wie sshd zuzugreifen. (Sie können auch eigene Zonen erstellen.)

Warnung: Verwechseln Sie die spezielle "vertrauenswürdige" Zone nicht mit der normalen "internen" Zone. Alle Quellen, die der "vertrauenswürdigen" Zone hinzugefügt wurden, werden an allen Ports durchgelassen. Das Hinzufügen von Diensten zur "vertrauenswürdigen" Zone ist zulässig, macht jedoch keinen Sinn.

firewall-cmd --zone=internal --add-service=ssh
firewall-cmd --zone=internal --add-source=192.168.56.105/32
firewall-cmd --zone=internal --add-source=192.168.56.120/32
firewall-cmd --zone=public --remove-service=ssh

Das Ergebnis ist eine "interne" Zone, die den Zugriff auf ssh ermöglicht, jedoch nur von den beiden angegebenen IP-Adressen. Führen Sie jeden Befehl mit --permanentangefügtem Befehl erneut aus, um ihn persistent zu machen .

Michael Hampton
quelle
Bitte klären Sie, was Sie mit "eventuell vorhandene Schnittstellendefinition" meinen. Ich habe Ihren Vorschlag ausprobiert. Siehe meine Bearbeitung.
Mike
@mike Wie gesagt, du musst eth1aus der Zone entfernen . firewall-cmd --zone=encrypt --remove-interface=eth1
Michael Hampton
Nun, die Verschlüsselungszone ist die neue Zone, bevor eth1 in der Öffentlichkeit war, habe ich sie von öffentlich zu verschlüsseln verschoben, also hat encrypt die Quelle .120, ich dachte, nur 120 sollten in der Lage sein, den Port zu erreichen, was fehlt mir?
Mike
1
Wenn Sie die Schnittstelle in die Zone stellen, kann alles , was über die Schnittstelle eingeht, auf alle Ports und Dienste zugreifen, die der Zone hinzugefügt wurden, unabhängig von der IP-Adresse. So gehört es wohl in die Öffentlichkeit, wo es ursprünglich war.
Michael Hampton
ahh, also werden die akzeptierten Quellen auch dann noch zugelassen, wenn die Schnittstelle öffentlich zugänglich ist und die akzeptierten Quellen einer anderen vertrauenswürdigen Quelle zugeordnet sind?
Mike
1

Wie pro firewalld.richlanguage:

Quelle Quelle [nicht] Adresse = "Adresse [/ Maske]"

   With the source address the origin of a connection attempt can be limited to the source address. An address is either a single IP address, or a network IP address. The address has to match the rule family (IPv4/IPv6). Subnet mask is expressed in either
   dot-decimal (/x.x.x.x) or prefix (/x) notations for IPv4, and in prefix notation (/x) for IPv6 network addresses. It is possible to invert the sense of an address by adding not before address. All but the specified address will match then.

Geben Sie eine Netzmaske für die Adresse an, um zusammenhängende Blöcke zuzulassen.

Andernfalls können Sie versuchen, eine ipsetListe mit zulässigen IP-Adressen für eine nicht zusammenhängende Liste zu erstellen .

Zum Beispiel in /etc/firewalld/direct.xml:

<?xml version="1.0" encoding="utf-8"?>
<direct>
   <rule ipv="ipv4" table="filter" chain="INPUT" priority="0">-m set --match-set whitelist src -j ACCEPT</rule>
</direct>

Das aktuelle ipsetmuss separat erstellt werden.

Dawud
quelle
dies würde ablehnen, was ich brauche ist die Umkehrung, akzeptieren, wenn in der Menge,
Mike
0

Sie können problemlos mit Rich Rule verwalten.

Erster Schritt

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

Zweiter Schritt - Rich Rule hinzufügen

firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" source address="192.168.78.76/32" accept'

Auf alle Ports kann von 192.168.2.2 zugegriffen werden, sobald Sie eine Rich-Regel hinzugefügt und alle Ports von anderen Quellen blockiert haben.

Wenn Sie einen Port oder Dienst mit dem folgenden Befehl hinzufügen, können alle Quellen darauf zugreifen.

firewall-cmd --zone=public --add-service=ssh
firewall-cmd --zone=public --add-port=8080

Wenn Sie einen bestimmten Port für ein bestimmtes IP öffnen möchten, gehen Sie wie folgt vor

firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" port="8080/tcp" source address="192.168.78.76/32" accept'
Ranjeet Ranjan
quelle