Libertonia
Portada · Todo · Software Libre · Desarrolladores · Comunidad · Internet · Tecnología · Meta · Diarios
My firewall

PATAN's Diary
Por PATAN
departamento , Sección Diarios
Puesto a las Thu Jun 12th, 2003 at 12:39:25 AM CET
Hola.

Por si alguien esta pensando en crear un firewall con iptables para su equipo o para quien me quiera echar una mano a mejorarlo aqui os pongo, un script que ya cree hace batante tiempo, para que me deis vuestra opinion o aporteis mejoras.

Un saludo.

 


#!/bin/sh

####################
# Inicio variables #
####################
IPT=/sbin/iptables
LO=127.0.0.1
ETH0=192.168.0.1
ETH1=192.168.123.1
#ETH2=192.168.100.1

#############
# Funciones #
#############
borrar_todo() {
echo "Borando reglas..."
$IPT -F
$IPT -t nat -F
$IPT -t mangle -F
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
echo "Contadores a cero..."
$IPT -Z
$IPT -t nat -Z
$IPT -t mangle -Z
# Pongo las politicas en acceptar
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT
}
politicas_por_defecto() {
echo "Politicas por defecto..."
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
}
creo_reglas_propias() {
$IPT -N ILDROP # Paquetes que entran(I), los logeo(L) y los rechazo(DROP)
$IPT -A ILDROP -j LOG --log-prefix "ILDROP "
$IPT -A ILDROP -j DROP

$IPT -N OLDROP # Paquetes que salen(O), los logeo(L) y los rechazo(DROP)
$IPT -A OLDROP -j LOG --log-prefix "OLDROP "
$IPT -A OLDROP -j DROP

$IPT -N FLDROP # Paquetes que pasan(F), los logeo(L) y los rechazo(DROP)
$IPT -A FLDROP -j LOG --log-prefix "FLDROP "
$IPT -A FLDROP -j DROP

$IPT -N FIL # Paquetes que atraviesan todas la reglas(F), entran(I) y los logeo(L) antes de rechazarlos.
$IPT -A FIL -j LOG --log-prefix "FIL "
$IPT -A FIL -j DROP

$IPT -N FOL # Paquetes que atraviesan todas la reglas(F), salen(O) y los logeo(L) antes de rechazarlos.
$IPT -A FOL -j LOG --log-prefix "FOL "
$IPT -A FOL -j DROP

$IPT -N FFL # Paquetes que atraviesan todas la reglas(F), pasan(F) y los logeo(L) antes de rechazarlos.
$IPT -A FFL -j LOG --log-prefix "FFL "
$IPT -A FFL -j DROP

$IPT -N ACE_ENT #Regla para acceptar conexiones entrantes
$IPT -A ACE_ENT -p tcp ! --syn -m state --state NEW -j DROP #Si es una conexion nueva sin el flag SYN se rechaza
$IPT -A ACE_ENT -p tcp -m state --state ESTABLISHED -j ACCEPT
$IPT -A ACE_ENT -p udp -m state --state ESTABLISHED -j ACCEPT
$IPT -A ACE_ENT -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A ACE_ENT -j LOG --log-prefix "ACE_ENT "
$IPT -A ACE_ENT -j DROP

$IPT -N ACE_SAL #Regla para aceptar conexiones salientes
$IPT -A ACE_SAL -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A ACE_SAL -p udp -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A ACE_SAL -p icmp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A ACE_SAL -j LOG --log-prefix "ACE_SAL "
$IPT -A ACE_SAL -j DROP
}
logeo_final() {
$IPT -A INPUT -j FIL
$IPT -A OUTPUT -j FOL
$IPT -A FORWARD -j FFL
}
activo_trafico_local() {
echo "Activando tr�ico local..."
$IPT -A INPUT -s $LO -d $LO -j ACCEPT
$IPT -A OUTPUT -s $LO -d $LO -j ACCEPT
$IPT -A INPUT -s $ETH0 -d $ETH0 -j ACCEPT
$IPT -A OUTPUT -s $ETH0 -d $ETH0 -j ACCEPT
$IPT -A INPUT -s $ETH1 -d $ETH1 -j ACCEPT
$IPT -A OUTPUT -s $ETH1 -d $ETH1 -j ACCEPT
}
trafico_entrante_permitido() {
echo "Activando tr�ico entrante..."
# Abro los puertos para el protocolo netbios dentro de mi red
$IPT -A INPUT -s 192.168.123.0/24 -p tcp --dport 137:139 -j ACCEPT
$IPT -A INPUT -s 192.168.123.0/24 -p udp --dport 137:139 -j ACCEPT
$IPT -A INPUT -s 192.168.123.0/24 -p tcp --dport 25 -j ACCEPT
$IPT -A INPUT -s 192.168.123.0/24 -p udp --dport 25 -j ACCEPT
### Para entrar desde el trabajo
$IPT -A INPUT -s 212.145.4.192/26 -j ACCEPT
$IPT -A INPUT -p tcp --dport 80 -j ACCEPT
$IPT -A INPUT -p tcp --dport 113 -j ACCEPT
$IPT -A INPUT -p tcp --dport 8080 -j ACCEPT
$IPT -A INPUT -p tcp --dport 4662 -j ACCEPT
$IPT -A INPUT -p udp --dport 4662 -j ACCEPT
# $IPT -A INPUT -p udp --sport 53 -j ACCEPT #Permito recibir paquetes desde fuera
#######Para evitar las SYN cookies
$IPT -A INPUT -p tcp --tcp-flags ALL ALL -j ILDROP
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j ILDROP

$IPT -A INPUT -p all -j ACE_ENT
}
trafico_saliente_permitido() {
echo "Activando tr�ico saliente..."
# $IPT -A OUTPUT -p udp --dport 53 -j ACCEPT #Permitimos conectarse al dns solo UDP
$IPT -A OUTPUT -p all -j ACE_SAL
}
trafico_pasante_permitido() {
echo""
}
#################
# Borramos todo #
#################
case "$1" in
start)
borrar_todo
politicas_por_defecto
creo_reglas_propias
activo_trafico_local
trafico_entrante_permitido
trafico_saliente_permitido
trafico_pasante_permitido
logeo_final
;;
stop)
borrar_todo
;;
restart)
# Hace exactamente lo mismo que start pero asi queda mas bonito
$0 stop
$0 start
;;
status)
/sbin/iptables -L -v -n
;;
*)
echo "Usa: firewall {start|stop|restart|status}"
exit 1
esac
exit 0
#######
# FIN #
#######

Por cierto tambien cree un script que me sacaba unas graficas del trafico rechazdo, aunque aviso que lo hice en perl y no tengo ni p*** idea de perl, si alguien le quiere hecahr un vistazo lo puede encontrar aqui:
Mardot

Un saludo
< ¡El año de GNU/Linux! Esto lo he oído antes. (22 comments) | Software libre y personas disminuidas (8 comments) >
Enlaces Relacionados
· Mardot
· More on PATAN's Diary
· Also by PATAN

Encuesta
¿Que te parece el script?
· Una mierda 16%
· Muy malo 0%
· Penoso 0%
· Lamentable 0%
· Un asco 0%
· No creo que explote el PC si lo uso 83%

Votos: 6
Resultados | Otras Encuestas

Menu
· crear cuenta
· FAQ
· búsqueda
· Fuentes de Noticias

Login
Nueva cuenta
Usuario:
Contraseña:

Ver: Modo: Orden:
My firewall | 1 comentarios (1 temáticos, editoriales, 0 ocultos)
Un par de apuntes. (5.00 / 1) (#1)
por iarenaza a las Sat Jun 14th, 2003 at 12:57:54 PM CET
(Información Usuario) http://www.escomposlinux.org/

Teniendo en cuenta que la labor de un firewall es, por defecto no dejar pasar el tráfico, siempre me ha parecido un error el hecho de que la politica por defecto sea "aceptar".

Creo que lo suyo es usar siempre la política por defecto de "rechazar" el trafico (no hablo de si usar DROP o REJECT, me da igual cualquiera de los dos). De ahi que yo en el borra_todo() pondria eso como politica por defecto.

Otro detalle, a mi entender importante, es que primero hay que poner la política por defecto de las cadenas, y luego "vaciarlas" (hacer el flush). Así evitamos ciertos tipos de ataques que pueden llevarse a cabo entre el vaciado de las cadenas y la activacion de la politica por defecto de bloqueo. Por cierto, el vaciado de las cadenas de filtrado no elimina la politica por defecto, asi que no hay riesgos asociados en este caso.

Quien crea que lo anterior es poco probable, existen tecnicas para crear altisimas cargas de forma artificial en una maquina para retrasar la ejecucion de los programas de usuario (en nuestro caso, el script de configuracion de iptables), que nos dan tiempo mas que suficiente para colar una buena cantidad de trafico a través de nuestro cortafuegos. Y pueso que no cuesta ni tiempo ni dinero hacerlo bien... :)

Saludos. Iñaki.



 
My firewall | 1 comentarios (1 temáticos, editoriales, 0 ocultos)
Ver: Modo: Orden:

ecol Logo Powered by Scoop
Todas las Marcas Registradas y copyrights de esta página son propiedad de sus respectivos dueños.
Los comentarios son propiedad del que los escribe.
Los iconos de las noticias y el logotipo son propiedad de Javier Malonda.
El Resto © 2002 Escomposlinux.org y aledaños.

Puedes sindicar los contenidos de libertonia en formato RSS 1.0 y RDF 0.9. También se puede sindicar la cola de envíos pendientes de moderación.

El proyecto escomposlinux.org está dedicado a la memoria de tas

crear cuenta | faq | búsqueda