El último paso en la creación de nuestro módulo es
establecer las reglas necesarias al firewall para que permita que
el servicio pueda funcionar correctamente. En nuestro caso debemos
de poder realizar conexiones al puerto udp 123 de un servidor ntp
externo, en caso de que el servicio de sincronización externa
este activado. Que un cliente se conecte al puerto udp 123 de eBox
en caso de que el servicio de sincronización a clientes de la
red este activado. Para ello nos creamos un método en la clase
del módulo que nos estamos implementando, al que hemos llamado
_configureFirewall, al cual llamaremos cuando
sea necesario. Veamos su implementación:
Ejemplo 7.25. Configuración del firewall
sub _configureFirewall
{
my $self = shift;
my $fw = EBox::Global->modInstance('firewall');
if ($self->synchronized) {
$fw->addOutputRule('udp', 123);
} else {
$fw->removeOutputRule('udp', 123);
}
if ($self->service and (!defined($fw->service('ntp')))) {
$fw->addService('ntp', 'udp', 123, 0);
$fw->setObjectService('_global', 'ntp', 'allow');
} elsif ( !($self->service) and defined($fw->service('ntp')) ) {
$fw->removeService('ntp');
}
}Como vemos el módulo firewall de eBox nos
simplifica mucho el trabajo de añadir nuevas reglas de
entrada o salida al firewall. Lo primero que hacemos es
obtener una instancia del módulo firewall a través de
EBox::Global->modInstance('firewall').
Después dependiendo de si el servicio de sincronización
externa está activado añadiremos o eliminaremos la regla
de salida al puerto udp 123 de eBox mediante las llamadas
a los métodos: addOutputRule o
removeOutputRule del módulo firewall.
Para el servicio de sincronización a clientes de la red, el
módulo firewall nos ofrece otros sencillos métodos. Por un lado
deberemos añadir el servicio ntp al firewall mediante la llamada a
addService('ntp', 'udp', 123, 0) y después
mediante la llamada a setObjectService
estableceremos la politica sobre el objeto recien creado que en nuestro
caso va a ser permitir el acceso. En caso de que el servicio de
permitir sincronización a clientes de la red este desactivado, podemos
quitar el servicio ntp del firewall fácilmente mediante la llamada a
removeService.