7.7. Estableciendo reglas a medida al firewall

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.