August 10, 2011

Iodine, ou comment encapsuler ton traffic dans du flux dns

Filed under: Unix — raf @ 5:10 pm

Dans l’endroit où je passe la grande majorité des mes vacances j’ai eu la bonne surprise cette année de découvrir un magnifique réseau wifi maillé (très impressionnant au passage, couvrant plus de 300 hectares).

Antennes

Les tarifs étant … hum … prohibitif et vu que j’avais un peu de temps, je me mets en quête d’un moyen de contournement. J’avais toujours entendu parler du tunneling dns mais je n’avais jamais eu l’occasion de tester.  Avec iodine cela juste marche.  Un tout petit poil de tunning du client :

iodine -L0 -Ttxt -r -M 200 -m 1100 -P superPassXXX subdomain.futomaki.net

et on une connexion internet plus rapide que du 3G (entre 10 et 30Ko/S ce qui est très suffisant pour du web).
Voila je peux maintenant loutrer devant mon pc en terrasse :)

April 11, 2011

Ipsec Interopability between Netscreen and OpenBsd

Filed under: Unix — raf @ 12:52 pm

Au boulot cela fait longtemps que je travaille avec des firewalls Netscreen. Pas que cela m’enchante profondément, mais disons qu’après avoir tout testé (pix, checkpoint, …) c’est sans doute les “moins pire” des firewalls matériels. En revanche je n’avais jamais eu l’occasion de faire de l’Ipsec avec. Alors avant de me lancer direct dans la configuration avec un peer que je ne maitrise pas, j’essaye avec une belle gate Openbsd.

Alors coté OpenBsd on fait du très classique :

# cat /etc/ipsec.conf
ike esp from 10.1.1.0/24 to 10.1.2.0/24 local 1.0.0.1 peer 2.0.0.1 srcid 1.0.0.1 psk "XXX"

Que l’on lance comme d’habitude par :

# isakmpd -K
# ipsecctl -f /etc/ipsec.conf

Maintenant coté Netscreen. Alors on va le faire en Cli, parce qu’on est poilu et que c’est nettement plus compréhensible. A noter que l’on va créer un vpn site à site en mode routé. C’est à dire que nos subnets protégés vont être routés via l’interface tunnel. Note : on peut aussi faire sans interface tunnel avec du policy based vpn.

1. Création d’une interface tunnel, bindé sur une loopback car c’est plus pratique :

set interface "tunnel.1" zone "Untrust"
set interface tunnel.1 ip unnumbered interface loopback.1

2. Création de notre remote gateway, équivalent à la phase 1 de l’ike :

set ike gateway "OpenBsd" address 1.0.0.1 Main outgoing-interface "loopback.1" preshare "XXX" 
   sec-level standard

3. Création du tunnel VPN, aka la phase 2. Ici seule ruse il faut spécifier le proxy-id pour définir les subnet locaux et distants dans l’échange IKE pour négocier les SA. On met aussi un peu de monitor sur le tunnel (attention certaine implémentation n’aime pas, genre ISA server).

set vpn "OpenBsd" gateway "OpenBsd" no-replay tunnel idletime 0 sec-level standard
set vpn "OpenBsd" proxy-id local-ip 10.1.2.0/24 remote-ip 10.1.1.0/24 "ANY"
set vpn "OpenBsd" monitor rekey
set vpn "OpenBsd" bind interface tunnel.1

4. Test coté Netscreen :

get sa
total configured sa: 1
HEX ID    Gateway         Port Algorithm     SPI      Life:sec kb Sta   PID vsys
00000002<   1.0.0.1  500 esp:3des/sha1 7a83ee29  3528 unlim A/D    -1 0
00000002>   1.0.0.1  500 esp:3des/sha1 3490b796  3528 unlim A/D    -1 0

Ok cela marche (colonne sta) , reste plus qu’à rajouter la route (et les policies qui vont bien):

set route 10.1.1.0/24 interface tunnel.1

et coté bsd :

#ipsecctl -s all
FLOWS:
flow esp in from 1.1.2.0/24 to 1.1.1.0/24 peer 2.0.0.1 srcid 1.0.0.1/32 
  dstid 2.0.0.1/32 type use
flow esp out from 1.1.1.0/24 to 1.1.2.0/24 peer 2.0.0.1 srcid 1.0.0.1/32 
  dstid 2.0.0.1/32 type require

SAD:
esp tunnel from 2.0.0.1 to 1.0.0.1 spi 0x608d47dd auth hmac-sha1 enc 3des-cbc
esp tunnel from 1.0.0.1 to 2.0.0.1 spi 0x7a83ee30 auth hmac-sha1 enc 3des-cbc

All good.

September 26, 2010

Backbone Free un peu chargé ?

Filed under: Unix — raf @ 3:43 pm

Je me pose des questions… En même temps les routeurs c’est pas fait pour répondre a de l’icmp OK. C’est d’ailleurs un truc que je ne comprendrais jamais. On a des routeurs qui coutent des 100aines de K€, qui ont un plan de contrôle toujours super lent.

Host                                            Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. 88.163.131.254                               0.0%    11   19.5  19.6  18.7  20.1   0.5
 2. 213.228.24.254                              36.4%    11   20.3  20.2  18.7  22.8   1.4
 3. massy-6k-1-po2.intf.routers.proxad.net       0.0%    11   19.3  19.8  18.8  20.6   0.6
 4. stmaurice-6k-1-po5.intf.routers.proxad.net  45.5%    11   19.5  20.4  19.5  21.2   0.7
 5. th2-crs16-1-be1008.intf.routers.proxad.net   0.0%    10   20.3  21.0  20.3  21.7   0.4
 6. th2-1-6k.fr.eu                               0.0%    10  195.5 202.1  24.6 409.6 133.0
 7. rbx-2-6k.fr.eu                              30.0%    10   26.4  24.9  23.3  26.4   1.0
 8. rbx-18-m1.fr.eu                              0.0%    10   31.2  25.3  23.3  31.2   2.2
 9. mir1.ovh.net                                 0.0%    10   24.6  24.5  23.1  25.4   0.7

June 17, 2010

Dkim avec postfix

Filed under: Unix — raf @ 3:48 pm

Petite description de la mise en place de DKIM avec postifx, afin que les spams, euh pardon mails vers yahoo/google arrivent.

# apt-get install dkim-filter

Création des clés :

# mkdir /var/dkim-filter/
# cd /var/dkim-filter/
# openssl genrsa -out private.key 1024
# openssl rsa -in private.key -out public.key -pubout -outform PEM

Configuration de dkim-filter dans /etc/dkim-filter.conf

Syslog                  yes
#UMask                  002

Domain          mondomaine.com
KeyFile         /var/dkim-filter/private.key
Selector        mail

InternalHosts           /etc/postfix/local
AutoRestart             no
Background              yes
Canonicalization        simple
DNSTimeout              5
Mode                    s
SignatureAlgorithm      rsa-sha256
SubDomains              no
X-Header                yes

Modification du /etc/defaut/dkim-filter pour qu’il écoute sur en local :

...
SOCKET="inet:8891@localhost" # listen on loopback on port 12345

Il ne faut pas oublier de créer le fichier /etc/postfic/local qui contient la liste des @ip en provenance desquelles dkim-filter va signer ces mails. Ici j’ai tout mis une grosse classe locale, pour faire plus simple.

# more /etc/postfix/local
192.168.0.0/16

La configuration de postfix qui va bien :

...
milter_default_action = accept
milter_protocol = 2
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

Et enfin il faut créer l’entrée dns qui va bien, en fonction du sélecteur que l’on a choisi (ici c’est mail).
par exemple pour mondomaine.com:

mail._domainkey.mondomaine.com. 180 IN     TXT     "k=rsa; t=y; p=MIGfMA0GCSq..."

Le p= est la clé publique. Le t=y est pour dire que l’on est en phase de test. Une fois que tout est testé et OK on peut le retirer.

Enfin un test d’envoi vers un compte yahoo/gmail nous montre le miracle dans les headers du messages :

Authentication-Results: mx.google.com; spf=pass (google.com: domain of raph@mondomaine.com
designates 83.167.48.103 as permitted sender) smtp.mail=raphael@mondomaine.com; dkim=pass
(test mode) header.i=@mondomaine.com

June 1, 2010

Le multipath sur debian, ou comment foutre le souk dans ses disques

Filed under: Unix — raf @ 6:02 pm

Premièrement il faut bien configurer son zoning et ses LUN coté brocade/netapp ou autre.
On assume que l’on a des interfaces qlogic donc il faut un kernel debian qui supporte la carte.
Ils faut aussi installer les qla-tools que l’on peut trouver dans sid.

Une fois ceci configuré on doit avoir de beau messages si l’on fait un :

# dmesg | grep qla
[    2.634180] qla2xxx 0000:04:00.0: LOOP UP detected (4 Gbps).
[    2.637149] qla2xxx 0000:09:00.0: LOOP UP detected (4 Gbps).
[    2.652926] qla2xxx 0000:04:00.0: SNS scan failed -- assuming zero-entry result...

et

# dmesg | egrep 'sdc|sdd|NETAPP'
[    3.771579] scsi 3:0:0:0: Direct-Access     NETAPP   LUN              7320 PQ: 0 ANSI: 4
[    3.772161] sd 3:0:0:0: [sdc] 167407616 512-byte logical blocks: (85.7 GB/79.8 GiB)
[    3.772368] sd 3:0:0:0: [sdc] Write Protect is off
[    3.772436] sd 3:0:0:0: [sdc] Mode Sense: bd 00 00 08
[    3.772664] sd 3:0:0:0: [sdc] Write cache: disabled, read cache: enabled
[    3.773316]  sdc: sdc1
[    3.774416] sd 3:0:0:0: [sdc] Attached SCSI disk
[    3.823540] scsi 4:0:0:0: Direct-Access     NETAPP   LUN              7320 PQ: 0 ANSI: 4
[    3.824107] sd 4:0:0:0: [sdd] 167407616 512-byte logical blocks: (85.7 GB/79.8 GiB)
[    3.824925] sd 4:0:0:0: [sdd] Write Protect is off
[    3.824992] sd 4:0:0:0: [sdd] Mode Sense: bd 00 00 08
[    3.825312] sd 4:0:0:0: [sdd] Write cache: disabled, read cache: enabled
[    3.826084]  sdd: sdd1

A ce stade on voit le disque des deux cotés, ce qui prouve que notre conf est bonne.

Vérifions en lançant la commande ql-hba-snapshot :

# ql-hba-snapshot
QLogic HBA Host0 Information
WWPN: 0x20010026b930aaa5
WWNN: 0x20000026b930aaa5
Driver Version: 8.03.01-k6
Model: QME2572
Firmware Version: 4.04.05 (80)
Link State: running
Device Information
Device : 0
Vendor: NETAPP
Model: LUN
WWPN: 0x500a098186083903
Port ID: 0x9b1100
Number of LUNs: 1

QLogic HBA Host1 Information
WWPN: 0x20020026b930aaa5
WWNN: 0x20000026b930aaa5
Driver Version: 8.03.01-k6
Model: QME2572
Firmware Version: 4.04.05 (80)
Link State: running
Device Information
Device : 0
Vendor: NETAPP
Model: LUN
WWPN: 0x500a098286083903
Port ID: 0x9c1100
Number of LUNs: 1

On peut évidement attaquer nos disque en direct, mais du coup plus d’intérêt à faire du multipath. Configurons donc !
Ils faut installer le paquet multipath-tools.

ATTENTION : on évitera d’installer le paquet multipath-tools-boot sauf si :

  • on veut voir son système foirer au prochain reboot
  • on veut absolument vouloir booter sur un device en multipath (ce que je déconseille fortement)

Identifions le wwwid de nos deux disques :

# /lib/udev/scsi_id -g -u -d /dev/sdd
360a980004335434a654a565353477537
# /lib/udev/scsi_id -g -u -d /dev/sdc
360a980004335434a654a565353477537

Bonne nouvelle c’est le même.

Ensuite configurons le fichier /etc/multipath.conf :

defaults {
        udev_dir                /dev
        polling_interval        2
        default_getuid_callout  "/lib/udev/scsi_id -g -u -d /dev/%n"
        user_friendly_names     yes
}

blacklist {
        wwid 3603456781234567812d85e8d065bf234
        wwid 3603456781234567812d85e9006877672
        devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
        devnode "^hd[a-z][[0-9]*]"
}

devices {
        device
        {
                vendor                  "NETAPP "
                product                 "LUN"
                path_grouping_policy    group_by_serial
                path_checker            tur
                path_selector           "round-robin 0"
                prio_callout            "/sbin/mpath_prio_netapp /dev/%n"
                failback                immediate
                no_path_retry           300
        }
}

multipaths {
        multipath {
                wwid                    360a980004335434a654a565353477537
                alias                   data-mp
        }
}

Alors quelques commentaires :

  • La section multipath est la ou l’on définit notre mapping sur nos deux path.
  • La section device définit les paramètres par défaut du SAN
  • La section blacklist est importante car elle permet d’exclure des disques du probe du multipath, par exemple ici on exclue les disques locaux sda et sdb. On peut aussi mettre un wwwid d’un disque pour plus de finesse.

Si tout se passe bien on peut taper la commande magique :

# multipath -l
data-mp (360a980004335434a654a565353477537) dm-0 NETAPP  ,LUN
[size=80G][features=1 queue_if_no_path][hwhandler=0]
_ round-robin 0 [prio=0][active]
 _ 3:0:0:0 sdc 8:32  [active][undef]
 _ 4:0:0:0 sdd 8:48  [active][undef]

Après il est de bon ton d’utiliser LVM sur ce genre de disque, car on pourra le redimensionner à chaud, etc…

# apt-get install lvm2

Attention il faut configurer /etc/lvm/lvm.conf pour qu’il cherche ses PVs dans le device-mapper et exclure les disques physiques sinon on aura des doublons de PVs, et des messages du style ‘Duplicate PVs found’. Donc dans la section device il faut rajouter/changer les lignes suivantes :

filter = [ "r/sd.*/", "a/.*/" ]
types = [ "device-mapper", 1 ]

On crée ses PV/VG/LV de manière classique :

# pvcreate /dev/mapper/data-mp
# vgcreate data-vg /dev/mapper/data-mp
# lvcreate -n data-lv -L 40g data-vg
# mkfs -j /dev/data-vg/data-lv

Et voila !

On peut jouer un peu avec son fabric ou ses fibres pour casser un des deux chemins. On doit voir deux trucs :

[  582.333842] qla2xxx 0000:09:00.0: LOOP DOWN detected (2 0 0).

dans le dmesg et

# multipath -l
data-mp (360a980004335434a654a565353477537) dm-0 ,
[size=80G][features=1 queue_if_no_path][hwhandler=0]
_ round-robin 0 [prio=0][active]
 _ #:#:#:# -   #:#   [failed][undef]
 _ 4:0:0:0 sdd 8:48  [active][undef]

Et bien sur on doit toujours accéder à nos données. Le mutlipath fonctionne.

J’ai aussi testé le resize, rajout de Lun à chaud et cela a pu fonctionner à coup de :

# echo "1"  > /sys/class/fc_host/host1/issue_lip
# echo "1"  > /sys/class/fc_host/host2/issue_lip
# echo '- - -' > /sys/class/scsi_host/host1/scan
# echo '- - -' > /sys/class/scsi_host/host2/scan

ou plus simple :

# ql-dynamic-tgt-lun-disc

puis les commande lvm classiques.

Attention tout cela peut paraitre cool et facile, mais il faut bien voir que j’ai fracassé le boot de mon serveur une bonne dizaine de fois avant d’avoir un setup fonctionnel.

Bonding et vlan avec debian

Filed under: Unix — raf @ 5:37 pm

Petite description d’une configuration réseau sur une debian en bonding + vlan :

Premièrement on installe les paquets :

# apt-get install vlan ifenslave

Créer le fichier /etc/modprobe.d/bonding.conf

alias bond0 bonding
options bonding mode=active-backup miimon=100 downdelay=200 updelay=200 primary=eth0

Ici on est en mode failover (on pourra changer par la suite pour faire du vrai load balacing aka LACP).
L’interface primaire est eth0 et la backup eth1.

Voici le fichier /etc/network/interfaces :

auto bond0
iface bond0 inet manual
up ifconfig bond0 0.0.0.0 up
slaves eth0 eth1

auto vlan5
iface vlan5 inet static
address 192.168.5.23
netmask 255.255.255.0
gateway 192.168.5.1
vlan-raw-device bond0

La configuration coté switch sur un cisco :

interface GigabitEthernet1/0/X
switchport trunk allowed vlan 5
switchport mode trunk
spanning-tree portfast trunk

On peut tester de faire down/shut de tout les cotés et regarder dans dmesg, pour voir que cela fonctionne bien.
On est donc complétement redondant.

Ensuite si on la chance d’avoir les deux câbles sur le même switch (en stack par exemple) on peut passer en mode load balancing :

options bonding mode=4 miimon=100 downdelay=200 updelay=200

Puis on configure les interfaces du port channel en LACP, pour chaque interfaces :

channel-protocol lacp
channel-group X mode active

On peut vérifier coté switch :

sh etherchannel X detail

et coté serveur :

# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.5.0 (November 4, 2008)

Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 200
Down Delay (ms): 200

802.3ad info
LACP rate: slow
Aggregator selection policy (ad_select): stable
Active Aggregator Info:
Aggregator ID: 1
Number of ports: 1
Actor Key: 17
Partner Key: 1
Partner Mac Address: 00:00:00:00:00:00

Slave Interface: eth0
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:15:60:0c:94:22
Aggregator ID: 1

Slave Interface: eth1
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:15:60:0c:94:21
Aggregator ID: 2

October 19, 2009

Convert certificate pair to pfx format

Filed under: Unix — raf @ 2:30 pm

Windows c’est un monde étrange. IIS et Exchange plutôt que de prendre le couple classique certificat / clé privé, préfèrent un format de fichier .pfx. En fait il s’agit du format PKCS#12 mal nommé.  (je rappelle au passage que PKCS#12 est un format qui combine en un seul fichier la clé privé et le certificat, le tout encrypté par une passphrase symétrique).  Bref à partir de vos deux fichiers key et cert on peut lancer la commande magique suivant :

$ openssl pkcs12 -export -in certificat.pem -inkey key.pem -out mycert.pfx
Enter Export Password: toto
Verifying - Enter Export Password: toto

Et voilà votre IIS, il est content :)

April 6, 2008

Au travail fainéant

Filed under: Unix — raf @ 7:25 pm

Au fil des années, je m’aperçois que j’ai écrit pas mal de trucs divers et variés qui mine de rien pourraient intéresser du monde. Seulement voila je n’ai jamais pris le temps de les publier. Je sais c’est mal, mais bon voila je poste ici ce que je devrais publier, comme çà je n’aurais plus aucune excuses.

Code :

- asterisk click to call ajax
- asterisk callback
- serveur tftp sip aware python
- interface nagios ajax NDO
- nombreux scripts nagios
- cacticli et cactibatch
- modules pam_mysql+md5 et pam_limitp

Docs :

- sip/h323 proxy with yate/asterisk
- gfs/ocfs + drdb
- conf ldap + ssh lpk + sudoers
- openbsd custom with boot on raidframe and runit as init
- debian autoinstall preseed
- solaris autoinstall dhcp with a linux jumpstart server

et plein d’autre encore… pfff va vraiment falloir que je m’y mettes.

February 1, 2008

Et le reverse fut !

Filed under: Unix — raf @ 11:03 pm

Les entrées DNS Ipv6 et Djbdns c’est possible. Et la délégation de ma zone reverse aussi. Youpi.

La preuve en image :

rmazelier@DT1:~$ nslookup 2001:6f8:37c:1001::1
Server:         217.66.113.4
Address:        217.66.113.4#53

Non-authoritative answer:
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.0.0.1.c.7.3.0.8.f.6.0.1.0.0.2.ip6.arpa  name = futomaki.net.

Authoritative answers can be found from:
c.7.3.0.8.f.6.0.1.0.0.2.ip6.arpa        nameserver = www.futomaki.net.
www.futomaki.net        internet address = 88.163.131.44
www.futomaki.net        has AAAA address 2001:6f8:37c:1001::1

La classe.

January 27, 2008

Ipv6 ready(c)

Filed under: Unix — raf @ 5:39 pm

Avec tout le buzz ipv6 généré par l’annonce de Free, j’ai décidé d’essayer. Avec Free d’abord tant qu’a faire. Mais bon vu la topologie (*bordélique*) de mon réseau, je me suis vite rendu compte qu’un /64, bin c’est finalement un peut court. Heuresement il y a sixxs.net, qui te fournit un tunnel bien propre et un /48 tout bien confortable.

Avec OpenBSD et pf ca marche tout seul et voila j’ai mon beau subnet routé :

[raf@lateralus:~]% cat /etc/hostname.gif0
up giftunnel 88.163.131.44 212.100.184.146
up inet6 2001:6f8:202:24b::2 2001:6f8:202:24b::1 prefixlen 128
[raf@lateralus:~]% cat /etc/mygate
88.163.131.254
2001:6f8:202:24b::1
[raf@lateralus:~]% cat /etc/hostname.fxp0
inet 192.168.0.1 0xffffff00 NONE
inet6 2001:6f8:37c:1001::1 64 alias
!route add -inet6 2001:6f8:37c:1002:: -prefixlen 64  2001:6f8:37c:1001::5

Fini le NAT. Je peux enfin faire du vrai routage sur mes 110 sous réseaux :)

et comment un peu de sécurité ne nuit pas :

[raf@lateralus:~]% sudo cat /etc/pf.conf
# IPV6 stuff
pass in quick on $Ext inet proto ipv6 from 212.100.184.146 to ($Ext)
pass out quick on $Ext inet proto ipv6 from ($Ext) to 212.100.184.146
block log on $Ext6 all
pass out quick on $Ext6 inet6 from any to any keep state
pass in quick on $Ext6 inet6 proto ipv6-icmp from any to any keep state
pass out quick on $Ext6 inet6 proto ipv6-icmp from any to any keep state
pass in quick on $Ext6 inet6 proto tcp from any to any port { 22,80,443 } keep state
Next Page »