Openwrt, Openvpn et Firewall…

Les dernières versions d’Openwrt (développement) intègrent un système de configuration plus homogène. L’ensemble de la configuration des services est placée dans le répertoire /etc/config, au même titre que le paramétrage des interfaces réseaux et wifi. La syntaxe diffère un peu de ce que nous pouvions avoir vu jusque là et mérite que nous y regardions de plus près.

La suite de l’article va présenter la configuration d’un client Openvpn et la mise en place de quelques règles de firewall entre le lan, Internet et ce vpn.

Openvpn

L’installation ne pose pas de problème particulier, il faut quand même penser que l’outil de gestion des paquets est maintenant opkg et non plus ipkg !

opkg install openvpn

Comme précisé en introduction, le fichier de configuration est maintenant /etc/config/openvpn.

Le fichier founit par le paquet contient deux exemples de configurations bien commentés  (serveur ou client). L’exemple ci-dessous concerne un client.

package openvpn                                                                                                                                              
 
config openvpn linet.jopa                                                                                                                                    
 
    # Activer le VPN
    option enable 1                                                                                                                                      
 
    # Mode Client
    option client 1                                                                                                                                      
 
    # Type d'interface (tap ou tun)
    option dev tun                                                                                                                                       
 
    # Protocole (tcp ou udp)
    option proto udp                                                                                                                                     
 
    # Adresse et port du serveur
    # Plusieurs lignes possible pour effectuer du load balancing
    # XX.XX.XX.XX est à remplacer par l'IP publique du serveur VPN
    list remote "XX.XX.XX.XX 1194"                                                                                                                      
 
    # Définition de la liaison point à point
    # N'est pas utilse si un pool d'adresses est defini sur le serveur
    option ifconfig "10.8.1.1 10.8.1.2"                                                                                                        
 
    # Essayer de résoudre l'adresse du serveur indéfiniment
    option resolv_retry infinite                                                                                                                         
 
    # Inutile d'attacher un port specifique au client
    option nobind 1                                                                                                                                      
 
    # Essayer de conserver certains états au redémarrage
    option persist_key 1
    option persist_tun 1                              
 
    # Chemin des clés et certificats SSL/TLS
    option ca /etc/openvpn/ca.crt
    option cert /etc/openvpn/linet.jopa.crt
    option key /etc/openvpn/linet.jopa.key                                                                                                               
 
    # Activer le compression lzo
    option comp_lzo 1                                                                                                                                    
 
    # Niveaux de Logs
    option verb 3

La configuration du client VPN est terminée…
Pour complément d’informations, vous trouverez ci-dessous la configuration du serveur VPN correspondant. (Openvpn sur serveur Debian Etch). Le site « Coagul » propose un tutoriel complet sur la mise en place d’une architecture Openvpn (SSL/TLS).

# Serveur OpenVPN - Liaison avec Fonera/Openwrt Maison
 
# Protocole / Interface / Port
proto udp
dev tun
port 1194
 
# Certificats 
 
ca ca.crt
cert vpnserver.crt
key vpnserver.key
dh dh2048.pem
 
# Serveur (SSL/TLS)
tls-server
 
# Configuration statique des adresses Ptp
ifconfig 10.8.1.2 10.8.1.1
 
# Adresse publique locale à utiliser
local XX.XX.XX.XX
 
# Keepalive
keepalive 10 90
 
# Compression LZO
comp-lzo
 
# Utilisateur et groupe du démon openvpn
user nobody
group nogroup
 
# Conserver l'état des clés et de l'interface au redémarrage
persist-key
persist-tun
 
# Fichier de status
status openvpnlinet-status.log
 
# Création d'une route sur le serveur
route 192.168.7.0 255.255.255.0
 
# Ajout de routes sur le client
push "route 192.168.70.0 255.255.255.0"
push "route 192.168.72.0 255.255.255.0"

Firewall

Nous disposons maintenant d’un routeur/firewall OpenWrt à trois pattes :

Il nous faut avant tout déclarer l’interface tun0 dans la configuration réseau pour pouvoir ensuite l’affecter à une zone du firewall. Celle-ci sera déclarée sur un réseau que nous appellerons arbitrairement « vpn« .

/etc/config/network

config 'interface' 'loopback'
        option 'ifname' 'lo'
        option 'proto' 'static'
        option 'ipaddr' '127.0.0.1'
        option 'netmask' '255.0.0.0'
 
config 'interface' 'lan'
        option 'type' 'bridge'
        option 'proto' 'static'
        option 'ipaddr' '192.168.7.253'
        option 'netmask' '255.255.255.0'
        option 'ifname' 'eth0.0'
        option 'dns' '192.168.7.2'
 
config 'interface' 'wan'
        option 'ifname' 'eth0.1'
        option 'proto' 'dhcp'
 
config 'interface' 'vpn'
        option 'ifname' 'tun0'
        option 'network' 'vpn'
        option 'proto' 'none'

Définition de la politique par défaut

Nous pouvons dès à présent attaquer la configuration du Firewall. Pour une utilisation à domicile, nous allons opter pour une politique assez ouverte (pas trop quand même !).

Seul le trafic du lan vers le routeur et du routeur vers Internet est ouvert.

Si nous avions appliqué une politique plus sévère, nous aurions tout vérouillé à ce stade, pour gérer ensuite les autorisations au cas par cas en fonction du type flux.

/etc/config/firewall

config 'defaults'
        option 'syn_flood' '1'
        option 'input' 'REJECT'
        option 'output' 'REJECT'
        option 'forward' 'REJECT'                                                                    

config 'zone'
        option 'name' 'lan'
        option 'input' 'ACCEPT'
        option 'output' 'REJECT'
        option 'forward' 'REJECT'                                                                    

config 'zone'
        option 'name' 'vpn'
        option 'input' 'REJECT'
        option 'output' 'REJECT'
        option 'forward' 'REJECT'                                                                                                                                 

config 'zone'
        option 'name' 'wan'
        option 'input' 'REJECT'
        option 'forward' 'REJECT'
        option 'output' 'ACCEPT
        option 'masq' '1'

La dernière option (masq) permet biensûr d’activer le masquerading pour internet.

Quelques ouvertures

Au delà de ce paramétrage par défaut, nous avons besoins d’être un peu plus permissifs, histoire de rendre la connexion internet utilisable !

Comme nous somme à la maison, nous allons nous permettre d’ouvrir le trafic provenant du lan et à destination du vpn ou d’Internet.

config 'forwarding'
        option 'src' 'lan'
        option 'dest' 'wan'                                                                        
 
config 'forwarding'
        option 'src' 'lan'
        option 'dest' 'vpn'

Nous allons ensuite autoriser ssh et le ping depuis le vpn vers le lan… Puis soyons fous, nous allons aussi permettre le ping du routeur depuis Internet.

config 'rule'
        option '_name' 'Ssh depuis VPN'
        option 'src' 'vpn'
        option 'dest' 'lan'
        option 'proto' 'tcp'
        option 'dest_port' '22'
        option 'target' 'ACCEPT'
 
config 'rule'
        option '_name' 'Ping depuis VPN'
        option 'src' 'vpn'
        option 'dest' 'lan'
        option 'proto' 'icmp'
        option 'target' 'ACCEPT'  
 
config 'rule'
        option '_name' 'Ping depuis Internet'
        option 'src' 'wan'
        option 'proto' 'icmp'
        option 'target' 'ACCEPT'

Pour finir, nous pouvons rendre accessible depuis Internet le serveur web d’une machine située sur le Lan. ( Ceci est un exemple, dans la pratique, une dmz ne serait pas du luxe !).

config 'redirect'
        option '_name' 'Http vers web perso'
        option 'src' 'wan'
        option 'proto' 'tcp'
        option 'src_dport' '22'
        option 'dest_ip' '192.168.7.2'
        option 'dest_port' '22'

Laissez votre message après le bip...Biiiiip

Commentaires

Bonjour,

J’utilise une Fonera 2100 flashée avec Kamikaze 8.09 et je veux la paramètrer en mode client afin que le router se connecte sur ma box en wifi. J’arrive parfaitement à me connecter en Ethernet mais pas en wifi alors que la fonera est bien reconnue et appairée avec la box.
Auriez-vous une idée de piste à creuser ?

Merci d’avance

Bonjour,

Tu peux regarder la config utilisée dans le wds pour la partie cliente… C’est similaire :
http://www.jopa.fr/index.php/2.....-kamikaze/

En gros, au niveau de /etc/config/wireless, ça doit avoir à peut prêt cette tête là :

config wifi-device wifi0
option type atheros
option disabled 0
option channel 11
option diversity 0
option txantenna 1
option rxantenna 1
option distance 3000

config wifi-iface
option device wifi0
option network lan
option mode sta
option wds 1
option ssid Ton ssid
option encryption psk (pour du wpa)
option key Ta clef clef wpa

Dans /etc/config/network, la config est la même qu’en ethernet, seul le nom de l’interface change… Par exemple pour un client dhcp :
config interface lan (ou wan ou ce que tu veux du moment que c’est le même réseau que l’option network définie plus haut)
option ifname ath0
option proto dhcp

Pratique : la commande « wifi » permet de prendre en compte les paramètres sans redémarrer tout le réseau.
Attention à la route par défaut aussi… Si une route par défaut est définie pour ton interface ethernet, il faut la supprimer.

Laisser un commentaire

(requis)

(requis)