Author: Oriol Rius

Postfix: relay contra un altre mailserver

Reading time: 14 – 23 minutes

En aquest article Set Up Postfix For Relaying Emails Through Another Mailserver de HowtoForge s’explica com configurar un Postfix per fer relaying contra un servidor extern. O sigui, perquè el servidor de correu (MTA) envii sempre els correus contra (MTA) un altre servidor de correu via SMTP. Potser el més iteressant és que explica com fer-ho a través d’un SMTP autenticat.

Intentant resumir els passos explicats a l’article comentat.

En l’exemple farem relay contra el sevidor smtp.example.com. A part d’usar l’ordre postconf per fer això, també podem editar el fitxer /etc/postfix/main.cf i afegir-hi les comandes indicades entre cometes.

postconf -e 'relayhost = smtp.example.com'
postconf -e 'smtp_sasl_auth_enable = yes'
postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd'
postconf -e 'smtp_sasl_security_options ='

Guardarem l’usuari i el password a usar contra el servidor smtp.example.com al fitxer /etc/postfix/sasl_passwd. Aquest fitxer ha de ser propietat de l’usuari root i ningú més hi ha de tenir accés (perms: 600). Finalment creem el seu arxiu .db.

echo "smtp.example.com   someuser:howtoforge" > /etc/postfix/sasl_passwd
chown root:root /etc/postfix/sasl_passwd
chmod 600 /etc/postfix/sasl_passwd
postmap /etc/postfix/sasl_passwd

Finalment només cal reiniciar el postfix:

/etc/init.d/postfix restart

Amavisd-new: Re-enviar correus marcats com a spam

Reading time: 3 – 4 minutes

Sempre tinc el mateix problema amb l’amavisd-new intento que els correus marcats com a spam no s’enmagatzemin en un directori sinó que s’enviin al client i mai recordo la comanda, així doncs aquí va aquesta nota:

$spam_quarantine_to = 'correu@exemple.com';

De fet, la gràcia seria automatitzar millor la variable perquè el destinatari fos dinàmic. O sigui, el destinari real que anava a rebre el correu i això encara no he descobert que he de posar.

MonkeyGTD com a ToDo list

Reading time: 4 – 6 minutes

En l’article Com m’organitzo les tasques? (última incorporació MonkeyGTD) ja vaig fer referència al MonkeyGTD es tracta d’una eina programda en html i javascript amb moltíssimes funcions intereactives. Tan és així que a vegades et planteges com carai ho han fet per programar aquestes funcions dins d’un navegador. Així doncs l’experiència d’usuari és boníssima tot i que s’ha de dir que té un pel de retard per culpa del javascript que al interpretar-se dins el navegador no acabada de ser tan ràpid com un programa compilat pel nostre sistema operatiu. Potser amb alguna màquina més potent que el meu Pentium M a 1.2GHz la cosa ni es notaria.

Doncs bé amb una interactivitat molt bona, un acabat impecable i una GUI realment agradable a l’usuari diria que és una de les eines més potents per portar la nostre llista de tasques pendents (ToDo list) al més pur estil GTD. Quan t’acostumes a usar els contextes de les tasques realment et tornes adicte a la potència dels tags associats a la llista. Imagineu-vos coses tan complexes de mantenir, consultar o introduir com per exemple les tasques delegades o que esperes d’algú, o per exemple, tasques que només poden realitzar-se si estem online. Però potser un dels contextes que més m’agrada és el fet de poder saber quines tasques requereixen poca energia per realitzar-se, o sigui, que són una simple gestió. Després de llegir el llibre El Poder del Pleno Compromiso realment vaig aprendre que el difícil no és tenir temps per fer les coses sinó energia. Per exemple, ara mateix he deixat de treballar no pas perquè tinc gana o perquè Daphne ja no trigarà a arribar i encara menys perquè tenia ganes d’escriure això. Sinó simplement, perquè ja no podia pensar més en algoritmes i problemes del codi que estava depurant. Així doncs, m’he dedicat a realitzar aquesta tasca que tenia pendent que no em requereix gaire esforç mental per fer.

monkeygtd.png

Tornant a l’eina del MonkeyGTD es tracta d’una modificació del wiki anomenat TiddlyWiki, bàsicament és d’aquest concepte d’on s’extreu la capacitat de poder treballar amb el MonkeyGTD de forma online o offline. A més de treballar amb una unitat d’informació molt curiosa el Tiddler. Gràcies a això és senzillissim gestionar les actualitzacions del MonkeyGTD, tan és així que ara mateix treballo amb la versió alpha del mateix. A més gràcies al servei de tiddlyspot podeu crear la vostre compte de TiddlyWiki, MonkeyGTD, etc. completament gratuïta i online. Com ja he dit, si voleu, podeu descarregar el fitxer del MonkeyGTD en local i després pujar-lo al tiddlyspot o al vostre servidor només fent un click.

Obviament no és perfecte i té alguns defectes, per exemple: el password, nom d’usuari i opcions de configuració bàsiques es guarden en una cookie així doncs quan fem un upload, si treballem en local, aquestes es perden cada vegada que reiniciem el navegador. Això no passa si sempre treballem online. D’altres cosetes que encara s’han de pulir són la capacitat de publicar per RSS la nostre llista de tasques, ja que surt pràcticament críptica i es fa molt difícil de consultar. Segur que si em poso a pensar trobaria molts altres detallets a pulir, però no oblidem que uso una versió alpha del codi i que malgrat això és súper estable i disposa de mil i una funcionalitats que em tenen enamorat: fa autobackups, els upgrades són molt senzills de fer, no perd les dades al actualitzar, es pot arribar a personalitzar tot moltíssim perquè s’ajusti al màxim a la nostre forma de treballar. Igual que en el cas dels defectes podria seguir i seguir, però diria que la idea queda més que clara.

Potser el més important que teniu que recordar és que si coneixeu el mètode GTD, aquesta eina al correr dintre del navegador i al poder-la usar via internet o des del disc dur, ens obre moltíssim les possibilitats de comptabilitats entre arquitectures i sistemes. Tan és així que jo uso el GTD tan per tasques de feina com personals. Potser un dels grans deures que li trobo seria la possibilitat de poser-se integrar amb el tasks pro, ja sigui via RSS, o via iCal. A més de fer-ho també amb el evolution és clar. Així doncs, la gran assignatura pendent del MonkeyGTD és la integració amb d’altres aplicatius. Però malgrat això ja sa convertit en una peça imprescindible dins del meu sistema d’organització personal.

RouterOS el sistema operatiu de Mikrotik

Reading time: 3 – 5 minutes

mikrotik.png

Ahir vaig poder jugar unes quantes hores (unes 6h) amb el RouterOS el sistema operatiu que usen els dispositius Mikrotik. Fins ara no hi havia pogut jugar gaire estona (durant 1h aproximadament) però ahir realment vaig poder aprofundir una mica més en aquest sistema. A priori sembla força complex o una mica difícil d’usar, sobretot per la sintaxi i que no hi ha un manual que expliqui com treballar amb la CLI. Bàsicament el truc és usar el Winbox que és una utilitat semi-gràfica que simplifica molt les comandes al més pur estil CLI.

El que més m’ha agradat d’aquest sistema operatiu és el seu gran dinamisme però sense caure en la complexitat d’haver de mantenir un sistema operatiu de PC. S’ha de dir però que de senzill no ho és gaire, és a dir calen coneixements tècnics per poder usar-lo, no tant per la sintaxi sinó perquè s’ha de treballar a baix nivell. És a dir, no usa aquest coi d’assistents de configuració que tan em molesten sinó que has de tenir clars els conceptes de xarxes per tal de fer les configuracions del dispositiu. En part recorda al IOS de Cisco, però jo diria que és molt més senzill i orientat a les aplicacions per les que està pensat. A més malgrat no ser lliure les llicències són molt més econòmiques que les de Cisco. També cal dir que malgrat esta pensat per les plaques embedded de Mikrotik també pot funcionar en arquitectures PC i d’altres.

Obviament esta molt orientat a serveis que es donen des d’un AP, ja que els equips de Mikrotik són escencialment equips de WiFi. Però arriben a soportar serveis com ara servidors RADIUS, servidors d’VPN, servidors RAS, proxies, etc. Per no parlar de les eines d’escaneix de freqüències i d’altres eines més enfocades a les xarxes sense fils. Obviament el hardware que suporta és força limitat però s’ha de pensar que esta molt orientat a tasques de routing, firewalling, hotspot gateway, bridging, client access, etc. així doncs no interessa tan el fet de suportar un gran ventall de hardware com el fet de ser molt potent en les funcions comentades.

En l’aspecte referent al WiFi destacar la capacitat de publicar més d’un SSID simultaneament, a més de poder actuar simultaneament com a AP, client o bridge. A més de suportar múltiples sistemes de xifrat: WEP, WPA-PSK, WPA-RADIUS, WPA2, etc. A l’hora de montar un hotspot també és brutal la capacitat que té de simplificar els passos per montar-lo i els sistemes d’autenticació, les formes i llocs on pot tenir o demanar les BBDD d’usuaris, a més d’estar completament preparat per montar un sistema AAA i unir-lo amb un sistema de facturació, per exemple. A més per internet he vist diversos programes orientats a facturar com a WISP o per propietaris de hotspots, com hotels i d’altres similars.

Així doncs estic molt content d’aquest descobrimient, a veure si puc completar les proves de l’escenari que estava provant les quals encara no les he pogut acabar al 100% però ja puc quasi assegurar que funcionaràn amb el que he vist fins ara. Així doncs Jordi el sistema mixte de hotspots de Mikrotiks amb Linksys (amb DD-WRT v23 SP2) ha de funcionar quasi segur quan ho tingui llest ja passaré la configuració per aquí. Si voleu ampliar coneixements sobre les funcions que ofereix el routerOS sobretot no ús perdeu aquest resum (local).

Llibre: Esta noche NO, querida

Reading time: 2 – 3 minutes

estanochenoquerida.jpg

Ahir vaig acabar les últimes de 10 pàgines que feia més d’1 mes que tenia pendents d’acabar del llibre Esta noche NO, querida (ISBN: 8479019204) d’en Sergio Sinay. El llibre me’l va regalar la Daphne cap a principis de desembre, de fet, quan me’l va regalar no vaig acabar d’entendre què en podia treure de bo del llibre. Però un cop el vaig començar vaig veure que realment et convida a reinventar-te com a persona.

No és un llibre que et canviï de dalt a baix, però si que es veritat que et fa plantejar moltíssimes coses i et fa veure a tu mateix des d’una altre òptica. A diferència del que pot semblar el llibre no parla de sexe, tot i que en algún punt pot tocar el tema. Més aviat parla dels valors masculins, des dels homosexuals, als missogens; passant per metrosexuals, afeminitas, feministes, masclistes i qualsevol altre tipus d’home que se’ns pugui passar pel cap. Fixeu-vos el difícil que és definir-nos, etiquetar-nos o encasillar-nos en algún d’aquests rols si és que encaixem en algún.

Bé doncs, si algú de vosaltre no s’ha plantejat mai d’on venen les típiques expresions de l’estil: com un home, això és cosa d’homes, això és perquè sóc un home, o d’altres similars en aquest llibre podrem trobar-hi moltes formes noves d’interpretar aquestes expressions i d’altres. Però no només es queda en el llenguatge verbal, en la moral social o en els prejudicis socials sinó que també aprofundeix en les conductes socials i personals dels homes en la cotidinaitat. Com que m’estic embolicant molt només ús vull convidar a llegir aquest llibre que en un tres i no res tindreu llegit, i que a més, jo diria que ús ajudarà a ser una mica millors com a persones. Ah! i no només és pels homes, ja que les dones també poden aprendre moltíssim del llibre.

Per cert, si algú decideix comprar el llibre que es fixi on ho fa, perquè segons l’enllaç que he posat a la casa del llibre costa 12€ i encanvi l’exemplar que jo tinc esta marcat en la contraportada per 5€. Diria que val la pena mirar-s’ho.

SSH tricks: control usuaris i col·lisions en la fingerprint

Reading time: 31 – 51 minutes

Un parell de tricks per l’SSH un pel servidor (sshd) i l’altre pel client (ssh).

Si volem deixar accedir només a alguns usuaris al nostre sistema via SSH s’ha de posar al fitxer /etc/ssh/sshd_config la comanda AllowUsers. Aquest eginy l’he extret de Restrict SSH per user.

Un exemple:

AllowUsers root oysteivi otheradmin

L’altre enginy és molt útil quan programem scripts que usen per exemple: scp, rsync o d’altre similars. A vegades per molt que usem un sistema d’autenticació per clau pública amb ssh això no és suficient perquè hi pot haver un conflicte den la fingerprint que tenim guardada (o no) del servidor on anem a connectar. Llavors se’ns pregunta si volem guardar aquesta fingerprint sinó la tenim guardada o si assumim que hi ha conflicte entre la fingerprint guardada i la que ens esta enviant el sevidor. Per més detalls sobre el problema podeu consultar aquest article de securityfocus SSH Host Key Protection. A més segur que aquest exemple ajudarà a refrescar la memòria sobre el que em refereixo.

 $ ssh ssh-server.example.com
  The authenticity of host 'ssh-server.example.com (12.18.429.21)' can't be established.
  RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
  Are you sure you want to continue connecting (yes/no)? yes

Per tal de controlar el comportament d’aquest event ho podem fer amb el paràmetre StrictHostKeyChecking=[yes|no|ask], això ho podem posar a /etc/ssh/ssh_config o bé a la línia de comandes a través del flag -o.

Exemple forçant la comprovació:

  $ ssh -o 'StrictHostKeyChecking=yes' ssh-server.example.com
  No RSA host key is known for localhost and you have requested strict checking.
  Host key verification failed.

Exemple preguntant la comprovació:

  $ ssh -o stricthostkeychecking=ask ssh-server.example.com
  The authenticity of host 'ssh-server.example.com (12.18.429.21)' can't be established.
  RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
  Are you sure you want to continue connecting (yes/no)? yes

Unbuntu liveCD en mode persistent

Reading time: 2 – 3 minutes

En l’article d’unionFS ja parlava dels liveCD en mode persistent. La idea és ben senzilla i potent a la vegada, es tracata d’inicar el linux a partir del liveCD en aquest cas, la Ubuntu. Però a direferència d’un procés d’inici normal indicarem al menú inicial que volem fer-ho en mode persistent i guardarem tots els canvis que fem durant la sessió: nous paquets instal·lats, dades d’aplicacions, personalitzacions del sistema, configuracions diverses, etc.

Com fer-ho és ben senzill i només cal disposar d’un pendrive, disc dur o qualsevol altre dispositiu d’enmagatzematge amb suport d’escriptura. Ara només cal:

  • Canviar l’etiqueta el nom del volum per casper-rw:
    e2label /dev/hda1 casper-rw
  • Si la partició té format ext3 s’usarà la partició arrel per enmagatzemar-hi els fitxers persistents.
  • Si tenim un disc dur amb format FAT32, per exemple, podem crear un fitxer a l’arrel amb el nom casper-rw i dins del fitxer hi creem un sistema de fitxers ext3, així:
    • Suposem que tenim la partició FAT32 montada a /media/hda1 i hi creem un sistema de fitxers ext3 de 128M. Cal que ens fixem en que el fitxer que conté el sistema de fitxers s’ha de dir casper-rw:
      dd if=/dev/zero of=/media/hda1/casper-rw bs=1M count=128
  • Quan iniciem el sistema amb el CD o DVD i ens trobem al menú inicial cal premer F6 i als paràmetres del kernel que ens apareixen a la part inferior de la pantalla afegim la paraula persistent al final.
  • Si ens hi fixem quan s’inicia la distribució ja no només llegeix del CD sinó també del pendrive o disc dur.

Com que aquesta guia no és gaire exaustiva, ja que només volia exposar la idea i explicar la funcionalitat, per més informació es pot consultar: LiveCDPersistence del wiki d’ubuntu.

NOTA: és vital que recordeu que al disc dur també li heu de canviar l’etiqueta perquè es monti com a part d’enmagatzematge del mode persistent del liveCD sinó no es montarà. Jo vaig perdré més de 2h mirant codi font per culpa d’un error ortogràfic i de no tenir clar el que posava el manual d’ubuntu.

UnionFS – A Stackable Unification File System

Reading time: 2 – 4 minutes

unionFS és un sistema de fitxers de linux és realment un somni fet realitat, en principi ens permet fer una cosa ben senzilla. Com diu el títol, permet unir sistemes de fitxers apilant-los. Què vol dir això? doncs montar sistema de fitxers un sobre de l’altre. La gràcia on és? doncs en que per exemple podem montar un sistema de fitxers de només lectura i després a sobre un de lectura i escriptura; la difèrencia entre això i un montatge convencional és que veurem el contingut dels dos directoris i podrem modificar el sistema de només lectura guardant els canvis en el de lectura i escriptura. O sigui, ara tenim un nou sistema virtual format per la unió d’amdós sistemes. Crec que amb aquest exemple queda claríssima la potència de la idea.

També es pot usar aquest sistema de fitxers amb suport d’snapshots. O sigui, mantenint còpies passades de les versions anteriors dels fitxers. Així doncs, del sistema de modificar fitxers que usa el unionFS se’n diu copy-on-write, perquè quan ha de fer una escriptura d’un fitxer el que fa és fer-ne una còpia mantenint el contingut antic en un dels sistemes de fitxers que estan a la unió.

Quan es monten sistemes de fitxers amb diferents branques d’uns mateixos fitxers s’acostuma a donar prioritat a una de les branques. Si el que tenim montat és un CDROM i un disc dur, obviament la branca que ha de tenir prioritat és la del disc dur sinó no es podrien guardar els canvis.

unionfs.png

L’ús més destacable que se’n fa d’aquest sistema de fitxers és en els liveCD, perquè permeten guardar dades de forma persistent en un disc dur o en un pendrive. O sigui, podem iniciar una distribució de linux amb un CD o DVD i instal·lar nous paquets, fer canvis en la configuració del sistema, guardar dades amb aplicacions, etc. i totes les noves dades que s’haurien d’haver guardat al suport de només lectura s’hauràn guardat en el disc dur o el pendrive gràcies al unionFS. Molts dels liveCD de les vostres distribucions preferides suporten el que se’n diu mode persistent ús recomano que consulteu la documentació si ús interessa la funcionalitat.

Per més informació: Versatility and Unix Semantics in a Fan-Out Unification File System (local).

HttpClient – PHP Web Client Class

Reading time: 1 – 2 minutes

Aquesta classe ens permet implementar de forma senzillissima un client HTTP 1.0 i 1.1 tan per peticions GET com POST. De fet, fa algo semblant al que que comentava de la classe de perl WWW:Mechanize tot i que amb molt menys detalls. Malgrat això pot ser molt útil per interactuar amb altres webs des del nostre codi en PHP. A més és senzillissim usar aquesta classe. HttpClient implementa les següent funcionalitats.

  • Implements a useful subset of the HTTP 1.0 and 1.1 protocols.
  • Includes cookie support.
  • Ability to set the user agent and referal fields.
  • Can automatically handle redirected pages.
  • Can be used for multiple requests, with any cookies sent by the server resent for each additional request.
  • Support for gzip encoded content, which can dramatically reduce the amount of bandwidth used in a transaction.
  • Object oriented, with static methods providing a useful shortcut for simple requests.
  • The ability to only read the page headers – useful for implementing tools such as link checkers.
  • Support for file uploads.

Per més informació recomano que mireu els exemples que hi ha a la web de la classe és realment simple d’usar.

phpMailer – una classe de PHP per enviar emails

Reading time: 6 – 10 minutes

En PHP quan s’ha d’enviar un email sovint s’usa la funció mail() tot i que aquesta és una mica limitada en quan a paràmetres que se li poden passar al servidor SMTP. Per exemple, temes d’autenticació i xifrat. Via pear hi ha diverses solucions però a vegades cal que la solució que incorpori el nostre aplicatiu sigui independent d’aquest tipus de requisits de sistema. Així doncs phpMailer ens pot servir per sortir de més d’un embolic.

Suporta:

  • Can send emails with multiple TOs, CCs, BCCs and REPLY-TOs
  • Redundant SMTP servers
  • Multipart/alternative emails for mail clients that do not read HTML email
  • Support for 8bit, base64, binary, and quoted-printable encoding
  • Uses the same methods as the very popular AspEmail active server (COM) component
  • SMTP authentication
  • Word wrap
  • Address reset functions
  • HTML email
  • Tested on multiple SMTP servers: Sendmail, qmail, Postfix, Imail, Exchange, etc
  • Works on any platform
  • Flexible debugging
  • Custom mail headers
  • Multiple fs, string, and binary attachments (those from database, string, etc)
  • Embedded image support

Un petit exemple d’ús perquè vegeu el senzill que és usar-lo:

require("class.phpmailer.php");
$mail = new PHPMailer();
$mail->IsSMTP();                                   // send via SMTP
$mail->Host     = "smtp1.site.com;smtp2.site.com"; // SMTP servers
$mail->SMTPAuth = true;     // turn on SMTP authentication
$mail->Username = "jswan";  // SMTP username
$mail->Password = "secret"; // SMTP password
$mail->From     = "from@email.com";
$mail->FromName = "Mailer";
$mail->AddAddress("josh@site.com","Josh Adams");
$mail->AddAddress("ellen@site.com");               // optional name
$mail->AddReplyTo("info@site.com","Information");
$mail->WordWrap = 50;                              // set word wrap
$mail->AddAttachment("/var/tmp/file.tar.gz");      // attachment
$mail->AddAttachment("/tmp/image.jpg", "new.jpg");
$mail->IsHTML(true);                               // send as HTML
$mail->Subject  =  "Here is the subject";
$mail->Body     =  "This is the HTML body";
$mail->AltBody  =  "This is the text-only body";
if(!$mail->Send())
{
   echo "Message was not sent 

"; echo "Mailer Error: " . $mail->ErrorInfo; exit; } echo "Message has been sent";

Aquesta troballa l’he fet a través de l’article phpMailer , a great Email transfer class del blog de Moody Bahrain.

Scroll to Top