Para configurar el firewall IPTABLES que se incluye en linux se utiliza un «script» que se instala en /etc/rc.d
(para poder invocarlo desde los SERVICES
en /etc/rc.conf
).
A continuación se incluye un «script» de ejemplo para que sirva como modelo:
#!/bin/bash #=============================================================================== # /etc/rc.d/firewall: (des)habilitar las reglas del firewall #------------------------------------------------------------------------------- echo "Firewall not configured. Edit $0 before use." ; exit 1 # DELETE THIS LINE . /etc/rc.conf IPTABLES="/usr/sbin/iptables" #------------------------------------------------------------------------------- IP0=192.168.56.xx # ETH0 - LAN NET0=192.168.56.0/24 function local_config { # Quitar el comentario a los servicios deseados # ssh_server # DNS_server # NTP_server # DHCP_server eth0 # TFTP_server # fb_server # postgres_server # web_server # mail_server } #------------------------------------------------------------------------------- function ssh_server { # Servicio SSH/SFTP: solo red local # Debe coincidir con "sshd" en /etc/hosts.allow ${IPTABLES} -A INPUT -s ${NET0} -d ${IP0} -p tcp --dport ssh -j ACCEPT ${IPTABLES} -A OUTPUT -s ${IP0} -d ${NET0} -p tcp --sport ssh -j ACCEPT } function DNS_server { # Servicio DNS: solo red local ${IPTABLES} -A INPUT -s ${NET0} -d ${IP0} \ -p udp --dport domain -j ACCEPT ${IPTABLES} -A OUTPUT -s ${IP0} -d ${NET0} \ -p udp --sport domain -j ACCEPT } function NTP_server { # Servicio Hora: solo red local ${IPTABLES} -A INPUT -s ${NET0} -d ${IP0} -p udp --dport ntp -j ACCEPT ${IPTABLES} -A OUTPUT -s ${IP0} -d ${NET0} -p udp --sport ntp -j ACCEPT } function DHCP_server { # Servicio DHCP: se pasa el interface ${IPTABLES} -A INPUT -i ${1} -p udp --sport 68 --dport 67 -j ACCEPT ${IPTABLES} -A OUTPUT -o ${1} -p udp --sport 67 --dport 68 -j ACCEPT } function TFTP_server { # Servicio TFTP: solo red local # Revisar "in.tftp" en /etc/hosts.allow /sbin/modprobe nf_conntrack_tftp ${IPTABLES} -A INPUT -s ${NET0} -d ${IP0} \ -p udp -m state --state NEW,ESTABLISHED --dport tftp -j ACCEPT ${IPTABLES} -A OUTPUT -s ${IP0} -d ${NET0} \ -p udp -m state --state ESTABLISHED --sport tftp -j ACCEPT ${IPTABLES} -A INPUT -s ${NET0} -d ${IP0} \ -p udp -m state --state ESTABLISHED,RELATED \ --sport 1024: --dport 1024: -j ACCEPT ${IPTABLES} -A OUTPUT -s ${IP0} -d ${NET0} \ -p udp -m state --state ESTABLISHED,RELATED \ --sport 1024: --dport 1024: -j ACCEPT } function fb_server { # Servidor Firebird SQL: solo red local ${IPTABLES} -A INPUT -s ${NET0} -d ${IP0} -p tcp --dport 3050 -j ACCEPT ${IPTABLES} -A OUTPUT -s ${IP0} -d ${NET0} -p tcp --sport 3050 -j ACCEPT } function postgres_server { # Servidor SQL Postgres: solo red local ${IPTABLES} -A INPUT -s ${NET0} -d ${IP0} \ -p tcp --dport postgresql -j ACCEPT ${IPTABLES} -A OUTPUT -s ${IP0} -d ${NET0} \ -p tcp --sport postgresql -j ACCEPT } function web_server { # Servicios HTTP(s): solo red local ${IPTABLES} -A INPUT -s ${NET0} -d ${IP0} \ -p tcp -m multiport --dports http,https -j ACCEPT ${IPTABLES} -A OUTPUT -s ${IP0} -d ${NET0} \ -p tcp -m multiport --sports http,https -j ACCEPT } function mail_server { # Servicios SMTP(s) y POP3(s): solo red local ${IPTABLES} -A INPUT -s ${NET0} -d ${IP0} -p tcp \ -m multiport --dports smtp,pop3,smtps,pop3s -j ACCEPT ${IPTABLES} -A OUTPUT -s ${IP0} -d ${NET0} -p tcp \ -m multiport --sports smtp,pop3,smtps,pop3s -j ACCEPT } #------------------------------------------------------------------------------- case $1 in start|restart) echo -n "Aplicando Reglas de Firewall..." # Eliminar todas las reglas y prohibir acceso por defecto ${IPTABLES} -F ${IPTABLES} -X ${IPTABLES} -Z ${IPTABLES} -P INPUT DROP ${IPTABLES} -P OUTPUT DROP ${IPTABLES} -P FORWARD DROP # Permitir "localhost" y direcciones IP propias ${IPTABLES} -A INPUT -i lo -j ACCEPT ${IPTABLES} -A OUTPUT -o lo -j ACCEPT ${IPTABLES} -A INPUT -s ${IP0} -j ACCEPT ${IPTABLES} -A OUTPUT -d ${IP0} -j ACCEPT # Acceso a los servidores DNS incluidos en rc.conf for IP in ${DNS[@]} do if [ "${IP}" != "127.0.0.1" ] then ${IPTABLES} -A INPUT -s ${IP} -d ${IP0} \ -p udp --sport domain -j ACCEPT ${IPTABLES} -A OUTPUT -s ${IP0} -d ${IP} \ -p udp --dport domain -j ACCEPT fi done local_config # Acceso a los servidores NTP incluidos en rc.conf for IP in ${TIMESERVERS} do if [ "${IP}" != "127.0.0.1" ] then ${IPTABLES} -A INPUT -s ${IP} -d ${IP0} \ -p udp --sport ntp -j ACCEPT ${IPTABLES} -A OUTPUT -s ${IP0} -d ${IP} \ -p udp --dport ntp -j ACCEPT fi done # # Registrar paquetes no interceptados en el Log # ${IPTABLES} -A INPUT -j LOG --log-level debug # ${IPTABLES} -A OUTPUT -j LOG --log-level debug # Asegurar que no entra ni sale nada mas ${IPTABLES} -A INPUT -j DROP ${IPTABLES} -A OUTPUT -j DROP echo " OK." ;; stop) echo -n "Eliminando Reglas de Firewall..." # Eliminar todas las reglas y permitir acceso por defecto ${IPTABLES} -F ${IPTABLES} -X ${IPTABLES} -Z ${IPTABLES} -P INPUT ACCEPT ${IPTABLES} -P OUTPUT ACCEPT ${IPTABLES} -P FORWARD ACCEPT echo " OK." ;; status) $IPTABLES -L -n | less ;; *) echo "usage: $0 [ start | stop | restart | status ]" ;; esac #===============================================================================