viernes, 11 de mayo de 2012

Servidor a Lan y virtuales con Zeroshell

Vamos a configurar un servidor que tendrá el siguiente esquema:

Vamos a ir paso a paso, pero lo que primeramente configuraremos la conexión entre la salida a internet (por WIFI) y el virtual de zeroshell. En el virtual de Zeroshell tenemos que tener 3 tarjetas de red virtuales: ETH00, ETH01 y ETH02.
Configuramos la ETH00 de Zeroshell así:


...y la puerta de enlace (gateway) la 192.168.1.254, que es la dirección de nuestro proveedor de internet.

Ahora tenemos que crear un puente (bridge) entre la WIFI física y la interface ETH00 del virtual de Zeroshell, para que le llegue internet (en "edit/virtual network editor" del VMWare):



Si hacemos ping 192.168.1.254 desde el Shell Prompt de Zeroshell, deberíamos tener, con lo que ya tenemos acceso a la red.

Ahora tenemos que configurar la conexión entre la interface ETH02 de Zeroshell y la ETH00 del Debian, para ello nos vamos de nuevo a "edit/virtual network editor" del VMWare y creamos una nueva red (si no está ya creada), en mi caso crearé la VMnet8 (NAT). Y la seleccionamos en la tercera tarjeta virtual de Zeroshell y en la primera de Debian.


Si pulsamos en "NAT Settings" vemos que la puerta de enlace de dicha red es 192.168.197.2...


...con lo que esta será la dirección IP que le tendremos que poner a la ETH02 de Zeroshell...


...y será la puerta de enlace de la ETH00 de debian. Así pues, en debian, nos vamos a la terminal y en "nano /etc/network/interfaces" ponemos lo siguiente:
iface eth0 inet static
        address 192.168.197.100
        netmask 255.255.255.0
        gateway 192.168.197.2

Con esto le estamos dando una IP a la ETH00 de debian y la conectamos con la puerta de enlace del Zeroshell, que es 192.168.197.2. Con esto deberíamos tener ping entre ambos virtuales, así como internet.

Ya tenemos conectados la WIFI con Zeroshell y éste con Debian. Ahora trataremos de conectar Debian con nuestra virtual de Windows XP, para lo cual habrá que crear otra red virtual en "edit/virtual network editor"; yo creo VMnet4 (Custom) y la selecciono para la segunda tarjeta de debian y para la única que tendrá windows XP virtual.


Vemos que la dirección de subred es 192.168.222.0, con lo que en usaremos dicha dirección para configurar la ETH01 de debian...
auto eth1
iface eth1 inet static
        address 192.168.222.101
        netmask 255.255.255.0

...y para la ETH00 de windows XP:


Vemos que la puerta de enlace se corresponde con la IP de debian, con lo que, si hacemos ping el resultado será positivo, aunque no tendremos internet. Para que windows lo tenga habrá que trabajar con las IPTABLES de debian, y concretamente con la MASQUERADE = Enmascarar. Significa que el router (en este caso nuestro ordenador hace de router con Iptables) reemplaza la información que viene de un paquete, o sea, le pone su propia IP y número de puerto y lo envía a su destino. Los paquetes de regreso llegan al router y este revisa a que ordenador van dirigidos (de los que estén especificados en el mismo router), les quita el enmascaramiento y los envía al host que envió la petición origen.

Por tanto, en la configuración de las IPTABLES de debian, lo hacemos de la siguiente manera:
## 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  -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
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.222.0/24 -j MASQUERADE
echo " OK . Verifique que lo que se aplica con: iptables -L -n"

# Fin del script

Se puede observar que lo único destacable es la línea de MASQUERADE:
-t = Especifica la tabla de reglas, en este caso nat.
nat = (Network Address Translation). Es la tabla de manipulación de direcciones y puertos.
-A = Agrega un comando o una regla a la tabla.
POSTROUTING = Modifica el destino del paquete/s luego de que se decide si irá al ordenador local (server o el que tiene el firewall) o a otro ordenador de la red.
-o = Sirve para especificar la interface, en este caso output (salida)
eth0 = La interface de red a la que se sale a internet, en nuestro caso la ETH00 de debian, que es la puerta de acceso a internet
-j = Aplicar

(Más info sobre compartir internet con Iptables: Sarckz's weblog)

Con esto, el virtual de windows XP ya debería tener acceso a la red a través de debian, con lo que la parte izquierda del esquema ya lo tenemos configurado; ahora nos queda la parte derecha, que consiste en conectar, a través de Zeroshell, una serie de ordenadores físicos a la red. Esto se realiza de la misma manera que en el post anterior del blog, pero vamos a verlo de nuevo...

Lo primero que haremos será crear una cuarta red virtual, que habrá que puentear con nuestra Conexión de área local (LAN) física:


Conectamos los ordenadores físicos al switch, así como el del administrador.

Configuramos la ETH01 del Zeroshell:


Ahora, los ordenadores físicos que absorben red del administrador deben configurar su Conexión de área local (LAN) tal que así:


Ahora abrimos un navegador en el ordenador físico del administrador y escribimos la ip de la ETH00 de Zeroshell, en mi caso 192.168.1.123 y accedemos a la plataforma de Zeroshell mediante usuario y contraseña.

En el menú superior clicamos en NAT y se nos abre una ventana:


En "NAT Enabled Interfaces" seleccionamos la ETH00 y la ETH01 y pulsamos SAVE.

En teoría, y si todo ha salido perfecto, los ordenadores físicos tendrán conexión a internet.

Ya tenemos montado el servidor, y desde Zeroshell podemos administrar toda la red, mediante Portal cautivo, HTTP Proxy, Firewall, etc...

lunes, 7 de mayo de 2012

Crear un Servidor para una LAN con Zeroshell

Vamos a crear un servidor Zeroshell virtual que administre la red y proporcione internet a otros ordenadores físicos.

Para conseguir esto cogemos un ordenador físico (ADMIN) y le instalamos un virtual con el zeroshell (yo ya lo tengo de anteriores ejercicios), el cual debemos configurar con dos tarjetas de red virtuales, una puenteada con el WIFI (la VMNet0 con la tarjeta física WIFI), que le dará a ADMIN acceso a internet:


Ahora tenemos que dar internet desde ADMIN a los restantes ordenadores que configuren la red LAN. Para ello habrá que puentear la tarjeta virtual VMNet8 con la Conexión de Área Local:


El esquema de lo que vamos a hacer es el siguiente:



A continuación, tendremos que configurar Zeroshell para que actúe de servidor para los demás PCs físicos. La configuración sería la siguiente:


Obviamente, la gateway debe ser la de nuestro router que provee internet, que en este caso es 192.168.1.254; la ETH00 es la que queramos pero dentro de la red proveedora de internet, y la ETH01 es la que proveerá al resto de ordenadores físicos de internet y de una IP.

Ahora nos vamos a la plataforma de Zeroshell para configurar el servidor dinámico (DHCP), así que abro en el ordenador ADMIN un navegador y escribo la dirección 192.168.1.123, introduzco el nombre de usuario y contraseña...


... y accedo. En el menú de la izquierda click en DHCP y configuramos el servidor tal que así:


Hay que...

  • seleccionar una SUBNET coincidente con la configurada en la ETH01 de Zeroshell, en mi caso 192.168.16.0/255.255.255.0.
  • proporcionar un rango de redes disponibles. Yo le he dado de la 192.168.16.2 a la 192.168.16.22.
  • La gateway y la DNS1 las proporciona automáticamente.
  • Finalmente activamos la casilla ENABLED y guardamos (SAVE).

Por último, los ordenadores físicos deben estar en modo DHCP, para que sea ZeroShell quien asigne las IPs dinámicamente.

NOTA1: A partir de la creación del servidor, el administrador podrá aplicar el portal cautivo, creando usuarios y limitando su acceso a internet.

NOTA2: necesitaremos de un switch (al que todos los ordenadores físicos deberán estar conectados) para poder conectar los ordenadores al servidor.

viernes, 4 de mayo de 2012

Portal cautivo (captive portal) en Zeroshell

El portal cautivo es un portal de validación web para redes en el que el usuario debe validarse antes de poder navegar.

En el menú lateral izquierdo del Zeroshell, en el apartado USERS, pulsamos en ACCOUNTING para crear  una nueva cuenta.



En el apartado ACCOUNTING CLASSES pulsamos en ADD:


Existen dos formas de facturar una cuenta, por PREPAID o POSTPAID, así como por transferencia (megabytes) o por tiempo (hour), y se le pueden poner sus límites correspondientes, pero con cuidado de no mezclar ambos ya que podría causar conflictos..
Yo voy a crear dos, que me van a quedar así:


Al final, nos quedaría así:


Ahora, en el mismo menú pulsamos en USERS, donde crearemos un par de usuarios, cada uno con un tipo de cuenta; los usuarios los creamos pulsando en el ADD, que está en el menú superior:



Algunos campos son obligatorios, y para que el de CREDIT funcione, primero habrá que crear el usuario, guardarlo y volver a acceder a él (para guardar el usuario pulsamos en SUBMIT). Nosotros le hemos dado 15 de crédito. Vamos a crear el segundo usuario:


Finalmente, en el menú lateral pulsamos en CAPTIVE PORTAL:


Lo primero que hacemos será activar la casilla de GW y seleccionar la red donde aplicaremos el portal cautivo:


Ahora nos vamos al virtual de Windows XP (que es la que tiene la red ETH01) y abrimos el navegador. Nos aparece un mensaje en el que nos pide usuario y contraseña:


Introducimos los datos del usuario "rafa" y ya nos deja entrar, pero al mismo tiempo se abre una ventanita que nos avisa que mientras estemos conectados debe permanecer abierta dicha ventana, así como del tiempo que llevamos conectados, el tráfico que llevamos empleado y el coste que nos está suponiendo:


En cuanto naveguemos un rato, si pulsamos en REFRESH veremos que los datos van cambiando:


En el momento en que nos excedamos del dinero que tenemos nos dará un aviso diciendo que nos hemos excedido y ya no podremos navegar más:


Ahora probamos con el otro usuario y veremos la diferencia entre POSTPAGO y PREPAGO. He accedido y veo que 

Si entro en ACCOUNTING veremos un resumen de lo que han navegado y gastado cada uno de los usuarios:


HTTP Proxy en Zeroshell

Vamos a bloquear a la red ETH01 el acceso a www.google.com y www.google.es. Para ello pulsamos en "HTTP Proxy" del menú de la barra lateral izquierda. Nos aseguramos que el STATUS está ACTIVO.


En HTTP CAPTURING RULES pulsamos en el botón "+":


...y seleccionamos la ETH01 en SOURCE INTERFACE/VLAN, que es la red que queremos bloquear y pulsamos en el botón SAVE:


En URL MANAGEMENT pulsamos en el botón MANAGE...


...y en la ventanita que aparece escribimos las direcciones web que queremos bloquear para la red ETH01:
...y pulsamos en SAVE.

Al final, debe quedar así:



Ahora nos vamos al Virtual de Windows XP e intentamos acceder a www.google.es o www.google.com y veremos que nos deniega el acceso.


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