Lograría esto agregando fuentes a una zona. Primero verifique qué fuentes hay para su zona:
firewall-cmd --permanent --zone=public --list-sources
Si no hay ninguno, puede comenzar a agregarlos, esta es su "lista blanca"
firewall-cmd --permanent --zone=public --add-source=192.168.100.0/24
firewall-cmd --permanent --zone=public --add-source=192.168.222.123/32
(Eso agrega una /24
IP completa y una única, solo para que tenga una referencia para una subred y una sola IP)
Establezca el rango de puertos que desea abrir:
firewall-cmd --permanent --zone=public --add-port=1-22/tcp
firewall-cmd --permanent --zone=public --add-port=1-22/udp
Esto solo hace los puertos 1 a 22. Puede ampliar esto, si lo desea.
Ahora, recarga lo que has hecho.
firewall-cmd --reload
Y revisa tu trabajo:
firewall-cmd --zone=public --list-all
Nota al margen / editorial: no importa, pero me gusta la zona "de confianza" para un conjunto de IP de la lista blanca en Firewalld. Puede realizar una evaluación adicional leyendo las sugerencias de redhat sobre cómo elegir una zona .
Ver también:
Si desea DROP
paquetes fuera de esta fuente, aquí hay un ejemplo para descartar los que están fuera del /24
que usé como ejemplo anterior, puede usar reglas completas para esto , creo. Esto es conceptual, no lo he probado (más allá de ver que centos 7 acepta el comando), pero debería ser lo suficientemente fácil como para hacer un pcap y ver si se comporta como esperarías
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.100.0/24" invert="True" drop'
Incluso si una respuesta ha sido aceptada y votada, no creo que sea correcta. No encuentro una explicación clara en la documentación, pero por el comportamiento implementado se ve así:
Entonces la respuesta sería:
Por ejemplo, suponiendo que la zona predeterminada es pública y no tiene puertos abiertos, agregue el origen y el rango de puertos a la zona de "trabajo":
ahora verifique las zonas activas (la zona predeterminada siempre está activa):
usted obtendrá:
entonces las reglas de zona de "trabajo" se aplicarán a la subred particular. Tendrá un rango de puertos abiertos para la "lista blanca" = subred según lo solicitado. Y, por supuesto, use la
--permanent
opción en las--add-xxx
declaraciones para que el comportamiento se mantenga.A su vez, los puertos o servicios que tenga en la zona "pública" (predeterminada) se aplicarán a todas las interfaces y direcciones de origen.
El mismo sistema funciona para las interfaces. Digamos agregando la interfaz "ens3" a la zona de "trabajo":
utilizará las reglas de zona de "trabajo" para cualquier solicitud de la interfaz particular, un selector más aproximado que "fuente".
fuente
sources
lista blanca. La razón fue que la zona tenía una interfaz asignada.public
zona, si los hay (estos servicios estarán disponibles para todas las direcciones ya que las interfaces se asignan a lapublic
zona de forma predeterminada). O cambie la zona predeterminada a otra:block
odrop
(esta es una práctica común). O cambie elpublic
objetivo de zona a%%REJECT%%
oDROP
.Descargo de responsabilidad: en realidad no he probado lo que estoy sugiriendo aquí, pero está bastante cerca de la última configuración de Firewallld que hice, así que me voy de eso. Firewalld le proporciona algunas zonas preconfiguradas, solo para este propósito. Hay uno llamado "soltar", que suelta todo lo que entra, y uno llamado "confiable", que permite cualquier conexión (es decir, por lo que no debería necesitar abrir puertos individuales, creo). El truco es obtener la zona correcta para activar lo que quieres.
Firewalld aplicará las reglas para una zona en función de la siguiente precedencia:
Entonces, en primer lugar, desea vincular sus IP confiables a la zona "confiable":
Luego, configura tu zona predeterminada para "soltar" o vincula tu interfaz a ella:
y luego haga que los cambios surtan efecto (advertencia: esto probablemente cortará su conexión si está haciendo esto a través de la red y no agregó su IP de origen a la zona de confianza):
Por supuesto, también puede probarlos temporalmente omitiendo "--permanente" (y luego no tiene que - recargar, tampoco).
fuente
block
también se puede usar (en lugar dedrop
) si quieres decirle a otros anfitriones que no estás hablando con ellos ...Opero mis cortafuegos de esta manera. Aquí está mi método preferido para lograr lo que quieres.
Verá que su zona predeterminada es pública y los servicios habilitados son dhcpv6-client y ssh. No queremos ningún servicio público disponible, ¿verdad? Solo las IP de la lista blanca están autorizadas. Entonces, eliminemos los dos servicios públicos.
Ahora, vamos a incluir en la lista blanca una IP específica que otorga acceso a cualquier puerto.
Ahora, vamos a incluir en la lista blanca otra IP, que solo queremos tener acceso a SSH, http y https. No hay otros puertos.
Si se conecta a través de SSH, asegúrese de autorizar su IP antes de aplicar su nuevo conjunto de reglas. Cuando esté listo para aplicar las nuevas reglas.
fuente
Puede administrar fácilmente por Rich Rule.
Primer paso
Segundo paso: agregar regla enriquecida
192.168.2.2 puede acceder a todos los puertos una vez que agrega una regla enriquecida y bloquea todos los puertos de otra fuente.
Si agrega algún puerto o servicio mediante el siguiente comando, todas las fuentes podrán acceder a él.
Si desea abrir un puerto específico para Ip específico que el siguiente comando
fuente
La respuesta principal de dougBTV es incorrecta. No puedo responder a su respuesta porque todavía no tengo los puntos de representante necesarios, así que explicaré aquí:
Está utilizando la zona predeterminada "público". Está atando redes a esa zona y luego abriendo puertos en esa zona. Pero, en una configuración predeterminada, todo el tráfico pasa a través de la zona predeterminada, no solo las redes de origen que vincula. Por lo tanto, sus comandos --add-source no hacen ninguna diferencia y sus comandos --add-port ahora han permitido que todo el mundo acceda a esos puertos.
La segunda respuesta de Normunds Kalnberzins es correcta. Desea crear una zona separada, vincular su red / IP a esa zona y abrir los puertos en esa zona.
Alternativamente, puede dejar todo en la zona predeterminada y usar las ricas reglas de firewalld para permitir el acceso desde ciertas IP:
Esto permite todo el tráfico desde 192.168.2.2 a todos los puertos y, como no he especificado una zona, se aplicará a la zona predeterminada "public" (use --get-default-zone para verificar cuál es su zona predeterminada y - get-active-zones para ver qué zonas están actualmente en uso).
Para permitir el acceso desde esta IP solo a un puerto específico, haría:
La mejor práctica es ejecutar estos comandos sin --permanente (o --perm para abreviar) que afecta el cortafuegos actualmente en ejecución. Después de probar que su regla está funcionando, ejecútela nuevamente con --perm agregado para que se recuerde en las posteriores recargas de Firewallld.
fuente
Solo para agregar a la respuesta de Normunds:
Para bloquear el resto del tráfico:
Advertencia: si accede desde una máquina remota, esto puede desconectar su sesión de inicio de sesión. Si no obtuvo la configuración de IP de la zona de 'trabajo' correctamente, no podrá conectarse a su servidor.
Para volver a cargar el firewall:
No pude descubrir cómo agregar dos IP diferentes con '--add-rich-rule'.
fuente
ipset
comofirewall-cmd --permanent --new-ipset=blacklist --type=hash:ip
agregar al ipset con el quefirewall-cmd --ipset=blacklist --add-entry=192.168.1.4
luego puede usarfirewall-cmd --add-rich-rule='rule source ipset=blacklist drop'
Me sorprende que las respuestas de la zona de confianza no sean la respuesta seleccionada. La zona de confianza tiene un "objetivo: ACEPTAR" predeterminado, mientras que el resto es "objetivo: predeterminado". Si bien realmente no importa, parece ser el método previsto debido a su nombre y valor objetivo predeterminado.
Cómo bloquear rápidamente una caja para que solo tú puedas acceder a ella:
Después de enumerar todas las zonas, debería ver algo como esto:
Nota: eliminé líneas con un valor nulo / faltante. Lo importante es que Trusted y Drop son ambos (activos) y Drop tiene su interfaz pública.
Lo que esto hace a iptables para demostración:
fuente