oriolrius.cat

Des del 2000 compartiendo sobre…

Tag: podcast

Podcast Zetatesters

Reading time: 2 – 3 minutes

Hace unos días tube la suerte de comer con Javier Moreno (@ciberado) a pesar de considerlo un buen amigo no tengo la suerte de poder compartir un ratito de conversación con él muy a menudo.

Durante la comida me propuso participar en uno de los podcast de Marc Alier. La verdad, el tema de los podcast lo tenía muy frio estos últimos años y realmente ha sido un placer excepcional poder disfrutar de grabarlo.

Primero por el formato en si que me encanta. Pero lo más relevante porqué creo que Marc es una persona fantástica y un ser humano excepcional. Realmente me siento muy conectado con él. Es de esas personas que a los dos minutos de conocerlo ya me daba la sensación que hacía muchos años que eramos amigos.

Así pues, me he enganchado a sus podcast y no descarto colaborar próximamente con él en “Mossegant la poma”. A ver si lo agendo pronto. Antes de cerrar estos elogios hacia Marc, recomendaros:

Finalmente obviamente referenciaros el podcast que grabamos:

Sabeis lo más dibertido que de todo lo que le quería contar a Marc para el podcast no hablé de nada, o casi nada, pero salieron temas y anécdotas buenísimas y súper dibertidas. Así pues, creo que podeis pasar un buen rato escuchando el podcast. Ya me direis si os ha gustado.

El Podcast disponible al directori d’iTunes

Reading time: < 1 minute Després de que diverses persones m'ho demanessin fa un mes més o menys em vaig donar d'alta al directori de podcasts del iTunes. Així doncs, els que tingueu un iPhone, iPad o qualsevol altre andromina compatible amb iTunes podrà localitar el meu podcast buscant simplement 'oriolrius.cat', l'enllaç cap a la pàgina del podcast:

screenshot oriolrius.cat a iTunes

Podcast 2×04: SSH avançat

Reading time: 3 – 5 minutes

El podcast

[display_podcast]

Notes sobre el podcast

  • -L: connecta per SSH a un HOST Un cop allà obre una connexió TCP a un altre HOST:PORT i obre un port TCP local que al connectar-hi ens envia al HOST:PORT anteriors, o sigui, portforwarding.
    • -L [bind_address:]port:host:hostport]
  • -W: connecta per SSH a un HOST un cop allà obre una connexió TCP a un altre HOST:PORT i ens retorna a la stdin/stdout el contingut d’aquest darrer enllaç TCP
    • -W host:hostport
  • -R publicar un port: connecta per SSH a un host i un cop allà publica un port TCP, quan un client es connecta a aquest port TCP accedeix per SSH a la màquina que ha llença l’enllaç SSH i obre un altre enllaç TCP a una altre IP:PORT.
    • -R[bind_address:]port:host:hostport
  • -D socks5: connecta per SSH a un HOST i després publica un port SOCKS5/TCP, és a dir, que podem connectar a aquest port local i sortir a internet a través de la IP del HOST on hem connectat per SSH
    • -D [bind_address:]port
  • -w tunel: connecta per SSH a un HOST i el socket que s’ha usat per fer l’enllaç SSH es connecta a dues interficies de tipus TUN, una a cada extrem del socket. Així doncs, si configurem les corresponents IPs a les interficies TUN tenim un tunel/VPN montada entre els extrems.
    • -w local_tun[:remote_tun]

HPN-SSH

La web de: HPN-SSH -> especialment interessant: Dynamic Windows and None Cipher

  • treballa amb mida de finestra dinàmica
  • treballa sense xifrat quan un enllaç no té terminal associat, sovint usat per pas de fitxers

Les proves:

  • Openssh 5.3p1 + hpn-13 (només el patch: Dynamic Windows and None Cipher)
  • després d’aplicar el patch: openssh5.3-dynwindow_noneswitch.diff.gz
  • modifiquem el fitxer: sshconnect2.c
    linia: 366
    - 		if (!tty_flag) /* no null on tty sessions */
    + 		if (1) /* no null on tty sessions */
  • així podem fer SSH sense xifrar només després d’haver fet el login.

exemple ampla de banada d’un SSH amb xifrat aes128-ctr, usant finestra dinàmica:

scp -v -oNoneEnabled=no -oNoneSwitch=yes fitxer root@127.0.0.1:/tmp/ssh
o
ssh -v -oNoneEnabled=no -oNoneSwitch=yes root@127.0.0.1 "dd if=/dev/zero"|pv > /dev/null

velocitat de transferència:  13.7MB/s
  • debug ciphers, una única negociació de ciphers:
    debug1: AUTH STATE IS 0
    debug1: REQUESTED ENC.NAME is 'aes128-ctr'
    debug1: kex: server->client aes128-ctr hmac-md5 none
    debug1: REQUESTED ENC.NAME is 'aes128-ctr'
    debug1: kex: client->server aes128-ctr hmac-md5 none
    

exemple sense xifrat, usant finestra dinàmica:

scp -v -oNoneEnabled=yes -oNoneSwitch=yes fitxer root@127.0.0.1:/tmp/ssh
o
ssh -v -oNoneEnabled=yes -oNoneSwitch=yes root@127.0.0.1 "dd if=/dev/zero"|pv > /dev/null

velocitat de transferència:  37.4MB/s
  • abans del pass de login:
  • debug1: AUTH STATE IS 0
    debug1: REQUESTED ENC.NAME is 'aes128-ctr'
    debug1: kex: server->client aes128-ctr hmac-md5 none
    debug1: REQUESTED ENC.NAME is 'aes128-ctr'
    debug1: kex: client->server aes128-ctr hmac-md5 none
    
  • després d’autenticar-se:
  • debug1: AUTH STATE IS 1
    debug1: REQUESTED ENC.NAME is 'none'
    debug1: Requesting NONE. Authflag is 1
    debug1: None requested post authentication.
    debug1: kex: server->client none hmac-md5 none
    debug1: REQUESTED ENC.NAME is 'none'
    debug1: Requesting NONE. Authflag is 1
    debug1: None requested post authentication.
    debug1: kex: client->server none hmac-md5 none
    

Podcast 2×03: eines per jugar amb SOCKS5

Reading time: 1 – 2 minutes

Finalment l’última entrega de la trilogia de podcasts sobre SOCKS. Com indica el títol i podeu veure amb els links aquest parla d’eines per montar servidors SOCKS i wrappers per montar clients SOCKS5.

El podcast:

[display_podcast]

Referències:

Podcast 2×02: SOCKS5 Bytestreams (XEP-0065)

Reading time: 4 – 7 minutes

La segona part sobre la trilogia de SOCKS5.

El podcast:

[display_podcast]

Exemples extrets del XEP-0065:

Example 1. Initiator Sends Service Discovery Request to Target

<iq type='get'
    from='initiator@example.com/foo'
    to='target@example.org/bar'
    id='hello'>
  <query xmlns='http://jabber.org/protocol/disco#info'/>
</iq>

Example 2. Target Replies to Service Discovery Request

<iq type='result'
    from='target@example.org/bar'
    to='initiator@example.com/foo'
    id='hello'>
  <query xmlns='http://jabber.org/protocol/disco#info'>
    <identity
        category='proxy'
        type='bytestreams'
        name='SOCKS5 Bytestreams Service'/>
    <feature var='http://jabber.org/protocol/bytestreams'/>
  </query>
</iq>

Example 3. Initiator Sends Service Discovery Request to Server

<iq type='get'
    from='initiator@example.com/foo'
    to='example.com'
    id='server_items'>
  <query xmlns='http://jabber.org/protocol/disco#items'/>
</iq>

Example 4. Server Replies to Service Discovery Request

<iq type='result'
    from='example.com'
    to='initiator@example.com/foo'
    id='server_items'>
  <query xmlns='http://jabber.org/protocol/disco#items'>
    <item jid='streamhostproxy.example.net' name='Bytestreams Proxy'/>
  </query>
</iq>

Example 5. Initiator Sends Service Discovery Request to Proxy

<iq type='get'
    from='initiator@example.com/foo'
    to='streamhostproxy.example.net'
    id='proxy_info'>
  <query xmlns='http://jabber.org/protocol/disco#info'/>
</iq>

Example 6. Server Replies to Service Discovery Request

<iq type='result'
    from='streamhostproxy.example.net'
    to='initiator@example.com/foo'
    id='proxy_info'>
  <query xmlns='http://jabber.org/protocol/disco#info'>
    <identity category='proxy'
              type='bytestreams'
              name='SOCKS5 Bytestreams Service'/>
    <feature var='http://jabber.org/protocol/bytestreams'/>
  </query>
</iq>

Example 7. Initiator Requests Network Address from Proxy

<iq type='get'
    from='initiator@example.com/foo'
    to='streamhostproxy.example.net'
    id='discover'>
  <query xmlns='http://jabber.org/protocol/bytestreams'
         sid='vxf9n471bn46'/>
</iq>

Example 8. Proxy Informs Initiator of Network Address

<iq type='result'
    from='streamhostproxy.example.net'
    to='initiator@example.com/foo'
    id='discover'>
  <query xmlns='http://jabber.org/protocol/bytestreams'>
         sid='vxf9n471bn46'>
    <streamhost
        jid='streamhostproxy.example.net'
        host='24.24.24.1'
        p
        zeroconf='_jabber.bytestreams'/>
  </query>
</iq>

Example 9. Proxy Returns Error to Initiator

<iq type='error'
    from='initiator@example.com/foo'
    to='streamhostproxy.example.net'
    id='discover'>
  <query xmlns='http://jabber.org/protocol/bytestreams'
         sid='vxf9n471bn46'/>
  <error code='403' type='auth'>
    <forbidden xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
  </error>
</iq>

Example 10. Proxy Returns Error to Initiator

<iq type='error'
    from='initiator@example.com/foo'
    to='streamhostproxy.example.net'
    id='discover'>
  <query xmlns='http://jabber.org/protocol/bytestreams'
         sid='vxf9n471bn46'/>
  <error code='405' type='cancel'>
    <not-allowed xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
  </error>
</iq>

Example 11. Initiation of Interaction

<iq type='set'
    from='initiator@example.com/foo'
    to='target@example.org/bar'
    id='initiate'>
  <query xmlns='http://jabber.org/protocol/bytestreams'
         sid='vxf9n471bn46'
         mode='tcp'>
    <streamhost
        jid='initiator@example.com/foo'
        host='192.168.4.1'
        port='5086'/>
    <streamhost
        jid='streamhostproxy.example.net'
        host='24.24.24.1'
        zeroconf='_jabber.bytestreams'/>
  </query>
</iq>

Example 12. Target Refuses Bytestream

<iq type='error'
    from='target@example.org/bar'
    to='initiator@example.com/foo'
    id='initiate'>
  <error code='406' type='auth'>
    <not-acceptable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
  </error>
</iq>

Example 13. Target Is Unable to Connect to Any StreamHost and Wishes to End Transaction

<iq type='error'
    from='target@example.org/bar'
    to='initiator@example.com/foo'
    id='initiate'>
  <error code='404' type='cancel'>
    <item-not-found xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/>
  </error>
</iq>

Example 16. Target Notifies Initiator of Connection

<iq type='result'
    from='target@example.org/bar'
    to='initiator@example.com/foo'
    id='initiate'>
  <query xmlns='http://jabber.org/protocol/bytestreams'
         sid='vxf9n471bn46'>
    <streamhost-used jid='streamhostproxy.example.net'/>
  </query>
</iq>

Example 19. Initiator Requests Activation of Bytestream

<iq type='set'
    from='initiator@example.com/foo'
    to='streamhostproxy.example.net'
    id='activate'>
  <query xmlns='http://jabber.org/protocol/bytestreams'
         sid='vxf9n471bn46'>
    <activate>target@example.org/bar</activate>
  </query>
</iq>

Example 20. Proxy Informs Initiator of Activation

<iq type='result'
    from='streamhostproxy.example.net'
    to='initiator@example.com/foo'
    id='activate'/>

Referències:

<iq type=’get’
from=’initiator@example.com/foo’
to=’target@example.org/bar’
id=’hello’>
<query xmlns=’http://jabber.org/protocol/disco#info’/>
</iq>

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:

[display_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

podcast 1×13: desafio networking [la solución]

Reading time: < 1 minute A pesar de que la solución se alcanzó y aplico durante los meses de agosto y septiembre, hasta hoy no he podido grabar la solución en este podcast. Espero que haya sabido explicarla bien y que quede claro como se ha hecho para solucionar el problema, sinó preguntad.

podcast 1×12: mail-gateway (GatV2)

Reading time: 2 – 4 minutes

GatV2 es un servidor de correo para hacer smart-relay o para que se entienda mejor el concepto para usar como frontend del servidor de correo de la empresa o del ISP (backend). GatV2 nos filtra todo el correo UCE y nos ofrece una herramienta de gestión del SPAM.

El siguiente esquema ofrece una idea de donde estaría el GatV2:

GatV2 network schema

A través del podcast podreis seguir cual es el proceso que sigue un correo para pasar através del GatV2. Obviamente no es sencillo entender a la primera todo lo que hace pero a través de este gráfico (pinchar encima para zoom), de la explicación y de la documentación de la web del proyecto espero que podais comprender mejor el proceso.

inside GatV2 process

Para ver las capturas de pantalla a las que se habla durante el podcast pasarós por la documentación del proyeco GatV2.

Finalmente el podcast:

[display_podcast]

El podcast dur alrededor de 1h, así pues Jorge me ha ayudado a hacer una tabla de contenidos del mismo así pues, podeis ir directamente al minuto que os interesa del podcast gracias a la siguiente información:

  • Presentación: 0-1m44s
  • Historia: 1m44s – 3m
  • En que consiste: 3m – 8m15s
  • Los componentes: 8m15s – 24m20s
  • Como funciona: 24m20s – 42m49s
  • WebUI del DSPAM: 42m49 – 55m55s
  • Despedida y cierre: 55m55s – 56m56s

En los próximos dias publicaremos (Jorge y yo) el podcast dividido en pequeños MP3 en l página del proyecto GatV2 para mayor comodidad de los interesados en el proyecto.

podcast 1×11: desafio networking [el problema]

Reading time: < 1 minute Hablando sobre el problema del articulo sobre el desafio de networking. También aprovecho para enlazar una buena referencia sobre como comprender los problemas de secuencias TCP:

Espero haberme explicado bien y haber podido describir el problema algo mejor que en el articulo anterior, ya que no es sencillo describir un problema tan inusual.

[display_podcast]

podcast 1×10: La solució als problemes de Twitter

Reading time: 1 – 2 minutes

Aquest podcast és un experiment entre el Pau Freixes i jo mateix parlant sobre com es podria solucionar els grans problemes de disponibilitat de twitter. Fa molt de temps que dono voltes en com es podria solucionar tota la problemàtica de twitter via un backend de jabber i xmpp. Aquest esquema descriu una mica la idea que s’explica al blog:

twitter schema solution

[display_podcast]

NOTA: a partir d’ara ja no posaré més música de fons als podcast i intentaré no fer gens o quasi gens de post-producció al que gravo. Ja que ni se’m dona bé ni tinc ganes d’invertir el temps en fer coses qu no m’aporten ni em motiven. Crec que el que intento transmetre ja queda clar.