linux 防火墙 认知

写博客的目的,一来是巩固所学知识,与大家分享交流经验;二来是记下暂时认知,待往后推翻昔日认知。如若有原理不对之处,欢迎大家指正。


本篇要解决2个疑问:

防火墙的作用

防火墙的工作原理


一 防火墙作用(目前我使用的)

大体可分为两种,网络地址转换(net)和数据包过滤(filter)。

1 网络地址转换:它存在的必要性是因为ipv4地址不够用了,而且内网地址不能在外网中传播。

1.1 现网中常见的是多台服务器共用一个ip,那么如何去区分这些共用一个ip的服务器呢?用的就是目的地址转化功能。将访问某个公网ip的某个端口,经过防火墙的作用后,转发到内网的一个ip+port上,实现访问。

1.2 如果只有一个公网ip(或其它可入以太网的ip),又有多台设备需要上网,就需要用到源地址转化功能。用一台设备(A)使用那个公网ip,并充当其它设备的网关,其它设备用内网ip。当要发往以太网的数据走到设备A时,设备A改变该数据的源地址为公网ip,那么数据就出去了。这就是路由器的实现策略。

2 数据包过滤: 对于一些恶意的攻击,可以通过一些过滤规则去丢掉它;亦或是一些敏感的端口,可以丢弃掉访问的数据;亦可以是限制住内网设备访问某些网站等,诸如此类过滤。


二 防火墙的工作原理

防火墙是由 Netfilter子系统 + iptables设定的规则构成。Netfilter子系统在5个地方设置了监听点,分别是PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING,如下图(引用了别人的图,这图讲解得非常清晰):

linux 防火墙 认知

PREROUTING:对应刚从网口进来的数据包

INPUT:对应目的地址是本设备的数据包

FORWARD:对应目的地址是其它设备的数据包,经过这里只是做转发功能

OUTPUT:对应本设备发出去的数据包

POSTROUTING:对应要从网口发出去的包


Netfilter子系统在此5处(术语叫链)设下监听点,当数据到达其中一个链时,Netfilter会去查找几个表中是否有对该链进行设置的规则,有的话就去实践这些规则。这几个表就是filter表(实现包过滤)、nat表(实现网络地址转换)、mangle表(实现包修改)、raw表(实现数据跟踪),Netfilter对这些个婊做了优先级: raw > mangle > nat > filter,会先去处理raw对该链设置的规则,再者是mangle,然后是nat,最后是filter。

规则从哪里来?iptables 就是干这个事的。iptables是用户设置防火墙规则的一个工具,用它可以对这4个表、5个链进行规则的设定。而真正应用这些规则的,是Netfilter子系统。


以上是对linux防火墙作用及原理的讲解,往后将围绕着iptables规则的设置去展开。