Documentation : Tunneling SSH pour PHP
Date de publication : 19.7.2004
Date de modification : 12.2.2005
|
|
But du document
Dans ce document, nous allons traiter de la mise en place d'un tunneling SSH STunnel permettant des connexions entre deux serveurs SQL, LDAP, au travers du langage PHP.
Pré-requis
Un serveur Linux
Un accès root sur la machine Linux.
Une bonne compilation de STunnel.
Mise en condition
Lors d'une connexion PHP - MySQL classique, sur un serveur distant, les informations transitent en clair dans le réseau internet.
Si des échanges de données sensible doivent être effectuée, il nous faut absolument les crypter.
Exemple d'interception de données
Création du groupe et de l'utilisateur pour le serveur MySQL
Dans le root shell tapez :
shell > tcpdump -l -i eth0 -w - host ipdelamachine src or dst port 3306 | strings
3.23.41
p[W"AaG|
clientdb
RHHHNF[Y
base
SELECT id FROM offer WHERE offerstate='active'
offer
1345
1344
1347
1243
L'on voit clairement toutes les requêtes transiter entre les deux serveurs.
Solutions
Une protection des données lors du transite des informations est à effectuer.
Un cryptage des donées est alors préconisé.
La méthode du tunneling SSH sera utilisée.
Le logiciel stunnel se compose en deux parties, une partie cliente et une partie serveur.
Commandes Stunnel à lancer sur le Serveur 1
Commande client :
shell> stunnel -P/tmp/ -c -d 3308 -r server2 :3307
Commande serveur :
shell> stunnel -P/tmp/ -p /chemindaccesaucertificat/stunnel.pem -d 3307 -r 3306
Commandes Stunnel à lancer sur le Serveur 2
Commande client :
shell> stunnel -P/tmp/ -c -d 3308 -r server1 :3307
Commande serveur :
shell> stunnel -P/tmp/ -p /chemindaccesaucertificat/stunnel.pem -d 3307 -r 3306
Le prochain document traitera de l'utilisation de STunnel avec le gestion des certificats d'authentification
Modification PHP
Au niveau du code PHP, les modifications à apporter se situeront dans la fonction mysql_connect ou mysql_pconnect.
$Hydrogen_link = mysql_connect("127.0.0.1:3308","login","pwd");
Modification MySQL
Au niveau de MySQL un utilisateur devra être présent :
Sur le serveur 1 et 2
GRANT ALL on db.* to login@127.0.0.1 IDENTIFIED by "pwd";
Contributeur : Eric Romang