This commit is contained in:
Cat /dev/Nulo 2023-08-01 17:54:40 -03:00
commit f257dea4d1
5 changed files with 113 additions and 0 deletions

3
.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
header.tsv
x.sqlite
x.tsv

17
graph.sql Normal file
View file

@ -0,0 +1,17 @@
with amounts as (
select
tls_version,
count(*) as count
from logs
group by tls_version
),
max as (
select max(count) as value
from amounts
)
select
tls_version,
count,
printf('%.' || (count * 30 / max.value) || 'c', '*') as bar
from amounts, max
order by tls_version;

19
graph_useragent.sql Normal file
View file

@ -0,0 +1,19 @@
with amounts as (
select
user_agent,
count(*) as count
from logs
where tls_version = "TLSv1" OR tls_version = "TLSv1.1"
group by user_agent
),
max as (
select max(count) as value
from amounts
)
select
user_agent,
count,
printf('%.' || (count * 30 / max.value) || 'c', '*') as bar
from amounts, max
order by count;

1
header_done.tsv Normal file
View file

@ -0,0 +1 @@
uuid dominio http_version method path status_code encoding accept-encoding lang user_agent tls_version tls_algos tls_algos2
1 uuid dominio http_version method path status_code encoding accept-encoding lang user_agent tls_version tls_algos tls_algos2

73
readme.md Normal file
View file

@ -0,0 +1,73 @@
# 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](https://blog.mozilla.org/security/2018/10/15/removing-old-versions-of-tls/) al resto de nuestrxs usuarixs.
1. sincronizar archivos
```fish
rsync -vP root@gethen.sutty.nl:/srv/sutty/srv/panel.sutty.nl/_storage/'*.psql.gz' .
```
2. descomprimir logs
```fish
gunzip -d *.gz
```
3. convertir en un TSV gigante (NOTA: esto está escrito en [fish](https://fishshell.com/), aunque no debería ser tan complicado adaptar a otras shells)
```fish
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`
```fish
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](https://sysarmy.com/blog/posts/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)"`.