Il s'agit de petits hacks permettant de simplifier l'administration d'une
machine domestique sur un Unix.
Je n'aime pas pas les termes 'truc' et 'astuce', il s'agit de hacks fondés
sur la doc et le comportement d'outils standard, vous devriez quand même
réfléchir à leur impact sur la sécurité de votre système
avant de les installer.
Ils ont été testés sur Debian GNU/Linux mais devraient s'installer sur
tout Unix-like moyennant peut-être des modifications. Hackez présente une
version simple de ces hacks et ne propose pas de procédures d'installation,
c'est à vous de les adapter à vos besoins.
Si vous avez une machine reliée à l'Internet par un FAI (fournisseur
d'accès internet) vous avez probablement une adresse IP dynamique,
celle-ci peut changer selon les caprices de ce FAI, il change la mienne
tous les jours, vous avez sans doute un moyen de faire repartir la
connexion automatiquement, par exemple en utilisant un daemon PPP ou
/etc/inittab et 'respawn', ce n'est pas l'objet de ce hack.
Vous pouvez vouloir que des amis puissent se connecter chez vous par ssh
ou consulter vos sites webs dans leur dernière moûture, et se téléphoner
à chaque fois que l'on change d'adresse IP n'est pas très satisfaisant.
Vous même, lorsque vous êtes retenu loin de chez vous (par des vacances
j'éspère), pouvez vouloir vous connecter sur votre ordinateur pour consulter
votre courrier que vous préférez centraliser sur cette machine ou pour
d'autres raisons qui ne manquent pas.
Vous pouvez obtenir ce service par dyndns.com ou dynserv.net, mais un petit hack qui prend 10 minutes vous permettra de le réaliser vous-même.
Ce hack utilise une indirection pour se connecter au serveur http installé sur votre machine, vous pouvez l'améliorer pour qu'il serve aussi à se connecter par ssh ou sur n'importe quel port de votre machine.
L'idée est simplement de télécharger l'adresse IP dynamique sur un site
ayant une adresse IP fixe lorsque votre adresse IP change.
Le hack marche avec Apache (et sans doute d'autre serveurs) s'il est
configuré pour accepter des redirections à partir de fichier .htaccess,
c'est sans doute le cas pour la plupart, c'est en tout cas le cas pour
free.fr.
A la connexion PPP, il suffit d'activer un script pour charger l'adresse
sur votre site remote.
Je la charge aussi sur mes sites locaux car il
peut être intéressant d'avoir une véritable IP dans ses URLs et non
l'adresse loop-back 127.0.0.1, localhost ou my-box selon ce que vous
avez mis dans /etc/hosts. Cela m'est utile lorsque je clique sur
l'icone du validator W3C 'http://validator.w3.org/check?uri=referer'.
Voici ce script.
Si votre site distant est http://monsite.isp.fr/, en se connectant à
l'URL http://monsite.isp.fr/hackcess/, on se retrouve
connecté à la racine du site web sur le port 80 de votre machine locale.
#!/bin/sh # file /root/bin/hackez01-up, should be mode 700 IP=$1 # the local IP address # save the IP somewhere in case we need it echo $IP > /var/log/ip-local # make redirections to local site from the local site sed -e "s/PPP_LOCAL/$IP/" /root/.hackez/.htaccess-l.tmpl \ > /root/.hackez/.htaccess-l # put it in the local web site hackcess directory cp /root/.hackez/.htaccess-l /web/site1/hackcess/.htaccess # the same for the remote site sed -e "s/PPP_LOCAL/$IP/" /root/.hackez/.htaccess-r.tmpl \ > /root/.hackez/.htaccess-r # upload to site, please use something more secure ftp -nv ftpperso.isp.fr >>/tmp/tmpi 2>&1 <<-EOF open ftpperso.isp.fr user cémoi benmoiquoi cd hackcess put /root/.hackez/.htaccess-r .htaccess bye EOF
Le script est placé sur /root/bin/, il aurait pu (du?) être placé sur
/usr/local/sbin
Le script est trivial, il construit les fichiers .htaccess à partir de
templates qui peuvent être celui-ci :
Redirect permanent /hackcess/index.php http://PPP_LOCAL/
sed change simplement 'PPP_LOCAL' par votre IP dynamique reçue en
premier argument.
Voyez la doc d'Apache pour plus de précision ou cherchez 'htaccess' sur
ce foutu web.
Reste à activer ce script à chaque connexion PPP.
On peut le faire facilement en l'appelant d'un script dans
/etc/ppp/ip-up.d/.
J'ai mis ce script :
#!/bin/sh # file /etc/ppp/ip-up.d/01hackez /root/bin/hackez01-up $4 &
$4 est l'adresse IP locale.
Le & à la fin de la commande est assez important, il est
préférable que le script tourne en background car la connexion ftp peut
durer un moment surtout si le serveur ftp d'accès au site est down.
Il faut aussi faire l'opération inverse lors d'une déconnexion, c'est symétrique, il y a juste un problème, il est difficile de se connecter à un serveur distant lorsqu'on n'est pas connecté à l'internet...
Il y en a plusieurs et la solution peut être améliorée.
Le défaut le plus évident est qu'on ne peut pas remplacer le .htaccess
sur le serveur distant par un fichier vide en cas de déconnexion.
Cela n'a pas grande importance, la dernière adresse IP du host local est
soit non attribuée, soit attribuée à quelqu'un qui n'a personne qui
écoute sur le port 80. Exceptionellement, vous pouvez tomber sur
quelqu'un qui a un serveur, il y a peu de chance que vous confondiez
son site avec le votre s'il parle de motos au lieu de pêche à la ligne.
Ce n'est donc pas réellement un vrai défaut pour quelqu'un qui a
un usage artisanal de ce hack.
Plus important, le serveur FTP distant peut ête down au moment de
la connexion, le client FTP va tomber en time-out et l'adresse IP locale
va être perdue.
Ce n'est pas un gros problème, il y a des tas de moyens de faire
des retry et la solution la plus simple est peut-être d'utiliser
cron pour télécharger l'adresse, mettons toutes les heures.
On peut aussi avoir peur que cela donne une porte d'entrée aux
misérables crackers.
Peur sans fondement, même le script kiddy affligé d'achée et autres
problèmes hormonaux n'a pas besoin de ça. Sécuriser son serveur est
la seule solution.
Demandez quand même une identification des utilisateurs (userid/password)
si votre site propose des plans pour faire sauter la maison-blanche.
Bref, voir la doc d'Apache.
Plus grave, les informations ne circulent pas de manière sécurisées entre votre localhost et le remote, plus particulièrement votre userid et password FTP, utilisez plutôt http POST et un petit script server-side qui range l'adresse IP. Mais le principe est le même, je ne cherche pas à vous encombrer de détails.
S'il vous arrive d'éteindre votre ordinateur, prévoyez un petit script
qui efface le fichier .htaccess remote, de cette manière on pourra voir
votre page http://monsite.isp.fr/hackcess/index.php.
La mienne c'est :
Sorry, host is down.