我想在生产环境中运行基于 Tornado Web 服务器的应用程序。性能要求较低。
由于我不需要负载平衡器,我想知道是否可以直接在端口 80 和 443 上访问它。从安全角度来看,这可以吗?还有其他问题吗?当然,前提是我找到某种方法以非 root 用户身份运行它(RHEL 上不提供 authbind)。
答案1
直接在 HTTPS 上公开 tornado 意味着 TLS 加密由 Python ssl 模块处理。
如果符合以下情况,那么可能就没问题:
python 发行版足够新(python <2.7.9 有许多 SSL 问题。python >=2.7.9 或 >=3.4 要好得多)
python 和 libssl 通过 Linux 分发包提供
您对分发包有全面的升级政策
当然,如果您的应用涉及非常敏感的信息,最佳做法是在应用前运行带有强化 TLS 堆栈的代理(如 nginx)。例如,在使用 LibreSSL 的 OpenBSD 反向代理上运行 nginx。
为了预防拒绝服务,如果您的应用程序是针对龙卷风应用程序编写的(永远不会阻止 ioloop),那么应用程序前面的异步负载均衡器几乎没有什么好处。
最后,大多数安全问题都根源于应用程序本身......身份验证、访问控制、XSRF、XSS......负载均衡器无法阻止它们。