服务器基本的网络安全防护

操作系统安全

操作系统安全问题

  • 系统帐号密码攻击。用户帐号密码被破解导致:1. 破坏系统文件。2. 安装恶意软件(间谍软件、病毒软件)。3. 比特币勒索。
  • 借助第三方软件服务攻击系统。1. 利用 Redis 将 SSH 密钥写入到 authorized_keys config set dir /root/.ssh, config set dbfilename authorized_keys。2. 利用 Redis 设置挖矿定时任务 config set dir /etc, config set dbfilename crontab

操作系统防护措施

  • 系统和软件包更新,防止低版本漏洞攻击。保持操作系统打上最新的补丁,保证使用最新版本的软件。
    • 手动定期更新,或者设置自动更新(Unattended Upgrades)。
  • 设置系统防火墙
    • 仅开放必要端口,如:22 for SSH,80 for HTTP,443 for HTTPS,VPS 端口等。其它端口设置 IP 白名单。
  • 系统帐号保护
    • 设置高强度 root 密码。
    • 定期更新 root 密码。
    • 不使用 root 帐号登录。
  • 远程登录保护
    • 修改 SSH 默认端口。
    • SSH 登录使用公钥登录。定期更换公钥。
    • 关闭 root 登录。
    • 关闭密码登录功能。
    • 系统防火墙设置 SSH 登录 IP 白名单。
  • 数据保护
    • 定期对操作系统进行镜像备份。
  • 防止第三方软件服务漏洞攻击(虽然有防火墙,但不能保证防火墙被同事或其他人修改。可以在防火墙的基础上,再做一些防护)
    • 使用 Docker 以 Non-Root User (Rootless mode) 身份运行软件服务(如:Redis)。

数据库安全

数据库安全问题

  • 登录帐号攻击。用户帐号被破解导致:1. 用户隐私信息泄露。2. 数据库被删除或篡改。3. 比特币勒索。

数据库防护措施

  • 一般保护
    • 修改数据库默认端口。
  • 数据保护
    • 开启MySQL 的 binlog 和 redo log。
    • 定期手动(或定时脚本自动)进行异地备份数据库(或增量同步到备份数据库系统)。
    • 重要的隐私信息加密存储。
  • 帐号保护
    • 设置高强度 root 密码。
    • 不使用 root 帐号登录数据库。
    • 不同数据库设置不同的用户帐号。
    • 不要把帐号密码明文写在项目配置文件中。
  • 远程登录保护
    • 设置数据库远程登录 IP 白名单。
    • 远程登陆使用公钥登录。
    • 使用 MySQL 代理。写一个 LUA 检查脚本,错误登录频率限制,三次错误登录 IP 加入黑名单。
    • 不使用远程登录数据库。通过 SSH 登录服务器,从而本地访问数据库。

应用系统安全

应用系统安全问题

  • 登录帐号攻击。1. 字典攻击或暴力攻击,获取用户的帐号密码。从而获取用户隐私,执行恶意操作。
  • 网络通信安全攻击。1. 监听网络通信数据。2. 篡改网络数据。3. 网站伪造。钓鱼网站。
  • XSS 攻击。1. 页面注入恶意脚本<script>,获取用户的 Cookie 信息,从而登录用户帐号。2. 让原始用户执行不当操作。如 <img src="http://mybank.com/transfermoney?amount=1000&toaccount=14512">
  • SQL 注入攻击。1. 执行未授权的恶意 SQL。如';<some SQL statement>;--2. 跳过登录密码验证。
  • DOS / DDoS 攻击。1. 拒绝服务攻击,大量请求服务器,导致正常用户无法使用网站应用。

应用系统防护措施

  • 一般保护
    • 使用加密的域名解析服务,不暴露服务器 IP 地址。
    • 使用 Cloudflare proxied DNS 或者 Cloudflare Tunnel,不暴露服务器 IP 地址。
    • 使用 Nginx 代理,隐藏应用端口。
    • 应用端口仅能被代理服务器访问,系统防火墙设置应用端口访问的 IP 白名单。
    • 定期备份应用的数据文件。
  • 登录保护
    • 错误登录频率限制。要求输入验证码。
    • 使用 Tow-Factor 认证,如:短信验证码。
    • 异地登录邮件提醒。
    • 禁止弱口令。需要设置高强度用户密码。
  • 网络通信保护
    • 使用 HTTPS 协议通信。
    • 客户端用户密码加密和加盐传输。
  • XSS 攻击防护
    • 不允许用户输入的文本显示为 HTML 标签。
    • 阻止 XSS 攻击运行在其它网站。1. HTTP 请求头的 referer 检查。2. 不仅仅通过 cookie 中的session 来识别用户,判断用户 session 需要检查是否为原始用户认证通过的 IP 地址。
    • 添加和修改操作使用 HTTP POST 请求。
  • SQL 注入防护
    • Java 数据库操作使用 PreparedStatement 对象。
  • DoS / DDoS 防护
    • 异常高频率访问 IP ,使用 Fail2ban 进行限制和加入黑名单。
    • Cloudflare DDoS Protection and Web Application Firewall (WAF).
  • 使用审计追踪用户行为。检查、分析和阻止恶意行为。
  • 部署入侵侦测系统。记录和分析恶意攻击行为。
  • 部署蜜罐系统。检测未知的攻击,识别潜在风险。

References

[1] 5 Linux SSH Security Best Practices To Secure Your Systems

[2] Preventing brute-force attacks on MySQL? - serverfault

[3] Database System Concepts - Section 9.7: Application Security