Ponle un firewall a tu Linux. IPTables


IPTables (tambien conocido como netfilter) nos permite configurar un Firewall de forma que tengamos controlado quien entra, sale y/o enruta a traves de nuestra maquina Linux…

Precisamente estas son las tres reglas basicas de todo Firewall: INPUT, OUTPUT y FORWARD. Aunque con iptables podremos hacer muchas mas cosas como: NAT (Network Address Translation), Masquering, Control de ancho banda, Control segun la MAC, evitar ataques DoS, Control Estado (esta es una de las principales novedades respecto a ipchain), etc…

Un ejemplo de un script para crear un firewall puede ser el siguiente:

#!/bin/sh
#
# Firewall Script para Linux 2.4.x e iptables
#
########################################
#
# 1. Opciones de configuración.
#

#########################################
#
# Configuración de area local.
#

LAN_IP=»192.168.0.2″
LAN_IP_RANGE=»192.168.0.0/24″
LAN_BCAST_ADRESS=»192.168.0.255″
LAN_IFACE=»eth1″

########################################
#
# Configuración del Localhost.
#

LO_IFACE=»lo»
LO_IP=»127.0.0.1″

########################################
#
# Configuracion de Internet.
#

INET_IP=»194.236.50.155″
INET_IFACE=»eth0″

########################################
#
# Localización de iptables.
#

IPTABLES=»/usr/sbin/iptables»

#########################################
#
# 2. Cargar Modulos.
#

/sbin/depmod -a

#
# Añade algunas opciones como LOG, REJECT y MASQUARADE.
#

/sbin/modprobe ip_conntrack
/sbin/modprobe ip_tables
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_nat
/sbin/modprobe ipt_LOG
#/sbin/modprobe ipt_REJECT
#/sbin/modprobe ipt_MASQUERADE

#
# Soporte para FTP e IRC.
#
#/sbin/modprobe ip_conntrack_ftp
#/sbin/modprobe ip_conntrack_irc

#
# Por si deseas compartir la conexion de internet, suponiendo que
# la interfaz que pertenece a internet es eth0
#
#modprobe iptable_nat
#iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#echo 1 > /proc/sys/net/ipv4/ip_forward

#######################################
#
# 3. Configuracion de /proc .
#
# Activa ip_forward si tienes dos a mas redes, quw
# necesita mover los paquetes a traves de este ordenador.
# Linux por defecto no los activa.
#

echo «1» > /proc/sys/net/ipv4/ip_forward

#
# Para usuarios con IP dinamica:
#
#echo «1» > /proc/sys/net/ipv4/ip_dynaddr

########################################
#
# 4. Configuracion de las reglas de iptables.
#
# Deja predeterminadas las politicas de INPUT, FORWARD y OUTPUT .
#

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

#
# Regla de bad_tcp_packets
#
# Toma el control de los paquetes escoria que no queremos.
#

$IPTABLES -N bad_tcp_packets
$IPTABLES -A bad_tcp_packets -p tcp ! –syn -m state –state NEW -j DROP

#
# Hace algunos checkeos sobre las IPs spoofeadas.
#

$IPTABLES -A bad_tcp_packets -i $INET_IFACE -s 192.168.0.0/16 -j DROP
$IPTABLES -A bad_tcp_packets -i $INET_IFACE -s 10.0.0.0/8 -j DROP
$IPTABLES -A bad_tcp_packets -i $INET_IFACE -s 172.16.0.0/12 -j DROP

#
# Activa las reglas de enrutado y traductor de direcciones de red.
#

$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT –to-source $INET_IP

#
# Paquetes TCP basura que no queremos
#

$IPTABLES -A FORWARD -p tcp -j bad_tcp_packets

#
# Acepta los paquetes que deseamos enrutar
#

$IPTABLES -A FORWARD -i $LAN_IFACE -j ACCEPT
$IPTABLES -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT

#
# Crea reglas diferentes para ICMP, TCP y UDP
#

$IPTABLES -N icmp_packets
$IPTABLES -N tcp_packets
$IPTABLES -N udpincoming_packets

#
# La regla para aceptar conexiones TCP
#

$IPTABLES -N allowed
$IPTABLES -A allowed -p TCP –syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state –state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -p TCP -j DROP

#
# Reglas ICMP
#

$IPTABLES -A icmp_packets -p ICMP -s 0/0 –icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -s 0/0 –icmp-type 11 -j ACCEPT

#
# Reglas TCP para ftp, ssh, http y auth
#

$IPTABLES -A tcp_packets -p TCP -s 0/0 –dport 21 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 –dport 22 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 –dport 80 -j allowed
$IPTABLES -A tcp_packets -p TCP -s 0/0 –dport 113 -j allowed

#
# Puertos UDP para dns y ntp.
#

$IPTABLES -A udpincoming_packets -p UDP -s 0/0 –source-port 53 -j ACCEPT
$IPTABLES -A udpincoming_packets -p UDP -s 0/0 –source-port 123 -j ACCEPT

##########################
# Regla INPUT
#
# Paquetes TCP que no deseamos.
#

$IPTABLES -A INPUT -p tcp -j bad_tcp_packets

#
# Reglas para los paquetes provenientes de internet.
#

$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_packets
$IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udpincoming_packets

#
# Regla para redes especiales no pertenecientes a internet.
#

$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -d $LAN_BCAST_ADRESS -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -s $INET_IP -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -p ALL -d $INET_IP -m state –state ESTABLISHED,RELATED -j ACCEPT

###############################
# Regla OUTPUT
#
# Paquetes TCP que no deseamos.
#

$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets

#
# Reglas OUTPUT especiales para decidir que IP’s aceptamos.
#

$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $INET_IP -j ACCEPT

#
# Abrir puertos a ciertos equipos de la red
#

$IPTABLES -t nat -A PREROUTING -i $INET_IFACE -p udp –dport 53 -j DNAT –to=192.168.0.9:53

Todo esto y mucho mas, lo podemos consultar en la abundante ayuda y documentacion relativa al iptables en Internet. Aqui os dejo enlaces a varios tutoriales/scripts imprescindibles:

Tutorial IPTables

Scripts/Ejemplos de firewalls

Espero que lo disfruteis. Se admiten comentarios con ampliaciones y scripts de firewalls para complementar a este o lo que sea.

Share
Javier Rodriguez Escrito por:

Sé el primero en comentar

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *