Para entender completamente como o trabalho do módulo está no $module_path/firewall/lib/puppet/{type|proider}/*
Está tudo escrito em Ruby. Mesmo que você não conheça a linguagem, é bastante simples interpretar.
Como mencionado no comentário, o código adicional no seu manifesto é uma solução para que o módulo funcione corretamente. Eu acho que eles tiveram algum problema para implementar todo o código diretamente no tipo / provedor via ruby. Faz sentido usar a funcionalidade iptables-save
padrão, porque é muito mais fácil recarregar a configuração do firewall após a reinicialização e funciona para a maioria das distribuições populares do Linux.
Mesmo se você copiar / colar esse código, ele não deverá afetar sua configuração atual, desde que você não use o tipo de recurso no padrão do nó ou na configuração do nó. Para fins de teste, inclua este código diretamente no nó de teste. Deve produzir o mesmo resultado. Acima, é um exemplo:
Firewall {
notify => Exec["persist-firewall"],
before => Class['my_fw::post'],
require => Class['my_fw::pre'],
}
Firewallchain {
notify => Exec['persist-firewall'],
}
resources { "firewall":
purge => true
}
firewall { '100 ssh 22':
port => '22',
proto => 'tcp',
action => 'accept',
}
firewall { '100 www 80':
port => '80',
proto => 'tcp',
action => 'accept',
}
firewall { '100 sql 5436':
port => '5436',
proto => 'tcp',
action => 'accept',
}
firewall { '100 sql 5438':
port => '5438',
proto => 'tcp',
action => 'accept',
}
firewall { '100 sql 5440':
port => '5440',
proto => 'tcp',
action => 'accept',
}
exec { "persist-firewall":
command => $operatingsystem ? {
"debian" => "/sbin/iptables-save > /etc/iptables/rules.v4",
/(RedHat|CentOS)/ => "/sbin/iptables-save > /etc/sysconfig/iptables",
},
refreshonly => 'true',
}
Neste exemplo, estou permitindo 22, 80. 5436, 5438 conexão TCP INCOMING.