LinuxParty
He intentado averiguar que IPs "externas" estaban haciendo consultas a la BBDD de MySQL, bueno, yo al menos, por mucho que lo he intentado no he conseguido conocer más IP que la del server de la BBDD, y ésta, no es la IP que quiero conocer.
Por lo que trasteando un poco, buscando por allí y por acá, vi algunos scripts de Python que me indicaban que consultas se estaban haciendo, (pero no las IP "externas" a ellas asociadas) la mayoría de estos guiones están basados en "processlist", una función incluida en MySQL, así que me dije... pues ya está estoy, voy a hacer el siguiente script, que aquí os dejo para vuestro regocijo, y que es lo más que se aproxima a lo que yo buscaba.
caputuraStart=$(date +%Y-%m-%d-%HH-%MM-%SS) echo "INICIO CAPTURA: $caputuraStart " # Bucle que puedes cambiar a tu elección, pero 100 consultas son suficientes. for i in {1..100}; do # Optenemos las IP (en un server, casi todas irán o al puerto 80 o 443) netstat -ntp | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 # usamos mysqladmin, con usuario y contraseña para ver "processlist" mysqladmin -u userdebasedatos -pcontraseña processlist --verbose done
caputuraStop=$(date +%Y-%m-%d-%HH-%MM-%SS) echo "FIN CAPTURA..: $caputuraStop
El script (o guión) te dice en la línea de "netstat" que IP que tenga conexión establecida (no en espera) está conectado al equipo, en la siguiente línea, mysqldadmin te dirá que consulta de MySQL que se está ejecutando. De esta forma podrías asociar IPs a consultas (que puedes ampliar en programación dentro de la aplicación php-mysql, por ejemplo, y que ya se escapa totalmente de la intención este artículo)
Después, por ejemplo, para los "chicos malos" puedes usar este script y bloquear las IP rápidamente:
#!/bin/bash if [ "$2" == "" ] ; then RangoIP=32 else RangoIP="$2" fi if [ "$1" == "" ] ; then echo "$0 IP Rango" echo "$0 192.168.1.7 32" echo "Bloqueará 192.168.1.7/32" exit 0 else IP="$1" fi echo "--------------------------" echo "iptables -I INPUT -s $IP/$RangoIP -j REJECT " iptables -I INPUT -s $IP/$RangoIP -j REJECT iptables -L -n | grep $IP
Puede contratar ExtreHost para temas profesionales con sus servidores. No lo dude, contáctenos.
-
Bases de Datos
- La última versión de MySQL es decepcionante, dicen algunos expertos en bases de datos
- Cómo instalar MongoDB en AlmaLinux 9 con ejemplos de uso
- Cómo instalar PostgreSQL 16 en distribuciones basadas en RHEL, AlmaLinux, RockyLinux y Fedora
- Cómo instalar PhpMyAdmin con Apache en sistemas RHEL, Alma Linux, Rocky Linux, Centos y Fedora
- Cómo hacer una copia de seguridad y restaurar una base de datos PostgreSQL en Linux
- Cómo instalar phpPgAdmin y PostgreSQL en CentOS, AlmaLinux, RHEL, RockyLinux y similares
- 20 comandos mysqladmin para la administración de bases de datos MYSQL/MariaDB
- Copiar y restaurar copias de seguridad de MySQL / MariaDB para la administración de bases de datos
- Crear Copias de Seguridad (Backups) de MariaDB o MySQL Automáticas con AutoMySQLBackup
- Grafana, software para análisis y supervisión
- Cómo configurar la replicación MariaDB (Maestro-Esclavo) en CentOS / RHEL y Debian
- Arrancar al inicio MySQL / MariaDB con Linux.
- Conocer que IPs están conectados a MySQL haciendo consultas a la base de datos.
- MariaDB, guía práctica para Administradores Linux
- Cómo configurar MariaDB Galera Cluster 5.5 en CentOS, RHEL y Fedora
Comentarios
iptables -I INPUT -s $IP/$RangoIP -j REJECT
por
iptables -I INPUT -s $IP/$RangoIP -j DROP
en esos casos es recomendable utilizar DROP en lugar de REJECT, para descartar paquetes y evitar trafico de red, también es mas seguro.
Saludos!