2014年8月30日 alex

How to construct an iSCSI encrypt agent

最近两天看了看如何以网络代理的形式加密各种存储协议向后端落地的数据。

其中用于SAN阵列加密的iSCSI代理,在CentOS 7居然一个包都没有yum就搞定了。

只顾着跑步和健身好久没有来更新和审核文章了,先把这个水货放上充充数吧 o(>_<)o

点击这里可以下载 示例脚本文件 <–download script file here. the content is the same as following blog text.

点击这里可以下载彩色版本的word文档 vSAN

 

#  This iSCSI encryptor and vSAN demo could be tested in CentOS 7

#  This demo script is licensed under the GPL V2

#  Dependencies:

#  tagetcli (CentOS 7) or tgt (CentOS 5,6), open-iscsi, cryptsetup

#  I test it with CentOS 7 in vmware workstation 10. –Alex Liu 3mn.net 2014.08.30

#——————————————————————————-

#  1. HowTo create a filedisk vSAN

#targetip: 192.168.124.131

#initiatorip: 192.168.124.1

#make the disk file folder on target server

mkdir /iscsi_disks

#create the filedisk disk00

targetcli

cd backstores/fileio

create disk00 /iscsi_disks/disk00.vdisk 1G

#create the iscsi target

cd /iscsi

create iqn.2014-09.net.3mn:storage.target00

#create the portal

cd iqn.2014-09.net.3mn:storage.target00/tpg1/portals

create 192.168.124.131

#create without args here will create the portal without ipbinding

#create a lun using disk00

cd ../luns

create /backstores/fileio/disk00

#create acl

cd ../acls

create iqn.2014-09.net.3mn:morida

#set chap auth

cd  iqn.2014-09.net.3mn:morida

set auth userid=iqn.2014-09.net.3mn:morida

set auth password=123456789012

#set authentication on

cd ../..

set attribute authentication=1

#save target config

cd /

saveconfig

#exit targetcli

exit

#then a 3260/tcp listening could be found

netstat -lnp | grep 3260

#open firewall port

firewall-cmd –zone=public –add-port=3260/tcp –permanent

firewall-cmd –reload

#backup target config file

cp /etc/target/saveconfig.json /etc/target/disk00.json

#you can test this target using a windows initiator iqn.2014-09.net.3mn:morida (192.168.124.1)

#——————————————————————————-

# 2. HowTo use iSCSI target as an encrypt disk

#targetip: 192.168.124.131

#initiatorip: 192.168.124.131

#follow section 1 (HowTo create a filedisk vSAN)

#restore section 1 target config file

targetcli
restoreconfig /etc/target/disk00.json
saveconfig
exit

#chap auth args can be added in /etc/iscsi/iscsid.conf

#we can use iscsiadm to update it so this step can be ignore

# *************
# CHAP Settings
# *************
# To enable CHAP authentication set node.session.auth.authmethod
# to CHAP. The default is None.
#node.session.auth.authmethod = CHAP
# To set a CHAP username and password for initiator
# authentication by the target(s), uncomment the following lines:
#node.session.auth.username = iqn.2014-09.net.3mn:morida
#node.session.auth.password = 123456789012

#edit InitiatorName in /etc/iscsi/initiatorname.iscsi

InitiatorName=iqn.2014-09.net.3mn:morida

#then restart iscsi service and check them

systemctl –all | grep iscsi

#maybe a system reboot is needed

#delete old target info

iscsiadm -m node -U all
iscsiadm -m node -o delete -T iqn.2014-09.net.3mn:storage.target00 -p 192.168.124.131:3260
cd /var/lib/iscsi/nodes
rm * -rf
cd /var/lib/iscsi/send_targets
rm * -rf

#connect to the target

iscsiadm -m discovery -t sendtargets -p 192.168.124.131:3260

iscsiadm -m node -T iqn.2014-09.net.3mn:storage.target00 -o update –name node.session.auth.authmethod –value=CHAP

iscsiadm -m node -T iqn.2014-09.net.3mn:storage.target00 -o update –name node.session.auth.username –value=iqn.2014-09.net.3mn:morida

iscsiadm -m node -T iqn.2014-09.net.3mn:storage.target00 -o update –name node.session.auth.password –value=123456789012

iscsiadm -m node -T iqn.2014-09.net.3mn:storage.target00 -p 192.168.124.131:3260 -l

iscsiadm -m node -P 1

#encrypt the disk if you have never encrypted it before

#eg. disk is /dev/sdb

cryptsetup luksFormat /dev/sdb

#WARNING!
#========
#This will overwrite data on /dev/sdb irrevocably.
#Are you sure? (Type uppercase yes): YES
#Enter passphrase: enter your disk password here
#Verify passphrase: again

#create plaintext mapping disk with the disk password

cryptsetup luksOpen /dev/sdb cryptdisk01

#then a blockdevice in /dev/mapper/cryptdisk01 could be found

#its status could be checked

cryptsetup status cryptdisk01

#/dev/mapper/cryptdisk01 is active.

#  type: LUKS1

#  cipher: aes-xts-plain64

#  keysize: 256 bits

#  device: /dev/sdb

#  offset: 8192 sectors

#  size: 196608 sectors

#  mode: read/write

#having created an encrypted volume and its device mapping,

#we can configure and use it in the same way as you would a physical storage device.

#you would create an entry in the /etc/fstab to mount the mapped device (/dev/mapper/cryptdisk01),

#not the physical device (/dev/sdb).

#if you wana logout the session, use:

iscsiadm -m node -T iqn.2014-09.net.3mn:storage.target00 -p 192.168.124.131:3260 -u

#——————————————————————————-

# 3. HowTo public the encrypt iSCSI disk

#targetip: 192.168.124.130

#initiatorip: 192.168.124.1

#follow section 2 (HowTo use iSCSI target as an encrypt disk)

#create disk01 with encrypted block device /dev/mapper/cryptdisk01

targetcli

cd backstores/block

create disk01 /dev/mapper/cryptdisk01

cd /iscsi/iqn.2014-09.net.3mn:storage.target00/tpg1/luns

create /backstores/block/disk01

cd ../acls/iqn.2014-09.net.3mn:morida/

delete mapped_lun=1

cd ..

create iqn.2014-09.net.3mn:morida1

cd iqn.2014-09.net.3mn:morida1

delete mapped_lun=0

set auth userid=iqn.2014-09.net.3mn:morida1

set auth password=210987654321

#create the portal

cd /iscsi/iqn.2014-09.net.3mn:storage.target00/tpg1/portals

create 192.168.124.130

#backup target config file

cp /etc/target/saveconfig.json /etc/target/disk01.json

#you can test this target using a windows initiator iqn.2014-09.net.3mn:morida1 (192.168.124.1)

 

#you can also use tgt to do step 1 and 3 when you’re using older version centos.

#eg. Step 3 with tgt

#Here we show creating another filedisk vSAN in the encrypted disk00. You can also public the block device (/dev/mapper/cryptdisk01 or /dev/dm-3) directly like what we did when using targetcli.

mkfs -t ext4 /dev/mapper/cryptdisk01

cd /iscsi_disks

mkdir disk00.ext4

mount /dev/mapper/cryptdisk01 ./disk00.ext4

dd if=/dev/zero of=/iscsi_disks/disk00.ext4/disk01.vdisk bs=1M count=1000

tgtd –iscsi portal=192.168.124.130:3260

tgtadm –lld iscsi –op delete –mode target –tid 1

tgtadm –lld iscsi –mode target –op new –tid 1 –targetname iqn.2014-09.net.3mn:storage.target01

tgtadm –lld iscsi –mode target –op bind –tid 1 –initiator-name iqn.2014-09.net.3mn:morida1

tgtadm –lld iscsi –mode logicalunit –op new –tid 1 –lun 1 –backing-store /iscsi_disks/disk00.ext4/disk01.vdisk

tgtadm –lld iscsi –mode account –op new –user iqn.2014-09.net.3mn:morida1 –password 210987654321

tgtadm –lld iscsi –mode account –op bind –tid 1 –user iqn.2014-09.net.3mn:morida1

tgtadm –lld iscsi –op new –mode portal –param portal=192.168.124.130:3260

tgtadm –lld iscsi –mode lld –op start

tgtadm –lld iscsi –mode target –op show

#Target 1: iqn.2014-09.net.3mn:storage.target01

#    System information:

#        Driver: iscsi

#        State: ready

#    I_T nexus information:

#    LUN information:

#        LUN: 0

#            Type: controller

#            SCSI ID: IET     00010000

#            SCSI SN: beaf10

#            Size: 0 MB, Block size: 1

#            Online: Yes

#            Removable media: No

#            Prevent removal: No

#            Readonly: No

#            SWP: No

#            Thin-provisioning: No

#            Backing store type: null

#            Backing store path: None

#            Backing store flags:

#        LUN: 1

#            Type: disk

#            SCSI ID: IET     00010001

#            SCSI SN: beaf11

#            Size: 1049 MB, Block size: 512

#            Online: Yes

#            Removable media: No

#            Prevent removal: No

#            Readonly: No

#            SWP: No

#            Thin-provisioning: No

#            Backing store type: rdwr

#            Backing store path: /iscsi_disks/disk00.ext4/disk01.vdisk

#            Backing store flags:

#    Account information:

#        iqn.2014-09.net.3mn:morida

#    ACL information:

#        iqn.2014-09.net.3mn:morida

 

#—————————————————————————–

#Script END

#The following is NOT content of script

 

下面简单回顾整个Demo的系统结构,并简单展示cryptsetup对iSCSI磁盘的加密效果。

vsan001

图1 Demo使用的targetcli和主要目录结构

 

vsan002-rawmbr

图2 Demo中原始虚拟磁盘镜像disk00.vdisk加密格式化后的MBR

 

vsan003-plaintextondisk

图3 用win7挂载加密后的磁盘格式化成NTFS文件系统使用

 

vsan004-rawdatasearch

图4 文本文件中的明文1234567在原始磁盘镜像中无法找出

Comment (1)

Comments are closed.