1. 初始准备与风险评估
在对VPS做任何加固前,先备份当前配置与数据(snapshot 或 rsync 到别的存储)。记录当前开放端口:运行 ss -tuln 和 sudo netstat -tulnp(若安装)。确认VPS用途(拨号、SIP、中继、SSH管理等),标注必须保留的服务端口和可以关闭的服务。准备好一个可用的替代远程通道(如云控制台或VNC)以防误操作锁死SSH。
2. SSH 基本加固(逐步操作)
编辑 /etc/ssh/sshd_config,按顺序改动并保存:Change Port(例如 22 -> 22022):Port 22022;禁止root登录:PermitRootLogin no;只允许密钥登录:PasswordAuthentication no;限制用户:AllowUsers 管理员用户名;开启登录Banner可选。保存后重启:sudo systemctl restart sshd。先别关闭当前会话,先在新终端用新端口测试连通性:ssh -p 22022 user@ip。
3. 部署公钥认证与密钥管理
生成密钥对:ssh-keygen -t ed25519 -C "your@id";将公钥追加到 /home/user/.ssh/authorized_keys,chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys。若需要多客户端,使用 ssh-copy-id -p 22022 user@ip。禁用PasswordAuthentication后若需紧急回滚,需保留控制台访问或临时开启密码登录。
4. 防火墙与端口白名单(UFW 示例)
若使用 Ubuntu,可用 UFW:sudo apt update && sudo apt install ufw。先允许控制台与必要端口:sudo ufw allow 22022/tcp;允许拨号或SIP端口(例如 5060/udp):sudo ufw allow 5060/udp。最好只允许台湾管理IP访问SSH:sudo ufw allow from 203.74.0.0/16 to any port 22022 proto tcp(替换为实际IP或网段)。启用:sudo ufw enable。使用 sudo ufw status numbered 检查规则。
5. 使用 ipset 对台湾IP白名单(按网段批量)
安装 ipset:sudo apt install ipset。创建集合并导入台湾CIDR列表(可从 ipdeny 或 APNIC 获取):sudo ipset create TW hash:net;将列表写入 /etc/ipset/tw.lst,然后用下面方式加载:for cidr in $(cat /etc/ipset/tw.lst); do sudo ipset add TW $cidr; done。配合 iptables:sudo iptables -I INPUT -m set --match-set TW src -p tcp --dport 22022 -j ACCEPT;再加默认拒绝其他SSH流量。保存 iptables 规则(iptables-persistent)并写入 ipset 保存脚本到启动项。
6. Fail2Ban 与登录保护
安装:sudo apt install fail2ban。为 SSH 创建 jail 文件 /etc/fail2ban/jail.d/sshd.local 内容例:[sshd] enabled = true port = 22022 filter = sshd maxretry = 5 bantime = 3600 findtime = 600。重启 fail2ban:sudo systemctl restart fail2ban。验证:sudo fail2ban-client status sshd。可结合 ipset 把被ban的IP加入到一个黑名单集合,减少频繁 iptables 修改。
7. 端口管理与最小暴露原则
用 systemctl 禁用不必要服务:sudo systemctl disable --now servicename(如 avahi-daemon、cups)。查看所有监听:ss -tuln。对必须服务使用 bind 地址限制:在服务配置中设置仅监听 127.0.0.1 或指定内网IP;对外暴露的端口必须有明确用途,日志与限速。
8. 使用 VPN(WireGuard)作为管理通道
安装 WireGuard(Ubuntu):sudo apt install wireguard。生成密钥对 wg genkey | tee privatekey | wg pubkey > publickey。在服务器 /etc/wireguard/wg0.conf 示例:[Interface] Address = 10.0.0.1/24 ListenPort = 51820 PrivateKey =
;为管理员添加 Peer 段。启用:sudo systemctl enable --now wg-quick@wg0。设置 UFW 规则仅允许来自 WireGuard 网段访问 SSH:sudo ufw allow from 10.0.0.0/24 to any port 22022。这种方式能把管理通道完全移入加密私网,极大缩小攻击面。
9. 日志、监控与自动化更新
启用集中日志与告警:安装 fail2ban、logwatch,配置 rsyslog 将重要日志发送到远程日志服务器(或第三方)。启用 unattended-upgrades:sudo apt install unattended-upgrades && sudo dpkg-reconfigure --priority=low unattended-upgrades,设置内核与安全更新自动安装。定期备份 /etc、/var/log、数据库,并做恢复演练。
10. 高级技巧:端口敲击与速率限制
部署 port knocking(如 knockd)或使用 fwknop(Single Packet Authorization)隐藏管理端口;使用 tc 或 connlimit 模块对端口并发连接数做限制:sudo iptables -A INPUT -p tcp --dport 5060 -m connlimit --connlimit-above 50 -j REJECT。对SIP等协议加SIP ALG或专门SBC设备进行会话控制,避免直接暴露。
11. 恢复与应急操作步骤
若误封或丢失密钥:通过云服务商控制台挂载救援盘或进入单用户模式,恢复 /home/user/.ssh/authorized_keys 或修改 /etc/ssh/sshd_config。建议保留两套管理员公钥,设置时间锁和二级验证(2FA)以降低人为风险。
12. 常见问:如果更改SSH端口后无法连接怎么办?
问:我改了 SSH 端口并重启后连不上,如何恢复? 答:不要关闭当前会话;若已断开,使用云控制台(VPS 提供商)登录或者开启救援模式;在救援环境中编辑 /etc/ssh/sshd_config 恢复端口、或将PasswordAuthentication临时设为yes、恢复root登录后重启ssh并再次修正配置并测试后再锁定。
13. 常见问:如何在台湾多变IP环境下管理白名单?
问:台湾拨号或移动IP变化频繁,如何管理白名单? 答:使用动态客户端(动态DNS)或部署 WireGuard 让管理员设备持久连接;若必须按IP白名单,可用 ipset 配合定时脚本从可靠来源更新台湾网段列表,或只允许云控制台与 WireGuard 网段访问管理端口。
14. 常见问:拨号VPS做SIP业务还有哪些额外注意?
问:我的VPS用于拨号/SIP,除了端口管理还应注意什么? 答:必须启用SBC或限制并发呼叫数、对 RTP 端口段做最小暴露并使用SRTP/TLS加密信令,配置NAT与ALG谨慎,监控呼叫异常流量并把SIP、RTP日志上报,用防火墙规则防止滥拨与拒绝服务攻击。
来源:稳定远程策略 台湾远程拨号VPS 的安全加固与端口管理