blocca tutti tranne alcuni ips con firewalld


17

Su una macchina in rete Linux, vorrei limitare l'insieme di indirizzi sulla zona "pubblica" (concetto firewalld), a cui è consentito raggiungerlo. Quindi il risultato finale sarebbe che nessun'altra macchina può accedere a nessuna porta o protocollo, ad eccezione di quelli esplicitamente ammessi, una sorta di mix di

  --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'

Il problema sopra è che questo non è un vero elenco, bloccherà tutto poiché se un suo indirizzo viene bloccato non essendo lo stesso dell'altro, generando un effetto "drop all" accidentale, come potrei "sbloccare" un non specifico set contiguo? la fonte accetta un elenco di indirizzi? finora non ho visto nulla nel documento o nel risultato di Google.


EDIT: ho appena creato questo:

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

Ma posso ancora raggiungere la porta 6000 dalla .123 mia intenzione era che se una fonte non è elencata, non dovrebbe essere in grado di raggiungere alcun servizio o porta

Risposte:


24

Le ricche regole non sono affatto necessarie.

Se si desidera limitare una zona a un set specifico di IP, è sufficiente definire tali IP come origini per la zona stessa (e rimuovere qualsiasi definizione di interfaccia che potrebbe essere presente, poiché sovrascrivono gli IP di origine).

Probabilmente non vorrai farlo nella zona "pubblica", dal momento che ciò è semanticamente pensato per i servizi pubblici che devono essere aperti al mondo.

Invece, prova a utilizzare una zona diversa come "interna" per indirizzi IP per lo più affidabili per accedere a servizi potenzialmente sensibili come sshd. (Puoi anche creare le tue zone.)

Attenzione: non confondere la speciale zona "attendibile" con la normale zona "interna". Tutte le fonti aggiunte alla zona "attendibile" saranno consentite su tutte le porte; l'aggiunta di servizi alla zona "attendibile" è consentita, ma non ha senso farlo.

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

Il risultato sarà una zona "interna" che consente l'accesso a ssh, ma solo dai due indirizzi IP indicati. Per renderlo persistente, rieseguire ogni comando con l' --permanentaggiunta.


chiarisci cosa intendi con "definizione dell'interfaccia che potrebbe essere presente", iv ho provato il tuo suggerimento, per favore vedi la mia modifica.
mike,

@mike Come ho detto, è necessario rimuovere eth1dalla zona. firewall-cmd --zone=encrypt --remove-interface=eth1
Michael Hampton

beh, la zona di crittografia è la nuova zona, prima che eth1 fosse in pubblico, l'ho spostato da pubblico a crittografare, quindi crittografare ha la fonte .120, pensavo che solo 120 dovessero essere in grado di raggiungere il porto, cosa mi manca?
mike

1
Se si mette l'interfaccia nella zona, tutto ciò che arriva tramite l'interfaccia può accedere a qualunque porta e servizio venga aggiunto alla zona, indipendentemente dall'indirizzo IP. Quindi probabilmente appartiene in pubblico, dove era originariamente.
Michael Hampton

ahh, quindi le fonti accettate saranno comunque consentite anche se l'interfaccia è messa in pubblico e le fonti accettate sono collocate in un'altra fonte attendibile?
mike,

1

Secondo firewalld.richlanguage:

Fonte sorgente [not] address = "address [/ mask]"

   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.

Specificare una maschera di rete per l'indirizzo per consentire blocchi contigui.

Oltre a ciò, potresti provare a creare un ipsetelenco non contiguo di IP consentiti.

Ad esempio, 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>

L'attuale ipsetdeve essere creato separatamente.


questo rifiuterebbe, quello di cui ho bisogno è l'inverso, accetterei se nel set,
Mike

0

Puoi gestirlo facilmente con Rich Rule.

Primo passo

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

Secondo passaggio - Aggiungi regola avanzata

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

Tutte le porte sono accessibili da 192.168.2.2 dopo aver aggiunto la regola avanzata e bloccato tutte le porte da altre fonti.

Se aggiungerai qualsiasi porta o servizio con il comando seguente, sarà accessibile da tutte le fonti.

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

Se si desidera aprire una porta specifica per Ip specifici rispetto al comando seguente

firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" port="8080/tcp" source address="192.168.78.76/32" accept'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.