<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Security on 随手记</title><link>https://www.bufio.cn/tags/security/</link><description>Recent content in Security on 随手记</description><generator>Hugo</generator><language>zh-cn</language><copyright>© 2026 &lt;a href="https://beian.miit.gov.cn/" target="_blank" rel="noopener"&gt;苏ICP备2023022553号-1&lt;/a&gt;</copyright><lastBuildDate>Tue, 28 Apr 2026 17:35:00 +0800</lastBuildDate><atom:link href="https://www.bufio.cn/tags/security/index.xml" rel="self" type="application/rss+xml"/><item><title>Fail2Ban 工作原理与常用运维操作</title><link>https://www.bufio.cn/posts/fail2ban-principles-and-operations/</link><pubDate>Tue, 28 Apr 2026 17:35:00 +0800</pubDate><guid>https://www.bufio.cn/posts/fail2ban-principles-and-operations/</guid><description>&lt;p&gt;Fail2Ban 是 Linux 服务器上很常见的一类安全防护工具，主要用来应对 SSH、Web 登录、邮件服务等场景里的暴力破解和重复异常请求。它不会替代防火墙、密钥登录、最小权限这些基础安全措施，但非常适合做一层自动化封禁：发现某个 IP 在短时间内频繁失败，就把它临时加入黑名单，过一段时间后再自动释放。&lt;/p&gt;
&lt;p&gt;这篇记录一下 Fail2Ban 的工作原理、安装和开机启动方式、常用规则配置，以及误封后如何把某个 IP 从黑名单里移出来。&lt;/p&gt;
&lt;h2 id="fail2ban-的工作原理"&gt;Fail2Ban 的工作原理&lt;/h2&gt;
&lt;p&gt;Fail2Ban 的核心逻辑可以概括成四步：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;监听日志文件或 systemd journal。&lt;/li&gt;
&lt;li&gt;用 filter 里的正则表达式匹配失败行为。&lt;/li&gt;
&lt;li&gt;在指定时间窗口内统计同一个 IP 的失败次数。&lt;/li&gt;
&lt;li&gt;达到阈值后执行 action，把 IP 加入防火墙黑名单。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这里有几个关键概念。&lt;/p&gt;
&lt;h2 id="jail"&gt;jail&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;jail&lt;/code&gt; 是 Fail2Ban 的规则单元。一个 jail 通常对应一个服务，例如 SSH、Nginx、Postfix、Dovecot 等。每个 jail 会指定：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;监控哪个服务。&lt;/li&gt;
&lt;li&gt;读取哪个日志。&lt;/li&gt;
&lt;li&gt;使用哪个 filter。&lt;/li&gt;
&lt;li&gt;允许失败多少次。&lt;/li&gt;
&lt;li&gt;统计时间窗口是多少。&lt;/li&gt;
&lt;li&gt;封禁多久。&lt;/li&gt;
&lt;li&gt;使用什么 action 封禁 IP。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例如 SSH 的 jail 就是监听 SSH 登录日志，匹配登录失败记录，当同一个 IP 在一段时间内失败太多，就通过防火墙封禁。&lt;/p&gt;
&lt;h2 id="filter"&gt;filter&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;filter&lt;/code&gt; 负责识别“什么日志算失败”。它通常放在：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/etc/fail2ban/filter.d/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;例如 SSH 常见 filter 是：&lt;/p&gt;</description></item></channel></rss>