希望获得的帮助
- 我的计划中有没有冲突、错误、多余或者缺少的东西?
- 下面会有一些零散的问题。
- 100 元左右一个月的服务器能不能顶住那些一直运行的服务?
- 可以喷,我心大。但是请尽量不要单纯地骂,喷的话希望能给我提供点有用的信息。
开发技术栈等
- 开发语言:Go 、TS 。
- 框架:Gin 。
- 数据库:PostgreSQL 。
- 操作系统:Debian 。
- 其他:Git 、Github 、阿里云云效代码管理。项目闭源。
- IDE:VS Code 。
- 云服务:阿里云。
我看过的安全相关的书
- 《 WEB 应用安全权威指南》
- 《编程精粹》
- 《 Linux 系统安全》
在开发网站的过程中定期复习这三本书的笔记。书里的一些我感觉没什么大用,并且很麻烦的方法我没用,比如 chroot 。
安全工具和服务
静态代码分析工具:gosec 、vet 、golangci-lint 、snyk 。TS 的 lint 工具。
CF DDoS 防护、CF Tunnel 。
- Coraza:WAF 。
- Snort 3:入侵防御。据说有入侵检测功能。
- auditd:安全审计。
- Kali Linux:我打算至少把桌面的工具都用上,自己干自己。开发电脑意思意思,服务器端使劲干。
- Caldera 和 Atomic Red Team:通过这两个练习被入侵后的应急操作。不知道会不会完全没头绪。
- sxid:监控 SUID 和 SGID 的改变。每天自动运行一次。改变就报警。
- ClamAV:每星期运行一次。
安全措施
应用开发注意事项。注入、XSS 、CSRF 之类的。太多了,懒得写了。嘴替:OWASP Top Ten 和 CWE top 25 。
写单元测试。
为各种服务提供最小的权限。
七天检查一次服务器和软件包更新。包括用 snyk 扫描一次代码,就算代码没更新,这个好像能发现用到的库的新发现的漏洞?
用 iptables 只开放必要的端口。基本只会开放 https 的端口的建立连接。数据包发出只允许系统和软件更新还有就是相关的入侵防御的规则的自动更新等。
网关 IP 地址绑定 MAC ,防止 ARP 攻击。使用 CF Tunnel 这步是不是多余了?
命令历史相关的环境变量设置为只读。命令历史附带执行时间。
删除无用的软件包和服务。
不使用隐藏的方式企图实现安全。比如改端口。
每月完整备份数据库。每天增量备份数据库。数据库中的密码 hash 和邮箱使用混合加密加密后备份到 OSS ,私钥保存在我电脑中的 KeePass 里。KeePass 数据库文件保存在 OneDrive 同步文件夹里。OneDrive 同步文件夹每月多处备份。不给 OSS API 分配修改和删除权限。对数据库的密码 hash 和邮箱添加数据库加密,就是数据库的数据文件泄露也无法读取的那种加密。我计划网站的上的所有数据都可以像维基那样打包下载。用户不想公开的数据保存在用户的浏览器或本地文件夹里。
入侵报警使用阿里云的云监控。
阿里云网页控制台使用自己生成的带密码的密钥对登录。私钥密码保存在 Keepass 里。
关键日志备份到阿里云的日志服务上。并设置好 API 的权限。主要是为了省钱,像书里那样用一个专门的服务器收集日志我感觉太贵了。
auditd 配置为锁定配置直到重启。
FireEye 辅助入侵检测和防御。我没在官网上找到怎么用。是个提供威胁情报数据的网站。
注意开发电脑的安全性。不安装来历不明的软件。来历不明的软件装到虚拟机里。不关闭杀软。操作系统有更新尽量马上更新。
数据库密码为 KeePass 生成的 20 位随机大小写字母与数字密码。特殊符号我嫌麻烦。
所有密码和密钥每季度换一次。
阿里云账号双因素认证。
发现被入侵后的操作
使用 chkrootkit 和 rkhunter 扫描 rootkit 。
unhide 反隐。
如果没有证据证明黑客没有修改文件,就重装系统并回档。我想不到什么证明文件没被动的证据,所以大概率应该都会重装和回档。
查看服务器是否有重启记录。防止 auditd 的配置被修改。
参考《 Linux 系统安全》中的附录 B 。附录 B 是关于被入侵后的排查。
奇技淫巧
除了特定用户,任何用户登录之前必须登录特定的用户,否则就立刻断网。
还有把某个黑客大概率会用到,但是系统正常运行不会用到的命令换成触发报警的脚本。不知道有没有这种命令?比如 ls ,黑客执行 ls 就断网。我想要 ls 的功能就用 myls 。
这两个是我想到的,如果没人说能用我就不用了。我感觉挺危险的。轻则误报,重则没法登录。
我为什么这么在乎安全问题?
首先我自认为我对安全的重视程度应该是超过平均水平了。
如果网站一直没什么流量的话,我也会一直维护这个网站。维护时间十年起步。长期运营的项目如果不在乎安全问题感觉迟早会出问题。另外我的网站虽然也能提供情绪价值,或者说用来娱乐,但是我希望主要是用它改善用户的生活。那些能用来改善用户生活的数据如果被篡改了很不好。虽然如果真被篡改了大部分可能会被发现,但是肯定会有漏掉的。

