Mar 04

Podcast 2×01: introudcció i descripció detallada del protcol SOCKS5

Reading time: 3 – 4 minutes

Després de moltes hores de feina estudiant el protocol SOCKS he decidit publicar un podcast que expliqui el seu RFC, el podcast pretent fer una introducció des de la part meś conceptual fins endinsar-se en el fluxe de paquets, els camps de les peticions llençades arribant a explicacions de nivell de bit. Amb l’ajuda dels diagrames adjunts a aquest article, l’RFC1928 i l’explicació del podcast després hauriem d’estar capacitats per implementar un client/servidor SOCKS5.

El podcast:

Esquemes que ajuden a seguir el podcast

esquema 1: petició d’un client SOCKS5 al servidor

                   +----+----------+----------+
                   |VER | NMETHODS | METHODS  |
                   +----+----------+----------+
                   | 1  |    1     | 1 to 255 |
                   +----+----------+----------+

esquema 2: resposta del servidor SOCKS5 al client

                         +----+--------+
                         |VER | METHOD |
                         +----+--------+
                         | 1  |   1    |
                         +----+--------+

mètodes d’autenticació

  • X’00’ NO AUTHENTICATION REQUIRED
  • X’01’ GSSAPI
  • X’02’ USERNAME/PASSWORD
  • X’03’ to X’7F’ IANA ASSIGNED
  • X’80’ to X’FE’ RESERVED FOR PRIVATE METHODS
  • X’FF’ NO ACCEPTABLE METHODS

esquema 3: el client SOCKS5 envia una comanda al servidor

        +----+-----+-------+------+----------+----------+
        |VER | CMD |  RSV  | ATYP | DST.ADDR | DST.PORT |
        +----+-----+-------+------+----------+----------+
        | 1  |  1  | X'00' |  1   | Variable |    2     |
        +----+-----+-------+------+----------+----------+

camp: ATYP -> address type

  • IP V4 address: X’01’
  • DOMAINNAME: X’03’
  • IP V6 address: X’04’

esquema 4: resposta del servidor SOCKS5 a la comanda del client

        +----+-----+-------+------+----------+----------+
        |VER | REP |  RSV  | ATYP | BND.ADDR | BND.PORT |
        +----+-----+-------+------+----------+----------+
        | 1  |  1  | X'00' |  1   | Variable |    2     |
        +----+-----+-------+------+----------+----------+

camp: REP -> reply

  • X’00’ succeeded
  • X’01’ general SOCKS server failure
  • X’02’ connection not allowed by ruleset
  • X’03’ Network unreachable
  • X’04’ Host unreachable
  • X’05’ Connection refused
  • X’06’ TTL expired
  • X’07’ Command not supported
  • X’08’ Address type not supported
  • X’09’ to X’FF’ unassigned

esquema 5: encapsulaments per enviaments de paquets UDP

      +-----+----+-----+------------------------+------+
      | ... | IP | UDP | SOCKS5 UDP ASSOCIATION | DATA |
      +-----+----+-----+------------------------+------+

esquema 6: camps de l’encapsulament: UDP ASSOCIATION

      +----+------+------+----------+----------+----------+
      |RSV | FRAG | ATYP | DST.ADDR | DST.PORT |   DATA   |
      +----+------+------+----------+----------+----------+
      | 2  |  1   |  1   | Variable |    2     | Variable |
      +----+------+------+----------+----------+----------+

Referències d’utilitat

  • Apunts per fer el podcast: fitxer .txt amb la llista de coses que havia de comentar al podcast és una barreja de català, castellà i anglès… però pot servir-vos per entendre el que intento explicar
  • Wikipedia: SOCKS
  • RFC’s:
    • RFC1928: SOCKS Protocol v5
    • RFC1929: Username/Password Authentication for SOCKS V5
    • RFC1961: GSS-API Authentication Method for SOCKS V5
Jul 21

Glosari de Telepathy

This entry is part 3 of 4 in the series xmpp

Reading time: 3 – 4 minutes

Abans que res una petita introducció a: Què és Telepathy?

Es tracta d’un framework que unifica diferents sistemes de comunicació en temps real. Usa DBUS com a interficie de comunicació entre aplicacions.

Avantatges de Telepathy:

  • Temps real: suporta sistemes IM (un-a-un i grups), video trucades i trucades de veu.
  • Unificat: permet que diferentes aplicacions i de forma simultànea s’aprofitin de les capacitats del sistema i que treballin de forma col·laborativa.
  • Framework: disecciona el sistema de comunicacions en petites parts i les fa tan simples com pot perquè al usar-les contjuntament el procés de comuncació sigui el més senzill possible.

El glosari de termes, en poques paraules el que cal tenir en ment i recordar quan parlem de Telepathy.

  • MUC (multi user chat): o també anomenat chat room, o canal de xat.
  • Mission Control: responsable de la gestió de comptes de missatgeria: creació de connexions i manteniment dels estats de presència dels contactes.
  • Glabbe: és un connection manager de Jabber.
  • Tapioca: és un framework per VoIP i aplicacions IM. Suporta SIP/XMPP.
  • Farsight: idem que el Tapioca, però orientat a videoconferències.
  • Stream Engine: exporta les funcions de Farsight a DBUS. i viceversa.
  • Tubes: és el mecanisme que usa Telepathy per suportar transferència de dades entre aplicacions remotes, o sigui: remote IPC. La idea que hi ha darrera és “si dues persones connectades a un servei de IM poden parlar, perquè dues aplicacions connectades a un IM no poder intercanviar informació”.
  • Stream Tubes: és un mètode de transport usat per Telepathy molt similar al SOCK_STREAM sockets: enviament de paquets ordenat i confiable.
  • IB (in-band): quan els ‘Tubes’ usen el servidor de missatgeria per intercanviar dades. Aquest sistema pot ser molt lent per transportar depèn quin tipus d’informacions, per exemple, sessions VNC.
  • OOB (out of band): els ‘Tubes’ de dades usen diferents camins fora de la xarxa XMPP, per exemple, connexions directes entre peers via UDP o TCP.
  • Empathy: es tracta d’un client d’IM programat usant les llibreries de Telepathy.
  • XEP-0095 Stream Initiation: aquesta especificació defineix una extenció d’XMPP que iniciar fluxes de dades entre dos entitats connectades a la xarxa XMPP. El protocol soporta la possibilitat d’incloure metadades sobre el fluxe de dades a intercanviar.
  • XEP-0065 SOCKS5 bytestreams abstract: es defineix una extenció d’XMPP per establir connexions OOB entre dos peers, la connexió entre els peers pot ser directe o via un proxy SOCKS5, en principi la idea és usar TCP per aquests tipus d’enllaços malgrat també podria funcionar per UDP.
  • XEP-0163 PEP (Personal Eventing Protocol): defineix la semàntica d’un protocol que usant les funcions publish-subscribe d’XMPP dinfon els canvis d’estat i presencia. D’aquesta forma podem fer funcionar l’estat d’una compte com si es tractés d’un servei pubsub; simplificant la possibilitat de sindicar-nos a dades i notificacions associades amb aquella compte. Un exemple, per fer-ho més entendor: podem tenir un servei d’agenda que ens avisa que hem de fer certes coses si és que estem disponibles però si en canvi este ausents no té sentit que ens avisi.
  • XEP-0080 User Location: és una extenció per permet enviar informació sobre la posició geogràfica de l’usuari.
Jul 14

XMPP amb BOSH: usant HTTP com a protocol de transport

This entry is part 2 of 4 in the series xmpp

Reading time: 4 – 7 minutes

La potència de treballar amb BOSH (Bidirectional-streams Over Synchronous HTTP) rau en que malgrat aparentment l’única forma que hi ha d’implementar XMPP sobre HTTP seria mitjançant tècniques de polling, o sigui, que periódicament el client anés connectant-se al servidor per preguntar si hi ha alguna nova informació per ell.

Doncs BOSH aconsegueix millorar aquest algoritme i el que intenta descriure és quelcom així:

  1. El client fa una connexió ‘HTTP request’ al servidor
  2. El servidor no envia cap resposta, així doncs, la connexió no es tanca.
  3. Quan el servidor té una informació (asíncrona) a enviar al client, llavors busca alguna connexió oberta del client i que estigui esperant resposta, o sigui, qu estigui al punt 2. Llavors el que fa és enviar l’informació a través d’aquesta connexió com una ‘request response’. La connexió es tanca.
  4. Un cop el client rep l’informació inmediatament després de tancar-se l’enllaç, aquest torna a obrir una connexió contra el servidor, o sigui, tornem al punt 1.

Obviament quan el client té alguna cosa a enviar això es fa en el punt 1.

A l’hora de la veritat els servidors de Jabber/XMPP el que tenen per oferir accés via BOSH és un especie de proxy que rep les connexions HTTP i les processa tal com he explica més amunt, per l’altre costat captura els events que rep de cada un dels clients XMPP que esta instanciant i va connectant els fluxes de dades que rep a través d’XMPP als sockets HTTP que té esperant informació.

Servidors BOSH incrustats en servidors XMPP

Obviament això ens porta a pensar, que podem usar un servidor BOSH per un servidor XMPP que no el suporti a mode de proxy. Això es podria programar de forma força senzilla amb twisted, per altre banda, hi ha servidors XMPP que ja suporten de serie el servidor BOSH, alguns exemples són: ejabberd, Tigase, Openfire i Jabber XCP.

Avantatges de tenir el servidor BOSH dins del servidor XMPP:

  • Sovint esta més ben testejat que el codi que podem fer-nos o que ha desenvolupat un tercer per fer aquesta tasca.
  • A priori hauria de ser més eficient, ja que la part de recepció d’events/senyals es fa a través de l’API nativa i no pas d’un client XMPP. Cosa que permet estalviar recursos i ser més eficient en la seva tasca.
  • És més fàcil de configurar, sovint només cal descomentar la línia corresponent del fitxer de configuració i llestos.

Com que no tot podien ser avantatges aquí van els inconvenients:

  • Un servidor BOSH que esta incrustat en un servidor XMPP obviament només pot atendre les peticions que van cap aquell servidor, per tant, si volem que això sigui escalable haurem de montar un balencejador de càrrega sobre el port HTTP per anar desviant connexions entre diferents sevidor BOSH.
  • El suport del servidor BOSH esta lligat al suport que la comunitat doni al servidor XMPP amb el que va lligat, això no sempre és suficient.

Quan no hem de suportar més d’un servidor XMPP, i a més aquest ja suporti BOSH no hi ha hauran mai problemes. La cosa es complicarà quan haguem d’escalar aquesta infraestructura.

Servidors BOSH dedicats, per tant independents del servidor XMPP

Per exemple: Punjab, Araneo, JabberHTTPBind i rhb. Pel que fa les avantatges i desavantatges d’aquest tipus de servidors BOSH, obviament són les mateixes que les anteriors però invertides.

Un servidor BOSH dedicat, per tant, podrà connectar-se a una xarxa XMPP a través d’un servidor XMPP federat sense problemes. Sovint el preu de sobrecarrega que això suposa esta més que justificat. Cal pensar que per cada client s’hauran de tenir sovint dues connexions TCP/HTTP més una connexió TCP/XMPP; per tant, tres sockets oberts per cada client connectat al servidor BOSH. Amb això suposo que queda clara la similitut amb un servidor proxy, no?
Com ja he apuntat abans escalar els servidors BOSH a través de ‘load-balancers’ és molt senzill, per exemple ús recomano nginex. Penseu que amb aquest ‘load-balancer’ podem tenir fins a10.000 connexions HTTP i només consumir 2’5Mb de memòria RAM. Per tant, aquesta també és una molt bona raó per usar-los externs els servidors BOSH. De fet, això no només ho penso jo sinó que aquí també ho pensen: BOSH cloud.
De fet, hi ha gent tan agoserada que gosa dir que XMPP és millor si els clients usen BOSH per accedir-hi, de fet, si llegeixes el raonament no sembla tan dolent: XMPP is better with BOSH.

Nota final

Per si algú encara no ho tenia clar, això és el que usen les llibreries d’XMPP implementades en JavaScript, o sigui, els client de xat (Jabber/XMPP) que via Web. Per exemple, el client que podem usar des de la pàgina web de gmail.

Obviament les aplicacions Jabber/XMPP són infinites i no només com a clients de xat. Per tant, podeu aprofitar aquestes llibreries JS que implementen BOSH per mostrar de forma interactiva a les vostres interficies web qualsevol tipus de contingut que obtingueu a través de la xarxa XMPP.

Jun 10

NAT traversal: Com funciona ICE?

Reading time: 5 – 8 minutes

Per tal d’entendre com funciona ICE el millor és explicar-lo conjuntament amb un altre protocol; ja que com es va comentar a la introducció del NAT traversal el protol ICE usa una combinació del protocol TURN i STUN en funció del cas, això és molt senzill d’entendre si parlem d’un cas pràctic d’ús. O sigui, quan s’intenta que per exmple, SIP travessi un firewall/gateway/router per fer arribar una trucada a un telefon IP.

Què són els candidats?

El Caller envia un missatge de SIP INVITE amb informació SDP que descriu per quina IP i per quins PORTS l’aplicació pot rebre audio i/o video. Aquestes adreces i ports es coneixen com candidates. Aquests candidates s’obtenen del servidor ICE (sovint es troba dins el firewall/router/gateway).

Podriem descriure un candidate com una IP i un port a través dels quals un peer pot rebre dades d’un altre peer. Hi ha tres tipus de candidates:

  • Local candidate: IP local del client.
  • Reflexive or STUN candidates: una adreça IP pública del servidor NAT.
  • Relay o TURN candidate: una adreça o un relay server que ha estat reservat pel client.

El tràfic sempre es podrà enviar amb èxit a través dels relay candidates, a menys que un firewall bloquegi l’enllaç, aleshores no hi ha tècnica possible de NAT traversal a aplicar. El problema d’usar relay candidates és que requereix usar recursos d’un servidor, això fa que el tràfic que arriba al peer tingui retards, perdues i problemes de jitter.

Procés d’establiment d’una trucada SIP via ICE

1. Caller aconsegueix els seus candidates

En el següent gràfic es pot veure com el Caller determinada els reflexive i relay candidates per una connexió. El client envia una petició d’ALLOCATE al servidor, llavors el servidor localitza un parell IP/port (el relay candidate). Aquesta informació s’envia altre cop al Caller (reflexive candidate), aquest missatge conté la IP pública que usarà el Caller quan emeti un missatge a internet, sovint això és la IP a través de la qual s’aplicarà el NAT.

stun_turn_candidates

2. Caller envia un SIP INVINTE

El Caller construeix un missatge SIP INVITE usant la informació dels candidates que ha obtingut del seu servidor ICE, després l’envia al seu destí.

3. Callee aconsegueix els candidates

Quan es rep el missatge SIP INVITE, el Callee aconsegueix els candidates de la mateixa manera que ho ha fet el Caller en el punt (1).

4. El Callee envia una resposta 1xx

Seguint amb el protocol SIP, el Callee ha de generar un missatge de resposta al SIP INVITE, per exemple, un SIP 183 (Session Progress). Quan es construeixi aquest missatge dins de l’informació SDP el Callee també hi encapsularà els seus candidates. Fins que aquest missatge no s’hagi rebut i confirmat per part del Caller (200 OK) no es considerarà exitosa la negociació.

5. ICE connectivity checks

Arribats en aquest punt tan el Caller com el Calle saben mutuament els candidates que tenen cadascún i és el moment d’usar el que s’anomena ICE connectivity checks. Això es fa enviant un missatge STUN des del local candidate cap al remote candidate, això es pot fer per tants candidates com hi hagin des del que té més prioritat fins al que en té menys. Això ho faran ambdós costats de l’enllaç si és que tots dos es troven darrera un gateway amb ICE. Quan s’hagi determinat quin dels candidates és el millor per establir cada un dels canals llavors s’escollirà aquest candidate per començar a enviar i rebre media a través seu.

A continuació es poden veure tres exemples de com es fan aquestes proves dels candidates. El primer esquema seria el cas en que ambdós hosts són enrutables directament perquè, per exmple, estan a la mateixa LAN. El segon esquema s’aconseguiria l’enllaç via la metologia STUN i en el tercer via la metodologia TURN.

ICE_connection_check

6. Callee envia SIP 180 (ringing)

En aquest punt el Callee envia el missatge SIP 180 (ringing) al Caller per informar-lo de que el teléfon del Callee esta sonant. Al haver negociat previament el canal de dades a través d’ICE quan el Callee despengi el teléfon ja podrà parlar sense retards, si això es negocies després hi hauria un efecte de retard desagradable pels peers.

7. Accepta la trucada i parlen

Així doncs, quan el Callee despengi s’enviarà un missatge 200 OK i via RTP (per exemple) i usant els canals negociats via ICE el fluxe de dades multimedia (en aquest cas audio) començarà travessant de forma transparent els dos gateways que donen accés a internet als dos peers.

Unes notes per aclarir el tema

En aquest exemple es preten demostrar que podem establir un enllaç RTP a través de dos peers que es troben darrera de NAT gràcies al protocol ICE. Com a protocol per controlar la sessió RTP s’usa SIP, això fa que ambdós peers necessitin una redirecció DNAT al seu gateway cap als ports TCP/UPD 5060. En cas de voler evitar això el que s’hauria d’usar és un altre protocol de senyalització diferent de SIP. Per exemple, si no volem/podem redirigir cap port al gateway es podria usar XMPP.

Glosari

  • Caller: qui fa la trucada
  • Calee: qui rep la trucada
  • SDP: Session Description Protocol
  • SIP: Session Initiation Protocol
  • Peer: un extrem de la connexió

Referències


May 28

NAT traversal: Com funciona STUN?

Reading time: 2 – 3 minutes

El servidor STUN ha de publicar la seva IP (3478TCP/UPD o 5349TLS) a un gateway que tingui una IP interna i una externa (privada i pública). La comuniació comença quan el client que esta a la xarxa enmascarada llença una serie de requests contra la IP pública del servidor STUN. El servidor STUN contestarà al client informant dels parells de ports usats a l’exterior del NAT, amb això el client aprent de quin tipus de NAT disposa i quin és el TTL dels bindings que es fan a l’exterior per re-enviar les seves peticions.

Una aplicació client per tal de saber qui és el seu servidor STUN el que fa és buscar al seu domini DNS la resolució del nom _stun_.domini_exemple.com o _stun._udp.domini_exemple.com pels tipus de registre SRV. Després de saber qui és el seu servidor STUN el que fa l’aplicació és buscar l’adreça pública del servidor STUN. Per tal de descobrir quin haurà de ser l’origen dels seus paquets a internet. Així quan construeixi els paquets amb les dades d’aplicació podrà advertir quina és l’adreça pública del seu servidor STUN.

Arribats a aquest punt sovint en tenim prou com per començar la comunicació amb el destí final del nostre enllaç, ja que aquest l’únic que haurà de fer és contestar els paquets pels mateixos ports que el gateway esta fent binding en aquell moment. Aquí és on el STUN server fa la seva feina mantenint els ports oberts. Un dels problemes amb els que ens podem trobar és que el node destí no pugui atacar aquells ports per alguna restricció del seu firewall o similar. Cosa que complica la possibilitat de fer l’enllaç. Si els dos hosts que volem comunicar estan tots dos darrera del NAT-masquerade la cosa és fa molt difícil i sovint fa falta un proxy entre els dos servidors STUN per tal de que la cosa funcioni, o sigui, que es complica moltíssim.

Diagrama de fluxe del protocol:

Esquema NAT
Click for (+) Zoom

May 27

NAT traversal: Introducció

Reading time: 3 – 5 minutes

Avui en dia és molt usual tenir xarxes darrera de gateways (routers, firewalls, etc) que a través de NAT donen accés a internet als hosts, sovint anomenem masquerading a aquesta funcionalitat que no deixa de ser un subconjunt de funcions del propi NAT. La majoria de problemes associats a l’accés a internet via masquerading estan solucionats. Però quan el problema que tenim és l’invers, o sigui, que volem accedir, via TCP o UDP, a un host  que esta dintre una xarxa amb un gateway que fa NAT la cosa es complica.

De fet, si el que volem és redirigir un port de la IP pública amb la que s’accedeix a internet a un host intern tampoc no té massa misteri, gràcies al DNAT. Però si aquestes redireccions han de ser a més d’un host sovint hem de començar a usar ports no massa estàndards per oferir serveis que hi ha dins la xarxa i que volem publicar a internet. O sigui, que l’únic que podem fer a priori és mapejar estàticament ports de la IP pública cap a certs ports de les IPs privades.

Per tal de poder rebre connexions en un host que esta darrera un gateway que fa NAT hi ha una serie de tècniques més o menys (des)conegudes.

  • TURN (Traversal Using Relay NAT): la idea és tenir un pool d’IPs públiques de forma que les aplicacions que necessitin ser publicades a internet agafin una IP disponible de forma temporal o permanen per publicar aquell servei en aquella IP que mapejarà els seus ports. O sigui, que es basa en una idea similar al DNAT però li afegeix la capacitat de poder usar pools d’IPs de forma dinàmica.
  • STUN (Session Traversal Utilities for NAT): Esta orientat a aplicacions de VoIP, missatgeria, videoconferència, etc. Sovint quan les connexions per les que s’usa STUN són via UDP, malgrat també hi poden haver servidors que STUN que funcionin amb TCP o fins hi tot TCP/TLS.  El protol STUN és un protocol client-servidor molt lleuger.
  • ICE (Interactive Connectivity Establishment): finalment la idea d’ICE és buscar la millor ruta entre dos hosts que volen comunicar-se. Si ambdós estan dintre la mateixa LAN o en LANs diferents però tenen IPs públiques o NATs estàtics (1a1), llavors enruta les connexions i llestos. Però si els hosts estan darrera de NAT que fan enmascarament dinàmic llavors usa combinacions de les tènciques d’STUN i TURN.

Per tal d’entendre millor aquests problemes cal tenir clar els tipus de NAT que existeixen:

  • Full Cone NAT
  • Esquema NAT
    Click for (+) Zoom

  • Port Restricted Cone NAT
  • Esquema NAT
    Click for (+) Zoom

  • Restricted Cone NAT
  • Esquema NAT
    Click for (+) Zoom

  • Symetric NAT
  • Esquema NAT
    Click for (+) Zoom

    En els propers articles desenvoluparé més a fons els protocols citats i referenciaré algunes llibreries que els implementen.

    La major part de la bibliografia l’he extret de la wikipedia, dels estàndards IETF i de les següents fonts:

    • PDF de NAT types de la web: http://www.crfreenet.org/~martin/referaty/stun/naty.pdf (local)
May 01

XMPP: introducció

This entry is part 1 of 4 in the series xmpp

Reading time: 5 – 8 minutes

Definició

XMPP Standards Foundation
XMPP (Extensible Messaging and Presence Protocol) és un protocol estàndard i obert que es basa en l’intercanvi de missatges XML. Inicialment va ser concebut per implementar xarxes de missatgeria instantànea (IM) però actualment s’usa per un ventall de funcionalitats molt més ampli. Qualsevol aplicació que necessiti un sistema de missatges entre diferents mòduls distribuits és sensible a usar XMPP per ntercanviar missatges usant aquesta tecnologia com a middleware. Potser les eines més conegudes que usen XMPP com a middleware són Jabber, GTalk i les funcions de videoconferència i audioconferència de la mateixa Google.

Les funcionalitats que ens ofereix el protocol són realment amplies i potents:

  • Rudundància
  • Escalavilitat
  • No calen VPNs per accedir al serveis dins d’una xarxa amb NAT
  • Suport SSL i Certificats
  • Backends on es guarden usuaris: MySQL, LDAP, etc.
  • Extensible (usa el que s’anomenen XEP)
  • BOSH permet usar XMPP sobre HTTP, cosa que per disseny del protol XMPP seria un problema.

Glossari

  • JID: els nodes d’una xarxa XMPP s’identifiquen a través d’aquest identificador, que és de la forma: user@domain/resource (exemple: miquel@servidor.cat/im). Tractament dels JID:
    • user@example.com – conegut com a JID
    • user@example.com/desktop – conegut com a JID o full JID
  • Stanza: els missatges XML que s’intercanvien entre un servidor XMPP i un client s’anomenen Stanzas.  Hi ha tres tipus d’stanzas:
    • Messages: transporten informació entre nodes, els missatges es poden organitzar en threads. N’hi ha de diferents tipus:
      • normal
      • chat
      • groupchat
      • headline
      • error
    • Presence: serveixen per informar de la dipsonibilitat d’un recurs (online/offline):
      • away
      • do not disturb
      • extended away
      • free for chat
    • IQ Stanza (info query): similar a un HTTP GET/POST/PUT, serveix per demanar informacions concretes a un node. Ideals per extendre el protocol. Per exemple, les IQ s’usen per saber quins recursos (usuaris) estan connectats a un canal de xat. N’hi ha de tres tipus:
      • get: demanen informació (HTTP GET)
      • set: proveeixen informació (HTTP POST/PUT)
      • result: retornen informació requerida o confirmen que s’ha acceptat una comanda ‘set’.
  • Extensibility: per tal de que sigui simple extendre el protocol, les stanzas suporten namespaces i qualsevol element XML d’una stanza es pot usar com un payload, per transportar: XHTML tags, Atom feeds, XML-RPCs, etc.
  • Roster: llista de persones que participen en un event.
  • Presence subscriptions: els recursos d’una xarxa (sovint els usuaris) poden subscriures a altres recursos (altres usuaris) per tal de saber si estan o no disponibles en cada moment.
  • Asincronisme: la gràcia del XMPP respecte altres protocols com HTTP és que es tracta d’un protocol asíncron, o sigui, que les connexions s’estableixen durant molt de temps i en qualsevol moment el servidor i/o el client poden enviar i rebre stanzas a través d’aquest canal. Els protocols HTTP estableixen connexions relativament curtes on sovint només hi ha una petició i una resposta després es tanca la connexió.

Polling vs PubSub

Aquest és el gran parigma de les estructures client servidor actuals, sovint els servidors tenen informacions que són pels seus clients. Però per disseny els servidors no podenen connectar amb els seus clients i han d’esperar a que aquests es connectin per donar-los la informació que necessiten. Això dona lloc al que coneixem com a polling, o sigui, que els clients periódicament han d’anar connectant als servidors per saber si tenen quelcom nou per ells. Un bon exemple per entendre això és els servidors POP3 els servidors tenen una serie de correus enmagatzemats a l’espera que els clients a través del seu MUA es connectin per descarregar-se el correu.

Doncs bé en una xarxa XMPP, els clients es troven connectats al servidor en tot moment i tenen establer un canal permanent (real o virtual) entre clients i servidors. Per tant, l’intercanvi d’informació és bidireccional i qualsevol d’ambdues parts port enviar i rebre stanzas sense haber d’establir un nou canal, sinó que aprofiten el que ja tenen. PubSub és la capacitat que tenen els recursos d’XMPP (clients d’XMPP) de subscriures i publicar qualsevol informació, la possibilitat de subscriures a una informació permet que cada cop que el servidor té una informació d’aquell tipus l’enviarà directament al client sense que aquest l’hagi de demanar. Un exemple per entendre millor el PubSub seria el que fan els usuaris al unir-se a un canal de xat; o sigui, informen al servidor que volen rebre qualsevol informació que es publiqui al canal i el servidor quan algún usuari publica una nova informació al canal l’envia automàticament a la resta d’usuaris.

Com és fàcil imaginar XMPP ens dona usa serie d’avantatges per tota una serie d’aplicacions que altres protocols no poden, potser la més poderosa és la que es tracta aquí. Donant un cop d’ull als pros i contres:

Pros (PubSub > Polling)

  • Intercanvi bidireccional d’informació, no cal establir VPNs ni altres sistemes similars perquè hi hagi accés transparent entre servidors i clients.
  • Optimització del canal, no es malgasta ampla de banda fent preguntes per saber si hi ha algo nou, directament rebem les novetats.

Contres (PubSub < Polling)

  • Cal mantenir el canal establert, de forma real o virtual, això no sempre és possible o senzill. Per això apareixen tècniques/protocols com BOSH per permetre-ho.
  • XMPP no esta optimitzat per intercanviar grans volums d’informació.

La extenció més coneguda: Jingle

És una extenció d’XMPP que permet enviar missatges de senyalització entre recursos (clients) d’aplicacions multimèdia interactives com veu o video. Va ser dissenyat per Google i la XMPP Standards Foundation. El contenigut multimèdia s’envia a través d’RTP(Real-time Transport Protocol) amb ICE(Interactive Connectivity Establishment) per tal de poder traspassar els NAT(Network Address Translation).

Fonts

Wikipedia:

Web:

Presentació:

Mar 03

Netgear ProSafe SSL VPN Concentrator SSL312

Reading time: 4 – 6 minutes

NetGear SSL312Havia tingut l’oportunintat de veure funcionar aquest tipus de concentradors d’VPN en diverses ocasions però mai n’havia configurat cap. De fet, el model en concret del que us parlo el vaig descobrir a través de Tecnología Pymes. El que més em va sorprendre és la quantitat d’VPNs que gestionava i el seu preu, són 25 VPNs concurrents per uns 350€ de PVD. Després vaig estar mirant-me a fons el manual i les seves especificacions tècniques i crec que és una de les solucions més competitives per montar VPNs a usuaris remots (roadwarriors) de forma senzilla. En aquest cas, senzilla vol dir que no s’hagi d’anar usuari per usuari a configurar-los l’VPN. Sinó que ells mateixos simplement accedint a una pàgina web i amb un simple usuari/password més el suport d’un plug-in Java/ActiveX passin a ser un client de l’VPN.

Al accedir via web després de l’autenticació el dispositiu facilita un portal d’enllaços als usuaris on poden amb un simple clic accedir a aplicacions a través del navegador, per exemple, usant VNC, RDP, Telnet, SSH, IE i d’altres protocols l’usuari pot iniciar per exemple una sessió amb una aplicació que estigui en un servidor local: Word, Excel, ERP, CRM, Web,  etc. O sigui, que és ideal per quan tenim usuaris amb coneixements molt bàsics perquè els podem donar accés directe a les típiques coses que usaran i per l’usuari és molt senzill d’entendre. Obviament si no volem accedir via web a la xarxa remota ho podem fer des del sistema, o sigui, que per exmemple si obrim una consola podem llençar un ping sense problemes als servidors remots. No deixa de ser una VPN de les de sempre, però usant com a client el navegador.

Pel que fa al firmware que usa després de connectar-hi via RS232 he pogut veure que és un Linux, al qual pel mateix CLI serie podem tenir-hi accés i tocar el que ens convingui. Per cert, enlloc he trobat la configuració del port serie per connectar-hi però fent proves la que m’ha funcionat ha estat: 9600 8N1 no control de fluxe per hardware ni tampoc per software.

Al iniciar el router aquest portava un firmware força antic que no suportava Windows Vista i que només podia treballar amb clients IE via ActiveX. Però després d’actualitzar el firmware a la versió 2.3.03 no només ja es suporta el Windows Vista sinó que també funciona amb clients Linux amb Firefox usant un applet de Java. Això si hem de tenir permisos d’administrador perquè sinó no pot crear les rutes i d’altres similars al sistema.

# uname -a
Linux vpn0 2.4.20-br264 #25 Fri Nov 14 12:23:42 IST 2008 POLO unknown

Els usuaris de l’VPN poden estar guardats en diversos llocs:

  • Local user database
  • Microsoft Active Directory
  • LDAP directory
  • NT domains
  • RADIUS (PAP, CHAP, MSCHAP, MSCHAPv2)

A més disposa d’un sistema de grups i de polítiques de permisos que malgrat no ser res de l’altre món ens permet crear certs tipus de perfils restringint els accessos de forma simple i fàcil de gestionar als grups o usuaris.

Quan montem aquesta solució podem treballar de diverses formes. Diposa de dues sortides ethernet i podem treballar amb només una sortida:

topologia 1

o usant dues interficies de xarxa:

topologia 2

a partir d’aquí podem adaptar el sistema d’VPN al que més ens interessi dins de l’empresa.

Abans d’acabar només un apunt sobre el tema de la configuració. Cal dir que no és complicat de configurar, però en primera instància és una mica engorrós tenir tantes opcions i tan poc intuitives. Una bona recomanació és que no deixeu de llegir-vos atentament l’ajuda en línia (apareix a la part dreta) que es mostra en la WebUI de configuració.

Un altre cop doncs NetGear ens ha presentat un producte molt decent i recomanable, he de dir que és una marca que al igual que Linksys m’acostuma a deixar un bon gust de boca.

Pàgina del producte:  ProSafe SSL VPN Concentrator SSL312

Feb 28

Atac DOS al DNS: DNS Root Query Amplification

Reading time: 2 – 4 minutes

El dia 26 un dels servidors que administro va ser víctima d’un atac DNS, de fet, a hores d’ara encara continuem sent víctimes de l’atac malgrat ara mateix ja hem pres mesures de contenció per tal de que el mateix no ens afecti. La qüestió és que aquest atac va sobrecarregar l’activitat del nostre servidor de DNS fins a tal punt que les peticions DNS trigaven molta estona a resoldres ja que s’acumulava la feina i aquestes cada cop trigaven més a resoldres. Això de forma col·lateral va provocar problemes en altres serveis, arribant fins hi tot a col·lapsar-los i a fer caure un dels servidors.

L’atac en qüestió esta perfectament descrit pel SANS:

Una possible solució i també descripció del problema la va trobar en Lluís en aquest blog:

Per resumir una mica el que es nota és que rebem moltíssimes peticions de resolució del domini ‘.’, cosa que dona molta feina al nostre servidor DNS i que acaba generant un gran tràfic de resposta per una petita petició que pot llençar perfectament un zombie sense patir cap sobrecarrega al seu ampla de banda, encanvi el destinatari del atac DOS pot veures afectat per moltíssims paquets no solicitats de diversos origens, convertint el simple atac DOS en un complicat atac DDOS difícil de parar pel destí final de l’atac.

Un bon gràfic per entendre l’atac és aquest:

dns-amplification-attack-small

Aquest gràfic l’he extret de l’article DNS Amplification Attack
del blog Security News & Tips. Que també té un bon article on s’explica l’atac en detall.

Si simplement sóm usats per llençar aquest atac, com era el cas que explico gràcies a eines com el fail2ban no és complicat d’aturar, ja que podem dir-li que vigili el nostre fitxer de logs i llençar regles de filtrat que aturin les peticions al DNS que es repeteixen massa pel mateix origen. Per un detall més complert de com implementar això ús remeto a l’article: DNS Root Query Amplification.

NOTA sobre PowerDNS: El software que usem per gestionar els DNS és el PowerDNS el qual disposa d’una interficie web per controlar les estadístiques del servei, en cas de patir un atac d’aquest tipus a través d’aquesta pàgina web serà molt senzill que identifiqueu quines IPs estan llençant l’atac i a més a més comprovar que l’atac és el del tipus que he descrit.

Feb 27

El cercador en català: que.cat

Reading time: 2 – 3 minutes

que_catLa vida dona moltes voltes, una altre prova d’això és que fa unes setmanes vaig rebre el comentari d’un dels lectors del blog informant-me que esta desenvolupant un interessant cercador de pàgines web en llengua catalana. La veritat és que no tinc el plaer de coneixen els detalls tècnics de com ho esta fent i tampoc els he sabut trobar a la xarxa. De moment les poques busquedes que hi he pogut llençar m’ha semblat:

  • ràpid
  • simple d’usar
  • simple d’interpretar els resultats
  • molt orientat als continguts en la nostre llengua

Com a tecnòleg la veritat és que convidaria al David a que via podcast o per escrit ens fes cinc cèntims de com ho esta fent per montar el cercador, si és que es pot explicar. Però anant al que comentava a l’inici de l’article, com a persona curiosa que sóc vaig arribar fins a la web de l’empresa del David (deDavid interactive) i vaig adonar-me que el seu logo em sonava moltíssim. Tan és així que vaig seguir pensant on l’havia vist abans i al cap de pocs dies em va venir al cap: a la web de Cablematic.  Potser a molts no ús sona la botiga, però jo en sóc un gran client i fa molts anys que hi compro i que hi trobo les coses més rares que puc arribar a buscar en concepte de connectors, cables, gadgets, dispositius, etc.

Així doncs, una casualitat com una altre, resulta que el David llegia el meu blog i jo era un gran usuari d’un dels seus treballs com a programador de webs. Tornant al motiu de l’article, només recomanar-vos que doneu un cop d’ull a que.cat un cercador molt jove, però que apunta maneres i esperem que arribi ben lluny. Qui sap si un dia la generalitat li podria donar tants diners com va fer en el seu dia  a Olé! 😉