007.iSCSI伺服器CHAP雙向認證配置

木二發表於2022-03-31

一 iSCSI和CHAP介紹

1.1 iSCSI 磁碟

  • iSCSI後端儲存支援多種裝置型別,主要有:
  • 檔案
  • 單一分割槽(partition)
  1. 磁碟
  2. 陣列
  3. RAID
  4. LVM
本手冊建議以裸磁碟vdb作為示例,其他型別配置參考《002.iSCSI服務端多型別配置》。
同時本手冊基於生產環境安全考慮,結合CHAP進行配置認證。

1.2 CHAP介紹

基於IP的認證比較粗糙,對於安全性要求高的環境來說,使用CHAP認證其安全性更有保障。
CHAP(Challenge-Handshake Authentication Protocol),稱為挑戰式握手認證協議,它是雙向認證,當然也支援單向認證。
對於iscsi而言,在CHAP認證的機制上有兩種方式:initiator authentication和target authentication。

1.2.1 initiator authentication認證

在initiator嘗試連線到一個target的時候,initator需要提供一個使用者名稱和密碼給target被target進行認證。
也就是說initiator需要被target認證,它向target端提供的賬號和密碼是target端指定的。
 
這個賬號和密碼對於target來說是流入的賬號和密碼,用incoming表示。
稱呼這個賬號和密碼為:incoming賬號和incoming密碼。
即,incoming賬號是initiator端提供給target端,被target端認證的賬號。

1.2.2 target authentication認證

在initiator嘗試連線到一個target的時候,target有時也需要被initiator認證,以確保該target是合法而非偽裝的target,這就要求target提供一個使用者名稱和密碼給initiator被initiator進行認證。
target向initiator提供的賬號和密碼對於target而言是流出的,所以稱之為outgoing。
稱呼這個賬號和密碼為:outgoing賬號和outgoing密碼。
而對於initiator而言是incoming的,所以在initiator配置檔案中稱為in。
也就是說outgoing賬號是target端提供給initiator端,被initiator認證的賬號,但儘管如此,這個賬號和密碼還是在target端建立和繫結的。

1.2.3 單/雙向認證

兩種認證方式是有層次順序的。
一般來說,有認證需求的時候都是伺服器驗證客戶端是否有許可權,iscsi也一樣。
initiator authentication可以單獨存在,它可以在沒有target authentication的情況下應用,這時候的CHAP認證就是單向認證(target認證initiator的合法性)。
但target authentication只有在initiator authentication的基礎上才能進行。也就是說target認證和initiator認證必須同時存在才可以。即initiator和target需要相互認證實現雙向CHAP認證。
注意:發現認證和登入認證都支援單/雙向認證。

二 iSCSI建立步驟

  1. 建立用於共享的磁碟
  2. 建立後備磁碟
  3. 建立相應的IQN
  4. 建立相應的規則
  5. 為後備磁碟建立LUN
  6. 建立雙向認證賬號和密碼
  7. 指定偵聽的IP和埠
  8. 檢查並儲存配置
  9. 防火牆規則開放
  10. 服務(開機)啟動

三 前置準備

3.1 環境準備

 
主機名
IP
備註
iscsi
172.24.8.72
iSCSI伺服器
client
172.24.8.71
iSCSI客戶端

3.2 檢視裸磁碟

[root@iscsi ~]# fdisk -l

Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 sectors

四 建立後備儲存

4.1 安裝相關軟體

[root@iscsi ~]# yum -y install targetcli

4.2 互動設定

[root@system1 ~]# targetcli	                                                 #進入targetcli互動配置檢視
 
  • block:定義的塊裝置,磁碟驅動器、磁碟分割槽、LVM等
  • fileio:建立的指定大小的檔案,如dd if=/dev/zero of=……所建立
  • pscsi:物理SCSI,通常不採用此型別
  • ramdisk:在記憶體中建立的一個指定大小ramdisk裝置
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
 
/> /backstores/block create block1 /dev/sdb                              #將裸磁碟建立為後備盤
/> /iscsi create wwn=iqn.2022-11.com.imxhy:disk01 #建立符合名稱的IQN
/> /iscsi/iqn.2022-11.com.imxhy:disk01/tpg1/luns create /backstores/block/block1        #將建立的後備磁碟block1建立一個LUN
/> /iscsi/iqn.2022-11.com.imxhy:disk01/tpg1/acls create iqn.2021-11.com.imxhy:client      #只允許配置iqn.2021-11.com.imxhy:client的key才能使用此iSCSI提供的磁碟服務
/> /iscsi/iqn.2021-11.com.imxhy:disk01/tpg1/portals/ delete 0.0.0.0 3260                     #刪除預設的全部偵聽
/> /iscsi/iqn.2022-11.com.imxhy:disk01/tpg1/portals/ create 172.24.8.72 3260                 #指定本地用於偵聽客戶端連線的IP
 
/> /iscsi/ set discovery_auth enable=1 userid=discover password=discoverps                   #選配,本實驗增加discovery的認證
/> /iscsi/ get discovery_auth
DISCOVERY_AUTH CONFIG GROUP
===========================
enable=True
-----------
The enable discovery_auth parameter.
 
mutual_password=
----------------
The mutual_password discovery_auth parameter.
 
mutual_userid=
--------------
The mutual_userid discovery_auth parameter.
 
password=discoverps
-------------------
The password discovery_auth parameter.
 
userid=discover
---------------
The userid discovery_auth parameter.
 
/> /iscsi/iqn.2022-11.com.imxhy:disk01/tpg1/acls/iqn.2021-11.com.imxhy:client/ set auth userid=user01 password=u1pass mutual_userid=muser01 mutual_password=m1pass
/> /iscsi/iqn.2022-11.com.imxhy:disk01/tpg1/acls/iqn.2021-11.com.imxhy:client/ get auth       #檢視配置
AUTH CONFIG GROUP
=================
mutual_password=m1pass
----------------------
The mutual_password auth parameter.
 
mutual_userid=muser01
---------------------
The mutual_userid auth parameter.
 
password=u1pass
---------------
The password auth parameter.
 
userid=user01
-------------
The userid auth parameter.
 
/> ls /
o- / ......................................................................................................................... [...]
o- backstores .............................................................................................................. [...]
| o- block .................................................................................................. [Storage Objects: 1]
| | o- block1 ........................................................................... [/dev/sdb (1.0GiB) write-thru activated]
| | o- alua ................................................................................................... [ALUA Groups: 1]
| | o- default_tg_pt_gp ....................................................................... [ALUA state: Active/optimized]
| o- fileio ................................................................................................. [Storage Objects: 0]
| o- pscsi .................................................................................................. [Storage Objects: 0]
| o- ramdisk ................................................................................................ [Storage Objects: 0]
o- iscsi ........................................................................................... [1-way disc auth, Targets: 1]
| o- iqn.2022-11.com.imxhy:disk01 ...................................................................................... [TPGs: 1]
| o- tpg1 ............................................................................................... [no-gen-acls, no-auth]
| o- acls .......................................................................................................... [ACLs: 1]
| | o- iqn.2021-11.com.imxhy:client ......................................................................... [Mapped LUNs: 1]
| | o- mapped_lun0 ................................................................................ [lun0 block/block1 (rw)]
| o- luns .......................................................................................................... [LUNs: 1]
| | o- lun0 ..................................................................... [block/block1 (/dev/sdb) (default_tg_pt_gp)]
| o- portals .................................................................................................... [Portals: 1]
| o- 172.24.8.72:3260 ................................................................................................. [OK]
o- loopback ......................................................................................................... [Targets: 0]
 
/> exit

提示:如上操作:

1:建立的ACL將分配到每個LUN。

2:建立LUN必須在TPG下。

3:若不指定埠將採用預設埠3260

4:若不指定IP,將允許伺服器上定義的所有網路介面上的連線

5:建立LUN必須在TPG下

五 防火牆開放

[root@iscsi ~]# firewall-cmd --add-port=3260/tcp --permanent                  #防火牆新增iSCSI的埠
[root@iscsi ~]# firewall-cmd --add-service=iscsi-target --permanent              #防火牆放通iSCSI target服務
[root@iscsi ~]# firewall-cmd --reload

六 開啟服務

[root@iscsi ~]# systemctl enable target --now

七 客戶端配置

[root@client ~]# yum -y install iscsi-initiator-utils                             #安裝客戶端
[root@client ~]# vim /etc/iscsi/initiatorname.iscsi                              #配置CHAP認證
InitiatorName=iqn.2021-11.com.imxhy:client

[root@client ~]# vim /etc/iscsi/iscsid.conf
……
node.session.auth.authmethod = CHAP
node.session.auth.username = user01
node.session.auth.password = u1pass
node.session.auth.username_in = muser01
node.session.auth.password_in = m1pass
discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = discover
discovery.sendtargets.auth.password = discoverps
……

[root@client ~]# systemctl restart iscsid

八 客戶端登入

8.1 發現目標

[root@client ~]# iscsiadm -m discovery -t sendtargets -p 172.24.8.72                        #發現目標
172.24.8.72:3260,1 iqn.2022-11.com.imxhy:disk01

8.2 登入目標

[root@client ~]# iscsiadm -m node -T iqn.2022-11.com.imxhy:disk01 -p 172.24.8.72 -l            #登入目標

8.3 查詢資訊

[root@client ~]# iscsiadm -m session -o show
tcp: [23] 172.24.8.72:3260,1 iqn.2022-11.com.imxhy:disk01 (non-flash)
[root@client ~]# iscsiadm -m session -P 3        #查詢資訊
iSCSI Transport Class version 2.0-870
version 6.2.0.874-22
Target: iqn.2022-11.com.imxhy:disk01 (non-flash)
        Current Portal: 172.24.8.72:3260,1
        Persistent Portal: 172.24.8.72:3260,1
                **********
                Interface:
                **********
                Iface Name: default
                Iface Transport: tcp
                Iface Initiatorname: iqn.2021-11.com.imxhy:client
                Iface IPaddress: 172.24.8.71
                Iface HWaddress: <empty>
                Iface Netdev: <empty>
                SID: 1
                iSCSI Connection State: LOGGED IN
                iSCSI Session State: LOGGED_IN
                Internal iscsid Session State: NO CHANGE
                *********
                Timeouts:
                *********
                Recovery Timeout: 120
                Target Reset Timeout: 30
                LUN Reset Timeout: 30
                Abort Timeout: 15
                *****
                CHAP:
                *****
                username: user01
                password: ********
                username_in: muser01
                password_in: ********
                ************************
                Negotiated iSCSI params:
                ************************
                HeaderDigest: None
                DataDigest: None
                MaxRecvDataSegmentLength: 262144
                MaxXmitDataSegmentLength: 262144
                FirstBurstLength: 65536
                MaxBurstLength: 262144
                ImmediateData: Yes
                InitialR2T: Yes
                MaxOutstandingR2T: 1
                ************************
                Attached SCSI devices:
                ************************
                Host Number: 3  State: running
                scsi3 Channel 00 Id 0 Lun: 0
                        Attached scsi disk sdb          State: running

[root@client ~]# iscsiadm -m node -o show
# BEGIN RECORD 6.2.0.874-22
node.name = iqn.2022-11.com.imxhy:disk01
node.tpgt = 1
node.startup = automatic
……
iface.transport_name = tcp
……
node.discovery_address = 172.24.8.72
node.discovery_port = 3260
node.discovery_type = send_targets
node.session.initial_cmdsn = 0
node.session.initial_login_retry_max = 8
node.session.xmit_thread_priority = -20
node.session.cmds_max = 128
node.session.queue_depth = 32
node.session.nr_sessions = 1
node.session.auth.authmethod = CHAP
node.session.auth.username = user01
node.session.auth.password = ********
node.session.auth.username_in = muser01
node.session.auth.password_in = ********
……
node.session.scan = auto
node.conn[0].address = 172.24.8.72
node.conn[0].port = 3260
……

# END RECORD

[root@client ~]# fdisk -l                #發現的iSCSI伺服器三個共享

九 格式化並掛載

9.1 格式化並掛載

注意:

1:此時能當做本地磁碟使用,分割槽格式化等操作;

2:可使用RAID或LVM來進行操作,LVM的可在之後格式化LV。

 

[root@client ~]# mkfs.ext4 /dev/sdb                 #格式化相關iSCSI磁碟
[root@client ~]# mkdir -p /iscsdisk/sdb01            #建立用於掛載sdd磁碟的掛載點        
[root@client ~]# mkdir -p /iscsdisk/lv01             #建立用於掛載LVM分割槽的掛載點
[root@client ~]# mount /dev/sdb /iscsdisk/sdb01/      #可直接掛載
[root@client ~]# vi /etc/fstab                      #自動掛載
……
/dev/sdb /iscsdisk/lv01    ext4    defaults    0 0

 

相關文章