Device iSCSI crypté sous GNU/Linux

On peut facilement configurer un device iSCSI crypté sur FreeBSD, voici l'équivalent sous Debian GNU/Linux.

Sur le serveur

Installer IET:

# aptitude install iscsitarget iscsitarget-modules-2.6-amd64

Dans /etc/ietd.conf:

Target iqn.2008-12.net.orgrim:storage.crypt.test
        Lun 0 Path=/home/iscsi/crypto.test,Type=fileio
        IncomingUser orgrim prout

Créer le fichier:

# mkdir /home/iscsi
# dd if=/dev/urandom of=/home/iscsi/crypto.test bs=1M count=1024

Relancer le daemon:

# /etc/init.d/iscsitarget restart

Sur le client

Installer le paquet contenant la partie initiator :

# aptitude install open-iscsi

Connection à la target

Il faut découvrir les targets fournies par le serveur, puis régler les paramètres d'authentification, et se logguer pour obtenir un device :

# iscsiadm -m discovery -t sendtargets -p 192.168.0.1
192.168.0.1:3260,1 iqn.2008-12.net.orgrim:storage.crypt.test
# iscsiadm -m node -T iqn.2008-12.net.orgrim:storage.crypt.test -p 192.168.0.1 -o update -n node.session.auth.authmethod -v CHAP
# iscsiadm -m node -T iqn.2008-12.net.orgrim:storage.crypt.test -p 192.168.0.1 -o update -n node.session.auth.username -v orgrim
# iscsiadm -m node -T iqn.2008-12.net.orgrim:storage.crypt.test -p 192.168.0.1 -o update -n node.session.auth.password -v prout
# iscsiadm -m node -T iqn.2008-12.net.orgrim:storage.crypt.test -p 192.168.0.1 -l
Logging in to [iface: default, target: iqn.2008-12.net.orgrim:storage.crypt.test, portal: 192.168.0.1,3260]
Login to [iface: default, target: iqn.2008-12.net.orgrim:storage.crypt.test, portal: 192.168.0.1,3260]: successful
# cat /proc/scsi/scsi
Attached devices:
Host: scsi3 Channel: 00 Id: 00 Lun: 00
  Vendor: IET      Model: VIRTUAL-DISK     Rev: 0
  Type:   Direct-Access                    ANSI  SCSI revision: 04

Partitionnement

On utilise fdisk comme toujours pour découvrir quel device correspond à notre LUN :

# fdisk -l
...
Disk /dev/sda: 1073 MB, 1073741824 bytes
34 heads, 61 sectors/track, 1011 cylinders
Units = cylinders of 2074 * 512 = 1061888 bytes
Disk identifier: 0x027ebc31

Disk /dev/sda doesn't contain a valid partition table

Ensuite, il faut partitionner:

# fdisk /dev/sda
n, p, 1, <return>, <return>, w

Encryption

On utilise cryptsetup disponible dans le paquet éponyme :

# cryptsetup -y -c aes-cbc-essiv:sha256 -s 256 -h sha256 luksFormat /dev/sda1

WARNING!
========
This will overwrite data on /dev/sda1 irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.

Il faut entrer une passphrase qui permettra de décrypter le device.

Formatage et montage

On “ouvre” le device :

# cryptsetup luksOpen /dev/sda1 crypt-iscsi
Enter LUKS passphrase:
key slot 0 unlocked.
Command successful.

Cette commande crée le device /dev/mapper/crypt-iscsi, qui correspond à la partition décryptée.

On termine par un système de fichier et le montage :

# mke2fs -j /dev/mapper/crypt-iscsi
# mkdir /mnt/iscsi
# mount /dev/mapper/crypt-iscsi /mnt/iscsi

Conclusion

Finalement, on voit que c'est plutôt équivalent. Ici, il y a plus de commandes à taper à cause de l'authentification pour l'initator. Mais on peut faciliter tout ça en configurant /etc/iscsi/iscsid.conf, voici un résumé :

node.startup = automatic
node.session.auth.authmethod = CHAP
node.session.auth.username = orgrim
node.session.auth.password = prout