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 nfs4、klist
2)搭建SMB3加密共享:
- 目标:客户端使用 seal,sign 挂载
- 验证:smbstatus 查看会话与加密状态
3)iSCSI双向CHAP:
- 目标:客户端登录成功并格式化挂载
- 验证:lsblk、iscsiadm -m session
4)性能基线测试:
- 目标:记录NFS与SMB在4K随机读下的IOPS
- 验证:保存 fio 输出并建立对比表
5)故障模拟:
- 断开存储网络VLAN,观察客户端重试与日志
- 恢复后验证 hard 挂载是否自动恢复