analisis
This commit is contained in:
commit
f257dea4d1
5 changed files with 113 additions and 0 deletions
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
header.tsv
|
||||||
|
x.sqlite
|
||||||
|
x.tsv
|
17
graph.sql
Normal file
17
graph.sql
Normal 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
19
graph_useragent.sql
Normal 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
1
header_done.tsv
Normal file
|
@ -0,0 +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
73
readme.md
Normal 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)"`.
|
Loading…
Reference in a new issue