TOTAL
Depuis Dec 2006
1'942'871 Visiteurs
4'218'042 Pages

Stats Nov 2010
82'909 Visiteurs
146'476 Pages
196 pays
Statistiques completes



Aidez-nous à traduire
nos tutoriaux!

REJOINGNEZ
l'équipe OpenManiak.
OPENVPN - Le Tutorial Facile - Paramètres avancés

openmaniak little square blue OpenVPN openmaniak little arrow right blue Paramètres avancés
Dernière modif: Jan 03 2008


Outil
Installation
Ergonomie
Forum



Détails OpenVPN, c'est quoi?
Captures d'écran
Prérequis & Installation
Tutorial OpenVPN
-----MODE DE SECURITÉ -----------
Tunnel transparent
Clef statique
SSL & PKI (certificats)
-----ÉTUDE DE CAS-----------
VPN IP (TUN)
VPN Ethernet (TAP)
Configurations VPN avancées
----------------
Bridging
Routing



⚠️⚠️⚠️
Please check our website about
attractions in Western Switzerland !! (Please use english translation).

⚠️⚠️⚠️
Merci de consulter notre site sur les
activités à faire en Suisse romande !!



1. PRESENTATION
4. DEMARRER OPENPVN
7. ROUTAGE
2. PARAMETRE DES INTERFACES
5. PORTS TCP/UDP
8. VERIFICATIONS
3. CONFIGURATION
6. IPTABLES
9. SCRIPT DE DEMARRAGE



openmaniak little square blue 1. PRESENTATION:

Dans cette étude de cas, deux sites sont connectés ensemble au travers d'un tunnel OpenVPN en mode SSL/TLS avec des paramètres optionnels très utiles.

Les principaux buts de notre étude de cas sont les suivants:

-




-


-
Etablir une connectivité pour tous les protocoles entre les deux réseaux locaux (réseaux 10.0.1.0/24 et 10.0.2.0/24) à travers un tunnel OpenVPN sur des boitiers Linux.
Ceci signifie que les deux réseaux locaux vont se voir comme s'ils étaient dans le même réseau physique juste séparés par un routeur.

Permettre aux utilisateurs locaux de surfer sur Internet (port TCP 80, HTTP et 443,HTTPS) Une traduction des adresses (NAT) source est requise sur les machines Linux.

Sécuriser les machines Linux avec Netfilter, le module noyau Pare-feu de Linux.
openmaniak openvpn advanced settings

Haut de la page



openmaniak little square blue 2. PARAMETRE DES INTERFACES:

La première chose à faire et de configurer les paramètres IP des machines Linux et des postes de travail (Desktops).
Voir le tutorial OpenManiak pour plus de détails.

openmaniak little arrow right blue Serveur OpenVPN

Configurez l'adresse IP des interfaces:

#ifconfig eth0 50.0.0.1 netmask 255.255.255.0
#ifconfig eth1 10.0.1.1 netmask 255.255.255.0
Configurez la passerelle par défaut:

#route add default gateway 50.0.0.100
Si vous voulez garder vos paramètres IP lorsque le système redémarre, éditez le ficher /etc/network/interfaces:

#vim /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 50.0.0.1
netmask 255.255.255.0
gateway 50.0.0.100

auto eth1
iface eth1 inet static
address 10.0.1.1
netmask 255.255.255.0
openmaniak little arrow right blue Client OpenVPN

Configurez l'adresse IP des interfaces:

#ifconfig eth0 100.0.0.1 netmask 255.255.255.0
#ifconfig eth1 10.0.2.1 netmask 255.255.255.0
Configurez la passerelle par défaut:

#route add default gateway 100.0.0.100
Si vous voulez garder vos paramètres IP lorsque le système redémarre, éditez le ficher /etc/network/interfaces:

#vim /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 100.0.0.1
netmask 255.255.255.0
gateway 100.0.0.100

auto eth1
iface eth1 inet static
address 10.0.2.1
netmask 255.255.255.0
openmaniak little arrow right blue Poste de travail du réseau local A

Adresse IP:
Masque:
Passerelle:
10.0.1.100
255.255.255.0
10.0.1.1
openmaniak little arrow right blue Poste de travail du réseau local B

Adresse IP:
Masque:
Passerelle:
10.0.2.100
255.255.255.0
10.0.2.1

Haut de la page



openmaniak little square blue 3. CONFIGURATIONS:

Les fichiers utilisés par OpenVPN sont localisés dans le dossier /etc/openvpn.
Les machines OpenVPN auront les fichiers suivants:

openvpn.conf - le fichier de configuration d'OpenVPN.
ipp.txt (serveur seulement) - un fichier de réservation IP pour l'assignement dynamique d'adresses IP.
route.txt (serveur seulement)- script pour ajouter une route sur le serveur quand le tunnel est monté.

Ci-dessous, les fichiers créés par l'autorité de certification (CA), référez-vous au tutorial SSL/PKI pour savoir comment les créer.

ca.crt - le certificat de l'autorité de certification (clef publique du CA).
server.crt or client.crt - le certificat du serveur ou du client (clef publique du serveur ou du client).
server.key or client.key - la clef privée du serveur ou du client.
dh1024pem (serveur seulement) - les paramètres Diffie-Hellman (DH).

openmaniak little arrow right blue Fichier openvpn.conf:

SERVEUR CLIENT
# Adresse IP à l'écoute
local 50.0.0.1
# Port Local
lport 2000
# Port distant
rport 2001
# Mode du tunnel
dev tap
# Certificat du CA
ca ca.crt
# Certificat du serveur
cert server.crt
# Clef privée du serveur
key server.key
# Diffie-Hellman
dh dh1024.pem
# Etendue DHCP, le serveur prends l'IP
# 10.7.0.1
server 10.7.0.0 255.255.255.248
# fichier de réservation IP
ifconfig-pool-persist ipp.txt
# Route fournie au client
push "route 10.0.1.0 255.255.255.0"
# Chiffrement
ciper AES-256-CBC
# Authentification
auth MD5
# La compression est activée
comp-lzo
# Clients autorisés
max-clients 10
# Réduire les privilèges du démon
# OpenVPN après l'initialisation
# (Linux seulement)
user nobody
# Statistiques OpenVPN
status openvpn-status.log
# Niveau de verbosité
verb 2
# Script lancé quand le tunnel est monté
# up
up "./route.txt"
# Après l'initialisation, OpenVPN peut
# accéder à un directoire seulement
# (Linux seulement)
chroot /etc/openvpn/
 
 
 
# Adresse IP WAN du serveur
remote 50.0.0.1
# Port local
lport 2001
# Port distant
rport 2000
# Mode du tunnel
dev tap
# Certificat du CA
ca ca.crt
# Clef privée du serveur
cert client.crt
# Clef privée du client
key client.key
 

 


 

 

# Chiffrement
ciper AES-256-CBC
# Authentification
auth MD5
# La compression est activée
comp-lzo
 

# Reduire les privilèges du démon
# OpenVPN après l'initialisation
# (Linux seulement)
user nobody
# Statistiques OpenVPN
status openvpn-status.log
# Niveau de verbosité
verb 2

 

 
# Après l'initialisation, OpenVPN peut
# accéder à un directoire seulement
# (Linux seulement)
chroot /etc/openvpn/
# The client accepte les options
# poussées par le serveur
pull
Voici un résumé des fonctionnalités OpenVPN utilisées dans notre tutorial comparées à leur valeur par défaut.

Paramètres optionnels:
Mode tunnel
Serveur DHCP
Adresses persistantes
Transmission de routes
chiffrement
Authentification
Compression
Port source serveur
Port source serveur

Droits
Utilisateurs max
Script "up"
Assignement IP
Niveau de verbosité
Etude de cas
dev tap
server 10.7.0.0 255.255.255.248
ifconfig-pool-persist ipp.txt
push "10.0.1.0 255.255.255.0"
cipher AES
auth md5
comp-lzo
lport 2000
rport 2001
user nodody
chroot /etc/openvpn
10
up "route.txt"
ifconfig-pool-persist
verb 2
Default settings:
dev tun
-
-
-
cipher BF-CBC
auth sha1
-
lport 1194
rport 1194
user root
-
- (Unlimited)
-
-
verb 0
Soyez attentif de bien ajouter l'extension de fichier ".conf" à votre fichier de configuration. Ceci est requis pour l'utilisation du script /etc/init.d/openvpn pour démarrer OpenVPN automatiquement.

openmaniak little arrow right blue Fichier ipp.txt:

Le fichier /etc/openvpn/ipp.txt est utilisé pour stocker les réservations d'IP quand le serveur OpenVPN assigne dynamiquement des adresses aux clients.

La syntaxe est la suivante:
nom_du_certificat_client,adresse_IP

Le nom_du_certificat_client est le nom choisi lors de la création du certificat client, voir le tutorial OpenVPN PKI . Dans notre étude de cas, nous avons choisi client1 comme nom_du_certificat_client.

client1,10.7.0.6
openmaniak little arrow right blue Fichier route.txt:

Quand le tunnel est monté, le serveur lance le script bash "route.txt" qui va lui ajouter une route pour atteindre le réseau local du client.

#!/bin/bash
route add -net 10.0.2.0/24 gw 10.7.0.6
-------------------------------------

La dernière chose à faire est de configurer les permissions sur le dossier /etc/openvpn directory.

L'utilisateur teddy a les permissions lecture/écriture/exécution. N'importe qui d'autre n'a aucune permission.
Les fichiers les plus important dans le dossier sont les clefs privées. (server.key or client.key selon la machine sur laquelle vous vous trouvez). Si la clef privée de votre serveur est capturée, cela voudra dire que la sécurité de votre architecture OpenVPN est compromise!

#chmod 700 /etc/openvpn/*
L'utilisateur teddy est le propriétaire des fichiers dans le dossier /etc/openvpn.

#chown teddy /etc/openvpn/*
Haut de la page



openmaniak little square blue 4. DEMARRER OPENVPN

Démarrons OpenVPN sur le client et le serveur et vérifions les journaux:

#openvpn /etc/openvpn/openvpn.conf
Journal du serveur:

1

16





22
21
10
8/11

15

14

3
4


2


17
18


5
6

12
OpenVPN 2.0.9 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Mar 2 2007
WARNING: No server certificate verification method has been enabled.
   See http://openvpn.net/howto.html#mitm for more info.
LZO compression initialized
Control Channel MTU parms [ L:1586 D:138 EF:38 EB:0 ET:0 EL:0 ]
Data Channel MTU parms [ L:1586 D:1450 EF:54 EB:135 ET:32 EL:0 AF:3/1 ]
Local Options hash (VER=V4): '579db898'
Expected Remote Options hash (VER=V4): 'a0883d96'
chroot to '/etc/openvpn' and cd to '/' succeeded
UID set to nobody
UDPv4 link local (bound): [undef]:2001
UDPv4 link remote: 50.0.0.1:2000
TLS: Initial packet from 50.0.0.1:2000, sid=100aa16d 662ac586
VERIFY OK: depth=1, /C=US/ST=CA/L=SanFrancisco/O=OpenManiak/
   CN=OpenManiak_CA/emailAddress=opensource@openmaniak.com
VERIFY OK: depth=0, /C=US/ST=CA/L=SanFrancisco/O=OpenManiak/
   CN=server/emailAddress=opensource@openmaniak.com
Data Channel Encrypt: Cipher 'AES-256-CBC' initialized with 256 bit key
Data Channel Encrypt: Using 128 bit message hash 'MD5' for HMAC authentication
Data Channel Decrypt: Cipher 'AES-256-CBC' initialized with 256 bit key
Data Channel Decrypt: Using 128 bit message hash 'MD5' for HMAC authentication
Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 1024 bit RSA
[server] Peer Connection Initiated with 50.0.0.1:2000
SENT CONTROL [server]: 'PUSH_REQUEST' (status=1)
PUSH: Received control message: 'PUSH_REPLY,route 10.0.1.0 255.255.255.0,
   route-gateway 10.7.0.1,ifconfig 10.7.0.6 255.255.255.248'

OPTIONS IMPORT: --ifconfig/up options modified
OPTIONS IMPORT: route options modified
TUN/TAP device tap0 opened
ifconfig tap0 10.7.0.6 netmask 255.255.255.248 mtu 1500 broadcast 10.7.0.7
route add -net 10.0.1.0 netmask 255.255.255.0 gw 10.7.0.1
Initialization Sequence Completed
Légende:

1.
2.
3.
4.
Version OpenVPN
Mode de sécurité
Chiffrement
Hachage
5.
6.
7.
8.
Pilotes TUN/TAP
MTU du tunnel
IP locale du tunnel
Ip distante du tunnel
9.
10.
11.
12.
Serveur OpenVPN
Port Local
Port distant
status OpenVPN
13.
14.
15.
16.
Certificat client
Certificat serveur
Certificat du CA
Compression
17.
18.
19.
 
Route fournie au client
IP fournie au client
Reservation IP
 
21.
22.
23
 
Utilisateur
Limitation du process
Script "up"
 

Journal du client:

1



5
6/7
23

22
21
9
10


19

12

8
16
11





15

13

3
4




2



17
18
 
OpenVPN 2.0.9 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] built on Mar 2 2007
WARNING: --keepalive option is missing from server config
Diffie-Hellman initialized with 1024 bit key
TLS-Auth MTU parms [ L:1586 D:138 EF:38 EB:0 ET:0 EL:0 ]
TUN/TAP device tap0 opened
ifconfig tap0 10.7.0.1 netmask 255.255.255.248 mtu 1500 broadcast 10.7.0.7
./echo.txt tap0 1500 1586 10.7.0.1 255.255.255.248 init
Data Channel MTU parms [ L:1586 D:1450 EF:54 EB:135 ET:32 EL:0 AF:3/1 ]
chroot to '/etc/openvpn' and cd to '/' succeeded
UID set to nobody
UDPv4 link local (bound): 50.0.0.1:2000
UDPv4 link remote: [undef]
MULTI: multi_init called, r=256 v=256
IFCONFIG POOL: base=10.7.0.2 size=5
IFCONFIG POOL LIST
client1,10.7.0.6
Initialization Sequence Completed
MULTI: multi_create_instance called
100.0.0.1:2001 Re-using SSL/TLS context
100.0.0.1:2001 LZO compression initialized
100.0.0.1:2001 Control Channel MTU parms [ L:1586 D:138 EF:38 EB:0 ET:0 EL:0 ]
100.0.0.1:2001 Data Channel MTU parms [ L:1586 D:1450 EF:54 EB:135 ET:32 EL:0
   AF:3/1 ]
100.0.0.1:2001 Local Options hash (VER=V4): 'a0883d96'
100.0.0.1:2001 Expected Remote Options hash (VER=V4): '579db898'
100.0.0.1:2001 TLS: Initial packet from 100.0.0.1:2001, sid=85abe7b5 a5dcafc0
100.0.0.1:2001 VERIFY OK: depth=1, /C=US/ST=CA/L=SanFrancisco/O=OpenManiak/
   CN=OpenManiak_CA/emailAddress=opensource@openmaniak.com
100.0.0.1:2001 VERIFY OK: depth=0, /C=US/ST=CA/L=SanFrancisco/O=OpenManiak/
   CN=client1/emailAddress=opensource@openmaniak.com
100.0.0.1:2001 Data Channel Encrypt: Cipher 'AES-256-CBC' initialized with 256 bit key
100.0.0.1:2001 Data Channel Encrypt: Using 128 bit message hash 'MD5' for
   HMAC authentication
100.0.0.1:2001 Data Channel Decrypt: Cipher 'AES-256-CBC' initialized with 256 bit key
100.0.0.1:2001 Data Channel Decrypt: Using 128 bit message hash 'MD5' for
   HMAC authentication
100.0.0.1:2001 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA,
   1024 bit RSA
100.0.0.1:2001 [client1] Peer Connection Initiated with 100.0.0.1:2001
client1/100.0.0.1:2001 PUSH: Received control message: 'PUSH_REQUEST'
client1/100.0.0.1:2001 SENT CONTROL [client1]: 'PUSH_REPLY,route 10.0.1.0
   255.255.255.0,route-gateway 10.7.0.1,ifconfig 10.7.0.6 255.255.255.248'
(status=1)
client1/100.0.0.1:2001 MULTI: Learn: 12:5a:a3:22:f7:11 -> client1/100.0.0.1:2001
L'utiliatire Ping est très utile pour tester si le tunnel est monté.
Le serveur (10.7.0.1) dervait être capable de pinger le client (10.7.0.6) et vice versa.

serveur#ping 10.7.0.6
Un script init.d est disponible pour démarrer ou arrêter OpenVPN. Soyez attentif, comme indiqué dans la section de configuration, que vos fichiers de configurations sont localisés dans le dossier /etc/openvpn et ont une extension de fichier .conf".

#/etc/init.d/openvpn stop
Stopping virtual private network daemon: openvpn.

#/etc/init.d/openvpn start
Starting virtual private network daemon: openvpn.

#/etc/init.d/openvpn restart
Stopping virtual private network daemon: openvpn.
Starting virtual private network daemon: openvpn(OK).


Les journaux sont écris par défaut dans le fichier /var/log/syslog.

Vous pouvez vérifier le status du processus OpenVPN:

#ps -ef | grep openvpn
UID PID PPID C STIME TTY TIME CMD
nobody
 
 
 
 
2792
 
 
 
 
1
 
 
 
 
0
 
 
 
 
09:59
 
 
 
 
?
 
 
 
 
00:00:00
 
 
 
 
/usr/sbin/openvpn
-- writepid /var/run/openvpn.conf.pid
--daemon ovpn-conf
--cd /etc/openvpn
--config /etc/openvpn/openvpn.conf
Vérifiez la table de routage sur le serveur OpenVPN:

#route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.7.0.0 0.0.0.0 255.255.255.248 U 0 0 0 tap0
10.0.2.0 10.7.0.6 255.255.255.0 UG 0 0 0 tap0
50.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 50.0.0.100 0.0.0.0 UG 0 0 0 eth0
Haut de la page



openmaniak little square blue 5. PORTS TCP ou UDP OUVERTS:

Vérifions quels sont les ports UDP et TCP ouverts:

Le but est de fermer tous les ports ouverts qui ne sont pas requis pour améliorer la sécurité en prévenant des attaques potentielles .
Identifions les ports TCP et UDP ouverts sur notre Linux de test qui est une Ubuntu 7.10, édition poste de travail (Desktop Edition)

openmaniak little arrow right blue Ports UDP:

#netstat -uaen
-u: UDP
-t: TCP
-a: all
-e: étendu
-n: numérique


Active Internet connections (servers and established)
Proto
Recv-Q
Send-Q
Local Address Foreign Address State User Inode
udp
0
0
0.0.0.0:1025 0.0.0.0:*   105 15129
udp
0
0
50.0.0.1:2000 0.0.0.0:*   0 17810
udp
0
0
0.0.0.0:5353 0.0.0.0:*   105 15128
Regardons quels sont les utilisateurs ayant les ID "0" et "105".

#cat /etc/passwd
user: status: userid: groupid: description: home_directory: shell
root: x: 0: 0: root: /root: /bin/bash
avahi: x: 105: 105: Avahi mDNS daemon,,,: /var/run/avahi-daemon: /bin/false
Avahi est un démon qui permet à des programmes de publier et découvrir des services et des hôtes sur un réseau local avec pas de configuration spécifique.
Ce démon n'est pas requis dans notre étude de cas, nous pouvons donc soit le désactiver, soit de désinstaller.
Veuillez noter que les deux ports Avihi sont déjà fermés sur la version serveur d'Ubuntu.

Stoppez le démon:

#/etc/init.d/avihi-daemon stop
Désactivation de Avihi au démarrage du système:

Dans le fichier /etc/defaut/avahi-daemon, changez la valeur AVAHI_DAEMON_START de "1" à "0":

AVAHI_DAEMON_START=0
Désinstallation du démon:

#apt-get remove avihi-daemon
Le démon Avihi n'est maintenant plus actif, nous pouvons donc revérifier le statu des ports UDP et voir que le port OpenVPN est le seul port UDP ouvert.

#netstat -uaen
Active Internet connections (servers and established)
Proto
Recv-Q
Send-Q
Local Address Foreign Address State User Inode
udp
0
0
50.0.0.1:2000 0.0.0.0:*   0 17810
openmaniak little arrow right blue Ports TCP:

#netstat -taen
Active Internet connections (servers and established)
Proto
Recv-Q
Send-Q
Local Address Foreign Address State User Inode
tcp
0
0
127.0.0.0.1:631 0.0.0.0:* LISTEN 0 15395
tcp
0
0
127.0.0.0.1:2207 0.0.0.0:* LISTEN 108 15469
tcp
0
0
127.0.0.0.1:2208 0.0.0.0:* LISTEN 0 15426
tcp6
0
0
:::22 :::* LISTEN 0 15688
Les ports TCP 631 (cupsys), 2207 et 2208 (hplip) sont des ports d'impression et ne sont pas requis dans notre étude de cas présente. Nous pouvons donc désinstaller les services associés et ainsi fermer les ports.
Veuillez noter que les trois ports d'impression sont déjà fermés dans le version serveur d'Ubuntu.

#apt-get remove hplip
#apt-get remove cupsys
Les démons d'impressions sont maintenant désinstallés, nous pouvons donc vérifier de nouveau le statu des ports TCP et voir que le port SSH est le seul port ouvert.

#netstat -taen
Active Internet connections (servers and established)
Proto
Recv-Q
Send-Q
Local Address Foreign Address State User Inode
tcp6
0
0
:::22 :::* LISTEN 0 15688
Haut de la page



openmaniak little square blue 6. IPTABLES:

Iptables est un outil utilisé pour configurer Netfilter et doit être lancé en que root.
Netfilter, quant à lui, est un module du noyau disponible depuis la version du noyau 2.4. Il apporte trois principales fonctionnalités:

- Filtrage de paquets - accepte ou rejette des paquets
- NAT - Change l'adresse IP source ou destination de paquets réseau.
- Modification de paquets - Modifie la structure des paquets

Le but pour nous est d'ouvrir seulement les ports requis et de fermer tous les autres pour limiter des attaques potentiels sur nos systèmes Linux.

La stratégie de sécurité de note étude de cas est la suivante:

Règles de filtrage:

- Ouverture des ports utilisés par OpenVPN pour générer le tunnel entre les deux Linux.
- Ouverture des 80 et 443 ports vers l'extérieur pour laisser les machines locales surfer sur Internet.
- Acceptation de tout le trafic à l'intérieur du tunnel.
- Rejet de tout autre trafic.

openmaniak little arrow right blue Configuration du serveur OpenVPN Linux:

- ANNULATION DES PARAMETRES IPTABLES EXISTANT:

#iptables -F
--------------------------------------------------------

- STRATEGIES PAR DEFAUT:
Configuration des règles pour rejeter par défaut tout les trafics entrant et sortant et accepter le trafic "Forward" (trafic inter-interface:)

#iptables -P OUTPUT DROP
#iptables -P INPUT DROP
#iptables -P FORWARD ACCEPT
--------------------------------------------------------

- REGLES OPENVPN:
Autorisation du tunnel OpenVPN:

#iptables -A INPUT -i eth0 -p udp -s 100.0.0.1 -d 50.0.0.1 --sport 2001 --dport 2000 -j ACCEPT
#iptables -A OUTPUT -o eth0 -p udp -s 50.0.0.1 -d 100.0.0.1 --sport 2000 --dport 2001 -j ACCEPT
Autosization de tous le trafic à l'intérieur du tunnel:

#iptables -A INPUT -i tap+ -p all -j ACCEPT
#iptables -A OUTPUT -o tap+ -p all -j ACCEPT
--------------------------------------------------------

- INTERFACE LAN
Tous le trafic de et vers l'interface LAN (eth1) est accepté:

#iptables -A INPUT -i eth1 -p all -s 10.0.1.0/24 -j ACCEPT
#iptables -A OUTPUT -o eth1 -p all -d 10.0.1.0/24 -j ACCEPT
--------------------------------------------------------

- ACCES INTERNET:
Règles de NAT:
Les utilisateurs du réseau local A doivent être capable de surfer sur Internet impliquant des paramètres de NAT.
Par exemple, quand le poste de travail situé sur le site A veux accéder une page web sur Internet, son adresse IP source est traduite et prend l'adresse IP WAN du serveur OpenVPN. En d'autres termes, 10.0.1.100 est traduit en 50.0.0.1 et vice versa quand les paquets reviennent au poste de travail.
Ce type de NAT est appelé "masquerade".

#iptables -t nat -A POSTROUTING -j MASQUERADE
Autorisation de l'accès Internet:
Les utilisateurs LAN sont autorisés à accéder uniquement à des ressources HTTP ou HTTPS:

#iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -o eth0 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -A INPUT -p tcp -m multiport --sports 80,443 -i eth0 -m state --state ESTABLISHED -j ACCEPT
--------------------------------------------------------

- REGLES FACULTATIVES:
Si vous avez des serveurs SSH sur vos machines OpenVPN, vous pouvez configurer les règles pour accepter le trafic SSH.
Pour installer un serveur SSH, il suffit d'utiliser les commandes suivantes: "apt-get install openssh-server"

Règles pour permettre au client SSH local d'accéder à un serveur SSH distant.

#iptables -A OUTPUT -p tcp -o eth0 --dport 22 -s 50.0.0.1 -j ACCEPT
#iptables -A INPUT -p tcp --sport 22 -i eth0 -d 50.0.0.1 -m state --state ESTABLISHED -j ACCEPT
Règles pour permettre à des clients SSH d'accéder au serveur SSH local.

#iptables -A INPUT -p tcp --dport 22 -i eth0 -d 50.0.0.1 -j ACCEPT
#iptables -A OUTPUT -p tcp --sport 22 -o eth0 -s 50.0.0.1 -m state --state ESTABLISHED -j ACCEPT
Pour les tests de connectivités, 50.0.0.1 et 100.0.0.1 peuvent se pinger l'un l'autre.

#iptables -A INPUT -p icmp -i eth0 -s 100.0.0.1 -d 50.0.0.1 -j ACCEPT
#iptables -A OUTPUT -p icmp -o eth0 -d 100.0.0.1 -s 50.0.0.1 -j ACCEPT
--------------------------------------------------------

- VERIFICATIONS
Vérifiez la table de routage du Pare-feu:

#iptables -v -L
Chain INPUT (policy DROP 13 packets, 683 bytes)
pkts bytes target prot opt in out source destination  
0 0 ACCEPT udp -- eth0 * 100.0.0.1 50.0.0.1 udp spt:2001 dpt:2000
4 272 ACCEPT 0 -- tap+ * 0.0.0.0/0 0.0.0.0/0  
0 0 ACCEPT 0 -- eth0 * 10.0.1.0/24 0.0.0.0/0  
0
 
0
 
ACCEPT
 
tcp
 
--
 
eth0
 
*
 
0.0.0.0/0
 
0.0.0.0/0
 
multiport sports 80,443 state ESTABLISHED
4 336 ACCEPT icmp -- eth0 * 100.0.0.1 50.0.0.1  
0
 
0
 
ACCEPT
 
tcp
 
--
 
eth0
 
*
 
0.0.0.0/0
 
50.0.0.1
 
tcp spt:22 state ESTABLISHED
157 10884 ACCEPT tcp -- eth0 * 0.0.0.0/0 50.0.0.1 tcp dpt:22
                   
Chain FORWARD (policy ACCEPT 5 packets, 217 bytes)
pkts bytes target prot opt in out source destination  
                   
Chain OUTPUT (policy DROP 339 packets, 110K bytes)
pkts bytes target prot opt in out source destination  
0 0 ACCEPT udp -- * eth0 50.0.0.1 100.0.0.1 udp spt:2000 dpt:2001
    ACCEPT 0 -- * tap+ 0.0.0.0/0 0.0.0.0/0  
0 0 ACCEPT 0 -- * eth0 0.0.0.0/0 10.0.1.0/24  
0 0 ACCEPT tcp -- * eth0 0.0.0.0/0 0.0.0.0/0 multiport dports 80,443
4 336 ACCEPT icmp -- * eth0 50.0.0.1 100.0.0.1  
0 0 ACCEPT tcp -- * eth0 50.0.0.1 0.0.0.0/0 tcp dpt:22
173
 
22594
 
ACCEPT
 
tcp
 
--
 
*
 
eth0
 
50.0.0.1
 
0.0.0.0/0
 
tcp spt:22 state ESTABLISHED
Vérifiez la table NAT:

#iptables -L -t nat
Chain INPUT (policy DROP 13 packets, 683 bytes)
pkts bytes target prot opt in out source destination  
                   
Chain FORWARD (policy ACCEPT 5 packets, 217 bytes)
pkts bytes target prot opt in out source destination  
108 9273 MASQUERADE 0 - - any eth0 anywhere    
                   
Chain OUTPUT (policy DROP 339 packets, 110K bytes)
pkts bytes target prot opt in out source destination  
openmaniak little arrow right blue OpenVPN Client Linux Configuration:

- ANNULATION DES PARAMETRES IPTABLES EXISTANT:

#iptables -F
--------------------------------------------------------

- STRATEGIES PAR DEFAUT:
Configuration des règles pour rejeter par défaut tout les trafics entrant et sortant et accepter le trafic "Forward" (trafic inter-interface:)

#iptables -P OUTPUT DROP
#iptables -P INPUT DROP
#iptables -P FORWARD ACCEPT
--------------------------------------------------------

- REGLES OPENVPN:
Autorisation du tunnel OpenVPN:

#iptables -A INPUT -i eth0 -p udp -s 50.0.0.1 -d 100.0.0.1 --sport 2000 --dport 2001 -j ACCEPT
#iptables -A OUTPUT -o eth0 -p udp -s 100.0.0.1 -d 50.0.0.1 --sport 2001 --dport 2000 -j ACCEPT
Autorisation de tous le trafic à l'intérieur du tunnel:

#iptables -A INPUT -i tap+ -p all -j ACCEPT
#iptables -A OUTPUT -o tap+ -p all -j ACCEPT
--------------------------------------------------------

- INTERFACE LAN
Tous le trafic de et vers l'interface LAN (eth1) est accepté:

#iptables -A INPUT -i eth1 -p all -s 10.0.2.0/24 -j ACCEPT
#iptables -A OUTPUT -o eth1 -p all -d 10.0.2.0/24 -j ACCEPT
--------------------------------------------------------

- ACCES INTERNET:
Règles de NAT:

Les utilisateurs du réseau local B doivent être capable de surfer sur Internet impliquant des paramètres de NAT.
Par exemple, quand le poste de travail situé sur le site A veux accéder une page web sur Internet, son adresse IP source est traduite et prend l'adresse IP WAN du serveur OpenVPN. En d'autres termes, 10.0.2.100 est traduit en 1000.0.0.1 et vice versa quand les paquets reviennent au poste de travail.
Ce type de NAT est appelé "masquerade".

#iptables -t nat -A POSTROUTING -j MASQUERADE
Autorisation de l'accès Internet:
Les utilisateurs LAN sont autorisés à accéder uniquement à des ressources HTTP ou HTTPS:

#iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -o eth0 -j ACCEPT
#iptables -A INPUT -p tcp -m multiport --sports 80,443 -i eth0 -m state --state ESTABLISHED -j ACCEPT
--------------------------------------------------------

- REGLES FACULTATIVES:
Si vous avez des serveurs SSH sur vos machines OpenVPN, vous pouvez configurer les règles pour accepter le trafic SSH.
Pour installer un serveur SSH, il suffit d'utiliser les commandes suivantes: "apt-get install openssh-server"

Règles pour permettre au client SSH local d'accéder à un serveur SSH distant.

#iptables -A OUTPUT -p tcp -o eth0 --dport 22 -s 100.0.0.1 -j ACCEPT
#iptables -A INPUT -p tcp --sport 22 -i eth0 -d 100.0.0.1 -m state --state ESTABLISHED -j ACCEPT
Règles pour permettre à des clients SSH d'accéder au serveur SSH local.

#iptables -A INPUT -p tcp --dport 22 -i eth0 -d 100.0.0.1 -j ACCEPT
#iptables -A OUTPUT -p tcp --sport 22 -o eth0 -s 100.0.0.1 -m state --state ESTABLISHED -j ACCEPT
Pour les tests de connectivités, 50.0.0.1 et 100.0.0.1 peuvent se pinger l'un l'autre.

#iptables -A INPUT -p icmp -i eth0 -s 50.0.0.1 -d 100.0.0.1 -j ACCEPT
#iptables -A OUTPUT -p icmp -o eth0 -d 50.0.0.1 -s 100.0.0.1 -j ACCEPT
Haut de la page



openmaniak little square blue 7. ROUTAGE

openmaniak little arrow right blue Routes réseau

Pour établir le lien entre des machines des LANs du site A et B, les routes suivantes doivent être ajoutées sur les équipements VPN.

Sur le serveur OpenVPN:
réseau destination 10.0.2.0 masque 255.255.255.0 passerelle 10.7.0.6
Sur le client OpenVPN:
réseau destination 10.0.1.0 masque 255.255.255.0 passerelle 10.7.0.1

Les deux routes sont automatiquement ajoutées avec notre configuration du serveur. En effet, la route du serveur OpenVPN est ajoutée avec le script "route.txt" et la route du client OpenVPN est poussée par le serveur OpenVPN.

openmaniak little arrow right blue IP forwarding (Redirection IP)

L'IP forwarding est requis pour transférer des paquets entre les interfaces réseau d'un système Linux

#echo "1" > /proc/sys/net/ipv4/ip_forward
La commande ci-dessus va ajouter la valeur "1" dans le fichier /proc/sys/net/ipv4/ip_forward et ainsi activer l'IP forwarding.
Si vous voulez garder l'IP forwarding après un redémarrage:

#echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
Haut de la page



openmaniak little square blue 8. VERIFICATIONS:

Les clients (10.0.1.100 et 10.0.2.100) devraient être capable de se voir l'un l'autre et accéder à des ressources HTTP et HTTPS sur Internet.

openmaniak little arrow right blue Test de connectivités LAN à LAN:

Les clients (10.0.1.100 et 10.0.2.100) devraient être capable de se voir l'un l'autre. Les commandes ping et traceroute peuvent être utilisées à ce propos.
Depuis le client 10.0.1.100 qui est une machine Linux:

#ping 10.0.2.100
#traceroute 10.0.2.100
traceroute to 10.0.2.100 (10.0.2.100), 30 hops max, 40 byte packets
1 10.0.1.1 (10.0.1.1)  0.521 ms  0.848 ms  1.011 ms
2 10.7.0.6 (10.7.0.6)  0.420 ms  0.472 ms  0505 ms
3 10.0.2.100 (10.0.2.100)  0.538 ms  *  *

openmaniak little arrow right blue Vérification de l'accès Internet HTTP:

Une façon de tester si le Pare-feu IPtables est configuré pour accepter le trafic HTTP (port TCP 80) et HTTPS (port TCP 443) est d'utiliser un navigateur Internet ou encore plus simple, la ligne de commande. Celle ci peut être utilisée pour vérifier que les port TCP 80 ou TCP 443 sont ouverts avec le client telnet.

#telnet 100.0.0.100 80
Trying 100.0.0.100...
Connected to 100.0.0.100.
Escape character is '^]'.
Bien-sûr, nous ne voyons qu'une bannière (Escape character is '^]'.) mais cela est suffisant pour indiquer que le port est ouvert.

Pour comparer, voici le résultat que vous obtenez si vous testez un port fermé, par exemple le port FTP TCP 21:

#telnet 100.0.0.100 21
Trying 100.0.0.100...
openmaniak little arrow right blue Table de routage:

Serveur:

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.7.0.0 0.0.0.0 255.255.255.248 U 0 0 0 tap0
10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
10.0.2.0 10.7.0.6 255.255.255.0 UG 0 0 0 tap0
50.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 50.0.0.100 0.0.0.0 UG 0 0 0 eth0
Client:

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.7.0.0 0.0.0.0 255.255.255.248 U 0 0 0 tap0
10.0.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
10.0.1.0 10.7.0.1 255.255.255.0 UG 0 0 0 tap0
100.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 100.0.0.100 0.0.0.0 UG 0 0 0 eth0
openmaniak little arrow right blue TCPdump

TCPdump est utilisé ci-dessous pour vérifier que le trafic à l'intérieur du tunnel OpenVPN dans le premier exemple and sur le port 2000 de l'interface WAN de Linux dans le second exemple. Les deux exemples sont effectués sur le serveur OpenVPN.

#tcpdump -i tap0 -n
- n: numeric
- i: interface


tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tap0, link-type EN10MB (Ethernet), capture size 96 bytes
IP 10.7.0.1 > 10.7.0.6: ICMP echo request, id 1824, seq 60, length 64
IP 10.7.0.6 > 10.7.0.1: ICMP echo reply, id 1824, seq 60, length 64
IP 10.7.0.1 > 10.7.0.6: ICMP echo request, id 1824, seq 61, length 64
#tcpdump -i eth0 port 2000 -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
IP 50.0.0.1.2000 > 100.0.0.1.2001: UDP, length 145
IP 100.0.0.1.2001 > 50.0.0.1.2000: UDP, length 145
IP 50.0.0.1.2000 > 100.0.0.1.2001: UDP, length 145
IP 100.0.0.1.2001 > 50.0.0.1.2000: UDP, length 145
IP 50.0.0.1.2000 > 100.0.0.1.2001: UDP, length 145
IP 100.0.0.1.2001 > 50.0.0.1.2000: UDP, length 145
Haut de la page



openmaniak little square blue 9. SCRIPT DE DEMARRAGE

openmaniak little arrow right blue OpenVPN

Le logiciel OpenVPN est configuré pour être lancé automatiquement quand le système démarre.

Pour configurer manuellement OpenVPN pour être lancé automatiquement au démarrage:

#update-rc.d openvpn defaults
Pour prévenir OpenVPN de démarrer automatiquement au démarrage:

#update-rc.d -f openvpn remove
openmaniak little arrow right blue IPtables

Les commandes IPtables ont besoin d'être ajoutée dans un fichier appelé "iptables.sh" qui sera exécuté quand le système Linux démarre.
Le fichier étant stocké dans le dossier /root .

Ajoutez une ligne dans le fichier /etc/crontab pour démarrer les commandes IPtables automatiquement à chaque démarrage:

#vim /etc/crontab
@reboot root /root/iptables.sh >> /dev/null
- Fichier serveur OpenVPN.
/home/root/iptables.sh

# Paramètres IPtables du serveur OpenVPN
#
#ANNULER vos paramètres IPtables:
iptables -F
#
#STRATEGIES PAR DEFAUT:
#
iptables -P OUTPUT DROP
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
#
#Autorisation du tunnel OpenVPN:
#
iptables -A INPUT -i eth0 -p udp -s 100.0.0.1 -d 50.0.0.1 --sport 2001 --dport 2000 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp -s 50.0.0.1 -d 100.0.0.1 --sport 2000 --dport 2001 -j ACCEPT
#
#Autorisation de tout le trafic dans le tunnel:
#
iptables -A INPUT -i tap+ -p all -j ACCEPT
iptables -A OUTPUT -o tap+ -p all -j ACCEPT
#
#Tous le trafic de et vers l'interface LAN (eth1) est acceptée:
#
iptables -A INPUT -i eth1 -p all -s 10.0.1.0/24 -j ACCEPT
iptables -A OUTPUT -o eth1 -p all -d 10.0.1.0/24 -j ACCEPT
#
#Règles de NAT:
#
iptables -t nat -A POSTROUTING -j MASQUERADE
#
#Les utilisateurs du LAN sont autorisés à accéder aux ressources Internet HTTP et HTTPS seulement:
#
iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -o eth0 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --sports 80,443 -i eth0 -m state --state ESTABLISHED -j ACCEPT
#
# REGLES FACULTATIVES:
#
#Règles pour autoriser le client SSH local à accéder à un serveur SSH distant:
#
iptables -A OUTPUT -p tcp -o eth0 --dport 22 -s 50.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp --sport 22 -i eth0 -d 50.0.0.1 -m state --state ESTABLISHED -j ACCEPT
#
#Règles pour permettre aux clients SSH distants d'accéder au serveur SSH local:
#
iptables -A INPUT -p tcp --dport 22 -i eth0 -d 50.0.0.1 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -o eth0 -s 50.0.0.1 -m state --state ESTABLISHED -j ACCEPT
#
#Pour les tests de connectivités, 50.0.0.1 et 100.0.0.1 peuvent se pinger mutuellement.
#
iptables -A INPUT -p icmp -i eth0 -s 100.0.0.1 -d 50.0.0.1 -j ACCEPT
iptables -A OUTPUT -p icmp -o eth0 -d 100.0.0.1 -s 50.0.0.1 -j ACCEPT
- OpenVPN client file.
/home/root/iptables.sh

# Paramètres IPtables du client OpenVPN
#
#ANNULER vos paramètres IPtables:
iptables -F
#
#STRATEGIES PAR DEFAUT:
#
iptables -P OUTPUT DROP
iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
#
#Autorisation du tunnel OpenVPN:
#
iptables -A INPUT -i eth0 -p udp -s 50.0.0.1 -d 100.0.0.1 --sport 2000 --dport 2001 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp -s 100.0.0.1 -d 50.0.0.1 --sport 2001 --dport 2000 -j ACCEPT
#
#Autorisation de tout le trafic dans le tunnel:
#
iptables -A INPUT -i tap+ -p all -j ACCEPT
iptables -A OUTPUT -o tap+ -p all -j ACCEPT
#
#Tous le trafic de et vers l'interface LAN (eth1) est acceptée:
#
iptables -A INPUT -i eth1 -p all -s 10.0.2.0/24 -j ACCEPT
iptables -A OUTPUT -o eth1 -p all -d 10.0.2.0/24 -j ACCEPT
#
#Règles de NAT:
#
iptables -t nat -A POSTROUTING -j MASQUERADE
#
#Les utilisateurs du LAN sont autorisés à accéder aux ressources Internet HTTP et HTTPS seulement:
#
iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -o eth0 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --sports 80,443 -i eth0 -m state --state ESTABLISHED -j ACCEPT
#
#REGLES FACULTATIVES:
#
#Règles pour autoriser le client SSH local à accéder à un serveur SSH distant:
#
iptables -A OUTPUT -p tcp -o eth0 --dport 22 -s 100.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp --sport 22 -i eth0 -d 100.0.0.1 -m state --state ESTABLISHED -j ACCEPT
#
#Règles pour permettre aux clients SSH distants d'accéder au serveur SSH local:
#
iptables -A INPUT -p tcp --dport 22 -i eth0 -d 100.0.0.1 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -o eth0 -s 100.0.0.1 -m state --state ESTABLISHED -j ACCEPT
#
#Pour les tests de connectivités, 50.0.0.1 et 100.0.0.1 peuvent se pinger mutuellement.
#
iptables -A INPUT -p icmp -i eth0 -s 50.0.0.1 -d 100.0.0.1 -j ACCEPT
iptables -A OUTPUT -p icmp -o eth0 -d 50.0.0.1 -s 100.0.0.1 -j ACCEPT
-------------------------------------

La toute dernière chose à faire est de configurer les permissions du fichier /root/iptables.sh.

L'utilisateur root a les permissions lecture/écriture/exécution. N'importe qui d'autre n'a aucune permission.

#chmod 700 /root/iptables.sh
L'utilisateur root est le propriétaire du fichier /root/iptables.sh.

#chown root /root/iptables.sh

Haut de la page