ubuntu系统关闭防火墙命令 ubuntu防火墙设置( 二 )


  • 涉及功能:conntrack、mangle、DNAT、filter
NF_IP_POST_ROUTING所有数据报,包括源地址为本地主机和非本地主机的,在通过网络设备离开本地主机之前,在IP数据报发送函数ip_finish_output()(位于net/ipv4/ip_output.c,Line184)的最后经过这个HOOK 。经过这个HOOK处理后,数据报进入ip_finish_output2()(位于net/ipv4/ip_output.c,Line160)另外,在函数ip_mc_output()(位于net/ipv4/ip_output.c,Line195)中在克隆新的网络缓存skb时,也经过了这个HOOK进行处理 。
  • 涉及功能:mangle、SNAT、conntrack
其中,入口为net_rx_action()(位于net/core/dev.c,Line1602),作用是将数据报一个个地从CPU的输入队列中拿出,然后传递给协议处理例程 。
出口为dev_queue_xmit()(位于net/core/dev.c,Line1035),这个函数被高层协议的实例使用,以数据结构struct sk_buff *skb的形式在网络设备上发送数据报 。
iptablesiptables提供了管理员与netfilter的交互接口,iptables是按照规则来办事的,所谓规则其实就是网络管理员预定义的条件,规则一般的定义为”如果数据包头符合这样的条件,就这样处理这个数据包” 。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等 。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等 。配置防火墙的主要工作就是添加、修改和删除这些规则 。
四表五链iptables的规则组成,又被称为四表五链
5种默认规则链防火墙的作用就在于对经过的报文匹配”规则”,然后执行对应的”动作” 。所以,当报文经过这些关卡(HOOK—或者说是钓鱼台)的时候,则必须匹配这个关卡上的规则,但是,这个关卡上可能不止有一条规则,而是有很多条规则,当我们把这些规则串到一个链条上的时候,就形成了”链” 。所以,每个经过这个”关卡”的报文,都要将这条”链”上的所有规则匹配一遍(满足其中条规规则,则跳出这个规则链匹配,否则匹配到链上的最后一条规则),如果有符合条件的规则,则执行规则对应的动作 。
iptables涉及5种默认规则链,从应用时间点的角度理解这些链:
  • INPUT链:当接收到防火墙本机地址的数据包(入站)时,应用此链中的规则 。
  • OUTPUT链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则 。
  • FORWARD链:当接收到需要通过防火墙发送给其他地址的数据包(转发)时,应用此链中的规则 。
  • PREROUTING链:在对数据包作路由选择之前,应用此链中的规则,如DNAT 。
  • POSTROUTING链:在对数据包作路由选择之后,应用此链中的规则,如SNAT 。
iptables的四张表我们在每个”链”上都放置了一串规则,但是这些规则有些很相似,比如,A类规则都是对IP或者端口的过滤,B类规则是修改报文,那么这个时候,我们把具有相同功能的规则的集合叫做”表” 。从而使不同功能的规则,我们可以放置在不同的表中进行管理,而iptables已经为我们定义了4种表,每种表对应了不同的功能,而我们定义的规则也都逃脱不了这4种功能的范围
  • filter表
主要用于对数据包进行过滤,根据具体的规则决定是否放行该数据包(如DROP、ACCEPT、REJECT、LOG) 。filter 表对应的内核模块为iptable_filter,包含三个规则链:
INPUT链:INPUT针对那些目的地是本地的包FORWARD链:FORWARD过滤所有不是本地产生的并且目的地不是本地(即本机只是负责转发)的包OUTPUT链:OUTPUT是用来过滤所有本地生成的包

推荐阅读