1. 初始准备与环境确认
- 登录方式:建议先使用控制面板 Console 或已知安全 IP 的 SSH 连接。
- 检查系统版本:lsb_release -a(Debian/Ubuntu)或 cat /etc/os-release(CentOS)以决定用哪些包管理器。
- 更新系统:Debian/Ubuntu: sudo apt update && sudo apt upgrade -y;CentOS: sudo yum update -y 或 dnf update -y。完成后重启:sudo reboot(如内核更新)。
2. 创建非root管理用户并配置sudo
- 新建用户并设置密码:sudo adduser adminuser(按提示)或 sudo useradd -m -s /bin/bash adminuser && sudo passwd adminuser。
- 将用户加入sudo/ wheel:Debian/Ubuntu: sudo usermod -aG sudo adminuser;CentOS: sudo usermod -aG wheel adminuser。
- 测试切换:su - adminuser,然后 sudo -l 确认权限。随后避免直接用 root 登录。
3. SSH 基本加固(编辑 /etc/ssh/sshd_config)
- 备份配置:sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak。
- 必改项(示例):Port 2222(修改默认22端口);PermitRootLogin no;PasswordAuthentication no(先确保密钥可用再设为no);PubkeyAuthentication yes;UseDNS no;ClientAliveInterval 300;ClientAliveCountMax 2。
- 重启 SSH:sudo systemctl restart sshd(Ubuntu/Debian 有时为 ssh)。若远程操作,先开新终端验证新端口/密钥可用,再关闭旧会话。
4. 配置 SSH 密钥登录与权限
- 在本地生成密钥:ssh-keygen -t ed25519 -C "your@host",无密码或设置密码短语。
- 上传公钥:ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 adminuser@your_vps_ip 或手动将公钥追加到远程 ~/.ssh/authorized_keys 并设置权限:chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys && chown -R adminuser:adminuser ~/.ssh。
- 如果需要限制命令或来源,可以在 authorized_keys 前面加 options(慎用)。
5. 防火墙:使用 ufw(Debian/Ubuntu 简单方案)
- 安装并启用:sudo apt install ufw -y;sudo ufw default deny incoming;sudo ufw default allow outgoing。
- 允许 SSH(对应端口):sudo ufw allow 2222/tcp;允许必要服务:sudo ufw allow 80/tcp;sudo ufw allow 443/tcp。
- 启用并查看状态:sudo ufw enable;sudo ufw status verbose。若使用云控制面板须先允许控制面板 IP。
6. 高级防火墙:iptables 示例规则(适用于无 firewalld 的系统)
- 清空并设置基础链:sudo iptables -F && sudo iptables -X;sudo iptables -P INPUT DROP && sudo iptables -P FORWARD DROP && sudo iptables -P OUTPUT ACCEPT。
- 允许回环与已建立连接:sudo iptables -A INPUT -i lo -j ACCEPT;sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT。
- 允许 SSH(改端口):sudo iptables -A INPUT -p tcp --dport 2222 -m conntrack --ctstate NEW -j ACCEPT。允许 HTTP/HTTPS 同理。保存规则:Debian/Ubuntu 使用 iptables-persistent:sudo apt install iptables-persistent -y && sudo netfilter-persistent save。
7. 防爆破与 Fail2Ban 配置
- 安装:sudo apt install fail2ban -y 或 sudo yum install epel-release && sudo yum install fail2ban -y。
- 基本配置文件:复制 jail.local:sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local,编辑 [sshd] 段:enabled = true;port = 2222;maxretry = 5;bantime = 3600;findtime = 600;action = iptables-multiport[name=SSH, port="2222", protocol=tcp]。
- 重启并查看状态:sudo systemctl restart fail2ban;sudo fail2ban-client status sshd。
8. 日志、审计与入侵检测
- 安装并运行 rkhunter 和 chkrootkit:sudo apt install rkhunter chkrootkit -y;sudo rkhunter --checkall。
- auditd:sudo apt install auditd -y;启动并添加关键文件监控规则(如 /etc/ssh/sshd_config)。示例规则加入 /etc/audit/rules.d/audit.rules。
- 远程日志:建议将 /var/log 通过 rsyslog/rsyslog-ng 发送到外部日志服务器,避免日志被本机破坏。
9. 内核与网络安全硬化(sysctl)
- 编辑 /etc/sysctl.conf 添加(示例):net.ipv4.ip_forward=0;net.ipv4.conf.all.rp_filter=1;net.ipv4.conf.default.rp_filter=1;net.ipv4.tcp_syncookies=1;net.ipv4.icmp_echo_ignore_broadcasts=1。
- 应用更改:sudo sysctl -p。定期检查未授权变更并把关键设置写入配置管理工具或备份。
10. SFTP 限制与服务最小化
- 如果只需 SFTP,建议使用 chroot 限制用户:在 /etc/ssh/sshd_config 添加 Subsystem sftp internal-sftp 并配置 Match Group sftpusers 后的 ChrootDirectory /home/%u,ForceCommand internal-sftp,PasswordAuthentication no(配合密钥)。
- 关闭不必要服务:使用 systemctl list-unit-files --type=service 检查并禁用不需要的服务:sudo systemctl disable --now service_name。
11. 常用维护命令与备份策略
- 快速检查端口:ss -tulnp 或 sudo netstat -tulnp。查看登录记录:last,lastb。
- 自动更新或定期补丁:设置 unattended-upgrades(Debian/Ubuntu)或使用配置管理工具(Ansible/Chef/Puppet)。
- 备份:定期备份 /etc、/home、数据库,使用 rsync + 压缩并异地存储,测试恢复流程。
12. 问:如果误锁定了 SSH(例如关闭密码且密钥未生效),我如何恢复?
答:立即使用 VPS 提供商控制面板的 Console(或 KVM/Serial 控制台)登录主机。在控制台中编辑 /etc/ssh/sshd_config 恢复 PasswordAuthentication yes 或将 authorized_keys 正确写入用户目录并修正权限,随后重启 sshd:sudo systemctl restart sshd。若无控制台,联系商家支持请求临时控制台或快照恢复。
13. 问:越南原生IP 是否有额外的地理或法律风险需要注意?
答:使用越南原生IP 本身并不直接增加技术风险,但应注意当地服务提供商的 Abuse/Whois 政策、是否开放端口策略、以及合规性问题。若对外提供服务,请确保遵守目标国家/地区法律与托管商条款,并启用基本的流量监控以防滥用导致 IP 被列黑。
14. 问:我如何验证配置是否生效并进行渗透式自检?
答:分层验证:1) SSH:尝试从新会话以密钥和修改端口登录;2) 防火墙:使用 nmap -Pn -p 1-65535 your_ip 从外部扫描确认仅开放预期端口;3) Fail2Ban:模拟多次错误登录检查是否被封;4) 日志:检查 /var/log/auth.log、/var/log/syslog、fail2ban 日志与 audit 日志;5) 可用性测试:访问网站、API 确认业务不受影响。建议定期委托第三方安全扫描并建立备份与恢复流程。
来源:越南原生ip vps安全配置实操从防火墙到SSH加固全覆盖