miércoles, 25 de septiembre de 2013

FreeNAS WebUI An Error Occurred - Workaround FreeBSD nginx django


FreeNAS es una gran solución basada en FreeBSD la cual estoy probando en estos días y tanto los resultados como la performance son excelentes, hasta el momento solo me he encontrado con un problema, en la consola sale el siguiente error: ValueError: bad marshal data, Este error es reportado por el servicio django.




Este error salio luego de realizar algunos tunings al sysctl y al loader.conf y el workaround que encontré es el siguiente:


  1. Stopear el servicio nginx y django:

    /usr/local/etc/rc.d/nginx stop && /usr/local/etc/rc.d/django stop
  2. Montar el / en modo rw:

    mount -u /
  3. Eliminar o renombrar los archivos .pyc

    find / -name "*.pyc" -exec sh -c 'mv "$0" "${0%.pyc}.bkp"' {} \;
  4. Volver a arrancar los servicios para que se vuelvan a generar los archivos .pyc.
    Nota: Los archivos .pyc los crear el nginx si los archivos son creados de manera correcta django no reportara ningún error, en caso de que reporte algún otro error lo mas probable es que indique cual es el archivo .py que tiene el problemas lo mas probable es que este corrupto, en este caso lo que hay que hacer es repetir el paso 1 y 3 y copiar por scp el archivo .py en cuestión desde otra instalación limpia de FreeNAS, luego continuar con los siguientes pasos.

    /usr/local/etc/rc.d/nginx start && /usr/local/etc/rc.d/django start
  5. Si todo sale bien stopeamos nginx y django

    /usr/local/etc/rc.d/nginx stop && /usr/local/etc/rc.d/django stop
  6. Volvemos a montar el / con los permisos originales del fstab

    mount -a
  7. Volver a encender los servicios

    /usr/local/etc/rc.d/nginx start && /usr/local/etc/rc.d/django start
  8. Probar el funcionamiento de la Interface Web

Saludos!

PD: Luego creare otra entrada donde mostrare como configurar y tunear FreeNAS con RAIDZ + iSCSI con una NIC 10GbE.

miércoles, 4 de septiembre de 2013

Dispositivos de Criptografía en Routers y Firewalls. Más performance para una VPN.

No es noticia que muchos Routers y Firewalls usan Módulos de Criptografía para encriptar y desencriptar los datos de una VPN, con estos módulos lo que se gana es bajar el uso de CPU y aumentar la performance de la conexión tunel.

Lo que me he propuesto es investigar que dispositivos podría adquirir para mejorar la performance de la VPN de mi Firewall, para suerte mía encontré la existencia de unos cuantos módulos de Criptografía que son compatible con mi firewall pfSense.

pfSense es un Firewall basado en FreeBSD como así también m0n0wall que, dicho sea de paso pfSense es una bifurcacion de m0n0wal, otro Firewall basado en FreeBSD son los SRX de la marca Juniper el cual también es de mi agrado y su OS llamado Junos también esta basado en FreeBSD.

Gracias al poder de FreeBSD podemos encontrar con soporte nativo a los siguientes módulos criptográficos hasta el día de la fecha:

En el siguiente link podemos encontrar unos 19 productos con soporte nativo hasta el día de hoy para FreeBSD: http://www.freebsd.org/relnotes/CURRENT/hardware/support.html


El siguiente gráfico es un Benchmark hecho por la gente de pfSense donde comparan los resultados con y sin modulo criptográfico, siendo cryptodev el framework de criptografía:


Por mi parte solo queda intentar conseguir alguno de estos módulos criptográficos, y hacer mis propios benchmarks con pfSense y/o Junos Olive.


Saludos

Hernan

viernes, 2 de agosto de 2013

CentOS 6 PXE Server con DHCP Server en pfSense

Hace mucho quería montar en Casa un PXE para poder instalar Sistemas Operativos por medio de la Red y contar con un System Rescue sin tener que quemar un CD o usar un Pendrive USB, ya tenia en mente usar PXE solo me faltaba configurar mi CentOS con un tftp Server y montar las imagenes .iso de Linux que quería instalar por Red, por ultimo agregar las opciones de bootpxe al DHCP que esta en mi Firewall pfSense.
La motivación de montar un PXE surgió porque quería revivir un viejo Servidor al cual usaría para Video Vigilancia con Motion que dicho sea de paso luego creare otra entrada donde explicare como Instalar Motion con dos Pico 2000 y con mas de una cámara.
Luego surgió un ultimo desafío y es que mi viejo Server no trae el firmware para bootear por Red con lo cual para este en particular tuve que crear un Disco de Arranque de Red con el driver apropiado para la NIC del Server.

Nota: Ya que si bien están todos los pasos para configurar el CentOS y tener operativo un PXE Server esta guia supone que usted tenga conocimientos de Linux.

En esta guia veremos:

  • Como configurar un PXE Server en CentOS
  • Como crear el Menu del PXE Boot
  • Como configurar el Network Boot del DHCP Server de pfSense
  • Como crear un Disco de Arranque de Red gPXE con  ROM-o-matic (Opcional)



Lo que vamos a necesitar para el Deploy:

  • CentOS 6 Instalado para el PXE Server
  • pfSense
  • Las imagenes .iso de 32 y 64 bits de CentOS
  • La imagen .iso del SystemRecuCD
  • Un Desktop, Notebook, Server o Virtual Machine para pruebas
  • Un diskette de 1.44 (Opcional)



Pasos:

Instalar en el CentOS Apache, tftp server y el paquete syslinux:

# yum install -y httpd tftp-server syslinux

Agregar a los runlevels y encender el Servicio de Apache:

# chkconfig httpd on
# service httpd start

Crear en la raíz del sistema los siguientes directorios:

# mkdir -p /tftpboot/pxelinux.cfg

Copiar los siguientes archivos al directorio creado:

# cp /usr/share/syslinux/{pxelinux.0,menu.c32,memdisk,mboot.c32,chain.c32} /tftpboot/

Crear el Menú para el PXE Boot:

# vim /tftpboot/pxelinux.cfg/default

El Siguiente es un ejemplo del archivo default, los label 1-7 son las opciones que saldrán en el Menú de PXE, en la guia daré los pasos para el funcionamiento del label 1, 2 y 5:

default menu.c32
prompt 0
timeout 300
ONTIMEOUT 7

MENU TITLE ########## PXE Boot Menu ##########
label 1
   menu label ^1) Install CentOS 6 i386
   kernel centos/6/i386/vmlinuz
   append initrd=centos/6/i386/initrd.img method=http://172.16.1.142/pxe/centos/6/i386 devfs=nomount

label 2
   menu label ^2) Install CentOS 6 x86_64
   kernel centos/6/x86_64/vmlinuz
   append initrd=centos/6/x86_64/initrd.img method=http://172.16.1.142/pxe/centos/6/x86_64 devfs=nomount

label 3
   menu label ^3) Install Fedora 16 x86_64
   kernel fedora/16/x86_64/vmlinuz
   append initrd=fedora/16/x86_64/initrd.img repo=http://172.16.1.142/pxe/fedora/16/x86_64 xdriver=vesa nomodeset

label 4
   menu label ^4) Install Fedora 19 x86_64
   kernel fedora/19/x86_64/vmlinuz
   append initrd=fedora/19/x86_64/initrd.img repo=http://172.16.1.142/pxe/fedora/19/x86_64

label 5
   menu label ^5) SystemRescueCD 3.7.1
   kernel SystemRescueCD/3.7.1/isolinux/rescue32
   append initrd=SystemRescueCD/3.7.1/isolinux/initram.igz netboot=tftp://172.16.1.142/SystemRescueCD/3.7.1/sysrcd.dat

label 6
   menu label ^6) Windows 7 PE (x64)
   KERNEL Boot/startrom.0

label 7
   menu label ^7) Boot from local drive
   localboot


Hay que modificar el archivo de configuración del tftp server para que tome nuestro directorio de tftpboot y como el servicio de tftp funciona on-demand luego hay que reiniciar el servicio del que depende... xinetd

# vim /etc/xinetd.d/tftp

Modificar las siguientes variables:

server_args = -s /tftpboot
disable = no

Reiniciar el xinetd

# service xinetd restart

Como ya se habran dado cuenta el metodo de instalacion es por http para la Instalacion de los CentOS con lo cual el Instalador buscara los paquetes en la url de nuestro servidor y para lograr eso vamos a crear algunos directorios dentro del Documento Root del Apache para finalmente montar las imagenes .iso

# mkdir -p /var/www/html/pxe/centos/6/{i386,x86_64}

Creamos algunos direcotrios en el root del tftpboot a fin de organizar las distribuciones:

# mkdir -p /tftpboot/centos/6/{i386,x86_64}
# mkdir -p /tftpboot/SystemRescueCD/3.7.1


Agregamos las siguientes entradas al final del fstab para que tengamos siempre disponible los paquetes para la instalacion de los CentOS.

# vim /etc/fstab

/<Path>/CentOS-6.4-i386-minimal.iso   /var/www/html/pxe/centos/6/i386       udf,iso9660    ro,loop        0 0
/<Path>/CentOS-6.4-x86_64-minimal.iso   /var/www/html/pxe/centos/6/x86_64       udf,iso9660    ro,loop        0 0
/<Path>/systemrescuecd-x86-3.7.1.iso       /tftpboot/SystemRescueCD/3.7.1      udf,iso9660    ro,loop        0 0

Montamos los cambios del fstab:

# mount -a

Copiamos el Kernel y el Init Ram Disk a los directorios creados anteriormente estos archivos son los que cargara por tftp el PXE luego de cargar el Menu.

cp /var/www/html/pxe/centos/6/i386/isolinux/{vmlinuz,initrd.img} /tftpboot/centos/6/i386/
cp /var/www/html/pxe/centos/6/x86_64/isolinux/{vmlinuz,initrd.img} /tftpboot/centos/6/x86_64/

Si tenemos activo el firewall de linux modificamos el iptables para que que acepte las conexiones de tftp y http:

# vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m udp -p udp --dport 69 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

Configuracion de pfSense:

Para configurar el DHCP hay que ir a Services, DHCP Server:


 Luego hacer clic en Advance de Enable network booting para desplegar mas opciones.


Tildar Enables network booting, en Enter the IP of next-server poner la IP del CentOS con PXE, y en the file name poner: /pxelinux.0



Crear un Disco de Arranque de Red gPXE con  ROM-o-matic:

Cuando llego el momento de probar el PXE en mi Server me di cuenta que no contaba con ninguna opción para bootear por Red así que tuve que buscar una solución y me encontré con el sitio web de rom-o-matic que se trata de un proyecto open para bootear por Red, la web es bastante intuitiva asi que solo me faltaba identificar cual era el modelo de la NIC de Red, para eso ejecute el comando lspci.


# lspci | grep -i ethernet
00:04.0 Ethernet controller: Intel Corporation 82557/8/9/0/1 Ethernet Pro 100 (rev 08)

En la web de rom-o-matic seleccionamos el link del ultimo release en producción, luego seguír los pasos 1, 2 y 4.
Con el archivo ya descargado ejecutamos lo siguiente para copiar la imagen a un diskette:

# cat gpxe-1.0.1-eepro100.bin > /dev/fd0


Algunos screenshots del PXE Boot y del PXE Menu:









Saludos!

Hernan

domingo, 12 de mayo de 2013

Extraer la BIOS Rom de un VMware ESXi 4 / 5 y Editar la tabla DMI

A continuación explicare como extraer el BIOS rom de VMware y luego editar la tabla DMI a fin de cambiar los string de System Manufacture, System Product Name y System Serial Number, luego con el BIOS modificado explicare como hacer para que una Virtual Machine arranque con nuestro custom BIOS rom.

Antes de proceder con los pasos voy a explicar porque he llegado a realizar  mi custom BIOS aunque seguro ya imaginaran el porque y de su utilidad.

En mi caso he buscado modificar los strings mencionados de la BIOS ya que necesitaba realizar una maqueta con un producto de la marca Juniper y las licencias de prueba limitaban al producto para solo uno días de uso y en otros casos la licencia de prueba habilitaba solo algunos features con lo cual me limitaba para poder realizar mis labs.

Es el caso de Juniper como de otras muchas marcas la manera que tienen sus productos de validar una licencia es macheando contra el System Serial Number que suele ser el Sserial Number del Producto, así que si tienes la licencia mas el numero de serie del producto con esta molificación ya sea en la rom de una VM o la rom propia de una caja podrás tener n cantidad de productos full para jugar.

Estas modificaciones fueron probadas en los productos: STRM, IC, SA Juniper, tomando los valores de cajas físicas y pasando los mismos a la rom de una VM para los productos en formato Virtual, y he podido comprobar que los BIOS Rom de ESXi 4 son compatibles con ESXi 5 y las versiones de VMware Workstation.

Nota: Nadie pierda el tiempo en pedirme o intentar comprarme licencias y serials ya que no respondere a tal solicitud por mas gustosa que sea la oferta.


Se requiere:

Una PC con Linux.
Phoenix BIOS Editor Pro v2.2.1.3.tgz (6.5 MB) o mas reciente
Una PC o VM con Windows para instalar el BIOS Editor


Pasos:

Para revisar la tabla DMI del BIOS de nuestra PC o de cualquier otra podemos usar el comando de linux dmidecode.


# dmidecode | more
# dmidecode 2.7
SMBIOS 2.51 present.
34 structures occupying 1064 bytes.
Table at 0xE7EEA000.

Handle 0x0000, DMI type 0, 24 bytes.
BIOS Information
Vendor: Phoenix Technologies LTD
Version: 1.13
Release Date: 10/06/2008
Address: 0xE6B70
Runtime Size: 103568 bytes
ROM Size: 1024 kB
Characteristics:
ISA is supported
PCI is supported
PNP is supported
BIOS is upgradeable
BIOS shadowing is allowed
ESCD support is available
Boot from CD is supported
Selectable boot is supported
EDD is supported
3.5"/2.88 MB floppy services are supported (int 13h)
ACPI is supported
USB legacy is supported
LS-120 boot is supported
ATAPI Zip drive boot is supported
BIOS boot specification is supported

Handle 0x0001, DMI type 1, 27 bytes.
System Information
Manufacturer: Juniper Networks
Product Name: STRM 2500
Version: 1.0
Serial Number: 025006201000····
UUID: 80491C00-AD90-DF11-9F77-FD4FFE01····
Wake-up Type: Power Switch
SKU Number: Not Specified
Family: Not Specified

Handle 0x0002, DMI type 2, 8 bytes.
Base Board Information
Manufacturer: Supermicro
Product Name: PDSMP-JN1
Version: PCB Version
--More--

  1. Tomamos nota de la sección System Information:

    Manufacturer: Juniper Networks
    Product Name: STRM 2500
    Version: 1.0
    Serial Number: 025006201000····
    UUID: 80491C00-AD90-DF11-9F77-FD4FFE01····
  2. Pasos para extraer el BIOS Rom de VMware:
     
    En un ESXi 4 el archivo que debemos buscar es s.z y en ESXi 5 es s.v00
    Copiar el archivo a nuestra maquina por scp el archivo s.v00 que se encuentra en /bootbank (ESXi5):

    mkdir -p ~/tmp/BIOS

    scp root@172.16.1.10:/bootbank/s.v00 ~/tmp/BIOS

    Descomprimir el archivo s.v00

    cd ~/tmp/BIOS

    file s.v00

    tar xfv s.v00




    Para chequear si se encuentra el bios440 en versiones de ESXi 4 debemos buscar el archivo vmx y para ESXi 5 el archivo se llama vmware-vmx

    objdump --headers vmware-vmx | grep -i 440


    Extraer el bios440

    objcopy vmware-vmx --output-target=binary --only-section=bios440 --set-section-flags bios440=alloc bios440.rom.zl


    Descomprimir el .zl

    perl -e 'use Compress::Zlib; my $v; read STDIN, $v, '$(stat -c%s "./bios440.rom.zl")'; $v = uncompress($v); print $v;' < bios440.rom.zl > bios440.rom

  3. Ahora que tenemos el archivo bios440.rom vamos a editarlo con el Phoenix BIOS Editor

    Abrir el Phoenix BIOS Editor
    Abrir el bios440.rom e ir a la tabla DMI



    Modificar los strings: System Manufacture, System Product Name y System Serial Number, UUID.
    Luego de realizar los cambios hacer clic en File y Build BIOS... para guardar nuestro custom BIOS.


  4. Para indicar a la VM que arranque con el BIOS custom hay que copiar nuestro BIOS rom por scp al ESXi junto al archivo .vmx de la VM que busquemos customizar.

    Editar con el vi el .vmx de la VM elegida y agregar las siguientes lineas:

    bios440.fileName = "BIOS440_STRM_JUNIPER.ROM"
    isolation.tools.PatchSMBIOS.disable = "TRUE"
    isolation.tools.getUUId.disable = "TRUE"
  5. Para los que quieran un bios440 rom sin modificar les dejo un link:

    bios440.rom ESXi5.tgz (207 KB)
    bios440.rom ESXi4.tgz (207 KB)

    Nota: Para los que quiera hacer un backup de su BIOS pueden usar la tool flashrom
    # flashrom -r BkpBios.rom
    # flashrom -wv UpdateBios.rom
Saludos!

Hernan

miércoles, 1 de mayo de 2013

Instalar VMware Workstation 9 en Fedora 18 y Como Iniciar las VM por consola (nogui)

Como comente en otra entrada, tengo que aprovechar al máximo los recursos del sistema, así que estoy solo por consola sin el gestor gráfico para eso cambie de runlevel 5 a 3, luego procedí a instalar VMware Workstation y a buscar la forma de Iniciar mi VM desde modo texto.

Los pasos son:

Para instalar VMware Workstation 9


  1. Bajar el paquete de VMware, del siguiente link, sera necesario registrarse:
    https://my.vmware.com/group/vmware/details?productId=293&downloadGroup=WKST-902-LX
  2. Instalar los paquetes necesarios para la instalación de VMware Workstation:

    yum install -y kernel-devel kernel-headers gcc
  3. Para que no falle la instalación de VMware hay que hacer un copy del archivo version.h:

    cp /usr/src/kernels/`uname -r`/include/generated/uapi/linux/version.h /lib/modules/`uname -r`/build/include/linux/
  4. Instalar VMware Workstation:

    chmod +x VMware-Workstation-Full-9.0.2-1031769.x86_64.bundle
    ./VMware-Workstation-Full-9.0.2-1031769.x86_64.bundle --console


    Aceptar el contrato de licencia y todos los demas parametros por defecto.
  5. Agregar los módulos de VMware al Kernel:

    vmware-modconfig --console --install-all
    Aceptar todos los parámetros por defecto
  6. Con respecto a licencia gooleando un poco siempre se encuentran, en thepiratebay hay unas cuantas:

    /usr/lib/vmware/bin/vmware-vmx --new-sn TU-LICENCIA
Para Iniciar la VM en modo texto (sin interface gráfica)

  1. Para Inciar las vm, usamos el comando vmrun con la opcion start y nogui apuntando al .vmx:

    vmrun start vmware/SPE-InfranetController/SPE-InfranetController.vmx nogui
  2. Para ver las vm encendidas:

    vmrun list
  3. Para ver todas las opciones del vmrun:

    vmrun --help | more



Saludos
Hernan

PD: En otra oportunidad agregare una entrada al blog donde mostrare como extraer y editar la BIOS rom de un ESX para modificar por ejemplo el Product Name y el Serial Number del System Information de la tabla DMI.

Como tener Mouse en una Consola Linux sin las X

Resulta que estoy usando un Notebook donde le quedan justos los recursos para virtualizar un apliance con el cual tengo que hacer un lab y dar un curso, así que para ahorrar al máximo los recursos decidi cambiar de runlevel 5 a 3 y quedarme solo con la consola de Linux, con lo cual mejoro muchisimo la performance de VM y del host en general.

Luego surgió la necesidad de usar links para navegar por consola pero extrañaba mucho el mouse para moverme en las paginas, así que encontré la solución instalando GPM, General Purpose Mouse.

Básicamente lo que hay que hacer es instalar el paquete gpm y habilitar el servicio.


Pasos:


  1. Instalar gpm

    yum install -y gpm

  2. Habilitar e iniciar el servicio gpm

    En Fedora: systemctl enable gpm.service; systemctl start gpm.service
    En CentOS: chkconfig gpm on; service gpm start

  3. Para ver el estado del servicio:

    Fedora: systemctl status gpm.service
    CentOS: service gpm status

Saludos!
Hernan

Boton Print Screen no funciona en Fedroa LXDE Security Edition

Hace unos días que estoy probando la Edición Security de Fedora la cual me satisface mucho, en primer lugar porque la distro es una de los hermanitos de Red Hat (a la cual estoy acostumbrado) y trae un set de apps que uso amenudo y en segundo lugar porque el sistema es muy ligero, al traer lo justo y necesario y LXDE como Entorno de Escritorio super ligero.

El problema surgió cuando intente sacar un screenshot con el acostumbrado botón "Print Scr", para mi asombro esto no funcionaba con lo cual empecé a investigar y el sistema no trae nada asociado a dicha tecla asi que a mi juego me llamaron! 

La solución que encontré es bastante sencilla, se trata de agregar dos hotkey al interprete LXDE para la tecla "Impr pant" y Alt+"Impr pant", estos hotkey a su vez ejecutaran dos script que crearemos a continuación, uno correrá el comando "scrot" para sacar un screenshot y el otro ejecutara el comando "import" que sacara un screenshot de la ventana activa.

Pasos: 
  1. Instalar scrot e ImageMagick

    yum install -y scrot ImageMagick
  2. Crear los script dentro de /usr/local/bin

    vim /usr/local/bin/PrtScn.sh

    Copiamos y pegamos:

    #!/bin/bash
    scrot -e 'mv $f ~/Pictures/`date +%F_%H%M%S_%N`.screenshot.png'



    vim /usr/local/bin/Alt+PrtScn.sh

    Copiamos y pegamos:

    #!/bin/bash
    activeWinLine=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)")
    activeWinId=${activeWinLine:40}
    import -window "$activeWinId" ~/Pictures/$(date +%F_%H%M%S_%N).screenshot.png

  3. Damos permisos de ejecución a los scripts:

    chmod a+x /usr/local/bin/*PrtScn.sh
  4. Agremos los hotkey para el interprete de LXDE en el archivo lxde-rc.xml dentro de la seccion <keyboard> del xml:

    vim ~/.config/openbox/lxde-rc.xml
    <!-- Take screenshots -->
    <keybind key="A-Print">
    <action name="Execute">
    <command>Alt+PrtScn.sh</command>
    </action>
    </keybind>
    <keybind key="Print">
    <action name="Execute">
    <command>PrtScn.sh</command>
    </action>
    </keybind>
    <!-- End Take screenshots -->

    Si queremos que estos cambios se apliquen para todos los usuarios repetimos el paso 4 pero modificamos: /usr/share/lxde/openbox/rc.xml
  5. Para que los cambios tomen efecto reiniciamos la sesión o ejecutamos:

    openbox --reconfigure

Esto es todo!
Saludos Hernan