firewall casero
Hola a todos!
Pues que me he metido a ver como son los cortafuegos, ya que problablemente en un mes tenga una línea ADSL en casa y no quería estar muy expuesto a tráfico "no deseado". Y como tengo una potato me lo he hecho con ipchains y me ha salido pequeñito y yo creo que para empezar puede estar bien.
En casa tengo una red que sale a internet por modem (ppp0) a través de un servidor que hace enmascaramiento de IP. Este servidor también hace de DNS de mi dominio y lo demás lo pregunta a los dos DNS de mi proveedor. Sirve correo con exim, lo baja con fetchmail y entro en el con ssh desde la lan para administrarlo. En este servidor es donde coloco el cortafuegos. El maquinón es un P-100 con 16MB y una potato 2.2r3 que va "sobrao".
Por si a alguien le interesa lo mando a la lista. No es largo, y básicamente deja salir a los ordenadores de la lan a ver páginas web, deja servir correo, recibirlo, consultas DNS, y permite salir a clientes de ftp (para apt básicamente). No deja que pase tráfico icmp, y al final hace log de todo lo que no es aceptado.
Si alguien tiene tiempo y lo quiere criticar, mejorar, corregir... y compartirlo con nosotros, pues se le agradece.
Un saludo a todos!
--
--------------------------------------
julio.herrero@coitt.es
Linux user 63663
Debian 2.2 in a SPARCstation 5
--------------------------------------
#! /bin/sh
# Proyectillo de firewall casero. La politica es prohibir todo lo que no esta permitido.
# Al final del script se registra todo lo que no es legal.
# primero unas constantes para leer mejor las cadenas.
EXTERNAL_INTERFACE="ppp0"
LOOPBACK_INTERFACE="lo"
ANYWHERE="any/0"
ETH0="eth0"
LAN_UNO="192.168.1.0/24"
NAMESERVER1="x.x.x.x"
NAMESERVER2="y.y.y.y"
# Se borra todo
ipchains -F
# Politicas por defecto
ipchains -P input DENY
ipchains -P output REJECT
ipchains -P forward REJECT
# Abrimos interfaz de bucle
ipchains -A input -i $LOOPBACK_INTERFACE -j ACCEPT
ipchains -A output -i $LOOPBACK_INTERFACE -j ACCEPT
# Abrimos el masquerading
ipchains -A forward -i $EXTERNAL_INTERFACE -s $LAN_UNO -j MASQ
# Dejamos que el firewall hable con la lan1 y viceversa
ipchains -A input -i $ETH0 -s $LAN_UNO -j ACCEPT
ipchains -A output -i $ETH0 -d $LAN_UNO -j ACCEPT
# Dejamos que pueda consultar DNS...
ipchains -A input -i $EXTERNAL_INTERFACE -p udp -s $NAMESERVER1 53 -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p udp -s $NAMESERVER2 53 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp -d $NAMESERVER1 53 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp -d $NAMESERVER2 53 -j ACCEPT
# Enviar correo (smtp)...
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp -d $ANYWHERE 25 -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y -s $ANYWHERE 25 -j ACCEPT
# Recibir correo de un servidor pop3 cualquiera...
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp -d $ANYWHERE 110 -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y -s $ANYWHERE 110 -j ACCEPT
# Ftp (necesario para apt-get)...
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp -d $ANYWHERE 21 -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y -s $ANYWHERE 21 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp -d $ANYWHERE 20 -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y -s $ANYWHERE 20 -j ACCEPT
# Y web incluyendo ssl.
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp -d $ANYWHERE 80 -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y -s $ANYWHERE 80 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp -d $ANYWHERE 443 -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y -s $ANYWHERE 443 -j ACCEPT
# Y por ultimo, hacemos logs del resto...
ipchains -A input -i $EXTERNAL_INTERFACE -j DENY -l
ipchains -A input -i $ETH0 -j DENY -l
ipchains -A input -i $ETH1 -j DENY -l
ipchains -A output -i $EXTERNAL_INTERFACE -j REJECT -l
ipchains -A output -i $ETH0 -j REJECT -l
ipchains -A output -i $ETH1 -j REJECT -l
# De hecho, las ultimas reglas se ponen para que haga log, no siendo necesarias
# ya que la politica por defecto se encargaria de denegar y rechazar todos los
# paquetes que llegaran al final de la cadena.
Reply to: