Estibador y Shorewall

Estoy usando Shorewall en mi servidor tan simple firewall independiente y me gustaría usar Ventana acoplable También.

Mediante el uso de un contenedor Docker y su redirección de puertos docker configura sus propias reglas/cadenas de iptables que se eliminarán si se reinicia shorewall. Entonces el contenedor se convertirá en inalcanzable.

¿Alguien ha logrado guardar/restaurar las reglas de docker en un reinicio de shorewall o alguien tiene otra solución alternativa?

Véase también:

Los siguientes cambios de configuración deberían garantizar el flujo de tráfico entre Docker y el host de Shorewall. Probado en Shorewall 4.5.21.9, pero debería aplicarse a las versiones más recientes:

/etc/shorewall / shorewall.conf

Asegúrese de que el reenvío de IP esté habilitado (la mayoría de los elementos de configuración son Sí/No, pero este está "Activado"):

IP_FORWARDING=On

/etc/shorewall/masq

Habilite el enmascaramiento (NAT) para su red privada de Docker (si usa una red diferente, es decir, inicia Docker con --bip=#.#.#.#/#, a continuación, cambie en consecuencia). Cambio eth0 a cualquier interfaz en la máquina host con conectividad externa:

#INTERFACE:DEST         SOURCEeth0                    172.17.0.0/16

/etc/shorewall / interfaces

Agregue una entrada de interfaz para que Shorewall sepa qué interfaz dock la zona se refiere a:

#ZONE           INTERFACE               OPTIONSdock            docker0

/etc/shorewall/zones

Crear una nueva zona; nota, docker es demasiado largo y provocará un error de "nombre de zona no válido".

#ZONE   INTERFACEdock    ipv4

/etc/shorewall/policy

Es probable que desee permitir que los contenedores de Docker se comuniquen con la máquina host y Internet, así que este es un buen punto de partida:

#SOURCE         DEST            POLICY# ...(other policies)...dock            all             ACCEPT# ...(other policies, catch-all)...

Es posible que también necesite un dispositivo similar ACCEPT política para el tráfico de fw a dock, si aún no lo has abierto con fw a all.

Puede ajustar esto aún más en el directiva o regla archivos según sea necesario. Por ejemplo, lo anterior no permite explícitamente que el tráfico externo llegue a sus contenedores Docker; verifique sus otras zonas/políticas/reglas para eso.

Dado que Docker introdujo su función de aislamiento de red, las otras soluciones mencionadas aquí ya no son suficientes si desea utilizar redes personalizadas. Shorewall 5.0.6 presenta compatibilidad con Docker incluidas las redes Docker. Este:

  • Permite iniciar/detener/reiniciar shorewall y docker en cualquier orden
  • Evita la necesidad de mantener un script de extensión

Puede asegurarse de que el conjunto de reglas de Docker sobreviva a un reinicio de shorewall creando scripts de extensión que guarden el DOCKER encadene antes del reinicio y, a continuación, restaure de nuevo después. Acabo de poner un post con un ejemplo de cómo hacer esto, aunque estoy seguro de que está lejos de ser el único método posible.

Acabo de averiguarlo en mi caja. Asegúrese de que /etc / shorewall.conf tiene:

IP_FORWARDING=Yes

Docker se basa en el reenvío, y veo que 'puppet' lo establece en 'No' en todos mis servidores.

Actualización: Probablemente también necesite enmascarar el tráfico proveniente de docker fuera de su interfaz WAN.

Editar /etc/shorewall/masq y necesitarás una línea similar a:

br0 172.17.0.0/12

En este caso, mi interfaz WAN es en realidad br0 (un puente), pero la suya probablemente sea algo así como eth0. (Utilizar ifconfig para ver sus interfaces y sus direcciones IP). En mi máquina, docker usa 172.17.0.0/24, que es un rango de direcciones privadas RFC1918. Esto puede diferir en otros sistemas, pero puede ver el rango usando ifconfig una vez más para buscar la interfaz docker0.

Una opción posible es ejecutar Docker con la opción --net=host, para permitir que la aplicación en contenedores acceda a la red del host sin reenvío de IP y NAT.

El servicio de docker se puede reiniciar sin afectar a los contenedores en ejecución y se puede ejecutar después de un reinicio de Shorewall para volver a cargar las reglas específicas de docker. Obviamente, habrá un corto tiempo en el que se interrumpa la conexión en red al(a los) contenedor (es).

Esto es cierto al menos en mis pocas instalaciones de Archlinux.

La acción de actualización no purga la tabla IP, por lo que si solo desea actualizar reglas o políticas, puede ejecutar actualizar en lugar de reiniciar :

sudo shorewall refresh

Obviamente, el problema persiste si realmente necesita reiniciar Shorewall.Luego, debe reiniciar Docker y volver a cargar sus contenedores.