我想select社区的大脑关于Linux服务器安全,特别是暴力攻击和使用fail2ban vs定制iptables 。
这里有一些类似的问题,但是没有一个能够让我满意。 总之,我试图确定最好的解决scheme,以保护暴露在互联网(运行通常的服务,SSH,网页,邮件)的Linux服务器,从暴力攻击。
我有一个体面的服务器安全处理,即通过不允许root或密码login,更改默认端口,确保软件是最新的,检查日志文件,只允许某些主机访问服务器和利用安全性lockingssh审计工具,如Lynis ( https://cisofy.com/lynis/ ),一般安全合规性,所以这个问题不一定就是这样,尽pipeinput和build议总是受欢迎的 。
我的问题是我应该使用哪种解决scheme(fail2ban或iptables),我应该如何configuration它,还是应该使用两者的组合来抵御暴力攻击?
关于这个主题有一个有趣的回应( Denyhosts vs fail2ban vs iptables-防止暴力login的最好方法? )。 对我个人而言,最有趣的答案是( https://serverfault.com/a/128964),iptables 路由发生在内核中 ,而fail2ban则使用用户模式工具来parsing日志文件。 Fail2ban当然使用iptables,但是它仍然需要parsing日志文件并匹配模式,直到执行一个动作。
那么使用iptables并使用限速 ( https://www.rackaid.com/blog/how-to-block-ssh-brute-force-attacks/ )在一段时间内从IP上删除请求的时间,在特定的时间内连接尝试过多,而不pipe它尝试连接的协议是什么? 如果是这样,那么有一些有趣的想法使用drop vs reject这些包( http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject ),对此有什么想法?
Fail2ban允许自定义configuration的forms,能够编写自定义“ 规则 ”的服务,可能无法在默认configuration中解决。 它很容易安装和设置,function强大,但如果我试图实现的所有服务/协议超过一个x数量的两个失败的访问尝试是“ 阻止 ”从服务器的IP是一个矫枉过正的时间?
这里的目标是打开每日logging报告,而不必滚动浏览尝试失败的连接到服务器的页面。
感谢您花时间。
我应该使用fail2ban还是iptables?
除了防火墙解决scheme之外,您还可以使用fail2ban 来 按需扩展现有的防火墙规则,并使用规则来阻止在其他公共服务上执行不良操作的系统的特定IP地址。 他们一起工作。
简化:防火墙只能看到networking连接和数据包,并且可以对其中的模式有所了解,但是它没有应用程序层面的洞察力来区分来自恶意,畸形和不良请求的期望和有效请求。 例如,你的防火墙无法区分大量的HTTP API请求和由你的WordPresspipe理页面上的powershell密码猜测引起的不正确的login尝试,在防火墙上它们都只是到端口80或443的TCP连接。
Fail2ban是一种通用和可扩展的方法,可以为您的防火墙提供应用级别的洞察,尽pipe有些间接。
通常,应用程序会注册和logging恶意的,格式错误的和不受欢迎的请求,但很less有它们能够防止进一步的滥用。 虽然它是轻微的解耦Fail2ban可以作用于那些logging的恶意事件,并限制损害,并防止进一步的滥用,通常是dynamic重新configuration您的防火墙,以拒绝进一步的访问。 换句话说,Fail2ban给你现有的应用程序,而不用修改它们,抵御滥用的手段。
通过入侵检测/预防系统 ,为防火墙提供应用程序级别见解的另一种方法是通过入侵检测/预防系统 。
例如,networking服务器是一种常见的公共服务,在您的防火墙中,TCP端口80和443对于互联网而言是开放的。
通常,您在HTTP / HTTPS端口上没有任何速率限制,因为多个有效用户在NAT网关或Web代理之后可以具有单一来源。
当您检测到对您的networking服务器的不良和/或恶意行为时,您可以使用fail2ban来自动阻止这样的攻击者(完全阻止他们或者只locking他们对端口80和443的访问)。
另一方面,SSH访问不是公共服务,但是如果您不能将防火墙中的SSH访问限制为仅列入白名单的IP地址范围,则对传入连接进行速率限制是减慢暴力攻击的一种方法强制攻击。 但是你的防火墙仍然无法区分用户bob是否成功login5次,因为他正在运行正确的操作手册,5次尝试以root身份login失败。
我应该使用fail2ban还是iptables?
这有点类似于“我应该使用安全带还是汽车?”。
首先,请记住, fail2ban实际上只是一个工具,可以自动检测文本文件中的重复条目,并在符合指定阈值时执行某些命令。
我们经常使用它来阻止违反某些策略的主机,这可以通过反复指出违反策略的日志条目来certificate,但这不是唯一可以使用的策略。
您可以使用fail2ban按需添加(和删除)iptables规则。 你也可以手动添加和删除iptables规则,或者你可以使用fail2ban做一些完全不同的响应。 这就是你如何configuration它。
无论您是否正在运行fail2ban,您都应该具有常规防火墙。 例如,这样的防火墙可以阻止(input或输出)stream量,这是你永远不会知道的。 例如,这个数据库服务器真的需要处理来自整个Internet的端口25上的传入连接吗?
最重要的是,让fail2ban通过切断违规的IP一段时间来回应违反策略的行为,对于保护你的服务器本身并没有多大的作用(一个好的攻击只需要穿过你的防火墙一次),但是减less系统的噪音水平,包括但不限于系统日志。 要做到这一点的简单方法是让fail2ban运行iptables来configuration内核在一段时间内丢弃数据包。 如果您可以重新configuration您的外围防火墙而不是主机防火墙,那么只有更好。
换句话说,如果他们可以很容易地分开,那么你就需要这两者。
如果我试图实现的所有服务/协议超过一定的时间,如果他们做了2次失败的访问尝试,那么它是否可以是一个矫枉过正的问题?
这正是 fail2ban旨在解决的用例。 使用工具达到预期的目的几乎从不过分。
这里的目标是打开每日logging报告,而不必滚动浏览尝试失败的连接到服务器的页面。
另外,与您的问题没有直接关系:无论何时您要过滤日志以供审阅,请考虑您将对某些特定条目执行哪些操作。 如果你要做的一件事就是说“meh”,然后继续前进,那么你可能要过滤掉它。 确保在需要的时候保存完整的日志以供审查,但是只有在常规的监控工作stream程中才会显示实际将要显示的内容。 如果设置fail2ban在连接尝试失败后阻止主机,则很可能不需要手动查看这些连接,可以从监视通知中删除它们。 如果合法用户抱怨失去访问权限,只需提取完整的日志并查看。
几年前我解决了同样的问题。 我决定使用最近的模块iptables,因为性能和简单的设置。 我必须保护主机上的很多虚拟容器。 只要记住不要用你的规则打开任何DOSvector。 也可以使用ipset来匹配规则中的networking列表或IP列表。 我用它来做白名单。 一个列表中的一个国家的所有networking都是很好的调整。 而只需要增加一个端口来匹配,就可以很容易地用同一个规则集来保护其他服务。 所以我不喜欢用fail2ban来改变,但也许有其他需求的人会对fail2ban感到满意。
这里是一些示例:
# # SSH tracking sample # ################################################################################# iptables -X IN_SSH iptables -N IN_SSH iptables -A IN_SSH -m set --match-set net_blacklist src -p tcp -j REJECT iptables -A IN_SSH -m set --match-set net_whitelist src -p tcp --match limit --limit 5/second -j LOG --log-prefix whitelist_de_prefix iptables -A IN_SSH -m set --match-set net_whitelist src -p tcp -j ACCEPT # filter update iptables -A IN_SSH -m recent --name sshbf --set --rsource # connlimit iptables -A IN_SSH -m connlimit --connlimit-above 4 --match limit --limit 5/second -j LOG --log-prefix ssh_connlimit_per_ip_above_4 iptables -A IN_SSH -m connlimit --connlimit-above 4 -j REJECT # filter iptables -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 13 --seconds 60 --match limit --limit 5/second -j LOG --log-prefix ssh_filtered_13in60sec iptables -A IN_SSH -m recent --name sshbf --rttl --rcheck --hitcount 13 --seconds 60 -j REJECT iptables -A IN_SSH -j ACCEPT iptables -A FORWARD -p tcp --dport ssh --syn --jump IN_SSH # iptables -A INPUT -p tcp --dport ssh --syn --jump IN_SSH
日志消息的输出可以与fail2ban结合使用。 您也可以将其用于INPUT规则。