[Résolu] Ulogd + mysql5: can't establish database connection


#1

Bonjour tout le monde, :]

Bon je vais essayer d’expliquer mon probleme en détails :
Connaissez-vous ulogd ? Pour ceux qui ne savent pas il s’agit d’un démon pouvant servir de cible à des règles iptables. Comme vous le savez sans doute une règle de filtrage iptables peut permettre d’envoyer les paquets vers une cible LOG, ce qui permet de les enregistrer dans /var/log/messages. Comme ce fichier contient tous les messages du noyau (si je ne m’abuse) il n’est pas très pratique d’en extraire les paquets issus des enregistrements de notre règle iptables, c’est pourquoi ulog a été développé. En fait ce démon permet simplement d’enregistrer les paquets à l’endroit où l’on souhaite, c’est à dire qu’au lieu d’être dans /var/log/messages ils peuvent être enregistrés dans un fichier de notre choix, une base de données mysql, une base de données postgresql, ou encore une base de données sqlite. Son utilisation n’a rien de difficile en soit, si vous savez rediriger les paquets vers une cible LOG avec iptables, il vous suffit de remplacer LOG par ULOG et cela fonctionne parfaitement (à condition que ulog soit installé et correctement configuré).
Site officiel d’ulogd : /http://netfilter.org/projects/ulogd/index.html

Bon ce que je voudrais faire dans l’histoire c’est ceci : je cherche à faire fonctionner ensemble ulog et mysql 5.
Je sais, je sais, pourquoi la version 5 ? C’est un impératif, il s’agit du seul SGBD ( definition : /http://fr.wikipedia.org/wiki/SGBD ) relativement rapide capable de gérer les “triggers” ( definition : /http://en.wikipedia.org/wiki/Database_trigger ).

J’ai essayé avec mysql 4 (sans les triggers bien sur, vu qu’il ne les gère pas, d’où l’intérêt de prendre la version 5), cela fonctionne parfaitement. J’ai même fait un script, alors pour ceux que cela interesse :

#! /bin/bash

# Mot de passe root de mysql :
pass_root="pass"
# Nom d'utilisateur ulog :
nom_user="ulog"
# Mot de passe d'utilisateur ulog :
pass_user="ulogpass"
# Nom de la base de données :
nom_db="ulogdb"
# Fichier contenant la structure de la base :
path_struct="./struct_mysql4.table"

# Installation de ulogd, mysql, etc
apt-get install ulogd mysql-server ulogd-mysql
echo
/etc/init.d/ulogd stop

# Definition des regles iptables
iptables -t filter -F
iptables -t filter -A INPUT -p all -j ULOG
iptables -L

echo
echo "Edition de /etc/ulogd.conf"
sleep 2
nano /etc/ulogd.conf

echo

mysqladmin -u root password ${pass_root}

mysql -p${pass_root} -e"create database ${nom_db}"

mysql -p${pass_root} -D ${nom_db} -e"source ${path_struct}; show tables; grant select,insert,update,drop,delete,create temporary tables on ${nom_db}.* to ${nom_user}@localhost identified by '${pass_user}'; flush privileges;"

/etc/init.d/mysql restart
/etc/init.d/ulogd start
echo
echo "Fin du script"

Avec ceci comme structure de table /https://svn.netfilter.org/netfilter/trunk/ulog/ulogd/doc/mysql.table
Et cela enregistre comme je voudrais.
Je me suis basé sur cet article pour ce script : /http://ftp.traduc.org/doc-vf/gazette-linux/html/2005/121/lg121-A.html

Maintenant je voudrais faire la même chose avec mysql 5, malheureusement pour moi, le .deb n’étant pas encore disponible je suis obligé de faire l’installation à la main, de même que la configuration du /etc/mysql/my.cnf.
J’ai tenté de faire un script là aussi, mais cela ne fonctionne pas, mysql s’installe bien et est utilisable mais ulog me renvoit un “can’t establish database connection” dans /var/log/ulog/ulogd.log et le démon se ferme juste après.

Je récupère cette version de mysql : /http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-standard-5.0.19-linux-i686-glibc23.tar.gz/from/http://ftp.club-internet.fr/mirrors/ftp.mysql.com/
Et voici le script en question :

#! /bin/bash

# Mot de passe root de mysql :
pass_root="pass"
# Nom d'utilisateur ulog :
nom_user="ulog"
# Mot de passe d'utilisateur ulog :
pass_user="ulogpass"
# Nom de la base de données :
nom_db="ulogdb"
# Fichier contenant la structure de la base :
path_struct="./struct_mysql5.table"

# Installation de ulogd, mysql, etc
apt-get install ulogd ulogd-mysql
echo
/etc/init.d/ulogd stop

# Definition des regles iptables
iptables -t filter -F
iptables -t filter -A INPUT -p all -j ULOG
iptables -L

echo
echo "Edition de /etc/ulogd.conf"
sleep 2
nano /etc/ulogd.conf

echo

groupadd mysql
useradd -g mysql mysql

cp mysql-standard-5.0.19-linux-i686-glibc23.tar.gz /usr/local/

cd /usr/local
tar zxf mysql-standard-5.0.19-linux-i686-glibc23.tar.gz

ln -s mysql-standard-5.0.19-linux-i686-glibc23 mysql

cd mysql

./scripts/mysql_install_db
chown -R root  .
chown -R mysql data
chgrp -R mysql .

support-files/mysql.server start

nano /etc/mysql/my.cnf

bin/mysqladmin -u root password ${pass_root}
bin/mysql -p${pass_root} -e"create database ${nom_db}"

bin/mysql -p${pass_root} -D ${nom_db} -e"source /home/utilisateur/iptables_ulog/install_mysql5/struct_mysql5.table; show tables; grant select,insert,update,drop,delete,create temporary tables on ${nom_db}.* to ${nom_user}@localhost identified by '${pass_user}'; flush privileges;"

support-files/mysql.server restart
/etc/init.d/ulogd start
echo
echo "Fin du script"

Avec la même structure de base que precedemment.

Je pense que le problème vient du fait que je ne configure pas correctement le /etc/mysql/my.cnf, pourtant j’ai changé le chemin du fichier socket par /tmp/mysql.sock et ce genre de choses…
A moins que ce ne soit ulogd qui ne supporte vraiment pas mysql 5 mais bon ce serait assez curieux O_o.

Je teste ça sous une Ubuntu mais une solution pour une Sarge me va très bien, de même d’ailleurs que pour n’importe qu’elle autre distribution en fait (du moment que c’est adaptable sur une Debian lol).
Donc en bref si vous avez une idée pour faire fonctionner ces trucs là ensemble (ou quelque chose qui m’aurait échappé), j’en veux bien.

En vous remerciant par avance. :]


#2

Et pourquoi ne pas plutot utiliser postgresql qui lui est un vrai SGBDR depuis pas mal de temps déjà MySql ne venant que tout recemment y arriver??

Postgresql gere aussi tres bien les triggers si je me souviens bien.


#3

C’est exact, j’ai d’ailleurs testé la chose.

Le problème que j’ai trouvé à Postgresql est qu’il est en moyenne 2 fois plus lent que mysql (d’après des “benchmarks” du Net), mais aussi, après avoir testé j’ai remarqué que ulog ne remplissait pas certains des champs de la table de postgresql, notamment le timestamp (“local_time” avec postgresql) qu’il remplit dans la table de mysql.

A la limite, la “lourdeur” de postgresql ne me dérange pas trop, je pourrais m’en accomoder, mais j’ai obligatoirement besoin du timestamp en fait, d’où l’utilisation de mysql. Enfin… Cela à moins que vous n’ayez une solution pour récupérer le timestamp avec postgresql…

Merci. :]


#4

Ca m’étonne que tu n’ai pas trouvé le package pour mysql-5.0ash@seal:~$ sudo apt-cache policy mysql-server-5.0 mysql-server-5.0: Installé : 5.0.18-9 Candidat : 5.0.18-9 Table de version : *** 5.0.18-9 0 550 http://ftp.fr.debian.org etch/main Packages 33 http://ftp.fr.debian.org unstable/main Packages 100 /var/lib/dpkg/status

Regarde du coté de ulogd voir comment il gere les bases de données (si il y a une version de postgresql de préconiser ou autre) car au niveau du timestamp ca devrait passer quand meme. Essaye une reconfiguration avec le package debian de mysql peut etre que ca pourra résoudre tes soucis.


#5

Huhu! Etch bon sang mais c’est bien sûr. :]
Oui en fait j’avais oublié d’ajouter les dépots testing. Je les ai donc mis et cela fonctionne très bien, mysql 5 s’installe et se configure tout seul, je logge bien ce qu’il me faut.

Merci beaucoup Ashgenesis pour ton aide, et aux autres d’avoir pris le temps de me lire. :slightly_smiling: