En caso de querer ejecutar un script/programa/servicio al arranque del sistema (Linux), hemos de crear un pequeño script dentro de la carpeta /etc/init.d/ en el cual se especifican los comandos de arranque y parada del mismo.
Normalmente al instalar cualquier cosa desde gestores de paquetes como yum o apt, se crea automáticamente el script en init.d que realiza esta tarea (httpd, exim, mysql, etc) pero si queremos hacerlo con un programa o script propio tendremos que crearlo a mano.
Es muy sencillo, a continuación tenéis un ejemplo de este script, en el cual especificamos el comando a ejecutar cuando se le pasa el parametro start o stop, simplemente hay que añadir el comando correspondiente para arrancar el servicio o pararlo.
#! /bin/sh# Script ejemplo para arranque de servicios en /etc/init.d/#case "$1" instart)echo "Iniciando servicio... "# Aquí comando a ejecutar para arrancar el servicio;;stop)echo "Deteniendo servicio..."# Aquí comando a ejecutar para detener el servicio;;*)echo "Modo de empleo: /etc/init.d/mi_script {start|stop}"exit 1;;esacexit 0Posteriormente, hemos de crear un enlace simbólico en el runlevel correspondiente para que se ejecute cada vez que arranquemos la máquina. En otro artículo ya explique el tema de runlevels y añadir servicios al inicio del sistema en RHEL y CentOS , podéis revisarlo. No obstante si quisieramos ejecutar dicho script en cada arranque crearíamos el enlace simbólico así:
ln -s /etc/init.d/mi_script /etc/rc3.d/S98miscript
Lo que hacemos es crear un enlace simbólico cuya primera letra es la S (de Start, K sería de kill) y el nº98 (define el momento en el que se va a ejecutar, a menor número, antes se ejecuta). Veréis que el enlace simbólico lo creo en el runlevel 3 (Multiusuario con soporte de red), que es en el que arranca esta máquina en concreto. En el fichero /etc/inittab podéis averiguar el vuestro:
# cat /etc/inittab## inittab This file describes how the INIT process should set up# the system in a certain run-level.## Author: Miquel van Smoorenburg, # Modified for RHS Linux by Marc Ewing and Donnie Barnes## Default runlevel. The runlevels used by RHS are:# 0 - halt (Do NOT set initdefault to this)# 1 - Single user mode# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)# 3 - Full multiuser mode# 4 - unused# 5 - X11# 6 - reboot (Do NOT set initdefault to this)#id:3:initdefault:Ejemplo:################################### Script de Ejemplo ############################################### FLUSH de reglas ######################firewall_start() {######################################################################iptables -Fiptables -Xiptables -t nat -F## Establecemos politica por defectoiptables -P INPUT ACCEPTiptables -P OUTPUT ACCEPTiptables -P FORWARD ACCEPTiptables -t nat -P PREROUTING ACCEPTiptables -t nat -P POSTROUTING ACCEPT## Nota: eth0 es el interfaz conectado a internet y eth1 a la LAN ######################### Acceso localhost ############################/sbin/iptables -A INPUT -i lo -j ACCEPT########### Al firewall tenemos acceso desde las redes locales ######iptables -A INPUT -s 10.10.0.0/24 -i eth1 -j ACCEPT########### Enmascaramiento de la red local #########################iptables -t nat -A POSTROUTING -s 10.10.0.0/24 -o eth0 -j MASQUERADE########## Activamos el ICMP para un solo PC ########################iptables -A INPUT -i eth0 -s 10.10.0.5 -p icmp -j ACCEPT########## Activamos el SSH/22 para un solo PC ######################iptables -A INPUT -s 10.10.0.5 -p tcp --dport 22 -i eth1 -j ACCEPT########## Activamos el Renvio FORWARD para que Fincione ############echo 1 > /proc/sys/net/ipv4/ip_forwardiptables -L -v}############################################################################firewall_stop() {############################################################################echo "Bajando la configuracion del firewall..."echo ""echo "ADVERTENCIA: en este momento es permitido cualquier tipo de trafico a traves del"echo "firewall, lo que pone en grave riesgo la seguridad de este servidor."# Elimina todas las reglas existentes en las cadenasiptables -Fiptables -t nat -Fiptables -t mangle -F# Elimina las cadenas definidas por el usuarioiptables -Xiptables -t nat -Xiptables -t mangle -X# Establece los contadores de las cadenas en ceroiptables -Ziptables -t nat -Ziptables -t mangle -Z# Establece las directivas por defecto para las cadenas de la tabla filteriptables -P INPUT ACCEPTiptables -P OUTPUT ACCEPTiptables -P FORWARD ACCEPTecho ""}########################################################################################################################################################case "$1" in############################################################################'start') firewall_start ;;'stop') firewall_stop ;;'restart') firewall_start ;;'status') echo $"Table: filter" iptables -L ;;*) echo "use $0 start|stop|restart|status"esacCrearmos el enlace simbolicoln -s /etc/init.d/firewallnat /etc/rc3.d/S40firewallnatGracias...!Atentamente:Franklin Campo