VPNs IPsec basadas en rutas VTI en Pfsense
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.
- 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
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.
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.
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»
y con esto el problema quedo resuelto.
Fuente de vmware: https://kb.vmware.com/s/article/2151480
Doble factor de autenticación ssh OTP google authenticator Centos
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
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
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
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:
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
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
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:
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:
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:
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.
Pagina oficial del proyecto: https://code.google.com/p/google-authenticator/
Wiki proyecto: http://es.wikipedia.org/wiki/Google_Authenticator
Doble factor de autenticacion ssh en Open BSD
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:~>
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
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
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:
4. Lo siguiente es recompilar el archivo modificado
sudo cap_mkdb /etc/login.conf
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
6. Una ves terminado esto reiniciamos el servicio de OpenSSH.
sudo /etc/rc.d/sshd restart
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.
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 2014Welcome 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
Referencia: http://0x9900.com/blog/2013/08/28/two-factor-authentication-with-ssh-&-s/key-on-openbsd/
Misconf 2012
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
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 15mkGMlHP9=RDaWGPy/+6tWGzy1Htz+HLM=0Nh=dwX
y por ultimo tigo 3am0__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 flagLo 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 ina2 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: roota5 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: rootPlease 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 unknownroot@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#53misconf.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.
scripts perl …
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/perluse strict;
use Data::Dumper;
use warnings;
use LWP::Simple;my $url = ‘http://www.offsec.com/pwbonline/icq.html’;
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
instalación de OpenVPN en OpenBSD
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
Primer Reto Navideño
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.
instalar asterisk en openbsd
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.
bloquear puertos msn en pfsese
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.
comentarios