标题索引


  • 追溯原因

  • 问题剖析


追溯原因:

    当下培训机构层出不群,质量有高有底,培训内容和项目经历不进相同,导致多数技术人员技术层次不经相同,故在某项目中客户运维部反馈我老东家的防火墙按照常规配置策略无法生效,因做过讲师的缘故,受邀对客户运维部进行防火墙相关安全培训,考虑到运维部人员有网络基础,因此追根溯源决定从Linux内核防火墙讲起,过度到企业应用防火墙,最后深刻理解防火墙原理。

问题剖析:

    根据多年工作经验,多数网络工程师对Linux内核理解不够深刻,包括我自己本身,因此要熟悉防火墙的底层工作原理必须熟悉Linux内核,因为国内多数网络产品基于Linux内核进行二次开发。

    下面总结此次相互学习的要领:

    1.防火墙的分类?

    简答:防火墙从网络结构的位置上化分为主机防火墙和网络防火墙,主机防火墙在centos6版本中采用iptables管理工具进行管理,在centos7版本中采用iptables和firewalld管理工具进行管理,对应到企业网络防火墙的管理多数采用firewalld进行的二次开发,因此只需掌握firewalld即可掌握企业网络防火墙。

    2.防火墙处于系统内核空间还是用户空间?

    简答:防火墙功能在内核中功能某块叫filter,通过查看编译配置文件可知防火墙是处于内核空间的程序。

[ root@centos6 boot ]#cat config-2.6.32-696.el6.x86_64 |grep  -A 10 "IP: Netfilter Configuration"
# IP: Netfilter Configuration
#
CONFIG_NF_DEFRAG_IPV4=m
CONFIG_NF_CONNTRACK_IPV4=m
# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
CONFIG_IP_NF_QUEUE=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_MATCH_ADDRTYPE=m
CONFIG_IP_NF_MATCH_AH=m
CONFIG_IP_NF_MATCH_ECN=m
CONFIG_IP_NF_MATCH_TTL=m

    3.Linux系统中防火墙与iptables的关系?

    简答:防火墙filter处于内核空间,管理防火墙的策略任需用户空间工具,此时就用到用户空间的iptables和firewalld相关管理工具,但仅仅是管理工具,包括在系统中进行如下操作:

[ root@centos6 ~ ]#service iptables stop
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
 
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

    仅仅是关闭默认策略,关闭默认策略不代表关闭防火墙功能

    4.防火墙的基本原理?

    简答:防火墙的功能基本四表五链,一切围绕四表五链进行分析,即可知晓其中工作原理奥妙,具体可参考下图

8d9d029668b5b55e51db46a81d99199d.jpg

    任何一个接口数据流上双向的,有流入数据包和流程数据包,对于流入的数据包首先经过PREROUTING链进行相关动作进入本机,与本机路由表进行匹配,若目标IP是本机地址,经过INPUT链到达用户空间,若目标IP地址并非本机,匹配路由条目进行路由选择,转交FORWORD链处理,同样在出去时有OUTPUT链和POSTROUTING链对数据包进行相关操作。

    5.防火墙为什么主动出去的数据包能够回来,外网主动进行确无法连通

    简答:因为防火墙可以基于状态分析,在启用状态分析功能时需加载nf_conntrack模块(默认已加载),如若需要跟踪ftp协议主动和被动传输则任需加载对应nf_conntrack_ftp模块,有此类模块支持时,才可以通过基于状态进行检测,具体状态有如下:

    NEW:新建会话,即第一次发起会话,如TCP三次握手模式,发出的第一个包即新的会话;

    ESTABLISHED:已经建立起的会话,如TCP三次握手发出第一个包后,就进入ESTABLISHED状态;

    RELATED:新发起的连接,但是链接与之前建立的链接有关系;

    INVALID:无效的链接,如防火墙检测TCP链接的完整性,TCP通讯不完整时可设置阻断策略,因此在网络架构的设计中防止数据在负载均衡时,流量分别走两台防火墙,此时防火墙检测TCP链接不完整,误报为无效链接进行阻断。

    UNTRACKED:为进行追踪的链接,如关闭raw表后均体现为UNTRACKED。

    在centos6中默认防火墙策略如下,在INPUT方向基于已建立的会话和关联的会话进行放行,OUTPUT则无策略,因此系统默认情况下主动访问外网不受限制。

[ root@centos6 netfilter ]#iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    6   396 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
    2   305 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

Chain OUTPUT (policy ACCEPT 5 packets, 636 bytes)
 pkts bytes target     prot opt in     out     source               destination

    6.FIREWALLD与iptables的底层关系?

    FIREWALLD其本质就是调用iptables命令,引入ZONE