VPNs IPsec basadas en rutas VTI en Pfsense

agosto 14, 2019 Deja un comentario

El problema surge cuando quiero interconectar 3 o mas sucursales a través de una vpn Site To Site IPSEC teniendo la sede principal como punto central utilizando Pfsense, pero que a su ves las sucursales se pudieran ver sin estar conectadas directamente si no utilizando la sede principal como gateway, para que esto sea mas simple voy a poner la siguiente grafica.

 

 

Teniendo la gráfica como referente  lo que se desea es que   Bogota o cali pueda  ingresar   a sus recursos sin necesidad de estar directamente conectados y utilizando  la  conexión que los dos tienen con la sede principal   Medellin.

 

Para realizar esta configuración es necesario que  configuremos   las Vpns Site to Site    utilizando rutas VTI las cuales ya son incorporadas en las ultimas versiones de Pfsense,  se crearan 2  VPNs las cuales irán desde las sucursales  Bogota y Cali a Medellin.

 

 

  1.  Nos dirigimos a  VPN > IPSEC

 

 

 

 

 

 

2.  Damos clic En agregar  una nueva conexión VPN.

 

 

 

3. Estos son los parámetros que vamos  a utilizar para la fase 1.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4. Lo diferente esta en la Fase 2, ya que  en la opción de Mode  colocamos  Rouded(VTI), también tenemos que crear una red de transito  la cual vamos a utilizar  para enviar el trafico a través del tunel , por lo general se utilizan  una red  de mascara de 32, para este caso vamos a utilizar las subredes de transito 10.10.100.0/30 y 10.10.101.0/30. en este  caso la subred local de transito  para medellin sera la 10.10.100.1/30 y la remota 10.10.100.2.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5. Lo siguiente que tenemos que hacer es asignar una interfaz virtual   para la conexión  VTI, para esto  nos dirigimos a  INTERFACES > ASSINGMENTS, y luego damos clic en agregar una nueva interfaz.

 

 

 

 

 

 

Asignamos la interfaz dando clic en   + y damos clic en SAVE. esto nos asignara una nueva interfaz OPT con el nombre de la vpn VTI

 


 

 

 

 

 

Lo siguiente que  tenemos que hacer es volver a  Interfaces > y damos clic en la interfaz OPT1 que se genero.

 

 

 

 

 

 

 

 

 

 

 

Habilitamos la interfaz y  si queremos personalizamos el nombre de esta por un nombre  referente a la conexión, en este caso se va a llamar ipsecb

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Esto creara una ruta   la cual se podrá utilizar para realizar   procesos de enrutamiento.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6. Lo ultimo que  nos falta es crear la ruta estática con el fin de poder enrutar los paquetes desde Medellin hasta  Bogota,   en este caso   siguiendo la topología propuesta en la imagen   que se encuentra al inicio del post,  la ip de  la lan de Bogota es la 192.168.18.0/24, para esto vamos  a SYSTEM > ROUTING   luego nos dirigimos  a la pestaña STATIC ROUTES   y luego damos clic en el  boton de  +  luego  colocamos la red  a la que queremos alcanzar y selecionamos  el Gateway que Pfsense crea para la interfaz Ipsec VTI correspondiente a la ruta.

 

 

 

 

 

 

 

 

7 Repetimos el mismo proceso  En el Pfsense de Bogota, para este caso solo vamos a  mostrar  las configuraciones que cambian como lo es  la fase 2 y  el enrutamiento  ya  el proceso de la creación de la interfaz  de red VTI ya esta descrito en el punto (5) y es igual,   tampoco  describiré la creación de la fase1 de la vpn ya que  se crea de la misma forma que en el punto 3 lo que cambia es el remote gateway por el la sucursal de medellin.  a continuación se  describe los datos correspondientes a la fase 2 para la sucursal de bogota, en este caso utilizaremos como subred de transito  local  la 10.10.100.2/30 y la red  remota 10.10.100.1/30

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Lo siguiente es crear la ruta Estática  con el fin de poder  llegar  a la sede Medellín  la cual tiene la ip 192.168.19.0/24

 

 

 

 

 

 

 

 

 

 

Podemos comprobar que la vpn se encuentre arriba  dirigiéndonos a   STATUS > IPSEC.

 

 

 

 

 

 

 

 

 

 

 

En este  estado ya tenemos la VPN Site To Site establecida entre  Medellin y bogota, comprobamos que podamos alcanzar las subredes con un ping.

Ping desde Medellin a Bogota.

 

 

 

 

 

 

 

 

 

 

 

 

Comprobamos desde Bogota a Medellin.

 

 

 

 

 

 

 

 

 

 

 

8.  Se van a mostrar  también los pantallazos de la configuración de las faces 2 y del enrutamiento estático para la sucursal Cali, para esta VPN utilizamos la red de transito 10.10.101.4/30 como subred local y la  10.10.101.5 como  subred remota.

Fase 2  Vpn Medellin.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Generamos la ruta estática con el fin de poder  alcanzar la subred 192.168.17.0/24 la cual corresponde a Cali.

 

 

 

 

 

 

 

 

 

9.  Para la configuración de la  VPN de Cali     en la Fase 2  utilizamos la red de transito  local  10.10.101.5 y la remota  10.10.101.4.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Creamos la ruta   estática a la sucursal de Medellín 192.168.19.0/24

 

 

 

 

 

 

 

 

Lo siguiente es verificar que si se ha establecido la VPN.

 

 

Verificamos conectividad entre  las dos sucursales.

Ping Cali  a Medellin.

 

 

Ping Medellin a Cali.


 

Una ves  que ya tenemos establecidas  las vpns  lo único que nos queda es    crear la ruta  desde bogota a cali y  cali a bogota   aprovechando  la conexión que ya tienen estas dos sucursales a través de medellin.

 

Creamos la ruta  desde  cali  para que pueda llegar a Bogota  utilizando como Gateway la interfaz Ipsec VTI  Medellin ya que esta directamente conectados por Ipsec.

 

Ahora en Bogota creamos la ruta   hacia  Cali  utilizando como Gateway la interfaz Ipsec VTI Medellin.

 

Hacemos pruebas de conectividad entre   Cali y Bogota.

 

 

Ahora Bogota Cali.

 

Es de  recalcar que  se tienen que crear reglas en el firewall para  permitir el trafico ipsec, en este caso como es una prueba de concepto  en los tres dispositivos la regla esta permisiva.

 

En este caso  las políticas están en rutas estáticas,  también se puede utilizar  un protocolo dinámico como  BGP.

 

Fuentes: https://docs.netgate.com/pfsense/en/latest/vpn/ipsec/ipsec-routed.html

Categorías: pfsense, Uncategorized

bloqueo inesperado de maquina virtual en Vmware Esx 6.5

 

 

Problema bloqueo inesperado de maquina virtual en Vmware Esx 6.5

El problema lo detecte al momento de que instale dos maquinas virtuales una con Ubuntu 18.04 server y Debian 9.8.

Al inicio me estuve rompiendo la cabeza tratando de encontrar cual era el motivo por el cual las maquinas virtuales se bloqueaban inesperadamente pero no encontraba la causa, lo primero a lo que recurrí fue a los eventos del Vmware ya que el sistema solo dejaba de funcionar, el error que que daba era el siguiente.

Mensaje de maquinavirtual en el host localhost.localdomain de ha-datacenter: The VMware Tools package is not running in this virtual machine. The package might be necessary for the guest operating system to run at resolutions higher than 640×480 with 16 colors. The package provides significant performance benefits as well. To install it, choose VM > Install VMware Tools… after the guest operating system starts. VMware ESX can remind you to install the VMware Tools package when you power on the VM. Select OK to enable the reminder.

vmware1

En un inicio pensé que era problema de el Vmware Tools el cual instale en el host para ver si podía solucionar el inconveniente, pero no resulto ser la solución.

Algo que note fue que la maquina se bloqueaba en el instante que la persona que había requerido el host trataba de ingresar por ssh desde su red a través de una VPN en ese momento se bloqueaba la maquina, y así varias veces yo la iniciaba hacia pruebas y la maquina funcionaba perfectamente me conectaba a través de una vpn y nada, leyendo en foros y en la pagina de vmware hablaba sobre un bug en el kernel de linux el cual era entraba en conflicto con vmware, lo que hice fue actualizar el kernel a su ultima versión pero el problema persistía, ya con el comportamiento a normal que era al momento de que se conectaba dicha persona desde su red vi que el problema estaba era por los lados de la tarjeta de red, lo que hice fue cambiar la maquina de vlan y pedí a la persona que ingresara de nuevo y por fin el servidor me dio un error.

 

vmware

Con este error pude investigar mas profundo el problema y confirmar que era un bug en el modulo de red del Vmware ESX 6.5 mirando en su pagina recomendaba instalar un parche de seguridad, o deshabilitar un modulo en el archivo vmx de la maquina virtual, en el cual explicaban que este problema ocurría en el backend de la tarjeta de red, el cual involucraba el kernel y que solo ocurría si el kernel de la maquina era >=4.8 , si el Hw de la maquina era >=13, y por ultimo que fuera Vmware esxi 6.5.

El problema se soluciona agregando la siguiente linea al vmx de la maquina virtual, para esto puedes ingresar vía ssh al servidor Vmware y agregamos la siguiente linea al final de el archivo, para esto se tiene que tener la maquina virtual abajo o bloqueada la tarjeta de red.

»vmxnet3.rev.30 = FALSE»

 

vmware2y con esto el problema quedo resuelto.

Fuente de vmware: https://kb.vmware.com/s/article/2151480

Categorías: Uncategorized

Doble factor de autenticación ssh OTP google authenticator Centos

diciembre 30, 2014 Deja un comentario

Hace poco realice una entrada de como implementar OTP Skey  en OpenBSD,  en este momento les traigo una entrada de Doble factor de autenticación OTP pero esta vez utilizando Gnu/Linux mas concretamente  Centos, y utilizando la librería de google  «libpam-google-authenticator-1.0».

Para las personas que  exponen sus servidores  a Internet  por Ssh y que  por motivos de la empresa no pueden ser filtrados,  pero que a su ves necesitan una seguridad robusta   ya no se quieren arriesgar a que sus usuarios pierdan  sus contraseñas y de esta manera exponer su red, una solución para mitigar estos problemas  es la utilización de   un doble factor de autenticación  con lo cual tenemos una clave conocida y otra que se genera cada vez que  necesitamos ingresar a nuestro servidor, para esto google  ha generado la herramienta google-authenticator  con la cual por medio de una instalación sencilla y una App para nuestro smarphone podemos  tener un servidor SSH  con OTP de manera rápida y sencilla.

 

1. Lo primero que aremos sera instalar las librerías necesarias y  para «pam», «gcc», «make» para compilar los modulos y «wget» para descarga de archivos por consola.

yum install pam-devel make gcc-c++ wget

otp

 

2. Una ves instalados los paquetes necesarios creamos una carpeta para la descarga y descompresión de la librería de OTP de  google, esto lo realizamos de la siguiente manera:

# mkdir otp-google

#cd otp-google

#wget https://google-authenticator.googlecode.com/files/libpam-google-authenticator-1.0-source.tar.bz2

# bzip2 -dc libpam-google-authenticator-1.0-source.tar.bz2 | tar -xv

# cd libpam-google-authenticator-1.0

otp1

3. Luego de descargar y descomprimir la librería ingresamos a la carpeta  y procedemos a realizar la instalación de esta para esto necesitamos compilarla y lo hacemos de la siguiente manera.

#cd libpam-google-authenticator-1.0

#make

#make install

otp2

 

4. Una vez instalada la librería lo siguiente que necesitaremos realizar es la configuración de una  clave secreta para que por medio de esta podamos generar los códigos de verificación, esto lo realizamos con el comando  «google-authenticator» el cual nos realizara una serie de preguntas a las cuales responderemos con la letra «Y» al finalizar este proceso  copiamos la clave que nos genera la cual necesitaremos para el ingreso mas tarde.

#google-authenticator

La salida del comando la podemos observar en la imagen:

otp3

5. Una ves generada la clave secreta  procedemos a realizar la configuración de Pam y ssh para que utilice este método de autenticación, para esto necesitamos agregar la siguiente linea al inicio del archivo:

#vi /etc/pam.d/sshd

~auth required pam_google_authenticator.so

~

:wq

otp4

6.Una ves modificado el modulo de Pam es necesario   cambiar  la configuración del SSH para que también utilice este tipo de autenticacion para esto modificamos el archivo «/etc/ssh/sshd_config», y buscamos la siguiente linea «ChallengeResponseAuthentication no» cambiamos el «no» por «yes», una ves terminado esto reiniciamos el servicio SSH.

#vi /etc/ssh/sshd_config

~

#ChallengeResponseAuthentication no

ChallengeResponseAuthentication yes

:wq

otp5

 

Configuración Google Authenticator App

Para configurar la App es necesario tener un smarphone Android o iOS de apple, para este ejemplo se va a instalar e un Android y para esto vamos a el Play Store  y buscamos google authenticator y le damos instalar, una ves instalado  abrimos el programa:


otp91

 

Se nos abrirá el siguiente formulario, en el cual colocaremos un nombre a nuestro perfil  y  luego la clave que generamos anteriormente en el paso «4»  quedaría de la siguiente manera:

otp7

Y por ultimo damos clic en Agregar y luego de esto se nos abrirá una ventana donde nos mostrara los códigos que podemos utilizar para el ingreso a nuestro servidor vía SSH el código se renueva cada cierto tiempo por lo cual hay que  ser ágiles en la digitación de este:


opt65

 

Una ves que tenemos nuestro código  intentamos iniciar sesión  vía ssh y nos pedirá el código de verificación  y digitamos el código que este en ese momento luego ingresamos la contraseña del usuario y por ultimo si todo funciona correctamente podremos entrar a nuestra sesión.

otp8

Pagina oficial del proyecto: https://code.google.com/p/google-authenticator/

Wiki proyecto: http://es.wikipedia.org/wiki/Google_Authenticator

Categorías: Uncategorized

Doble factor de autenticacion ssh en Open BSD

diciembre 5, 2014 Deja un comentario

f12


f11

La autenticación de contraseña de forma segura es uno de los problemas a los que nos enfrentamos los administradores de sistemas ya que estas pueden ser interceptadas por sniffers o ataques de diccionario, en OpenSSH con un sistema de llaves publicas se mitiga un ataque por diccionario al no ser necesario contar con una clave, pero que pasa cuando el computador se ve comprometido por un ataque informático o simplemente fue robado o olvidado en algún lugar los usuarios con este método de autenticación no necesitan ingresar una contraseña y simplemente seria dar clic en el ingreso y tendría acceso a los servidores. A partir de la versión OpenSSH 6.2 lanzada el 22 de marzo de 2013, es posible ejecutar múltiples factores de autenticación. Los administradores de sistemas pueden ahora proteger sus servidores mediante la combinación de más de un factor de autenticación. CONFIGURACIÓN DE DOBLE FACTOR DE AUTENTICACIÓN EN SSH La forma tradicional para el ingreso ah una sesión de SSH es necesario la llave publica y el password para el ingreso a una sesión: AuthenticationMethods publickey,password Se realiza la solicitud de conexión y se escribe la contraseña.

 admin@TestingPC:~> ssh sistemas@192.168.70.3 -p 220

Password:

Last login: Fri Dec 5 09:22:24 2014 from 192.168.20.173 Have a lot of fun…

sistemas@SwitchDell:~>

ssh       IMPLEMENTACIÓN S/KEY

S/Key es un esquema de contraseña de un solo uso basado en una función de hash de sentido único. FreeBSD utiliza el hash MD4 por compatibilidad, pero otros sistemas usan MD5 y DES-MAC. S/Key 1. Lo primero que debemos realizar es habilitar el S/Key con el siguiente comando.

sudo skeyinit -E

f1
  2. Lo siguiente que debemos realizar es ingresar a cada usuario para realizar la configuración del doble factor de autenticación el cual lo lo iniciamos con el siguiente comando.

sudo skeyinit

             f2

3. Lo siguiente que necesitamos es forzar el inicio de sesión a través del S/Key en lugar de la contraseña tradicional, editamos el archivo

sudo vi /etc/login.conf #modificamos la siguiente line a y la dejamos de la siguiente forma y guardamos el archivo. auth-defaults:auth=skey:

f3

f4

4. Lo siguiente es recompilar el archivo modificado

sudo cap_mkdb /etc/login.conf

f5
5. Ahora podemos realizar la configuración de del archivo ssh_config de OpenSSH para que utilice los dos métodos de autenticación: publickey y S/key. Abrimos el siguiente archivo.

“sudo vi /etc/ssh/sshd_config” #modificamos o agregamos la siguiente linea. # Authentication:

AuthenticationMethods publickey,keyboard-interactive

 f6

f7


6. Una ves terminado esto reiniciamos el servicio de OpenSSH.

sudo /etc/rc.d/sshd restart

f8
Ya hemos terminado la configuración para realizar una conexión no podemos olvidar que debemos tener la Llave publica previamente configurada en el servidor. 7. Para probar podemos instalar en nuestro Smarphone la siguiente aplicación en el caso de Android utilice Opiekey pero existen su equivalente en otros Smartphones como lo es OTP en Iphone, en este ingresamos nuestra contraseña secreta y el nos genera la temporal con la cual podremos lograr la conexión vía SSH.

f10

Ingresamos el Password que nos Genera el programa y como vemos podemos ingresar  de forma correcta utilizando el doble factor de autenticación.

TestingPC:/home/admin # ssh root@192.168.20.199
Authenticated with partial success.
otp-md5 96 glpi99141
S/Key Password:
otp-md5 96 glpi99141
S/Key Password:
Last login: Fri Dec 5 08:40:24 2014 from 192.168.20.173
OpenBSD 5.5 (GENERIC) #276: Wed Mar 5 09:57:06 MST 2014

Welcome to OpenBSD: The proactively secure Unix-like operating system.

Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.

#
# ls
.Xdefaults .cshrc .cvsrc .gem .klogin .login .mysql_history .profile .ssh .systrace download.rb

f9

Referencia: http://0x9900.com/blog/2013/08/28/two-factor-authentication-with-ssh-&-s/key-on-openbsd/

Categorías: Uncategorized

Misconf 2012

noviembre 8, 2012 2 comentarios

Después de mucho rato sin escribir  hoy les traigo    los  pasos que seguí para capturar algunas Flags del reto propuesto por nonroot misconf, el cual es una entorno  donde podremos poner en practica  las habilidades para resolver retos de seguridad en redes   en total son  30 retos de todos los niveles, yo logre sacar 19  para los que quieran hacer el ejercicio pueden descargarse la maquina virtual y tratar de capturar las banderas faltantes  aca dejo los links

El entornos consiste de dos partes:
A) Una maquina virtual, lista para importar (ovf) en VirtualBox (Win, Lin, Mac) : http://www.misconf.net/
B) Una scoreboard donde se pueden marcar los puntos encontrados:
Bueno como las respuestas las iba copiando a la medida que se solucionaban los retos puede que este un poco desorganisada XD.

Procedimiento para cada una de las Flags obtenidas.

Después de obtener los datos del escaneo de puertos lo primero que hago es conectarme al ftp  por el puerto 10000  tal como en la misconf del campus arroja la primera bandera.

Ftp:

shellfity@shellfity:~/misconf/ftp$ ftp 192.168.0.13 10000
Connected to 192.168.0.13.
220 Bienvenido al servidor de archivos de @nonroot, tu nueva flag es: 93-67X-FTP-9V

Lo primero que se me ocurre, y uno de los muchos errores de malas configuraciones en un servidor ftp  es intentar logueame como anonymous  lo cual resulta exitoso

Una vez logueado listamos con dir y descargamos los archivos que hay

shellfity@shellfity:~$ cat flag.txt
HOLA!

Lo siento esta no es la flag! , no podía ser tan fácil verdad?

Recuerda que puedes usar el hashtag #MISCONF para compartir y solicitar información.

😉

En este archivo esta la pista para seguir avanzando, “lo siento esta no es la flag!” si nos colocamos a mirar detalladamente termina en “!” y pues luego de mirar varias opciones se me viene a la mente  que pueden haber archivos ocultos en el ftp lo cual si alguna vez has configurado uno sabrás que se puede hacer   hide_file={} para ocultar archivos, listo intentado a ciegas un rato me fijo en lo siento esta no es la Flag y intento con “get flag” sin el txt y bingo descargo algo.

shellfity@shellfity:~/misconf/ftp$ cat flag
Feliciaciones, ienes una flag mas: 89-ZZZ-A09-BV

Continua buscando el resto de banderas, recuerda encontrar un archivo raro.

Algunas veces se me olvida escribir las leras, una pista para resolver el siguiente reo es: crypo.

Otra pista es: (3,6) (1,6) (4,3) (5,3) (2,1) (5,1) (2,5)

Si seguimos leyendo nos dice  recuerda encontrar el archivo raro  intento de nuevo lo mismo  “get raro” y descargo un archivo.

miro el archivo y está en Base64

crypo es un decodificador online  ingreso y saco la base 64 que casualmente está en la posición (2,5) de atrás para delante de la pista dada en el archivo Flag  lo que se obtiene es una cadena hexa y en la cordenada (5.1) el resultado es  una salida en ascci luego lo paso a binario, después convierto el binario en texto

shellfity@shellfity:~/misconf/ftp$ cat raro.raro
55H8=fmfdzOD2N4fdz0g+7x9af60YeWX63l3osbnLNSfulmf0fx+Fe4ziY8g6/8E
lo cual daba lo siguiente
E8/6g8Yiz4eF+xf0fmlufSNLnbso3l36XWeY06fa9x7+g0zdf4N2DOzdfmf=8H55
luego se lleva a HAZZ 15

mkGMlHP9=RDaWGPy/+6tWGzy1Htz+HLM=0Nh=dwX
y por ultimo tigo 3

 am0__los_CODIFICADORES_0nlin3

snmp

En el escaneo  UDP vemos  puerto 33692 el cual nos dice que está abierto pero no nos dice que servicio está escuchando, bueno si hacemos una búsqueda en google nos dice que posiblemente puede ser un servidor dns,dhcp,snmp pues son unos de los servicios más comunes en udp haciendo los descartes y si todo es como en el reto de la campus me voy por la opción del snmp,  lo primero que se hace es buscar un cliente con el cual podamos comprobar  “snmpwalk” para conectarnos necesitamos pasarle  la comunidad y la versión las cuales las pasamos con el argumento -c comunity  -v version, bueno si el snmp nos está en configuración por defecto debe de permitir cualquier petición.

Host is up (0.0046s latency).
PORT      STATE         SERVICE VERSION
22161/udp open|filtered unknown

Lo primero es intentar conectarnos  intentando encontrar el nombre de comunity lo cual duró algo así de 5 minutos hasta que di con la que era  “12345” y como versión 1 y nos da la siguiente flag y la pista para capturar la otra.

snmpwalk -c 12345  -v 1 192.168.20.146:22161
iso.3.6.1.2.1.1.1.0 = STRING: «Linux flyxj 2.6.32-5-686 #1 SMP Sun May 6 04:01:19 UTC 2012 i686»
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.8072.3.2.10
iso.3.6.1.2.1.1.3.0 = Timeticks: (11484665) 1 day, 7:54:06.65
iso.3.6.1.2.1.1.4.0 = STRING: «Para mas flags, habla con los jugadores en #MISCONF y @misconf :

8U-PLZ-J7A-63»
iso.3.6.1.2.1.1.5.0 = STRING: «flyxj»
iso.3.6.1.2.1.1.6.0 = STRING: «Transmitiendo desde la casa, Quilla de mis amores. http://host:port/de/prueba/para/este/reto/»
iso.3.6.1.2.1.1.7.0 = INTEGER: 72

Está  flag nos da la pista para el siguiente reto,  nos dice que ingresemos host:puerto y una ruta  lo primero que intenté fue colocar la IP el puerto de apache más la ruta pero no funciono así que lo hice con host  modifique mi /etc/hosts y coloque que  me resolviera host a la IP de la maquina virtual  así coloque http:/host:8954/de/prueba/para/este/reto/
y  nos aparece un algo que se llama DATA  lo descargamos y luego miro que tipo de archivo es con file  y me devuelve que es un archivo comprimido en formato xz  le cambio la extensión a xz lo descomprimo con “xz -d”   luego vuelvo a mirar que tipo de archivo es y me dice que es data lo miro con el comando “strings” y en uno de sus strings me devuelve la Flag  si vemos la Flag parce valida pero cuando intento  me la rechaza  si miramos en  la documentación de la misconf está el formato valido de una flag xx-xxx-xxx-xx y intento de esta manera consigo la Flag valida:

root@shellfity-MS-6638:/home/shellfity/Descargas# file DATA
DATA: XZ compressed data
root@shellfity-MS-6638:/home/shellfity/Descargas# mv DATA DATA.xz
root@shellfity-MS-6638:/home/shellfity/Descargas# xz -d DATA.xz
root@shellfity-MS-6638:/home/shellfity/Descargas# file DATA
DATA: data
root@shellfity-MS-6638:/home/shellfity/Descargas# strings DATA | grep ‘flag’
badflagBAD SECTOR
goodflag6H-7AA-F32-ABATT

Servidor de correo

En el escaneo vemos
6729/tcp open  imap    Dovecot imapd

Lo primero que se me viene a la mente es hacer un telnet al puerto

root@shellfity-MS-6638:/home/shellfity/misconf/dovedcot# telnet 192.168.20.146 6539
Trying 192.168.20.146…
Connected to 192.168.20.146.
Escape character is ‘^]’.
+OK Bienvenido a la casa de las palomas, quieres una flag?: DO-VEC-OTT-TT
y obtenemos la siguiente flag

Lo siguiente es intentar loguearme en el servidor, intente con varios usuarios hasta que por la ultima coloque nonroot nontoo  el cual fue correcto, queda una flag por sacar que está en un binario compilado en OpenBSD. Que es el primero donde coloque binario  por no colocar la salida :).
a1 LOGIN nonroot nonroot
a1 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT IDLE CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS] Logged in

a2 LIST «» «*»
a3 EXAMINE INBOX
a4 FETCH 1 BODY[]
Binario
a5 FETCH 2 BODY[]

From root@flyxjp Thu Aug 10 14:19:23 2015
Return-path:
Envelope-to: admin@misconf
Delivery-date: Thu, 09 Aug 2012 17:19:23 -0400
Received: from root by misconf.net with local (Exim 7.52)
(envelope-from )
id 1Sza8Z-0000YP-88; Thu, 09 Aug 2012 17:19:23 -0400
Date: Thu, 09 Aug 2012 17:19:23 -0400
Message-Id:
To: admin@misconf
Subject: Cuanto sabes sobre otros S.O.?
Cc: nonroot@misconf
From: root

a5 FETCH 3 BODY[]
From root@flyxjp Thu Aug 09 17:19:23 2015
Return-path:
Envelope-to: admin@misconf
Delivery-date: Thu, 09 Aug 2012 17:19:23 -0400
Received: from root by misconf.net with local (Exim 7.52)
(envelope-from )
id 1Sza8Z-0000YP-88; Thu, 09 Aug 2012 17:19:23 -0400
Date: Thu, 09 Aug 2012 17:19:23 -0400
Message-Id:
To: admin@misconf
Subject: Cuanto sabes de IPv6?
Cc: nonroot@misconf
From: root

Please insert the following code into the website at http://ipv6.he.net/certification: HE-IPV-6XD-OO
)
a4 OK Fetch completed.

a5 LOGOUT

Bueno para descargar el binario lo que pueden hacer  Colocar el base 64 que está en uno de los correos  y copiarlo a un archivo de texto de esa forma cuando se descifre nos quedara el binarioJ.

Router

En el escaneo aparece un puerto raro no tiene nombre así que como en todos los otros retos me conecto por telnet al puerto y no me arroja nada así que no hago nada y sigo con otro reto pero pues pensé que podía haber algo, así que lo retome volví y di un telnet pero esta vez se me quedó bloqueado así que le di varios enters hasta que sorpresa.

PORT      STATE SERVICE
20050/tcp open  unknown

root@shellfity-MS-6638:/home/shellfity/misconf/reto# telnet  192.168.20.146 20050
Trying 192.168.20.146…
Connected to 192.168.20.146.
Escape character is ‘^]’.

Welcome to my system, I’m watching you since 1984 – P1-4P0-C0C-0D

User Access Verification

La siguiente pista es  1984 Buscando un poco sobre Cisco.
La empresa fue fundada en 1984 por el matrimonio de Leonard Bosack y Sandra Lerner, quienes formaban parte del personal de computación de la Universidad de Stanford. El nombre de la compañía viene de la palabra «San Francisco»; al mirar por la ventana había al frente un cartel que decía «San Francisco» y un árbol se interponía entre la palabra separando San Fran Cisco, de ahí proviene el nombre de la empresa. Allí comenzó su despliegue como empresa multinacional.

intento con la contraseña cisco y no me funciona luego intento con todas en mayúsculas  y por la última coloque la C mayúscula y bingo la clave es Cisco  luego intento colocarme en modo privilegiado con el comando enable  pero tiene contraseña de consola  esta fue la contraseña que cogí mas fácil y pues sin pistas por la última  los que jugamos en misconf del campus  la contraseña era bigbrother así que fue la primera que se me vino a la mente  y claro esa era

Password:

NAVAJO>enable
Password:
NAVAJO#

luego ago un NAVAJO#show  running-config  para ver la configuración encuentro unas claves  busco buscando un poco  sobre como decifrarlos co y obtengo  los password “admin administrator” y “nonroot nonroot” ingreso  pero veo todo igual.

Luego lo intento con el comando “more”  y le paso como argumento el signo “?”  lo cual en los router cisco nos trae los parámetros que recibe el comando intentó con varios me llama la atención “unix”  y lo intento  “more unix:?” pasándole como argumento el signo “?” de nuevo y me lista unos archivos

NAVAJO#more unix:?
unix:FLAG    unix:IFMAP  unix:NETMAP       unix:R1
unix:README  unix:iourc  unix:nvram_00001  unix:sha1.sum

intento con cada uno y en README obtener la otra flag

NAVAJO#more unix:README
Hola!

Veo que vas muy bien, te voy a regalar una bandera más: 9T-UNI-XRU-LX

(El reto final de esta terna, es producto de la mente malevola de maybe-failed [rmolina], gracias por la ayuda)

NAVAJO#

NAVAJO#more unix:FLAG 


pero no me trae ninguna flag  descargo el archivo por medio de tftp

NAVAJO#copy unix:FLAG tftp:192.168.1.8

Luego miramos el tipo de archivo con un file y notamos que es un gzip, al descomprimir hay un tar que contiene un texto dentro de un lzma:

root@shellfity:/home/shellfity/Descargas# gzip -d FLAG.gz
root@shellfity:/home/shellfity/Descargas# file FLAG
FLAG: POSIX tar archive (GNU)
root@shellfity:/home/shellfity/Descargas# mv FLAG FLAG.tar
root@shellfity:/home/shellfity/Descargas# tar xvf FLAG.tar
texto
root@shellfity:/home/shellfity/Descargas# cat texto
]�2FV�X�)�D
|�&�-͋�p ����M�Fe��LACpD���`�7��?
����V�_wꑪ0�mJ�0/6HB ]����[4�[�d/�m�&�/-����F=�슈�
��%ڣroot@shellfity:/home/shellfity/Descargas# file texto
texto: LZMA compressed data, non-streamed, size 285
root@shellfity:/home/shellfity/Descargas# mv texto texto.lzma
root@shellfity:/home/shellfity/Descargas# lzma -d texto.lzma
root@shellfity:/home/shellfity/Descargas# cat texto
duRuputa mišiRi hubie kémaba tsúkuRu ké:Ri kémaba wawàwa duRuputa mišiRi tsàmana adai hawaitu adai í:Ri kémaba í:Ri kémaba é:waba duRuputa í:Ri adai duRuputa mišiRi ké:Ri kémaba tsúkuRu ké:Ri kémaba wawàwa tsàmana adai í:Ri í:Ri duRuputa tsàmana hubie kémaba
root@shellfity:/home/shellfity/Descargas#

Traduciendolo (Cortesía de @C4Fdez) queda: ESTAFLAGESCOMORARAPEROESLAFLAGCORRECTA
😉

Servidor web

Ingresamos a http://192.168.1.6:8954/ usando como host: localhost y vemos que existe un archivo flag.txt que contiene:

Hola!

Cuando encuentres una FLAG de una forma tan sencilla, significa que es el camino correcto para dos flags más.

Muy buen trabajo, tu FLAG es: BH-7AA-F00-JB

La pista para la siguiente flag es: A+B

Lo que sigue es, tal como indica la pista en twitter, buscar el directorio oculto, es decir http://192.168.1.6:8954/oculto/ , carpeta que está protegida 😦
La mala configuración permite ver el archivo http://192.168.1.6:8954/.htaccess

#flag: OT-RAF-LAG-DD
<Directory ./oculto>
AuthType Basic
AuthName «Area restringida para el usuario admin»
AuthUserFile ./htpasses
require valid-user
</Directory>

El cual nos dice que el archivo de interés es htpasses:
admin:/E5ig/GyPan.s

Al preguntarle a nuestro amigo John nos dice que es una clave “Traditional DES [128/128 BS SSE2]” y que corresponde a “administ” 😉

Usando como host nonroot vemos lo siguiente:
🙂
<!– @nonroot no se le olvide eliminar el comentario, el archivo final es: testfinal.php →

i colocamos nonroot:8954/test.php sin el tes final  obtenemos otra flag
Buena imaginación, te regalo una flag por eso: YH-K9K-LLL-8A
Siguiendo con la misma temática pero ya con test3 y mirando el code fuente obtenemos la flag 8
nonroot:8954/test3.php
ok<!– Recordar eliminar esto, para evitar fuga de información, RECUERDALO NONROOT: GB-WEB-2XD-02>

mirando  las pistas que nos dan  nos dice que debemos tomar un valor e y s del la entrada del usuario
y generar un valor timestam  y que debíamos sumar el valor de la entrada del usuario con el random  y luego a esa suma
le sacábamos un md5 y que si el md5 coincidía siria ok

después de varios intentos fallidos tratando de generar valores aleatorios y enviándolos con perl  en el archivo testfinal.php
vemos que nos muestra una hora, y si verificamos es una hora diferente a la de nuestro sistema, ya con eso y con lo de generar
un valor timestamp empiezo a sospechar que el random hay que generarlo con base a la fecha que nos muestra, haciendo un búsqueda
en google  algo así «generar rando basado en la hora php» encontramos en el manual de php la funcion ‘uniqid’ la cual genera un
valor random basándose en la hora actual del sistema. http://php.net/manual/es/function.uniqid.php
lo que hice fue probarla y  me pareció algo curioso que cuando la ejecutaba
en mi maquina me sacaba un random parecido al  los ejemplos que nos muestra  en las pistas, como veo la hora de mi sistema
es diferente a la hora del reto está atrasada una hora exactamente, bueno acá fue un dolor de cabeza tratando de cambiar la hora
para que fuera igual a la hora del reto pero no me funcionaba, lo siguiente que pensé fue que  el reto está actualizando la hora
de un servidor ntp diferente al mío, entonces lo la tarea fue buscar un ntp que estuviera una hora menos que  el que yo tenía en
el momento. Buscando encontré una zona horaria que coincidía con la hora del reto y era la zona horaria de ‘new york’ la configuro
en mi sistema con el comando «dpkg-reconfigure tzdata» busco america y «new_york» listo  ya con esto apago la maquina virtual
y la enciendo de nuevo y veo que las horas ya coinciden.  Intento de nuevo y bingo obtengo la flag.

test1.php

Tomar E y S de la entrada de usuario, luego generar un valor de timestamp aleatorio
y luego sumar la entrada del usuario con el random y sacarle un md5, si el md5 coincide
con la segunda entrada entonces OK, // $entrada=$_GET[‘e’];      print «E: $entrada
«; $salida=$_GET[‘s’]; print «S: $salida

«; //bETA, AUN NO FUNCIONA // pEnsar en como evitar la colision de MD5, leer paper

test2.php
If SHA1(E+R)=Salida –> todo estara OK
test3.php
Avoid Colision! …
3
2
1
If MD5(E+R)=Salida –> todo estara OK
2012-09-21 11:41:34
E:
S:
R: 505c8aae1fd4f
NO!, puedes sincronizarte?

 El script con el que obtengo la flag es el siguiente

en el valor de la entrada de usuario se puede colocar cualquier numero que queramos enviar.

shellfity@shellfity-MS-6638:~/misconf$ cat peticion.php

<?php

$e=»10″;
$rand=uniqId();
$aleatorio=$e+$rand;
$s=md5($aleatorio);

$arch = «http://nonroot:8954/testfinal.php?s=$s&e=$e»;
header(‘Content-Disposition: attachment; filename=’.basename($arch));
readfile($arch);
shellfity@shellfity-MS-6638:~/misconf$

ejecutando el script

shellfity@shellfity-MS-6638:~/misconf$ php peticion.php
<html>
2012-09-21 11:55:12<p>E: 10<p>S: 2b8a61594b1f4c4db0902a8a395ced93<p>R: 505c8de0672d2<p><p>Oh yeah!, la Flag es: A_SIMPLE_DESIGN_BUG_XD</html>
shellfity@shellfity-MS-6638:~/misconf$

SVN

en el escaneo vemos el puerto abierto

Host is up (0.0018s latency).
PORT      STATE SERVICE
54321/tcp open  unknown

le doy un telnet al puerto  y identifico que es un servidor svn por el resultado

root@shellfity-MS-6638:/home/shellfity/misconf/reto# telnet  192.168.20.146 54321
Trying 192.168.20.146…
Connected to 192.168.20.146.
Escape character is ‘^]’.
( success ( 2 2 ( ) ( edit-pipeline svndiff1 absent-entries commit-revprops depth log-revprops partial-replay ) ) )
Connection closed by foreign host.

lo siguiente es descubrir el nombre de la carpeta que esta compartida en el repositorio bueno luego de buscar y desistir   doy con el directorio que era fácil de suponer pero en medio de la desesperación no lo coloque  el directorio era subversion  fue lo último que se me ocurrió ya y bingo

root@shellfity-MS-6638:/home/shellfity/misconf# svn co svn://192.168.20.146:54321/subversion
A    subversion/texto.txt

como vemos nos dice que hay un directorio que se llama subversion y un archivo que se llama texto.txt lo siguiente es ingresar a la ruta

root@shellfity-MS-6638:/home/shellfity/misconf/subversion# cat texto.txt
Que crees que estas buscando?, no lo encontraras, tengo el mejor sistema de seguridad.

Security By Obscurity
root@shellfity-MS-6638:/home/shellfity/misconf/subversion#

pero sorpresa recibo este mensaje  😦   buscando intento  miro los log

root@shellfity-MS-6638:/home/shellfity/misconf/subversion# svn log subversion
————————————————————————
r1 | (sin autor) | 2012-08-10 08:31:11 -0500 (vie 10 de ago de 2012) | 1 línea

OO-SVN-CVS-OO
y obtenemos la bandera

$ svn co svn://192.168.1.6:54321/subversion@27
D    subversion/texto.txt
A    subversion/texto.txt
Checked out revision 27.

$ cat texto.txt
Una flag mas: UN-AFL-AGM-AS
(Flag 26)

$ svn co svn://192.168.1.6:54321/subversion@1
D    subversion/texto.txt
A    subversion/sha1.sum
A    subversion/CAPTURE_THE_FLAG

$ file CAPTURE_THE_FLAG
CAPTURE_THE_FLAG: tcpdump capture file (little-endian) – version 2.4 (Ethernet, capture length 65535)
$ strings CAPTURE_THE_FLAG
1408211395071504071533764763476268
900144709729822751405304052739653
167733405485203020638181867947357249512517914094996251174073132
71429530043020283191008286359495653566736882365099398175220072
38334305606565807817274479129461586573989649989591328
12114989066639206310863735798186114315728004227364198
168231606344082579197649654374296622
241043874733770163076343277334914592
28399553900998639609274026331934947173747
39267297635833818505004804699498772395347
152967422443718917448050
540146568205934109221920
203248797539096092951287405721025567367423917414532690111589
636644850557234539748783008118773429693899752012683537309984
656991220756433307666367727629102
942132238785460445894373068334112

Traduciendo (cortesía de @C4Fdez):

“En la batalla,hay dos tipos de posturas,fuerza extraordinaria  fuerza normal.Sus combinaciones dan lugar a una serie interminable de maniobras.” Sun Tzu, El arte de la guerra.

Ipv6

DNS

La dirección ipv6 es la siguiente fe80::a00:27ff:fe39:8468

como vemos es una ip  Link-Local  si intentamos darle un ping no nos va a contestar  pueno un ping ipv6 nos responderia esto

root@shellfity-MS-6638:/home/shellfity/misconf/bindipv6# ping fe80::a00:27ff:fe39:8468
ping: unknown host fe80::a00:27ff:fe39:8468

como vemos el comando ping no lo soporta para poder ver las direcciones ipv6 tenemos que utilizar el comando ping6

root@shellfity-MS-6638:/home/shellfity/misconf/bindipv6# ping6 fe80::a00:27ff:fe39:8468
connect: Invalid argument
root@shellfity-MS-6638:/home/shellfity/misconf/bindipv6#

pero nos saliendo el mismo problema, como dige antes es una ip link-local las cuales no son enrutables entonces como lo hacemos debemos colocarle la interfaz por la cual van a salir los paquetes lo cual lo hacemos colocándole al final  %eth0  y de esta forma nos debería  funcionar

root@shellfity-MS-6638:/home/shellfity/misconf/bindipv6# ping6 -c 2 fe80::a00:27ff:fe39:8468%eth0
PING fe80::a00:27ff:fe39:8468%eth0(fe80::a00:27ff:fe39:8468) 56 data bytes
64 bytes from fe80::a00:27ff:fe39:8468: icmp_seq=1 ttl=64 time=1.93 ms
64 bytes from fe80::a00:27ff:fe39:8468: icmp_seq=2 ttl=64 time=1.43 ms

— fe80::a00:27ff:fe39:8468%eth0 ping statistics —
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 1.433/1.681/1.930/0.251 ms

Haciendo un escaneo ipv6  vemos  que el servidor tiene el puerto 53 abierto,  aunque este puerto no lo mostraba cerrado en un escaneo ipv6

root@shellfity-MS-6638:/home/shellfity# nmap -6 -sT  fe80::a00:27ff:fe39:8468%eth0

Starting Nmap 5.21 ( http://nmap.org ) at 2012-09-19 13:32 COT
Nmap scan report for fe80::a00:27ff:fe39:8468
Host is up (0.024s latency).
Not shown: 997 closed ports
PORT   STATE SERVICE
23/tcp open  telnet
53/tcp open  domain
80/tcp open  http
root@shellfity-MS-6638:/home/shellfity/misconf/bindipv6#

como vemos tenemos el puerto 53 abierto el cual le pertenece a un servidor de nombres de dominio o DNS,  lo siguiente que debemos hacer  colocarnos una ip en ipv6

root@shellfity-MS-6638:/home/shellfity/misconf/bindipv6# ifconfig eth0
eth0      Link encap:Ethernet  direcciónHW 00:24:21:b2:01:d9  
         Direc. inet:192.168.20.100  Difus.:192.168.20.255  Másc:255.255.255.0
         Dirección inet6: fe80::224:21ff:feb2:1d9/64 Alcance:Enlace
         Dirección inet6: fe80::224:21ff:feb2:1d8/64 Alcance:Enlace
         ACTIVO DIFUSIÓN FUNCIONANDO MULTICAST  MTU:1500  Métrica:1
         Paquetes RX:353971 errores:0 perdidos:0 overruns:0 frame:0
         Paquetes TX:222381 errores:0 perdidos:0 overruns:0 carrier:0
         colisiones:0 long.colaTX:1000
         Bytes RX:378983102 (378.9 MB)  TX bytes:41847139 (41.8 MB)
         Interrupción:42 Dirección base: 0x6000

y lo siguiente es indicarle a nuestro pc cual va hacer su servidor dns  lo cual lo modificamos  en el resolv.conf  pero esta vez colocamos la dirección de nuestro dns en ipv6

root@shellfity-MS-6638:/home/shellfity/misconf/bindipv6# cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND — YOUR CHANGES WILL BE OVERWRITTEN
nameserver fe80::a00:27ff:fe39:8468%eth0
root@shellfity-MS-6638:/home/shellfity/misconf/bindipv6#

Lo siguiente es con nslookup ver las zonas que tiene  en lo cual tarde un ratico por que como no me resolvía  la ip  que nombres tenia pensaba que no era la forma de resolver el reto hasta que en un momento de lucidez  me dio por resolver misconf.net y bingo.

root@shellfity-MS-6638:/home/shellfity/misconf/bindipv6# nslookup
> set q=any
> fe80::a00:27ff:fe39:8468%eth0
Server:                       127.0.0.1
Address:         127.0.0.1#53

** server can’t find fe80::a00:27ff:fe39:8468%eth0: NXDOMAIN
> misconf.net
Server:                       127.0.0.1
Address:         127.0.0.1#53

misconf.net
origin = ns.misconf.net
mail addr = nonroot.misconf.net
serial = 10004
refresh = 3600
retry = 900
expire = 3600000
minimum = 3600
misconf.net     nameserver = ns.misconf.net.
misconf.net     mail exchanger = 10 TT-XXX-PLA-MX.misconf.net.
misconf.net     text = «SE9MQUFBQSEKClR1IG51ZXZhIGZsYWcgZXM6IFVVLUROUy05T0EtTlouCgpEZXNjYXJnYSBlbCBhcmNoaXZvIGJpbjAxIGRlbCBzZXJ2aWNpbyBGVFAgcGFyYSBjb250aW51YXIuCg==»
>

como vemos nos arroja una bandera y en el text un texto cifrado   en base64 inconfundiblemente lo descubro,  lo siguiente es  copiar en texto a un archivo y descifrarlo.

root@shellfity-MS-6638:/home/shellfity/misconf/bindipv6# echo  SE9MQUFBQSEKClR1IG51ZXZhIGZsYWcgZXM6IFVVLUROUy05T0EtTlouCgpEZXNjYXJnYSBlbCBhcmNoaXZvIGJpbjAxIGRlbCBzZXJ2aWNpbyBGVFAgcGFyYSBjb250aW51YXIuCg== > dns1
root@shellfity-MS-6638:/home/shellfity/misconf/bindipv6# base64 -d dns1
HOLAAAA!

Tu nueva flag es: UU-DNS-9OA-NZ.

Resultado final después de dos meses de estar abierto bueno cabe destacar que no jugué todo el tiempo   solo unos cuantos días 🙂

Doy muchas gracias a nonroot por tomarse el tiempo de preparar este tipo de plataformas con las cuales nos podemos divertir un rato de la forma que mas nos gusta.

http://nonroot.blogspot.com/search/label/wargames

Categorías: Uncategorized

scripts perl …

junio 22, 2012 Deja un comentario

Hola tiempo sin escribir en el blog, hoy les traigo unos pequeños scripts que hice en perl, hace ratico empecé la certificación de oscp y estos son unos ejercicios que pedían realizar, bueno no soy el mas hábil al programar me considero pésimo,  aunque los scripts son algo sencillos quiero compartirlos con ustedes.

El primer ejercicio consistía en extraer todas las url de una web especifica en este caso la de entorno de pruebas,  primero teníamos que descargar index de la pagina web dicha existen formas muy sencillas de hacerlo como solamente aplicando el comando ‘wget’ + la dirección web del sitio a descargar pero como la idea era hacerlo con un lenguaje de scripting mi solución en perl fue la siguiente.

shellfity@shellfity:~/taller$ cat solucion1.pl
#!/usr/bin/perl

use strict;
use Data::Dumper;
use warnings;
use LWP::Simple;

my $url = ‘http://www.offsec.com/pwbonline/icq.html&#8217;;

my $rsd = get($url);

open(ARCHIVO,»>icq.txt»);

print ARCHIVO Dumper($rsd);
close ARCHIVO;

El segundo es un poquito mas complejo y consistía en utilizar expresiones regulares para filtrar la información que tenia el archivo descargado y solo mostrar las URL que se encuentran en el archivo descargado anteriormente,  de la misma forma que el anterior utilice perl para hacerlo XD.

#!/usr/bin/perl

use 5.006;
use strict;
use warnings;
#Creo una variable con un string a buscar
my $link = ‘href’;
my $icq = ‘icq.com’;


#abro el archivo
open (ARCHIVO, ‘icq.txt’);
#Leo el archivo y le doy el valor $url a cada linea que lee
while ( my $url = <ARCHIVO>)
{

#Busco si la palabra se encuentra en la variable
if($url =~ /$link/i){

#creo un array con el resultado y lo separo por “/”
@_ split( «/», $url);
#luego busco en la posición 2 del array si se encuentra el string icq.com y si esta #imprimo los resultados
if ($_[2] =~ /$icq/){
print «$_[2]\n»;
}

}

Con este script logramos filtrar y obtener todas las url que se encuentran en el archivo  aunque nos trae url que se encuentra repetidas,  pero para organizar este problema podemos recurrir a nuestro amigo sort.

y de esta manera tener el resultado deseado 🙂

shellfity@debian:~/taller$ perl solucion.pl | sort -u
blogs.icq.com
chat.icq.com
c.icq.com
company.icq.com
download.icq.com
gallery.icq.com
games.icq.com
greetings.icq.com
groups.icq.com
people.icq.com
search.icq.com
http://www.icq.com

Pero pues aunque esta no es la única forma de realizar esta tarea igualmente con awk también podemos realiza esta labor, lo siguiente era coger las url y hacer resolver las ips de los dominios obtenidos .

#!/usr/bin/perl
use warnings;
use strict;
use Net::DNS::Nslookup;

open(URL, ‘urls.txt’);
my @ips =<URL> ;

foreach (@ips) {
my $dns = Net::DNS::Nslookup->get_ips($_);
@_ = split( «,», $dns);
print «$_[1]\n»;
}

shellfity@debian:~/taller$ perl resuldns.pl

178.237.23.237

178.237.23.237

178.237.25.84

205.188.27.190

178.237.23.237

178.237.23.237

178.237.23.237

178.237.23.237

178.237.23.237

178.237.23.237

178.237.23.236

178.237.23.237

Categorías: Uncategorized

instalación de OpenVPN en OpenBSD

diciembre 26, 2011 3 comentarios

En este documento veremos como configurar openvpn en un servidor corriendo openbsd 5.0 miremos un poco sobre que es openvpn.

OpenVPN, es un producto de software creado por James Yonan en el año 2001 y que ha estado mejorando desde entonces.

Ninguna otra solución ofrece una mezcla semejante de seguridad a nivel empresarial, seguridad, facilidad de uso y riqueza de características.

Es una solución multiplataforma que ha simplificado mucho la configuración de VPN’s dejando atrás los tiempos de otras soluciones difíciles de configurar como Ipsec y haciéndola más accesible para gente inexperta en este tipo de tecnología.

Supongamos que necesitamos comunicar diferentes sucursales de una organización. A continuación veremos algunas soluciones que se han ofrecido como respuesta a este tipo de necesidades.

En el pasado las comunicaciones se realizaban por correo, teléfono o fax. Hoy en día hay factores que hacen necesaria la implementación de soluciones más sofisticadas de conectividad entre las oficinas de las organizaciones a lo largo del mundo.

Dichos factores son:

  • La aceleración de los procesos de negocios y su consecuente aumento en la necesidad de intercambio flexible y rápido de información.
  • Muchas organizaciones tienen varias sucursales en diferentes ubicaciones así como también tele trabajadores remotos desde sus casas, quienes necesitan intercambiar información sin ninguna demora, como si estuvieran físicamente juntos.
  • La necesidad de las redes de computación de cumplir altos estándares de seguridad que aseguren la autenticidad, integridad y disponibilidad.

Lo primero que tenemos que hacer es exportar el repositorio de openbsd

# export PKG_PATH=ftp://ftp.nara.wide.ad.jp/pub/OpenBSD/5.0/packages/i386/

El siguiente paso es descargar el paquetes Openvpn

# pkg_add -v openvpn

openvpn-2.1.4: ok — +openvpn-2.1.4 ——————-

OpenVPN re-creates the tun(4) interface at startup; compatibility

with PF is improved by starting it from hostname.if(5). For example: 

# cat << EOF > /etc/hostname.tun0

up

!/usr/local/sbin/openvpn –daemon –config /etc/openvpn/server.conf

EOF

Como nos dice lo el anterior paso creamos un archivo para la interfaz tun0 y colocamos el comando que nos dice el cual sirve para iniciar la interfas tun0 para ser usado por Openvpn

# cat /etc/hostname.tun0 up

!/usr/local/sbin/openvpn –daemon –config /etc/openvpn/server.conf

Después de la instalación verificamos que este instalado correctamente.

# pkg_info | grep openvpn

openvpn-2.1.4 easy-to-use, robust, and highly configurable VPN

A continuación creamos un 2 directorios para los archivos de configuración de Openvpn

#mkdir -p /etc/openvpn/privado

Lo siguiente que aremos sera copiar los archivos de configuración y los scripts de openvpn a la carpeta “/etc/openvpn/” creada anteriormente.

#cp -Rip /usr/local/share/examples/openvpn/easy-rsa/ /etc/openvpn

Copiamos el archivo principal para la configuración del servidor openvpn.

#cp /usr/local/share/examples/openvpn/sample-config-files/server.conf /etc/openvpn

Le cambiamos los permisos al directorio privado por 700

#chmod 700 privado/

Creando los certificados OpenSSL

Para este paso crearemos los certificados para el servidor y para el cliente lo primero que tenemos que hacer sera modificar el script “vars” y lo dejamos de la siguiente manera.

# cat /etc/openvpn/easy-rsa/2.0/vars

export EASY_RSA=»`pwd`»

export OPENSSL=»openssl»

export PKCS11TOOL=»pkcs11-tool»

export GREP=»grep»

export KEY_CONFIG=»$EASY_RSA/openssl.cnf»

export KEY_DIR=»$EASY_RSA/keys»

echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR

export PKCS11_MODULE_PATH=»dummy»

export PKCS11_PIN=»dummy»

export KEY_SIZE=1024

export CA_EXPIRE=3650

export KEY_EXPIRE=3650

export KEY_COUNTRY=»co»

export KEY_PROVINCE=»colombia»

export KEY_CITY=»antioquia»

export KEY_ORG=»openbsdcolombia»

export KEY_EMAIL=»shellfity@gmail.com»

Una vez creado empezamos la creación de los certificados

#./vars NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/2.0/keys

Como podemos observar nos dice que para empezar a crear los certificados primero tenemos que ejecutar el script “clean-all”.

#./clean-all  

Ahora creamos nuestra entidad certificadora, para la creación de este nos pedirá una serie de datos en mi caso ya los había configurado en el archivo script “vars” así que no llenare ninguno.

# ./build-ca

Generating a 1024 bit RSA private key

..++++++

…….++++++

writing new private key to ‘ca.key’

—–

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter ‘.’, the field will be left blank.

—–

Country Name (2 letter code) [co]:

State or Province Name (full name) [colombia]:

Locality Name (eg, city) [antioquia]:

Organization Name (eg, company) [shellfity]:

Organizational Unit Name (eg, section) []:

Common Name (eg, your name or your server’s hostname) [shellfity CA]:

Name []:

Email Address [shellfity@gmail.com]:

#

Ahora crearemos los certificados y claves para el servidor luego de llenar los datos nos generara el certificado y la llave para nuestro servidor los cuales quedaran guardados en “/etc/openvpn/easy-rsa/2.0/keys”

“serverbsd.crt ” “serverbsd.key”

# ./build-key-server serverbsd Generating a 1024 bit RSA private key

….++++++

……………………………….++++++

writing new private key to ‘serverbsd.key’

—–

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter ‘.’, the field will be left blank.

—–

Country Name (2 letter code) [co]:

State or Province Name (full name) [colombia]:

Locality Name (eg, city) [antioquia]:

Organization Name (eg, company) [shellfity]:

Organizational Unit Name (eg, section) []:

Common Name (eg, your name or your server’s hostname) [serverbsd]:

Name []:

Email Address [shellfity@gmail.com]:

Please enter the following ‘extra’ attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

Using configuration from /etc/openvpn/easy-rsa/2.0/openssl.cnf

Check that the request matches the signature

Signature ok

The Subject’s Distinguished Name is as follows

countryName :PRINTABLE:’co’

stateOrProvinceName :PRINTABLE:’colombia’

localityName :PRINTABLE:’antioquia’

organizationName :PRINTABLE:’shellfity’

commonName :PRINTABLE:’serverbsd’

emailAddress :IA5STRING:‘shellfity@gmail.com

Certificate is to be certified until Dec 1 23:22:38 2021 GMT (3650 days)

Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated

Ya tenemos los certificados de nuestro servidor ya crearemos los de los clientes yo creare uno llamado openbsd para crear mas clientes se repite este paso para crear tantos clientes necesite.

# ./build-key openbsd Generating a 1024 bit RSA private key

……………++++++

……………………………….++++++

writing new private key to ‘openbsd.key’

—–

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter ‘.’, the field will be left blank.

—–

Country Name (2 letter code) [co]:

State or Province Name (full name) [colombia]:

Locality Name (eg, city) [antioquia]:

Organization Name (eg, company) [shellfity]:openbsd

Organizational Unit Name (eg, section) []:

Common Name (eg, your name or your server’s hostname) [openbsd]:

Name []:

Email Address [shellfity@gmail.com]:

Please enter the following ‘extra’ attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

Using configuration from /etc/openvpn/easy-rsa/2.0/openssl.cnf

Check that the request matches the signature

Signature ok

The Subject’s Distinguished Name is as follows

countryName :PRINTABLE:’co’

stateOrProvinceName :PRINTABLE:’colombia’

localityName :PRINTABLE:’antioquia’

organizationName :PRINTABLE:’openbsd’

commonName :PRINTABLE:’openbsd’

emailAddress :IA5STRING:‘shellfity@gmail.com

Certificate is to be certified until Dec 1 23:27:48 2021 GMT (3650 days)

Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated 

Ahora generamos los parámetros de Diffie-Hellman.

# ./build-dh Generating DH parameters, 1024 bit long safe prime, generator 2

This is going to take a long time

.+……………………+………………………………..+…+..+………………………………………………..+………..+…+..+…………………………………………………………………+……..+……………………………………………………+………………+…..+.+…………………………………………+………………+…………………………………+……………………………………………+…….+..+……………………………..+……+…………………………+…………………………………………………………………………………………+……………………………………………………………………………………………..+……….+…………………..+……+…+…………………………….+…………………………….+……….+………………+…+…+………………………………….+………………….+………………………………………………………………………………………..+…………………………………………………………+…………………………….+…….+…..+…………………………+…………………+…………………………………………………………..++*++*++*

Una vez terminado este proceso tendremos generados los certificados para nuestro servidor “servbsd” y un certificado para un cliente “openbsd”

verificamos que los certificados estén creados

# ls

01.pem ca.crt dh1024.pem index.txt.attr index.txt.old openbsd.csr openvpn-openbsd.ovpn serial.old serverbsd.csr 02.pem ca.key index.txt index.txt.attr.old openbsd.crt openbsd.key serial serverbsd.crt serverbsd.key

Ahora copiaremos los certificados del servidor en la carpeta “/etc/openvpn/privado”

# cp -R ca.crt serverbsd.key serverbsd.crt dh1024.pem /etc/openvpn/privado/

Ahora con todo en su lugar lo siguiente sera configurar el archivo openvpn.conf en el cual daremos la ruta de los certificados del servidor y el rango de ip para nuestra vpn dejamos el archivo de la siguiente manera .

#cat server.conf

port 1194 #puerto predeterminado

proto udp #protocolo puede ser udp o tcp

dev tun0 #interface de red tun

ca /etc/openvpn/keys/ca.crt  #damos la ruta de nuestros certificados y la llave

cert /etc/openvpn/privado/serverbsd.crt

key /etc/openvpn/privado/serverbsd.key

dh /etc/openvpn/privado/dh1024.pem

server 10.0.2.0 255.255.255.0

ifconfig-pool-persist ipp.txt

push «route 10.0.1.0 255.255.255.0»

client-to-client

keepalive 10 120

comp-lzo

user _openvpn

group _openvpn

persist-key

persist-tun

status openvpn-status.log

verb 3

Ahora iniciamos el servicio de la siguiente manera y si nos nos saca error significa que todo esta bien

# /usr/local/sbin/openvpn –config server.conf –key /etc/openvpn/privado/serverbsd.key

Sun Dec 4 19:22:06 2011 OpenVPN 2.1.4 i386-unknown-openbsd5.0 [SSL] [LZO2] built on Aug 16 2011

Sun Dec 4 19:22:06 2011 NOTE: your local LAN uses the extremely common subnet address 192.168.0.x or 192.168.1.x. Be aware that this might create routing conflicts if you connect to the VPN server from public locations such as internet cafes that use the same subnet.

Sun Dec 4 19:22:06 2011 NOTE: OpenVPN 2.1 requires ‘–script-security 2’ or higher to call user-defined scripts or executables

Sun Dec 4 19:22:06 2011 Diffie-Hellman initialized with 1024 bit key

Sun Dec 4 19:22:06 2011 TLS-Auth MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]

Sun Dec 4 19:22:06 2011 Socket Buffers: R=[41600->65536] S=[9216->65536]

Sun Dec 4 19:22:06 2011 ROUTE default_gateway=192.168.0.1

Sun Dec 4 19:22:06 2011 /sbin/ifconfig tun0 destroy

Sun Dec 4 19:22:06 2011 /sbin/ifconfig tun0 create

Sun Dec 4 19:22:06 2011 NOTE: Tried to delete pre-existing tun/tap instance — No Problem if failure

Sun Dec 4 19:22:06 2011 /sbin/ifconfig tun0 10.0.2.1 10.0.2.2 mtu 1500 netmask 255.255.255.255 up

Sun Dec 4 19:22:06 2011 TUN/TAP device /dev/tun0 opened

Sun Dec 4 19:22:06 2011 /sbin/route add -net 10.0.2.0 10.0.2.2 -netmask 255.255.255.0

add net 10.0.2.0: gateway 10.0.2.2

Sun Dec 4 19:22:06 2011 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ]

Sun Dec 4 19:22:06 2011 GID set to _openvpn

Sun Dec 4 19:22:06 2011 UID set to _openvpn

Sun Dec 4 19:22:06 2011 UDPv4 link local (bound): [undef]:1194

Sun Dec 4 19:22:06 2011 UDPv4 link remote: [undef]

Sun Dec 4 19:22:06 2011 MULTI: multi_init called, r=256 v=256

Sun Dec 4 19:22:06 2011 IFCONFIG POOL: base=10.0.2.4 size=62

Sun Dec 4 19:22:06 2011 IFCONFIG POOL LIST

Sun Dec 4 19:22:06 2011 Initialization Sequence Completed

Si miramos nuestras interfaces de red nos debe de aparecer una nueva la cual es la tun0 que sera la interfase utilizada para la vpn.

# ifconfig

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33196

priority: 0

groups: lo

inet6 ::1 prefixlen 128

inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3

inet 127.0.0.1 netmask 0xff000000

em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500

lladdr 00:0c:29:cc:ba:08

priority: 0

media: Ethernet autoselect (1000baseT full-duplex,master)

status: active

inet 192.168.0.13 netmask 0xffffff00 broadcast 192.168.0.255

inet6 fe80::20c:29ff:fecc:ba08%em0 prefixlen 64 scopeid 0x1

enc0: flags=0<>

priority: 0

groups: enc

status: active

tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1500

priority: 0

groups: tun

status: active

inet 10.0.2.1 –> 10.0.2.2 netmask 0xffffffff

pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33196

priority: 0

groups: pflog

Configuración de Packet Filter

Configuramos Packet Filter para que permita la entrada de paquetes que llegan por los puertos de escucha de asterisk tanto udp como tcp. Por defecto el archivo para escribir las reglas de PF es /etc/pf.conf, podría ser cualquier otro, y el binario para interactuar con este sistema es pfctl. El archivo de configuración de reglas en una instalación estándar suele traer algunas lineas de ayuda, sin embargo la mejor referencia para aprender y para conocer a fondo PF es la pagina FAQ oficial del proyecto OpenBSD. En este documento haremos algunas referencias rápidas a la configuración de PF pero recuerde que si quiere conocer todo lo que PF es capaz de hacer debe ir al enlace oficial.

Antes de empezar con la configuración de las reglas de filtrado debemos conocer algunas cosas de como funciona PF

Para habilitar y deshabilitar el sistema PF use:

pfctl -d # para deshabilitar

pfctl -e # para habilitar

Para listar las reglas que estan cargadas:

pftcl -sr #listar las reglas de filtrado
pfctl -sn #listar las reglas NAT

Para cargar las reglas de filtrado y traducción NAT:

pfctl -f /etc/pf.conf #cargar las reglas desde el archivo /etc/pf.conf

Una de las cosas mas importantes antes de empezar con PF es conocer como se aplican las reglas de filtrado. En PF las reglas se evalúan según su orden de entrada, es decir, primero se evalúa la primera regla, después se evalúa la segunda y así hasta terminar con la ultima regla. Miremos un ejemplo:

# cat /etc/pf.conf | grep -v ^#

set skip on lo

pass # to establish keep-state

wan= em0

puerto= 1194

vpn= tun0

block in on ! lo0 proto tcp to port 6000:6010

pass in all

pass out quick log on $wan from !($wan) to any nat-to ($wan)

pass in quick log on $wan proto udp from any to port $puerto

pass in quick log on $vpn proto { tcp, udp } from any to any

pass in quick log on $vpn proto icmp from any to any

pass in quick log on $wan proto tcp from any to port 22

block in all

configuración cliente Openvpn

Para configurar el cliente con el cual nos podremos conectar a nuestra vpn utilizare Debien squeeze

lo que tendremos que hacer sera instalar el cliente openvpn que lo aremos de la siguiente manera

#aptitude install network-manager-openvpn

Habilitamos el forwading de paquetes

#echo 1 > /proc/sys/net/ipv4/ip_forward

y por ultimo miramos si tenemos cargado el modulo /dev/net/tun, y si no esta lo creamos

mknod /dev/net/tun c 10 200 

una ves echo esto copiamos los certificados del cliente generados anteriormente en el servidor para podernos conectar los certificados son “ca.crt” “openbsd.crt” “openbsd.key” y los copiamos a la carpeta “/etc/openvpn” luego creamos un archivo que contenga lo siguiente

root@shellfity:/etc/openvpn# cat openvpn-openbsd.ovpn

client

dev tun

proto udp #protocolo

remote 192.168.0.13 1194 # ip del servidor mas el puerto

nobind

persist-key

persist-tun

ca ca.crt

cert openbsd.crt

key openbsd.key

ns-cert-type server

comp-lzo

verb 3 

Ahora ya nos podremos conectar al servidor y lo aremos de la siguiente manera

root@shellfity:/etc/openvpn# openvpn openvpn-openbsd.ovpn

Mon Dec 5 11:25:38 2011 OpenVPN 2.1.3 i486-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [MH] [PF_INET6] [eurephia] built on Oct 21 2010

Mon Dec 5 11:25:38 2011 NOTE: OpenVPN 2.1 requires ‘–script-security 2’ or higher to call user-defined scripts or executables

Mon Dec 5 11:25:38 2011 WARNING: file ‘openbsd.key’ is group or others accessible

Mon Dec 5 11:25:38 2011 /usr/bin/openssl-vulnkey -q -b 1024 -m <modulus omitted>

Mon Dec 5 11:25:38 2011 LZO compression initialized

Mon Dec 5 11:25:38 2011 Control Channel MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]

Mon Dec 5 11:25:38 2011 Socket Buffers: R=[112640->131072] S=[112640->131072]

Mon Dec 5 11:25:38 2011 Data Channel MTU parms [ L:1542 D:1450 EF:42 EB:135 ET:0 EL:0 AF:3/1 ]

Mon Dec 5 11:25:38 2011 Local Options hash (VER=V4): ‘41690919’

Mon Dec 5 11:25:38 2011 Expected Remote Options hash (VER=V4): ‘530fdded’

Mon Dec 5 11:25:38 2011 UDPv4 link local: [undef]

Mon Dec 5 11:25:38 2011 UDPv4 link remote: [AF_INET]192.168.0.13:1194

Mon Dec 5 11:25:38 2011 TLS: Initial packet from [AF_INET]192.168.0.13:1194, sid=8364bcc1 eb1124bb

Mon Dec 5 11:25:38 2011 VERIFY OK: depth=1, /C=co/ST=colombia/L=antioquia/O=shellfity/CN=shellfity_CA/emailAddress=shellfity@gmail.com

Mon Dec 5 11:25:38 2011 VERIFY OK: nsCertType=SERVER

Mon Dec 5 11:25:38 2011 VERIFY OK: depth=0, /C=co/ST=colombia/L=antioquia/O=shellfity/CN=serverbsd/emailAddress=shellfity@gmail.com

Mon Dec 5 11:25:38 2011 Data Channel Encrypt: Cipher ‘BF-CBC’ initialized with 128 bit key

Mon Dec 5 11:25:38 2011 Data Channel Encrypt: Using 160 bit message hash ‘SHA1’ for HMAC authentication

Mon Dec 5 11:25:38 2011 Data Channel Decrypt: Cipher ‘BF-CBC’ initialized with 128 bit key

Mon Dec 5 11:25:38 2011 Data Channel Decrypt: Using 160 bit message hash ‘SHA1’ for HMAC authentication

Mon Dec 5 11:25:38 2011 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA

Mon Dec 5 11:25:38 2011 [serverbsd] Peer Connection Initiated with [AF_INET]192.168.0.13:1194

Mon Dec 5 11:25:41 2011 SENT CONTROL [serverbsd]: ‘PUSH_REQUEST’ (status=1)

Mon Dec 5 11:25:41 2011 PUSH: Received control message: ‘PUSH_REPLY,route 10.0.1.0 255.255.255.0,route 10.0.2.0 255.255.255.0,topology net30,ping 10,ping-restart 120,ifconfig 10.0.2.6 10.0.2.5’ Mon Dec 5 11:25:41 2011 OPTIONS IMPORT: timers and/or timeouts modified

Mon Dec 5 11:25:41 2011 OPTIONS IMPORT: –ifconfig/up options modified

Mon Dec 5 11:25:41 2011 OPTIONS IMPORT: route options modified

Mon Dec 5 11:25:41 2011 ROUTE default_gateway=192.168.0.1

Mon Dec 5 11:25:41 2011 TUN/TAP device tun0 opened

Mon Dec 5 11:25:41 2011 TUN/TAP TX queue length set to 100

Mon Dec 5 11:25:41 2011 /sbin/ifconfig tun0 10.0.2.6 pointopoint 10.0.2.5 mtu 1500

Mon Dec 5 11:25:41 2011 /sbin/route add -net 10.0.1.0 netmask 255.255.255.0 gw 10.0.2.5

Mon Dec 5 11:25:41 2011 /sbin/route add -net 10.0.2.0 netmask 255.255.255.0 gw 10.0.2.5

Mon Dec 5 11:25:41 2011 Initialization Sequence Completed 

como vemos se a conectado correctamente si miramos nuestras interfaces nos debe aparecer una nueva inferfaz la tun0

root@shellfity:/etc/openvpn# ifconfig tun0

tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00

inet addr:10.0.2.6 P-t-P:10.0.2.5 Mask:255.255.255.255

UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:100

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

root@shellfity:/etc/openvpn# 

Comprobamos conectividad con el servidor vpn

root@shellfity:/etc/openvpn# ping -c 3 10.0.2.1

PING 10.0.2.1 (10.0.2.1) 56(84) bytes of data.

64 bytes from 10.0.2.1: icmp_req=1 ttl=255 time=0.703 ms

64 bytes from 10.0.2.1: icmp_req=2 ttl=255 time=0.578 ms

64 bytes from 10.0.2.1: icmp_req=3 ttl=255 time=0.631 ms

— 10.0.2.1 ping statistics —

3 packets transmitted, 3 received, 0% packet loss, time 1998ms

rtt min/avg/max/mdev = 0.578/0.637/0.703/0.055 ms

root@shellfity:/etc/openvpn# 

Conclusiones

Las vpns hoy en día son parte fundamental en cualquier arquitectura de red ya que nos permiten conectarnos de forma segura y de esta manera proteger la información

Openvpn es una excelente solución libre para las empresas que no tienen los recursos para comprar dispositivos para estos fines

Openvpn y OpenBSD hacen una excelente dúo para la seguridad de nuestra organización.

Enlaces relacionados

http://meinit.nl/your-soekris-openbsd-openvpn-appliance

http://openvpn.net/

http://www.openbsdcolombia.org/

Categorías: OpenBsd

Primer Reto Navideño

diciembre 21, 2011 Deja un comentario

 

Bueno hoy les escribo para invitarlos a participar en el primer reto navideño que lanzara InterCEPTeam el reto estará disponible desde el 22 de diciembre espero que puedan jugar y divertirsen un rato también se dará un premio de un libro de seguridad informática que esta por confirmar, acá les dejo la web del grupo para que la chequen y miren las reglas del juego buena suerte y que puedan salvar la navidad.

http://www.intercepteam.org

Categorías: Uncategorized

instalar asterisk en openbsd

diciembre 1, 2011 Deja un comentario

Asterisk fue creada en 1999 por Mark Spencer de la empresa Digium y donada a la comunidad con licencia libre tras lo cual se han recibido muchas colaboraciones y mejoras por parte de muchos desarrolladores libres y empresas sin solicitar nada a cambio.
Poco a poco, esta aplicación se ha convertido en la evolución de las tradicionales centralitas analógicas y digitales permitiendo también integración con la tecnología más actual: VoIP.Asterisk se convierte así en el mejor, más completo, avanzado y económico sistema de comunicaciones existente en la actualidad.
Otro aliciente es su capacidad de ser programada, permitiendo realizar labores que hasta el día de hoy lo llevaban realizando sistemas extremadamente costosos y complicados y, gracias a Asterisk, esta misma labor se realiza de una forma más económica lo que fomenta el uso de sistemas libres como BSD y estándares abiertos como SIP, H323 o IAX.
Una de las ventajas más interesantes es su posibilidad como sistema híbrido, ya que permite gestionar comunicaciones telefónicas tradicionales (analógicas, digitales, móviles, …) como comunicaciones IP mediante el uso de los protocolos estandar de VoIP.

OpenBSD es uno de los sistemas mas confiables en lo que respecta a la seguridad de la información, es por ello que una solución en vo/ip como asterisk fue integrada en el árbol de ports desde la versión 1.0.9 de asterisk

Instalación de Asterisk

Lo primero que tenemos que hacer es exportar el repositorio de openbsd
# export PKG_PATH=ftp://ftp.nara.wide.ad.jp/pub/OpenBSD/4.9/packages/i386/
El siguiente paso es descargar los paquetes necesarios para el funcionamiento de asterisk
los cuales son
# pkg_add -i asterisk
Luego instalamos paquetes necestarios para el funcionamiento de asterisk este paquete contiene todos los temas de liberación de openbsd para ser utilizados, como música en espera.
# pkg_add -v asterisk-openbsd-moh-4.6.tgz
Estos paquetes añaden mejores sonidos adicionales a su PBX.
# pkg_add -v asterisk-native-sounds-1.2p0.tgz
# pkg_add -v asterisk-sounds-1.2.1p3.tgz
Este paquete es necesario para las realizar conferencias en asterisk
# pkg_add -v appkonference-1.2.tgz

Despues de la instalación verificamos que este instalado correctamente.
# pkg_info | grep asterisk

Ejemplo de configuración de asterisk

Lo siguiente que aremos des pues de la instalación de asterisk es la configuración de dos clientes en openbsd al igual que en otros linux los archivos de configuración de asterisk se encuentran en “/etc/asterisk” y los archivos que configuraremos sera el sip.conf en el cual configuraremos los usuarios, para el ejemplo serán 2 usuarios el 100 y el 1001 que son los de ejemplo de configuración, y en el asterisk.conf configuraremos las opciones de marcado.

# cat /etc/asterisk/sip.conf
[general]
port=5060 ;puerto de escucha
bindaddr=0.0.0.0
context=Internal
language=es
disallow=all
allow=ulaw
; Phone #1
[100] ; Definimos el numero de la extension.
type=friend
user=100 ;Nombre del usuario de esa extensión.
secret=123456 ;Password de ingreso del usuario.
nat=no
host=dynamic ;Tipo de cliente.
canreinvite=no ;Definir si ahi nateo entre el servidor y el cliente
qualify=yes
mailbox=100
allow=ulaw
allow=gsm
allow=ulaw
context=Internal

; Phone #2
[101]
type=friend
user=101
secret=654321
nat=no
host=dynamic
canreinvite=no
qualify=yes
mailbox=100
allow=ulaw
allow=gsm
allow=ulaw
context=Internal
#

Luego configuramos al final del archivo asterisk.conf las políticas de marcado

# tail -n 11 extconfig.conf
static=yes
writeprotect=no
[default]
exten=>_.,1,Congestion
[Internal]
exten => 100,1,Dial(SIP/100)
exten => 101,1,Dial(SIP/101)

Configuramos packet filter para que permita la entrada de paquetes que llegan por los puertos de escucha de asterisk tanto udp como tcp

Por defecto el archivo para escribir las reglas de PF es /etc/pf.conf, podría ser cualquier otro, y el binario para interactuar con este sistema es pfctl. El archivo de configuración de reglas en una instalación estándar suele traer algunas lineas de ayuda, sin embargo la mejor referencia para aprender y para conocer a fondo PF es la pagina FAQ oficial del proyecto OpenBSD. En este documento haremos algunas referencias rápidas a la configuración de PF pero recuerde que si quiere conocer todo lo que PF es capaz de hacer debe ir al enlace oficial.
Antes de empezar con la configuración de las reglas de filtrado
algunas cosas de como funciona PF
Para habilitar y deshabilitar el sistema PF use:
pfctl -d # para deshabilitar
pfctl -e # para habilitar
Para listar las reglas que estan cargadas:
pftcl -sr #listar las reglas de filtrado
pfctl -sn #listar las reglas NAT
para cargar las reglas de filtrado y traducción NAT:
pfctl -f /etc/pf.conf #cargar las reglas desde el archivo /etc/pf.conf
Una de las cosas mas importantes antes de empezar con PF es conocer como se aplican las reglas de filtrado. En PF las reglas se evalúan según su orden de entrada, es decir, primero se evalúa la primera regla, después se evalúa la segunda y así hasta terminar con la ultima regla. Miremos un ejemplo:

# cat /etc/pf.conf | grep -v ^# set skip on lo
pass # to establish keep-state
pass in all
ext=em0
voip_tcp= 5060
voip_udp= «{ 5060, 4569, 5036, 9999 ><20001, 2727 }»
pass in quick log on $ext inet proto tcp from any to port $voip_tcp flags S/SA keep state
pass in quick log on $ext inet proto udp from any to port $voip_udp keep state
block in all
#

Hacemos las pruebas con los dos usuarios que acabamos de crear para el ejemplo se instalo un sotphone en Linux y otro en una maquina virtualizada con windows los dos corren con el sofphone Sjphone no mostrare como configurarlos ya que es muy sencillo y no quiero hacer muy largo el documento, acá están las pruebas que realice.

En el pantallazo se muestra el windows haciendo una llamada la exención 100 y en rojo se observamos que la llamada esta entrando satisfactoria mente una vez que le damos aceptar podemos
empezar hablar de forma correcta.

En este pantallazo se observa que la llamada a sido establecida

Lo siguiente que aremos sera  configurar el archivo rc.local para que asterisk inicie automáticamente cada vez que se reinicie el sistema, agregamos las siguientes lineas  al final del archivo.


# tail -n 5 /etc/rc.local
#inicio asterisk
if [ -x /usr/local/sbin/asterisk ]; then
echo -n «asterisk»; /usr/local/sbin/asterisk
fi

Seguridad  en los archivos de asterisk

Esta configuración es opcional, OpenBSD ofrece la posibilidad de bloquear los permisos de ciertos archivos y evitar que estos sean modificados incluso por el usuario root estos cambios son buenos ya que si un intruso logra vulnerar nuestro sistema y quiere infectarnos con un back-door o un spyware o modificar los logs no seria capas.


#cat /etc/rc.securelevel
# Append mode on Asterisk log files
chflags sappnd /var/log/asterisk/cdr-csv/Master.csv
chflags sappnd /var/log/asterisk/messages
chflags sappnd /var/log/asterisk/event_log
chflags sappnd /var/log/asterisk/queue_log
# Block changes to the Asterisk main executable file
chflags schg /usr/local/sbin/asterisk
# Block changes to Asterisk configuration files, voice prompts and it’s modules
chflags -R schg /etc/asterisk
chflags -R schg /usr/local/share/asterisk
chflags -R schg /usr/local/lib/asterisk/modules

Conclusiones

Asterisk es uno de los servicios voip mas utilizados actualmente en el mundo y openbsd uno de los sistemas mas confiables asi que si queremos una central telefónica segura y es uno de los aspectos a evaluar a la otra de instalar estos servicios ya que openbsd desalienta a muchos atacantes.

Categorías: OpenBsd

bloquear puertos msn en pfsese

octubre 19, 2011 Deja un comentario

Como todos sabemos, a la hora de los empleados trabajar mientras menos distracciones posibles mejor trabajaran ya que muchos por estar chateando en el msn no hacen sus labores y el jefe se pone molesto y le dice al administrador del sistema necesito que no puedan entrar al msn, aunque es algo muy sencillo pero son cosas que se pasan por alto hoy les traigo un pequeño tutoría de como bloquear los clientes de msn y el y los clientes web  para que de este modo los empleados trabajen mejor y tengamos al jefe tranquilo XD.

Lo primero que aremos sera redireccionar los dominios de MSN a dominios no validos de esta forma no podrán ingresar y lo aremos de la siguiente manera

«Services», «DNS Forwarder»

Lo siguiente es agregar los dominios que deseamos redireccionar y hacia que ip lo queremos hacer  para esto le damos clic en el simbolo de «+» como se muestra en la imagen resaltado con azul y colocamos el dominio y lo redireccionamos a localhost.

Con el paso anterior nos libramos de los MSN webs lo siguiente es  cerrar los puertos por los cuales se comunican los clientes de MSN  lo primero que vamos a realizar es una lista de puertos a bloquear  o alias y lo hacemos de la siguiente forma.

Como en el paso del dns vamos a dale en el símbolo «+» como se muestra en la imagen subrayado con azul y después de esto ingresamos los puertos y rangos que deseamos bloquea

Con el paso anterior ya tenemos una lista de puertos a bloquear, lo siguiente es ir al firewall y bloquearlos de forma que el trafico TCP/UDP que venga desde nuestra red con dirección a Internet y por esos puertos no los deje pasar de esta forma los clientes que utilizan estos puertos no van a poder comunicarze con el servidor de esta forma nunca logran realizar una conexion,  lo siguiente es ir a «FIREWALL» «RULES»

Lo siguiente es ir a LAN ya que bloquearemos lo que sale de nuestra red  y le damos en el símbolo de «+» para agregar otra regla

El ultimo paso es crear la regla  en «acction» colocamos  «block»  en la interfaz colocamos «LAN»  y en «destination port range» copiamos los alias creados en el  paso cuatro es si no copiar el nombre que le dimos de descripción y el no lo auto completara.

Y listo con estos sencillos pasos tendremos a nuestro jefe feliz y a los empleados aburridos, por que no podrán chatear mas en horas laborales XD espero que les sirva de ayuda o referencia.

Categorías: pfsense