Mar 24

Mario Benedetti: la gente que me gusta

Reading time: 2 – 2 minutes

Gràcies a l’Emilio Duró, una poesia que m’encanta rellegir molt sovint:

LA GENTE QUE ME GUSTA

Me gusta la gente que vibra, que no hay que empujarla, que no hay que decirle que haga las cosas, sino que sabe lo que hay que hacer y que lo hace en menos tiempo de lo esperado.

Me gusta la gente con capacidad para medir las consecuencias de sus acciones, la gente que no deja las soluciones al azar.

Me gusta la gente estricta con su gente y consigo misma, pero que no pierda de vista que somos humanos y nos podemos equivocar.

Me gusta la gente que piensa que el trabajo en equipo, entre amigos, produce más que los caóticos esfuerzos individuales.

Me gusta la gente que sabe la importancia de la alegría.

Me gusta la gente sincera y franca, capaz de oponerse con argumentos serenos y razonables.

Me gusta la gente de criterio, la que no se avergüenza de reconocer que no sabe algo o que se equivocó.

Me gusta la gente que al aceptar sus errores, se esfuerza genuinamente por no volver a cometerlos.

Me gusta la gente capaz de criticarme constructivamente y de frente; a éstos los llamo mis amigos.

Me gusta la gente fiel y persistente, que nofallece cuando de alcanzar objetivos e ideas se trata.

Me gusta la gente que trabaja por resultados. Con gente como esa, me comprometo a lo que sea, ya que con haber tenido esa gente a mi lado me doy por bien retribuido.

 

Mario Benedetti

Sep 17

Autenticació PAM/OTP via Apache

Reading time: 4 – 6 minutes

L’autenticació d’Apache coneguda com a AuthBasic malgrat la seva inseguretat és una de les més usades, ja que ens permet de forma senzilla i ràpida protegir un directori o simplement un fitxer. La protecció d’aquest tipus d’autenticació és molt relativa perquè el password viatge en clar a través de la xarxa, a més, al viatjar a les capçaleres HTTP o fins hi tot en la propia URL de la pàgina pot arribar a ser indexat per un navegador.

Seguint la línia dels anteriors articles:

Ara el que toca és afegir a l’Apache aquest tipus d’autenticació de forma que podem donar les credencials d’accés a un directori/fitxer a algú però aquestes caducaran al cap del temps (uns 3 minuts) i els buscadors o d’altres agents amb més mala idea no podran accedir al recurs passat aquest temps. Com sempre la idea és la d’aprofitar-se del PAM/OTP.

En primera instància per aconseguir això ho he intentat amb el mòdul libapache2-mod-auth-pam però no n’he tret l’entrellat i he estat incapaç de completar la configuració. Així doncs, el que he fet és provar amb el mòdul libapache2-mod-authnz-external ambdós disponibles en l’Ubuntu 8.04 (Hardy). Aquest segon mòdul l’he combinat amb el checkpassword-pam.

Així doncs, la idea és ben senzilla configurem l’Apache perquè usi el libapache2-mod-authnz-external, en escència el que fa aquest mòdul és recolzar-se en agents externs per fer l’autenticació. Aquest agent extern és el checkpassword-pam que comentava i que com diu el seu nom el que fa és validar el password contra PAM, així doncs, malgrat no és una solució massa eficient a nivell de recursos ja que ha de carregar un segon programa per validar cada usuari considero que és una solució suficienment bona pel meu cas.

La configuració

Instal·lem el mòdul d’apache i l’activem:

apt-get install libapache2-mod-authnz-external
a2enmod authnz_external
/etc/init.d/apache2 restart

Instal·lació del checkpassword-pam

cd /var/tmp
wget "http://downloads.sourceforge.net/project/checkpasswd-pam/checkpasswd-pam/0.99/checkpassword-pam-0.99.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fcheckpasswd-pam%2F&ts=1284649515&use_mirror=ignum"
tar xvfz checkpassword-pam-0.99.tar.gz
cd checkpassword-pam-0.99
./configure
make
mkdir -p /opt/checkpassword-pam
cp checkpassword-pam /opt/checkpassword-pam

Fitxer de configuració pel servei apache2 del PAM, /etc/pam.d/apache2:

auth    sufficient      pam_script.so onerr=fail dir=/etc/pam-script.d/
account  required       pam_script.so onerr=fail dir=/etc/pam-script.d/

Si us hi fixeu aquest fitxer és igual al que vaig usar per fer l’autenticació en l’article de PHP i PAM/OTP.

Ara anem a un dels fitxers de configuració d’Apache per un virtualhost i afegim el següent codi per protegir un directori servit per aquest virtualhost:

<Directory /var/www/virtualhost/directori_a_protegir>
  AuthType Basic
  AuthName "Restricted area for My Server"
  require user nom_usuari
  AuthBasicProvider external
  AuthExternal autenticador
</Directory>
AddExternalAuth autenticador "/opt/checkpassword-pam/checkpassword-pam -H --noenv -s php -- /bin/true"
SetExternalAuthMethod autenticador checkpassword

Coses importants a destacar en aquest configuració, fixeu-vos que em cal afegir ‘require user nom_usuari’, això és perquè no disposo de cap fitxer d’usuaris on Apache pugui validar quins són els meus usuaris vàlids i la directiva ‘require valid-users’ no funcionaria, així doncs, hem d’especificar quins usuaris podran fer login a través d’aquesta comanda, o bé, afegir una altre directiva que li permiti a Apache trobar un llistat d’usuaris en algún lloc.

Un altre detall important són els paràmetres que he d’usar al checkpasswords-pam perquè aquest funcioni bé:

  • -H no intenta fer un ‘chdir-home’ ja que potser l’usuari no disposa d’aquest ‘home directory’.
  • –noenv el checkpassword-pam busca certes variables d’entorn per funcionar, amb aquest paràmetre no les busca i agafa el que li cal del stdin.
  • -s apache2 especifica el nom del servei que buscarà dins de /etc/pam.d/apache2
  • — /bin/true simplement serveix perquè el checkpassword-pam no faci res després de validar un usuari, ja que podriem executar algún programa si volguessim després de fer la validació.

Referències

Jul 13

CouchDB: fixar el límit màxim de revisions per document

Reading time: < 1 minute couchdb logo
Per defecte i fins que no es fa una compactació de la base de dades CouchDB permet fins a 1000 revisions d’un document, cosa que sovint no acostuma a ser necessari. Així doncs, si volem canviar aquesta paràmetre finalment a la versió 0.11 ja el podem canviar.

Set _revs_limit of a particular database:

curl -X PUT -d "1500" http://localhost:5984/test/_revs_limit
#=> {"ok":true}

Read _revs_limit of a particular database:

curl -X GET http://localhost:5984/test/_revs_limit
#=> 1500

informació original de: accessing database specific options.

Agraiments: gràcies @marcos 😉

Sep 06

Viatge a Madeira d’aquest agost

Reading time: 1 – 2 minutes

Aquest agost Estefania i jo ens hem escapat 7 dies a l’illa de Madeira per descansar i fer una mica el turista. Fa dies que estem remanant per mostar-vos un petit resum del que varem estar fent per l’illa en format web i finalment tenim una versió presentable del que hem escrit.

Per cert, pels més geeks comentar que les fotografies i la informació del GPS les he tret del programa footprints que vaig estrenar durant el viatge amb el nou mòbil: htc hero. Mòbil del qual encara ús dec una review, de fet, per casa hi tot un seguit de nous aparells que hem anat comprant els últims 2 o 3 mesos i que encara no he comentat al blog. Així doncs, segurament aquesta setmana en faré una review conjunta.

Aug 07

Aire de Barcelona: banys àrabs

Reading time: 3 – 5 minutes

Per l’aniversari d’Estefania i el meu ens van regalar unes sessions als banys àrabas de Barcelona; coneguts com “Aire de Barcelona“. Doncs bé, aquest dimecres a les 22h varem anar a comprovar què tal era l’experiència. Després de fer-nos una passejada tranquila i a bona temperatura des d’Arc de Triomf fins al Parc de la Ciutadella (~10min) varem trobar de forma ràpida i senzilla el lloc.

aire de Barcelona

Cal dir que la decoració de tot el local, des de la porta d’entrada passant per la recepció, els vestuaris i les piscines esta tot cuidadíssim, així doncs m’encanta el gust del decorador que va fer l’ambietació del lloc. A més els treballadors són molt amables i et tracten amb una pau que també relaxa moltíssim.

Pel que fa a les piscines, aquestes estan repartides segons canvis de presió o de temperatura. Així doncs, podem trobar des del típic hidromassatge d’aigua i d’aire passant per una piscina d’aigua salada. Pel que fa a les de temperatura, n’hi ha una a uns 36º, una a uns 45º i dues més a 16 i 18º respectivament. Realment és una passada experimentar les sensacions que et transmet el cos quan rep aquests canvis de temperatura tan bruscos. Obviament, res que envejar a les saunes finlandeses amb una bona dutxa freda després o llençar-se directament sobre la neu.

Parlant de sauna, obviament les instal·lacions també disposen d’una moderníssima sauna a 60º. Un altre detall de qualitat que realment varem apreciar és que hi havia una zona de descans prou amplia i còmode, malgrat no haver-hi cap coixí, on es podia prendre aigua fresca o te amb menta ben calent. Realment un plaer.

Pel que fa als massatges, n’hi ha de dos tipus els tradicionals aplicats sobre l’espatlla i en una camilla o els més exòtics que es fan sobre una pedra calenta i que bàsicament es centren en cap, cames i braços (tot i que cal triar 2 de les 3 opcions). En aquest punt és on no em va acabar d’agradar el circuit, ja que la qualitat del massatge craneofacial+peus que em varen fer va ser molt i molt light, la senyora que me’l va fer semblava que tingués por de cansar-se i tota l’aplicació era tan relaxada que no acabava de tenir aquells corrents que et fa el cervell quan et fan un bon massatge.

A més quan estavem a la piscina d’hidromassatge ens varem fixar que hi havia dos massatgistes que mentre feien massatges estaven xerrant i rient constantment a la zona de camilles. Tot això, és clar, no ajuda a relaxar gens ni mica quan et fan un massatge. A més cal sumar-li el fet que pel meu gust hi havia massa gent compartint les instal·lacions (crec que unes 30 persones), jo diria que més de 15 ja és exagerat ja que l’entorn perd el clima íntim que preten donar la llum tènue i la música relaxant de fons.

Posats a destacar coses negatives només afegiria que l’oli que et posen pel cos al fer-te massatges, malgrat fer una olor boníssima i tenir una textura molt agradable, al entrar en contacte amb l’aigua de les piscines i després d’anar passant gent per l’aigua creava una acumulació de gasos que va acabar deixant-me els ulls ben vermells i adolorits.

Després de tot això sembla que no em vagi agradar la visita als banys, la cosa no és pas així i li recomano a tothom que hi vagi. Això si, cal saber que no vas a rebre un molt bon massatge. Simplement a disfrutar de l’ambient íntim amb la parella i de les sensacions que t’ofereix l’aigua i l’entorn en si mateix.

Jul 03

Ja som tients, aquí teniu l’Abril i la Bruna

Reading time: < 1 minute Demà ja faran una setmaneta i ja les tenim a casa, perdó ja les tenen. No ús confongueu que no són filles nostres. Només arribem al mèrit de tiets "ficticis".  O sigui, que són les filles del Xavi i la Sabina dues preciositats que van neixer el dia 27/6/2009 a Sant Joan de Deu (Barcelona).

L'Abril i la Bruna amb poques hores de vida

De fet, tinc moltes altres fotos que ahir varem intercanviar amb el Xavi, però encara no l’he pogut organitzar i encara menys pujar al servidor d’internet. Així que pels ‘mussols’ que les volgueu veure en foto haureu d’esperar una miqueta.

Feb 14

pfSense: comanda clog

Reading time: 2 – 2 minutes

pfsense logoCom no podia ser d’altre forma el pfSense usa logrotate per guardar els logs. O sigui, que si fem un cat als seus fitxers de logs no estem buscant en tot el registre d’informació sinó només en la última part que encara no s’ha empaquetat sovint la part corresponent al dia actual. Doncs bé la gent de pfSense ha creat una eina en forma de comanda: clog que permet mirar un fitxer de logs i en tots els seus paquets comprimits amb informació de dies anteriors.

A més, una funcionalitat molt habitual en els fitxers de logs sobretot quan estem depurant és usar la comanda “tail -f“. Que ens permet veure en temps real els continguts que es van afegint a un fitxer de log, doncs bé, si decidim tenir aquest fitxer en una consola diversos dies monitoritzant el fitxer que ens interessa com que aquest serà empaquetat pel logrotate el “tail -f” es truncarà. Això es soluciona també amb la nova comanda “clog“, només cal que usem el paràmetre “-f” per monitoritzar el que es va afegint en un fitxer de log. O sigui, “clog -f nom_fitxer.log“.
Si voleu donar un cop d’ull a la plana wiki on ho he trobat: clog.

Aug 24

Hotel Balneario Vilas del Turbón

Reading time: 3 – 4 minutes

Avui he arribat de les mini-vacances per no parlar d’un cap de setmana llarg. De fet, qui no esta content és perquè no vol. La qüestió és que divendres hem vaig agafar el dia de festa i Estefania i jo varem sortir disparats com coets cap al Hotel Balneario Vilas del Turbón. Aquest lloc perdut de la mà de deu a terres d’Osca el varem coneixer no fa ni dues setmanes gràcies a que el Xavi i la Sabina i varen ser amb uns amics. Doncs bé, com a nota li posariem un cinquillo no massa més tot i que si fem una relació qualitat preu potser hauriem de pujar a un sis o un set. Ja que realment per ser temporada alta i per totes les terapies que ens han fet el preu era més que reaonable. Potser on la cosa coixejava una mica és en la qualitat dels mateixo però no pas pels recurso materials o per le instal·lacions en si mateixes sinó per la qualitat del personal. Potser és que jo sóc molt exigent ja que com diu la Neus a mi m’han fet tractaments i massatges a molts països diferents, de fet, té raó i això li he d’agraïr a la Daphne. De fet, un gran secret a crits és que sempre he volgut montar una blog sobre aquesta temàtica, o sigui, massatges balnearis i d’altres similars.

montanya del Turbón

Tornant a Vilas del Turbón, de fet, el nom bé d’un petit poble de 38 habitants en el que trobem el balneari. El lloc sense cap luxe però molt net, pulit i acollidor disposa d’una gastronomia casolana que et deixa sempre satisfet i malgrat ser molt estrictes amb els horaris les taules i les formes de demanar el que menjarem al dia següent no tinc cap queixa del servei al contrari. Pel que fa a les terapies doncs el que ja deia abans, les instal·lacions estan molt bé… lluny dels gran hotels de luxe orientas o americans on he anat algunes vegades però malgrat això tot és molt nou i xulo a la part del Balneari. Llàsitma que el personal no disposava de l’experiència i l’energia necessaris per fer-nos disfrutar del paquet de tractaments que varem contractar. Tot i amb això varem saber treure-li el suc al tema.

Per concloure el resum, comentar com a cosa positiva que el lloc esta molt aïllat i per tant, no hi ha cobertura. Requisit indispensable per una bona desconnexió de món. L’entorn és genial i es troba a 1.500m d’altura aproximadament, o sigui, que de calor ben poca malgrat he vingut ben vermell de prendre el solet. Però això és un luxe que només pots prendret en les hores centrals del dia després fa una fresqueta molt agradable i més si tenim en compte que estem al mes d’agost. Des de Torelavit (el meu poble) el lloc es troba a unes dues hores llargues de camí, així doncs, en bona companyia i bona música no es fa llarg arribar-hi. Perquè ús en feu una idea es troba a l’altura de la Pobla de Segur, però a la zona aragonesa. Si no recordo malament la zona rep el nom del riu més famós que passa per allà: Ribagorzana. Concretament entre Benasque i Benabarre.

Jul 24

Desafio Networking [el problema]

This entry is part 1 of 3 in the series desafio networking

Reading time: 6 – 10 minutes

Escenario

Se dispone de un dispositivo de hardware con un linux embedded al que no se puede acceder ya que el fabricante no lo facilita, se ha intentado acceder pero no hemos sido capaces de acceder ni con nuestros medios ni con los de una importante empresa de electrónica. Creemos que el kernel es un 2.4.X por lo que observamos. El dispositivo tiene una pantalla y su finlidad es mediante un protocolo propietario y un protocolo de transporte de ficheros (FTP) descargar una playlist para reproducir en la pantalla.

A través de red se conecta al servidor del fabricante de donde recoje una playlist y unos contenidos multimedia. Escencialmente usa los puertos:

  • TCP/8889 (protocolo de control del fabricante) va en ‘plain text’ ya le hemos hecho la ingenieria inversa.
  • FTP en modo pasivo

Con el servidor del fabricante descarga el 99% de la veces correctamente y sin problemas. En el fichero adjunto ‘korea-ok.cap’ si lo examinais podreis ver que todo se desarrolla perfectamente. La IP privada que podeis ver es del dispositivo en la LAN y a través de una LMDS se conecta a Korea a la IP: 210.114.220.180, si os fijais el fabricante usa como servidor FTP un ‘Serv-U’ para Windows.

Problema

Se ha implementado el protocolo propietario del fabricante con Python y funciona perfectamente, el problema es al hacer la descarga por FTP. El dispositivo se conecta a nuestro servidor FTP y de forma completamente aleatoria cierra la transmisión sin motivo aparente y se reinicia el dispositivo. Esto siempre pasa mientras se esta haciendo una conexión FTP-control (21/tcp) o FTP-data (puerto aleatorio del ftp pasivo/tcp).

En el fichero ‘cwd-fail.cap’ se puede ver uno de los típicos fallos que tiene el dispositivo al intentar descargar a un servidor FTP local (en este caso un proftpd en una Gentoo). Concrectamente al mandar el comando FTP ‘CWD’ el dispositivo decide cerrar la conexión y no seguir con la descarga. Después de varios intentos se reinicia. Para no perderos con los paquetes he dejado en la captura sólo el socket que tiene el problema.

Para no despistar recordar que esto no tiene porqué pasar en el canal de FTP-control puede pasar también en un FTP-data, puede pasar al 1% de descarga del fichero, al 30%, 50%, 98%… es completamente aleatorio.

Para tener más ejemplos de errores se adjunta el fichero ‘local-fail.cap’ donde se puede ver como se da un error igual al anterior pero ahora en el canal de datos de FTP. Concretamente podeis ver como se cierra el socket en el paquete 916 sin motivo apararente. Comentar que los errores de checksum de TCP no son relevantes ya que son debidos a que la tarjeta de red no estaba como sigue:

# ethtool -k eth0
Offload parameters for eth0:
rx-checksumming: off
tx-checksumming: off
scatter-gather: off
tcp segmentation offload: off
udp fragmentation offload: off
generic segmentation offload: off

En otras pruebas se han hecho con los parametros comentados y el error es el mismo. A pesar de que ya no aparecen las alertas por ‘checksum error’. Si se cree vital tener una captura sin los errores de checksum no hay problema en hacerla. Pero después de meses de pruebas esta claro que esto no es relevante.

Para demostrar que el comportamiento es aleatorio a continuación se adjunta un fichero ‘local-ok.cap’ con la captura de una sesión en el serividor FTP local que ha funcionado perfectamente. Se puede observar en el paquete: 18975 que se descarga bien el contenido de un fichero, concretamente un fichero .mpg, con este fichero finaliza todo el traspaso de datos correctamente.

Hardware y soft probado

Se han hecho infinidad de pruebas y de combinaciones:

5 servidores distintos:

  • 1 debian con kernel 2.6.24.5-grsec-xxxx-grs-ipv4-64 en el proveedor ovh.es (100Mpbs simétricos sin restricciones), servidor FTP proftpd puerto 2090/tcp
  • 1 debian con kernel 2.6.18-5-686 proveedor jazztel sin fw, ni restricción de ningún tipo 100Mbps simétricos contra internet y servidores FTP en el puerto 21 pure-ftpd y en el puerto 2090 proftpd.
  • 1 ubuntu con kernel 2.6.24-16-server proveedor jazztel con fortinet como fw en modo transparente, proftpd en puerto 2090.
  • 1 gentoo con kernel 2.6.25-gentoo-r5 en red local con proftpd en puerto 2090.
  • 1 windows xp virtualizado con vmware workstation 6 sobre gentoo con un servidor FTP Serv-U, la tarjeta de red virtual en modo bridget con la del sistema operativo host.

el comportamiento es el mismo con todas la combinaciones

Intuición de solución

Jugando con los parámetros del kernel de TCP (/proc/sys/net/ipv4) se consiguen hacer cambios de comportamiento en el error. Por ejemplo, se han hecho pruebas con:

tcp_adv_win_sacle = 0,1,2
tcp_allowed_congestion_control = cubic, bic, reno, etc.
tcp_base_mss = 512, 1024, 1500
tcp_dsack = 0,1
tcp_ecn = 0,1
tcp_fack = 0,1
tcp_sack = 0,1
tcp_syncookies = 0,1
tcp_timestamps = 0,1
tcp_workaround_signed_windows = 0,1
tcp_window_scaling = 0,1

infinidad de valores y combinaciones probadas en:

tcp_mem
tcp_moderate_rcvbuf
tcp_mtu_probing
tcp_rmem
tcp_tso_win_divisor
tcp_wmem

También se han hecho pruebas limitando el ancho de banda, y con algunos otros parámetros de kernel que ahora no recuerdo. Se ha probado de opimitzar los servers para rendir al máximo, al mínimo, por defecto… etc.

Lo que se consigue con todo esto es conseguir que algunas veces se haga la descarga, pero no se consigue afianzar patrones de forma feaciente, es decir, a menudo se sigue cerrando la conexión TCP.

FAQ de obviedades

  1. Es obvio que el firmware del dispositivo esta mal hecho, pero esto no se puede tocar.
  2. El dispositivo se puede configurar via una compact flash, donde se guarda un fichero de configuración, un fichero binario compilado para ARM y el contenido multimedia que se va descargando.
  3. Se ha intentado hablar mil veces con el fabricante pero es como hablar con una pared, a parte los técnicos no hablan inglés, sólo coreano. Increible, no?
  4. El problema lo tiene el stack TCP del dispositivo o algún otro elemento similar. Este es el que cierra la conexión!!! no se puede mantener la conexión abierta des del servidor cuando el dispositivo la ha cerrado, lo único que se puede hacer es evitar que el cliente la cierre. El problema es como.
  5. Si! el server del fabricante descarga bien via FTP en el 99% de los casos. Este es el gran probleam, parece tonta la pregunta pero me la han hecho como 20 veces, así que merecia estar aquí.

Ficheros

Los ficheros de los que se habla en este correo de pueden descargar de:

  • http://oriolrius.cat/downloads/korea-ok.cap
  • http://oriolrius.cat/downloads/cwd-fail.cap
  • http://oriolrius.cat/downloads/local-fail.cap
  • http://oriolrius.cat/downloads/local-ok.cap

Desafio

El entorno de laboratorio lo tengo montado en la oficina, esta abierta 24×7 para quedar conmigo para hacer pruebas in-situ. Obviamente responderé todo lo que sea online y orientaré con lo que pueda y más.

Este problema lo arrastro desde hace unos 4 meses y llevo casi 4 dias sin vida, sólo obsesionado buscando la solución pero no hay manera de ver la luz.

No dispongo de muchos recursos, debido a que ya he perdido muchísmo dinero buscando la solución durante todo este tiempo, pero bajo resultados se recompensará tanto como sea posible a la mente privilegiada que consiga dar con la solución.

Ya tengo solución

Después de darle vueltas al tema de momento no contaré las varias soluciones que a dia de hoy ya he enontrado al problemón. Así pue aprovecharé el problema para lanzar el podcast 1×11 describiendo con todo detalle el problema y dando algunas pistas de como llegar a la solución. Quizá a nadie le pique tanto la curiosidad como para seguir la solución con este detalle pero de esta forma mantengo un poco la intriga y si alguien realmente necesita saber la solución sin seguir el culebrón sólo tiene que mandarme un correo privado y se lo contaré. Para hacer boca deciros que la intuición de solución que tenia no era mala.