analisis de datos de access logs de sutty para desactivar TLSv1 y v1.1
Find a file
2023-08-01 17:54:40 -03:00
.gitignore analisis 2023-08-01 17:54:40 -03:00
graph.sql analisis 2023-08-01 17:54:40 -03:00
graph_useragent.sql analisis 2023-08-01 17:54:40 -03:00
header_done.tsv analisis 2023-08-01 17:54:40 -03:00
readme.md analisis 2023-08-01 17:54:40 -03:00

analisis de datos de access logs de sutty

mi teoría es que el uso de TLSv1 y TLSv1.1 es muy baja, y deberíamos desactivarla para no poner en riesgo al resto de nuestrxs usuarixs.

  1. sincronizar archivos

    rsync -vP root@gethen.sutty.nl:/srv/sutty/srv/panel.sutty.nl/_storage/'*.psql.gz' .
    
  2. descomprimir logs

    gunzip -d *.gz
    
  3. convertir en un TSV gigante (NOTA: esto está escrito en fish, aunque no debería ser tan complicado adaptar a otras shells)

    for i in *.psql
      grep -E '.{8}-.{4}-.{4}-.{4}-.{12}' $i
    end > x.tsv
    # limpiar espacio..
    rm *.psql
    

    tarea para lx lectorx: se pueden combinar estos tres pasos en uno y ahorrar en espacio de disco y tiempo ;)

  4. generar un archivo de un par de entries para especificar las key/value de cada cosa. ya lo hice, podés saltear este paso y usar header_done.tsv

    head x.tsv > header.tsv
    # editar header.tsv para tener valores de key al menos para los valores que nos importan
    # usé libreoffice calc para hacerlo
    
  5. importar TSV a una base de datos SQLite (inspirado en SQLite no es una base de datos de juguete)

    sqlite x.sqlite
    > .mode tabs
    > .import "|cat header_done.tsv x.tsv" logs
    # van a haber errores... pero no son tantos
    # a partir de cierto punto hay columnas de mas.. se ignoran
    
  6. (opcional) ¿usas btrfs? forzalo a comprimir la BD de SQLite con ZSTD:

    sudo btrfs filesystem defragment -czstd x.sqlite
    

    esto me lo deja a tan solo 11% del tamaño del archivo original ;)

  7. correr query que retora gráfico (también inspirado en el artículo de arriba)

    sqlite3 x.sqlite "$(cat graph.sql)"
    

    esto devuelve varias "tls_version" basura.. las filtro de lo próximo, que total son pocas requests:

    |1206821|****
    TLSv1|1689|*
    TLSv1.1|24|*
    TLSv1.2|1222869|****
    TLSv1.3|8805130|******************************
    

    la primera línea son requests sin HTTPS. es normal, porque se usan para redirigir de HTTP a HTTPS y para Tor (porque tiene su propio cifrado).

    las requests de TLSv1 y v1.1 son algo así como 0.2%... no solo eso, sino que parecen provener generalmente de bots o navegadores que no soportamos de todas maneras (como Internet Explorer 9, 8 u 7), que se puede ver con sqlite3 x.sqlite "$(cat graph_useragent.sql)".