我今天才第一次开始深入研究 iptables,所以对任何天真表示歉意。
作为参考,我正在使用
- Ubuntu 22.04.4 LTS(果酱水母)
- iptables v1.8.7 (nf_tables)
- UFW 0.36.1
现在,我知道(或者更确切地说,最近了解到)ufw 只是 iptables 的包装。我决定想要了解幕后发生的事情,所以我开始阅读和探索。我似乎无法理解 iptables 如何与 ufw 一起处理数据包。让我们从INPUT
链开始,我相信这是任何传入数据包都会开始的地方。
Chain INPUT (policy DROP)
target prot opt source destination
ufw-before-logging-input all -- anywhere anywhere
ufw-before-input all -- anywhere anywhere
ufw-after-input all -- anywhere anywhere
ufw-after-logging-input all -- anywhere anywhere
ufw-reject-input all -- anywhere anywhere
ufw-track-input all -- anywhere anywhere
我觉得如果我正确理解了一切,那么这里的第一行ufw-before-logging-input all -- anywhere anywhere
意味着从任何地方、任何端口进入的任何数据包都将被传递到链中ufw-before-logging-input
。如果它从该链返回而没有被接受、丢弃或拒绝,那么它将被传递到下一个链,在这种情况下ufw-before-input
,依此类推,直到它被接受、丢弃或拒绝(即。 ,直到遇到终止操作)。
好的,让我们看看任何数据包将传递到的第一个链,ufw-before-logging-input
。
Chain ufw-before-logging-input (1 references)
target prot opt source destination
这里实际上什么都没有,所以我们继续讨论ufw-before-input
链条
Chain ufw-before-input (1 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ufw-logging-deny all -- anywhere anywhere ctstate INVALID
DROP all -- anywhere anywhere ctstate INVALID
ACCEPT udp -- anywhere anywhere udp spt:bootps dpt:bootpc
ufw-not-local all -- anywhere anywhere
ACCEPT udp -- anywhere host.name udp dpt:mdns
ACCEPT udp -- anywhere w.x.y.z udp dpt:num
ufw-user-input all -- anywhere anywhere
这就是我感到困惑的地方。第一行看起来我们只是接受任何数据包,ACCEPT all -- anywhere anywhere
但是......我的防火墙规则有效,它们阻止流量。
那么,我在这里缺少什么?
(注意,尝试将其发布在堆栈溢出,但他们把我送到了这里。只需包含此内容,以防万一您通过 Google 搜索并发现此内容在其他地方重复。)
答案1
那么,我在这里缺少什么?
这-v
选项为了冗长的:
详细输出。这个选项使 list 命令显示接口名称、规则选项(如果有)和 TOS 掩码。还列出了数据包和字节计数器,[...]
您可能使用过类似的东西:
# iptables -L ufw-before-input
Chain ufw-before-input (1 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ufw-logging-deny all -- anywhere anywhere ctstate INVALID
DROP all -- anywhere anywhere ctstate INVALID
[...]
不会显示界面。相反-v
:
# iptables -v -L ufw-before-input
Chain ufw-before-input (1 references)
pkts bytes target prot opt in out source destination
6 504 ACCEPT all -- lo any anywhere anywhere
12 1032 ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED
0 0 ufw-logging-deny all -- any any anywhere anywhere ctstate INVALID
0 0 DROP all -- any any anywhere anywhere ctstate INVALID
[...]
可以看到ACCEPT规则是针对输入接口的lo
:无条件允许环回交通,以及仅有的从lo
界面。其他任何事情都会继续链遍历。
无论如何,这种格式并不真正适合再现性,特别是在问答中显示规则集时。检查特殊(例如:具有记忆状态)匹配或目标的状态可能仍然有用。更好地使用其中之一iptables -S
或者iptables-save
(对于整个规则集或至少整个表)。
# iptables -S ufw-before-input
-N ufw-before-input
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP
[...]
iptables -S
还可以接受-v
在其他状态中显示计数器的选项。同样iptables-save
使用 use显示计数器iptables-save -c
。iptables-save
旨在提供适合iptables-restore
允许保存和恢复规则集的输出。还可以使用两次-v
(例如:-vv
) withiptables
显示附加调试信息。