Serveur d’anonymat : OpenVPN + Proxy et TOR

Voici un tutoriel pour les utilisateurs avancés pour mon son serveur d’anonymat.
Le but est d’avoir un serveur relais avec un VPN et Proxy afin de se cacher derrière.
Enfin ce tutoriel vous explique aussi comment passer votre trafic par Tor.

L’installation n’est pas très complexe, si vous êtes à l’aise avec Linux.

Serveur d'anonymat : OpenVPN + Proxy et TOR

Introduction

Pourquoi monter son serveur ?

Il existe des solutions VPN payantes faciles à mettre an place.
D’ailleurs l’article suivant en donne un comparatif.

Le problème est qu’il faut avoir confiance dans les sociétés VPN.
En effet, votre trafic WEB et autres passent par leurs serveurs.
Ainsi ils peuvent savoir ce que vous faites et vous pister.
De plus, ces sociétés ont souvent des montages obscures.
Certaines sont liés à d’autres sociétés de big Data.

Bien entendu, les utilisateurs néophytes peuvent surfer avec Tor.

Quelques mots

En clair donc, si vous voulez vraiment jouer sur l’anonymat, le plus simple est de monter son propre serveur.

Dans ce tuto, le serveur utilisé est un serveur OVH sur Debian.

Si vous utilisez une autre distribution Linux, ce tutoriel peut tout de même être utilisé. Les chemin de configurations sont différents.
Enfin le mode d’installation aussi, selon le gestionnaire de packages qui correspond à votre distribution Linux.

Chez OVH, vous pouvez faire l’acquisition d’un VPS pour environ 2 euros par mois.
Cela permet de mettre en place un serveur VPN + Proxy pour votre trafic WEB pour pas très cher.
Cela ne vous permet pas de vous cacher, dans le sens passer inaperçu, puisque vous aurez une IP fixe.
Il est donc tout à fait possible de vous reconnaître, voire éventuellement de vous pister.
A ce propos il existe d’ailleurs d’autres contres mesures évoquées dans cet article : Comment se protéger du pistage sur internet

On peut alors adjoindre TOR afin d’avoir une IP aléatoire.
Toutefois la CPU d’un VPN est assez limité, le serveur risque d’être un peu lent.
Dans tous les cas cela apporte une sécurité lorsque vous vous connectez depuis des connexions publiques (hôtel, école, etc).
En effet, le VPN apporte un un tunnel sécurisé.

Présentation du serveur d’anonymat

Voici le schéma final.
Le serveur OVH dispatche via un Squid ou Privoxy la connexion vers le serveur final.
Ainsi on peut passer par le réseau Tor ou sortir par le serveur.
En effet, beaucoup de sites internet bloque Tor.

Serveur d'anonymat avec OpenVPN + Proxy et TOR

La vidéo suivante montre le surf avec cette solution d’anonymat.

Ainsi, nous utiliserons :

  • OpenVPN pour effectuer la connexion VPN. Ce dernier est aussi disponible pour les smartphone Android
  • SquidProxy pour sortir depuis le serveur OVH. Le porte est 6666.
  • Privoxy pour sortir via Tor avec un port en 8118.

Il existe d’ailleurs des centaines et des centaines de tutos sur le net pour ces programmes très courants.Enfin côté client, je vous donnerai des exemples de conf pour un client en Windows et Linux.

Installation côté serveur

Installer OpenVpn

OpenVPN est donc un serveur VPN libre qui fonctionne en client et serveur.
Côté serveur, vous devez donc installer le programme et générer les certificats qui seront à installer sur le poste client.
La connexion et l’authentification se font donc à travers des certificats.
Sur Debian 10, easy-rsa est en version 3 donc le fonctionnement est un peu différent.
Cela ajoute une arborescence imposée des certificats serveurs et clients.

Pour installer openvpn :

apt-get install openvpn easy-rsa

Easy-RSA et certificats serveurs

On commence par créer les certificats serveurs.

cd /usr/share/easy-rsa/
cp vars.example vars

Editer le fichiers vars pour ajouter à la fin.

set_var EASYRSA_REQ_COUNTRY    "FR"
set_var EASYRSA_REQ_PROVINCE   "FRANCE"
set_var EASYRSA_REQ_CITY       "Paris"
set_var EASYRSA_REQ_ORG        "malekal.com"
set_var EASYRSA_REQ_EMAIL      "postmaster@malekal.com"
set_var EASYRSA_REQ_OU         "Community"

Ensuite on créé l’arborescence.
Si celle-ci est déjà présente, il faut confirmer.

chmod+x vars
./easyrsa init-pki
Initialiser les pki OpenVPN sur Debian

puis on créé les certificats du serveur :

./easyrsa build-ca nopass
Créer les certificats du serveur OpenVPN

Ensuite on créé les clés publiques et privées.
Ici elles se nomment server.

./easyrsa gen-req server nopass
Générer les clés du serveur OpenVPN

Enfin pour terminer on signe les clés.
On créé une clé forte Diffie-Hellman et une signature HMAC signature.
Ce dernier sert à sécuriser les échanges TLS.

./easyrsa sign-req server server
./easyrsa gen-dh
openvpn --genkey --secret ta.key
mv /usr/share/easy-rsa/keys/ta.key /usr/share/easy-rsa/pki/

Vous devez confirmer avec yes.

Signer les clés du serveur OpenVPN

Configurer le serveur OpenVPN

Le fichier de configuration server est /etc/openvpn/server.conf
Sur Debian, vous avez un exemple de fichier de configuration serveur sur /usr/share/doc/openvpn/examples
Dans l’exemple, le serveur est en TCP port 1194 avec une interface tap.

Note rapide sur la différence TCP VS UDP.

  • TCP : correction d’erreur et suivi de connexion, c’est la connexion la plus sûr.
  • UDP : plus rapide car aucune vérification, les paquets sont plus légers. Mais cela peut ne pas fonctionner, par exemple, dans le cas où la sortie se fait sur plusieurs connexions internet différente. Si aucun suivi, un coup vous sortirez par une IP publique, un coup par une autre. De ce fait, la connexion ne fonctionnera pas.

En outre, TCP permet aussi de jouer sur les blocages FW. Exemple, vous configurez votre serveur VPN sur le port 443, initialement configuré pour du HTTPs.
Avec un Firewall « simple », qui vérifie que les connexions de ports, cela fonctionnera sans problème.

Voici un autre exemple d’un fichier /etc/openvpn/server.conf.
Cela signifie que la connexion se nomme server.
En effet, on peut configurer plusieurs serveurs OpenVPN sur une même machine physique.

Conf
 mode server
 proto udp
 port 1194
 dev tap
 Certificates and keys
 ca pki/ca.crt
 cert pki/issued/server.crt
 key pki/private/server.key
 dh pki/dh.pem
 tls-auth pki/ta.key 0 #si la clef a ete generee
 cipher AES-256-CBC
 Network
 server 10.8.0.0 255.255.255.0
 push "redirect-gateway def1 bypass-dhcp"
 push "dhcp-option DNS 208.67.222.222"
 push "dhcp-option DNS 208.67.220.220"
 persist-key
 persist-tun
 comp-lzo
 Log
 verb 3
 mute 20
 log-append /var/log/openvpn.log
 status openvpn-status.log

Le serveur DNS distribué est celui du serveur OpenVPN.
Sur les machines OVH vous devez avoir un Bind qui tourne.

Les commandes push permettent de forcer des routes sur les postes clients.
En outre, on créé une route 10.8.0.1 afin de faire sortir tout le trafic en 10.X par le VPN.

Si vous désirez installer OpenVPN client sur un Android, il faut mettre dev tun.
En effet le client Android ne supporte pas les interfaces TAP.

Afin de récupérer les clés on peut créer un lien comme ceci.

ln -s /usr/share/easy-rsa/pki /etc/openvpn/pki

Créer des certificats et clés du client

Enfin on peut créer les certificats clients.
Ici ce dernier se nomme client1

cd /usr/share/easy-rsa/
./easyrsa init-pki
./easyrsa gen-req client1 nopass
Créer les certificats et clés du client

Le fichier xxx.key est créé, il s’agit de la clé privée du client.
Là aussi on signe le client :

./easyrsa sign-req client client1
Signer les clés du client

Enfin on transfère les fichiers qui vont bien du côté client
Se reporter au paragraphe plus bas.

Lancer OpenVpn

Enfin tout est prêt pour connecter des clients au VPN.
Pour relancer le daemon openVPN :

/etc/init.d/openvpn restart

Pour relancer la connexion serveur :

sudo systemctl restart openvpn@server

De plus si on veut vérifier le statut de la connexion :

sudo systemctl status openvpn@server

Squid

OpenVpn côté serveur est prêt, on peut s’attaquer à Squid.
Pas très compliqué non plus, pour installer Squid :

apt-get install squid

et un exemple de /etc/squid/squid.conf.
J’ai divisé celui-ci en trois parties :

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/users
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
acl all src all

#acl manager proto cache_object
#acl localhost src 127.0.0.1/32
#acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
#acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
#acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
#acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
#acl SSL_ports port 443 # https
#acl SSL_ports port 563 # snews
#acl SSL_ports port 873 # rsync
#acl Safe_ports port 80 # http
#acl Safe_ports port 21 # ftp
#acl Safe_ports port 443 # https
#acl Safe_ports port 70 # gopher
#acl Safe_ports port 210 # wais
#acl Safe_ports port 1025-65535 # unregistered ports
#acl Safe_ports port 280 # http-mgmt
#acl Safe_ports port 488 # gss-http
#acl Safe_ports port 591 # filemaker
#acl Safe_ports port 777 # multiling http
#acl Safe_ports port 631 # cups
#acl Safe_ports port 873 # rsync
#acl Safe_ports port 901 # SWAT
#acl purge method PURGE
acl Users proxy_auth REQUIRED
#acl CONNECT method CONNECT
http_access allow Users
#http_access allow manager localhost
#http_access deny manager
#http_access allow purge localhost
#http_access deny purge
#http_access deny !Safe_ports
#http_access deny CONNECT !SSL_ports
#http_access allow localhost
#icp_access allow localnet
http_access deny all

icp_access deny all
http_port 10.8.0.1:3128
hierarchy_stoplist cgi-bin ?
access_log /var/log/squid/access.log squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320
acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcast
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
extension_methods REPORT MERGE MKACTIVITY CHECKOUT
hosts_file /etc/hosts
coredump_dir /var/spool/squid

forwarded_for off
header_access Allow allow all
header_access Authorization allow all
header_access WWW-Authenticate allow all
header_access Proxy-Authorization allow all
header_access Proxy-Authenticate allow all
header_access Cache-Control allow all
header_access Content-Encoding allow all
header_access Content-Length allow all
header_access Content-Type allow all
header_access Date allow all
header_access Expires allow all
header_access Host allow all
header_access If-Modified-Since allow all
header_access Last-Modified allow all
header_access Location allow all
header_access Pragma allow all
header_access Accept allow all
header_access Accept-Charset allow all
header_access Accept-Encoding allow all
header_access Accept-Language allow all
header_access Content-Language allow all
header_access Mime-Version allow all
header_access Retry-After allow all
header_access Title allow all
header_access Connection allow all
header_access Proxy-Connection allow all
header_access User-Agent allow all
header_access Cookie allow all
header_replace User-Agent Nutscrape/1.0 (CP/M; 8-bit)
#header_access All deny all

Quelques remarques et points importants.
La variable http_port est à configurer correctement.
Le but étant de faire écouter squid que sur l’adresse IP du lien VPN et ne pas avoir le Proxy ouvert à tout bout de champs.
Ainsi surtout pas sur internet ou le réseau OVH (enfin celui de votre hébergeur).
Sinon, il y a de fortes chance qu’il se retrouve dans des lists de Proxys ouverts, pour en faire un mauvais usage.
Ici, le Proxy écoute sur le port 3128, vous pouvez mettre le port par défaut, si besoin : 3128

Un coup de netstat pour vérifier que squid écoute bien sur l’interface VPN :

squid_tuto_anonymisation

Second point, nous allons créer des utilisateurs histoires de filtrer un peu (ce n’est bien entendu pas obligatoire).
Le paramètre suivant indique le fichier de configuration contenant la liste des utilisateurs :

auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/users

Pour créer un user (Remplacez UnUtilisateur par le nom d’utilisateur.) :

htpasswd -c /etc/squid/users unUTILISATEUR

La dernière partie header_access modifie les header et forwarded_for envoyés par squid afin de retirer certaines informations.

Privoxy

Privoxy sert de proxy afin d’envoyer le trafic via tor.

apt-get install privoxy tor torsocks

Le fichier de configuration de /etc/privoxy/config

user-manual /usr/share/doc/privoxy/user-manual
confdir /etc/privoxy
logdir /var/log/privoxy
actionsfile match-all.action # Actions that are applied to all sites and maybe overruled later on.
actionsfile default.action   # Main actions file
actionsfile user.action      # User customizations
actionsfile ab2p.action
actionsfile ab2p.system.action
filterfile default.filter
filterfile user.filter      # User customizations
filterfile ab2p.filter
filterfile ab2p.system.filter
logfile logfile
listen-address  10.8.0.1:8118
listen-address  [::1]:8118
toggle  1
enable-remote-toggle  0
enable-remote-http-toggle  0
enable-edit-actions 0
enforce-blocks 0
buffer-limit 4096
enable-proxy-authentication-forwarding 0
forwarded-connect-retries  0
accept-intercepted-requests 0
allow-cgi-request-crunching 0
split-large-forms 0
keep-alive-timeout 5
tolerate-pipelining 1
socket-timeout 300
forward-socks5 / localhost:9050 .

Privoxy écoute sur le port 8118 sur l’interface du VPN.

listen-address  10.8.0.1:8118

Enfin la dernière ligne forward-sock5 renvoie le trafic vers tor.
Ici il y a des fichiers de filtrage avec adblock (ligne actionsfile et filterfile).
En effet, on peut filtrer les publicités et autres.
pour plus d’informations, voir ce lien : Adblock2Privoxy

Vérifier la configuration du serveur

Enfin on peut vérifier la configuration générale avec la commande netstat.

netstat -lpn
netstat vérifier la configuration réseau du serveur d'nonymat

Squid, Privoxy doivent écouter sur l’interface du VPN.
Enfin Tor ouvre un port 9050 en écoute sur l’interface localhost.

Iptables

On peut aller plus loins dans la sécurité en ajoutant un filtre Netfilter via iptables.

Rappelons qu’il existe sur le site un article sur ce dernier : Tutoriel iptables

Exemple de script iptables plus complet pour les serveurs OVH en 91.121 (partie spécial OVH).
Pour les ouvertures de pare-feu chez OVH, quels serveurs vous devez laisser passer, se reporter au guide : http://guide.ovh.com/firewall

Attention le script est très restrictif, il bloque tout et ouvre vraiment ce qui est nécessaire.
Si vous ne savez pas maîtriser iptables, vous pouvez bloquer entièrement l’accès à votre serveur.
Donc faites bien attention et lisez bien le contenu.
En outre, corrigez bien les variables des interfaces.
Vous pouvez tester votre règles iptables pendant 120s en passant la commande suivante : 

/etc/init.d/firewall.sh ; sleep 120 ; iptables -P INPUT ACCEPT ; iptables -P OUTPUT ACCEPT ; iptables -P FORWARD ACCEPT ; iptables -F
#!/bin/bash
# Definition des interfaces
local=eth0 # cote local
localip=91.121.xxxx

vpn=tap0
vpnip=10.8.0.1

# on remet la police par debut A ACCEPT
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# On remet les polices par debut pour la table NAT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

# On vide (flush) toutes les regles existantes
iptables -F
iptables -t nat -F
iptables -X
iptables -t nat -X

# initialisation log
iptables -N LOG_DROP
iptables -A LOG_DROP -j LOG --log-level info --log-prefix '[IPTABLES DROP] : '
iptables -A LOG_DROP -j DROP

#iptables -N LOG_ACCEPT
#iptables -A LOG_ACCEPT -j LOG --log-level info --log-prefix '[IPTABLES ACCEPT] : '
#iptables -A LOG_ACCEPT -j ACCEPT

iptables -N LOG_FORWARD
iptables -A LOG_FORWARD -j LOG --log-level info --log-prefix '[IPTABLES FORWARD] : '
iptables -A LOG_FORWARD -j DROP

# Politique de refus
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

# Je veux pas de spoofing
if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]
then
for filtre in /proc/sys/net/ipv4/conf/*/rp_filter
do
echo 1 > $filtre
done
fi

# Enable broadcast echo Protection
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# Disable Source Routed Packets
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
echo 0 > $f
done

# Enable TCP SYN Cookie Protection
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# Disable ICMP Redirect Acceptance
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
echo 0 > $f
done

# Don't send Redirect Messages
for f in /proc/sys/net/ipv4/conf/*/send_redirects; do
echo 0 > $f
done

# Drop Spoofed Packets coming in on an interface, which if replied to,
# would result in the reply going out a different interface.
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $f
done

# Log packets with impossible addresses.
for f in /proc/sys/net/ipv4/conf/*/log_martians; do
echo 1 > $f
done

# pas de icmp
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
#echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

# On accepte tout en local
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# ------- Stealth Scans and TCP State Flags ------------

# All of the bits are cleared
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j DROP

# SYN and FIN are both set
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

# SYN and RST are both set
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# FIN and RST are both set
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
iptables -A FORWARD -p tcp --tcp-flags FIN,RST FIN,RST -j DROP

# FIN is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
iptables -A FORWARD -p tcp --tcp-flags ACK,FIN FIN -j DROP

# PSH is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP
iptables -A FORWARD -p tcp --tcp-flags ACK,PSH PSH -j DROP

# URG is the only bit set, without the expected accompanying ACK
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP
iptables -A FORWARD -p tcp --tcp-flags ACK,URG URG -j DROP

#=== ouvertures ====

# SSH en serveur...
/sbin/iptables -A INPUT -i $local -d $localip -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 22 -j ACCEPT
/sbin/iptables -A OUTPUT -o $local -s $localip -m state --state ESTABLISHED,RELATED -p tcp --sport 22 -j ACCEPT

# DNS
/sbin/iptables -A INPUT -i $local -d $localip -m state --state ESTABLISHED,RELATED -p tcp --sport 53 -j ACCEPT
/sbin/iptables -A OUTPUT -o $local -s $localip -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 53 -j ACCEPT
/sbin/iptables -A INPUT -i $local -d $localip -m state --state ESTABLISHED,RELATED -p udp --sport 53 -j ACCEPT
/sbin/iptables -A OUTPUT -o $local -s $localip -m state --state NEW,ESTABLISHED,RELATED -p udp --dport 53 -j ACCEPT

# ntp
/sbin/iptables -A INPUT -i $local -d $localip -m state --state ESTABLISHED,RELATED -p tcp --sport 123 -j ACCEPT
/sbin/iptables -A OUTPUT -o $local -s $localip -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 123 -j ACCEPT

/sbin/iptables -A INPUT -i $local -d $localip -m state --state ESTABLISHED,RELATED -p udp --sport 123 -j ACCEPT
/sbin/iptables -A OUTPUT -o $local -s $localip -m state --state NEW,ESTABLISHED,RELATED -p udp --dport 123 -j ACCEPT

#VPN
/sbin/iptables -A INPUT -i $local -d $localip -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 1194 -j ACCEPT
/sbin/iptables -A OUTPUT -o $local -s $localip -m state --state ESTABLISHED,RELATED -p tcp --sport 1194 -j ACCEPT

# Squid pour le VPN
/sbin/iptables -A INPUT -i $vpn -d $vpnip -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 6666 -j ACCEPT
/sbin/iptables -A OUTPUT -o $vpn -s $vpnip -m state --state ESTABLISHED,RELATED -p tcp --sport 6666 -j ACCEPT

# Privoxy pour le VPN
 /sbin/iptables -A INPUT -i $vpn -d $vpnip -m state --state NEW,ESTABLISHED,RELATED -p tcp --dport 8118 -j ACCEPT
/sbin/iptables -A OUTPUT -o $vpn -s $vpnip -m state --state ESTABLISHED,RELATED -p tcp --sport 8118 -j ACCEPT

# Squid pour le surf
/sbin/iptables -A FORWARD -o $vpn -i $local -m multiport -p tcp --dport 80,443 -j ACCEPT
/sbin/iptables -A FORWARD -i $vpn -o $local -m multiport -p tcp --sport 80,443 -j ACCEPT

/sbin/iptables -A INPUT -i $local -d $localip -m state --state ESTABLISHED,RELATED -m multiport -p tcp --sport 80,443 -j ACCEPT
/sbin/iptables -A OUTPUT -o $local -s $localip -m state --state NEW,ESTABLISHED,RELATED -m multiport -p tcp --dport 80,443 -j ACCEPT

# filtrage limit ICMP
iptables -A INPUT -i eth0 -p icmp --icmp-type 0 -m limit --limit 1/second -j ACCEPT
iptables -A OUTPUT -o eth0 -p icmp --icmp-type 0 -m limit --limit 1/second -j ACCEPT

iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -m limit --limit 1/second -j ACCEPT
iptables -A OUTPUT -o eth0 -p icmp --icmp-type 8 -m limit --limit 1/second -j ACCEPT

iptables -A INPUT -i eth0 -p icmp --icmp-type 3 -m limit --limit 1/second -j ACCEPT
iptables -A OUTPUT -o eth0 -p icmp --icmp-type 3 -m limit --limit 1/second -j ACCEPT

# special OVH
/sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.ovh.net -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.p19.ovh.net -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -p icmp --source proxy.rbx.ovh.net -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -p icmp --source ping.ovh.net -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -p tcp --dport 22 --source cache.ovh.net -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -p tcp --source 91.121.191.16 -j ACCEPT
/sbin/iptables -A INPUT -i eth0 -p icmp --source sla-rbx-26.ovh.net -j ACCEPT

# Logs des paquets refuses
echo "4 4 1 7"> /proc/sys/kernel/printk # Pour ne pas que les logs arrivent sur la console
iptables -A INPUT -j LOG_DROP
iptables -A OUTPUT -j LOG_DROP
iptables -A INPUT -p udp -j LOG_DROP
iptables -A OUTPUT -p udp -j LOG_DROP
iptables -A FORWARD -j LOG_FORWARD

La partie intéressante étant :

# Squid pour le surf
/sbin/iptables -A FORWARD -o $vpn -i $local -m multiport -p tcp --dport 80,443 -j ACCEPT
/sbin/iptables -A FORWARD -i $vpn -o $local -m multiport -p tcp --sport 80,443 -j ACCEPT

/sbin/iptables -A INPUT -i $local -d $localip -m state --state ESTABLISHED,RELATED -m multiport -p tcp --sport 80,443 -j ACCEPT
/sbin/iptables -A OUTPUT -o $local -s $localip -m state --state NEW,ESTABLISHED,RELATED -m multiport -p tcp --dport 80,443 -j ACCEPT

où autorise donc le forward entre l’interface VPN et eth0 ainsi que les connexions sortantes vers les ports 80,443 pour Squid.

Installer le client

Tout est prêt côté serveur.
On peut donc maintenant configurer les clients.
Le but est d’installer OpenVPN puis une extension FoxyProxy pour gérer les connexions au proxy.

OpenVpn

Voici comment installer OpenVPN et utiliser le Proxy côté client.
Avec un exemple pour Windows et Linux.

Il faut ensuite installer OpenVPN sur le client.
Sur Debian ou Ubuntu, le paquet openvpn-client est disponible.
Pour Windows, il faut se rendre sur ce lien : Télécharger OpenVPN

Vous devez ensuite transférer de manière sécurisé sur les lients les fichiers suivants :

  • ca.crt : le certificat publique du serveur
  • la clé privée du client (xxx.key)
  • le certificat client
  • ta.key

Voila ce que l’on obtient :

La configuration du client OpenVPN pour le serveur d'anonymat

Le fichier de configuration avec l’ip du serveur à configurer.

remote ip_serveur 1194
client
proto udp
dev tap
resolv-retry infinite # this is necessary for DynDNS
nobind
persist-key
persist-tun
ca ca.crt
cert portable.crt
key portable.key
tls-auth ta.key 1
#verb 4
#mute 20
#route-method exe
#route-delay 2
route-noexec

cipher AES-256-CBC
comp-lzo
verb 3

Ici j’ai ajouté route-noexec car je ne souhaite pas que le client route tout internet via le VPN.
Cela est expliqué dans la vidéo en introduction.

Pensez à vérifier les logs en cas de problèmes de connexion.
Cela donne beaucoup d’infos pour résoudre les problèmes de connexion VPN.

Maintenant que le VPN est prêt, on peut configurer les proxys.

Windows

Vous devez ensuite récupérer les fichiers suivants, de manière confidentiel, du serveur vers le poste client.
Par exemple avec WinScp, ou à travers un fichier zip avec un mot de passe :

/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/client.crt
/etc/openvpn/easy-rsa/keys/client.key
où client est le nom utilisé pour identifier votre client.

Ensuite, installez OpenVPN à partir de ce lien : https://openvpn.net/index.php/open-source/downloads.html

Le programme se présente avec une icône dans le systray et une icône OpenVPN GUI.

tutoriel_openvpn_windows_anonymisation

Placez les fichiers du client dans C:\Program Files\OpenVPN\config
Créez un fichier client.opvn où pseudo est le nom du client que vous utilisez pour identifier votre client.

tutoriel_openvpn_windows_anonymisation_2

Corrigez la ligne remote en mettant l’adresse de votre serveur OpenVPN.
Corrigez aussi les cert et key avec les noms du client utilisé.

tutoriel_openvpn_windows_anonymisation_3

Fermez et relancez OpenVPN GUI.
En effectuant un clic droit sur l’icône du systray, un bouton Connecter et maintenant présent.
Lancez la connexion en cliquant sur Connecter.
Le logs de la connexion apparaît (sinon via le bouton Afficher Statut).

tutoriel_openvpn_windows_anonymisation_4
tutoriel_openvpn_windows_anonymisation_6

Un coup d’ipconfig /all à partir d’une invite de commandes montre l’interface TAP avec les paramètres de notre VPN.

Si tout va bien, L’icône OpenVPN GUI apparaît alors en vert.
A partir de là, la connexion VPN est établie avec le serveur OpenVPN.
Jaune indique que vous êtes déconnectés et que le client OpenVPN tente de se reconnecter au serveur.

Linux

L’installation est assez similaire à celle du serveur.
Le fichier de configuration est différent.

Vous devez ensuite récupérer les fichiers suivants, de manière confidentiel, du serveur vers le poste client.
Par exemple avec scp, ou à travers un fichier zip avec un mot de passe :

/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/client.crt
/etc/openvpn/easy-rsa/keys/client.key
où client est le nom utilisé pour identifier votre client.

Vous pouvez placer les fichiers dans /etc/openvpn/

Reprenez la configuration donnée dans le paragraphe précédent.

Corrigez la ligne remote en mettant l’adresse de votre serveur OpenVPN.
Corrigez aussi les cert et key avec les noms du client utilisé.

Pour démarrer le client openvpn en root :

/etc/init.d/openvpn restart

Pour que le client s’établisse au démarrage de Linux, sur une Debian.
Modifiez le /etc/default/openvpn

AUTOSTART="all"
tutoriel_openvpn_linux_anonymisation

Une interface tap0 avec l’adresse IP du client VPN apparaît.

Sur les navigateurs WEB

Il suffit ensuite de configurer les navigateurs WEB pour utiliser le Proxy Squid qui se trouve sur notre serveur VPN.
Ceci à travers le tunnel VPN, il faut donc indiquer l’adresse 10.8.0.1:3128

Comme vous risquez de devoir jongler entre cette connexion et une connexion direct.
Je vous propose d’utiliser des extensions proxy qui permettent de passer d’une configuration proxy à une autre.
Il existe beaucoup d’extensions différentes pour cela, les extensions données sont donc à titre exemple.

FoxyProxy sur Firefox

Dans le cas de Firefox,  vous pouvez utiliser Foxy Proxy.
Dans les options, on configure les accès au proxy, avec l’adresse IP et Port.
Si vous avez activé l’authentification alors configurez le nom d’utilisateur / mot de passe.

tutoriel_openvpn_windows_anonymisation_7

On donne un joli nom à notre proxy avec une couleur distinctif.

tutoriel_openvpn_windows_anonymisation_8

Répetez ensuite l’opération pour configurer les divers proxys.

On peut ensuite passer de l’un à l’autre.

tutoriel_openvpn_windows_anonymisation_10

Enfin l’adresse IP retournée est celle du proxy.

tutoriel_openvpn_windows_anonymisation_11

Configuration avancée

Ici il s’agit d’une configuration simple puisque l’on choisit avec quel proxy sortir.
Mais on peut créer des règles pour dire quel proxy utiliser selon le site isité.
Le but étant par défaut d’utiliser Tor et de passer sur squid lorsque Tor est bloqué par le site.

Il faut déjà bien régler l’ordre des proxys dans la liste.
Ainsi mettre Tor en premier puis Squid et enfin sans proxy.

Ensuite on configure des règles avec le bouton partern pour chaque proxy.
Ces derniers se divent en deux parties :

  • White Patterns : vous configurez les règles qui forcent l’utilisation le proxy. Ici on indique tout avec ALL et *.
  • Black Patterns : les règles qui bypassent cette règle. ici donc tous les sites qui ne passeront pas par tor. De ce fait, ils utilisent le poxy suivant (dans mon cas Taf).

Ensuite on configure ces mêmes règles pour le proxy suivant.
Ainsi le site qui se trouve dans Black Patterns pour Tor et Squid prendra alors Sans proxy.
La connexion à ce site se fera avec votre IP réel et contournera le serveur d’anonymat.

Pour que les règles se jouent, il faut choisir Enables Proxies by Patterns.

Google Chrome

Dans notre exemple de configuration de proxy avec Google Chrome, on utilise : Proxy SwitchySharp
Bien entendu surfer avec Chrome est ici contre productif puisque l’on cherche l’anonymat.
En effet, Chrome effectue beaucoup de remontés d’informations à Google afin de vous pister.

Proxy SwitchySharp pour gérer les proxys sur Chrome

En sélectionnant ce dernier, on passe par le proxy à travers le tunnel VPN.

Proxy SwitchySharp pour gérer les proxys sur Chrome

Se protéger du pistage

Enfin pour se protéger du pistage, vous pouvez suivre ce tutoriel.
En effet, il faut installer d’autres extensions comme canevas Defender pour se protéger du pistage par emrepeinte numérique.

image_pdfimage_print
(Visité 4 632 fois, 6 visites ce jour)

Partager l'article