请注意:我不想把它变成一场火焰战争!我知道很多人对这个主题有着坚定的信念,这在很大程度上是因为他们在防火墙解决方案上付出了很多努力,也因为他们被灌输了相信自己的必要性的观念。
但是,我正在寻找安全专家的答案。我相信这是一个重要的问题,答案不仅对我自己和我工作的公司有益。我已经运行我们的服务器网络好几年了,没有任何妥协,根本没有任何防火墙。安全无妥协,我们也有可能被防止的防火墙。
我想我在这里工作的时间太长了,因为当我说“服务器”时,我总是指“向公众提供的服务”,而不是“秘密的内部计费数据库”。因此,我们的任何规则将在任何防火墙必须允许访问整个互联网。此外,我们的公共访问服务器都位于与我们办公室分开的专用数据中心。
别人问了类似的问题,我的回答被投为负数。这让我相信,要么投票否决它的人并没有真正理解我的答案,要么我对安全性的了解不足以做我目前正在做的事情。
这是我的服务器安全方法:
在将我的服务器连接到 Internet之前,请遵循我的操作系统的安全指南 。
使用 TCP 包装器将 SSH(和其他管理服务)的访问权限限制为少数 IP 地址。
使用Munin监视此服务器的状态。并修复 Munin-node 在其默认配置中固有的严重安全问题。
Nmap 我的新服务器(也是在将我的服务器连接到 Internet 之前)。如果我要为这台服务器设置防火墙,这应该是传入连接应该被限制到的确切端口集。
将服务器安装在机房,并给它一个公网IP地址。
使用我的操作系统的安全更新功能确保系统安全。
我的理念(以及问题的基础)是基于主机的强大安全性消除了防火墙的必要性。总体安全理念表明,即使您有防火墙,仍然需要基于主机的强大安全性(请参阅安全指南)。这样做的原因是,将公共服务转发到服务器的防火墙可以使攻击者与根本没有防火墙一样多。易受攻击的是服务本身,并且由于向整个 Internet 提供该服务是其运营的要求,因此限制对它的访问并不是重点。
如果是,并非需要由整个互联网的访问,请在服务器上的可用端口,然后该软件需要在步骤1中被关闭,并逐步4.如果验证的攻击者成功打入通过易受攻击的软件服务器并自己打开一个端口,攻击者可以(并且确实)通过在随机端口上建立出站连接来轻松击败任何防火墙。安全的重点不是在成功攻击后保护自己——这已经被证明是不可能的——而是首先将攻击者拒之门外。
有人建议除了开放端口之外还有其他安全考虑因素 - 但对我来说这听起来像是在捍卫自己的信仰。无论是否存在防火墙,任何操作系统/TCP 堆栈漏洞都应该同样容易受到攻击——基于端口被直接转发到该操作系统/TCP 堆栈这一事实。同样,在服务器上运行防火墙而不是在路由器上运行(或者更糟,在两个地方)似乎增加了不必要的复杂层。我理解“安全层出不穷”的理念,但有一点就像通过将 X 层胶合板堆叠在一起然后在所有层上钻孔来建造屋顶一样。另一层胶合板不会阻止通过你的那个洞的泄漏
老实说,我认为防火墙对服务器有任何用处的唯一方法是它是否具有防止已知攻击者与所有服务器的所有连接的动态规则 - 就像垃圾邮件的 RBL(巧合的是,这几乎就是我们的邮件服务器所做的) . 不幸的是,我找不到任何可以做到这一点的防火墙。下一个最好的东西是 IDS 服务器,但它假设攻击者不会首先攻击您的真实服务器,并且攻击者在攻击之前会费心探测您的整个网络。此外,众所周知,这些会产生大量误报。
我想挑选社区关于 linux 服务器安全性的大脑,特别是关于蛮力攻击和使用fail2ban与自定义iptables。
那里有一些类似的问题,但没有一个能解决我满意的主题。简而言之,我正在尝试确定最佳解决方案来保护暴露在互联网上的 linux 服务器(运行通常的服务、ssh、web、邮件),免受暴力攻击。
我对服务器安全有很好的处理,即通过不允许 root 或密码登录来锁定 ssh,更改默认端口,确保软件是最新的,检查日志文件,只允许某些主机访问服务器并利用安全性审计工具,如Lynis ( https://cisofy.com/lynis/ ),用于一般安全合规性,因此这个问题不一定与此有关,尽管始终欢迎输入和建议。
我的问题是我应该使用哪种解决方案(fail2ban 或 iptables),我应该如何配置它,或者我应该使用两者的组合来防止暴力攻击?
关于该主题有一个有趣的回应(Denyhosts vs fail2ban vs iptables-防止暴力登录的最佳方法?)。对我来说,最有趣的答案是个人(https://serverfault.com/a/128964),而且iptables的路由发生在内核,而不是的fail2ban这使得用户的使用模式工具来分析日志文件。Fail2ban 当然使用 iptables,但它仍然必须解析日志文件并匹配模式,直到它执行操作。
那么使用 iptables 并使用速率限制(https://www.rackaid.com/blog/how-to-block-ssh-brute-force-attacks/)在一段时间内删除来自 IP 的请求是否有意义在特定时间段内进行过多连接尝试的时间,而不管它尝试连接到什么协议?如果是这样,那么这里有一些关于对这些数据包使用丢弃与拒绝的有趣想法(http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject),对此有什么想法吗?
Fail2ban 允许以能够为默认配置中可能无法解决的服务编写自定义“规则”的形式进行自定义配置。它易于安装和设置并且功能强大,但是如果我试图实现的只是“阻止”来自服务器的 IP,如果他们对任何服务/协议进行 2 次失败的访问尝试超过x数量,这会不会是一种矫枉过正时间?
此处的目标是打开每日日志监视报告,而不必滚动浏览尝试连接到服务器的失败页面。
感谢您抽出宝贵的时间。
我的 iptables 中有一条记录拒绝连接的规则,即-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
我想要一个类似的规则来记录所有已建立的连接,即与所有端口的非拒绝连接。我该怎么做,我尝试搜索谷歌并进行实验,但找不到匹配的字符串