Temos um módulo de fantoches (v3.6.2 como estamos usando para o Satellite 6)
O módulo funciona como esperado, exceto ao adicionar várias fontes a uma zona. Ele irá adicionar a zona e, em seguida, adicionar um souce, em seguida, erro ao tentar adicionar a segunda fonte para a zona com a mensagem:
INVALID_ZONE: backup
A execução do módulo pela segunda vez adiciona as fontes 2 e 3 com sucesso.
A zona está sendo criada com sucesso e o recarregamento do firewalld está sendo acionado, mas é quase como se não terminasse o recarregamento, pois não vê a zona de "backup" recém-adicionada como válida para a segunda e terceira fontes .
Código do módulo:
class firewalld(
$enabled = true,
$package_name = 'firewalld',
$service_name = 'firewalld',
$config_dir = '/etc/firewalld',
$zone_create = [],
$zone_remove = [],
$zone_set_default = '',
$zone_add_source = hiera_hash('firewalld::zone_add_source', { }),
$zone_add_service = hiera_hash('firewalld::zone_add_service', { }))
{
if $enabled {
$service_ensure = 'running'
$service_enable = true
$package_ensure = 'present'
$config_ensure = 'present'
Package["$package_name"] -> File["$config_dir"]
File["$config_dir"] -> Service["$service_name"]
} else {
$service_ensure = 'stopped'
$service_enable = false
$package_ensure = 'absent'
$config_ensure = 'absent'
Service["$service_name"] -> File["$config_dir"]
File["$config_dir"] -> Package["$package_name"]
}
package { "$package_name":
ensure => $package_ensure,
}
file { "$config_dir":
ensure => $config_ensure,
force => true,
}
service { "$service_name":
ensure => $service_ensure,
enable => $service_enable,
hasrestart => true,
hasstatus => true,
}
exec { 'firewalld_reload':
onlyif => 'systemctl -q is-enabled firewalld.service',
path => '/bin:/usr/bin:/sbin:/usr/sbin',
# command => "systemctl restart firewalld.service",
command => "firewall-cmd --reload",
refreshonly => true,
}
define firewalld_zone_create() {
exec { "firewalld_zone_create_${name}":
path => '/bin:/usr/bin:/sbin:/usr/sbin',
command => "firewall-cmd --permanent --new-zone=${name}",
unless => "firewall-cmd --permanent --get-zones | grep -qw ${name}",
notify => Exec['firewalld_reload'],
require => Service['firewalld'],
}
}
define firewalld_zone_add_source($zone, $source) {
exec { "firewalld_${zone}_add_source_${source}":
path => '/bin:/usr/bin:/sbin:/usr/sbin',
command => "firewall-cmd --permanent --zone=${zone} --add-source=${source}",
unless => "firewall-cmd -q --permanent --zone=${zone} --query-source=${source}",
notify => Exec['firewalld_reload'],
require => Service['firewalld'],
}
}
if $enabled {
firewalld_zone_create{ $zone_create: } -> firewalld_zone_set_default_zone{ $zone_set_default: }
create_resources('firewalld_zone_add_service', $zone_add_service)
create_resources('firewalld_zone_add_source', $zone_add_source)
}
}
Cortei as seções que definem a adição de portas / destinos, etc., pois é bastante longo.
A entrada que estou usando é
class { 'firewalld':
enabled => true,
zone_create => ['zone1', 'mgmt', 'backup'],
zone_add_service => {
'001' => { 'zone' => 'mgmt', 'service' => 'ssh' },
},
zone_add_source => {
'001' => { 'zone' => 'mgmt', 'source' => 'INT.x.x.x/24' },
'002' => { 'zone' => 'mgmt', 'source' => 'INT.x.x.x/24' },
'003' => { 'zone' => 'mgmt', 'source' => 'INT.x.x.0/24' },
'004' => { 'zone' => 'backup', 'source' => 'IP.1.x.x/24' },
'005' => { 'zone' => 'backup', 'source' => 'IP.2.x.0/24' },
'006' => { 'zone' => 'backup', 'source' => 'IP.3.x.0/24' },
},
zone_set_default => 'zone1',
}
Eu alterei as sub-redes e nomes de zona para fins de segurança.
Se alguém poderia, por favor, informar sobre o porquê desse comportamento e como resolvê-lo, agradeceria muito.
Nota: Eu tentei um firewall-cmd - reload e um systemctl restart firewalld.service e obtive o mesmo resultado.
Felicidades,
Amelia