====== IPsec ====== Même chose que OpenVPN, mais differement... Liens: *http://hausheer.osola.com/docs/23 *http://www.pintaric.net/index.php?post/2009/05/22/OVH%3A-MIse-en-place-d-un-cluster-Haute-Disponibilit%C3%A9 *http://lartc.org/howto/lartc.ipsec.html *http://wiki.debian.org/HowTo/openswan *http://ubuntuforums.org/showthread.php?p=1781442 *http://www.gentoo-wiki.info/HOWTO_IPSEC *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 ah 15700 -A hmac-md5 "1234567890123456"; add esp 15701 -E 3des-cbc "123456789012123456789012"; spdadd 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 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 ah 15700 -A hmac-md5 "1234567890123456"; add 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 ah 15700 -A hmac-md5 "1234567890123456"; # authentification IP-B -> IP-A add ah 24500 -A hmac-md5 "1234567890123456"; # chiffrement IP-A -> IP-B add esp 15701 -E 3des-cbc "123456789012123456789012"; # chiffrement IP-A -> IP-B add esp 24501 -E 3des-cbc "123456789012123456789012"; # Politique de securité (SP) # (le quand faire) # --------------------------- spdadd any -P out ipsec esp/transport//require ah/transport//require; spdadd 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 any -P out ipsec esp/transport//require ah/transport//require; spdadd 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 any -P out ipsec esp/transport//require ah/transport//require; spdadd 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 any -P out ipsec esp/transport//require ah/transport//require; spdadd 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: *http://www.phwinfo.com/forum/fr-comp-reseaux-ip/166192-tunnel-ipsec-avec-racoon-et-linux.html *http://www.lacave.net/~fred/projets/racoon/config.html *http://www.vogelweith.com/debian_server/11_racoon.php *http://www.free-4ever.info/index.php/Ipsec-tools:branchoffice *http://www.kame.net/newsletter/20001119/ ==== 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: *http://www.linuxplusvalue.be/mylpv.php?id=177 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 esp 34501 -m tunnel -E 3des-cbc "123456789012123456789012"; add 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/-/require; # PC-A <- PC-B spdadd 192.168.1.0/24 192.168.0.0/24 any -P in ipsec esp/tunnel/-/require; Et puis: # /etc/init.d/setkey restart Maintenant sur PC-B, editer **''/etc/ipsec-tools.conf''** afin d'avoir: flush; spdflush; add esp 34501 -m tunnel -E 3des-cbc "123456789012123456789012"; add 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/-/require; # PC-B <- PC-A spdadd 192.168.0.0/24 192.168.1.0/24 any -P in ipsec esp/tunnel/-/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 via 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.