[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: