<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>防火墙 on T.本秋的自留地</title>
    <link>https://blog.texsd.eu.org/tags/%E9%98%B2%E7%81%AB%E5%A2%99/</link>
    <description>Recent content in 防火墙 on T.本秋的自留地</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-cn</language>
    <copyright>Copyright© 2026 T.本秋. Licensed under CC BY-NC-SA 4.0.</copyright>
    <lastBuildDate>Fri, 25 Apr 2025 21:46:16 +0800</lastBuildDate><atom:link href="https://blog.texsd.eu.org/tags/%E9%98%B2%E7%81%AB%E5%A2%99/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>防火墙：iptables、nftables 与 firewalld</title>
      <link>https://blog.texsd.eu.org/posts/firewall-1-iptables-nftables/</link>
      <pubDate>Fri, 25 Apr 2025 21:46:16 +0800</pubDate>
      
      <guid>https://blog.texsd.eu.org/posts/firewall-1-iptables-nftables/</guid>
      <description>
&lt;h2 class=&#34;relative group&#34;&gt;前言
    &lt;div id=&#34;前言&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%89%8d%e8%a8%80&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;其实防火墙这玩意，我三年前就接触过。那时候在用 iptables 来配置路由器的&lt;code&gt;ipv6&lt;/code&gt;转发，照着教程抄完了也不知所云。&lt;/p&gt;
&lt;p&gt;如今过去了那么久，知识储备多了那么一点点，正好有需求，就重新了解了一下。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;iptables
    &lt;div id=&#34;iptables&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#iptables&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;iptables，这玩意算是个古董了，大概在 21 世纪初就有了。不过毕竟是老东西，现在大部分旧设备都是用的它，很多软件在修改防火墙规则的时候也只改它。&lt;/p&gt;
&lt;p&gt;提起&lt;code&gt;iptables&lt;/code&gt;，我们也许会想到五链四表，不过一般来说，知道&lt;code&gt;nat&lt;/code&gt;和&lt;code&gt;filter&lt;/code&gt;表就已经足够完成 80% 的工作了（&lt;code&gt;ipv4&lt;/code&gt;），我在&lt;a
  href=&#34;https://wiki.archlinuxcn.org/wiki/Iptables&#34;
    target=&#34;_blank&#34;
  &gt;archwiki 的 iptables&lt;/a&gt;章节翻到这张图，也许能够有助于理解：&lt;/p&gt;

&lt;div class=&#34;no-limit-code&#34;&gt; 
     
    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               XXXXXXXXXXXXXXXXXX
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                             XXX     Network    XXX
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               XXXXXXXXXXXXXXXXXX
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       +
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       |
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       v
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; +-------------+              +------------------+
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; |table: filter| &amp;lt;---+        | table: nat       |
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; |chain: INPUT |     |        | chain: PREROUTING|
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; +-----+-------+     |        +--------+---------+
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       |             |                 |
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       v             |                 v
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; [local process]     |           ****************          +--------------+
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       |             +---------+ Routing decision +------&amp;gt; |table: filter |
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       v                         ****************          |chain: FORWARD|
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;****************                                           +------+-------+
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Routing decision                                                  |
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;****************                                                  |
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       |                                                          |
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       v                        ****************                  |
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+-------------+       +------&amp;gt;  Routing decision  &amp;lt;---------------+
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;|table: nat   |       |         ****************
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;|chain: OUTPUT|       |               +
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+-----+-------+       |               |
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      |               |               v
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      v               |      +-------------------+
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+--------------+      |      | table: nat        |
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;|table: filter | +----+      | chain: POSTROUTING|
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;|chain: OUTPUT |             +--------+----------+
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;+--------------+                      |
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                      v
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               XXXXXXXXXXXXXXXXXX
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                             XXX    Network     XXX
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               XXXXXXXXXXXXXXXXXX
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;这里的 Network，指的就是不同的网卡接口。&lt;/p&gt;
&lt;p&gt;接着我来说说自己的理解：&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;啥表啥链？
    &lt;div id=&#34;啥表啥链&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%95%a5%e8%a1%a8%e5%95%a5%e9%93%be&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;filter&lt;/strong&gt;表 最简单，也是默认的表。它只有&lt;code&gt;OUTPUT&lt;/code&gt;，&lt;code&gt;INPUT&lt;/code&gt;，&lt;code&gt;FORWARD&lt;/code&gt;链。这几个顾名思义，分别是来源本机，目标本机，经过本机的数据包。
一般来说，&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;OUTPUT&lt;/strong&gt; 的默认规则是&lt;code&gt;ACCEPT&lt;/code&gt;，也就是允许所有来源本机的数据包发出。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;INPUT&lt;/strong&gt; 的默认规则是&lt;code&gt;DROP&lt;/code&gt;，也就是不允许外来的数据包访问本机。我们一般监听的端口需要配置例外的规则，否则就无法被访问。&lt;/li&gt;
&lt;li&gt;*&lt;em&gt;FORWARD&lt;/em&gt; *也是&lt;code&gt;DROP&lt;/code&gt;。默认不允许不同网络接口之间的数据包转发。想要转发不仅仅需要手动放行，还得开启内核的 IP 转发。
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## 临时启用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sysctl -w net.ipv4.ip_forward&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## 永久启用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;net.ipv4.ip_forward=1&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee -a /etc/sysctl.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sysctl -p
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;举个例子：
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    1    52 ACCEPT     all  --  wg0    *       0.0.0.0/0            0.0.0.0/0
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;nat&lt;/strong&gt;表 这个表有四条链，不过我一般只用其中的两条：&lt;code&gt;PREROUTING&lt;/code&gt;和&lt;code&gt;POSTROUTING&lt;/code&gt;，分别处理端口映射以及 ip 伪装。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PREROUTING&lt;/strong&gt; 这一个链其实我接触得不多，因为基本都是在 ui 上面设置的。但是摸过 SAST 的 RouterOS 之后，那个 ui 配置起来就像是手搓&lt;code&gt;iptables&lt;/code&gt;一样，我就马上理解了。
一个例子就像这样：
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Chain PREROUTING (policy ACCEPT 2885K packets, 212M bytes)
 pkts bytes target     prot opt in     out     source               destination
16   952 DNAT       tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22345 to:192.168.123.2:22
## 这里因为涉及到自定义链，我就直接合并了。
&lt;/code&gt;&lt;/pre&gt;你会注意到，&lt;code&gt;policy&lt;/code&gt;为什么是&lt;code&gt;ACCEPT&lt;/code&gt;？我觉得是因为如果不给你规则，路由也不会帮你转发，所以大家都说&lt;code&gt;ipv4&lt;/code&gt;的&lt;code&gt;nat&lt;/code&gt;安全，原来是这个意思。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;POSTROUTING&lt;/strong&gt; 你是否想过，&lt;code&gt;nat&lt;/code&gt;后的主机，是如何用路由器的 ip 进行通信的？
这条链改写了对应目标的源 ip 地址和端口，然后再发出去。规则 SNAT 需要指定 ip，但是在家庭环境中，ip 通常是变化的，这时候神器&lt;code&gt;MASQUERADE&lt;/code&gt;出现了，它可以动态的获取出口网卡的 ip 地址，把 ip 改写再发出去。至于出口怎么决定，那就是路由表的事情了。
例子：
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Chain POSTROUTING (policy ACCEPT 804K packets, 60M bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 MASQUERADE  all  --  *      ppp0    0.0.0.0/0            0.0.0.0/0
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 class=&#34;relative group&#34;&gt;命令
    &lt;div id=&#34;命令&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%91%bd%e4%bb%a4&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;iptables&lt;/code&gt;的命令非常的精简，看多了倒还不错，不过现在的风格倒变成自然语言了，像&lt;code&gt;ip&lt;/code&gt;和&lt;code&gt;nft&lt;/code&gt;之流。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -t nat -nvL &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;CHAIN-NAME&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#看 nat 表的规则，链名是可选的&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -nvL --line-numbers &lt;span class=&#34;c1&#34;&gt;#看 filter 表的规则，filter 默认可以省略；--line-numbers 用于显示编号。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;一些我常用的就一起放在这了：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ip6tables -A INPUT -p udp --dport &lt;span class=&#34;m&#34;&gt;26741&lt;/span&gt; -j ACCEPT &lt;span class=&#34;c1&#34;&gt;# ip6tables 是用于控制 ipv6 的防火墙，我目前只接触了 filter 表，NPT 还不会...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -A INPUT -i wg0 -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -A FORWARD -i wg0 -j ACCEPT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -t nat -A POSTROUTING -o ppp0 -s 10.0.8.0/24 -j MASQUERADE --mode fullcone
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;-A&lt;/code&gt;是&lt;code&gt;Append&lt;/code&gt;，&lt;code&gt;-I&lt;/code&gt;是&lt;code&gt;Insert&lt;/code&gt;，&lt;code&gt;-D&lt;/code&gt;是&lt;code&gt;Delete&lt;/code&gt;，据此可以精确的删除规则。&lt;/p&gt;
&lt;p&gt;用行号也可以：&lt;code&gt;iptables -D INPUT 2&lt;/code&gt;&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;补充
    &lt;div id=&#34;补充&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e8%a1%a5%e5%85%85&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;还有子链和其他表等其他内容，等到后面有时间再写吧。&lt;/p&gt;

&lt;h2 class=&#34;relative group&#34;&gt;nftables + firewalld
    &lt;div id=&#34;nftables--firewalld&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#nftables--firewalld&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;nftables&lt;/code&gt;是一个新的&lt;code&gt;netfilter&lt;/code&gt;工具，&lt;code&gt;firewalld&lt;/code&gt;是 RedHat 开发的一个防火墙前端。&lt;code&gt;firewalld&lt;/code&gt;的默认后端是&lt;code&gt;nft&lt;/code&gt;，这两者一般来说会配合起来使用。&lt;/p&gt;
&lt;p&gt;直接操作底层的&lt;code&gt;nft&lt;/code&gt;命令对我来说还是有点困难，这里就简单讲讲他们的结合使用吧。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;为什么选择 firewalld 而不是选择 ufw 呢？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;firewalld&lt;/code&gt;对于动态网络（比如笔记本在不同的热点之间切换）有很好的适配，具体体现在与&lt;code&gt;NetworkManager&lt;/code&gt;之间的配合，使得不同的热点能够应用在不同的区域中，后面会讲讲配置过程。&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;永久和非永久配置
    &lt;div id=&#34;永久和非永久配置&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e6%b0%b8%e4%b9%85%e5%92%8c%e9%9d%9e%e6%b0%b8%e4%b9%85%e9%85%8d%e7%bd%ae&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;firewalld&lt;/code&gt;在设置防火墙的时候，默认是临时配置立即生效。如果想要配置永久规则，加上&lt;code&gt;--permanent&lt;/code&gt;参数即可，记得使用&lt;code&gt;firewall-cmd&lt;/code&gt;重新加载规则生效。&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;启动
    &lt;div id=&#34;启动&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%90%af%e5%8a%a8&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;一行命令就好：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; --now nftables firewalld
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这样，系统就为我们配置了一个默认的防火墙，默认所有的网卡会在&lt;code&gt;public&lt;/code&gt;区域，现在只有 22 入站才被允许。&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;区域
    &lt;div id=&#34;区域&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%8c%ba%e5%9f%9f&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;你应该发现，新的防护墙工具多了一个新概念叫作区域，不同的网卡可以分配到不同的区域。&lt;/p&gt;
&lt;p&gt;先来看看有什么区域？&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo firewalld --list-all-zones
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;部分输出：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;...

home 
  target: default
  ingress-priority: 0
  egress-priority: 0
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client mdns samba-client ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

...

public (default, active)
  target: default
  ingress-priority: 0
  egress-priority: 0
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: dhcpv6-client ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

trusted 
  target: ACCEPT
  ingress-priority: 0
  egress-priority: 0
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: 
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

...
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如果设置了&lt;code&gt;tun&lt;/code&gt;模式，你会发现它无法联网了。&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;将网卡分配到区域
    &lt;div id=&#34;将网卡分配到区域&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%b0%86%e7%bd%91%e5%8d%a1%e5%88%86%e9%85%8d%e5%88%b0%e5%8c%ba%e5%9f%9f&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;

&lt;h4 class=&#34;relative group&#34;&gt;分配 tun
    &lt;div id=&#34;分配-tun&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%88%86%e9%85%8d-tun&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h4&gt;
&lt;p&gt;我们使用&lt;code&gt;firewalld&lt;/code&gt;来配置规则。&lt;/p&gt;
&lt;p&gt;通过上面的输出可以知道，&lt;code&gt;trusted&lt;/code&gt;区域是允许所有流量的，我们把&lt;code&gt;Mihomo&lt;/code&gt;加到&lt;code&gt;trusted&lt;/code&gt;区域：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;firewall-cmd --zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;trusted --add-interface&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Mihomo --permanent
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo firewall-cmd --reload
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## 验证&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;firewall-cmd --get-zone-of-interface&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Mihomo &lt;span class=&#34;c1&#34;&gt;## 返回 trusted&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里有个小坑，我加入之后发现还是不行，一看日志发现数据包全被丢弃了。&lt;del&gt;折腾半天发现重启解决了，我：？？？&lt;/del&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;真正的隐藏 boss 在后面！&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a
  href=&#34;#rpfilter&#34;&gt;反向路径过滤&lt;/a&gt;&lt;/p&gt;

&lt;h4 class=&#34;relative group&#34;&gt;分配 wlan0
    &lt;div id=&#34;分配-wlan0&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%88%86%e9%85%8d-wlan0&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h4&gt;
&lt;p&gt;如果是便携的设备，我们会连接到不同的热点，有公用的也有家里的，家里可以开放多一点权限，而公用的则不需要。&lt;/p&gt;
&lt;p&gt;这一部分由 NetworkManager 配置：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nmcli connection modify &lt;span class=&#34;s2&#34;&gt;&amp;#34;SAST&amp;#34;&lt;/span&gt; connection.zone &lt;span class=&#34;s2&#34;&gt;&amp;#34;home&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## 验证&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo nmcli connection show SAST &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep connection.zone
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## 返回&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;connection.zone:                        home
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这样只有连接到指定的热点名称的时候，才会切换 wlan0 到 home 区域，其他都是 public 区域。&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;开放特定服务和端口
    &lt;div id=&#34;开放特定服务和端口&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%bc%80%e6%94%be%e7%89%b9%e5%ae%9a%e6%9c%8d%e5%8a%a1%e5%92%8c%e7%ab%af%e5%8f%a3&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;firewalld 事先定义了一些服务需要的端口，可以在&lt;code&gt;/usr/lib/firewalld/services/&lt;/code&gt;找到，这些配置文件以&lt;code&gt;xml&lt;/code&gt;格式存储。&lt;/p&gt;
&lt;p&gt;添加服务和端口的时候，别忘了指定当前区域。如果不指定，那么默认是在 public 区域添加规则的。&lt;/p&gt;
&lt;p&gt;如果你需要的服务恰好在里面，就可以很方便的添加：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo firewall-cmd --zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;home --add-service&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;kdeconnect --permanent
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo firewall-cmd --reload
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果这个端口是你自己定义的，可以这样子：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo firewall-cmd --add-port&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;8000/tcp --zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;home --permanent
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo firewall-cmd --reload
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后查看：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo firewall-cmd --zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;home --list-all
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## 输出&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;home &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;active&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  target: default
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ingress-priority: &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  egress-priority: &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  icmp-block-inversion: no
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  interfaces: wlan0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  sources: 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  services: dhcpv6-client kdeconnect mdns samba-client ssh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ports: 8000/tcp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  protocols: 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  forward: yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  masquerade: no
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  forward-ports: 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  source-ports: 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  icmp-blocks: 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  rich rules:
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h3 class=&#34;relative group&#34;&gt;反向路径过滤
    &lt;div id=&#34;rpfilter&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#rpfilter&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;
&lt;p&gt;反向路径过滤，简称 rpfilter。这一个功能在 ipv4 时代，是由内核实现的。在&lt;a
  href=&#34;https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt&#34;
    target=&#34;_blank&#34;
  &gt;内核文档&lt;/a&gt;中是这么写的：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;/proc/sys/net/ipv4/* Variables:

rp_filter - INTEGER
	0 - No source validation.
	1 - Strict mode as defined in RFC3704 Strict Reverse Path
	    Each incoming packet is tested against the FIB and if the interface
	    is not the best reverse path the packet check will fail.
	    By default failed packets are discarded.
	2 - Loose mode as defined in RFC3704 Loose Reverse Path
	    Each incoming packet&amp;#39;s source address is also tested against the FIB
	    and if the source address is not reachable via any interface
	    the packet check will fail.

	Current recommended practice in RFC3704 is to enable strict mode
	to prevent IP spoofing from DDos attacks. If using asymmetric routing
	or other complicated routing, then loose mode is recommended.

	The max value from conf/{all,interface}/rp_filter is used
	when doing source validation on the {interface}.

	Default value is 0. Note that some distributions enable it
	in startup scripts.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;顺带一提，&lt;code&gt;ip_forward&lt;/code&gt;也是在这个地方配置的。&lt;/p&gt;
&lt;p&gt;这里告诉我们，&lt;code&gt;0&lt;/code&gt;禁用反向路径过滤，&lt;code&gt;1&lt;/code&gt;开启严格的反向路径过滤（反向路径必须是最佳路由），&lt;code&gt;2&lt;/code&gt;开启宽松的反向路径过滤（只要反向路径路由可达即可）。&lt;/p&gt;
&lt;p&gt;默认是不开启反向过滤的，但是似乎防火墙会给每个网卡加上一个&lt;code&gt;2&lt;/code&gt;？由于目前手上没有无防火墙的机器，暂时无法验证&amp;hellip;&lt;/p&gt;
&lt;p&gt;但是如果你装的是&lt;code&gt;firewalld&lt;/code&gt;，默认的反向过滤是全部严格的。这时得到&lt;code&gt;/etc/firewalld/firewalld.conf&lt;/code&gt;改成这样：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;IPv6_rpfilter&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;loose&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;才能禁用反向路径过滤。由于&lt;code&gt;firewalld&lt;/code&gt;在 nft 中配置的表是只读的，只能由它改写，所以去删掉它的规则或者尝试绕过都是没用的。&lt;del&gt;别骂了别骂了&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Mihomo&lt;/code&gt;会导致出现很多的&lt;code&gt;drop&lt;/code&gt;数据包，其中一部分就是&lt;code&gt;rpfilter&lt;/code&gt;引起的，日志类似这样：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;5月 18 23:18:08 texsd-spin kernel: rpfilter_DROP: IN=Mihomo OUT= MAC= SRC=2a01:04f9:3081:4e4b:0000:0000:0000:0002 DST=fdfe:dcba:9876:0000:0000:0000:0000:0001 LEN=80 TC=0 HOPLIMIT=64 FLOWLBL=1037094 PROTO=TCP SPT=443 DPT=22000 WINDOW=64260 RES=0x00 ACK SYN URGP=0 
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;导致所有的&lt;code&gt;ipv6&lt;/code&gt;能&lt;code&gt;ping&lt;/code&gt;通但是无法访问，改成宽松后解决。&lt;/p&gt;

&lt;h3 class=&#34;relative group&#34;&gt;管理
    &lt;div id=&#34;管理&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e7%ae%a1%e7%90%86&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h3&gt;

&lt;h4 class=&#34;relative group&#34;&gt;禁用日志
    &lt;div id=&#34;禁用日志&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e7%a6%81%e7%94%a8%e6%97%a5%e5%bf%97&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h4&gt;
&lt;p&gt;这是一个标准选项，所以不需要加&lt;code&gt;--permanent&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;我比较建议把日志调成&lt;code&gt;unicast&lt;/code&gt;。否则如果你局域网中广播的设备很多的话，&lt;code&gt;journalctl&lt;/code&gt;会被淹没。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo firewall-cmd --set-log-denied&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;unicast
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h4 class=&#34;relative group&#34;&gt;其他
    &lt;div id=&#34;其他&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e5%85%b6%e4%bb%96&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h4&gt;
&lt;p&gt;我觉得&lt;code&gt;firewalld&lt;/code&gt;的 man page 写得很清晰，去看它是一个很好的选择。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;man &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; firewall-cmd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;h2 class=&#34;relative group&#34;&gt;总结
    &lt;div id=&#34;总结&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;
    
    &lt;span
        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;
        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#%e6%80%bb%e7%bb%93&#34; aria-label=&#34;锚点&#34;&gt;#&lt;/a&gt;
    &lt;/span&gt;
    
&lt;/h2&gt;
&lt;p&gt;目前来说个人主机拥抱 firewalld + nftables 更加合适，因为它们提供了更灵活的规则，也拥有更高效的性能。但是服务器上不建议安装 firewalld，因为很多软件是直接通过添加 nftables 规则的，还有很大一部分老软件会添加 iptables 规则。当然 nftables 也做了兼容，&lt;code&gt;iptables-nft&lt;/code&gt;这个包会把 iptables 类的指令自动翻译成 nftables 规则进行加载。此外，&lt;code&gt;iptables-translate&lt;/code&gt;可以把 iptables 指令翻译成 nftables，便于学习和迁移。&lt;/p&gt;
&lt;p&gt;nftables 是未来的防火墙！&lt;del&gt;但是目前直接使用的真的太少了&lt;/del&gt;&lt;/p&gt;
</description>
      
    </item>
    
  </channel>
</rss>
