1. Mac也可作为生产或开发服务器,存在SSH、HTTP等服务暴露风险。
2. 未授权访问与暴力破解是最常见的入侵方式,自动化脚本每天扫描端口。
3. 加固目标包括认证方式、端口策略、速率限制与封禁策略。
4. 同时配合CDN和上游防护能显著降低DDoS与探测攻击影响。
5. 本文给出命令、pf规则、Fail2Ban配置与真实流量数据对比示例。
6. 适用于macOS 12/13/14及搭配Homebrew的环境。
1. 关闭密码登录:编辑 /etc/ssh/sshd_config,设置 PasswordAuthentication no;重启SSH。
2. 更改默认端口:将 Port 22 改为 Port 2222,并在防火墙同步放行。
3. 禁止root登录:设置 PermitRootLogin no,降低被暴力破解的风险。
4. 限制允许用户:Use AllowUsers admin user2 指定允许登录的账号。
5. 生成安全密钥:ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519,使用公钥认证。
6. 在Mac上启停SSH命令:sudo systemsetup -setremotelogin on/off。
1. macOS使用pf作为包过滤器,配置文件位于 /etc/pf.conf 或自定义文件。
2. 示例规则:使用 max-src-conn-rate 限制同源连接速率,防止暴力短时间并发。
3. 简单pf片段:table <bad> persist; block in quick from <bad> to any; pass in proto tcp to any port 2222 keep state (max-src-conn 5, max-src-conn-rate 5/30).
4. 激活规则:sudo pfctl -f /etc/pf.conf && sudo pfctl -e。
5. 可配合日常脚本将可疑IP写入pf table并持久化封禁。
6. 对HTTP可使用连接数与速率限制减轻应用层压力。
1. 使用Homebrew安装:brew install fail2ban 或 brew install sshguard(取决于偏好)。
2. Fail2Ban配置示例:/usr/local/etc/fail2ban/jail.local 中启用 sshd,设置 bantime = 86400, maxretry = 5, findtime = 600。
3. 示例 jail.local 内容:[sshd] enabled = true port = 2222 filter = sshd maxretry = 5 bantime = 86400 findtime = 600。
4. 启动并设为开机服务:brew services start fail2ban。
5. SSHGuard适合高并发环境,轻量拦截并调用pf进行封禁。
6. 定期审计被封IP列表,避免误封并导出为黑名单共享。
1. 强制使用公钥认证,禁用密码后可阻止绝大多数脚本暴力尝试。
2. 使用高强度密钥:推荐 ed25519,参数示例:ssh-keygen -t ed25519 -a 100。
3. 配置SSH只允许来自特定来源的Key:authorized_keys 可添加 from="203.0.113.0/24" 限制来源。
4. 启用基于硬件的二次认证:YubiKey/U2F 可结合 pam_u2f 实现登录第二因素。
5. 定期更换密钥与禁用不再使用的账号,结合审计日志核查不正常登录。
6. 对重要服务使用证书认证或ssh CA签发短期证书。
1. 对外服务建议放在CDN(如Cloudflare)后端,仅暴露必要端口并隐藏真实IP。
2. CDN可吸收大量DDoS流量并提供WAF、速率限制、地理封禁等功能。
3. 在DNS级别使用隐藏A记录并仅向可信节点暴露真实服务器IP。
4. 设置HTTP速率限制、机器人校验与验证码降低爬虫与暴力攻击效率。
5. 与云厂商合作使用黑洞路由或速率滤波在网络层面缓解攻击。
6. 定期演练恢复与流量突发策略,保持监控报警畅通。
1. 案例说明:某开发团队将mac mini作为Code-Server节点暴露公网,初期被脚本扫描频繁暴力破解。
2. 初始每天失败登录尝试约 1200 次,短时间内造成日志快速增长与CPU波动。
3. 采取措施:更改SSH端口至2222、启用pf规则、部署Fail2Ban并仅允许公钥登录。
4. 采取后统计:失败尝试下降至约 12 次/天,被封IP累计152个。
5. 下表为典型单节点配置与防护前后对比数据示例。
| 项 | 服务器配置 | 防护前 | 防护后 |
|---|---|---|---|
| 主机 | Mac mini (M1) / macOS 13.4 | -- | -- |
| CPU / 内存 | 8-core / 16GB | 高负载波动 | 稳定 |
| SSH端口 | 2222 | 22 被扫描 | 仅2222暴露 |
| 失败登录次数/日 | -- | 1200 | 12 |
| 被封IP数 | -- | 0 | 152 |