飞牛系统用了不到半年,从0.97至今还没有碰到问题,这次重新梳理了一下安全,看了很多帖子都提到用反代。确实用反代可以过滤掉99%以上的安全问题。
lucky 工具也比较好用,我记得腾讯云曾经推出过几元一年的“数字.xyz”的域名,不知道还有没有,建议大家囤一个吧。现在应该基本都有 ipv6 的公网地址了,没有的话打电话基本都能改桥接用路由拨号和开启 ipv6 的,这样只暴露一个反代端口到外网+ssl加密,基本都可以挡住99%以上的攻击了。说句实话,除非是非常明显的漏洞,黑客真的没有必要花大力气去破解一个私人的NAS的。
安全原因多方面,重点还是在个人意识。您要相信绝大多数黑客都是小白,真正的高精尖黑客没眼花心思看我们的。
所以我重点说说用密钥登录ssh,把这个加固一下吧,实际上老是在飞牛界面开关ssh也很麻烦的。
密钥登录
1、生成密钥
以下直接用飞牛系统生成为例
ssh登录飞牛系统
ssh-keygen -t ed25519 -C "my-key-$(date +%Y%m%d)"
2、打印密钥查看
# 查看公钥
cat .ssh/id_ed25519.pub
# 查看私钥
cat .ssh/id_ed25519
3、设置登录公钥
# 创建公钥
cp .ssh/id_ed25519.pub .ssh/authorized_keys
# 设置权限
sudu chmod 600 .ssh/authorized_keys
4、迁移并下载私钥
这个密钥一定不要泄露啊,这就等于大门钥匙。
# 迁移
sudu mv .ssh/id_ed25519 /目标路径
# 迁移完成后下载到本地,服务器自己决定是否保留。
拷贝公钥到其他服务器
1、 适用于一个私钥管理多台服务器(家用没区别)
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@hostname
2、 如果客户端不支持ssh-copy-id可用脚本创建
#!/bin/bash
# 添加公钥并设置正确权限
USERNAME="你的用户名"
PUBKEY="ssh-ed25519 AAAAC3... your-key"
# 创建.ssh目录(如果不存在)
mkdir -p /home/$USERNAME/.ssh
# 添加公钥
echo "$PUBKEY" >> /home/$USERNAME/.ssh/authorized_keys
# 设置正确权限
chmod 700 /home/$USERNAME/.ssh
chmod 600 /home/$USERNAME/.ssh/authorized_keys
chown -R $USERNAME:$USERNAME /home/$USERNAME/.ssh
# 验证
ls -la /home/$USERNAME/.ssh/
5、用 ssh 客户端改为密钥登录是否成功(客户端会提示您上传私钥),成功后设置sshd_config
设置 ssh 用密钥登录
openwrt
# 禁用密码登录
登录 openwrt
系统 → 管理权 → SSH 访问 → 关闭"密码验证"和"允许 root 用户凭密码登录"
fnos
# 1、备份原配置
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
# 2、编辑配置
sudo nano /etc/ssh/sshd_config
# 3、修改以下行:
Port 2222 # 改端口。可以不做,反正外网都需要转发
PubkeyAuthentication yes # 开启密钥认证
AuthorizedKeysFile .ssh/authorized_keys # 公钥路径
PasswordAuthentication no # 禁用密码登录
ChallengeResponseAuthentication no # 禁用挑战-响应
PermitRootLogin no # 如果不用root的话写"no",或要求用密钥登录"without-password"
AuthenticationMethods publickey # 认证方式,有publickey(密钥)、password(密码)等多种认证方式,且可以组合。
# 4、重启SSH
sudo systemctl restart sshd
# 有问题恢复
sudo cp /etc/ssh/sshd_config.backup /etc/ssh/sshd_config
sudo systemctl restart sshd
查看实际生效的配置
sshd -T | grep -i authentication
我的配置
# PermitRootLogin 设置如下:
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
PermitRootLogin without-password
AuthenticationMethods publickey
# 重启SSH
sudo systemctl restart sshd
改为密钥认证后,有很多用法,如多服务器之间定时用 rsync 同步等等,安全又方便。