安全使用 Linux 服务器
为了打造安全的系统,我们需要考虑的东西有方方面面。本文介绍了一份安全检查的清单。
- 访问控制列表 (ACLs): 系统架构必须按组和角色授权访问系统的不同部分。Linux 相关的命令:acl
- 系统审计:用户登录机器,必须能够做到审计用户执行的所有命令。Linux 相关命令:auditd / go-audit
- 静态分析:内存安全要用工具来保障,代码要审计,静态分析,甚至被 fuzzed。可以用各种静态分析的工具来做,甚至用 Rust 这种语言写。
- 网络分区:服务器妥善地放在负载均衡后面。如果网络挂掉或者没有路由,这些主机应该可以存活。配置 VPN,给机器配置内网和公网地址。iptables, ufw.
- Compartmentalization: 让员工将他们的电脑去分开工作和非工作的部分。工具可以是虚拟机:Qubes / VirtualBox.
- 文件权限和 umask: 妥善设置好每个配置文件的 r, w, x.
- 容器:确认谁有权限构建和推送镜像到生产环境。这些要被签名,验证,为安全补丁和 CVEs 做监控。
- Utilizing threat intelligence:订阅 Thread Intelligence。对于一些邪恶混乱的 IP,主动封禁。 Github hslatman/awesome-threat-intelligence
- 防火墙 / packet 过滤器:审计防火墙规则,跑测试脚本,确保机器只和需要通信的机器通信。工具:pfSense, OPNsense.
- DNS:锁定 DNS 变更。变更时得到通知。启动 DNSSEC。Namecheap 适合注册,Cloudflare 适合做 DNS。
- 物理访问:如果数据中心里有人偷偷看,会看到服务器上的东西么?服务器退休,数据会被抹干净么?
- deterministic builds:Gitian
- 使用数字签名:GnuPG
- 程序跑在 sandbox 里面,无法得到外部的系统调用和权限访问。
- 传输层加密:TLS,可以用 Let‘s Encrypt。不用诸如 MD5,SHA1,RC4 等不再安全的算法,而应该用更安全的 ciphers,HMACs 以及更合适的 key exchange 算法。使用椭圆曲线,不使用 RSA。调整 OpenSSH,GnuPG,OpenVPN 的配置,因为默认的都不够安全。
- Key / Secrets 管理。服务器上的 Key 可以用 GPGSync,sops,Vault 管理。版本控制里面千万别有密钥。
- HTTP 的 Security Headers:X-Frame-Options,X-XSS-Protection 等等
- 用工具确保文件没有被篡改过,并会就变更生成告警。
- 升级内核,堵住诸如 Spectre 和 Meltdown 这样漏洞。
- 如果一些设备没有用上,那么内核中那些 modules 就关掉。
- 分析系统日志。使用 Filebeat / rsyslog / Logstash 这样的工具。
- 资源使用量监控:Metricbeat,Prometheus,Nagios,Osquery
- 测试架构:Serverspec,Testinfra
- 平台安全测试:使用 CHIPSEC 工具测试 BIOS 和其它 low-level 的接口。
- sshd:关闭 root login,使用 key 登录,防止 brute force 登录。换一个监听端口迟早还会被扫出来。将 sshd 藏在 vpn 后面,或者通过 Tor hidden service 授权,或者需要 port-knocking
- Nginx server_tokens off, Apache ServerSignature off。尽可能少地泄漏版本信息。
- 二步验证:YubiKey。
- Quad9 提供了 Google public DNS / OpenDNS 的替代方案,但是可以帮忙挡掉访问有害域名。可以将 nameserver 设置成 9.9.9.9, 相当于 Chrome Safe Browsing,但是是在 DNS 这一层做。
- 审计可信任的组织:根证书及时更新,移除掉过期的第三方。
- Git commits 用 GPG 做签名。