iptables - 记录新连接

iptables - 记录新连接

配置:Internet——[eth0——wlan0]——设备。

我正在尝试检测来自互联网、发往无线网络设备的“新连接”数据包。

我尝试了以下方法(以及其他一些组合),但没有成功。

% iptables -A FORWARD -i eth0 -o wlan0 -m state --state NEW -j LOG

任何指点都值得赞赏。

根据要求,这是 iptables-save 的输出:

% iptables-save
# Generated by xtables-save v1.8.2 on Mon Mar  1 13:55:42 2021
*filter
:INPUT ACCEPT [448:96744]
:FORWARD ACCEPT [642:55726]
:OUTPUT ACCEPT [195:18496]
COMMIT
# Completed on Mon Mar  1 13:55:42 2021
# Generated by xtables-save v1.8.2 on Mon Mar  1 13:55:42 2021
*nat
:PREROUTING ACCEPT [155570:16184887]
:INPUT ACCEPT [124785:11715304]
:POSTROUTING ACCEPT [1126:93169]
:OUTPUT ACCEPT [13705:987253]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Mon Mar  1 13:55:42 2021
# Generated by xtables-save v1.8.2 on Mon Mar  1 13:55:42 2021
*raw
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed on Mon Mar  1 13:55:42 2021





答案1

您的规则考虑通过 进入路由器的数据包eth0,这些数据包被路由到 输出wlan0,并且新的从连接跟踪器的角度来看。

什么是新的? 这基本上不是预期的或者保证或者回复等等。当数据包通过连接跟踪器时,它会在其状态表中进行搜索。该表包含源和目标地址和端口、状态、数据包以任何方式传输的时间戳、通过此连接传输的数据量。如果数据包头数据对应于表中的某个记录,则该记录会更新(例如,“预期”可能变为“保证”),并为数据包分配一个连接标签。此数据包不会在纳特表;相反,如果在连接跟踪器表记录中记录了一些转换,则应用这些转换。当然,这个数据包将不是被视为开始新的联系。

但是,如果在表中找不到任何相关内容,则会创建一个新记录,数据包将通过纳特表,并为其分配一个新的连接标签。

顺便说一句,-m state是过时的语法。现代的 is-m conntrack和它的--ctstate参数。(现在两者似乎由同一个模块处理,但历史上它们是 Netfilter 中的不同模块。)


现在,想想数据包是如何通过你的路由器的。Netfilter 数据包流图在这里非常有用。因此,让我们假设后面有人wlan0发起与互联网的连接。然后一些数据包从出现wlan0,它首先被记录到连接跟踪器中,然后路由器希望将其路由到通过输出eth0。然后它遍历一个filter FORWARD链,在那里它会根据您的“日志记录”规则进行检查(显然它不适用)。然后它遍历nat POSTROUTING,在那里它遇到一个MASQUERADE规则。它被规则 SNAT,并且连接跟踪器记录会使用转换信息更新,因此后续操作将被转换,并且回复将被检测并转换回来。然后它从输出eth0

任何回复或后续数据包都将分配给此连接跟踪器记录,并将不是被标记为新的。它们将被标记为已确立的,所以他们会不是触发您的“日志记录”规则。

另外,如果已知该连接是 FTP 控制(tcp 到端口 21),并且ftp 连接跟踪器助手启用后,它将扫描此连接的所有后续数据包以查找 FTP 数据连接参数(这是简化的解释,但正确)。如果它看到它们,帮助程序将创建另一个连接跟踪器条目,其中包含从 FTP 控制数据包中捕获的数据。连接是在有关的状态;因此,当 FTP 服务器重新连接到客户端以建立数据连接时,该连接的第一个数据包将不是被标记新的, 但有关的确实如此不是也触发你的“日志记录”规则。


是否有可能任何通过 进入的数据包都eth0必须从 输出,wlan0并且不会响应从内部发起的连接?是的。后面的某个系统必须通过eth0分配给路由器 的地址路由到后面的网络。然后,如果该系统尝试使用该路由并将数据包发送到 wlan0 网络的地址(而不是路由器的地址),则此类数据包wlan0eth0将要触发您的“日志记录”规则。

您的设置中是否有这样的系统?我不知道,但通常没有:如果有路由面向您的 wlan0 网络,您不会安装 NAT 规则,在这种情况下 NAT 不需要回复。所以我认为这不太可能,但有可能。

另一种可能性是 DNAT 情况。假设您想将路由器的某些端口转发到内部的某台机器,例如,将 tcp 端口 80 转发到 wlan0 后面某处的 Web 服务器。然后您将安装如下规则:iptables -A PREROUTING -d <eth0-address> -p tcp --dport 80 -j DNAT --to-destination <webserver-behind-wlan0-address>。发往 eth0 地址端口 80 的 tcp 数据包将被记录到 NAT 表中并被标记为新的,目标地址更改为 wlan0 后面的某个地址,然后路由将决定它必须通过 wlan0 发送出去。因此它将遍历filter FORWARD,在那里它将要触发“记录”规则。后续数据包将已确立的,所以它们不会触发该规则。

但您没有 DNAT 规则。因此这种情况无法奏效。


结论:我假设您的 eth0 后面没有通过路由器路由到 wlan0 后面网络的系统,并且您也没有 DNAT 规则。您的网络中不会有任何数据包可以触发此“日志记录”规则。

我在对你的问题的第一个评论中已经得出了这个结论,这里只是对我如何得出这个结论的详细解释。

相关内容