Se iptables
ha planteado la idea de gestionar nuestras reglas con Puppet. Veo que augeas
tiene un iptables
lente pero actualmente es experimental.
¿Alguien tiene alguna sugerencia sobre cómo manejar esto? Idealmente, me gustaría construir las cadenas basadas en la clase de un servidor.
linux
iptables
configuration
puppet
Belmin Fernandez
fuente
fuente
Respuestas:
Esto es lo que estoy haciendo con Red Hat Enterprise (RHEL).
RHEL tiene un
iptables
servicio que carga reglas/etc/sysconfig/iptables
y estoy trabajando para modificar ese archivo y reiniciar el servicio iptables. A muchas personas les gusta soltar fragmentos en un directorio iptables.d y construir un conjunto de reglas iptables (a través de make o algo así) a partir de eso. Incluyo cosas para reconstruir el conjunto de reglas predeterminado, pero eso generalmente nunca hace nada. Si sus necesidades son simples, puede copiar un archivo iptables al sistema.A pesar de lo feo que esto parece, está probado exhaustivamente en RHEL4, RHEL5 y RHEL6.
Tenía esto antes de que el soporte de las augeas estuviera en títere. Si lo volviera a escribir hoy, miraría la lente augeas iptables antes de recurrir a ella
exec { "perl ...": }
.Algunas definiciones globales para editar archivos en su lugar
Basado en cosas originalmente de http://reductivelabs.com/trac/puppet/wiki/SimpleTextRecipes
Mi clase de iptables:
Algunos ejemplos de uso en otras clases:
fuente
Puppet Labs tiene un ejemplo en su wiki: Patrones de módulos Iptables
En resumen: crea fragmentos para cada servicio y luego los instala invocando el tipo definido ipt_fragment:
Cuando se instala un fragmento (están en /etc/iptables.d/), desencadena la ejecución de un script que concatena todos los fragmentos y reinicia iptables.
fuente
La pregunta es, ¿qué pretendes lograr?
Poner iptables en Puppet es fácil: coloca el script en el servidor de Puppet y sírvelo donde lo necesites. Si necesita algo de personalización, conviértalo en una plantilla.
Ahora, quizás desee algo como "Si el host X tiene WebServer, los puertos 80 y 443 deben estar abiertos". En ese caso, lo que le sugiero que haga es componer el script a partir de múltiples partes del archivo, utilizando el módulo común
concatenated_file
oconcatfilepart
(prefiero el último, que permite el pedido, pero no está disponible en todos los tenedores, le indico que Camptocamp, que lo tiene).Estas partes del archivo se pueden escribir fácilmente usando plantillas. El truco es que exporta el
concatfilepart
en laApache
clase (posiblemente llamando a un define que prepara unconcatfilepart
basado en parámetros como la dirección IP y el puerto), y en laiptables
clase se daría cuenta de todos los exportadosconcatfilepart
etiquetadosiptables
o algo así.Si haces eso, me encantaría ver ese módulo en github. Nunca pude escribir un módulo de iptables. :-)
fuente