X-Space

Aller au contenu | Aller au menu | Aller à la recherche

dimanche, mars 13 2011

Connexion SSH au travers d'un proxy

Préambule

La méthode que je vais vous décrire offre la possibilité de contourner des protections/limitations mises en place par le biais d'un proxy ou d'un firewall. Son usage est sous votre entière responsabilité et peut être contraire à la politique de sécurité du lieu ou vous vous trouvez.

SSH over HTTPS

Dans mon entreprise actuelle, seuls deux ports sont disponibles en sortie : les ports web 80 et 443. Il m'est donc impossible de me connecter à mon serveur via SSH pour intervenir en cas de dysfonctionnement.

La première solution, que j'ai mise en place, a été d'utiliser un des deux ports disponibles et de rediriger son trafic vers le port SSH. Rien de plus facile avec iptables.

iptables -t nat -A PREROUTING -i eth0 -s 10.20.30.40 -p tcp --dport 443 -j REDIRECT --to-ports 22

Mais...

Dans ce cas, il n'est plus possible de me connecter à mes pages en HTTPS (webmail par exemple). Et d'autre part, l'ip est fixe. Cette solution est donc limitée.

Port-knocking à votre service

Voici donc qu'arrive le port knocking. Je vous renvois à l'article de Wikipedia pour comprendre de quoi il retourne.

Maintenant, il me suffit de faire des requêtes dans un certain ordre sur les ports 80 et 443 et une fois la séquence finie : le port 443 est redirigé vers le 22 (SSH). 10 secondes plus tard tout est rentré dans l'ordre.

Installation :

sudo aptitude install knockd

Editer : /etc/knockd.conf

[options]
    UseSyslog

[opencloseSSH]
    sequence      = 443:udp,80:udp
    seq_timeout   = 10
    tcpflags      = syn,ack
    start_command = /sbin/iptables -t nat -A PREROUTING -i eth0 -s %IP% -p tcp --dport 443 -j REDIRECT --to-ports 22
    cmd_timeout   = 10
    stop_command = /sbin/iptables -t nat -D PREROUTING -i eth0 -s %IP% -p tcp --dport 443 -j REDIRECT --to-ports 22

Et on lance le démon :

sudo knockd -d -c /etc/knockd.conf

Utilisation :

knock IP_SERVEUR 443:udp 80:udp

Il reste alors 10 secondes pour se connecter en SSH.

Debbuging

knockd peut se lancer comme une commande simple avec console. C'est pratique pour comprendre ce qui ne marche pas.

sudo knockd -D -v -c /etc/knockd.conf

Quelques références :

lundi, février 1 2010

Comment migrer un dépot subversion dans un autre dépot existant ?

Jusqu'à récemment à chaque fois que j'avais besoin de versionner un projet, je créais un nouveau dépôt subversion ce qui revenait à faire :

  • Via SSH : svnadmin create /some/path/
  • Création d'un VirtualHost Apache (avec le htaccess qui va bien)
  • Installation d'un WebSVN

Tout ca pour au final me retrouver avec une dizaine de dépôts (et autant d'URL) ayant chacun moins de 100 commits. J'ai donc décidé de fusionner tous ca sous une URL unique avec certificat TLS par dessus.

Deux hics :

  • Comment importer mes dépôts dans le dépôt existant ?
  • Comment définir une convention de nommage des dépôts ?

Pour la deuxième question ce fut assez simple : je me suis basé sur l'arborescence DNS inversée (ca tombe bien la majorité de mes projets ont une URL) :

Exemple : Si ce blog était versionné il le serait sous la forme net/x-space/www/ avec dans ce dossier les traditionnels trunk, branches et tags.

Pour la première question : et bien les développeurs de subversion ont pensé à tout.

svnadmin dump /path/to/the/old/repository/ > net.x-space.www.dump

Puis

svnadmin load --parent-dir net/x-space/www/ /path/to/the/new/repository/ < net.x-space.www.dump

Pour en savoir plus :

mardi, septembre 29 2009

Petite statistique intéressante

En exécutant l'outil StatsSVN sur le code de la bibliothèque PHP commune à tous les projets de ma société, j'ai observé la tendance suivante

Sur plus de 300 fichiers et 26500 lignes de code, on voit clairement que la moyenne du nombre de lignes de code (LOC) par fichier se stabilise autour de 85 LOC/File.

Surprenant ?

Oui au premier abord, mais en mettant en parallèle nos méthodes de travail (TDD, POO, Utilisation de design pattern) et cette moyenne cela devient nettement plus logique.

samedi, mai 30 2009

Envie de vomir...

Arrêt sur images à la suite d'une chronique de Colombe Schneck dans J'ai mes sources sur France Inter vient de "révéler" (contenu payant) qu'un nombre non négligeable de recherche Google sur le nom d'un journaliste était suivi du mot "juif". Ceci est ressorti grâce à la fonction Google Suggest.

Je viens de faire la même recherche sur quelques hommes politiques Français et devinez quoi...

En voici un florilège :

samedi, janvier 31 2009

Eclipse PDT 2.0

Après plus de 6 mois de retard, Eclipse PDT est sortie dans sa version 2 fin décembre.

Voici quelques paramètres et plugins qui me semblent indispensable pour tout développeur PHP.

Plugin indispensable

Subclipse

Ce plug in permet de se connecter au serveur de gestion de versions : Subversion

Ajoutons lui quelques raccourcis:

Onglet Window : Preferences : Général > Keys.
  • Rechercher "commit", catégorie SVN : Affecter le raccourci <Ctrl>+<Alt>+<C>
  • Rechercher "synchronize", catégorie SVN : <Ctrl>+<Alt>+<S>
  • Rechercher "update", catégorie SVN : <Ctrl>+<Alt>+<U>
  • Rechercher "Copy from Left To Right" : <Ctrl>+<Alt>+<Right>
  • Rechercher "Copy from Right To Left " : <Ctrl>+<Alt>+<Left>

Quelques paramètres

Afin de respecter les conventions de codage PEAR

Général > Workspace :

  • Text file encoding : Other : iso-8859-1 ou UTF-8 (selon les prochaines conventions)
  • New Text file line delimiter : Other : Unix
Voir File formats

PHP > Code Style > Code Template

Si vous voulez éviter d'avoir à retaper la PHPDoc de déclaration de fichier ou de classe, c'est par la que ca se passe. Ceci peut être fait projet par projet aussi.

PHP > Code Style > Formatter :

  • Tab policy : spaces
  • Indentation size : 4
Voir Indenting and Line Length

Effectuer cette modification pour tous les types de fichiers (rechercher "tab" dans le moteur de recherche des préférences)

Afin d'améliorer le confort d'utilisation

PHP > Editor > Code Folding

  • Décocher enable folding
Le code folding consiste à pouvoir afficher / masquer le corps d'une fonction. C'est très gourmand en ressource, fait freeze eclipse souvent et se révèle peu pratique à l'usage. La vue "outline" est plus agréable.

PHP > Editor > Save Actions

  •  Remove trailing whitespace
A chaque "Save", eclipse va supprimer automatiquement les espaces de fin de lignes. Indispensable.

PHP > Editor > Typing

  • Décocher String & Parenthese
Eclipse ne va plus s'amuser à fermer automatiquement les parenthèses ou les strings, ce qui est agaçant.

Voila j'en oublie sans doute alors n'hésitez pas à me faire part des vôtres.

Mises à jour

  • 15 mai 2009 : Encoding, raccourcis Copy..., Tab

mssql_connect(): Unable to connect to server

Si jamais vous utilisez une base de données SQL Server avec PHP taite très attention au paramètre mssql.max_procs.

Si l'on regarde la doc, sa valeur par défaut est "-1" donc illimité me disais je. Or ce n'est pas le cas, ce qui est confirmé par la lecture du php.ini

Specify max number of processes. -1 = library default
msdlib defaults to 25
FreeTDS defaults to 4096

Et 25 c'est peu...

samedi, novembre 15 2008

Déconnexion d'un spammeur

Le Washington Post (Via ASI) nous a appris cette semaine que l'un des plus gros spammeurs mondiaux, situé aux États Unis, a été déconnecté du réseau.

L'effet de cette coupure est impressionnant. Je vous laisse juger par vous même sur les statistiques de mon seul serveur :

Note : Ce graphique a été produit grâce aux données fournies par le script log-report.sh de la version patché de Qmail Scanner et mise en forme avec Excel 2007.

lundi, août 11 2008

Modifier les chmods à la volée.

Quand j'étais jeune ( comprendre il y a deux ans ), j'avais tendance à ne pas me casser les pieds au niveau des chmods et faire

chmod -R 777 mondossier

C'est pas propre, pas logique ( un fichier ne doit pas pouvoir être exécuter, potentiellement dangereux etc... Ayant vieilli, et commençant la migration du serveur actuel vers le nouveau je suis tombé sur un problème de chmod incohérent et j'ai donc du reconstruire le tout. Plutôt que de faire ça à la main ou en mode récursif ( -R ), j'ai développé un petit script pour faire les choses proprement : (télécharger)

Utilisation

./chmodalavolee.sh mondossier

Grossièrement le script fait :

Pour chaque fichier dans mondossier : chmod 644 (lecture pour tous et seulement écriture pour le propriétaire).

Pour chaque dossier : chmod 755 (lecture et exécution - obligatoire pour rentrer dans un dossier - pour tous, écriture en plus pour le propriétaire). Exécuter le script dans ce dossier.

Seul problème ce script ne donne pas les droits d'exécution sur le fichier. Ce qui peut être problématique si on fait un 777 sur un dossier contenant des exécutables.

Un collègue, qui a fait cette erreur malencontreuse, m'a donc posé la question : y a il des fichiers exécutables dans /var ?

Ma réponse est dans le fichier var-executable-files que j'ai généré avec le script search-executable.sh.

dimanche, février 24 2008

Ma première DDOS

Aujourd'hui j'ai vécu ma première attaque par déni de service.

Statistiques Ping pour 91.121.29.90:
Paquets : envoyés = 92, reçus = 49, perdus = 43 (perte 46%),
Durée approximative des boucles en millisecondes :
Minimum = 128ms, Maximum = 244ms, Moyenne = 177ms

Chapeau bas au support d'OVH qui à 12h m'envoie un mail comme quoi mon serveur ne ping plus, puis annule l'intervention 10 minutes après parce que ca reping. Je les contacte à 15h car mon serveur est inaccessible, en leur demandant s'il y avait une attaque: réponse à 19h: ca ping... Aucunes informations durant l'évènement.

lundi, août 6 2007

print_r et var_dump v2.0

Qui n'a jamais pesté en devant étudier les valeurs d'un tableau en php? Les fonction print_r() ou var_dump() affichent le tableau sous la forme d'une chaine de caractère. Pour un petit tableau cela peut aller mais cela devient très vite illisible.



Exemple: print_($montableau);

Array ( [0] => 7.4 [1] => 7.4 [2] => 7.4 [3] => 7.4 [4] => 7.4 [5] => 7.4 [6] => 7.4 [7] => 7.4 [8] => 7.4 [9] => 7.4 [10] => 7.4 [11] => 7.4 [12] => 7.4 [13] => 7.4 [14] => 7.4 [15] => 7.4 [16] => 7.4 [17] => 7.4 [18] => 7.4 [19] => 7.4 [20] => 7.4 [21] => 7.4 [22] => 7.4 [23] => 7.4 [24] => 7.4 [25] => 7.4 [26] => 7.4 [27] => 7.5 [28] => 7.5 [29] => 7.5 [30] => 7.5 [31] => 7.5 [32] => 7.5 [33] => 7.5 [34] => 7.5 [35] => 7.5 [36] => 7.5 [37] => 7.5 [38] => 7.5 [39] => 7.5 [40] => 7.5 [41] => 7.5 [42] => 7.5 [43] => 7.5 [44] => 7.5 [45] => 7.5 [46] => 7.5 )

C'est la qu'intervient Krumo.


require('class.krumo.php');
krumo($marge);

  • ... (Array, 47 elements)
  • Krumo version 0.2a
    | http://krumo.sourceforge.net
    Called from C:\www\uptime-dev\test.php, line 69  

Et encore ce n'est qu'un tableau a une dimension. Conquis?

dimanche, juillet 29 2007

Quelques heures dans la peau de TitaX, la suite

Suite de mes aventures.

Le serveur est retombé le 19 juillet. Donc la mise à jour du controleur RAID et des disque dur n'a rien changé.

Recontact avec Dell.

On a d'abord tenté d'installer l'utilitaire DSET (Utilitaire de support pour systèmes Dell) mais comme c'est du Debian, ca passe pas ( Dell supporte uniquement les produits RedHat ).

Rendez vous fut pris pour utiliser un LiveCD ( basé sur REHL 4.4 ) afin d'accéder aux journaux systèmes.

Les logs ne contenaient rien de vraiment intéressants. M'enfin il faut quand même remarquer que la machine est tombé trois fois:

  1. Le 27 juin 2007 ( date du constat, cela peut être la veille )
  2. Le 03 juillet 2007
  3. Le 19 juillet 2007 à 19h30

Et que à des dates similaires, il s'est produit la perte de l'une des alimentations redondantes:

Severity : Critical
Date and Time : Tue Jun 26 17:21:50 2007
Description : PS 1 Status: power supply sensor for PS 1, failure was asserted

Severity : Critical
Date and Time : Tue Jun 26 17:21:51 2007
Description : System Board PS Redundancy: PS redundancy sensor for System Board, redundancy lost

Severity : Critical
Date and Time : Tue Jun 26 17:21:51 2007
Description : PS 1 Status: power supply sensor for PS 1, input lost was asserted

  1. Le 26 juillet 2007 - 17h21
  2. Le 19 juillet 2007 - 18h17
Je trouve la coïncidence troublante. Tellement troublante que j'ai envie de faire le test à mon retour de vacances si la machine n'est pas retombé d'ici la.

Quel peut être le lien entre un disque dur en read-only et un problème électrique?
  • Surtension ?
  • Mauvaise isolation électrique?
  • Court-circuit ?

Il reste que Dell pour l'instant ne croit pas au problème hardware mais à un problème de l'OS, on est donc passé sous CentOS 5 ( non supporté par Dell mais c'est du REHL à 99.999% ).




jeudi, juillet 12 2007

[linux]Connaitre la taille d'un dossier

Cette question, je me la suis posé souvent. 

En effet, un simple listing du dossier avec la commande "ls -l" ne donne rien: un dossier étant un fichier particulier vous obtiendrez la taille de 4096 pour chaque dossier.

Et bien, la commande du ( disque usage ) réponds à ma question.

Exemple

$ du -hs backup/
18G backup/

  • h pour "Human Readable": sans le résultat aurait été "18078868"

BBcode Player v2.0 - Support xhtml 1.1

Récemment, j'ai installé le mod BBcode Player sur un de mes forums phpBB. Ce mod ajoute des balises bbCode permettant d'inclure des vidéos, des fichiers sons ou des animations flash directement dans le post. Le problème est que ce mod date un peu et le code html est dépassé ( utilisation de la balise embed ). J'ai donc entreprit de mettre à jour cet add-on. J'en ai profité pour utiliser le dewplayer pour lire les fichiers audio.

Lire la suite...

mardi, juillet 10 2007

Quelques outils pour surveiller un serveur

iftop


Cet outil permet de surveiller le trafic circulant sur une interface à la manière d'un top. Ca m'a été trèsutile pour identifier la provenance d'un trafic anormal sur ce serveur le matin: Googlebot !

logwatch

Comme son nom l'indique, ce programme analyse les fichiers de logs et génère un mail informatif tous les matins.
  • Echec de connexion ssh
  • Echec de connexion ftp
  • Connexion imap
  • Occupation disque dur
  • Résumé du trafic Apache2, liste des erreurs 404
  • ...
Bref indispensable

Installation ?

aptitude install logwatch

aptitude install iftop

Et hop ca roule.

jeudi, juillet 5 2007

Quelques heures dans la peau de TitaX

Je suis actuellement en stage de 2ième année et dans le cadre de ce stage, avec un collègue, je développe un site web / espace collaboratif mais dois aussi installer et configurer le serveur web qui accueillera le site. La machine est un PowerEdge 2950 ( Père Noël si tu passes dans le coin ) sur lequel on a installé Debian Etch ( oui je sais j'ai toujours pas publié mes notes d'installation de ce serveur ). Sauf que, gros problème, le système de fichier se met de temps en temps en lecture seule.

Lire la suite...

samedi, mai 19 2007

Internet Explorer 6 et Linux

IE 6 et Linux: WTF ??

Et non je ne suis pas devenu fou. Faisant face à un bug sous IE6: un site web ne s'affichant pas correctement alors que développé en xhtml1.1 et ne posant aucun problème sous IE7. J'ai du me résoudre à réinstaller IE6.

Premier hypothèse: Faire cohabiter IE6 & 7 sous mon Windows XP. Une petite recherche Google-istique m'a fait trouver une solution à base de virtualisation. Mais problème, Virtual PC ne tourne pas sous XP Home.

Deuxième Hypothèse: Emuler IE6 avec Wine sous Fedora 6. Après quelque recherche, je suis tombé sur IEs4Linux et en 2 petit coup de yum c'était réglé.

jeudi, mai 10 2007

Organisation FileSystem: FTP, Apache

Je vous parlais précédemment de mon projet de réinstallation du serveur qui héberge X-Space pour passer à Debian 4 ( Etch ). Avant de pratiquer cette installation, je me pose la question de l'organisation des fichiers.

La problématique est de gérer de multiples domaines, de multiples utilisateurs et une architecture claire.

Par défaut, Apache est configuré pour pointer vers /var/www sur la partition / donc. Or sur le serveur la partition / est de petite taille. On va donc utiliser /home qui est une partition à part.

Plusieurs sites, plusieurs domaines, j'inclinerais donc à construire comme ca:

  • /home/livebox-script.com/
  • /home/cyber-addict.fr/
  • /home/x-space.net/
  • /home/temp/
  • ...

Plusieurs utilisateurs, avec leur propre HomeDirectory.

  • /home/ED/
  • /home/TitaX/
  • ...

Un site peut être géré par plusieurs utilisateurs, cet utilisateur peut avoir son propre ftp, accessible par VirtualHost.

Pour l'instant la solution que je retiens est de monter l'arborescence souhaité dans le dossier de l'utilisateur concerné avec la commande mount.

mount --bind /home/x-space.net/ /home/ED/x-space.net/

Ce qui nous donne:

  • /home/ED/x-space.net/ -> http://www.x-space.net
  • /home/ED/temp/ -> http://temp.x-space.net
  • /home/ED/www/ -> http://ed.x-space.net

Se pose maintenant, la gestion des droits et des utilisateurs, quel serveur FTP a utilisé ? pure-ftpd ou proftd ? Comment laisser la possibilité à plusieurs utilisateurs d'accéder et de modifier le même contenu.

Ce sera l'objectif d'un autre billet, mais je suis ouvert à toutes vos propositions, idées. N'hésitez pas non plus à nous partager votre architecture en commentaires ou sur votre blog. ( hein TitaX )

samedi, décembre 30 2006

Des failles, oui et ?

Régulièrement, on peut lire sur des sites d'actualités informatique des news du type: "une énième faille sur Windows Vista" ou "Office, buggé" etc... Ce qui sert de pain quotidien à nos bons gros trolls. Mais qui y a-t-il de si exceptionnel à trouver des failles dans des logiciels grands publics? C'est le lot courant de tout logiciel, même les meilleurs en ont, d'ailleurs j'aurais plutot tendance à juger une entreprise sur sa capacité à corriger les bugs et ce rapidement. A ce sujet, Tristan Nitot, que l'on attendait pas vraiment dans la défense de Microsoft, résume très bien ma pensée:

Oh mon dieu, c'est horrible ! Windows Vista contient une faille de sécurité. C'est normal. C'était prévu. C'est même probablement des dizaines ou des centaines ou des milliers de failles de sécurité. Et ça n'est même pas affolant ![...]

Lire la suite

Certains diront que ca sert aussi d'avertissement pour ces même sites d'actualités: attention nos logiciels contiennent des failles alors pas besoin d'en faire tout un fromage. Mais ca méritait d'être dit.

lundi, octobre 30 2006

Firefox 2 et les accesskey

Je suppose que vous êtes sans doute déjà au courant que Firefox 2 est sorti depuis quelques jours, Internet Explorer 7 aussi par ailleurs. Je ne vous apprendrais donc rien à ce sujet, la n'est pas le sujet d'ailleurs.

Sage

Pour consulter les liens RSS, j'utilise le plugin Sage. Or celui ci peut s'ouvrir grâce à la combinaison < ALT > + < S >. Mais la combinaison < Alt > + < Quelque chose > sert aussi pour activer les accesskey, qui sont des "raccourcis" HTML insérés dans nos pages Web. D'ailleurs, beaucoup de forums utilisent l'accesskey « S » pour poster un sujet.

Conflit ?

Une même combinaison de touches pour deux fonctions totalement différentes cela fait une de trop me direz vous. Toutefois, Firefox dans sa version 1.5 utilisait un ordre de priorité pour compenser cela: les accesskey d'abord et Sage ensuite.

What's wrong?

Et bien avec la version 2, les développeurs de Mozilla ont changé cet ordre de priorité afin de les attribuer à des fonctions propres au navigateur. Ce qui désactive le fonctionnement des Accesskey.

Tout n'est pas perdu.

En réalité, cela fonctionne par défaut avec < Alt > + < Shift > + < Quelque chose > maintenant . Mais on peut aussi retrouver le comportement précedent, en modifiant dans about:config les deux valeurs suivantes:

ui.key.chromeAccess to 4
ui.key.contentAccess to 4

( plus d'explications ).

By the Way...

Cette modification est décevante venant de Mozilla dont l'image vient en partie du fait qu'ils respectent les normes en matières d'accessibilité et de standard. D'autre part, lorsque l'on développe un logiciel, le respect de la compatibilité ascendante doit être une priorité. On ne change pas les habitudes des utilisateurs sans raison. Or de ce point de vue la, les développeurs de Firefox ont péché d'orgueil. Dommage...

dimanche, octobre 15 2006

Yahoo! User Interface Library

J'ai découvert récemment la Yahoo! User Interface Library. Cette bibliothèque fournit un ensemble de fonctions pour construire une interface JavaScript.

On peut y trouver différents scripts:

Outre le nombre intéressant de fonctions déjà implanté, cette bibliothèque est très simple d'utilisation et très bien documenté. Pour chaque script, on peut trouver de multiples exemples d'application, une documentation des fonctions mais aussi un petit tutoriel de présentation du script.

Auto Complete

J'ai personnellement testé l'auto completion sur une base de données des villes conçss grâce à la Liste des communes existantes au 1er janvier 2006 publiée par l'INSEE.

Je passerais sur la création de la liste et le coté PHP du script. Il suffit de générer une page de résultat XML basé sur une valeur de départ comme ici.

Regardons le code html.

Tout d'abord, insérons les liens vers les scripts nécessaires:


<!-- Dependencies --> 
<
script type="text/javascript" src="yahoo.js"></script> 
<script type="text/javascript" src="dom.js"></script> 
<script type="text/javascript" src="event.js"></script> 

<!-- OPTIONAL: Connection (required only if using XHR DataSource) --> 
<
script type="text/javascript" src="connection.js"></script> 

<!-- OPTIONAL: Animation (required only if enabling animation) --> 
<
script type="text/javascript" src="animation.js"></script> <

<!-- Source file --> 
<
script type="text/javascript" src="autocomplete.js"></script> 

Maintenant au chargement de la page, initialisons le module:

// Indiquons l'adresse du script php
var myServer "./xhr_script.php"
// Précisons la structure XML
var mySchema = ["option","desc"]; 
// Initialisons le système
var myDataSource = new YAHOO.widget.DS_XHR(myServermySchema); 
// On récupère des données de type XML
myDataSource.responseType myDataSource.TYPE_XML
// Le paramètre de requête a utiliser est debut
myDataSource.scriptQueryParam "debut"

Ensuite rattachons les données à l'élément HTML:

// On initialise l'auto completion sur le champ myInput, les solutions seront proposées dans la div myContainer. 
// On raccroche aux données myDataSource
var myAutoComp = new YAHOO.widget.AutoComplete("myInput","myContainer"myDataSource); 
// Pas dé délai entre la modification du champ et la proposition
myAutoComp.queryDelay 0;
// Paramètre de style divers:
myAutoComp.prehighlightClassName "yui-ac-prehighlight";
myAutoComp.useShadow true;    

Et le résultat est la.

Pour conclure

Cette bibiothèque est très intéressante, je vous conseille vivement d'y jeter un coup d'oeil. J'y ai découvert des choses que je ne pensais pas réalisable en JavaScript et cela réalisable simplement.

- page 1 de 2