La résolution DNS (Domain Name System)

Sur le Web, on utilise rarement directement l’adresse IP. A la place, on utilise un nom de domaine.

Le systeme DNS sera chargé de traduire les noms de domaine en adresse IP.

Décomposition d’un nom de domaine :

http://www.filipiada.info/

  • « fr » est le TLD (Top Level Domain ) du domaine.

Il existe deux sortes de TLD : les gTLD (generic TLD) que sont par exemple les .com, .net …

Il y à aussi les ccTLD (country code TLD) comme .fr, .de, .sp…

  • « filipiada.info» est le SLD (Second Level Domain)
  • « www » est le Host.

Les noms de domaines sont gérés par l’ICANN (Internet Corporation for Assigned Names and Numbers), ils délivrent les autorisations pour les TLD.

Pour la France, c’est l’AFNIC(Association française pour le nommage Internet en coopération) qui est chargé du .fr

Pour des raisons de sécurité, on enregistre les infos du domaine dans au minimum 2 serveurs dns : Si l’un tombe en panne, il y aura au moins l’autre serveur qui pourra répondre.

Les enregistrements DNS

Il y a plusieurs catégories d’enregistrement :

  • A = permet de faire l’association entre un hôte et une adresse IPv4.
  • AAAA = permet de faire l’association en un hôte et une adresse IPv6.
  • CNAME = canonical name. Permet de faire l’association entre un hôte et un autre nom d’hôte.
  • MX = mail exchanger. Permet l’association entre un domaine et un serveur de messagerie.
  • NS = name server. Permet l’association entre un domaine et un serveur de noms.

Sous Windows, pour lire les informations d’un serveur DNS, on peut utiliser le programme nslookup.

On peut également afficher le cache DNS local en faisant ipconfig /displaydns dans une invite de commande.

Il existe une Racine DNS (propriété de l’ICANN) que l’on appele les serveurs « Root » (racine).

On peut prouver leur existence grace a nslookup en faisant un set type=NS, suivit de « . » pour racine, on obient les adresses des serveurs root DNS.

Si ses serveurs « tombent » tous en même temps, le routage DNS d’Internet sera alors impossible. Il sera en revanche toujours possible d’acceder a des sites par les adresses IP.

Anonymat sur Internet avec le réseau TOR ?

L’anonymat sur Internet, un sujet dans le vent…

N’étant pas un pro du réseau, du modele OSI et de tout ces trucs (:D), je vais simplifier les choses :

Le réseau TOR (The Onion Router) est en fait une sorte de réseau virtuel utilisant le réseau « physique » ouvert (Internet). N’importe quelle machine, par le biais d’un logiciel comme Vidalia permet de rejoindre le réseau en tant que relais ou « proxy ».

Quand un client connecté au réseau TOR fait une requête, celle-ci va prendre un chemin aléatoire pour arriver à la destination de cette requête. A chaque relais, le traffic sera chiffré avec une clé différente (dans l’idée de SSL, avec une clé publique). Voilà en gros ce qui couvre l’anonymat.

Vous pouvez télécharger un « installeur » ici, qui installera une suite de logicielle permettant de se connecter au réseau TOR et de l’utiliser avec un navigateur par exemple.

Les étapes de configurations sont assez simples sur un navigateur (ou tout logiciels se connectant à internet… ;) ) : il suffit de trouver dans les options de l’application le réglage proxy et mettre en adresse 127.0.0.1, et mettre le port 9050…

Tout le traffic passera alors par le réseau TOR (De l’application précédement configurée! Pas de toute la carte réseau!)
Une fois ce réglage fait, vous aurez la joie d’être anonyme, et d’avoir une connexion lente. :(

5 Bonnes raisons d’utiliser PDO

1 – Interopérabilité

PDO offre une multitude de « drivers » : des connecteurs vous permettant, en utilisant le même code de faire vos requêtes que vous vous adressiez à une base Oracle, MySQL ou même SQLite.

Voici les drivers actuellement supportés par PDO :

  • CUBRID
  • MS SQL Server
  • Firebird/Interbase
  • IBM
  • Informix
  • MySQL
  • MS SQL Server
  • Oracle
  • ODBC et DB2
  • PostgreSQL
  • SQLite
  • 4D

Vous l’aurez compris, l’intérêt est d’offrir la possibilité à votre code d’être « porté » sous un autre environnement sans avoir de problèmes de compatibilité.

2 – Sécurité

En utilisant le système de requêtes préparées de PDO, vous n’avez plus (trop) à vous soucier de contrôler les entrées des utilisateurs. En effet, les requêtes préparées sont comme leur nom l’indique préparées avant exécution, et les entrées sont filtrées avant leur exécution sur la base. Si votre SGBD ne gère pas les « prepared statements », pas de soucis, PDO gère pour vous l’émulation de cette fonctionnalité. L’intérêt est double puisque une même requête peut servir plusieurs fois avec des variables différentes :

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);

// insertion d'une ligne
$name = $_POST['name']; // injection possible mais filtrée par PDO
$value = 1;
$stmt->execute();

// insertion d'une autre ligne avec des valeurs différentes
$name = 'two';
$value = 2;
$stmt->execute();

3 – Objet

PDO est entièrement objet, c’est à dire qu’il n’existe pas d’alternative à PDO en procédural. Vous êtes donc libre d’étendre comme bon vous semble la classe PDO afin de faire votre propre librairie. On peu imaginer étendre PDO pour le faire fonctionner en Singleton. Ou encore, développer une classe parente gérant les transactions pour faire des requêtes en lot et ainsi optimiser les flux entre le code et le serveur MySQL.

4 – Transactions

Une transaction est un bon moyen de contrôler la consistence des données envoyées. En effet, on peut y faire des lots de requêtes (session de transaction) et revenir en arrière si l’une d’entre elles « plante » (rollback).

Avec PDO, ce procédé est simplifié grâce aux méthodes « beginTransaction », « commit » et « rollback ». Le fait de faire un beginTransaction, ouvre une session MySQL et permet de ne pas exécuter la requête dès qu’un « ; » est trouvé. Les deux autres méthodes commit et rollback, valident ou annulent respectivement les requêtes lancées pendant la transaction.

5 – Gestion des « objets larges »

Une autre « feature » beaucoup moins connue est la possibilité de gérer les objets larges de votre base de données. On peut simplement et directement « streamer » un LOB (Large OBject) depuis le SGBD vers un navigateur par le biais des fonctions de flux de PHP. A l’inverse, on peut également écrire un flux de données dans le SGBD, avec les mêmes fonctions.

Enfin, la sortie de PHP 5.3

Après plusieurs mois de développement, voilà qu’arrive enfin, PHP 5.3 en production! Au programme :

  • Gestion des espaces de noms (namespaces)
  • La « résolution statique à la volée » (Late Static Bindings)
  • Introduction des « fonctions anonymes », plus communément appelées Closures
  • Implémentation d’un Garbage Collector…

Suivis de nombreuses corrections de bugs, mais aussi et surtout, l’implantation en natif de nouvelles librairies : j’ai nommé phar (pour PHP Arch : Archive PHP), qui permet de stocker des applications complètes (bootstrap) PHP dans un fichier de type Archive

Il y à aussi Intl qui permet la gestion tout en objet de « l’internationalization » (la gestion des langues…), de plus en plus utilisé, nottament par google dans leurs projets

L’ajout de mysqlnd : la librairie complètement réécrite par l’équipe des contributeurs, au contraire de l’ancienne extension créee et maintenue par SUN/MySQL et qui posait des problèmes de licence.

Sinon, je vous laisse découvrir les (pour moi) deux grandes nouveautés qui valent le coup d’en parler : les namespaces, qui permettent enfin de pouvoir combiner plusieurs librairies sans se soucier des collisions de classes…

Également : les Closures, qui sont déjà amplement utilisés dans la POO Javascript (mootools par exemple), qui vont sacrément nous changer la vie, à nous pauvres développeurs que nous sommes ;)

Mise à jour hardware du serveur

J’y croyais pas… Et si, on peut passer d’un système avec 256Mb de ram armé d’un gros Celeron 600MHz ( :D ) vers un Sempron 2800+ et ses deux Go de ram DDR2!
Voilà, le noyau a reconnu tout ou presque sur la nouvelle carte mère! La carte réseau n’a pas été reconnue mais c’est pas un soucis, car l’ancienne était une PCI. Me voilà donc avec deux cartes réseaux… Et enfin un système performant, même si pour l’instant pas ou peu de services y sont installés…

Détecter des fichiers issus d’exploit RFI (Remote File Inclusion)

Sur les serveurs web, en dehors des failles systèmes/logicielles, on peut aussi être confronté à ce qu’on appelle des RFI pour Remote File Inclusion (Inclusion de Fichiers Distants, pour les geek anglophobes)
En général, elles sont exploitées par l’intermédiaire de scripts open source… Mais aussi, et c’est plus inquiétant pour le développeur derrière, pour des scripts « normaux »/propriétaires

Les causes

  • Pour les scripts open source :
    • Les « hackers » possèdent directement le code source : la moindre faille ne peut pas passer au travers de tas et de tas de « pirates »
    • Une fois la faille trouvée, l’exploit crée, les « kiddies » n’ont plus qu’a scanner des serveurs pour trouver des cibles (easy!)…
  • Pour les scripts propriétaires :
    • Le principal exploit est la « faille include » : là faut vraiment pas être « bon » pour laisser un
      include $_GET['page'];
    • Il y en a d’autres mais ceux-ci sont plus difficiles à trouver par un scan normal.

Le contenu

Une fois infecté, ohh joie, on se retrouve avec des shellbots, bot irc, rootkit, spam kits etc…
La plupart des bot irc sont codés en perl, après, pour ce qui est des shellbots et rootkits, on à de tout…

Détecter une infection

Bon, vous avez fait le ménage, les mises à jours de vos scripts? Ok, alors c’est partit pour un scan de RFI maison :

user@debian~: wget http://yrweb.fr/bin/scanRemoteFileInclusion.sh
user@debian~: chmod +x scanRemoteFileInclusion.sh
user@debian~: ./scanRemoteFileInclusion.sh >> scan.log

Ce script maison scan successivement /home et /tmp… Vous pouvez changer /home par /var/www par exemple (ou autres) mais il doit contenir vos fichiers php. Il recherche dans vos fichiers tout les mots louches genre shellbot, virus, spam… d’où le nombre de FAUX POSITIFS (antispam par exemple!). Il détecte également les fichiers .txt qui contiennent IO::Socket (instanciation d’un socket en perl) utilisé pour la création de botnet. Le script est évidement fait avec les pieds et les yeux fermés donc, un peu d’indulgence. Il ne fait que notifier vos fichiers potentiellement vérolés, c’est à vous de les supprimer!
A noter également que c’est une passoire, il est évident que certains « pirates » ne s’amusent pas à écrire dans leur shellbot qu’il s’agit d’un shellbot :-D. De même certains malins encode leur scripts en base 64 par exemple puis font un eval du script décodé… Là vraiment c’es pas de bol pour vous : WATCH YOUR LOGS!

Géolocaliser correctement une adresse IP

On connait tous le succès des mashups google maps permettant de géolocaliser tout et n’importe quoi…
En cherchant sur le net, on peu trouver des bases régulièrement mises à jour permettant de géolocaliser une Adresse IP. L’interet? Il est multiple
Vous pouvez par exemple pour votre information personnelle établir une base de données des visiteurs de votre site vous permettant de créer des statistiques…
Ou sinon, vous pouvez vous en servir justement pour que vos scripts google maps calcule l’itinéraire entre votre visiteur et le lieu de la photo qu’il consulte…
Je ne sais pas si la CNIL autorise la collecte d’adresses, dans le cadre de statistiques mais bon, pour le deuxième exemple, on peut imaginer un tas d’autres applications !

Vous pouvez trouver la base à cette adresse : http://ipinfodb.com/ip_database.php.
Notez qu’ils mettent également à disposition un rsync permettant de garder à jour sa base de données. Essayez de créer une tâche cron qui commence par faire :

 rsync -azrv rsync://rsync.ipinfodb.com/ipinfodb/ip_database /REP_DE_DESTINATION

Suivi d’un traitement shell/mysql… du genre :

cd /REP_DE_DESTINATION
tar -zxvf ipinfodb_mul_table_full.sql.bz2
mysql -u user -p 'password' < ipinfodb_mul_table_full.sql

« Et voilà » (je vais pas vous mâcher le travail non plus ;)), vous disposez d’une base de données de géolocalisation d’adresse IP!
D’ailleurs, d’ici peu, j’ouvrirais une section « snippets » où je mettrais quelques scripts PHP, mashups google maps, Requêtes MySQL et autres… Patience!

Installer une plateforme d’hébergement sur son serveur

Présentation

IspCP Omega est la suite du projet VHCS. Il permet de gérer simplement les hôtes virtuels Apache, ainsi que la création de sous-domaines, comptes email, bases de données MySQL, comptes FTP etc.

Avantages

Un « Control Panel » permet de gérer ses sites, clients, comptes mails etc simplement, sans avoir à passer par l’édition de fichier de configuration ou de commandes en shell pour configurer des comptes…
Il permet de gérer des forfait d’hébergement et donc de gérer tout les clients, revendeurs par une interface web…
Pour IspCP, PHP tourne en CGI, ce qui est pas mal pour gérer plusieurs versions par virtual host : un host pourra tourner en PHP5 tandis qu’un autre tournera en PHP4
On peu également régler le php.ini pour chaque domaine! On peu par exemple, « tweaker » certains domaines…

Il est aussi généralement simple de rajouter des plugins sur ses control panels tels que des backups ou autre

Inconvénients

En général, une fois le Control Panel installé, il est plutôt difficile de maintenir ses logiciels à jour puisqu’ils sont contrôlés par un daemon propre.
Ce n’est PAS le cas pour IspCP Omega! Pour ne pas en citer un autre, Direct Admin (oups! :D) contrôle la mise à jour de ses logiciels. Si on veut mettre à jour PHP, malheur à celui qui essayera de faire un apt-get update : ca n’aura aucun effet sous Direct Admin.
Pour certains administrateurs de serveurs, ou simples développeurs qui s’improvisent administrateurs (comme moi :p), ils préféreront la solution de ispCP Omega permettant tout de même de garder le contrôle sur sa machine… Une mise à jour de php n’influe en rien le fonctionnement du daemon…

Installation de IspCP Omega sur Debian etch

L’installation se fait sur une Debian « fraiche », sans versions de apache php ou autres…
une fois l’install de votre distrib terminée, rendez-vous ici et suivez les étapes…

Une fois tout cela configuré, rendez vous sur admin.votredomaine.tld et amusez vous !

Installation de ispCP Omega terminée !

Après quelques problèmes sur le serveur, j’ai décidé de sauter le pas.

Je suis définitivement convaincu par cet outil qui me permet de gérer mes virtual hosts Apache, comptes mails, ftp et MySQL correctement.

En deux temps trois mouvements, la pauvre bête qui tournait sous debian sarge recompilée en etch et rafistolée de partout se transforme en vrai serveur Web.

Ayant testé d’autres solutions (payantes ou gratuite), ispCP Omega est L’OUTIL INCONTOURNABLE en matière desolution d’hébergement.

Les paquets sont indépendants, on n’est pas obligé de rester cantonné à des paquets précis avec des versions dépassées!

La gestion des comptes est plus ou moins intuitive, un système de backup, un webmail etc, bref un EXCELLENT outil.

Configuration de PHP5 pour MySQL5

Dns cette version de PHP, il existe 3 extensions possible pour pouvoir se connecter à MySQL.

  • php_mysql.dll : C’est une extension procédurale qui fait appel aux fonctions du type mysql_*. Ces fonctions sont utilisées pour les version antérieures à MySQL 4.0.
  • php_mysqli.dll : C’est une extension procédurale qui fait appel aux fonctions du type mysqli_*. Ces fonctions sont utilisées pour les version postérieures à MySQL 4.1.
  • php_pdo_mysql.dll : C’est une extension objet faisant référence aux objets PDO (pdo_*) [PHP Data Object]

Ces extensions sont dans le php.ini. En décommentant les lignes dont on à besoin, on charge l’extension (si l’extension est dans le systeme).

Remarque : pour PDO, du fait de « l’abstraction » nécéssite 2 extensions pou fonctionner.
extension=php_pdo.dll
extension=php_pdo_mysql.dll