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" in
start)
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
;;
esac
exit 0
Posteriormente, 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 -F
iptables -X
iptables -t nat -F
## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -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_forward
iptables -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 cadenas
iptables -F
iptables -t nat -F
iptables -t mangle -F
# Elimina las cadenas definidas por el usuario
iptables -X
iptables -t nat -X
iptables -t mangle -X
# Establece los contadores de las cadenas en cero
iptables -Z
iptables -t nat -Z
iptables -t mangle -Z
# Establece las directivas por defecto para las cadenas de la tabla filter
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
echo ""
}
############################################################################
############################################################################
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"
esac
Crearmos el enlace simbolico
ln -s /etc/init.d/firewallnat /etc/rc3.d/S40firewallnat
Gracias...!
Atentamente:
Franklin Campo