My firewall
|
|
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 |
|
|