Table des matières
IPsec
Même chose que OpenVPN, mais differement…
Liens:
- ipsec-tools
- openswan
- strongswan
les bases
IPsec permet 2 choses:
- authentification des connexions
- chiffrements des connexions
Son fonctionnement est au niveau de la couche 3 , donc IP .
C'est a dire que les applications n'ont pas conscience que l'IP utilisé est authentifiée et/ou chiffrée: c'est transparent.
Protocoles:
- AH = Authentification Header
- ESP = Encapsulating Security Payload
Authentification (AH) | permet d'être sur que c'est bien l'IP qui a composé le message, et qu'il n'a pas été modifié |
Chiffrement (ESP) | permet de garantir que personne (sauf le destinataire) ne peut décrypter le contenu |
2 modes de fonctionnement:
- transport : authentifier/chiffrer les communications entre 2 IP (public ou local)
- tunnel : authentifier/chiffrer un tunnel entre 2 LAN
pluto
: c'est “ike” … Mais c'est aussi “racoon” …
Voir package ike-scan
ipsec-tools
Lien: http://www.linuxplusvalue.be/mylpv.php?id=179
Soit un “PC-A” avec une IP publique “IP-A” |
Soit un “PC-B” avec une IP publique “IP-B” |
Avec IPSEC, il faut commencer par les bases…
# aptitude install ipsec-tools
Sens unique
On va configurer l'authentification et le chiffrement dans un sens uniquement, du PC-A vers PC-B.
Sur PC-A , editer, /etc/ipsec-tools.conf
afin d'avoir:
flush; spdflush; # Associations # (le comment faire) # ----------------- # authentification IP-A -> IP-B add <IP-A> <IP-B> ah 15700 -A hmac-md5 "1234567890123456"; add <IP-A> <IP-B> esp 15701 -E 3des-cbc "123456789012123456789012"; spdadd <IP-A> <IP-B> any -P out ipsec esp/transport//require ah/transport//require;
Le mieux:
# /etc/init.d/setkey restart
Le possible, mais a eviter:
# /etc/ipsec-tools.conf
Un premier test:
$ ping <IP-B>
Et tcpdump retourne:
IP-A > IP-B: AH(spi=0x00003d54,seq=0x8): ESP(spi=0x00003d55,seq=0x8), length 88 ...
Ce qui veut dire que la couche IP vers IP-B est authentifié et chiffré.
mais PC-A et PC-B ne peuvent plus communiquer ! |
On va juste mettre les “associations” pour que PC-B puisse decoder et répondre…
Sur PC-B, editer /etc/ipsec-tools.conf
afin d'avoir:
flush; spdflush; # authentification IP-A -> IP-B add <IP-A> <IP-B> ah 15700 -A hmac-md5 "1234567890123456"; add <IP-A> <IP-B> esp 15701 -E 3des-cbc "123456789012123456789012";
Et voila!
C'est authentifié et chiffré de PC-A vers PC-B.
C'est sans sécurité de PC-B vers PC-A.
Et maintenant, les 2 PC se voient !
PC-B communique sans authentification et chiffrement ! |
2 sens
PC-A:
# authentification IP-A -> IP-B add <IP-A> <IP-B> ah 15700 -A hmac-md5 "1234567890123456"; # authentification IP-B -> IP-A add <IP-B> <IP-A> ah 24500 -A hmac-md5 "1234567890123456"; # chiffrement IP-A -> IP-B add <IP-A> <IP-B> esp 15701 -E 3des-cbc "123456789012123456789012"; # chiffrement IP-A -> IP-B add <IP-B> <IP-A> esp 24501 -E 3des-cbc "123456789012123456789012"; # Politique de securité (SP) # (le quand faire) # --------------------------- spdadd <IP-A> <IP-B> any -P out ipsec esp/transport//require ah/transport//require; spdadd <IP-B> <IP-A> any -P in ipsec esp/transport//require ah/transport//require;
# /etc/init.d/setkey restart
PC-B, il faut juste changer la “politique”:
... # Politique de securité (SP) # (le quand faire) # --------------------------- spdadd <IP-B> <IP-A> any -P out ipsec esp/transport//require ah/transport//require; spdadd <IP-A> <IP-B> any -P in ipsec esp/transport//require ah/transport//require;
# /etc/init.d/setkey restart
Voila, les communications sont authentifiés et chiffrés dans les 2 sens.
IKE
Lien: http://www.linuxplusvalue.be/mylpv.php?id=178
IKE permet d'avoir une gestion des clés plus souple, avec regénération de nouvelles clés.
Donc, c'est vachement mieux.
IKE vient avec “racoon” … ouai, c'est super clair.
IKE vient avec Racoon.
Installer
# aptitude install racoon
Configurer
En partant de l'exemple ci-dessus.
On reprend les mêmes configurations, sauf qu'on ne garde que la “politique de sécurité” (donc, on vire ce qui concerne les clés).
Ceci, parce ce que c'est IKE, euh, Racoon qui gère les clés maitenant.
Donc, le PC-A a pour config:
flush; spdflush; # Politique de securité (SP) # (le quand faire) # --------------------------- spdadd <IP-A> <IP-B> any -P out ipsec esp/transport//require ah/transport//require; spdadd <IP-B> <IP-A> any -P in ipsec esp/transport//require ah/transport//require;
# /etc/init.d/setkey restart
Alors que PC-B a pour config, sa symetrique: PC-B, il faut juste changer la “politique”:
flush; spdflush; # Politique de securité (SP) # (le quand faire) # --------------------------- spdadd <IP-B> <IP-A> any -P out ipsec esp/transport//require ah/transport//require; spdadd <IP-A> <IP-B> any -P in ipsec esp/transport//require ah/transport//require;
# /etc/init.d/setkey restart
Racoon
Mettre les clés partagés dans:
/etc/racoon/psk.txt
Pour PC-A :
IP-B password2
Pour PC-B :
IP-A password2
Et faire en sorte d'avoir dasn /etc/racoon/racoon.conf
:
remote anonymous { exchange_mode main,aggressive; # TJ ------ doi ipsec_doi; my_identifier address; lifetime time 2 min; initial_contact on; proposal_check obey; # --------- proposal { encryption_algorithm 3des; hash_algorithm sha1; authentication_method pre_shared_key; dh_group modp1024; } generate_policy off; } sainfo anonymous { pfs_group modp768; #pfs_group 1; lifetime time 2 min; encryption_algorithm 3des; #authentication_algorithm hmac_md5; authentication_algorithm hmac_sha1; compression_algorithm deflate; }
Et puis, sur les 2 PC:
# /etc/init.d/racoon restart
Test
Ca devrait pinguer.
Il doit y avoir de bonne chose dans les logs.
Et setkey -D
retourne de belles infos.
Firewall
Autoriser le protocole “udp” avec le port “500” pour que “IKE/racoon” soit heureux.
Help
algo dispo
$ man setkey
setkey
Afficher les SA
# setkey -D
Afficher les SDP
# setkey -DP
Je cherche encore a comprendre…
Tunnel
Liens:
au putain
LAN-2-LAN
Aprés de tréééééés longues recherches, voici ce que j'ai compris:
le tunnel ne fonctionne que pour les IP LAN-2-LAN |
En clair, si vous voulez entrer dans le tunnel, il faut que l'IP source et destination appartiennent au tunnel !
Aucun routage ne pourra être forcé dans le tunnel.
forward
Il faut autoriser le Forward…
# echo "1" > /proc/sys/net/ipv4/ip_forward
simple
Liens:
On va faire un tunnel trés simple sans racoon .
PC-A veut mettre en tunnel le réseau: 192.168.0.0/24
PC-B veut mettre en tunnel le réseau: 192.168.1.0/24
Donc, si nécessaire, faire d'abord:
# /etc/init.d/racoon stop
Sur PC-A, editer /etc/ipsec-tools.conf
afin d'avoir:
flush; spdflush; add <IP-A> <IP-B> esp 34501 -m tunnel -E 3des-cbc "123456789012123456789012"; add <IP-B> <IP-A> esp 34502 -m tunnel -E 3des-cbc "123456789012123456789012"; # Tunnel # PC-A -> PC-B spdadd 192.168.0.0/24 192.168.1.0/24 any -P out ipsec esp/tunnel/<IP-A>-<IP-B>/require; # PC-A <- PC-B spdadd 192.168.1.0/24 192.168.0.0/24 any -P in ipsec esp/tunnel/<IP-B>-<IP-A>/require;
Et puis:
# /etc/init.d/setkey restart
Maintenant sur PC-B, editer /etc/ipsec-tools.conf
afin d'avoir:
flush; spdflush; add <IP-A> <IP-B> esp 34501 -m tunnel -E 3des-cbc "123456789012123456789012"; add <IP-B> <IP-A> esp 34502 -m tunnel -E 3des-cbc "123456789012123456789012"; # Tunnel # PC-B -> PC-A spdadd 192.168.1.0/24 192.168.0.0/24 any -P out ipsec esp/tunnel/<IP-B>-<IP-A>/require; # PC-B <- PC-A spdadd 192.168.0.0/24 192.168.1.0/24 any -P in ipsec esp/tunnel/<IP-A>-<IP-B>/require;
Et puis:
# /etc/init.d/setkey restart
Pour tester, c'est plus compliqué:
- il faut que l'IP source soit dans l'un des LAN, et que l'IP destinataire soit dans l'un des autres LAN.
- il faut activer le forward entre interface (si on fait un test a partir d'un autre poste)
- il faut autoriser le firewall a balancer des IP local sur le WAN !
Soit le cas de figure suivant:
- PC-A a une IP 192.168.0.x
- PC-B a une IP 192.168.1.y
Alors on peut faire:
# nc -s 192.168.0.x 192.168.1.y 22 SSH-2.0-OpenSSH_5.1p1 Debian-5
Dans le genre bizarre, il a fallut autoriser (vite fait) le firewall avec un règle comme cela:
$IPTABLES -A INPUT -i $WAN_IF -d 192.168.0.0/16 -s 192.168.0.0/16 -j ACCEPT
Et oui: du WAN arrive des IP locales…
avec IKE
ou plutot, avec racoon
.
En fait, il faut juste laisser les politiques, et supprimer les protocoles souhaités.
Et bien sur, démarrer racoon
…
Voila.
Tips
Route et MTU
On doit parfois jouer avec les routes…
Mais aussi avec la MTU.
Pour mémoire, on peut utiliser ce format de commande par exemple:
# ip route add <NETWORK> via <gateway> src <SRC> [mtu X]
Par exemple:
# ip route add 192.168.1.0/24 via default src 192.168.0.49 mtu 1415
Ainsi, ce qui est a destination de la classe “192.168.1.0/24” prendra pour source “192.168.0.49” et la MTU 1415
iptables
$IPTABLES -A INPUT -i eth0 -p esp -j ACCEPT ; # ESP (ou -p 50) $IPTABLES -A INPUT -i eth0 -p ah -j ACCEPT ; # AH (ou -p 51) $IPTABLES -A INPUT -i eth0 -p udp --dport 500 -j ACCEPT ; # pour IKE/racoon/pluto
Faire des bizarreries, comme autoriser les IP locales (192.168/16 10/8…) a voyager vers Internet… (sans oublier qu'en fait, ca passe par un tunnel!)
ike-scan
# aptitude install ike-scan # /etc/init.d/ipsec stop # ike-scan -M 172.16.0.33 Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/) 172.16.0.33 Main Mode Handshake returned HDR=(CKY-R=46746e295468b2d5) SA=(Enc=3DES Hash=SHA1 Auth=PSK Group=2:modp1024 LifeType=Seconds LifeDuration(4)=0x00007080) VID=4f45606c50487c5662707575 VID=afcad71368a1f1c96b8696fc77570100 (Dead Peer Detection v1.0)
Openswan
Lien: http://wiki.debian.org/HowTo/openswan
Malgré tout les tutoriaux, rien ne fonctionne comme voulu.
Donc, j'abadonne openswan
…
Et finalement, “ipsec-tools” me suffit amplement.