Installation serveur vpn : Différence entre versions

De Wiki_DR13
Aller à : navigation, rechercher
(Création d'un utilisateur openvpn)
 
(14 révisions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
== Installation d'OpenVPN à la DR13 ==
+
== Installation d'OpenVPN à la DR13 DOC A SUIVRE ==
  
  
 
Dans ce document, le serveur OpenVPN sert à la connection des clients nomades de la délégation, ou à des clients distants, disposant d'un certificat CNRS.
 
Dans ce document, le serveur OpenVPN sert à la connection des clients nomades de la délégation, ou à des clients distants, disposant d'un certificat CNRS.
  
 
+
 
== Prérequis ==
 
== Prérequis ==
  
Ligne 26 : Ligne 26 :
 
* clients (répertoire des fichiers de configuration des clients)  
 
* clients (répertoire des fichiers de configuration des clients)  
  
 
=== Création d'un utilisateur openvpn ===
 
 
Changement des droits (propriétaire/groupe) du répertoire /etc/openvpn, pour donner les droits à l'utilisateur openvpn.
 
Les lignes suivantes sont rajoutées dans le fichier server.conf du serveur
 
 
user openvpn
 
 
group openvpn
 
 
Lors du lancement de l'application, elle tournera sous l'utilisateur openvpn.
 
  
 
=== Certificats et clés ===
 
=== Certificats et clés ===
Ligne 55 : Ligne 44 :
 
La ligne suivante est décommentée dans le fichier server.conf sur le serveur
 
La ligne suivante est décommentée dans le fichier server.conf sur le serveur
  
dh keys/dh1024.pem
+
dh keys/dh1024.pem
 
 
  
 
=== Création de la clé partagée entre le serveur et les clients ===
 
=== Création de la clé partagée entre le serveur et les clients ===
Ligne 65 : Ligne 53 :
 
La ligne suivante est décommentée dans le fichier server.conf sur le serveur
 
La ligne suivante est décommentée dans le fichier server.conf sur le serveur
  
tls-auth keys/ta.key 0  # 0 pour le serveur
+
tls-auth keys/ta.key 0  # 0 pour le serveur
  
 
La ligne suivante est décommentée (ajoutée) dans le fichier client.conf (client.ovpn pour windows) sur la machine cliente
 
La ligne suivante est décommentée (ajoutée) dans le fichier client.conf (client.ovpn pour windows) sur la machine cliente
  
tls-auth keys/ta.key 1  # 1 pour le client
+
tls-auth keys/ta.key 1  # 1 pour le client
 +
 
 +
 
 +
== Des routes adaptées aux profils clients ==
 +
 
 +
But: Pouvoir définir et donner des droits distincts aux utilisateurs selon un profil pré-établi. Il faut donc commencer par définir le nombre de groupes d'utilisateurs que l'on aura à gérer, et définir les droits qu'ils pourront obtenir via l'utilisation du serveur OpenVPN.
 +
 
 +
On suppose dans ce qui suit que l'on dispose de 2 groupes spécifiques d'utilisateurs d'OpenVPN à la DR: les nomades (utilisateurs avec portables pouvant se déplacer à l'extérieur) et les administrateurs (utilisateurs avec pouvoir).
 +
 
 +
Ajouter autant de routes que de profils distincts dans le fichier de configuration serveur server.conf
 +
 
 +
# route par défaut
 +
server 10.8.0.0 255.255.255.0
 +
# route spéciale pour le 1er type d'utilisateur ;  administrateurs
 +
route 10.8.18.0 255.255.255.0
 +
# route spéciale pour le 2eme type d'utilisateur ;  nomades
 +
route 10.8.1.0 255.255.255.0
 +
 
 +
Selon les besoins, on rajoutera des routes pour le wi-fi, les labos,...
 +
 
 +
Dans chaque fichier client, on va pousser la config pour que les utilisateurs spéciaux récupèrent une adresse spécifique de leur classe. Ces utilisateurs spéciaux sont identifié à la connection par le CN (common name) de leur certificat. On créé donc pour chacun d'eux un fichier spécifique dans le répertoire /etc/openvpn/clients sous la forme Prenom_Nom (voir les règles sur les caractères spéciaux dans la doc).
 +
 
 +
Pour pousser chaque route, on rajoute dans le fichier Prenom_Nom les lignes:
 +
 
 +
# Ajout de la route spécifique du groupe: exemple pour le groupe des utilisateurs nomades
 +
iroute 10.8.1.0 255.255.255.0
 +
# Attribution du couple adresse locale (client) / adresse distante (serveur) pour l'utilisation du pont
 +
ifconfig-push 10.8.18.2 10.8.18.1
 +
 
 +
en prenant le dernier octet de chaque paire d'adresses dans la liste ci-dessous pour des raisons de compatibilité avec les clients windows et le pilote TAP-Win32. Dans la liste, le premier chiffre sera le dernier octet de l'adresse du serveur, et le second chiffre, celui du client. Il faut veiller à fournir une paire différente à chaque client
 +
 
 +
[ 1,  2] [ 5,  6] [ 9, 10] [13, 14] [17, 18]
 +
[21, 22] [25, 26] [29, 30] [33, 34] [37, 38]
 +
[41, 42] [45, 46] [49, 50] [53, 54] [57, 58]
 +
[61, 62] [65, 66] [69, 70] [73, 74] [77, 78]
 +
[81, 82] [85, 86] [89, 90] [93, 94] [97, 98]
 +
[101,102] [105,106] [109,110] [113,114] [117,118]
 +
[121,122] [125,126] [129,130] [133,134] [137,138]
 +
[141,142] [145,146] [149,150] [153,154] [157,158]
 +
[161,162] [165,166] [169,170] [173,174] [177,178]
 +
[181,182] [185,186] [189,190] [193,194] [197,198]
 +
[201,202] [205,206] [209,210] [213,214] [217,218]
 +
[221,222] [225,226] [229,230] [233,234] [237,238]
 +
[241,242] [245,246] [249,250] [253,254]
 +
 
 +
Les règles pour chaque classe seront définies ensuite au niveau du fichier de configuration d'iptables.
 +
 
 +
 
 +
 
 +
== Le fichier de configuration serveur ==
 +
 
 +
################################################
 +
# OpenVPN configuration.                        #
 +
#################################################
 +
 +
# adresse d'ecoute
 +
local 193.49.133.234
 +
# local 193.49.133.209
 +
 +
# Port d'écoute. Identique entre le serveur et le client
 +
port 4500
 +
 +
# TCP or UDP server?
 +
proto udp
 +
 +
# "dev tun" = routed IP tunnel, "dev tap" = ethernet tunnel.
 +
; dev tap
 +
dev tun
 +
 +
# Utilisation de certificat serveur CNRS
 +
ca keys/CNRS.crt
 +
cert keys/vpn.dr13.cnrs.fr.crt
 +
key keys/vpn.dr13.cnrs.fr.key # doit rester secret !
 +
 +
# Diffie hellman parameters.
 +
dh "keys/dh1024.pem"
 +
 +
# Route par défaut du tunnel
 +
server 10.8.0.0 255.255.255.0
 +
 +
# Fichier d'enregistrement des couples client <-> @IP virtuelle
 +
ifconfig-pool-persist ipp.txt
 +
 +
# Repertoire client des fichiers de paramètres par défaut à envoyer aux clients
 +
# identifiés demandant une connection
 +
client-config-dir "/etc/openvpn/clients"
 +
 +
# push de la route vers  DR13 (ne fonctionne pas, il faut ajouter une route a lamain sur le serveur)
 +
#push "route 193.49.133.0 255.255.255.0"
 +
 +
# On utilise donc la fonction redirect-gateway, qui evite le pb d'ajout de route MAIS FAIT TRANSITER TOUT LE TRAFIC PAR LE TUNNEL !
 +
push "redirect-gateway"
 +
 +
# Envoie des serveur de noms
 +
push "dhcp-option DNS 193.49.133.208"
 +
push "dhcp-option WINS 193.49.133.208"
 +
 +
# Route pour les utilisateurs (push ds le fichier client)
 +
route 10.8.1.0 255.255.255.0
 +
# Route pour les administrateurs (push ds le fichier client)
 +
route 10.8.18.0 255.255.255.0
 +
 
 +
 +
# Route pour les utilisateurs (push ds le fichier client)
 +
route 10.8.1.0 255.255.255.0
 +
# Route pour les administrateurs (push ds le fichier client)
 +
route 10.8.18.0 255.255.255.0
 +
 +
# Puis on rajoute une ligne pour chaque client dans son fichier conf
 +
# avec l'adresse IP client fixe ainsi que celle du serveur
 +
# ifconfig-push @IP-proche @IP-distante
 +
#  ifconfig-push 10.8.18.6 10.8.18.5
 +
 +
# The keepalive directive causes ping-like
 +
# messages to be sent back and forth over
 +
# the link so that each side knows when
 +
# the other side has gone down.
 +
# Ping every 10 seconds, assume that remote
 +
# peer is down if no ping received during
 +
# a 120 second time period.
 +
keepalive 10 120
 +
 +
# Clé partagée entre le serveur et chaque client. 0=serveur, 1=client.
 +
tls-auth keys/ta.key 0 # This file is secret
 +
 +
# Select a cryptographic cipher.
 +
# This config item must be copied to
 +
# the client config file as well.
 +
;cipher BF-CBC        # Blowfish (default)
 +
;cipher AES-128-CBC  # AES
 +
;cipher DES-EDE3-CBC  # Triple-DES
 +
 +
# Utilisation de la compression. À indiquer aussi pour le client
 +
comp-lzo
 +
 +
# The maximum number of concurrently connected
 +
# clients we want to allow.
 +
;max-clients 100
 +
 +
# It's a good idea to reduce the OpenVPN
 +
# daemon's privileges after initialization.
 +
#user root
 +
#group root
 +
 +
# Modifie la racine pour le serveur OpenVPN
 +
#chroot /etc/openvpn
 +
 +
# The persist options will try to avoid
 +
# accessing certain resources on restart
 +
# that may no longer be accessible because
 +
# of the privilege downgrade.
 +
persist-key
 +
persist-tun
 +
 +
# Output a short status file showing
 +
# current connections, truncated
 +
# and rewritten every minute.
 +
status openvpn-status.log
 +
 +
# By default, log messages will go to the syslog (or
 +
# on Windows, if running as a service, they will go to
 +
# the "\Program Files\OpenVPN\log" directory).
 +
# Use log or log-append to override this default.
 +
# "log" will truncate the log file on OpenVPN startup,
 +
# while "log-append" will append to it.  Use one
 +
# or the other (but not both).
 +
;log        openvpn.log
 +
;log-append  /var/log/openvpn/openvpn.log
 +
 +
# Set the appropriate level of log
 +
# file verbosity.
 +
#
 +
# 0 is silent, except for fatal errors
 +
# 4 is reasonable for general usage
 +
# 5 and 6 can help to debug connection problems
 +
# 9 is extremely verbose
 +
verb 3
 +
# Silence repeating messages.  At most 20
 +
# sequential messages of the same message
 +
# category will be output to the log.
 +
mute 20
 +
 
 +
== Paramétrage d'iptables ==
 +
 
 +
Creation d'un fichier /etc/init.d/firewall :
 +
 
 +
# FireWall for vpn.dr13.cnrs.fr
 +
#
 +
INTERF_LOOPBACK="lo"
 +
INTERF_INTERNET="eth0"
 +
IPTABLES="/sbin/iptables"
 +
 +
#
 +
# drop all packet
 +
#
 +
drop_all() {
 +
        $IPTABLES -F
 +
        $IPTABLES -t nat -F
 +
        $IPTABLES -X
 +
        $IPTABLES -P INPUT DROP
 +
        $IPTABLES -P OUTPUT DROP
 +
        $IPTABLES -P FORWARD DROP
 +
 +
}
 +
#
 +
# Wan connection
 +
#
 +
wan() {
 +
 +
#SORTIE
 +
 +
################################################################################
 +
#On autorise tout le trafic sortant
 +
$IPTABLES -P OUTPUT ACCEPT
 +
$IPTABLES -A OUTPUT -p tcp --dport 2967 -j DROP
 +
 +
 +
###############################################################################
 +
#On autorise le ping :
 +
#$IPTABLES  -A INPUT -p icmp -j ACCEPT
 +
 +
#On autorise le ssh
 +
#$IPTABLES  -A OUTPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
 +
 +
#On autorise le www
 +
#$IPTABLES  -A OUTPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
 +
 +
# Regle pour les connexions DNS :
 +
#$IPTABLES  -A OUTPUT -m state --state ESTABLISHED,RELATED --protocol udp --source -port 53 -j ACCEPT
 +
 +
#$IPTABLES  -A OUTPUT -m state --state ESTABLISHED,RELATED --protocol tcp --source -port 53 -j ACCEPT
 +
 +
#$IPTABLES  -A OUTPUT -p tcp -m tcp --dport 4500 -j ACCEPT
 +
#$IPTABLES  -A OUTPUT -p udp -m udp --dport 4500 -j ACCEPT
 +
 +
#ENTREES
 +
 +
################################################################################
 +
# on autorise tout sur le réseau local:
 +
$IPTABLES -A INPUT -s 193.49.133.0/24 -j ACCEPT
 +
 +
#On autorise le ping :
 +
#$IPTABLES  -A INPUT -p icmp -j ACCEPT
 +
 +
#On autorise le ssh
 +
$IPTABLES  -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
 +
 +
#On autorise le www
 +
$IPTABLES  -A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
 +
 +
# Regle pour les connexions DNS :
 +
$IPTABLES  -A INPUT -m state --state ESTABLISHED,RELATED --protocol udp --source-port 53 -j ACCEPT
 +
 +
$IPTABLES  -A INPUT -m state --state ESTABLISHED,RELATED --protocol tcp --source-port 53 -j ACCEPT
 +
 +
#on autorise les connexions etablies
 +
$IPTABLES  -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 +
 +
 +
#VPN
 +
 +
################################################################################
 +
#On autorise le VPN
 +
$IPTABLES  -A INPUT -p tcp -m tcp --dport 4500 -j ACCEPT
 +
$IPTABLES  -A INPUT -p udp -m udp --dport 4500 -j ACCEPT
 +
 +
#Autorisation de l'IP forward, afin de permettre la transmission des paquets du///vers le tunnel
 +
echo 1 > /proc/sys/net/ipv4/ip_forward
 +
 +
# on NAT les connexions du tunel
 +
$IPTABLES  -t nat -A POSTROUTING -o eth0 -j MASQUERADE
 +
 +
# on autorise le NAT inverse
 +
#$IPTABLES  -A FORWARD -s 193.49.133.0/24 -j ACCEPT
 +
$IPTABLES  -A FORWARD -s 0/0 -d 0/0 -j ACCEPT
 +
 +
#on autorise le DNS
 +
$IPTABLES  -A FORWARD -m state --state ESTABLISHED,RELATED --protocol udp --source-port 53 -j ACCEPT
 +
 +
$IPTABLES  -A FORWARD -m state --state ESTABLISHED,RELATED --protocol tcp --source-port 53 -j ACCEPT
 +
 +
#$IPTABLES  -t nat -A POSTROUTING -s 10.8.18.0/24 -j SNAT --to-source 193.49.133.234
 +
 +
#Par défaut, les clients n'ont pas de profil particulier et arrivent sur le tunel 10.8.1.0 : acces a graal
 +
  #$IPTABLES  -A FORWARD -i tun+ -s 10.8.1.0/24 -d 193.49.133.112 -p tcp -m tcp -m multiport --dports 25,80,110,143,443,389,993 -j ACCEPT
 +
 +
#!!! clients web A CONFIGURER !!!
 +
#$IPTABLES  -A FORWARD -i tun+ -s 10.8.1.0/24 -p tcp -m tcp -m multiport --dports 25,53,80,110,143,443,389,993 -j ACCEPT
 +
 +
#Acces complet au LAN de la DR pour les admins:
 +
#$IPTABLES  -A FORWARD -i tun0 -s 10.8.18.0/24 -d 193.49.133.0/24 -j ACCEPT
 +
$IPTABLES  -A FORWARD -i tun0 -s 0/0 -j ACCEPT
 +
}
 +
#
 +
 +
# loopback
 +
#
 +
lo() {
 +
        $IPTABLES -A INPUT  -i $INTERF_LOOPBACK -j ACCEPT
 +
        $IPTABLES -A OUTPUT -o $INTERF_LOOPBACK -j ACCEPT
 +
}
 +
#
 +
# Security
 +
#
 +
security() {
 +
        # no 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
 +
        # no icmp
 +
        echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
 +
        echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
 +
}
 +
#
 +
# Start firewall
 +
#
 +
firewall_start() {
 +
        drop_all
 +
        security
 +
        lo
 +
        wan
 +
        }
 +
#
 +
# Stop firewall
 +
#
 +
firewall_stop() {
 +
        $IPTABLES -F
 +
        $IPTABLES -t nat -F
 +
        $IPTABLES -X
 +
        $IPTABLES -t nat -X
 +
        $IPTABLES -P INPUT ACCEPT
 +
        $IPTABLES -P OUTPUT ACCEPT
 +
        $IPTABLES -P FORWARD ACCEPT
 +
}
 +
 
 +
#
 +
#Firewal status
 +
#
 +
firewall_status() {
 +
        $IPTABLES -L
 +
        }
 +
 
 +
case "$1" in
 +
    start)
 +
        echo "Starting firewall"
 +
        firewall_start
 +
        ;;
 +
    stop)
 +
        echo "Stoping firewall"
 +
        firewall_stop
 +
        ;;
 +
    restart)
 +
        echo "Stoping firewall"
 +
        firewall_stop
 +
        echo "Starting firewall"
 +
        firewall_start
 +
        ;;
 +
    status)
 +
        echo "Firewall iptables status"
 +
        firewall_status
 +
        ;;
 +
    *)
 +
        echo "Usage :/etc/init.d/firewall {start|stop|restart|status}"
 +
        exit 1
 +
        ;;
 +
esac
 +
 +
exit 0
 +
 
 +
 
 +
Ajout du script au demarrage du serveur :
 +
 
 +
# update-rc.d firewall defaults
 +
 
 +
 
 +
 
 +
== Configuration d'un client ==
 +
 +
Sous windows
 +
 
 +
Installer openvpn-Gui
 +
 
 +
Exporter son certificat CNRS '''depuis Firefox avec toutes les AC installées et cochées'''
 +
 
 +
Le placer dans C:\Program Files\OpenVPN\config\prenom.nom.p12 avec le fichier ta.key
 +
 
 +
 
 +
 
 +
Fichier de config :
 +
 
 +
client
 +
 
 +
dev tun
 +
 +
proto udp
 +
remote vpn.dr13.cnrs.fr 4500
 +
resolv-retry infinite
 +
 
 +
nobind
 +
persist-key
 +
persist-tun
 +
 
 +
pkcs12 "C:\\Program Files\\OpenVPN\\config\\ton certificat.p12"
 +
 
 +
tls-remote vpn.dr13.cnrs.fr
 +
tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 1
 +
 +
comp-lzo
 +
 +
verb 3

Version actuelle datée du 30 mai 2008 à 07:44

Installation d'OpenVPN à la DR13 DOC A SUIVRE[modifier]

Dans ce document, le serveur OpenVPN sert à la connection des clients nomades de la délégation, ou à des clients distants, disposant d'un certificat CNRS.


Prérequis[modifier]

  • Installation de ssh et openssh
  • Installation de LZO (utilitaire de compression recommandé pour améliorer les performances de transmission des données via le tunnel) OpenVPN.
  • Configuration de iptables

Installation de OpenVPN[modifier]

# apt-get install openvpn

Paramétrage pour l'installation locale[modifier]

Création des dossiers dans /etc/openvpn

  • keys (répertoire des clés et certificats)
  • clients (répertoire des fichiers de configuration des clients)


Certificats et clés[modifier]

À noter qu'un module de génération de certificats (easy-rsa) est disponible avec l'installation de OpenVPN. Nous désirons utiliser uniquement les certificats CNRS (serveurs et clients), on ne décrira donc pas ici ce module.

Récupération des certificats CNRS

  • ceux du serveur (Il faut effectuer une demande de certificat serveur au CNRS, puis récupérer et installer ces certificats dans le répertoire des clés.
  • celui de l'autorité de certification


Création du paramètre Dieffe-Helmann[modifier]

# openssl dhparam -out dh1024.pem 1024

On place le fichier dh1024.pem dans le répertoire des clés La ligne suivante est décommentée dans le fichier server.conf sur le serveur

dh keys/dh1024.pem

Création de la clé partagée entre le serveur et les clients[modifier]

# openvpn --genkey --secret ta.key

On place le fichier ta.key dans le répertoire des clés. Une copie sera effectuée et transmise pour chaque client nécessitant une connexion. La ligne suivante est décommentée dans le fichier server.conf sur le serveur

tls-auth keys/ta.key 0  # 0 pour le serveur

La ligne suivante est décommentée (ajoutée) dans le fichier client.conf (client.ovpn pour windows) sur la machine cliente

tls-auth keys/ta.key 1  # 1 pour le client


Des routes adaptées aux profils clients[modifier]

But: Pouvoir définir et donner des droits distincts aux utilisateurs selon un profil pré-établi. Il faut donc commencer par définir le nombre de groupes d'utilisateurs que l'on aura à gérer, et définir les droits qu'ils pourront obtenir via l'utilisation du serveur OpenVPN.

On suppose dans ce qui suit que l'on dispose de 2 groupes spécifiques d'utilisateurs d'OpenVPN à la DR: les nomades (utilisateurs avec portables pouvant se déplacer à l'extérieur) et les administrateurs (utilisateurs avec pouvoir).

Ajouter autant de routes que de profils distincts dans le fichier de configuration serveur server.conf

# route par défaut
server 10.8.0.0 255.255.255.0
# route spéciale pour le 1er type d'utilisateur ;  administrateurs
route 10.8.18.0 255.255.255.0
# route spéciale pour le 2eme type d'utilisateur ;  nomades
route 10.8.1.0 255.255.255.0

Selon les besoins, on rajoutera des routes pour le wi-fi, les labos,...

Dans chaque fichier client, on va pousser la config pour que les utilisateurs spéciaux récupèrent une adresse spécifique de leur classe. Ces utilisateurs spéciaux sont identifié à la connection par le CN (common name) de leur certificat. On créé donc pour chacun d'eux un fichier spécifique dans le répertoire /etc/openvpn/clients sous la forme Prenom_Nom (voir les règles sur les caractères spéciaux dans la doc).

Pour pousser chaque route, on rajoute dans le fichier Prenom_Nom les lignes:

# Ajout de la route spécifique du groupe: exemple pour le groupe des utilisateurs nomades
iroute 10.8.1.0 255.255.255.0 
# Attribution du couple adresse locale (client) / adresse distante (serveur) pour l'utilisation du pont
ifconfig-push 10.8.18.2 10.8.18.1

en prenant le dernier octet de chaque paire d'adresses dans la liste ci-dessous pour des raisons de compatibilité avec les clients windows et le pilote TAP-Win32. Dans la liste, le premier chiffre sera le dernier octet de l'adresse du serveur, et le second chiffre, celui du client. Il faut veiller à fournir une paire différente à chaque client

[ 1, 2] [ 5, 6] [ 9, 10] [13, 14] [17, 18] [21, 22] [25, 26] [29, 30] [33, 34] [37, 38] [41, 42] [45, 46] [49, 50] [53, 54] [57, 58] [61, 62] [65, 66] [69, 70] [73, 74] [77, 78] [81, 82] [85, 86] [89, 90] [93, 94] [97, 98] [101,102] [105,106] [109,110] [113,114] [117,118] [121,122] [125,126] [129,130] [133,134] [137,138] [141,142] [145,146] [149,150] [153,154] [157,158] [161,162] [165,166] [169,170] [173,174] [177,178] [181,182] [185,186] [189,190] [193,194] [197,198] [201,202] [205,206] [209,210] [213,214] [217,218] [221,222] [225,226] [229,230] [233,234] [237,238] [241,242] [245,246] [249,250] [253,254]

Les règles pour chaque classe seront définies ensuite au niveau du fichier de configuration d'iptables.


Le fichier de configuration serveur[modifier]

################################################
# OpenVPN configuration.                        #
#################################################

# adresse d'ecoute
local 193.49.133.234
# local 193.49.133.209

# Port d'écoute. Identique entre le serveur et le client
port 4500

# TCP or UDP server?
proto udp

# "dev tun" = routed IP tunnel, "dev tap" = ethernet tunnel.
; dev tap
dev tun

# Utilisation de certificat serveur CNRS
ca keys/CNRS.crt
cert keys/vpn.dr13.cnrs.fr.crt
key keys/vpn.dr13.cnrs.fr.key # doit rester secret !

# Diffie hellman parameters.
dh "keys/dh1024.pem"

# Route par défaut du tunnel
server 10.8.0.0 255.255.255.0 

# Fichier d'enregistrement des couples client <-> @IP virtuelle
ifconfig-pool-persist ipp.txt

# Repertoire client des fichiers de paramètres par défaut à envoyer aux clients
# identifiés demandant une connection
client-config-dir "/etc/openvpn/clients"

# push de la route vers  DR13 (ne fonctionne pas, il faut ajouter une route a lamain sur le serveur)
#push "route 193.49.133.0 255.255.255.0"

# On utilise donc la fonction redirect-gateway, qui evite le pb d'ajout de route MAIS FAIT TRANSITER TOUT LE TRAFIC PAR LE TUNNEL !
push "redirect-gateway"

# Envoie des serveur de noms
push "dhcp-option DNS 193.49.133.208"
push "dhcp-option WINS 193.49.133.208"

# Route pour les utilisateurs (push ds le fichier client)
route 10.8.1.0 255.255.255.0
# Route pour les administrateurs (push ds le fichier client)
route 10.8.18.0 255.255.255.0
 

# Route pour les utilisateurs (push ds le fichier client)
route 10.8.1.0 255.255.255.0
# Route pour les administrateurs (push ds le fichier client)
route 10.8.18.0 255.255.255.0

# Puis on rajoute une ligne pour chaque client dans son fichier conf
# avec l'adresse IP client fixe ainsi que celle du serveur
# ifconfig-push @IP-proche @IP-distante
#   ifconfig-push 10.8.18.6 10.8.18.5

# The keepalive directive causes ping-like
# messages to be sent back and forth over
# the link so that each side knows when
# the other side has gone down.
# Ping every 10 seconds, assume that remote
# peer is down if no ping received during
# a 120 second time period.
keepalive 10 120 

# Clé partagée entre le serveur et chaque client. 0=serveur, 1=client.
tls-auth keys/ta.key 0 # This file is secret 

# Select a cryptographic cipher.
# This config item must be copied to
# the client config file as well.
;cipher BF-CBC        # Blowfish (default)
;cipher AES-128-CBC   # AES
;cipher DES-EDE3-CBC  # Triple-DES

# Utilisation de la compression. À indiquer aussi pour le client
comp-lzo

# The maximum number of concurrently connected
# clients we want to allow.
;max-clients 100

# It's a good idea to reduce the OpenVPN
# daemon's privileges after initialization.
#user root
#group root

# Modifie la racine pour le serveur OpenVPN
#chroot /etc/openvpn

# The persist options will try to avoid
# accessing certain resources on restart
# that may no longer be accessible because
# of the privilege downgrade.
persist-key
persist-tun

# Output a short status file showing
# current connections, truncated
# and rewritten every minute.
status openvpn-status.log

# By default, log messages will go to the syslog (or
# on Windows, if running as a service, they will go to
# the "\Program Files\OpenVPN\log" directory).
# Use log or log-append to override this default.
# "log" will truncate the log file on OpenVPN startup,
# while "log-append" will append to it.  Use one
# or the other (but not both).
;log         openvpn.log
;log-append  /var/log/openvpn/openvpn.log 

# Set the appropriate level of log
# file verbosity.
#
# 0 is silent, except for fatal errors
# 4 is reasonable for general usage
# 5 and 6 can help to debug connection problems
# 9 is extremely verbose
verb 3
# Silence repeating messages.  At most 20
# sequential messages of the same message
# category will be output to the log.
mute 20

Paramétrage d'iptables[modifier]

Creation d'un fichier /etc/init.d/firewall :

# FireWall for vpn.dr13.cnrs.fr
#
INTERF_LOOPBACK="lo"
INTERF_INTERNET="eth0"
IPTABLES="/sbin/iptables"

#
# drop all packet
#
drop_all() {
       $IPTABLES -F
       $IPTABLES -t nat -F
       $IPTABLES -X
       $IPTABLES -P INPUT DROP
       $IPTABLES -P OUTPUT DROP
       $IPTABLES -P FORWARD DROP

}
#
# Wan connection
#
wan() {

#SORTIE

################################################################################
#On autorise tout le trafic sortant
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -A OUTPUT -p tcp --dport 2967 -j DROP


###############################################################################
#On autorise le ping :
#$IPTABLES  -A INPUT -p icmp -j ACCEPT

#On autorise le ssh
#$IPTABLES  -A OUTPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT

#On autorise le www
#$IPTABLES  -A OUTPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT

# Regle pour les connexions DNS :
#$IPTABLES  -A OUTPUT -m state --state ESTABLISHED,RELATED --protocol udp --source -port 53 -j ACCEPT

#$IPTABLES  -A OUTPUT -m state --state ESTABLISHED,RELATED --protocol tcp --source -port 53 -j ACCEPT

#$IPTABLES  -A OUTPUT -p tcp -m tcp --dport 4500 -j ACCEPT
#$IPTABLES  -A OUTPUT -p udp -m udp --dport 4500 -j ACCEPT

#ENTREES

################################################################################
# on autorise tout sur le réseau local:
$IPTABLES -A INPUT -s 193.49.133.0/24 -j ACCEPT

#On autorise le ping :
#$IPTABLES  -A INPUT -p icmp -j ACCEPT

#On autorise le ssh
$IPTABLES  -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT

#On autorise le www
$IPTABLES  -A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT

# Regle pour les connexions DNS :
$IPTABLES  -A INPUT -m state --state ESTABLISHED,RELATED --protocol udp --source-port 53 -j ACCEPT

$IPTABLES  -A INPUT -m state --state ESTABLISHED,RELATED --protocol tcp --source-port 53 -j ACCEPT

#on autorise les connexions etablies
$IPTABLES  -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT


#VPN

################################################################################
#On autorise le VPN
$IPTABLES  -A INPUT -p tcp -m tcp --dport 4500 -j ACCEPT
$IPTABLES  -A INPUT -p udp -m udp --dport 4500 -j ACCEPT

#Autorisation de l'IP forward, afin de permettre la transmission des paquets du///vers le tunnel
echo 1 > /proc/sys/net/ipv4/ip_forward

# on NAT les connexions du tunel
$IPTABLES  -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# on autorise le NAT inverse
#$IPTABLES  -A FORWARD -s 193.49.133.0/24 -j ACCEPT
$IPTABLES  -A FORWARD -s 0/0 -d 0/0 -j ACCEPT

#on autorise le DNS
$IPTABLES  -A FORWARD -m state --state ESTABLISHED,RELATED --protocol udp --source-port 53 -j ACCEPT

$IPTABLES  -A FORWARD -m state --state ESTABLISHED,RELATED --protocol tcp --source-port 53 -j ACCEPT

#$IPTABLES  -t nat -A POSTROUTING -s 10.8.18.0/24 -j SNAT --to-source 193.49.133.234

#Par défaut, les clients n'ont pas de profil particulier et arrivent sur le tunel 10.8.1.0 : acces a graal
#$IPTABLES  -A FORWARD -i tun+ -s 10.8.1.0/24 -d 193.49.133.112 -p tcp -m tcp -m multiport --dports 25,80,110,143,443,389,993 -j ACCEPT

#!!! clients web A CONFIGURER !!!
#$IPTABLES  -A FORWARD -i tun+ -s 10.8.1.0/24 -p tcp -m tcp -m multiport --dports 25,53,80,110,143,443,389,993 -j ACCEPT

#Acces complet au LAN de la DR pour les admins:
#$IPTABLES  -A FORWARD -i tun0 -s 10.8.18.0/24 -d 193.49.133.0/24 -j ACCEPT
$IPTABLES  -A FORWARD -i tun0 -s 0/0 -j ACCEPT
}
# 

# loopback
#
lo() {
       $IPTABLES -A INPUT  -i $INTERF_LOOPBACK -j ACCEPT
       $IPTABLES -A OUTPUT -o $INTERF_LOOPBACK -j ACCEPT
}
#
# Security
#
security() {
       # no 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
       # no icmp
       echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
       echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
}
#
# Start firewall
#
firewall_start() {
       drop_all
       security
       lo
       wan
       }
#
# Stop firewall
#
firewall_stop() {
       $IPTABLES -F
       $IPTABLES -t nat -F
       $IPTABLES -X
       $IPTABLES -t nat -X
       $IPTABLES -P INPUT ACCEPT
       $IPTABLES -P OUTPUT ACCEPT
       $IPTABLES -P FORWARD ACCEPT
}
 
#
#Firewal status
#
firewall_status() {
       $IPTABLES -L
       }
case "$1" in
   start)
       echo "Starting firewall"
       firewall_start
       ;;
   stop)
       echo "Stoping firewall"
       firewall_stop
       ;;
   restart)
       echo "Stoping firewall"
       firewall_stop
       echo "Starting firewall"
       firewall_start
       ;;
   status)
       echo "Firewall iptables status"
       firewall_status
       ;;
   *)
       echo "Usage :/etc/init.d/firewall {start|stop|restart|status}"
       exit 1
       ;;
esac

exit 0


Ajout du script au demarrage du serveur :

# update-rc.d firewall defaults


Configuration d'un client[modifier]

Sous windows

Installer openvpn-Gui

Exporter son certificat CNRS depuis Firefox avec toutes les AC installées et cochées

Le placer dans C:\Program Files\OpenVPN\config\prenom.nom.p12 avec le fichier ta.key


Fichier de config :

client
 
dev tun

proto udp
remote vpn.dr13.cnrs.fr 4500
resolv-retry infinite
 
nobind
persist-key
persist-tun
 
pkcs12 "C:\\Program Files\\OpenVPN\\config\\ton certificat.p12"
 
tls-remote vpn.dr13.cnrs.fr 
tls-auth "C:\\Program Files\\OpenVPN\\config\\ta.key" 1

comp-lzo

verb 3