Yop

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

jeudi, 29 juillet 2010

Tunnels TCP à travers proxy HTTP - Corkscrew et Proxytunnel


  • Introduction

Présentation des 2 outils Corkscrew et Proxytunnel:

Ils permettent donc de créer des tunnels TCP à travers un proxy HTTP (via la méthode CONNECT)...
On sera donc par exemple en mesure de monter une connexion SSH... Cette connexion SSH pourra être ensuite elle-même un tunnel chiffré dans lequel faire passer d'autres connexions... Je ne vous fait pas un dessin (option -D d'openSSH, tsocks...etc.. ;) )


  • Présentation

corkscrew is a simple tool to tunnel TCP connections through an HTTP proxy supporting the CONNECT method. It reads stdin and writes to std‐out during the connection, just like netcat. It can be used for instance to connect to an SSH server running on a remote 443 port through a strict HTTPS proxy.


proxytunnel is a program that open a tunnel through a HTTPS proxy.


  • Fichier '~/.ssh/config'

$ man ssh_config
ProxyCommand
Specifies the command to use to connect to the server.[...]


- Pour Corkscrew

Host mon.serveur.ssh
Port 443
ProxyCommand corkscrew mon.proxy.intra 8080 %h %p loginpassfile

- Pour Proxytunnel

Host mon.serveur.ssh
Port 443
ProxyCommand proxytunnel -p mon.proxy.intra:8080 -F loginpassfile -d %h:%p

On peut constater que le principe est le même.. et que la syntaxe est très proche.


  • Syntaxe du fichier loginpass

- Pour Corkscrew

superLogin:superPass

- Pour Proxytunnel

proxy_user = superLogin
proxy_passwd = superPass


  • Création de connexion SSH à travers le proxy avec par exemple:

$ ssh -p 443 mon.serveur.ssh

ou

$ ssh -D 1111 -p 443 mon.serveur.ssh

etc...


  • Différences

Je n'ai pas trouvé beaucoup de différence entre les 2...pour mon utilisation:

- Proxytunnel affiche une petite ligne lors de la connexion SSH

Via mon.proxy.intra:8080 -> mon.serveur.ssh:443

- La dernière version de Corscrew semble dater de 2001.. et la dernière de Proxytunnel de 2008.

- Proxytunnel semble avoir une option pour chaîner 2 proxys (non testé).

- Proxytunnel semble avoir une option pour chiffrer la connexion entre le client et le proxy. (Non testé.. le proxy à dispo ne le supporte pas).

- Corkscrew à un logo plus sympa ;)

- Proxytunnel semble avoir une option pour faire du NTLM (non testé).



  • Divers

- PuTTY a une option pour faire passer la connexion dans un Proxy...

- On peut ajouter la ligne suivante dans le '~/.ssh/config' pour maintenir le tunnel si besoin

ProtocolKeepAlives 30

- On peut aussi faire du SCP de la même manière (dans les 2 sens)

$ scp -P 443 file mon.serveur.ssh:/tmp
Via mon.proxy.intra:8080 -> mon.serveur.ssh:443
file 100% 171 0.2KB/s 00:00
$ scp -P 443 mon.serveur.ssh:/tmp/file .
Via mon.proxy.intra:8080 -> mon.serveur.ssh:443
file 100% 171 0.2KB/s 00:00

- N'oubliez pas que ce n'est pas parceque vous arrivez à vous connectez en SSH, que l'admin est forcément bigleux...
Il lui est tout à fait possible de voir qu'il s'agit d'un tunnel SSH et non d'une banale connexion HTTPS... méfiance :)


vendredi, 5 juin 2009

Execution de commandes lors d'une connexion SSH

Extrait du man ssh

/etc/ssh/sshrc
Commands in this file are executed by ssh when the user logs in, just before the user's shell (or command) is started. See the sshd(8) manual page for more information.



Exemple ici de fichier /etc/ssh/sshrc pour l'envoi d'un mail d'alerte à l'administrateur:

DATE=`date "+%d.%m.%Y--%Hh%Mm"`
IP=`echo $SSH_CONNECTION | awk '{print $1}'`
REVERSE=`dig -x $IP +short`

echo "Connexion de $USER sur $HOSTNAME

IP: $IP
ReverseDNS: $REVERSE
Date: $DATE

" | mail -s "Connexion de $USER sur $HOSTNAME" user@example.org

USER et HOSTNAME sont les variables d'environnement déjà existantes.

MailLoginSsh-uggy1.png

Il va de soit pour tout le monde qu'OpenSSH doit être sécurisé en authorisant UNIQUEMENT les authentifications par clé (et non pas par mot de passe)... Mais ceci est un autre sujet.

mardi, 9 octobre 2007

keyboardcast - Pour entrer des commandes sur plusieurs fenêtres en même temps

Keyboardcast permet d'envoyer les frappes du clavier dans plusieurs fenêtres simultanément.

Ceci se montre particulièrement utile pour lançer des commandes sur plusieurs serveurs SSH en même temps. Je préfère sa souplesse à d'autres outils comme Fanterm ou encore ClusterSSH.

On pourrait aussi par exemple s'en servir pour lançer les même commandes en telnet vers plusieurs serveurs. (Dans ce cas seul le nom du serveur est à "personnaliser").Etc...

Il ne semble pas fonctionner avec tous les "terminaux" comme Eterm ou Putty (a voir)... mais aucun problème avec gnome-terminal. (On peut même par exemple taper dans plusieurs fenêtres gedit...etc..)

Il permet aussi de lançer un "lôt" de connexions SSH dans des gnome-terminal pour éviter d'ouvrir "à la main" les fenêtres, puis de les ajouter à la sélection.

Il est également dispo dans certains dépots.

jeudi, 15 mars 2007

dns2tcp - Encapsulation dans des requêtes DNS

  • Introduction

dns2tcp est un outils permettant d'encapsuler du trafic dans des requêtes DNS.

La partie serveur simule un serveur DNS (donc doit écouter sur le port 53) et est par exemple à installer sur sa ligne Adsl perso. Le client encapsule les données dans des requêtes DNS qui sont envoyées au serveur interne spécifié. Ce serveur DNS qui lui à le plus souvent accès au port 53 vers Internet (ou en tous cas de résoudre des domaines externes), transmet à notre faux serveur DNS les données qui sont ensuite décapsulées. Le retour des paquets ce fait de la même manière.

  • Coté DNS

Il est nécessaire d'ajouter une entrée dans les DNS exemple:

dns2tcp.example.org NS 1.2.3.4

C'est en essayant de résoudre des sous domaines de ce nom que les paquets arriveront jusqu'au faux serveur DNS.

  • Coté serveur

cat /etc/dns2tcpd.conf
listen = 0.0.0.0
port = 53
user=nobody
chroot = /var/empty/dns2tcp/
domain = dns2tcp.example.org
ressources = sshYop:127.0.0.1:22

Ici nous indiquons qu'une connexion vers le port 22 du même serveur sera accessible sous le nom arbitraire sshYop

Lancement du server (ici en mode debug...)

sudo dns2tcpd -F -d 1 -f /etc/dns2tcpd.conf

  • Coté client

Lister les "connexions disponibles"

dns2tcpc -z dns2tcp.example.org 192.168.1.1

Les paramètres étant le nom de domaine et le serveur DNS accessible (dans l'exemple 192.168.1.1).

La réponse doit être:

Available connection(s) :
sshYop

Pour monter la connexion "DNS":

dns2tcpc -c -r sshYop -l 4430 -z dns2tcp.example.org 192.168.1.1

Les paquets envoyés vers le port 4430 local seront donc envoyés dans l'exemple au port 22 de la machine dns2tcp.example.org (mais tout ceci uniquement avec des requêtes DNS).

Pour monter la connexion SSH:

ssh -p 4430 127.0.0.1

Du browsing est par exemple possible avec la partie Socks de Ssh:

ssh -D 3333 -p 4430 127.0.0.1

  • Résumé en image

  • Conclusion

Ce programme permet donc d'accéder à Internet quand on a seulement le droit d'accéder à un serveur DNS "interne".
Les "voyageurs" verront tout de suite l'utilité ;)

Merci Modu ;)

lundi, 15 janvier 2007

Protection contre un halt/reboot accidentel en SSH

Pour ne pas risquer d'arrêter ou de rebooter par erreur une machine à laquelle on est connecté par SSH.

A mettre dans le fichier bashrc utilisé par le serveur :

function halt() {
if [[ -z `ps -p $PPID | grep ssh` ]]; then
/sbin/shutdown -h now
else
echo ""
echo ""
echo " ### WARNING ## "
echo ""
echo " To prevent errors, 'halt' command used into an SSH session is disabled "
echo ""
echo ""
fi
}

function reboot() {
if [[ -z `ps -p $PPID | grep ssh` ]]; then
/sbin/shutdown -r now
else
echo ""
echo ""
echo " ### WARNING ## "
echo ""
echo " Hostname: `hostname`"
echo " IP address: `ifconfig eth0|grep "inet ad"|awk '{print $2}'|awk -F ':' '{print $2}'`"
echo ""
echo " To prevent errors, 'reboot' command used into an SSH session is disabled "
echo ""
echo " (If you are really sure you want to reboot, please use the command: 'iwantreboot' ) "
echo ""
echo ""
fi
}

alias iwantreboot='/sbin/shutdown -r now'

Rien de compliqué... mais si cela peut éviter un aller/retour en salle serveur alors qu'on pensait éteindre son poste... ;)

- page 2 de 5 -