问题描述
假设我已经全新安装了Ubuntu,我应该采取哪些步骤来保护它作为Rails应用程序服务器的安全?
最佳方法
我想不出任何Ubuntu-specific的调整,但这是一些适用于所有发行版的调整:
-
卸载所有不必要的软件包
-
在SSH中仅使用public-key身份验证
-
通过SSH禁用root登录(不适用于Ubuntu)
-
使用PHP的生产设置(php.ini-recommended)
-
将MySQL配置为仅使用套接字
当然,此列表并不完整,您永远也不会完全安全,但是它涵盖了我在现实生活中看到的所有漏洞。
另外,我所看到的漏洞利用几乎总是与不安全的用户代码而不是不安全的配置有关。最小限度的服务器分发中的默认配置往往非常安全。
次佳方法
我早期要做的一件事是安装DenyHosts。它将定期浏览/var /log /secure,查找失败的登录,并在几次失败后阻止IP。我将其设置为在第一个no-such-user之后,在第二次尝试root用户之后,以及对真实用户进行几次尝试后阻止(以防万一,但您应该使用SSH公钥登录)。
第三种方法
Ubuntu是基于Debian的,我发现Securing Debian Manual在基于Debian的发行版中非常有用,它可以完全引导您遍历系统并检查每个部分。从根本上来说,这是对您的问题的真正非常全面的回答。
第四种方法
我通常会安装RKHunter,它会扫描rootkit,并对各种重要的系统二进制文件进行完整性检查。它在标准存储库中,每天从cron运行。从安全性角度来看,它并不完美,但这是要添加的low-effort项,它提供了一种保护措施。
第五种方法
安装logcheck,但要进行调整,以使您永远不会收到来自常规事件的消息,否则您将养成忽略电子邮件的习惯。
使用netstat检查哪些进程正在侦听,并确保没有任何正在运行的进程不需要运行。可以将许多守护程序配置为仅侦听内部IP(或localhost),而不侦听所有接口。
第六种方法
做可以建议的事情…
Nmap主机并禁用所有非必要服务。如有必要,请使用iptables。
第七种方法
如果您要使用服务器访问Internet附近,请安装诸如snort之类的入侵检测系统。
第八种方法
对各种目录使用单独的分区,例如/tmp
或/var
,并尽可能将它们与nosuid
,nodev
和noexec
装入。
第九种方法
一些防火墙建议。
学习使用防火墙以及正确锁定机箱的概念。更改默认端口在很大程度上是没有用的。正确的应用程序和防火墙配置更为重要。
两者都在Ubuntu仓库中:
FireHOL
有很棒的文档,语法也很容易学习。我能够在二十分钟内设置网关/防火墙。我摆脱此问题的唯一原因是它似乎没有得到维护(2年前的最新版本)。并不意味着它不起作用,而是…
Ferm
是另一个。更多iptables-like语法,但概念相同。与FireHOL相比,维护的社区数量更多,但提取所需的时间更长。
Shorewall
是我目前使用的它的文档内容丰富,其配置格式为表格格式。我花了一个半小时的时间才能理解所有必需的文件(6),以使防火墙/网关配置正常运行。非常强大。提示:不同配置文件的手册页非常有帮助!
所有这些都从配置文件加载防火墙配置。非常有效,比起iptables更容易使用,并且(我认为)比ufw更易于使用和管理。
其他:
-
我赞同使用SSH密钥的建议。
-
设置一个IDS。
-
了解有关AppArmor的信息。它将可执行文件的文件访问限制为仅所需的指定目录和文件。与RHEL世界中的SELinux类似。它已针对许多well-used程序安装并启用了预配置的’profiles’。