Ejecutando múltiples instancias de tor

En algunas ocasiones, quizás necesitemos ejecutar varias instancias de tor al mismo tiempo. Sin embargo, quien haya realizado esto, recordará que tor le indica que ya hay una instancia ejecutándose y le indica que debe cerrar todas las instancias existentes para poder ejecutar una nueva.

Esta situación puede ser resuelta si seguimos el siguiente procedimiento:

  • Descargamos tor desde su sitio original
  • Descomprimimos y copiamos cuantas veces sea necesario el directorio resultante; cada uno de los directorios resultantes almacenará una instancia, por lo que si deseamos ejecutar 4 instancias en paralelo deberemos copiar el directorio original 4 veces; yo utilizo algo como:
tar xf tor-browser-linux64-6.5.2_es-ES.tar.xz
mv tor-browser-linux64-6.5.2_es-ES tor
cp -R tor tor1
cp -R tor tor2
cp -R tor tor3
  • Luego de esto, un poco de teoría, cada vez que se ejecuta tor, se requiere tener acceso exclusivo a dos puertos, uno de control y el otro del proxy, dosinstancias de tor no pueden utilizar el mismo puerto al mismo tiempo por lo que necesitamos indicar a cada instancia de tor que se conecte a un puerto diferente
  • Llegados a este punto, tome lápiz y papel (o lo que utilice para escribir) y planifique qué puertos utilizará (control y proxy) para cada  instancia de tor; yo hice un ejercicio como el siguiente
Instancia Puerto Control Puerto Proxy
tor 9050 9051
tor1 9052 9053
tor2 9054 9055
tor3 9056 9057
  1. Esto es, asigné un puerto aletorio y le sume 1, pero teniendo en cuenta cuál es el número para cada instancia ya que de no hacerlo así se podrán tener problemas al iniciar la instancia respectiva
  2. Ahora necesitamos iniciar la instancia número 1, en mi caso se llama tor, a secas y cuando abra el navegador, en la barra de herramientas escribir “about:config” y ubicar la clave “extensions.torlauncher.control_port” y colocar allí el número respectivo, en mi caso, el 9050, modificamos el valor y le damos Ok.
  3. Posteriormente, debemos ubicar la pestaña de configuración y allí en la opción  de “Avanzadas -> Red -> Configuración -> Configuración manual del proxy -> Servidor SOCKS colocaremos el valor que hayamos fijado en nuestra tabla de referencia, en mi caso 9051
  4. Finalizado este paso, cerramos el navegador y procedemos a realizar la edición del archivo de configuración del software el cual podemos ubicar en Browser/TorBrowser/Data/Tor/torrc-defaults en la carpeta de la instancia que estamos modificando y allí al abrir el archivo, con un editor de textos,  y buscamos las siguientes entradas:
    • SocksPort y colocamos el valor 9051, en mi caso
    • ControlPort y colocamos 9050, en mi caso
  5. Guardamos los cambios realizados en el archivo y cerramos la edición del mismo
  6. Listo! ya nuestra instancia de tor está preparada para ejecutarse, sólo nos queda repetir los pasos 2, 3, 4 y 5 por cada instancia que hayamos copiado
  7. Luego de que finalice todas las ediciones, puede ejecutar cada instancia de tor sin ningún problema
Ejecución de varias instancias de tor al mismo tiempo

Espero les sea útil esta ayuda

NOTA

Es MUY importante que tome en cuenta que cada instancia consume abundante memoria  y que de tener muchas instancias andando puede hacer que su equipo empiece a presentar problemas de rendimiento, en mi caso, tengo una máquina virtual de 1 Gb y con 3 instancias funcionando al mismo tiempo y  un terminal abierto consume casi el 95% de la memoria RAM , mientras que el consumo de CPU no llega al 10%

Prestashop, página no encontrada

Si vas a mover tu instalación de prestashop hacia un nuevo sitio y estás usando varios lengiajes, está pendiente porque, algunas veces, puede aparecer un error de “Página no encontrada” ya que el sistema interpreta “en” y “es” (en caso de que uses inglés y español) como carpetas y no como parte del nombre.

Una sencilla solución es remover el archivo .htaccess y luego ir a la sección “Preferences -> Seo Urls”y allí desactivar y guardar la opción enlaces amigables y luego, volver a activar dichas opciones. Esto obliga a regenerar el archivo .htaccess.

Disfruta la  ayuda!

nginx detrás de proxy e ip real

Hace poco, en uno de los proyectos que estamos trabajando, nos encontramos con que los servidores usaban apache. Luego de examinar una cantidad de variables, tomamos la decisión de usar nginx. Sin embargo, luego de que finalizamos la configuración, nos dimos cuenta de que en los logs no aparecía la ip real de los visitantes sino una única ip; Al preguntar al proveedor nos informó que estábamos detrás de un proxy.

Esta situación nos obligó a revisar la configuración de nginx de forma tal de que pudiésemos obtener la ip real del visitante sin que el proveedor, bien conocido en Venezuela por su mal disposición a cambios que les haga salir de su “zona de confort”, tuviese que hacer ningún cambio.

Para ello, colocamos 3 directivas extras en el archivo de configuración del vhost respectivo (archivo /etc/nginx/sites-available/mi_vhost) en la sección server, las cuales son:

    server {
           set_real_ip_from IP_DEL_PROXY;
           real_ip_header X-Real-IP;
           real_ip_recursive on;
           bla, bla, bla
           }

Luego del cambio, reiniciamos el servicio:
     service nginx stop     service nginx start
Antes de realizar este cambio, nuestro log se veía así:
10.10.25.xx – – [22/Nov/2016:20:25:05 -0400] “GET / HTTP/1.0” 200 3573 “-” “Mozilla/5.0 (Windows NT 6.1; rv:50.0) Gecko/20100101 Firefox/50.0”
10.70.25.xx – – [22/Nov/2016:20:25:07 -0400] “GET /xpizarron.png.pagespeed.ic.C7Lq_VUyAW.jpg HTTP/1.0” 200 58211 “http://BLABLABLA/” “Mozilla/5.0 (Windows NT 6.1; rv:50.0) Gecko/20100101 Firefox/50.0”
Luego de realizarlo:
66.249.XX.XX – – [22/Nov/2016:20:38:15 -0400] “GET /xpizarron.png.pagespeed.ic.Qv832abBVy.webp HTTP/1.0” 200 29822 “http://BLABLABLABLA/” “Mozilla/5.0 (Linux; Android 4.2.2; V769M Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.83 Mobile Safari/537.36”
66.249.XX.XX – – [22/Nov/2016:20:38:17 -0400] “GET /favicon.ico HTTP/1.0” 200 29942 “http://BLABLABLABLA/” “Mozilla/5.0 (Linux; Android 4.2.2; V769M Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.83 Mobile Safari/537.36”
Espero les sea útil esta ayuda.

Aplicaciones en php5 sin servidor web externo

Debe haber una forma mediante la cual hacer funcionar una aplicación en php sea más expedita que el procedimiento de instalar un servidor web (cualquiera que sea) junto con las dependencias necesarias para php y configuración para que permita el funcionamiento de la app, esta fue la pregunta que me hizo este escribir este post.

Revisando la documentación de php conseguí que php5 tiene integrado su propio servidor web, a partir de la versión 5.4 [1], el cual permite hacer funcionar, “rápidamente”, una aplicación web sin mayores complicaciones; en Debian, el procedimiento pasa por instalar php5 [2], cambiarse hacia el directorio donde está la aplicación que deseamos hacer funcionar y ejecutar:

root@snoopy:/home/hector/Documentos/wiki# php5 -S 127.0.0.1:8000

Donde:

  • php5 ejecutable de php5
  • -S que indica cual es la ip local donde estará funcionando el servidor, seguido de dos puntos indicando el puerto

Luego de esto, sólo es cuestión de abrir un navegador y visitar la dirección de 127.0.0.1 (localhost) en el puerto 8000

Es importante recalcar que este es un modo para desarrollo y no está pensado para producción; para esta función, utilicen servidores pensados para tal fin como apache2, lighttpd, nginx u otro.

Consola servidor php

Espero les sea útil esta ayuda

[1] http://php.net/manual/ro/features.commandline.webserver.php

[2] Procedimiento que instala las dependencias necesarias, a saber:  apache2{a} apache2-bin{a} apache2-data{a} apache2-utils{a}   libapache2-mod-php5{a} libapr1{a} libaprutil1{a} libaprutil1-dbd-sqlite3{a}  libaprutil1-ldap{a} libonig2{a} libqdbm14{a} php5 php5-cli{a} php5-json{a}   php5-readline{a} ssl-cert{a}

Paquete vhistory en español para latex

Latex es una de las herramientas más poderosas que existen para la generación de documentación, así mismo, la cantidad de paquetes adicionales que pueden ser agregados con simples comandos aumentan su flexibilidad para poder realizar casi que cualquier opción que al usuario se le ocurra.

Hace poco se me presentó una duda mientras elaboraba un manual en latex ¿existe alguna forma de colocar el histórico del documento de forma semiautomatizada? En tanto mi documento no está bajo un sistema de versionado como git o svn, no podía acceder a un git log e incluirlo en el cuerpo del documento usando, por ejemplo, latex-git log [1] o latex-diff [2]. Así mismo, semiuatomatizado para mí es que en tanto soy el único autor conozco qué cambios he introducido en cada versión.

Buscando encontré el paquete vhistory el cual cumplía con todos mis requerimientos excepto uno: los mensajes que colocaba estaban en inglés, francés y alemán lo cual me animó a realizar la traducción del mismo al español, cosa que no me tomó más de 10 minutos entre ubicar el archivo .sty, entender el funcionamiento del mismo y colocar los nuevos bloques de mensaje; como resultado obtuve mi control de histórico en el documento con mensajes en español.

El archivo lo pueden conseguir en https://github.com/e1th0r/translations junto con las instrucciones corespondientes a su uso.

Espero les sea útil como lo fue para mí.

[1] https://www.ctan.org/pkg/latex-git-log?lang=en

[2] http://www.ctan.org/tex-archive/support/latexdiff/

Ip real detrás de proxy web

Una de las acciones más utilizadas en el mundo de la virtualización es la de tener un proxy web que reciba todas las peticiones web que llegan al dom0 y pasarlas a las correspondietes VM que estén bajo su control y que puedan respondar a las respectivas peticiones web.

Sin embargo, la configuración estandar impide que podaos ver, por ejemplo, las direcciones IP reales que llegan a la VM, obteniéndose, en su lugar, la IP del dom0:

  IP CLIENTE          IP DOM0          IP LOG EN VM
==============      ==============     ===============
|190.9.XX.XX | -->  | 192.168.0.1| --> | 192.168.0.1 |
==============      ==============     ===============

Lo anterior podemos verlo en el siguiente trozo de log de un servidor lighttpd que responde peticiones provenientes de un servidor proxy web que funciona en nginx

prueba.mydomain.net.ve 192.168.0.1 – – [05/Apr/2015:08:36:12 -0430] “GET / HTTP/1.0” 404 345 “-” “Mozilla/5.0 (X11; Linux x86_64; rv:37.0) Gecko/20100101 Firefox/37.0”

Lo que deseamos es que el campo de la ip nos muestre la ip real del cliente que hace la conexión y no la ip del dom0.

La solución correcta en lighttpd es a siguiente:

a) Configurar y activar el módulo accesslog de lighttpd; en debian este módulo tiene su archivo de configuración aparte, ubicado en /etc/lighttpd/conf-available:

a-1) Configurándolo: para ello agregar al archivo /etc/lighttpd/conf-available/10-accesslog.conf la siguiente cadena al final del mismo:

accesslog.format = “%{X-Forwarded-For}i %l %u %t “%r” %>s %b “%{Referer}i” “%{User-Agent}i””

a-2) Activar el módulo:

lighty-enable-mod accesslog

b) Configurar el módulo extforward, para ello, en su archivo de configuración de lighttpd coloque:

extforward.forwarder = (
     "192.168.0.1" => "trust"
  )
extforward.headers = ("X-Cluster-Client-Ip")

Nótese que la ip colocada acá es la del dom0 que se conecta con las VM, en nuestro caso es 192.168.0.1

c) Reiniciar lighttpd

Es muy importante el paso a-1 ya que muchos tutoriales no indican que debe colocarse la cadena %{X-Forwarded-For}i lo cual impide conocer la ip real.

Al finalizar esta configuración, el log del lighhtpd configurado en la VM debe mostrar algo como:

190.77.XX.XX – – [05/Apr/2015:08:52:45 -0430] “GET / HTTP/1.0” 200 2682 “-” “Mozilla/5.0 (X11; Linux x86_64; rv:37.0) Gecko/20100101 Firefox/37.0”

Quedando nuestro esquema, entonces, de la iguiente forma:

  IP CLIENTE          IP DOM0           IP LOG EN VM
==============      ==============     ===============
|190.9.XX.XX | -->  | 192.168.0.1| --> | 190.9.XX.XX |
==============      ==============     ===============

Espero disfruten la ayuda 😀

Optimizando recursos en tu computador

En aras de optimizar el uso de un minicomputador que estoy utilizando, he venido realizando una serie de instalaciones controladas obviando muchos de  los paquetes predefinidos que ofrece el instalador de Debian, en este caso.

Al momento de la instalación de Debian, utilicé la versión testing:

hector@helga:/tmp$ cat /etc/debian_version 
jessie/sid
hector@helga:/tmp$

Y como manejador de ventanas e17 junto con lightdm como gestor de inicio de sesión gráfica.

Esta combinación me ha permitido ahorrar recursos en el equipo VIT M1100, computador de procesador  Intel Atom CPU N270 a 1.60GHz con 2 Gb de RAM; por ejemplo, no es infrecuente que en ese equipo tenga funcionando, como ahora, LibreOffice, un navegador web con 10 ventanas abiertas, una consola (utilizo lxterminal) con 3 pestañas abiertas y el rendimiento del mismo sea bastante aceptable

 hector@helga:/tmp$ free
 total used free shared buffers cached
Mem: 2062084 1331972 730112 112288 48432 671848
-/+ buffers/cache: 611692 1450392
Swap: 3906556 0 3906556
hector@helga:/tmp$

Sin embargo, una de las cosas que extrañé fue una herramienta que me permitiese utilizar la webcam, para ello, utilicé la herramienta fswebcam, disponible en los repositorios de Debian y que se utiliza de la siguiente forma:

hector@helga:/tmp$ fswebcam -r 1024x768 --jpeg 200 -D 1 captura.jpg

Donde:

r es la resolución

–jpeg es la resolución de salida del formato a utilizar

-D es el retardo que se utilizará para que luego de activada la cámara se tome la fotografía, en algunos casos, este valor debe ser mayor para permitir que el sensor de la cámara calibre la luz exterior

Acá un ejemplo de la captura realizada.
captura

Espero les sea útil esta entrada.

Latex Beamer Referencias de figura sin números

Generando unas diapositivas en Latex Beamer para el postgrado, me encontré con un detalle bastante extraño: al insertar una figura no se generaba la referencia respectiva:

Referencia sin número

Investigando un poco [1] conseguí que este error se debe a que me faltaba incluir la opción setbeamertemplate{caption}[numbered] en el encabezado del documento y con eso ya podemos tener nuestras figuras perfectamente referenciadas en Latex Beamer:
Referencia con número
Disfruten la ayuda!

[1] http://tex.stackexchange.com/questions/127145/beamer-presentation-figure-has-no-number

 

Script para instalación de SeedDMS

SeedDMS [1] es un potente gestor documental que posee una gran cantidad de funcionalidades para ayudar en el manejo de repositorios documentales, tales indexación, visualización en línea, creación de flujos de trabajo, manejo de versiones, permisología bastante granular y otras.

Sin embargo, quienes lo hayan instalado, quizás recuerden lo tedioso que resulta ese proceso. Por ello, luego de varias pruebas, cree un pequeño script de instalación en bash que permite automati?ar casi toda la instalación de dicho software.

Pueden descargarlo en https://github.com/e1th0r/seeddms-install

Comentarios bienvenidos.

[1] http://www.seeddms.org

Lorem Ipsum

Neque porro quisquam est qui dolorem ipsum quia dolor sit amet consectetur adipisci velit

 Cicerón De finibus bonorum et malorum,  sección 1.10.32–3

El lorem ipsum es un texto bastante conocido cuando se intenta “rellenar” con un texto cualquiera  una publicación: nos interesa ver más como queda que qué contiene en este momento.

Sin embargo, quizás no muchos han averiguado más allá qué significa realmente dicha frase.

Ya Cicerón, unos 100 años antes de la era de Cristo, escribía parte de este texto, con el que empezamos este escrito, en su obra “De finibus bonorum et malorum”, texto que sería rescatado por Richard McClintock en los años 60 del siglo pasado y que la gente de Aldus, los creadores de Page Maker, incorporaron en las plantillas para mostrar su visualización previa.

Hace poco, a propósito de una discusión en twitter [1] necesité verificar ¿cuánto texto plano, aproximadamente, puede contener un archivo de 40 kb?

Lo primero que pensé fue ¿cómo obtengo un archivo de 40 kb de texto? La  respuesta que inmediatamente pensé fue “Lorem ipsum” Sin embargo, ¿cómo genero lorem ipsum para rellenar un archivo de texto de 40 kb? aptitude debe tener una respuesta, así que:

hector@olafo:/tmp$ aptitude search lorem
p   libtext-lorem-perl                                   - random faux Latin text generator
hector@olafo:/tmp$

Me muestra que hay un módulo de perl para generar el texto latino lorem

hector@olafo:/tmp$ aptitude show libtext-lorem-perl
Paquete: libtext-lorem-perl
Nuevo: sí
Estado: no
Instalado automáticamente: no
Versión: 0.3-1
Prioridad: opcional
Sección: perl
Desarrollador: Debian Perl Group <pkg-perl-maintainers@lists.alioth.debian.org>
Arquitectura: all
Tamaño sin comprimir: 81,9 k
Depende de: perl
Descripción: random faux Latin text generator
Often when developing a website or other application it's important to have placeholders for content. Text::Lorem
generates prescribed amounts of fake Latin text.
Página principal: http://search.cpan.org/dist/Text-Lorem/

hector@olafo:/tmp$

Lo instalé y fui a la página de cpan [2] donde se indica como usarlo, así que un simple código de menos de 8 líneas con el siguiente contenido cumplió mi cometido:

hector@olafo:/tmp$ cat generador.pl
#!/usr/bin/env perl
use Text::Lorem;
my $text = Text::Lorem->new();
$paragraphs = $text->paragraphs(190);
print $paragraphs;
hector@olafo:/tmp$

Le paso como argumento 190 que indica el número de párrafos que deseo generándome un archivo cualquiera, en mi caso, lo llamé lorem_ipsum.txt

hector@olafo:/tmp$ ls -l lorem_ipsum.txt
-rw-r--r-- 1 hector hector 39616 mar  2 08:32 lorem_ipsum.txt
hector@olafo:/tmp$

Archivo que contiene menos de 40 kb

Ahora bien, ese archivo tiene las siguientes características:

hector@olafo:/tmp$ cat lorem_ipsum.txt |wc -l
378
hector@olafo:/tmp$

378 líneas

hector@olafo:/tmp$ cat lorem_ipsum.txt |wc -c
39616

hector@olafo:/tmp$

39.616 palabras

Y para saber el número de páginas, lo abro en libreoffice (que reconoce caracteres con tamaño 10) y me indica que son 19 páginas de texto.

Ahora bien, si quieremos ser un poco más “técnicos” podemos usar enscript:

hector@olafo:/tmp$ enscript lorem_ipsum.txt -o lorem_ipsum.ps
[ 12 pages * 1 copy ] copiadas en lorem_ipsum.ps
189 lines were separadas
hector@olafo:/tmp$ ps2pdf lorem_ipsum.ps lorem_ipsum.pdf
hector@olafo:/tmp$ ls -l lorem_ipsum.pdf
-rw-r--r-- 1 hector hector 25942 mar  2 10:21 lorem_ipsum.pdf
hector@olafo:/tmp$

Optimizado y tal el pdf llega a los 25 kb con 12 páginas que poseen un promedio de 66 líneas por cada página

Espero que este ejercicio de “procastinación” les sirva de algo en un momento.

[1] https://twitter.com/e1th0r/status/440101294016307200

[2] http://cpansearch.perl.org/src/ADEOLA/Text-Lorem-0.3/README