3.9.7 网络存储安全与性能优化

本节聚焦网络存储在多协议、多节点环境下的安全与性能优化,围绕访问控制、认证加密、网络隔离、日志审计与性能调优展开,并给出可执行命令、配置示例、排错流程与练习。

原理草图(安全与性能关键链路)

文章图片

一、安装与安全配置示例
1)NFSv4 + Kerberos(示例:基于口令的安全认证)

# 安装
sudo yum install -y nfs-utils krb5-server krb5-workstation

# 配置KDC(仅示例,实际需规划REALM与DNS)
sudo kdb5_util create -s -r EXAMPLE.COM
sudo systemctl enable --now krb5kdc kadmin

# 生成服务端主体与keytab
sudo kadmin.local -q "addprinc -randkey nfs/storage01.example.com"
sudo kadmin.local -q "ktadd -k /etc/krb5.keytab nfs/storage01.example.com"

# NFS导出(/etc/exports)
/srv/nfs/share 10.10.10.0/24(rw,sec=krb5p,fsid=0,no_subtree_check)

# 启动NFS
sudo systemctl enable --now nfs-server
sudo exportfs -rav

# 客户端挂载(需先kinit)
kinit user01@EXAMPLE.COM
sudo mount -t nfs4 -o sec=krb5p storage01.example.com:/ /mnt/nfs

命令解释:
- sec=krb5p:Kerberos认证 + 完整性 + 加密
- fsid=0:NFSv4 伪根导出
- exportfs -rav:重新导出并验证配置

2)SMB3 强认证与签名(Samba)

# 安装
sudo yum install -y samba samba-client

# /etc/samba/smb.conf
[global]
   security = user
   server min protocol = SMB3
   server signing = mandatory
   smb encrypt = required
   map to guest = never

[share]
   path = /srv/samba/share
   read only = no
   valid users = ops
   create mask = 0660
   directory mask = 0770

# 创建用户并启用
sudo useradd ops
sudo smbpasswd -a ops
sudo systemctl enable --now smb

客户端挂载示例:

sudo mount -t cifs //storage01/share /mnt/smb \
  -o username=ops,vers=3.0,seal,sign

命令解释:
- seal:强制加密
- sign:强制签名

3)iSCSI CHAP 双向认证

# 安装target与initiator
sudo yum install -y targetcli iscsi-initiator-utils

# target配置(示例)
sudo targetcli <<'EOF'
/backstores/block create disk01 /dev/sdb
/iscsi create iqn.2024-01.com.example:storage01
/iscsi/iqn.2024-01.com.example:storage01/tpg1/luns create /backstores/block/disk01
/iscsi/iqn.2024-01.com.example:storage01/tpg1/acls create iqn.2024-01.com.example:client01
/iscsi/iqn.2024-01.com.example:storage01/tpg1 set attribute authentication=1
/iscsi/iqn.2024-01.com.example:storage01/tpg1 set auth userid=init1
/iscsi/iqn.2024-01.com.example:storage01/tpg1 set auth password=InitPass#1
/iscsi/iqn.2024-01.com.example:storage01/tpg1 set auth mutual_userid=target1
/iscsi/iqn.2024-01.com.example:storage01/tpg1 set auth mutual_password=TargetPass#1
/saveconfig
EOF

# initiator配置(/etc/iscsi/iscsid.conf)
node.session.auth.authmethod = CHAP
node.session.auth.username = init1
node.session.auth.password = InitPass#1
node.session.auth.username_in = target1
node.session.auth.password_in = TargetPass#1

# 发现与登录
sudo iscsiadm -m discovery -t sendtargets -p 10.10.10.10
sudo iscsiadm -m node --login

二、网络隔离与审计
隔离建议:存储网络走独立VLAN或专用交换机,业务网仅开放必要端口。
审计示例(NFS服务端开启日志与审计):

# 开启RPC统计与NFS统计
sudo nfsstat -s
sudo rpcinfo -p

# rsyslog集中日志(/etc/rsyslog.d/50-nfs.conf)
if $programname == 'rpc.mountd' then @@10.10.20.10:514
if $programname == 'nfsd' then @@10.10.20.10:514

三、性能优化与调优示例
1)网络层优化(RSS/多队列/巨帧)

# 查看网卡队列
ethtool -l eth0
# 设置通道数(根据网卡支持)
sudo ethtool -L eth0 combined 8

# 开启巨帧(交换机需同步配置)
sudo ip link set dev eth0 mtu 9000

2)NFS客户端挂载优化

sudo mount -t nfs4 storage01:/ /mnt/nfs \
  -o rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,proto=tcp

参数说明:
- rsize/wsize:读写块大小
- hard:服务不可达时重试避免数据损坏
- timeo/retrans:超时与重试

3)Samba 服务端性能调优

# /etc/samba/smb.conf 示例
[global]
   aio read size = 1
   aio write size = 1
   socket options = TCP_NODELAY SO_RCVBUF=262144 SO_SNDBUF=262144
   min receivefile size = 16384

4)iSCSI 队列与块设备调优

# 查看设备队列深度
cat /sys/block/sdb/device/queue_depth

# 临时调整队列深度(需硬件支持)
echo 64 | sudo tee /sys/block/sdb/device/queue_depth

# 调整IO调度器(SSD建议mq-deadline)
echo mq-deadline | sudo tee /sys/block/sdb/queue/scheduler

5)基准测试示例(建立性能基线)

# fio 测试NFS挂载
fio --name=nfs-randread --directory=/mnt/nfs \
  --rw=randread --bs=4k --iodepth=64 --numjobs=4 --size=2G --runtime=60 --time_based

# iperf3 测试网络吞吐
iperf3 -s   # 服务端
iperf3 -c 10.10.10.10 -P 4 -t 30

四、排错与诊断流程(示例)
1)NFS 挂载失败

# 检查导出
showmount -e storage01

# 服务端状态
systemctl status nfs-server
rpcinfo -p storage01

# 客户端日志
journalctl -u nfs-client.target -xe

2)SMB 权限拒绝

# 检查用户与权限
pdbedit -L
getfacl /srv/samba/share

# 客户端协议与认证
smbclient -L //storage01 -U ops -m SMB3

3)iSCSI 登录失败

# 发现目标
iscsiadm -m discovery -t sendtargets -p 10.10.10.10

# 查看会话
iscsiadm -m session

# 检查CHAP配置
grep -E 'auth' /etc/iscsi/iscsid.conf

五、实战练习
1)配置NFSv4 + Kerberos:
- 目标:客户端以 sec=krb5p 成功挂载并读写
- 验证:mount | grep nfs4klist

2)搭建SMB3加密共享:
- 目标:客户端使用 seal,sign 挂载
- 验证:smbstatus 查看会话与加密状态

3)iSCSI双向CHAP:
- 目标:客户端登录成功并格式化挂载
- 验证:lsblkiscsiadm -m session

4)性能基线测试:
- 目标:记录NFS与SMB在4K随机读下的IOPS
- 验证:保存 fio 输出并建立对比表

5)故障模拟:
- 断开存储网络VLAN,观察客户端重试与日志
- 恢复后验证 hard 挂载是否自动恢复