Puppet: conversione di un model personalizzato nel file di configuration

Ho assunto le funzioni amministrative per un ambiente Linux di circa 20 caselle. Cercando di consolidare la gestione della configuration con Puppet. La maggior parte è semplice, comunque mi sono imbattuto sulle regole del firewall.

L'amministratore precedente si basava su uno script personalizzato che creava le regole iptables per each casella di un model comune.

Le regole del model sono simili:

 hostname: Action Interface Source Protocol destPort 

Qualche esempio:

 ALL: Accept eth0 any tcp 80 server4: Accept All xxxx/24 tcp/udp 111 node5: Deny All yyyy 

Le regole per TUTTI si applicano a tutte le caselle. Il resto dei params viene utilizzato per popolare le regole iptables. Ci sono circa 250 regole nel model.

È ansible riutilizzare questo model comune tramite il fantoccio e creare le regole iptables per each nodo? È questo tipo di testi che è ansible anche con il burattino?

  • Il traffico di return di return per correggere il gateway dipende dal servizio
  • Come ottengo il numero di connessioni TCP (attualmente) stabilite per una port specifica?
  • Iptables regola per bloccare la gamma ip per una string specifica (funziona a volte)
  • Come inoltrare la connessione da un'interface all'altra sotto Linux
  • Usa iptables per inoltrare ipv6 a ipv4?
  • iptables -p tutto - sport
  • Martellamento del server di posta
  • perché l'inoltro della port non funziona in questa configuration?
  • 5 Solutions collect form web for “Puppet: conversione di un model personalizzato nel file di configuration”

    Non proprio.

    Per essere più esatti; è tecnicamente ansible. Ma poiché né il DSL o il fantoccio del fantoccio sono progettati per tali compiti¹, si otterrà il debito tecnico per una soluzione gommosa e fitta.

    IMHO, dal momento che si desidera mantenere questo model, il miglior modo per agire è quello di scrivere uno script che trasformsrà i dati da questo formato apparentemente legacy nel DSL burattino nativo (che emette file .pp che includerai in modo appropriato) ², utilizzando qualsiasi Tipi / Moduli più adatti alla tua scatola.

    Ora, invece di rieseguire lo script di tutto il tempo, farò che il tuo burattino manifesti la fonte autorevole. Ad esempio, fare tutti i cambiamenti e esportre come necessario, fino a quando non si libera dell'impianto legale che si basa su questo formato. Può avere senso ignorarlo se il periodo di transizione è abbastanza breve; e non ti dispiace importre qualche volta.


    ¹) Questo dovrebbe essere ovvio se si pensa brevemente: il task di un CM è quello di essere la fonte autorevole di dati di configuration, non di bloccare i dati. Ecco cosa sed , awk , Pipes, et al. sono per.

    ²) Si consideri anche hiera.

    ³) Molto probabilmente, il tuo successore vi odia per te, e cosa più importnte, ti odio dopo qualche distanza al di sotto del foro del rabbitmq.

    Il modo più saggio di farlo sarebbe analizzare il tuo vecchio config dai file legacy che hai citato in un fantoccio DSL con uno script personalizzato e modificare il module firewall per includere il supporto per i tuoi sisthemes legacy e eseguire anche il burattino su di essi.

    Potresti usare l' ipfilter sul burattino come punto di partenza.

    Un modo rapido e sporco per farlo sarebbe utilizzare define per avvolgere ipfilter e firewall in base al sistema operativo del nodo.

    Sembra che qualcuno ha voluto reimplementare lo shorewall e non è arrivato …

    Penso che stai andando fuori dalla fortuna alla ricerca di una soluzione pronta che trasformsrà quel formato di file personalizzato in risorse Puppet; essendo un formato di file personalizzato, nessuno altro lo avrà mai sentito parlare o affrontarlo. Il formato sembra relativamente semplice, perciò un piccolo pezzo di script in una lingua a tua scelta dovrebbe rendere ansible la trasformazione in risorse. La prossima domanda, ovviamente, è il pacchetto da utilizzare per definire le risorse del firewall all'interno di Puppet …

    Se invece stai cercando di mantenere il formato di file personalizzato pazzo, ma utilizzare Puppet come intermediario per spedire le regole "compilate" alle macchine, consiglierei di non fare niente di particolare fantasia. Probabilmente cercherò di "compilare" le regole del Puppetmaster quando si distribuisce l'tree, in modo che se ci sono modifiche al file "sorgente", saranno disponibili nuove regole nel file server per essere spediti ai client quando la prossima corsa.

    Non credo che tu possa implementare questo tipo di trasformazione all'interno del Puppet DSL.

    Vornetworking scrivere una Ruby che consuma l'input di text e crea risorse per il module firewall .

    Stiamo utilizzando Shorewall per raggiungere questo objective. Shorewall si basa su iptables (netfilter). Ci sono diversi moduli nei pupazzi per automatizzare Shorewall in Puppet.

    Di solito hai un paio di fonti dati in Puppet, ad esempio Hiera e un ENC. In questo caso, se hai impostato Hiera nel modo giusto, puoi avere la configuration del tuo firewall in esso. La cosa buona con Hiera è che puoi "sovrascrivere" la configuration per specifiche reti / host / services / etc (ad esempio: default.yaml -> webserver.yaml -> apache.yaml). I più specifici che contengono la chiave necessaria saranno leader.

    Se hai bisogno di get regole da un database (ad esempio MySQL) puoi passare l'ENC a Puppet.

    In Puppet è ansible creare templates per Shorewall (ex: webserver.erb) e includerli nella configuration di shorewall. Potrebbero contenere qualcosa di simile:

     # This file is managed by Puppet <% @firewall_rules.each do |entry| -%> <%= entry['ip'] %>/<%= entry['mask'] %> - - src,dst <% end -%> 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.