Categories: Como se haceProxyWeb

SquidStat, analizador de logs de squid diferente y 100% cubano

Me complace anunciar la creación de esta útil herramienta (SquidStats), para el análisis y monitoreo de registros de squid. Esta herramienta que es 100% cubana y creada por Manuel Alberto Gorrin (AKA @king_0f_deathhh) nos permite mostrar de forma ordenada y en tiempo real las estadísticas de squid.

SQUIDSTATS nos brinda:

  1. Análisis de registros en tiempo real: Analiza las conexiones activas de Squid y muestra información detallada.
  2. Monitoreo de usuarios: Identifica las conexiones por nombre de usuario, URI y tipo de registro.
  3. Resumen de métricas:
    Total de datos leídos y escritos por cada conexión.
    Número de solicitudes por conexión.
    Uso del pool de retardo.
  4. Panel interactivo: Interfaz clara para una fácil interpretación de los datos.
  5. Estadísticas de caché de Squid:
    Entradas almacenadas.
    Capacidad usada y libre.
    Tamaño máximo y actual de la caché.
    Uso de espacio en disco e inodos.
    Antigüedad de los objetos en caché.
  6. Registros de usuarios:
    Monitoreo de la actividad del usuario
    Visualizaciones atractivas
    Filtrado y búsqueda avanzados
    Resultados paginados
  7. Gráficos principales:
    Actividad de los 20 usuarios principales
    Uso de datos de los 20 usuarios principales
    Total de usuarios
    Total de datos transmitidos
    Total de solicitudes
    Y más…

En esta entrada les mostrare como instalar esta útil herramienta en nuestros entornos de trabajo.

Si nos remitimos a su repositorio en github podemos observar los requisitos que debemos cumplir para una correcta instalación. Nuestro entorno sera Debian 12 y debemos cumplir los siguientes requisitos:

  • Tener instalado Python 3.10 o superior
  • Tener corriendo un servidor proxy Squid (obvio no creen)
  • squidclient instalado

Comenzaremos averiguando si tenemos python 3 y los paquetes necesarios :

dpkg -l | grep -q -E 'git|python3|python3-pip|python3-venv|python3-mysql|libmariadb-dev|curl'

Instalaremos los paquetes faltantes. Debajo muestro como instalarlos todos a pesar de poseer algunos:

apt install git python3 python3-pip python3-venv python3-mysql libmariadb-dev curl

El siguiente requisito es estrictamente obligatorio sin él, se mostrarían mal las gráficas y estadísticas de la web. Debemos editar la forma en que nuestro squid crea los logs, para ello agregaremos la siguiente línea en su configuración. Localizamos y editamos el fichero de configuración de squid:

nano /etc/squid/squid.conf

Agregamos las siguientes líneas en la parte correspondiente a la configuración de los logs:

logformat detailed \
  "%ts.%03tu %>a %ui %un [%tl] \"%rm %ru HTTP/%rv\" %>Hs %<st %rm %ru %>a %mt %<a %<rm %Ss/%Sh %<st
access_log /var/log/squid/access.log detailed 

Con esto lograremos tener una mayor información en los logs para mostrarla en la web.

NOTA: Si posee algún servicio aparte de parseo de logs que no soporta el formato detallado, entonces cree 2 ficheros de logs.

# Cache dir Logs:
access_log /var/log/squid/access.log
access_log /var/log/squid/squidstats.log detailed

Continuamos clonando el repo de SquidStats.

Creamos la carpeta que contendrá nuestra web de SquidStats.
mkdir -p /opt/squidstats
git clone https://github.com/kaelthasmanu/SquidStats.git /opt/squidstats

Una vez clonado, pasaremos a instalar los requerimientos de pyhton para el uso de la web. Para ello prepararemos un entorno virtual (venv) para no tener el error error: externally-managed-environment al instalar los requerimientos. Se puede instalar paquetes de Python en todo el sistema, usando apt install python3-xyz, donde xyz es el paquete que intentas instalar. Pero, para hacer más fácil el proceso usaremos pip install xyz. Creamos el entorno virtual así:

cd /opt/squidstats/
python3 -m venv "/opt/squidstats/venv"
source venv/bin/activate 
Instalamos pip y/o lo actualizamos
pip install --upgrade pip

Ahora procedemos a instalar los requerimientos que están en la carpeta que clonamos, con el nombre de requirements.txt

pip install -r /opt/squidstats/requirements.txt

Nos mostraría algo parecido a lo siguiente:

(venv) root@proxy:~/py-scripts# pip install -r /opt/squidstats/requirements.txt
Collecting Flask==3.1.0 (from -r /opt/squidstats/requirements.txt (line 1))
  Downloading flask-3.1.0-py3-none-any.whl.metadata (2.7 kB)
Collecting SQLAlchemy==2.0.39 (from -r /opt/squidstats/requirements.txt (line 2))
  Downloading sqlalchemy-2.0.39-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (9.6 kB)
Collecting flask_apscheduler==1.13.1 (from -r /opt/squidstats/requirements.txt (line 3))
  Using cached Flask_APScheduler-1.13.1-py3-none-any.whl
Collecting python-dotenv==1.0.1 (from -r /opt/squidstats/requirements.txt (line 4))
  Downloading python_dotenv-1.0.1-py3-none-any.whl.metadata (23 kB)
Collecting Werkzeug>=3.1 (from Flask==3.1.0->-r /opt/squidstats/requirements.txt (line 1))
  Downloading werkzeug-3.1.3-py3-none-any.whl.metadata (3.7 kB)
Collecting Jinja2>=3.1.2 (from Flask==3.1.0->-r /opt/squidstats/requirements.txt (line 1))
  Downloading jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)
Collecting itsdangerous>=2.2 (from Flask==3.1.0->-r /opt/squidstats/requirements.txt (line 1))
  Downloading itsdangerous-2.2.0-py3-none-any.whl.metadata (1.9 kB)
Collecting click>=8.1.3 (from Flask==3.1.0->-r /opt/squidstats/requirements.txt (line 1))
  Downloading click-8.1.8-py3-none-any.whl.metadata (2.3 kB)
Collecting blinker>=1.9 (from Flask==3.1.0->-r /opt/squidstats/requirements.txt (line 1))
  Downloading blinker-1.9.0-py3-none-any.whl.metadata (1.6 kB)
Collecting greenlet!=0.4.17 (from SQLAlchemy==2.0.39->-r /opt/squidstats/requirements.txt (line 2))
  Downloading greenlet-3.2.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.metadata (4.1 kB)
Collecting typing-extensions>=4.6.0 (from SQLAlchemy==2.0.39->-r /opt/squidstats/requirements.txt (line 2))
  Downloading typing_extensions-4.13.2-py3-none-any.whl.metadata (3.0 kB)
Collecting apscheduler<4.0.0,>=3.2.0 (from flask_apscheduler==1.13.1->-r /opt/squidstats/requirements.txt (line 3))
  Downloading APScheduler-3.11.0-py3-none-any.whl.metadata (6.4 kB)
Collecting python-dateutil>=2.4.2 (from flask_apscheduler==1.13.1->-r /opt/squidstats/requirements.txt (line 3))
  Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)
Collecting tzlocal>=3.0 (from apscheduler<4.0.0,>=3.2.0->flask_apscheduler==1.13.1->-r /opt/squidstats/requirements.txt (line 3))
  Downloading tzlocal-5.3.1-py3-none-any.whl.metadata (7.6 kB)
Collecting MarkupSafe>=2.0 (from Jinja2>=3.1.2->Flask==3.1.0->-r /opt/squidstats/requirements.txt (line 1))
  Downloading MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB)
Collecting six>=1.5 (from python-dateutil>=2.4.2->flask_apscheduler==1.13.1->-r /opt/squidstats/requirements.txt (line 3))
  Downloading six-1.17.0-py2.py3-none-any.whl.metadata (1.7 kB)
Downloading flask-3.1.0-py3-none-any.whl (102 kB)
Downloading sqlalchemy-2.0.39-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.2 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.2/3.2 MB 235.5 kB/s eta 0:00:00
Downloading python_dotenv-1.0.1-py3-none-any.whl (19 kB)
Downloading APScheduler-3.11.0-py3-none-any.whl (64 kB)
Downloading blinker-1.9.0-py3-none-any.whl (8.5 kB)
Downloading click-8.1.8-py3-none-any.whl (98 kB)
Downloading greenlet-3.2.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (583 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 583.9/583.9 kB 241.2 kB/s eta 0:00:00
Downloading itsdangerous-2.2.0-py3-none-any.whl (16 kB)
Downloading jinja2-3.1.6-py3-none-any.whl (134 kB)
Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)
Downloading typing_extensions-4.13.2-py3-none-any.whl (45 kB)
Downloading werkzeug-3.1.3-py3-none-any.whl (224 kB)
Downloading MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (23 kB)
Downloading six-1.17.0-py2.py3-none-any.whl (11 kB)
Downloading tzlocal-5.3.1-py3-none-any.whl (18 kB)
Installing collected packages: tzlocal, typing-extensions, six, python-dotenv, MarkupSafe, itsdangerous, greenlet, click, blinker, Werkzeug, SQLAlchemy, python-dateutil, Jinja2, apscheduler, Flask, flask_apscheduler
Successfully installed Flask-3.1.0 Jinja2-3.1.6 MarkupSafe-3.0.2 SQLAlchemy-2.0.39 Werkzeug-3.1.3 apscheduler-3.11.0 blinker-1.9.0 click-8.1.8 flask_apscheduler-1.13.1 greenlet-3.2.0 itsdangerous-2.2.0 python-dateutil-2.9.0.post0 python-dotenv-1.0.1 six-1.17.0 typing-extensions-4.13.2 tzlocal-5.3.1

Nota: Nótese el prefijo (venv) delante del promtp esto significa que estamos instalándolo para ese ambiente virtual. La salida de ustedes puede diferir a esta, debido a que poseía algunos paquetes ya instalados.

Finalmente debemos crear nuestro fichero env (enviroment) para la web.

Desactivamos nuestro entorno global usando 
deactivate
Ya no lo necesitamos, ya tenemos todos los requerimientos de pyhton
Accedemos al directorio de la web
cd /opt/squidstats/
Creamos un fichero .env en la raíz con el siguiente contenido:
VERSION=2
SQUID_HOST = "127.0.0.1"
SQUID_PORT = 3128
FLASK_DEBUG = "True"
DATABASE_TYPE="SQLITE"
SQUID_LOG = "/var/log/squid/access.log"
DATABASE_STRING_CONNECTION = "/opt/squidstats/"
REFRESH_INTERVAL = 60

Nota: SQUID_PORT es el puerto que está usando su proxy, puede variar. SQUID_LOG es el camino a los logs de squid, también pueden variar como por ejemplo que haya creado 2 logs con diferentes nombres. DATABASE_TYPE es el tipo de base de datos que usaremos, por defecto es SQLITE. REFRESH_INTERVAL es el tiempo en segundos que demora la web en refrescar la información, en un futuro se podrá cambiar vía web.

Solo resta correr nuestra web:

python3 app.py

Nos mostraría una salida como esta:

root@proxy:/opt/squidstats# python3 app.py
2025-04-21 12:09:25,352 - apscheduler.scheduler - INFO - Adding job tentatively -- it will be properly scheduled when the scheduler starts
 * Serving Flask app 'app'
 * Debug mode: on
2025-04-21 12:09:25,438 - werkzeug - INFO - WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on all addresses (0.0.0.0)
 * Running on http://127.0.0.1:5000
 * Running on http://192.168.10.3:5000
2025-04-21 12:09:25,438 - werkzeug - INFO - Press CTRL+C to quit
2025-04-21 12:09:25,440 - werkzeug - INFO -  * Restarting with stat
2025-04-21 12:09:26,087 - apscheduler.scheduler - INFO - Added job "init_scheduler" to job store "default"
2025-04-21 12:09:26,096 - werkzeug - WARNING -  * Debugger is active!
2025-04-21 12:09:26,102 - werkzeug - INFO -  * Debugger PIN: 128-239-045
2025-04-21 12:09:42,865 - werkzeug - INFO - 192.168.36.3 - - [21/Apr/2025 12:09:42] "GET / HTTP/1.1" 200 -
2025-04-21 12:09:42,982 - werkzeug - INFO - 192.168.36.3 - - [21/Apr/2025 12:09:42] "GET /static/all.min.css HTTP/1.1" 200 -
2025-04-21 12:09:42,983 - werkzeug - INFO - 192.168.36.3 - - [21/Apr/2025 12:09:42] "GET /static/cache.css HTTP/1.1" 200 -
2025-04-21 12:09:42,984 - werkzeug - INFO - 192.168.36.3 - - [21/Apr/2025 12:09:42] "GET /static/logs.css HTTP/1.1" 200 -
2025-04-21 12:09:42,984 - werkzeug - INFO - 192.168.36.3 - - [21/Apr/2025 12:09:42] "GET /static/styles.css HTTP/1.1" 200 -
2025-04-21 12:09:42,986 - werkzeug - INFO - 192.168.36.3 - - [21/Apr/2025 12:09:42] "GET /static/dist/output.css HTTP/1.1" 200 -
2025-04-21 12:09:42,987 - werkzeug - INFO - 192.168.36.3 - - [21/Apr/2025 12:09:42] "GET /static/navbar.css HTTP/1.1" 200 -
2025-04-21 12:09:43,169 - werkzeug - INFO - 192.168.36.3 - - [21/Apr/2025 12:09:43] "GET /static/webfonts/fa-solid-900.woff2 HTTP/1.1" 200 -
2025-04-21 12:09:43,463 - werkzeug - INFO - 192.168.36.3 - - [21/Apr/2025 12:09:43] "GET /actualizar-conexiones HTTP/1.1" 200 -
2025-04-21 12:09:43,465 - werkzeug - INFO - 192.168.36.3 - - [21/Apr/2025 12:09:43] "GET /favicon.ico HTTP/1.1" 404 -
2025-04-21 12:09:51,761 - werkzeug - INFO - 192.168.36.3 - - [21/Apr/2025 12:09:51] "GET /reports HTTP/1.1" 200 -
2025-04-21 12:09:51,797 - werkzeug - INFO - 192.168.36.3 - - [21/Apr/2025 12:09:51] "GET /static/styles.css HTTP/1.1" 304 -
2025-04-21 12:09:51,979 - werkzeug - INFO - 192.168.36.3 - - [21/Apr/2025 12:09:51] "GET /static/cache.css HTTP/1.1" 304 -
2025-04-21 12:09:51,981 - werkzeug - INFO - 192.168.36.3 - - [21/Apr/2025 12:09:51] "GET /static/dist/output.css HTTP/1.1" 304 -
2025-04-21 12:09:51,982 - werkzeug - INFO - 192.168.36.3 - - [21/Apr/2025 12:09:51] "GET /static/logs.css HTTP/1.1" 304 -
2025-04-21 12:09:51,983 - werkzeug - INFO - 192.168.36.3 - - [21/Apr/2025 12:09:51] "GET /static/navbar.css HTTP/1.1" 304 -
2025-04-21 12:09:51,984 - werkzeug - INFO - 192.168.36.3 - - [21/Apr/2025 12:09:51] "GET /static/all.min.css HTTP/1.1" 304 -
2025-04-21 12:09:56,088 - apscheduler.executors.default - INFO - Running job "init_scheduler (trigger: interval[0:00:30], next run at: 2025-04-21 12:09:56 CDT)" (scheduled at 2025-04-21 12:09:56.087248-04:00)
2025-04-21 12:09:56,088 - __main__ - INFO - Configurando scheduler para el archivo de log: /var/log/squid/access.log

Como se muestra en su corrida ya podemos acceder a su web. Abrimos en el navegador la siguiente direccion.

  http://ip del squidstats:5000

Nota: Las gráficas se irán llenando a medida que vaya analizando los registros con el nuevo formato que le definimos. Es decir que las entradas antiguas no se mostrarán. Las fotos pueden diferir del diseño actual debido a que es un proyecto en progreso.

Para garantizar que la aplicación se inicie automáticamente cuando se inicia el sistema, tenemos 2 opciones. La primera creando una tarea en el crontab:

Editamos el crontab
nano /etc/crontab
Agregamos lo siguiente:
@reboot root nohup python3 /opt/squidstats/app.py &

La segunda variante y mas robusta creando un servicio:

Creamos el fichero de servicio
nano /etc/systemd/system/squidstats.service
Agregamos el siguiente contenido
[Unit]
Description=SquidStats
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt/squidstats
ExecStart=/opt/squidstats/venv/bin/python /opt/squidstats/app.py
Restart=always
RestartSec=5
EnvironmentFile=/opt/squidstats/.env

[Install]
WantedBy=multi-user.target
EOF
Activamos y corremos el servicio nuevo
systemctl daemon-reload
systemctl enable squidstats.service
systemctl start squidstats.service

Para finalizar, les informo que el creador nos da un script que automatiza toda la instalación, y nos hace todo el trabajo. Sé que dirán que porque no comencé por ahí, pero sí lo hiciera no tendría sentido crear un tutorial. ¿Cómo podemos usarlo?

Descargamos el script
wget https://github.com/kaelthasmanu/SquidStats/releases/download/0.2/install.sh
Le damos permiso de ejecución
chmod +x install.sh
Ejecutamos
./install.sh

El script también nos permite actualizar la web una vez que el desarrollador libere una nueva versión.

Descargamos el script wget https://github.com/kaelthasmanu/SquidStats/releases/download/0.2/install.sh
Le damos permiso de ejecución
chmod +x install.sh
Ejecutamos
./install.sh --update

Como extra les enseñaré a usar MariaDB como base de datos para nuestra web. Para ello montaremos un servidor central de bases de datos que recibirá datos de la aplicación permitiéndonos tener un historial de navegación. Comenzamos con los requisitos para nuestro servidor de base de datos.

  • Debian 12 o Ubuntu 24 como sistema operativo.
  • MariaDB 11 o superior

Si usasmos Debian 12:

apt update && apt upgrade -y
apt install -y curl gnupg2 ca-certificates lsb-release debian-archive-keyring apt-transport-https

Crearemos el repositorio actualizado de MARIADB:

cat <<EOF >/etc/apt/sources.list.d/mariadb.sources
# MariaDB 11.4 repository list - created 2023-11-20 07:47 UTC
# https://mariadb.org/download/
X-Repolib-Name: MariaDB
Types: deb
# deb.mariadb.org is a dynamic mirror if your preferred mirror goes offline. See https://mariadb.org/mirrorbits/ for details.
# URIs: https://deb.mariadb.org/11.1/debian
URIs: https://archive.mariadb.org/mariadb-11.4.1/repo/debian/
Suites: bookworm
Components: main
Signed-By: /etc/apt/keyrings/mariadb-keyring.pgp
EOF

curl -o /etc/apt/keyrings/mariadb-keyring.pgp 'https://mariadb.org/mariadb_release_signing_key.pgp'

Si usamos Ubuntu 24:

apt update && apt upgrade -y
apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring apt-transport-https

Crearemos el repositorio actualizado de MARIADB:

cat <<EOF > /etc/apt/sources.list.d/ondrej-ubuntu-php-noble.sources
Types: deb
URIs: https://ppa.launchpadcontent.net/ondrej/php/ubuntu/
Suites: noble
Components: main
Signed-By: /usr/share/keyrings/ondrej-ubuntu-php.gpg
EOF

curl -o /usr/share/keyrings/mariadb-keyring.pgp 'https://mariadb.org/mariadb_release_signing_key.pgp'

echo "deb [signed-by=/usr/share/keyrings/mariadb-keyring.pgp] https://mirror1.hs-esslingen.de/pub/Mirrors/mariadb/repo/11.4/ubuntu $(lsb_release -cs) main" \
    | sudo tee /etc/apt/sources.list.d/mariadb.list

Instalamos MARIADB 11

apt update && apt install -y mariadb-server

Ahora vamos a reforzar el servidor de base de datos usando la herramienta incluida “mysql_secure_installation”. Durante una primera instalación no hay contraseña root, por lo que puedes confirmar la consulta con ENTER. Se recomienda establecer una contraseña directamente, el cuadro de diálogo correspondiente aparecerá automáticamente:

mariadb-secure-installation
Enter current password for root (enter for none): <ENTER> o escribe la contraseña
Switch to unix_socket authentication [Y/n] Y
Change the root password? [Y/n] Y
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Ahora detenga el servidor de base de datos y luego guarde la configuración predeterminada para que pueda realizar ajustes inmediatamente después.

systemctl stop mariadb
mkdir -p /var/log/mysql
chown -R mysql:mysql /var/log/mysql
mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
nano /etc/mysql/my.cnf

Copie el siguiente contendio en el archivo my.cnf nuevo que creamos:

[client]
default-character-set = utf8mb4
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log
nice = 0
socket = /var/run/mysqld/mysqld.sock
[mysqld]
# performance_schema=ON
basedir = /usr
binlog_format = ROW
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
datadir = /var/lib/mysql
default_storage_engine = InnoDB
expire_logs_days = 2
general_log_file = /var/log/mysql/mysql.log
innodb_buffer_pool_size = 1G
innodb_log_buffer_size = 32M
innodb_log_file_size = 512M
innodb_read_only_compressed=OFF
join_buffer_size = 2M
key_buffer_size = 512M
lc_messages_dir = /usr/share/mysql
lc_messages = en_US
log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
log_bin_trust_function_creators = true
log_error = /var/log/mysql/mysql_error.log
log_slow_verbosity = query_plan
log_warnings = 2
long_query_time = 1
max_connections = 100
max_heap_table_size = 64M
max_allowed_packet = 512M
max-binlog-size = 512M
max_binlog_total_size = 2G
myisam_sort_buffer_size = 512M
port = 3306
pid-file = /var/run/mysqld/mysqld.pid
query_cache_limit = 0
query_cache_size = 0 
read_buffer_size = 2M
read_rnd_buffer_size = 2M
skip-name-resolve
socket = /var/run/mysqld/mysqld.sock
sort_buffer_size = 2M
table_open_cache = 400
table_definition_cache = 800
tmp_table_size = 32M
tmpdir = /tmp
transaction_isolation = READ-COMMITTED
user = mysql
wait_timeout = 600
[mariadb-dump]
max_allowed_packet = 512M
quick
quote-names
[isamchk]
key_buffer = 16M

Reincie el servicio.

systemctl restart mariadb.service

Crearemos la base de datos de SquidStats, el usuario y la contraseña:

mariadb -uroot -p -e "CREATE DATABASE squidstatsdb; CREATE USER 'squidstatsdbuser'@'%'  identified by 'contraseña'; GRANT ALL PRIVILEGES on squidstatsdb.* to 'squidstatsdbuser'@'%'; FLUSH privileges;"

Adapte a sus necesidades las siguientes variables:

  • Nombre de la base de datos: squidstatsdb
  • Usuario de la base de datos: squidstatsdbuser
  • Contraseña de usuario de la base de datos: contraseña

NOTA: Con el comodín % nos aseguramos de que la base de datos pueda ser accedida desde cualquier IP.

Solo nos resta configurar el servidor para que se pueda acceder externamente, para ello configuramos el fichero 50-server.cnf que se encuentra en /etc/mysql/mariadb.conf.d/

nano /etc/mysql/mariadb.conf.d/50-server.cnf

Buscamos la línea bind-address y sustituimos por 0.0.0.0 como se muestra a continuación:

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 0.0.0.0

Reiniciamos el servicio

service mariadb restart

El script de instalación de SquidStats nos permite elegir entre usar SQLITE y MARIADB. Si elegimos MARIADB entonces debemos dar la cadena de conexión con nuestro servidor usando el siguiente formato (mysql+pymysql://user:password@host:port/db).

mysql+pymysql://squidstatsdbuser:contraseña@ipmariadbserver:3306/squidstatsdb

En nuestro caso:

  • User: squidstatsdbuser
  • Password: contraseña
  • Host: la ip del servidor de BD
  • Port: 3306 (puerto por defecto de MARIADB)
  • DB: squidstatsdb (nombre de la base de datos)

Una vez establecida la cadena, nuestro fichero venv nos muestra esa información:

VERSION=2
SQUID_HOST = "127.0.0.1"
SQUID_PORT = 3128
FLASK_DEBUG = "True"
DATABASE_TYPE="MARIADB"
SQUID_LOG = "/var/log/squid/access.log"
DATABASE_STRING_CONNECTION = "mysql+pymysql://squidstatsdbuser:contraseña@ipmariadbserver:3306/squidstatsdb"
REFRESH_INTERVAL = 60

Nótese las lineas de DATABASE_TYPE y DATABASE_STRING_CONNECTION. Si lo estamos instalando de forma manual, solo debe editar estas líneas para coincidir con la base de datos seleccionada.
Una vez iniciado el servicio de SquidStats nos dirigimos a la web y ya debería estar mostrándonos las graficas y el registro de usuarios. Si no lo hace es que nuestra base de datos no se está llenando de la información que envía la web y debe revisar bien su configuración. Si desea revisar el porque el servidor de bases de datos no esta recibiendo informacion pues instale en el cliente (proxy con squidstats) el siguiente paquete:

apt install mariadb-client -y

Luego corremos el siguiente comando para ver si accedemos remotamente al servidor de MARIADB.

mysql -usquidstatsdbuser -h ipservermariadb -p

Suministramos la contraseña del usuario squidstatsdbuser y debemos poder acceder al servidor. Si algo falla, revise la configuración de su firewall tanto en el cliente como en el servidor y la configuración de su servidor de MARIADB.

Como palabras finales felicitar al colega Manuel Alberto Gorrin por esta maravillosa herramienta que nos ayudara en el día a día de nuestras tareas. Pasen por su github y apoyenlo dándole una estrella a su proyecto. Si desean contribuir en el desarrollo de la misma háganlo saber entrando a nuestro grupo de telegram

¿De cuánta utilidad te ha parecido este contenido?

Alexander Rivas Alpizar

Administrador de Redes IDEAR Cienfuegos

Share
Published by
Alexander Rivas Alpizar

Recent Posts

n8n Transformando la Automatización de Flujos de Trabajo con Inteligencia Artificial

La inteligencia artificial está revolucionando las industrias al automatizar tareas, predecir patrones y permitiendo tomar…

3 semanas ago

Alta disponibilidad de sus base de datos con Percona XtraDB Cluster en Kubernetes

Uno de los grandes retos al que nos podemos enfrentar cuando una aplicación crece, es…

2 años ago

Home automation (Parte 3) – ESPHome

Qué es lo que deseo hacer en este capítulo? Básicamente un sonoff, quiero encender/apagar las…

2 años ago

Home automation (Parte 2) – Home Assistant

Hace algunos meses estoy escuchando hablar del proyecto Home Assistant (HA). En palabras literales del…

2 años ago

Home automation (Parte 1)

Desde hace varios meses vengo con la idea de automatizar la casa donde vivo. Poco…

2 años ago