miércoles, junio 20, 2007

Firewall con Iptables

Bien esto es un Firewall casero usando iptables......

lo primero es crear el archivo .sh el cual sera nuestro firewall

En mi caso, y como soy bien original, le puse "firewall.sh"

gnome:

$ gedit firewall.sh

KDE:

$ kate firewall.sh
Pegamos lo siguiente dentro

---------------------------------------------------------------------------------------------
#!/bin/bash
#Borrar todas las reglas
iptables -F

#Politica general.Cerramos todo.Dejamos entrar y salir lo solicitado
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

###OTRAS PROTECCIONES####

# Quitamos los pings.
/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all

# No respondemos a los broadcast.
/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Para evitar el spoofing nos aseguramos de que la dirección
# origen del paquete viene del sitio correcto.
for interface in /proc/sys/net/ipv4/conf/*/rp_filter; do
/bin/echo "1" > ${interface}
done

# Los ICMPs redirigidos que pueden alterar la tabla de rutas.
for interface in /proc/sys/net/ipv4/conf/*/accept_redirects; do
/bin/echo "0" > ${interface}
done

# No guardamos registros de los marcianos.
/bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

# Asegurar, aunque no tenga soporte el nucleo, q no hay forward.
/bin/echo "0" > /proc/sys/net/ipv4/ip_forward

###Reglas de los puertos####

# A nuestra IP le dejamos todo <-- reemplaza los ceros por tu num de IP
iptables -A INPUT -s 000.000.000.000 -j ACCEPT

# Permitimos que la maquina pueda salir a la web
#/sbin/iptables -A INPUT -p tcp -m tcp --sport 80 -m state --state RELATED,ESTABLISHED -j ACCEPT
#/sbin/iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT

# Azureus <-- pon el puerto correcto de tu azureus o cualquier otro torrent client
/sbin/iptables -A INPUT -p tcp -m tcp --dport 22875 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --sport 22875 -j ACCEPT

# Abrimos los puertos del emule <-- pon el puerto de amule
/sbin/iptables -A INPUT -p tcp -m tcp --dport 7662 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --sport 7662 -j ACCEPT

/sbin/iptables -A INPUT -p tcp -m tcp --dport 7665 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --sport 7665 -j ACCEPT

/sbin/iptables -A INPUT -p tcp -m tcp --dport 7672 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --sport 7672 -j ACCEPT

# Ahora para el amsn
/sbin/iptables -A INPUT -p tcp -m tcp --dport 6891:6895 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp --sport 6891:6895 -j ACCEPT


# Permitimos que se conecten a nuestro servidor web.

#iptables -A INPUT -m state --state NEW -p TCP --dport 80 -j ACCEPT

#Abrimos ssh a la red.
#iptables -A INPUT -s 172.26.0.3 -p TCP --dport 22 -j ACCEPT
#iptables -A INPUT -s 172.26.0.4 -p TCP --dport 22 -j ACCEPT
#iptables -A INPUT -s 172.26.0.5 -p TCP --dport 22 -j ACCEPT

#iptables -A INPUT -p TCP --dport 22 -j ACCEPT

# Permitimos la comunicación con el servidor dns
iptables -A INPUT -p UDP --dport 53 -j ACCEPT
iptables -A INPUT -p TCP --dport 53 -j ACCEPT

#Permitimos uso de ftp.
#iptables -A INPUT -p TCP --dport 21 -j ACCEPT

#Permitimos acceso pop3.
#iptables -A INPUT -p TCP --dport 110 -j ACCEPT

# Permitimos uso de smtp
#iptables -A INPUT -p TCP --dport 25 -j ACCEPT

#Permitimos acceso imap.
#iptables -A INPUT -p TCP --dport 143 -j ACCEPT
#iptables -A INPUT -p UDP --dport 143 -j ACCEPT

#Permitimos todo el trafico de la LAN
#iptables -A INPUT -s 0.0.0.0 -j ACCEPT
#iptables -A INPUT -s 0.0.0.0 -j ACCEPT
#iptables -A INPUT -s 0.0.0.0 -j ACCEPT

#Dejamos a localhost, para mysql, etc..
iptables -A INPUT -i lo -j ACCEPT
-----------------------------------------------------------------------------------------------

Guardar el archivo y darle permisos de ejecución

$ chmod +x firewall.sh

Ahora lo probamos

$ sudo sh firewall.sh

Vemos que todo funcione correctamente, los p2p, el amsn ,gaim ,kopete o el que usen

si algo no funciona como es debido, deben revisar las reglas de los puertos q agregaron quizás alguno este mal, después de cada edición del archivo deben correrlo de nuevo como antes les dije y volver a probar que todo funcione

Si todo funciona de primera (te envidio), vamos a hacerlo permanente así cada vez que reiniciemos tendremos el firewall corriendo, para esto hacemos

$ sudo cp firewall.sh /etc/init.d
$ sudo update-rc.d firewall.sh defaults

Ya esta el firewall se activara cada vez que reinicies el equipo.......

Espero que jueguen con esto y ya saben cualquier duda me consultan

2 comentarios:

dmcom dijo...

deberia aparecer "firewall" cuando ejecutas top o el monitor del sistema?

Matias Ferrini dijo...

dmcom, no, no apareceria ya que no se trata de una aplicacion o demonio, son solo entradas a iptables.