Como hacer funcionar VeraCrypt en un dualboot con Debian y Windows 10 en UEFI

Saludos a toda la gente que (aún) lee este blog cuando se me ocurre escribir algo o cuando he pasado por un trip en stack overflow gracias a un software con bugs. En este caso VeraCrypt.

La historia (omite este pedazo si vienes solo por el procedimiento)

Hace poco me compré una computadora gracias a que en la universidad necesitaba correr el visual studio y un emulador de mac OSX (#guacala), y como virtualizar ya se me estaba haciendo problemático en mi antigua pc por la edad (maquina de gama baja de hace 10 años). Durante el curso tuve que lidiar con bitlocker el cual desactive a la primera oportunidad, por que es un windows home y no tiene herramientas para modificar el comportamiento de bitlocker y para instalar debian tenía que desactivar secure boot, lo que me condenaba a recuperar el bootloader cada ves que iniciaba windows. Cuando ya tuve listo mi debian con LUKS era hora de encriptar la partición de windows.. pero bitlocker no es una opción en esta computadora por lo que  investigando encontré veracrypt, solo que tenía un problema: Cuando se tiene  un setup dualboot en una pc con UEFI se desactiva la opción de “sistema multiboot”, ¿para que sirve esa opción me diran? sirve para ajustar los bootloader de todos los sistemas operativos instalados en la computadora para poder bootear en orden y armonía (aka poder usar la pc normalmente).

Procedimiento

Paso 1:  Encripta tu partición linux primero.

Si ya hiciste este paso omitelo, igual si no quieres encriptar la partición de Linux por cualquier razón.

Es recomendable hacer este paso primero y durante la instalación del sistema operativo por que LUKS requiere hacer un wipe de las particiones a encriptar (creo que se puede omitir pero es menos seguro), asi que es mejor tener ya listo el cifrado en las particiones linux (recuerden dejar /boot sin encryptar).

Paso 2: Encriptar la partición de sistema en windows con VeraCrypt

Realicen este paso con la opción “Single OS” o “sistema operativo único” el cual realiza la encripción de windows pero no toca el orden de los bootloader, si tienen otras particiones windows además de la partición del sistema encriptenlas a parte con veracrypt (volume encryption).

Todo bien, pero cuando reinicien no aparecerá GRUB sino solamente el bootloader de VeraCrypt y windows.

Paso 3: Cambiar el orden de los bootloaders desde Windows con EasyUEFI

Si, es software privativo (si conocen un editor libre de entradas de UEFI me las dejan en los comentarios), solo coloquen la entrada “debian” al principio (si tienen otro OS que no es debian debe estar identificado igualmente).

Al reiniciar aparecerá GRUB como siempre, pero cuando quieran iniciar windows aparecerán errores alarmantes de boot y el sistema intentará recuperarse fallando horriblemente cada ves. Esto ocurre por que GRUB intenta iniciar windows desde su bootloader normal, que es inaccesible ya que está encriptado. En lugar de eso debemos hacer que GRUB inicie el bootloader de VeraCrypt.

Paso 4: Agregar el bootloader de VeraCrypt a GRUB

En la entrada de Lanky Cyril se nos recomienda editar /boot/grub/grub.cfg y cambiar solamente la línea del chainloader de Windows para que en lugar de ser: \EFI\Microsoft\Boot\bootmgfw.efi  Sea: \EFI\VeraCrypt\DcsBoot.efi

Esto funciona, pero nos da otro problema, grub.cfg es un archivo autogenerado, que toma su contenido derivado de las opciones de /etc/default/grub y los scripts que se encuentran en /etc/grub.d/ entonces cada ves que se actualice el sistema y grub o el kernel linux o initramfs necesiten cambios el sistema va a borrar el cambio generado en /boot/grub/grub.cfg y regresará la línea de Windows a su forma original, la cual es inutil ahora.

En lugar de  cambiar la línea de Microsoft en grub debemos crear una entrada de menú nueva para VeraCrypt, la  forma fácil es abrir /boot/grub/grub.cfg y copiar completa la menuentry de  windows, en mi caso es así:


### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows Boot Manager (en /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-efi-0E95-88F2' {
insmod part_gpt
insmod fat
set root='hd0,gpt1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 0E95-88F2
else
search --no-floppy --fs-uuid --set=root 0E95-88F2
fi
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
### END /etc/grub.d/30_os-prober ###

 

Y lo pegamos en el final del script /etc/grub.d/#40_custom el cual está diseñado para agregar entradas manuales del menú a grub. Luego de pegarlo editamos el chainloader de esta entrada y le cambiamos nombre (en mi caso CryptLoader) para no confundirlo con la entrada normal de Windows.

Así quedó en mi caso:


#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry 'CryptLoader for Windows (en /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-efi-0E95-88F2' {
insmod part_gpt
insmod fat
set root='hd0,gpt1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 0E95-88F2
else
search --no-floppy --fs-uuid --set=root 0E95-88F2
fi
chainloader /EFI/VeraCrypt/DcsBoot.efi
}

Luego de hacer este cambio hacemos un update-grub y podemos iniciar ya con la nueva entrada la cual nos pedirá la contraseña elegida para la partición windows y nos dejará bootear con normalidad.

Anuncios

Agregar cuenta de facebook messenger a kde telepathy (Cuentas en línea de plasma)

Bienvenidos nuevamente a este blog que se actualiza cada ves que despierta el kilauea, hace poco regresé a usar kde plasma como mi escritorio principal luego de un par de años de usar xfce4 por las limitaciones de mi hardware de video (o mejor dicho del driver de video), pero desde que descubrí a amdgpu mis problemas terminaron y pude volver a un escritorio con mas herramientas. En ese contexto me encontré configurando todas mis cuentas personales en kdepim (correo, calendario, twitter) pero me encontré que facebook hace años dejo de ser soportado tanto en kopete como en pidgin y telepathy, instale toda la paquetería habitual de telepathy incluyendo la librería telepathy-haze para poder utilizar plugins de pidgin (libpurple), y me encontré el proyecto de jgeboski para usar el “nuevo” protocolo de chat de facebook messenger, como las guías generalmente son para su uso en pidgin encontré escasa información para telepathy, pero encontré lo que buscaba en un post de los foros de arch linux.

Primero instalamos telepathy incluyendo como les mencionaba la librería telepathy-haze:

# apt install kde-telepathy kde-config-telepathy-accounts kde-telepathy-call-ui telepathy-haze

Ahora agregamos el repositorio de jgeboski para instalar purple-facebook en el archivo /etc/apt/sources.list.d/jgeboski.list y agregamos esta línea:

deb http://download.opensuse.org/repositories/home:/jgeboski/Debian_9.0 ./

Donde Debian_9.0 es la versión que estoy usando (y la que funciona para buster y sid a fecha de hoy) versiones anteriores como Debian_8.0 y para diferentes ediciones de ubuntu tienen su propio “release” en los repositorios, una tabla detallada sobre las versiones está en las fuentes al final de este post.

Una ves guardado el archivo procedemos a agregar la llave de repositorio:

$ wget -O- https://jgeboski.github.io/obs.key | sudo apt-key add -

Y actualizamos la lista de paquetes:

# apt update

Ahora procedemos a instalar purple-facebook:

# apt install purple-facebook

Si nuestro cliente es pidgin la guía termina aquí, pero en kde telepathy debemos hacer un paso adicional, ya que plasma no tiene ninguna forma de agregar cuentas de facebook usando purple-facebook.

Primero debemos crear el archivo /usr/share/accounts/services/kde/ktp-haze-facebook-im.service y agregar el siguiente contenido:

<?xml version="1.0" encoding="UTF-8"?>
<service id="ktp-haze-facebook-im">
  <type>IM</type>
  
  <name>Chat</name>
  <icon>im-facebook</icon>
  <provider>ktp-haze-facebook</provider>
  <translations>kaccounts-providers</translations>

  <template>
      <group name="telepathy">
          <setting name="manager">haze</setting>
          <setting name="protocol">facebook</setting>
      </group>
      <group name="auth">
          <setting name="method">password</setting>
          <setting name="mechanism">password</setting>
      </group>
  </template>
</service>

Y luego un segundo archivo

 /usr/share/accounts/providers/kde/ktp-haze-facebook.provider
<?xml version="1.0" encoding="UTF-8"?>
<provider id="ktp-haze-facebook">
    <name>Facebook</name>
    <icon>im-facebook</icon>
    
    <description>Chat account in Facebook</description>
    <translations>kaccounts-providers</translations>
    <plugin>ktpaccountskcm_plugin_kaccounts</plugin>
</provider>

Y ahora ya nos debe aparecer el botón para crear una cuenta de facebook en “cuentas en línea”  en las preferencias del sistema:

 

facebook

facebook2

Y ahora tenemos facebook chat en nuestro telepathy, por el momento solo el chat está implementado, no se soporta videollamada o chats grupales usando este plugin.

Fuentes:

Repositorios de jgeboski en github

Post sobre kde telepathy en arch linux

LAMP en servidores con poca memoria

Buen día lectores del blog mas inactivo del internet, hoy me he encontrado con que apache 2 y mysql ya no son los pesos livianos de hace unos 10 años, como es normal con casi todo el software cada ves se requiere que cada programa realice mas funciones o que se extienda la cantidad de conexiones que debe soportar para mantener el servicio funcionando.

El problema

Actualmente pasamos por la era dorada de la “nube” en la que cada quien puede tener su propio servidor a bajo costo, pero como se imaginarán las opciones mas baratas (o de membresía gratis) vienen tambien con enormes limitantes como el AWS EC2 cuyos servidores minimos corren con unos esqueléticos 512mb de memoria (hace poco aumentó a 1gb), no es  tan grave hasta que instalamos nuestro stack LAMP con el mysql de oracle y apache 2 estandar en debian, solo MySQL puede llegar a unos enormes (para este caso) 400mb al inicio y recién instalado, y apache en el rango de los 100mb  dejan practicamente nada para el SO, lo que hace colapsar alguno de los servicios con errores de “not enough memory”, esto también es el caso en computadoras para desarrollar páginas web donde solo se tengan 1 o 2gb de memoria y tengamos que correr un escritorio X al mismo tiempo que el stack web.

Haciendo adelgazar los servidores

Empezamos con apache que por defecto viene con el modulo mpm_worker que viene configurado para soportar miles de conexiones simultáneas generando varios threads podemos hacer que esas conexiones usen menos memoria y no causen timeout, para eso cambiamos este módulo de apache en su configuración de modulo /etc/apache2/modules-available/mpm_worker.conf

Por defecto es así:

<IfModule mpm_worker_module>
 StartServers 2
 MinSpareThreads 25
 MaxSpareThreads 75
 ThreadLimit 64
 ThreadsPerChild 25
 MaxRequestWorkers 150
 MaxConnectionsPerChild 0
</IfModule>


Y lo cambiamos de esta forma:

<IfModule mpm_worker_module>
    StartServers          1
    MinSpareThreads       5
    MaxSpareThreads      15 
    ThreadLimit          25
    ThreadsPerChild       5
    MaxRequestWorkers           25
    MaxConnectionsPerChild 200
</IfModule>


Si instalamos php7 apache automáticamente cambia de mpm_worker a mpm_prefork que se configura por defecto para el mismo principio de worker, una cantidad respetable de conexiones soportadas, este al igual que mpm_worker se configura en el directorio mods-available:

/etc/apache2/mods-available/mpm_prefork.conf

por defecto:

<IfModule mpm_prefork_module>
 StartServers 5
 MinSpareServers 2
 MaxSpareServers 25
 MaxRequestWorkers 300
 MaxConnectionsPerChild 0
</IfModule>

Cambiamos a:

<IfModule mpm_prefork_module>
    StartServers          1
    MinSpareServers       1
    MaxSpareServers       3
    MaxRequestWorkers          10
    MaxConnectionsPerChild 3000
</IfModule>

Y ahora reiniciamos apache para que los cambios se apliquen, lo que cambiamos es la cantidad de “servers” o “threads” que se inician para soportar cada conexión, en lugar de eso habilitamos mas clientes por cada thread para que no se colapse el servicio ni se eleve la memoria considerablemente, pasamos de un apache 2 de 90-100mb a uno de 25mb.

Ahora MySQL, hay muchas técnicas que se pueden aplicar, especialmente los cambios en caché y loggin (depende del uso que tendrá) pero hay una función específica que genera un enorme gasto, performance_schema, este es una precarga de estadísticas para MySQL y en base a esa precarga MySQL reserva la memoria que va a necesitar para sus transacciones DURANTE STARTUP, acaparando toda la memoria, por defecto usa 400mb en mi máquina de prueba.
Para deshabilitarlo vamos al archivo /etc/mysql/mysql.conf.d/mysqld.cnf y agregamos al final del archivo:

performance_schema = off

Reiniciamos el servicio y vemos una mejora sustancial en la memoria usada por mysql de 400mb a 39mb, claro hay otras técnicas que nos pueden ayudar especialmente si por alguna razón necesitamos tener performance_schema funcionando (Grandes consultas o grandes cantidades de ellas simultáneamente), les dejo la fuente donde hay mas información al respecto, mis pruebas fueron en una netbook con 1gb de ram corriendo debian stretch con mysql de los repositorios de oracle, la fuente hizo sus pruebas en el low tier de digital ocean que solo otorga 1cpu y 512mb de memoria.

Fuente:

https://www.narga.net/optimizing-apachephpmysql-low-memory-server/

Actualizar Debian Squeeze a Wheezy con instalación de ISPconfig 3 + dovecot + roundcube

Bueno llego el tiempo de la actualización planeada de Debian 6 (Squeeze) a Debian 7 (Wheezy) en el servidor de la empresa, me leí los “known issues” de debian.org y como no encontré nada que afectara a mi server inicié con el upgrade, solo para encontrar que dovecot-core vomitó 10 errores de post-inst (arrastrando otros paquetes de dovecot).

doveconf: Fatal: Error in configuration file /etc/dovecot/dovecot.conf: mail_plugin_dir: access(/usr/lib/dovecot/modules/lda) failed: No such file or directory

Pues el error era de que ese archivo ‘lda’ ya no existe, asi que al cambiar la ruta de su entrada en /etc/dovecot.conf:

protocol lda {
  auth_socket_path = /var/run/dovecot/auth-master
  mail_plugin_dir = /usr/lib/dovecot/modules/lda
  mail_plugins = sieve quota
  postmaster_address = postmaster@my-domain.tld
}

a esto:

protocol lda {
  auth_socket_path = /var/run/dovecot/auth-master
  mail_plugin_dir = /usr/lib/dovecot/modules
  mail_plugins = sieve quota
  postmaster_address = postmaster@my-domain.tld
}

El archivo era correcto nuevamente, ahora a terminar de instalar:

apt-get -f install

Luego el problema era roundcube, el error de roundcube era este en /var/log/apache2/error.log:

SoftException in Application.cpp:221: File "/usr/share/roundcube/index.php" is not in document root of Vhost "/var/www/"

Rarisimo, pero buscando en startpage.com (si, ya no uso google) entre los resultados encontré esto:
http://www.crazysquirrel.com/computing/debian/servers/ubuntu-mail-server.jspx
Y encotré al culpable, se llamaba /etc/suphp/suphp.conf, tenemos que cambiar dos cosas aqui, primero el “check_vhost_docroot” que revisa si el script que estamos corriendo esta dentro del document root de este archivo (no el de apache):

check_vhost_docroot=false

Y luego encontré otra belleza gracias a este mismo archivo:

 SoftException in Application.cpp:350: UID of script "/var/lib/roundcube/index.php" is smaller than min_uid

Bueno resulta que roundcube instalado desde paquetes debian siempre guarda sus archivos como usuario root (UID 0) ya que antes roundcube llamaba a php-cli para trabajar, ahora todo lo que es php-cli se esta migrando a php5-cgi, y que para correr aplicaciones que requieran permisos altos (como para mover, copiar y borrar dentro de un buzón de correo en posesión de otro usuario) debe usar un programa llamado suphp, hasta aquí todo bien, solo que este roundcube es algo viejito y no venía preparado para el cambio por lo que es imposible hacerlo correr, a menos que cambiemos sus permisos y volvamos a modificar el archivo:

Primero cambiamos el dueño y el grupo de los directorios de roundcube:

chown -R www-data:www-data /var/lib/roundcube
chown -R www-data:www-data /usr/share/roundcube

Y luego en el archivo /etc/suphp/suphp.conf cambiamos el min_uid y el min_gid a 33 (UID Y GID de www-data):

; Minimum UID
min_uid=33

; Minimum GID
min_gid=33

Luego reiniciamos apache y probamos nuestros servicios, podemos ver que todo funciona perfectamente.

Si llegan a experimentar un error de base de datos entonces deben actualizar mysql con el script integrado:

mysql_upgrade --force  --password='mysqlrootpassword'

ISPConfig en mi configuración actual ya está integrado con estos servicios y funciona sin problemas, aun no he probado el manejo de OpenVZ, pero eso es para otro articulo.

Network Shaping con debian squeeze (oldstable) mastershaper 0.44 con soporte vlan Cisco

Bueno regreso a hacer proyectos frikis, esta ves un equipo de red usando GNU/Debian ya que no tengo $3000 para comprar un packeteer o algo parecido que haga network shaping, qos y data rate limit.

Proyecto

Mi escenario es el siguiente:

Si, este es mi esquema de red, internet es una nube oscura y tenebrosa
Si, este es mi esquema de red, internet es una nube oscura y tenebrosa

Bueno el router solo tiene una interfáz de entrada y una de salida, la interfáz de salida esta en modo trunk para comunicarse con el switch, el shaper que está ubicado entre ambos equipos es un bridge, osea completamente transparente para ambos, pero debe ser capáz de ver la vlan que vamos a manipular, lo que necesitamos:

1- router cisco o de cualquier otra marca que soporte encapsulación dotq1
2- Switch administrable con soporte de encapsulación dotq1 (para las vlan)
3- Una pc con dos tarjetas de red (generalmente una viene incluida en la motherboard) FastEthernet
4- Un patchcord cruzado RJ45 y uno recto, el cruzado para conectar con el router y el otro hacia el switch.

El router y el switch los pueden configurar como quieran, aqui esta el ejemplo de como están los puertos relevantes en equipos cisco con ios 12.x:

Router:

interface GigabitEthernet0/0
ip address -IP WAN- 255.255.255.248
ip nat outside
ip virtual-reassembly
duplex auto
speed auto
media-type rj45
!
interface GigabitEthernet0/1
no ip address
duplex auto
speed auto
media-type rj45
!
interface GigabitEthernet0/1.2
description vlan internet
encapsulation dot1Q 2
ip address -IP LAN- 255.255.255.0
ip nat inside
ip virtual-reassembly

Switch:

interface FastEthernet3/1
 switchport
 switchport trunk encapsulation dot1q
 switchport mode trunk
!
interface FastEthernet3/2
 switchport
 switchport access vlan 2
 switchport mode access
!
interface FastEthernet3/3
 switchport
 switchport access vlan 2
 switchport mode access

Construcción del equipo shaper

A- Fuentes y compilación de kernel, IPtables, agregar soporte para protocolos capa 7 y filtrado intermedio en iptables

Instalamos debian squeeze como siempre, luego cuando ya tengamos acceso a la línea de comando descargamos las herramientas de compilación:

aptitude install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential patch time checkinstall

Luego el fuente del kernel:

cd /usr/src 
apt-get source linux-image-2.6.32-5-amd64
ln -s /usr/src/linux-2.6-2.6.32 /usr/src/linux

Parcheamos el kernel para que soporte capa 7 en netfilter:

cd /usr/src/linux 
wget --no-check-certificate  https://dev.openwrt.org/export/18900/trunk/target/linux/generic-2.6/patches-2.6.32/100-netfilter_layer7_2.21.patch 
patch -p1 < 100-netfilter_layer7_2.21.patch

Si vamos a filtrar usando iptables necesitamos también el parche para imq (intermediate queuein):

cd /usr/src/linux
wget http://www.linuximq.net/patches/linux-2.6.32-imq-test2.diff
patch  -p1 < linux-2.6.32-imq-test2.diff

Configuración del kernel antes de iniciar la compilación:

cd /usr/src/linux 
cp /boot/config-2.6.32-5-amd64 .config
perl -pi -e 's/CONFIG_VT6656=m/CONFIG_VT6656=n/g' .config # Este driver da problemas
make menuconfig

Activamos imq:

Device Drivers  ---> 
 -*- Network device support  ---> 
      IMQ (intermediate queueing device) support 
     IMQ behavior (PRE/POSTROUTING) (IMQ AB)  ---> 
       (X) IMQ AB 
     (16)    Number of IMQ devices

Y layer 7:

-*- Networking support  ---> 
     Networking options  ---> 
     [*] Network packet filtering framework (Netfilter)  ---> 
       Core Netfilter Configuration  ---> 
        Netfilter connection tracking support 
        "layer7" match support

Antes de compilar el kernel descargamos el source de iptables, ya que la versión incluida en debian squeeze no soporta los parches de imq, descargamos la versión 1.4.10 (squeeze trae 1.4.8)

cd /usr/src
wget -c ftp://ftp.netfilter.org/pub/iptables/iptables-1.4.10.tar.bz2
tar -xvf iptables-1.4.10.tar.bz2
ln -s  iptables-1.4.10 iptables

Parcheamos iptables para soportar imq

cd /usr/src/iptables
wget http://www.linuximq.net/patches/iptables-1.4.10-imq.patch
patch -p1 < iptables-1.4.10-imq.patch

Ahora descargamos el parche para layer 7 en iptables

wget http://downloads.sourceforge.net/project/l7-filter/l7-filter%20kernel%20version/2.22/netfilter-layer7-v2.22.tar.gz
tar -zxvf netfilter-layer7-v2.22.tar.gz

Ahora a copiar las extensiones

cp /tmp/netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/libxt_layer7.* /usr/src/iptables/extensions/

Y copiar el archivo parcheado del kernel para iptables

cp /usr/src/linux/include/linux/netfilter/xt_layer7.h /usr/src/iptables/extensions/

Ahora con las fuentes ya preparadas podemos compilar, el kernel se compila primero:

cd /usr/src/linux
fakeroot time make-kpkg --initrd --append_to_version=-layer7-imq-amd64 linux-image

Una ves terminado instalamos con dpkg los paquetes creados por make-kpkg

cd /usr/src
dpkg -i *.deb  #asumiendo que solo los paquetes del kernel se encuentren ahi

Ahora compilamos iptables:

cd /usr/src/iptables
./configure --with-ksource=/usr/src/linux --prefix=/usr --with-xtlibdir=/lib/xtables --libdir=/lib --enable-libipq --enable-devel
make
checkinstall

Descargamos los protocolos para layer 7

cd /tmp
wget http://ufpr.dl.sourceforge.net/sourceforge/l7-filter/l7-protocols-2009-05-28.tar.gz
tar -zxvf l7-protocols-2009-05-28.tar.gz 
mv l7-protocols-2009-05-28 /etc/l7-protocols

Ahora instalamos las extensiones xtables de squeeze

apt-get install xtables-addons-common

Luego de todo esto reiniciamos la computadora y probamos que los módulos estén instalados y funcionando:

modprobe imq
iptables  -m layer7 --help
iptables -m ipp2p --help

B-Stack Lamp e instalación de mastershaper

Ahora que todo ha funcionado es tiempo de instalar mastershaper, primero instalamos el stack LAMP.

aptitude install php5 php5-mysql libapache2-mod-php5 apache2 mysql-server mysql-client phpmyadmin

Seguimos los pasos de la instalación e introducimos la contraseña del root de mysql, ahora descargamos mastershaper propiamente dicho:

cd /tmp
wget -c http://www.mastershaper.org/files/mastershaper_0.44.tar.bz2
mkdir shaper
cd shaper
tar -xvf ../mastershaper_0.44.tar.bz2

Creamos una base de datos para mastershaper y un usuario en mysql, con phpmyadmin o con comando:

CREATE DATABASE shaper_db;
USE shaper_db;
GRANT ALL ON shaper_db.* to shaperuser@localhost IDENTIFIED BY 'inserte contraseña aqui';

Instalar mastershaper en el document root de apache (normalmente /var/www)

cd /tmp
cp -r shaper /var/www/

Ahora podemos acceder desde el navegador al shaper con http://ip-del-shaper/shaper o http://localhost/shaper si entramos desde la misma pc.

Instalamos los módulos ip de php-pear para que mastershaper pueda manejar los comandos de red.

pear install DB Net_IPv4

Descargamos jpgraph para obtener estadísticas de red (en el menu monitoring de mastershaper)

cd /var/www/shaper/
wget -c http://jpgraph.net/download/download.php?p=5
mv download.php?p=5 jpgraph.tar.gz
tar -xvf jpgraph.tar.gz
mv jpgraph-version/ jpgraph/

Descargamos también phplayersmenu de la misma forma:

cd /var/www/shaper/
wget -c  http://downloads.sourceforge.net/project/phplayersmenu/phplayersmenu-devel/3.2.0-rc/phplayersmenu-3.2.0-rc.tar.gz
tar -xvf phplayersmenu-3.2.0-rc.tar.gz
mv phplayersmenu-3.2.0-rc/ phplayersmenu/

C- Configuración

Ingresamos a http://localhost/shaper (o a remotamente en http://dirección-del-shaper/shaper) y llenamos los campos de configuración, agrego el screenshot de la configuración para que se den una idea:

Esta es la ventana de configuración central, denle click a la imagen por que el blog aun no soporta telescopio
Esta es la ventana de configuración central, denle click a la imagen por que el blog aun no soporta telescopio

Si queremos soporte para IMQ entonces debemos generar las interfaces necesarias para que iptables pueda modificar el tráfico.

ip link set imq0 up
ip link set imq1 up

iptables -t mangle -I PREROUTING -i ${EXT_DEV} -j IMQ --todev 0
iptables -t mangle -I POSTROUTING -o ${EXT_DEV} -j IMQ --todev 1

EXT_DEV es la interfás donde se quiere manipular el tráfico (salida solamente, si se quiere manipular solo ancho de banda o protocolos no es necesario IMQ)

Como mastershaper necesita poder utilizar iptables y tc (comandos solo para root) hay que darle poderes de sudo, pero solo para procesos de shaping y evitar que php pueda acceder a root, en debian y ubuntu existe el comando “visudo” para editar /etc/sudoers (en cualquier otro GNU/Linux se permite editar directamente) y agregamos lo siguiente:

www-data ALL= NOPASSWD: /var/www/shaper/shaper_loader.sh

Asumiendo que el shaper corra con el usuario www-data (lo normal en debian) y que la carpeta del shaper este en /var/www.

Luego deben revisar si no pueden descargar desde el navegador el archivo “config.dat” (http://server/shaper/config.dat), en el .tar del shaper debería venir un .htaccess para evitar su lectura y descarga, si apache no reconoce el .htaccess en esa carpeta hay que cambiar la directiva “AllowOverride” en /etc/apache2/sites-available/default.

D – Vlans

Este paso es OPCIONAL para gente que no tenga vlans configuradas en su red, en mi caso necesito hacer shaping en las vlans 2 y 3, como verán mas adelante mastershaper no fue diseñado para ver vlans, solo interfaces físicas y lógicas por lo cual tuve que montar 2 carpetas shaper (localhost/shaper y localhost/shaper2) para poder hacer cambios en ambas, ustedes pueden solventar este problema como mejor les parece (virtualización por ejemplo).
La vlan3 esta deshabilitada en la muestra de cisco y no la agregue en el ejemplo siguiente

Instalación de vlan en GNU/Linux

Como mi shaper se usará en modo bridge (transparente) necesitaremos bridge utils, y el paquete “vlan” para poder usar vlans.

aptitude install vlan bridge-utils

Luego modificamos de esta manera nuestro /etc/network/interfaces

ADVERTENCIA – Si estás configurando el shaper desde un equipo remoto puede que pierdas acceso al shaper, revisa que tengas acceso físico al equipo para realizar este paso –

vi /etc/network/interfaces
# Fisica PCI
auto eth0
iface eth0 inet manual

# Fisica integrada
auto eth1
iface eth1 inet manual

# VLAN2
auto eth0.2
iface eth0.2 inet manual

auto eth1.2
iface eth1.2 inet manual

#Bridge VLAN2
auto br0
iface br0 inet static
        bridge_ports eth0.2 eth1.2
        bridge_stp      off
        bridge_maxwait  0
        bridge_fd       0

        address 192.168.30.3
        broadcast 192.168.30.255
        netmask   255.255.255.0
        gateway 192.168.30.1

Pasare a explicarles este desastre, primero pasamos las interfaces físicas (las tarjetas de red eth0 y eth1) a modo manual sin IP, luego configuramos subinterfaces para cada una en la vlan correspondiente (eth”interfás”.”vlan”) y luego las unimos en una interfáz puente con ip para acceso remoto (los equipos conectados físicamente por el no lo verán como un salto de red).

Una ves se tenga todo listo pasamos a iniciar esta configuración, asegurense de tener una forma de revertirlo en caso de que no funcione por cualquier razón.

ifdown eth0 && ifdown eth1 && ifup br0

Si pudieron pasar por esto y pudieron acceder remotamente a la ip configurada en la interfáz puente entonces la configuración es correcta.

E-Habilitando shaper

Regresamos a la ventana del navegador (ya con la ip de la interfáz puente) y nos vamos al menu de la izquierda, en “settings->Options” se nos preguntara:

  • Ancho de banda de bajada y subida (este es el ancho de banda total disponible) en kbit/s
  • Interfaces de entrada (en mi caso eth0.2) y de salida (eth1.2)
  • Activar IMQ (solo si hemos configurado IMQ y si vamos a hacer shaping de trafico entrante), no necesario si solo se limitara ancho de banda.
  • ACK packets: prioridad para paquetes ACK (respuesta) y otros paquetes pequeños normalmente utilizados por los protocolos de transporte como señalizadores o respuesta de peticiones
  • Disciplina de cola: este es un poco complicado pero lo pondré asi: la mayoría de las personas usarán HTB (Hierarchical Token Bucket) que trabaja dandole prioridad (definida en la configuración de “Service Levels” del shaper) y distintos valores de ancho de banda dinamico dependiendo del estado de saturación del enlace. Si tenemos un servidor que requiere tráfico en tiempo real, como por ejemplo streaming de video/audio, VoIP/Videoconferencia es mejor utilizar HFSC (Hierarchical Fair Service Curve) que define prioridades de servicio en tiempo real, y CBQ (Class Based queueing) que es parecido a HTB pero con limites duros sin variación en los anchos de banda, es como el abuelo del qos en GNU/Linux.
  • Filtro de tráfico, esto es dependiendo de que quieren hacer, si solo se quiere limitar ancho de banda o hacer qos basado en IP, tc-filter bastara (gasta menos recursos), si necesitan hacer qos mas avanzado basado en protocolos o en mac entonces necesitarán Iptables.
  • Modo: El shaper puede ser un router (actuar como gateway) o bridge (transparente sin ser un salto de red), en mi caso lo hice bridge ya que el routing lo estamos haciendo en el equipo cisco y no queremos que sea accesible fuera de la vlan.
  • Autenticación: para manejar usuarios y contraseñas y añadir seguridad al shaper, esto es necesario para que si algún usuario logra acceder al shaper no pueda cambiar el ancho de banda o jugar con la configuración Advertencia Debes crear cuentas de usuario ANTES de activar la autenticación.

Luego de todas estas desiciones guardamos los cambios y comenzamos a manejar nuestro ancho de banda.

La documentación sobre mastershaper esta en este sitio:

Sitio mastershaper
Howtos y ejemplos para usar mastershaper

Y como cuando escribí esto el sitio estaba caido subo mi copia de la documentación:
MasterShaper_documentation

Espero que les haya servido, este proyecto me llevó mucho tiempo pero ya está en producción, puede que iptables no funcione como debería, pero los parches funcionan aún, wheezy trae el kernel 3.2 el cual ya no es soportado por mastershaper 0.44, se está desarrollando la versión 0.66 pero no he logrado conseguirla (no dan links de git o tar para descargar) esta nueva implementación funciona en kernel 3.x y sin necesidad de parchear iptables (segun los comentarios del foro) así que cuando logre conseguir una nueva versión o un sustituto para mastershaper (claro también libre) escribiré otro howto.

Fuentes

mensaje 2741 foro de mastershaper en inglés
Documentación de mastershaper y los ejemplos del sitio (links al final de la sección E)

Como instalar la tarjeta wifi 802.11n DLink dwa-525 en GNU/Debian

Esta es una de esas piezas de hardware que son fáciles de encontrar pero difíciles de hacer funcionar, ya sea por que el chipset es muy nuevo o por que los drivers (de cualquier sistema que no sea windows) están perdidos en el espacio o no existen, afortunadamente logre encontrar como hacerlo funcionar:

El chipset debe dar esta respuesta en lspci

03:01.0 Network controller: RaLink Device 5360

Comencé buscando por el nombre del modelo de tarjeta, pero el que nos interesa es el chipset, ya que DLink parece estar vendiendo esta misma tarjeta con diferentes chipset (y por ende requieren drivers diferentes), primero parecía que este tutorial funcionaría con mi tarjeta:

https://steveswinsburg.wordpress.com/2011/03/12/how-to-install-a-d-link-dwa-525-wireless-network-card-in-ubuntu-10-04/

Y luego de seguir paso a paso todo lo que ahí decía no funciono ¬¬#, luego intente con otro de la comunidad ubuntu:

http://ubuntuforums.org/showthread.php?t=1559576

El mismo procedimiento, pero con otro driver… igual no funciono, luego me di cuenta que en todas esas publicaciones (y los que las copiaban) solo mencionaban los chipset  ralink 3060 (ese si funciona con los links anteriores) que aparece en lspci como:

Network Controller: Ralink Device 3060 0

Es completamente diferente al 5360 que yo tengo, entonces comence a buscar hasta en otros idiomas con el chipset como mi unica pista y llegue a este lugar también de la comunidad ubuntu (ESTA EN RUSO):

http://forum.ubuntu.ru/index.php?PHPSESSID=s17iic366u1v38f2cl4h60bua1&topic=190612.15

y gracias al traductor de google encontre mi respuesta:

-Primero necesitamos ESTE firmware de ralink

-Descargar la fuente de driver para compilar desde AQUI 

EDIT: Ya no se sigue este paso

-Extraer el archivo comprimido

-Editar con gedit, kate, vim o el editor de texto que tengan a la mano el siguiente archivo:

carpetaextraida/os/linux/config.mk

donde “carpetaextraida” es el directorio que se creó al extraer el driver, luego debemos buscar estas líneas:

HAS_WPA_SUPPLICANT=n 
y 
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT = n

Una ves encontradas cambiamos la “n” que esta después del “=” por “y” con esto le decimos al driver que habilite el soporte para WPA

Edit: paso nuevo:

Ahora abrimos el archivo

carpetaextraida/os/linux/pci_main_dev.c

Y buscamos el siguiente texto, donde agregamos la línea que dejo en rojo:

#ifdef RT5390
	{PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC5390_PCIe_DEVICE_ID)},
	{PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC539F_PCIe_DEVICE_ID)},
	{PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC5392_PCIe_DEVICE_ID)},
	{PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC5362_PCI_DEVICE_ID)},
        {PCI_DEVICE(NIC_PCI_VENDOR_ID, NIC5360_PCI_DEVICE_ID)},
#endif /* RT5390 */

-Ahora debemos compilarlo, necesitamos los headers de nuestro kernel y las herramientas para compilar, las instalamos asi:

aptitude install build-essential linux-headers-$(uname -r)

Ahora si a construir, entramos en la “carpetaextraida” y como root ejecutamos:

make && make install

Esperamos a que compile sin errores y se instale (es desinstalable con make uninstall desde ese mismo directorio), les recuerdo que como es una instalación manual en el caso que el kernel se actualice o cambien el kenel  deberán compilar de nuevo.

Ahora a comenzar la configuración para que no de problemas primero extraemos el firmware que descargamos al principio, dentro de el nos aparecerá el archivo rt2860.bin el cual debemos copiar (como root) a /lib/firmware/.

Luego debemos agregar un driver a blacklist,  ya que genera conflicto con el que acabamos de construir:

echo "blacklist rt2800pci" >> /etc/modprobe.d/blacklist

(si tienen kernel 3 de backports entonces blacklist ahora se llama blacklist.conf)
yo en modo paranoico agregue de la misma manera estos también:
blacklist rt2x00lib
blacklist rt2x00pci
blacklist rt2800lib

Ahora habilitemos el modulo del driver:

modprobe  rt5390sta

Y lo agregamos a /etc/modules para que se cargue al inicio

echo "rt5390sta" >> /etc/modules

Y ahora un truco que nos permitirá usar ese driver con nuestro dispositivo:

Abrimos como root el archivo /etc/rc.local y antes de la línea que dice “exit 0” agregamos lo siguiente:

echo "1814 5360" | tee /sys/bus/pci/drivers/rt2860/new_id

Que forzará al driver a funcionar con el chipset 5360 que es el que posee nuestra tarjeta, luego solo guardamos todo y reiniciamos la maquina, network manager, wicd o ifconfig ya deben mostrarnos el nuevo dispositivo “ra0” y podemos entonces conectarnos y disfrutar de nuestro wifi.

Espero que funcione para ustedes de la misma manera que ha funcionado para mi.

Fuente ultimo edit: Ubuntu forums post 2008849 gracias a un comentario de Medusetfil

El dilema de epubgratis.me difundamos el conocimiento

Saludos a la comunidad, en este momento que revivo el blog para mantener viva una fuente de conocimiento, antes existía una web dedicada a la digitalización y difusión de libros electrónicos llamada epubgratis.me (no vayan a esa página) cuya colección fue confeccionada por una comunidad de editores con grandes esfuerzos, ahora resulta que la página fue comprada por quien sabe que persona quien se ha apoderado del trabajo de esta gente y ahora para descargar ebooks a tu computadora te obliga a bajarte un .exe que varios usuarios han notado como un SPYWARE, al darse cuenta de esto la comunidad muy preocupada comenzó a criticar las medidas y a exigir que se cambiara la forma de descarga, el sitio respondió deshabilitando el foro y publicando un comentario en el que describen el cambio en la forma de descarga como una “mejora con algunos problemas técnicos” y que los foros se cerraron debido a que “un bot había ingresado llenando el foro con críticas y difamaciones”, la comunidad logró publicar la colección de ebooks en redes p2p (bittorrent) y hago el llamado para quien quiera ayudar a preservar esta colección mientras la comunidad de editores arma un proyecto nuevo, necesitas un cliente bittorrent (utorrent, ktorrent, vuze, transmission, deluge, etc) y aqui les dejo el enlace:

http://cuelgame.net/story/actualizacion-biblioteca-epg-ver-3-2-zip

Si desean disfrutar ustedes mismos de la colección descarguen el software Calibre para poder organizar, leer y convertir de formato todos estos libros.

Fuente: https://rosmar71.wordpress.com/2012/10/01/epubgratis-me-ha-muerto/