Mi Blog
👉 Cómo crear un servicio de SystemD en GNU/Linux

Cómo crear un servicio de SystemD en GNU/Linux

 
(4 votos)

Un daemon es un proceso de fondo que se ejecuta de manera continua, sin estar directamente asociado con la interacción de un usuario. Estos procesos son iniciados durante el arranque del sistema y realizan tareas específicas, como gestionar servicios, controlar hardware o ejecutar funciones del sistema, sin requerir la intervención directa del usuario. Los "daemons" son fundamentales para el funcionamiento estable y eficiente del sistema operativo Linux.

Seguid leyendo y os enseñaré a crear servicios para que funcionen con SystemD...

⬇️ Compra en Amazon el hardware que utilizo ⬇️

🔥 ¡DESCÚBRELOS! 🔥

 

 

¿QUE ES SYSTEMD?

Systemd es un sistema de inicio (init) y un conjunto de herramientas diseñado para la administración y configuración del sistema en sistemas operativos tipo Unix. Fue desarrollado como una alternativa al sistema init tradicional en sistemas basados en Linux.

Algunas de las características principales de systemd incluyen:

  • Arranque rápido: Systemd está diseñado para mejorar los tiempos de arranque del sistema al paralelizar la inicialización de servicios.
  • Manejo de dependencias: Systemd puede gestionar y controlar las dependencias entre servicios, lo que permite un inicio y apagado más eficiente del sistema.
  • Registro centralizado: Systemd centraliza la gestión de registros del sistema, facilitando el acceso y análisis de registros para los administradores del sistema.
  • Unidades de servicio: Los servicios en systemd se definen mediante unidades, que pueden ser servicios, sockets, dispositivos, puntos de montaje, etc.
  • Control de cgroups: Systemd utiliza cgroups (grupos de control) para aislar y limitar los recursos utilizados por los procesos del sistema.
  • Herramientas adicionales: Systemd incluye varias herramientas auxiliares para la gestión del sistema, como systemctl para controlar servicios, journalctl para examinar registros y otras utilidades relacionadas con el sistema.

 

Aunque systemd ha sido ampliamente adoptado en muchas distribuciones de Linux, también ha generado cierta controversia y debate debido a su enfoque diferente en comparación con el sistema init tradicional. Sin embargo, es importante destacar que su implementación ha facilitado la gestión del sistema en muchas configuraciones y ha proporcionado características avanzadas a los administradores del sistema.

 

Systemd es un sistema de inicio y gestión de servicios en GNU/Linux

 

 

1.- ELEMENTOS NECESARIOS PARA ESTE TUTORIAL

  • Un equipo con GNU/Linux con SystemD

 

 

 

 

2.- CREAR UN SERVICIO

El fichero principal del servicio lo ubicaremos en /etc/systemd/system/firewall.service, para ello, ejecutaremos el comando siguiente para comenzar a editarlo:

raul@debian:~$ sudo nano /etc/systemd/system/firewall.service

 

 

Las líneas más importantes del fichero son:

  • EnvironmentFile: Fichero de variables
  • ExecStart: Script a ejecutar cuando arrancamos el servicio
  • ExecStop: Script a ejecutar cuando paramos el servicio

 

 

El contenido del fichero es:

#/bin/bash
[Unit]
Description=Custom Firewall Rules
After=network.target

[Service]
Type=oneshot
EnvironmentFile=/etc/default/firewall
ExecStart=/etc/scripts/firewall/enable-firewall.sh
RemainAfterExit=true
ExecStop=/etc/scripts/firewall/disable-firewall.sh
StandardOutput=journal

[Install]
WantedBy=multi-user.target

 

 

 

3.- CREAR LOS SCRIPTS DE ARRANQUE/PARADA PARA EL SERVICIO

Los scripts que se van a usar los guardaremos en el directorio /etc/scripts/firewall/. Podemos guardarlos en muchos sitios, pero debemos tener en cuenta que deben poder ser modificados solo por root o usuarios con privilegios. Crearemos el directorio con el siguiente comando: 

raul@debian:~$ sudo mkdir -p /etc/scripts/firewall/

 

 

El contenido del fichero /etc/scripts/firewall/enable-firewall.sh es:

#!/bin/bash
#
# Enable Custom Firewall
#
echo "Setting up firewall ..."
iptables -t filter -F INPUT

# Applying firewall rules on INPUT chain

iptables -t filter -A INPUT -p tcp -s ${INTERNAL_NETWORK} --dport 80 -j DROP
iptables -t filter -A INPUT -p icmp -s 0.0.0.0/0 -i ${INTERNAL_IFACE} -j DROP
iptables -t filter -A INPUT -p tcp -s 192.168.1.100 -d ${INTERNAL_ADDR} -j DROP

 

 

El contenido del fichero /etc/scripts/firewall/disable-firewall.sh es:

#!/bin/bash
#
# Disable Custom Firewall
#
echo "Disabling up firewall ..."
iptables -t filter -F INPUT

 

 

Modificamos los ficheros para añadirles permisos de ejecución:

raul@debian:~$ sudo chmod +x /etc/scripts/firewall/*.sh

 

 

Ahora, necesitamos crear el fichero /etc/default/firewall donde irán todas las variables que vamos a utilizar. Aunque no es necesario hacer lo de esta forma, facilita mucho el trabajo y queda todo más ordenado y "elegante":

El contenido del fichero en este ejemplo será el siguiente:

INTERNAL_ADDR="192.168.1.10"
INTERNAL_NETWORK="192.168.1.0/24"
INTERNAL_IFACE="enp0s3"

 

 

4.- RECARGAR EL SERVICIO

Una vez que ya tenemos toda la configuración realizada, deberemos recargar SystemD para que "se entere" de los cambios. Para ello primero deberemos ejecutar el siguiente comando:

raul@debian:~$ sudo systemctl daemon-reload

 

 

5.- ARRANCAR AL SERVICIO

Una vez que ya tenemos disponible el nuevo servicio para trabajar eon él, el primer paso será arrancar el servicio y ver si efectivamente funciona:

raul@debian:~$ sudo systemctl start firewall.service

 

 

6.- COMPROBAR EL SERVICIO

Para comprobar que el servicio está funcionando ejecutaremos:

raul@debian:~$ sudo systemctl status firewall.service

 

 

Podemos comprobar que las reglas del firewall están aplicadas con el comando:

raul@debian:~$ sudo iptables -L INPUT -v -n
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP 6 -- * * 192.168.1.0/24 0.0.0.0/0 tcp dpt:80
30 2520 DROP 1 -- enp0s3 * 0.0.0.0/0 0.0.0.0/0
0 0 DROP 6 -- * * 192.168.1.100 192.168.1.10

 

 

7.- ACTIVAR EL SERVICIO

Si queremos que el servicio arranque siempre que el equipo se reinicie/arranque, debemos ejecutar:

raul@debian:~$ sudo systemctl enable firewall.service

 

 

8.- DESACTIVAR EL SERVICIO

Si por el contrario, queremos desactivar por completo el servicio y que no arranque cuando arrancamos/reiniciamos el equipo ejecutaremos:

raul@debian:~$ sudo systemctl disable firewall.service

 

 

ENJOY!


Acerca de Mi

RPF

Soy Ingeniero Téc. Industrial Mecánico, Administrador de Sistemas Informáticos, Desarrollador de Aplicaciones Informaticas Web, Técnico Superior en PRL, Experto en Energías Renovables... y trabajo actualmente como Senior DevOPS en HP SCDS.

Contactar conmigo

Dirección: León, España

E-Mail: Contactar

Web: https://www.raulprietofernandez.net

Skype: raul.lnx

APÚNTATE GRATIS

VIP RPF
Entra en la Comunidad VIP y consigue acceso a las descargas en PDF, Trucos y Videotutoriales ocultos y mucho más... ¡Muy Pronto!
Cookies

Usamos cookies en nuestro sitio web. Algunas de ellas son esenciales para el funcionamiento del sitio, mientras que otras nos ayudan a mejorar el sitio web y también la experiencia del usuario (cookies de rastreo). Puedes decidir por ti mismo si quieres permitir el uso de las cookies. Ten en cuenta que si las rechazas, puede que no puedas usar todas las funcionalidades del sitio web.