使用 C 套接字编程侦听传入数据"behind"还是"after"防火墙?



最近我一直在研究使用C语言进行网络套接字编程。我想知道我是否编写了一个程序来侦听传入数据,这是"在防火墙之前"还是"在防火墙之后"?

我所理解的是,像nginx、lighttpd或cherokee这样的网络服务器使用套接字编程来监听数据,但我可以设置一个像(OpenBSD的)"pf"这样的防火墙来控制传入的数据,所以C中的套接字编程似乎是在防火墙之后。

但是,如果这是真的,那么防火墙是如何编写的呢?他们如何监听来自特定端口的传入数据?

防火墙由内核在网络代码的不同部分实现。从本质上讲,它相当于一组"钩子"(可以通过内核空间或用户空间访问,也可以同时通过两者访问),用于通知活动。

该活动可以是传入(入口)或传出(出口),具体取决于数据包的发起人。对于每个数据包,通常是有状态的、面向连接的协议的每个连接,防火墙都有机会重写、否决(例如返回错误)或只是无声地丢弃给定的数据包或连接。(实现方式各不相同,可用的操作可能更复杂)。

关键是接口与普通的套接字接口大不相同——你被告知事情正在发生,并被问到你想做什么,但你没有得到通常用于套接字编程的接受/监听/连接风格的接口。

例如,在Linux上,防火墙被实现为该数据包流图中的输入/输出"过滤器"框,而套接字代码发生在顶部标记为"协议/应用程序层"的红色层

相关内容

最新更新