lundi 25 juillet 2016

Reverse proxy Apache pour RDP over HTTPS (Windows Server 2008 R2)

Générer un certificat autosigné :

openssl req -newkey rsa:2048 -nodes -keyout myrdp.mydomain.key -x509 -days 365 -out myrdp.mydomain.crt

openssl pkcs12 -inkey myrdp.mydomain.key -in myrdp.mydomain.crt -export -out myrdp.mydomain.pfx


Importer le certificat dans le magasin "Personnel" du serveur RDS et désactiver tous les rôles sauf "Authentification du serveur".

Installer le rôle "services de bureau à distance" avec les services de rôle "gestionnaire de passerelle"


Config Apache :

<VirtualHost *:443>
        ServerName myRDP.domain
        SSLEngine On
        SSLCertificateFile /etc/apache2/ssl/myrdp.crt
        SSLCertificateKeyFile /etc/apache2/ssl/myrdp.key
        CustomLog ${APACHE_LOG_DIR}/myrdp.log combined
        ErrorLog ${APACHE_LOG_DIR}/myrdp.log
	#LogLevel info proxy_msrpc:trace2

	SSLProxyEngine On
	SSLProxyCheckPeerCN Off
	SSLProxyCheckPeerName Off
	# Enable RPC over HTTPS
	OutlookAnywherePassthrough On
	#LogLevel info proxy_msrpc:trace2
	
        ProxyRequests Off
        <Proxy *>
                Order deny,allow
                Allow from all
        </Proxy>
        ProxyPass / https://RDPServer/
        ProxyPassReverse / https://RDPServer/
</VirtualHost>

<VirtualHost *:80>
        ServerName myrdp.domain
        Redirect / "https://myrdp.domain/"
        CustomLog ${APACHE_LOG_DIR}/myrdp.log combined
        ErrorLog ${APACHE_LOG_DIR}/myrdp.log
</VirtualHost>

Issue : le certificat doit être reconnu comme CA sur le client.

lundi 20 août 2012

Cntlm Authentication Proxy

Cntlm est un utilitaire permettant de s'authentifier auprès d'un proxy.

Une fois l'utilitaire installé (téléchargeable ici), il faut modifier le finir cntlm.ini :

Username	identifiant_AD
Domain		nom_domaine
Auth		mode_auth
PassNTLMv2	hash_trouvé
Proxy		ip_proxy:port_proxy
Listen		3128
SOCKS5Proxy	8010

Il est possible de remplir le fichier cntlm.ini avec votre mot de passe de domaine en clair, mais il est préférable de le laisser vide et d'utiliser cntlm pour récupérer la méthode d'authentification de votre AD ainsi que le hash de votre mot de passe. Il suffit d’exécuter la commande suivante dans le dossier de cntlm

cntlm -I -M http://test.com
Config profile  1/11... OK (HTTP code: 200)
Config profile  2/11... OK (HTTP code: 200)
Config profile  3/11... OK (HTTP code: 200)
Config profile  4/11... OK (HTTP code: 200)
Config profile  5/11... OK (HTTP code: 200)
Config profile  6/11... Credentials rejected
Config profile  7/11... Credentials rejected
Config profile  8/11... OK (HTTP code: 200)
Config profile  9/11... OK (HTTP code: 200)
Config profile 10/11... OK (HTTP code: 200)
Config profile 11/11... OK (HTTP code: 200)
----------------------------[ Profile  0 ]------
Auth            NTLMv2
PassNTLMv2      4AC6525378DF8C69CF6B6234532943AC
------------------------------------------------

Il suffit alors de rajouter les 2 lignes dans le fichier cntlm.ini.

On peut ensuite configurer Putty pour utiliser cntlm :
Dans l'onglet Connexion/proxy :
proxy type : SOCKS 5
proxy hostname : 127.0.0.1
port : 8010

jeudi 10 mars 2011

Ajaxterm : un client SSH en web

Petite présentation

J'ai enfin trouvé un client web qui me permette de prendre la main sur mes serveurs quand je n'ai pas de client SSH accessible ou que les ports (généralement le 22) sont bloqués. Son nom : Ajaxterm.
Le site de l'âme charitable qui nous le met à disposition : http://antony.lesuisse.org/software/ajaxterm/

Installation

L'installation sous Debian est très simple, Ajaxterm étant disponible dans les dépôts. On commence donc par un classique "apt-get install ajaxterm" pour installer Ajaxterm et les dépendances qui vont bien, en particulier Apache. Attention toutefois, ceci installe la version 0.7. La dernière version lors de l'écriture de ce billet est la 0.11.

Configuration

Le serveur Ajaxterm est écrit en Python et écoute sur le port 8022 en local. Vous pouvez d'ores et déjà vérifier son fonctionnement en lançant un w3m (ou n'importe quel navigateur) à l'adresse http://localhost:8022/. Si besoin, le port peut être modifié dans /etc/default/ajaxterm.

Pour activer un accès depuis une autre machine, on peut ajouter un vhost à Apache qui se contentera de rediriger les requêtes vers Ajaxterm, par le biais du module mod_proxy. Évidemment, ce vhost devra être accessible en HTTPS si on veut conserver l'avantage du chiffrement SSL/TLS.

Cette fonctionnalité nécessite d'activer les modes mod_proxy, mod_proxy_http et mod_ssl :
a2enmod ssl
a2enmod proxy
a2enmod proxy_http

Génération d'un certificat auto-signé

Pour avoir un accès en SSL on peut utiliser un certificat existant ou générer un certificat auto-signé :
make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/ajaxterm.crt
Bien évidemment, ce certificat auto-signé lèvera une erreur dans le navigateur. Il est préférable de le signer avec un certificat racine approuvé par le navigateur.

Ajout d'un vhost Apache

On crée donc un /etc/apache2/sites-available/ajaxterm que l'on paramètre pour rediriger les requêtes de /ajaxterm/ vers le port 8022 :

<VirtualHost *:443>

ServerName localhost
SSLEngine On
SSLCertificateFile /etc/ssl/ajaxterm.crt
ProxyRequests Off

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ProxyPass /ajaxterm/ http://localhost:8022/
ProxyPassReverse /ajaxterm/ http://localhost:8022/

</VirtualHost>

Et on l'active :
a2ensite ajaxterm
Et là youpi ! En pointant un navigateur vers https://IP_du_serveur/ajaxterm/ on peut ouvrir une session SSH sur le serveur.

Augmentation du timeout de la session

Par défaut, votre session SSH se terminera après deux minutes d'inactivité. Je n'ai pas vraiment compris pourquoi mais ce temps peut être augmenté sans problème. Éditons le fichier /usr/share/ajaxterm/ajaxterm.py. À la ligne 395, on remplace modifie la valeur de INACTIVE_PROCESS_TIMEOUT pour le mettre par exemple à 300 secondes (5 minutes). Après un petit redémarrage d'Ajaxterm (/etc/init.d/ajaxterm restart) le nouveau timeout d'inactivité est pris en compte.

Conclusion

Les avantages :

  • Passe les proxy.
  • Simplicité d'installation ;

Les inconvénients :

  • Pas de session SSH vers un autre serveur, uniquement en local ;
  • Pas avec compatible IE7 (ok avec IE8) EDIT 11/03/2011 : en fait si, aujourd'hui ça fonctionne ;
  • Reset de la connexion au bout de 2 minutes d'inactivité (modifiable) ;
  • Nécessite un reverse proxy pour l'atteindre depuis une autre machine. Le paquet ajaxterm dépend d'Apache.

mercredi 5 janvier 2011

Passerelle vers un réseau Tor

Le but de ce billet est de créer une passerelle qui sort directement sur le réseau Tor.
A quoi cela peut bien servir ? Par exemple en changeant la route par défaut d'un client lui permettre d'être anonyme sur la toile (attention aux données sensibles qui transitent dans le réseau Tor tout de même), ou encore fournir une passerelle, potentiellement ouverte, vers internet sans être reconnu comme IP source des paquets sortants.

Tor est un réseau d'ordinateurs (volontairement) zombies qui permet de faire du multi-proxy.

Installer Tor

La première étape est l'installation de Tor sur un serveur:
# apt-get install tor
... et ben voilà, première étape terminée ;)
| Comme toujours, il est possible d'installer Tor à partir de ses sources afin d'avoir la dernière version:
$ wget http://www.torproject.org/dist/tor-0.2.1.28.tar.gz
$ tar xzf tor-0.2.1.28.tar.gz && rm tor-0.2.1.28.tar.gz
$ cd tor-0.2.1.28
$ ./configure
$ make
$ su -c 'make install'

|| Requirements:
# apt-get install build-essential
# apt-get install libevent-dev
# apt-get install libssl-dev

Configuration de Tor

(Rappel: on ne souhaite pas dans ce billet configurer Tor comme relais, mais simplement comme point d'entrée dans le réseau Tor)

Emplacement: /etc/tor/torrc ou /urs/local/etc/tor/torrc

RunAsDaemon 1
# Port et adresse d'écoute du démon Tor(relai)

# ORPort 9001
# ORListenAddress 127.0.0.1
# Port et adresse d'écoute pour les requêtes DNS
DNSPort 53
# Port et adresse d'écoute pour Tor en mode proxy transparent
TransPort 8118
TransListenAddress 0.0.0.0

A présent, vous pouvez lancer Tor:
# invoke-rc.d tor start
ou
# tor

Configuration IP forward

Un simple echo 1 > /proc/sys/net/ipv4/ip_forward suffit, il est également possible d'éditer le fichier /etc/sysctl.conf afin d'activer l'IP forward systématiquement:

net.ipv4.ip_forward=1

Configuration netfilter/iptables

Afin de concentrer tout le trafic entrant vers le proxy transparent local, on configure quelques règles iptables simples:
iptables -F -t nat
iptables -F
iptables -X
## Règles locales
iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-ports 8118
iptables -t nat -A OUTPUT -p udp -m udp --dport 53 -j REDIRECT --to-ports 53
## Règles extérieures
iptables -t nat -A PREROUTING -p tcp -j REDIRECT --to-ports 8118
iptables -t nat -A PREROUTING -p udp -m udp --dport 53 -j REDIRECT --to-ports 53

Vous pouvez tester si le proxy fonctionne en local simplement en vous rendant sur www.whatismyip.org (et vérifier que ce n'est pas votre IP) ou:
$ GET whatismyip.org
ou
$ w3m whatismyip.org
Le même test est réalisable à partir d'un client extérieur après lui avoir modifié sa route par défaut.

Configuration annexe

Si vous voulez que l'ensemble du trafic d'un hôte passe systématiquement dans le réseau Tor, il suffit de configurer le serveur DHCP en rajoutant une entrée host. Par exemple pour dhcpd, on peut rajouter l'entrée suivante dans le fichier /etc/dhcp3/dhcpd.conf

host monHote{
fixed-address A.B.C.D;
hardware ethernet XX:XX:XX:XX:XX:XX;
option routers {adresse IP du serveur Tor}
}

Mise à jour: Commande socat:
socat -d -d TCP4-LISTEN:8118,fork,reuseaddr TCP4:<address_ip>:8118

vendredi 10 décembre 2010

VLC derrière un proxy

Si vous aussi vous voulez écouter une webradio dans votre entreprise sur votre lecteur favoris (et non un webplayer pourrave), il est possible d'ajouter un proxy dans VLC.

  • Sous Windows (testé et approuvé):

1. Click droit sur l'icône "VLC media player"
2. Propriétés
3. Rajouter dans la cible (en dehors des " ")

     --http-proxy=my.proxy.com:8080
  • Sous Linux (à tester):

vlc --http-proxy=monproxyenmousse:1337

Après, il faut aussi une webradio fairplay qui diffuse sur un port non bloqué

jeudi 2 décembre 2010

Reverse proxy avec Lighttpd

1) Modifier le fichier lighttpd.conf (/etc/lighttpd/) et décommenter le module proxy:

server.modules = (
...
"mod_proxy",
...
)

2) Activer le module

# sudo lighty-enable-mod proxy

3) Créer le fichier de configuration :

# sudo vi /etc/lighttpd/conf-enabled/mon-fichier.conf

$HTTP"host" == "www.exemple.com" {
proxy.server = ( "" =>
( (
"host" => "192.168.13.37"
) )
)
}

mardi 30 novembre 2010

Reverse proxy avec Apache

1) Activer les modules proxy, proxy_http et proxy_connect pour apache

# a2enmod proxy
# a2enmod proxy_http
# a2enmod proxy_connect

2) Définir le VirtualHost (exemple pour un webmail)

<VirtualHost *:80>

ServerName webmail.leslamas.net
ServerAlias webmail.leslamas.net

ProxyPass / http://addresse_du_serveur/
ProxyPassReverse / http://addresse_du_serveur/

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

</VirtualHost>

3) Activer le VHost (sauf si défini dans /etc/apache2/site-enabled/)

4) Redémarrer Appache