bash: hack: orden no encontrada!!

viernes, 25 de septiembre de 2009

hablando de iptables

hola, hoy despues de muchos dias sin pasar por aca (la falta de tiempo) vengo escribiendo sobre un tema que a todos nos intriga (cuando hablo de todos me refiero a los que administramos servidores linux que de una u otra manera tienen conexion hacia internet) es el tema de la seguridad.

siempre pensamos que lo mas seguro de implementar es un firewall, pero como lo implemento ?

algunas distribuciones de linux ya traen Firewalls basados en Iptables preconfigurados, y nos permiten abrir uno que otro puerto cuando lo necesitamos.

otras personas usan gestores como lo son Firestarter, shorewall u otros.

pero a mi concepto estos son limitantes para configuraciones avanzadas que muy rara vez requerimos implementar.


por eso cuando se trata de montar un firewall prefiero crear 1 a 1 las reglas de iptables en ejectable en bash.

lo primero que debo tener en cuenta es que puertos voy a abrir.

comenzemos con algo sencillo:

1. tengo mi servidor que hara de server proxy a su vez de enrutador entre internet y LAN. ademas deseo que lo usuarios no tengan que configurar ip en su navegador

el server tiene en la LAN (eje) la ip 192.168.0.1 y en la WAN la 200.1.2.3
la LAN es la eth0 y la WAN la eth1

comiezon mi archivo Firewall

$ sudo vi firewall.sh

#!/bin/sh
#Firewall realizado por th3doctor

## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat -F


## Establecemos politica por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT


##Empezamos a filtrar
###Nota: eth0 es la interfaz conectada a la LAN
###y la eth1 es la interfaz WAN

##Permitimos todo para localhost
iptables -A INPUT -i lo ACCEPT


##permitimos el acceso al proxy desde la LAN
iptables -A INPUT -s 192.168.0.0/24 -p TCP --dport 3128 -j ACCEPT

##permitimos la salida a HTTPS
iptables -A INPUT -s 192.168.0.0/24 -p TCP --dport 443 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -p TCP --dport 443 -j ACCEPT

##permitimos el FTP para la LAN
iptables -A INPUT -s 192.168.0.0/24 -p TCP --dport 21 -j ACCEPT
iptables -A FORWARD -s 192.168.0.0/24 -p TCP --dport 21 -j ACCEPT

###Denegamos el resto, si se nececita que alguien de la lan,necesita acceder a
###algun puerto se debe meter antes de la siguiente regla
iptables -A FORWARD -s 192.168.0.0/24 -i eth0 -j DROP
iptables -A INPUT -s 192.168.0.0/24 -i eth0 -j DROP
iptables -A OUTPUT -s 192.168.0.0/24 -i eth0 -j DROP

##obligamos a todos a salir por el proxy
##con la excepcion ! le indicamos que no use proxy en para las direcciones de LAN

iptables -t nat -A PREROUTING -i eth1 -s 192.168.0.0/24 -d ! 192.168.0.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128

# Ahora hacemos enmascaramiento de la red local
# y activamos el BIT DE FORWARDING (imprescindible!!!!!)
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j MASQUERADE

# Con esto permitimos hacer forward de paquetes en el firewall, o sea
# que otras máquinas puedan salir a traves del firewall.
echo 1 > /proc/sys/net/ipv4/ip_forward

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

echo ------fin de la configuracion


ahora solo bastaria con agregarlo al inicio de la maquina para que se tomen los cambios ante eventuales reinicios

estan en Debian (sirve para la gran mayoria de distros)

basta con editar el archivo /etc/rc.local

y antes del exit 0 colocar

sh /ubicacion/firewall.sh (cambias "ubicacion" por la ruta donde esta tu firewall)

ahi tenemos las bases para empezar a crear un firewall a medida de nuestros requerimientos.