Internet ça a du bon. Enfin, pas toujours .. Et en combinant une jolie boulette avec quelques outils, on peut réaliser des choses dont personne n’aurait pensé au début …

En bref, et notamment pour faire suite au challenge que certaines personnes m’ont lancé au SSTIC 2010 (très bonne année d’ailleurs), le voila: LE pare-feu OpenOffice ! Mais attention: pas un truc codé à l’arrache, nan, un vrai pare-feu avec un design toussa

Donc, comment ça marche:

  • on veut filtrer des paquets avec OpenOffice, donc on a besoin d’OpenOffice
  • n’ayant pas eu le temps de planifier le portage d’OpenOffice en mode noyau, j’ai donc fait l’inverse: amener les paquets en espace utilisateur avec nfqueue + python
  • on manipule OO avec python-uno

Donc, je commence à coder: on crée une feuille calc avec les numéros de ports à filtrer, je récupère la valeur des cellules (et là je peux vous le dire: quand on a l’habitude de LaTeX, OO c’est pas la joie), et on s’en sert pour filtrer les paquets récupérés par nfqueue.

Premier problème: pour utiliser nfqueue, il faut être root. Et faire tourner OpenOffice en root (donc avec une interface graphique) sur le firewall, c’est pas top. Pas de problème ! On va donc séparer les idées, pour pouvoir:

  • installer la couche de filtrage (en root) sur le pare-feu
  • installer OpenOffice sur le poste de l’administrateur, avec une couche de communication entre les deux.

Donc, le design de la solution (schéma faire avec OO - et surtout du mal - pour pas multiplier les technos):Design

Pour le serveur XML-RPC, j’ai pris pyUNOserver

Après, il reste à définir le format de la feuille calc. Au départ, je comptais juste utiliser une colonne pour avoir les numéros de port à autoriser, mais quand même on fait un pare-feu qui s’adresse à des décideurs, donc va falloir faire mieux. Donc, idée: on va ajouter des colonnes pour avoir des compteurs de paquets droppés ou acceptés, et on va les mettre à jour en temps réel. Et c’est là qu’on commence à comprendre la vraie puissance du truc (ou pas): on va pouvoir faire des graphes ! Et, bonus point, ils seront remis à jour en temps réel !

Après le bla-blah, les screenshots:

Le prototype originalLe

La version améliorée:La

Et donc, le code dans tout ça ?

D’abord, on envoie tout le trafic TCP sortant vers NFQUEUE:

# iptables -A OUTPUT -o eth0 -p tcp -j NFQUEUE

On lance le serveur XML-RPC avec OpenOffice sur le poste de l’admin:

$ ./startPyUnoServer.sh &

Et, sur le pare-feu, on lance le script:

$ sudo python2.6 oowall.pylocalhost - - [16/Jun/2010 22:00:37] \"POST /RPC2 HTTP/1.0\" 200 -/home/pollux/oowall.ods...

Et ça marche !

Le code est dispo (j’ai juste copié les fichiers …) sur: http://www.wzdftpd.net/downloads/oowall/

J’ai fait une video, dispo ici: http://www.wzdftpd.net/downloads/oowall/video_oowall.avi ou sur youtube: http://www.youtube.com/watch?v=pftjkGAORkA

Conclusion

Il fallait faire mieux que le pare-feu météo, là je pense que l’objectif a été atteint. Seule déception: pas avoir pu le faire à temps pour les rumps du SSTIC :/ Maintenant, vous pourrez générer en live des statistiques, des rapports PDF, des présentations, donc la sécurité rejoint enfin le côté user-friendly.

Il y a pas mal d’évolutions possibles, notamment le fait d’utiliser des macros, pouvoir sécuriser la connexion XML-RPC etc.

Pour les performances, c’est tout simplement assez lamentable (ici j’ai \~10 paquets par seconde), mais finalement c’est mieux parce que ça empêchera surtout le peer to peer :)

update: apparemment, j’ai été un peu pessimiste, j’ai réussi à atteindre presque 200 paquets / seconde :)