firewall/iptables 如何检查已绑定端口的传入 tcp 流量?

how can firewall/iptables check incoming tcp traffic of already bound ports?

据我所知,只有一个进程可以绑定到同一协议的端口,并且为了将传入信息读取到端口,套接字必须绑定到相关端口。 有没有办法与另一个进程或类似的东西共享套接字?

is there a way of sharing a socket with another process or something like that?

共享一个套接字,因此两个进程之间的端口是可能的(比如在 fork 之后),但这可能不是您想要的数据分析,因为如果一个进程读取数据,另一个进程将不再获取它们。

how can firewall/iptables check incoming tcp traffic of already bound ports?

像 iptables 这样的数据包过滤器在内核中工作,并在数据发送到套接字之前获取数据。甚至根本没有绑定到该特定端口的套接字都没有关系。除非数据包过滤器拒绝将它们原封不动地转发到套接字(如果有的话)的数据。

诸如snort 之类的被动IDS 或诸如tcpdump 之类的工具获取原始数据包,在这里,是否存在套接字也无关紧要。他们只能读取数据包,即不能修改或阻止。

应用程序级防火墙或(反向)代理有自己的套接字并在那里接收数据(直接或由数据包过滤器重定向)。然后他们可以分析数据并将数据(可能在修改后)显式转发给原始应用程序。