[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [HS] WiFi



On Thu, Nov 07, 2002 at 06:24:51PM +0100, Le Sensei... wrote:

> Ca fait des lustres que j'ai un réseau wireless chez moi, mais je n'ai encore 
> pas osé me lancer dans IPSEC, bien que j'en ai eu très envie...

Bon. Je suppose qu'en gros, tu as:

1) 1 routeur NAT
2) Un flottille de clients

Ce que j'ai fait, c'est sécuriser la communication entre les clients
et le routeur, pas entre les clients "direct". Si c'est ce que tu
désires, tu devras, pour n clients, ou bien mettre n^2 lignes de
configuration sur chaque machine, ou mettre en place un dns "interne"
sécurisé avec dnssec (hmmm... maintenant que j'y pense ça peut être
par la connexion ipsec avec le serveur DNS). Si tu veux le faire, je
veux bien t'aider (ça m'excite), mais je ne l'ai pas fait.

Mais je suppose que tes clients ne communiquent pas entre eux, tu veux
juste que ça marche bien avec le routeur (maintenant que j'y pense, tu
peux aussi, pour simplifier, faire passer tout le trafic, même le
"local", via le routeur. Ça coûte 50% de performance, mais...).


Bon, revenons à nos moutons:

 - J'ai installé freeswan et  kernel-patch-freeswan-ext de sid. J'ai
   installé libc6 de sarge pour faire passer, mais tu peux aussi
   backporter.

   INSTALLE libssl-dev!! Apparemment, c'est une dépendance qui manque,
   d'après les rapports de bogue.

 - Installer kernel-source-2.4.19

Le patch kernel ajoute des options de configuration, donc utiliser
--config menuconfig, etc (si tu as plus de chance qu'avec les patches
ACL :-), tiens, j'y pense, un "make-kpkg clean" aurait peut-être
résolu l'affaire)

Ma config:

CONFIG_IPSEC=m
CONFIG_IPSEC_IPIP=y
CONFIG_IPSEC_AH=y
CONFIG_IPSEC_AUTH_HMAC_MD5=y
CONFIG_IPSEC_AUTH_HMAC_SHA1=y
CONFIG_IPSEC_ESP=y
CONFIG_IPSEC_ENC_3DES=y
CONFIG_IPSEC_ALG=y
CONFIG_IPSEC_ALG_MD5=m
CONFIG_IPSEC_ALG_SHA1=m
CONFIG_IPSEC_ALG_SHA2=m
CONFIG_IPSEC_ALG_3DES=m
CONFIG_IPSEC_ALG_AES=m
CONFIG_IPSEC_ALG_BLOWFISH=m
CONFIG_IPSEC_ALG_CAST=m
# CONFIG_IPSEC_ALG_NULL is not set
CONFIG_IPSEC_ALG_SERPENT=m
CONFIG_IPSEC_ALG_TWOFISH=m
CONFIG_IPSEC_IPCOMP=y
CONFIG_IPSEC_DEBUG=y


(Oui, il y a double emploi entre CONFIG_IPSEC_ALG_3DES et
CONFIG_IPSEC_ENC_3DES, de même pour SHA1 et MD5)

Malheureusement, pour charger des algos supplémentaires, il faut
éditer /etc/init.d/ipsec (ou le faire à la main). Ne pas oublier de
les décharger à l'arrêt aussi.

==== configuration ======

Maintenant que tout est installé, la config. Comme j'avais déjà mon
propre CA X.509, j'ai créé un certificat pour chaque machine, avec le
hostname en CN. Tu peux utiliser des clés RSA sans la sauce X.509 si
tu veux, mais alors pas d'interopérabilité avec Microsoft Windows
2000, et de nouveau, chaque machine doit avoir une ligne de
configuration par pair avec qui elle veut communiquer.


Si tu veux commencer ton propre CA, /usr/lib/ssl/misc/ contient CA.pl
et CA.sh pour faciliter un peu le travail.


Sur un de mes clients, voici mon /etc/ipsec.conf:

--------------- begin ipsec.conf --------------------
# /etc/ipsec.conf - FreeS/WAN IPsec configuration file

# More elaborate and more varied sample configurations can be found
# in FreeS/WAN's doc/examples file, and in the HTML documentation.



# basic configuration
config setup
        # THIS SETTING MUST BE CORRECT or almost nothing will work;
        # %defaultroute is okay for most simple cases.
        # interfaces=%defaultroute
        interfaces="ipsec0=eth0"
        # Debug-logging controls:  "none" for (almost) none, "all" for lots.
        klipsdebug=none
        plutodebug=none
        # Use auto= parameters in conn descriptions to control startup actions.
        plutoload=%search
        plutostart=%search
        # Close down old connection when new one using same ID shows up.
        uniqueids=yes



# defaults for subsequent connection descriptions
# (these defaults will soon go away)
conn %default
        keyingtries=0
        disablearrivalcheck=no
          #use RSA based authentication with certificates
          authby=rsasig
          rightrsasigkey=%cert
          #freeswan security gateway
          leftcert=thinkpadCert.pem
          leftid="C=LU, L=Bereldange, O=The Lionel Elie Mamane Corp., OU=Mobile Computing Services, CN=thinkpad.home.mamane.lu/Email=lionel@mamane.lu"

conn BereldangeWiFi
        # Left security gateway, subnet behind it, next hop toward right.
        left=172.16.0.3
        # Right security gateway, subnet behind it, next hop toward left.
        right=172.16.0.2
        rightsubnet=0.0.0.0/0
        rightid="C=LU, ST=., L=Bereldange, O=The Lionel Elie Mamane Corp., OU=Network Services Headquarters, CN=tehina.home.mamane.lu, E=lionel@mamane.lu"
        ike=aes128-sha-modp2048
        esp=aes-sha1
        pfsgroup=modp2048
        # uncomment next line to enable it
        auto=route
---------------- end ipsec.conf ---------------------


Je n'ai pas accès au routeur maintenant (le réseau est à ma maison des
week-ends, pas ma maison de la semaine), mais ça doit ressembler à ça:

--------------- begin ipsec.conf --------------------
# /etc/ipsec.conf - FreeS/WAN IPsec configuration file

# More elaborate and more varied sample configurations can be found
# in FreeS/WAN's doc/examples file, and in the HTML documentation.



# basic configuration
config setup
        # THIS SETTING MUST BE CORRECT or almost nothing will work;
        # %defaultroute is okay for most simple cases.
        # interfaces=%defaultroute
        interfaces="ipsec0=eth0"
        # Debug-logging controls:  "none" for (almost) none, "all" for lots.
        klipsdebug=none
        plutodebug=none
        # Use auto= parameters in conn descriptions to control startup actions.
        plutoload=%search
        plutostart=%search
        # Close down old connection when new one using same ID shows up.
        uniqueids=yes



# defaults for subsequent connection descriptions
# (these defaults will soon go away)
conn %default
        keyingtries=0
        disablearrivalcheck=no
          #use RSA based authentication with certificates
          authby=rsasig
          rightrsasigkey=%cert
          #freeswan security gateway
	  left=172.16.0.2
          leftsubnet=0.0.0.0/0
          leftcert=tehinaCert.pem
          leftid="C=LU, ST=., L=Bereldange, O=The Lionel Elie Mamane Corp., OU=Network Services Headquarters, CN=tehina.home.mamane.lu, E=lionel@mamane.lu"

conn thinkpad
        # Right security gateway, subnet behind it, next hop toward left.
        right=172.16.0.3
        rightid="C=LU, L=Bereldange, O=The Lionel Elie Mamane Corp., OU=Mobile Computing Services, CN=thinkpad.home.mamane.lu/Email=lionel@mamane.lu"
        ike=aes128-sha-modp2048
        esp=aes-sha1
        pfsgroup=modp2048
        # uncomment next line to enable it
        auto=route
---------------- end ipsec.conf ---------------------

/etc/ipsec.conf contient une seule ligne (à part les commentaires):

: RSA   thinkpadKey.pem

Maintenant, dans le répertoire /etc/ipsec.d, il y a:

thinkpadCert.pem, le certificat X.509 de la machine
private/thinkpadkey.pem, la clé privée RSA de la machine
cacerts/lionel.pem, le certificat X.509 de mon CA


La doc dit de mettre le certificat de la machine dans
/etc/x509cert.der, je l'ai fait sur le routeur, mais pas sur les
clients, et «ça marche» ®.



Sur les clients, freeswan se plante dans les modifs qu'il fait à la
table de routage. Après établissement de le communication, je lance ce
script pour corriger:

/sbin/route add -host 172.16.0.2 gw    172.16.0.2 dev ipsec0
/sbin/route del -net 0.0.0.0   gw    172.16.0.2   netmask  128.0.0.0
/sbin/route del -net 128.0.0.0   gw    172.16.0.2   netmask  128.0.0.0
/sbin/route add default gw    172.16.0.2 dev ipsec0

(Quand je revois ça, je me dis que finalement, ça risque de marcher
tel quel, sans lancer le script)

Au niveau firewalling, sur les clients, ça peut rester très simple si
les toutes les machines ipsec sont de confiance:

#Drop by default

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD

# allow IPsec
#
# IKE negotiations
iptables -A INPUT  -p udp --sport 500 --dport 500 -j ACCEPT
iptables -A OUTPUT -p udp --sport 500 --dport 500 -j ACCEPT
# ESP encrypton and authentication
iptables -A INPUT  -p 50 -j ACCEPT
iptables -A OUTPUT -p 50 -j ACCEPT
# uncomment for AH authentication header
# iptables -A INPUT  -p 51 -j ACCEPT
# iptables -A OUTPUT -p 51 -j ACCEPT

# Accept from local interface, too!:

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i ipsec0 -j ACCEPT
iptables -A OUTPUT -j ACCEPT

# LOG every other attempt
iptables -A INPUT -j LOG



Pour le routeur, j'ai installé ipmasq, et j'ai modifié les
/etc/ipmasq/rules assez profondément. Je pourrai les récupérer d'ici
une semaine.


Bon, je vois rien d'autre, à moins que tu n'aies des clients Windows
2000/XP. Tu en as?


-- 
Lionel

Attachment: pgp79oFTV7SaQ.pgp
Description: PGP signature


Reply to: