viernes, 20 de abril de 2012

Crear una NAT por Zeroshell


Zeroshell es una distribución Linux para servidores y dispositivos embebidos, que provee de servicios
de red. Es un Firewall gratuito que tiene las características de los de los equipos complejos de
seguridad.

Lo primero que haremos será crear un virtual donde instalar el Zeroshell. a esta máquina le daremos 3 tarjetas de red:
  • Eth00, conectada en modo bridge y que nos dará salida a la red.
  • Eth01, conectada en NAT y que conectará con nuestro virtual de Windows XP.
  • Eth02, conectada en Custom VMNet4 y que conectará con nuestro virtual de linux Mint.
Para realizar esta configuración nos vamos al zeroshell:


Introducimos una contraseña (P); después habrá que configurar las IPs de las 3 redes anteriores, lo que haremos pulsando (I); por último establecemos la puerta de enlace predeterminada, que será la de salida a la red (G). El resultado es el siguiente:



Nos dice que el ETH00 es miembro de BRIDGE00, ya que es la que nos da salida a internet. ETH01 y ETH02 tienen esas direcciones porque son las que se corresponden con los detalles de VMWARE que se pueden ver en "Edit/Virtual Network Editor":


Luego habrá que definir las direcciones IP en cada uno de los equipos virtuales (observar que la puerta de enlace se corresponde con la IP definida en Zeroshell):



En Windows XP se configuraría así:


Mientras que en Linux mint habría que ejecutar en terminal "nano /etc/network/interfaces" y poner lo siguiente:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
        address 192.168.6.44
        netmask 255.255.255.0
        gateway 192.168.6.2


También en terminal "nano /etc/resolv.conf" y ponemos "nameserver 8.8.8.8".
Finalmente reiniciamos los servicios... "/etc/init.d/networking restart".

Ahora nos vamos al Windows físico, abrimos el navegador y en la barra de direcciones ponemos la IP de la ETH00, en mi caso "192.168.1.123". No aparece lo siguiente:

Introduzco usuario "admin" y contraseña la que puse en Zeroshell... y ya debo acceder a la plataforma.
Lo primero que haremos será crearnos un PROFILE para no tener que crearla cada vez que entremos, para lo cual nos vamos a SETUP/PROFILES, seleccionamos el modelo que queramos y si no tenemos creada la partición la creamos pulsando en NEW PARTITION. Si ya tenemos una partición, la seleccionamos y pulsamos en CREATE PROFILE, con lo que se abre una ventana, rellenamos os datos correspondientes del formulario y pulsamos CREATE. Finalmente lo activamos seleccionándolo y pulsando en ACTIVATE. Debe quedar tal que así:


También en SETUP, pulsamos en NETWORK y vemos cómo aparece la configuración que hicimos en Zeroshell:


Ahora tenemos que acceder a la opción del menú de ROUTER, NAT, y pondremos como NAT Enabled Interfaces a ETH00 que es la que nos da salida a internet.

Con esto ya deberíamos poder hacer ping de unos a otros y tener internet en los dos equipos virtuales.

sábado, 14 de abril de 2012

Ejercicio 3 iptables

Vamos a realizar un ejercicio (http://dns.bdat.net/documentos/cortafuegos/x267.html)

Proteger la propia máquina I
#!/bin/sh
## SCRIPT de practica_iptables.pdf
echo -n Aplicando Reglas de Firewall...
##Vaciamos las reglas
iptables -F
iptables -X
iptables -t nat -F
##Establacemos las politicas predeterminadas
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
##Aceptamos todo de localhost
/sbin/iptables -A INPUT -i lo -j ACCEPT
##A nuestra Ip le dejamos todo
iptables -A INPUT -s 192.168.1.188 -j ACCEPT
##Permitimos una conexión a ssh y telenet (22:23) desde un equipo
iptables -A INPUT -s 192.168.1.156 -p tcp --dport 22:23 -j ACCEPT
##A otro le permitimos el acceso FTP
iptables -A INPUT -s 192.168.1.156 -p tcp --dport 20:21 -j ACCEPT
##El puerto 80 (www) abierto para un servidor web
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
##El resto lo cerramos
iptables -A INPUT -p tcp --dport 20:21 -j DROP
iptables -A INPUT -p tcp --dport 22:23 -j DROP
#TCP 6001 (Servicio Almacén de información de Microsoft Exchange)
iptables -A INPUT -p tcp --dport 6001 -j DROP
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script

Proteger la propia máquina II

#!/bin/sh
##
SCRIPT de practica_iptables.pdf
echo -n Aplicando Reglas de Firewall...
##Vaciamos las reglas
iptables -F
iptables -X
iptables -t nat -F
##Establacemos las politicas predeterminadas
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
##Creamos una nueva cadena (con el comando -N)
iptables -N filtro
##definimos las reglas de la nueva cadena
iptables -A filtro -m state --state ESTABLISHED,RELATED -j ACCEPT
  #Las condiciones explicitas se deben cargar con -m o –match
  #state nos permite seleccionar paquetes de acuerdo al estado de su conexión
  #ESTABLISHED Significa que el paquete es parte de una conexión existente,..
  #..que manda paquetes en ambas direcciones. RELATED Significa que el paquete
  #..esta creando una nueva conexión asociada a otra existente conocida.
iptables -A filtro -m state --state NEW -i !eth0 -j ACCEPT
  #El signo ! es igual a negar, con lo que !eth0 son todas menos eth0.
iptables -A filtro -j DROP
##Aceptamos las conexiones internas
/sbin/iptables -A INPUT -i lo -j ACCEPT
##Ir a la cadena filtro desde las cadenas INPUT y FORWARD
iptables -A INPUT -j filtro
iptables -A FORWARD -j filtro
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script

Proteger la propia máquina III
#!/bin/sh
##SCRIPT de practica_iptables.pdf
echo -n Aplicando Reglas de Firewall...
##Vaciamos las reglas
iptables -F
iptables -X
iptables -t nat -F
##Establacemos las politicas predeterminadas
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
##Aceptamos todo de localhost
/sbin/iptables -A INPUT -i lo -j ACCEPT
##A nuestra IP le dejamos todo
iptables -A INPUT -s 192.168.1.156 -j ACCEPT
##Permitimos una conexion a telnet y ssh desde un equipo
iptables -A INPUT -s 192.168.1.156 -p tcp --dport 22:23 -j ACCEPT
##A otro le permitimos acceso a FTP
iptables -A INPUT -s 192.168.1.106 -p tcp --dport 20:21 -j ACCEPT
##El puerto 80 debe estar abierto, ya que es un servidor web
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
##Cerramos rango de los puertos privilegiados. Hay que tener cuidado con
#este tipo de barreras, ya que antes hay que abrir a los que si tiene acceso
iptables -A INPUT -p tcp --dport 1:1024 -j DROP
iptables -A INPUT -p udp --dport 1:1024 -j DROP
##Impedimos iniciar conexión en los puertos altos (FTP podría no funcionar)
iptables -A INPUT -p tcp --syn --dport 1025:65535 -j DROP
##Cerramos otros puertos que están abiertos
iptables -A INPUT -p tcp --dport 3306 -j DROP
iptables -A INPUT -p tcp --dport 10000 -j DROP
echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script

viernes, 13 de abril de 2012

Ejercicio 2 iptables

Vamos a evitar que nos puedan hacer ping:
iptables -A INPUT -p icmp -j DROP


Denegar el ping sólo a un host:

iptables -A INPUT -p icmp -s 192.168.1.155 -j DROP



Si lo que queremos es que no podamos hacer ping desde nuestra máquina:

iptables -A OUTPUT -p icmp -j DROP

Igual pero a una IP concreta:

iptables -A OUTPUT -p icmp -s 192.168.1.155 -j DROP

No tener ping a una IP pero que dicha IP no lo tenga:



Para cortar internet pero que nos puedan hacer ping:

iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP

(hay otra opción, que es activando DNS)

Tener ping sólo con la mitad de la clase:
iptables -A INPUT -s 192.168.x.x -p icmp -j ACCEPT
...
copy paste...

=========================

Cortar ssh y telnet a todos los host menos a uno y hacer la prueba con el vecino:

iptables -A INPUT -s 192.168.1.157 -p tcp --dport 22:23 -j ACCEPT
iptables -A INPUT -p tcp --dport 22:23 -j DROP

Para probarlo nos vamos a otra máquina y ponemos ssh rafakatu@192.168.1.55, siendo esta IP la de nuestro equipo. Para denegarlo en lugar de admitirlo:

iptables -A INPUT -s 192.168.1.157 -p tcp --dport 22:23 -j DROP

=========================

Para hacer pruebas con FTP lo suyo es probarlo con un servidor FTP, como es proftpd:
apt-get install proftpd
proftpd
/etc/init.d/proftpd start

Cortar nuestro FTP a un usuario concreto:

iptables -A INPUT -s 192.168.1.157 -p tcp --dport 20:21 -j DROP
ó
iptables -A INPUT -s 192.168.1.157 -p ftp --dport 20:21 -j DROP
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT

Aceptar conexiones externas a nuestro FTP sólo de un host:

iptables -A INPUT -s 192.168.1.157 -p tcp --dport 20:21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20:21 -j DROP

 =========================

Cortar internet seguro pero no el normal

iptables -A INPUT -p tcp --dport 443 -j DROP

Cortar dns, probad con nslookup y con la nevegacion a través de IP

iptables -A INPUT -p udp --sport 53 -j DROP

Más configuraciones de Firewall
Proteger servidor con IPTables

miércoles, 11 de abril de 2012

iptables: firewall de linux

¿Qué son las iptables?

Existen módulos para el kernel que permiten definir un sistema de reglas para aceptar o rechazar los paquetes o las comunicaciones que pasan por el sistema. Estos sistemas de reglas conforman lo que se conoce como firewall o cortafuegos; en otros sistemas los firewall pueden estar implementados en software y estar desvinculados del sistema operativo, pero en el caso de linux, el firewall se puede montar a nivel de kernel y no es necesario instalar un software adicional que a veces tiene agujeros.

Podemos crear un script que se ejecute al inicio en /bin/nombre.sh, para que lo podamos ejecutar desde cualquier punto de la consola (es posible que haya que darle permisos al fichero: chmod 750 nombre.sh).

Lo principal de este script es que primero ejecutamos líneas de comando para que el firewall lo cierre todo y luego empezamos a dar permisos:
#!/bin/sh
## SCRIPT de IPTABLES - ejemplo del manual de iptables
## Ejemplo de script para proteger la propia máquina
echo -n Aplicando Reglas de Firewall...

## 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
# El localhost se deja (por ejemplo conexiones locales)
iptables -A INPUT -i lo -j ACCEPT

# A nuestra IP le dejamos todo
iptables -A INPUT -s ?.?.?.? -j ACCEPT <- modificar IP

# A un compañero le dejamos entrar al servidor de internet
iptables -A INPUT -s ?.?.?.? -p tcp --dport 80 -j ACCEPT <- modificar IP

# A otro compañero le dejamos usar el ssh
iptables -A INPUT -s ?.?.?.? -p tcp --dport 22 -j ACCEPT<- modificar IP

# El puerto 443 de www debe estar abierto, es un servidor web seguo.
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# El puerto 80 de www debe estar cerado, es un servidor web seguo.
iptables -A INPUT -p tcp --dport 80 -j DROP

# Y el resto, lo cerramos
iptables -A INPUT -p tcp --dport  20:21 -j DROP
iptables -A INPUT -p tcp --dport  3306 -j DROP
iptables -A INPUT -p tcp --dport  22 -j DROP
iptables -A INPUT -p tcp --dport  10000 -j DROP

echo " OK . Verifique que lo que se aplica con: iptables -L -n"
# Fin del script
Para comprobar el estado de las iptables:
iptables -L
Para comprobar el estado de las iptables después de aplicar el script:
iptables -L -n

Para comprobar el estado de los puertos del sistema con netstat:
netstat -ln

Para borrar una cadena:


iptables -D INPUT 3

...siendo 3 el número de la cadena.


Comandos iptables
Ejemplos prácticos
http://www.pello.info/filez/IPTABLES_en_21_segundos.html