Bien qu'il soit agréable de pouvoir se connecter à votre système par ssh à partir d'emplacements arbitraires sur Internet, il existe des systèmes automatisés d'attaque par mot de passe qui se verrouillent sur un port ssh ouvert et appliquent diverses attaques par compte utilisateur et par dictionnaire contre votre système. Ces attaques peuvent être agréables à lire dans le résumé de votre journal de nuit et constituent un gaspillage de votre bande passante.
Si vous disposez d'un serveur web sur le même système, vous pouvez utiliser des wrappers php et tcp pour restreindre le trafic entrant de ssh aux systèmes connus, et vous donner une clé back-door pour vous permettre d'accéder à des systèmes arbitraires sur Internet.
Voici comment faire :
refuser toutes les connexions ssh dans /etc/hosts.deny :
# /etc/hosts.deny fragment
sshd: all
Autorisez les systèmes connus par IP dans /etc/hosts.allow, et ajoutez un fichier pour l'accès temporaire :
# /etc/hosts.allow fragment
sshd: 10.0.10.2 # some system
sshd: 172.99.99.99 # some other system
sshd: /etc/hosts.allow.temporary-sshd-access
Créez un fichier php sur votre serveur Web et donnez-lui un nom non évident comme my-sshd-access.php :
<?php
function get_ip()
{
return getenv("REMOTE_ADDR");
}
?>
<?php
$out='/etc/hosts.allow.temporary-sshd-access';
$log='/var/log/sshd-access-addition-log';
print "Was:";
readfile($out);
print "<br>";
$ip=get_ip();
$fp=fopen($out,"w");
fputs($fp,$ip);
fclose($fp);
$lfp=fopen($log,"a");
fputs($lfp,$ip);
fputs($lfp,"n");
fclose($lfp);
print "Wrote: ";
readfile($out);
?>
Pardonnez le code php - je l'ai piqué ailleurs, donc il pourrait probablement être nettoyé de fond en comble. Tout ce qu'il fait est d'ajouter l'adresse IP du système qui y accède au fichier /etc/hosts.allow.temporary-sshd-access, qui est lu par sshd (du fait de son inclusion par /etc/hosts.allow) au moment de la connexion.
Maintenant, lorsque vous êtes sur un système arbitraire sur le web et que vous voulez vous connecter à ce système, utilisez d'abord un navigateur web et cliquez sur ce fichier (ou utilisez wget ou équivalent) :
$ wget http://your.system.name/my-sshd-access.php
Vous devriez maintenant être en mesure de vous connecter à votre système. S'il s'agit d'un endroit d'où vous vous connecterez fréquemment, il serait trivial de lire le contenu du fichier /etc/hosts.allow.temporary-sshd-access et d'ajouter l'adresse IP de façon permanente à /etc/hosts.allow.