Lista blanca de direcciones IP de origen en CentOS 7

Lista blanca de direcciones IP de origen en CentOS 7

Quiero configurar el firewall CentOS 7 de modo que todas las solicitudes entrantes se bloqueen, excepto las direcciones IP de origen que incluyo en la lista blanca. Y para las direcciones IP de la lista blanca, todos los puertos deberían ser accesibles.

Puedo encontrar algunas soluciones (no estoy seguro de si funcionarán) pero iptablesCentOS 7 usa firewalld. No encuentro algo similar para lograr con firewall-cmdel comando.

Las interfaces están en Zona Pública. También moví todos los servicios a la zona pública.

Respuesta1

Lo lograría agregando fuentes a una zona. Primero consulte qué fuentes hay para su zona:

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

Si no hay ninguno, puedes empezar a agregarlos, esta es tu "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 /24IP completa y una única, solo para tener una referencia tanto para una subred como para una única 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 funciona con los puertos 1 al 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 "confiable" para un conjunto de IP incluidos en la lista blanca en firewalld. Puedes hacer una valoración adicional leyendosugerencias de redhat para elegir una zona.

Ver también:


Si desea DROPpaquetes fuera de esta fuente, aquí hay un ejemplo para eliminarlos fuera del que /24usé como ejemplo anteriormente.puedes usar reglas ricas para esto, Yo creo. Esto es conceptual, no lo he probado (más allá de ver que centos 7 acepta el comando), pero debería ser bastante fácil hacer un pcap y ver si se comporta como se espera.

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

Respuesta2

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 según el comportamiento implementado se ve así:

  1. La interfaz y la fuente se utilizan como selectores: qué zona(s) activar
  2. ambos se ignoran para la zona predeterminada (siempre activos)

Entonces la respuesta sería:

  1. bloquear la zona predeterminada, decir "pública" - no hay puertos abiertos ni servicios disponibles
  2. en otra zona, diga "trabajo" - defina la fuente y abra los puertos

Por ejemplo, suponiendo que la zona predeterminada es pública y no tiene puertos abiertos, agregue la fuente y el rango de puertos a la zona de "trabajo":

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

ahora verifique las zonas activas (la zona predeterminada siempre está activa):

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

obtendrás:

work
  sources: 192.168.0.0/24

por lo que las reglas de la zona de "trabajo" se aplicarán a la subred en particular. Tendrás una variedad de puertos abiertos para la "lista blanca" =subredde acuerdo a lo pedido. Y, por supuesto, utilice --permanentla opción en --add-xxxlas declaraciones para que el comportamiento se mantenga.

A su vez, cualquier puerto o servicio que tenga en la zona "pública" (predeterminada) se aplicará a todas las interfaces y direcciones de origen.

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

El mismo sistema funciona para las interfaces. Digamos agregando la interfaz "ens3" a la zona de "trabajo":

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

utilizará las reglas de la zona de "trabajo" para cualquier solicitud de la interfaz particular: un selector más aproximado que "fuente".

Respuesta3

Descargo de responsabilidad: en realidad no he probado lo que sugiero aquí, pero está bastante cerca de la última configuración de firewall que hice, así que voy a dejar de hacerlo. Firewalld le proporciona algunas zonas preconfiguradas, sólo para este propósito. Hay uno llamado "drop", que descarta todo lo que ingresa, y otro llamado "trusted", que permitecualquierconexión (es decir, creo que ni siquiera debería necesitar abrir puertos individuales). El truco consiste en conseguir la zona correcta para activar lo que deseas.

Firewalld aplicará las reglas para una zona según la siguiente prioridad:

  • Si la IP de origen coincide con una IP de origen vinculada a una zona, la usa.
  • Si la IP de origen no coincide con ninguna zona en particular, verifica si hay una zona configurada para lainterfazEl paquete llegó. Si hay uno, lo usa.
  • Por último, si nada más coincide, utiliza la zona predeterminada.

Entonces, en primer lugar, desea vincular sus IP confiables a la zona "confiable":

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

Luego, configure su zona predeterminada para "eliminar" o vincule su interfaz a ella:

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

y luego haga que los cambios surtan efecto (advertencia: esto probablemente interrumpirá 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):

firewall-cmd --reload

Por supuesto, también puede probarlos temporalmente omitiendo "--permanent" (y luego tampoco tendrá que volver a cargar).

Respuesta4

Me sorprende que las respuestas de la zona de confianza no sean la respuesta seleccionada. La zona de confianza tiene un "destino: ACEPTAR" predeterminado, mientras que el resto es "destino: 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 casilla para que solo usted pueda acceder a ella:

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

Después de enumerar todas las zonas, debería ver algo como esto:

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

Nota: eliminé líneas con un valor nulo/faltante. Lo importante es que confiar y soltar son ambos (activos) y soltar tiene su interfaz pública.

Qué le hace esto a iptables para demostración:

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

información relacionada