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 :
- Knock : client & serveur pour faire du port-knocking. Très simple à configurer.
- portknocking.org