Puppet: convertendo um template customizado em um arquivo de configuração

2

Eu assumi funções administrativas em um ambiente Linux de cerca de 20 caixas. Tentando consolidar o gerenciamento de configurações com o Puppet. A maioria é simples, mas eu tropecei nas regras do firewall.

O administrador anterior baseou-se em um script personalizado que criou iptables regras para cada caixa fora de um modelo comum.

As regras do modelo são assim:

hostname:   Action   Interface   Source    Protocol   destPort

Alguns exemplos:

ALL:          Accept   eth0    any           tcp   80
server4:       Accept   All    x.x.x.x/24   tcp/udp   111
node5:         Deny     All    y.y.y.y

As regras para ALL se aplicam a todas as caixas. O resto dos parâmetros são usados para preencher as regras do iptables. Existem cerca de 250 regras no modelo.

É possível reutilizar este modelo comum via fantoche e construir o conjunto de regras iptables para cada nó? Esse tipo de texto é até mesmo possível com o fantoche?

    
por Swartz 24.08.2015 / 04:41

5 respostas

4

Não realmente.

Para ser mais exato; é tecnicamente possível. Mas, como nem o DSL nem o fantoche dos fantoches são projetados para essas tarefas¹, você acumulará dívida técnica em uma solução quebradiça de pastilha elástica e papelão.³

IMHO, uma vez que você deseja manter este modelo, o melhor curso de ação é escrever um script que transformará os dados desse formato aparentemente legado em DSL nativo de puppet (emitindo .pp arquivos que você incluirá apropriadamente) ², usando quaisquer tipos / módulos que sejam mais adequados ao seu boxen.

Agora, em vez de re-executar o script o tempo todo, eu faria o seu boneco manifestar a fonte autorizada em seu lugar. Ou seja faça todas as alterações lá e exporte conforme necessário, até se livrar do encanamento legado que se baseia nesse formato. Pode fazer sentido omitir isso se o seu período de transição for curto o suficiente; e você não se importa em "importar" algumas vezes.

¹) Isso deve ser óbvio se você pensar brevemente sobre isso: O dever de um CM é ser a fonte autoritativa de dados de configuração, não para manipular dados. Isso é o que sed , awk , Pipes, et al. são para.

²) Considere hiera também.

³) Muito provavelmente, seu sucessor odiará você por isso e, mais importante, você se odiará depois de uma certa distância na toca do coelho.

    
por 01.09.2015 / 14:13
1

A melhor maneira de fazer isso seria analisar sua configuração antiga dos arquivos legados que você mencionou no DSL dos fantoches com um script personalizado e modificar o firewall para incluir suporte aos seus sistemas legados e executar o fantoche neles também.

Você pode usar o ipfilter no foro de fantoches como ponto de partida.

Uma maneira rápida e suja de fazer isso seria usar define para encapsular ipfilter e firewall, dependendo do sistema operacional do nó.

    
por 01.09.2015 / 19:26
0

Parece que alguém queria reimplementar o shorewall e não chegou lá ...

Acho que você está sem sorte em procurar uma solução pronta que transformará esse formato de arquivo personalizado em recursos do Puppet; Sendo um formato de arquivo personalizado, ninguém mais terá ouvido falar dele ou lidado com ele. No entanto, o formato parece relativamente simples, portanto, um pouco de script em uma linguagem de sua escolha deve permitir transformá-lo em recursos. A próxima pergunta, é claro, é qual pacote usar para definir os recursos do firewall dentro do Puppet ...

Se, ao invés disso, você estiver procurando manter o formato de arquivo personalizado, mas usar o Puppet como intermediário para enviar os conjuntos de regras "compilados" para as máquinas, eu aconselho a não fazer nada particularmente extravagante. Eu provavelmente procuraria "compilar" os conjuntos de regras no Puppetmaster quando você implementasse a árvore, para que, se houvesse mudanças no arquivo "fonte", novos conjuntos de regras ficassem disponíveis no servidor de arquivos para serem enviados para os clientes quando eles são executados na próxima vez.

    
por 24.08.2015 / 04:52
0

Eu não acredito que você possa implementar esse tipo de transformação dentro da DSL Puppet.

Você vai querer escrever uma função Ruby que consuma a entrada de texto e cria recursos para o módulo de firewall .

    
por 26.08.2015 / 13:54
0

Estamos usando o Shorewall para conseguir isso. O Shorewall é construído sobre o iptables (netfilter). Existem vários módulos nos puppetlabs para automatizar o Shorewall no Puppet.

Normalmente, você tem algumas fontes de dados no Puppet, por exemplo, Hiera e um ENC. Neste caso, se você tiver configurado o Hiera corretamente, você poderá ter sua configuração de firewall lá. A coisa boa com Hiera é que você pode "anular" a configuração de redes específicas / hosts / services / etc (por exemplo: default.yaml - > webserver.yaml - > apache.yaml). O mais específico que contém a chave que você precisa estará liderando.

Se você precisa obter regras de um banco de dados (MySQL, por exemplo), você pode fazer com que o ENC as passe para o Puppet.

No Puppet, você pode criar modelos para o Shorewall (ex: webserver.erb) e incluí-los na sua configuração do shorewall. Eles poderiam conter algo como:

# This file is managed by Puppet
<% @firewall_rules.each do |entry| -%>
<%= entry['ip'] %>/<%= entry['mask'] %> - - src,dst
<% end -%>
    
por 07.09.2015 / 17:20