简单说,firewalld是新的防火墙管理工具,iptables是过去的管理工具,两者都是linux提供给用户的操作界面,真正的执行者是netfilter.
netfilter
Linux 2.4开启的防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤、数据包处理、地址伪装、透明代理、动态网络地址转换(Network Address Translation,NAT),以及基于用户及媒体访问控制(Media Access Control,MAC)地址的过滤和基于状态的过滤、包速率限制等。iptables/Netfilter的这些规则可以通过灵活组合,形成非常多的功能、涵盖各个方面,这一切都得益于它的优秀设计思想。
netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:
- 网络地址转换(NAT)
- 数据包内容修改(mangle)
- 以及数据包过滤的防火墙功能(filter)
- 连接跟踪模块(conntrack)
netfilter在Linux系统中的5个钓鱼台(或是说5个钩子):
netfilter为多种网络协议(IPv4、IPv6、ARP等)各提供了一套钩子函数(HOOK)。
在IPv4中定义了5个钩子函数(如上图所示),这些钩子函数在数据包流经协议栈的5个关键点被调用。这就像有5个钓鱼台,在每个钓鱼台放了一个鱼钩(HOOK),把经过的数据包钓上来,然后根据自定义的规则,来决定数据包的命运:
可以原封不动的放回IPv4协议,继续向上层递交;可以进行修改,再放回IPv4协议;也可以直接丢弃。
netfilter主要采用连接跟踪(Connection Tracking)、包过滤(Packet Filtering)、地址转换(NAT)、包处理(Packet Mangling)四种技术。
NF_IP_PRE_ROUTING
数据报在进入路由代码被处理之前,数据报在IP数据报接收函数ip_rcv()(位于net/ipv4/ip_input.c,Line379)的最后,也就是在传入的数据报被处理之前经过这个HOOK。在ip_rcv()中挂接这个HOOK之前,进行的是一些与类型、长度、版本有关的检查。经过这个HOOK处理之后,数据报进入ip_rcv_finish()(位于net/ipv4/ip_input.c,Line306),进行查路由表的工作,并判断该数据报是发给本地机器还是进行转发。 在这个HOOK上主要是对数据报作报头检测处理,以捕获异常情况。
- 涉及功能(优先级顺序):conntrack、mangle、DNAT
NF_IP_LOCAL_IN
目的地为本地主机的数据报在IP数据报本地投递函数ip_local_deliver()(位于net/ipv4/ip_input.c,Line290)的最后经过这个HOOK。经过这个HOOK处理之后,数据报进入ip_local_deliver_finish()(位于net/ipv4/ip_input.c,Line219)。 这样,iptables模块就可以利用这个HOOK对应的INPUT规则链表来对数据报进行规则匹配的筛选了。防火墙一般建立在这个HOOK上。
- 涉及功能:mangle、filter、SNAT、conntrack
NF_IP_FORWARD
目的地非本地主机的数据报,包括被NAT修改过地址的数据报,都要在IP数据报转发函数ip_forward()(位于net/ipv4/ip_forward.c,Line73)的最后经过这个HOOK。 经过这个HOOK处理之后,数据报进入ip_forward_finish()(位于net/ipv4/ip_forward.c,Line44)。 另外,在net/ipv4/ipmr.c中的ipmr_queue_xmit()函数(Line1119)最后也会经过这个HOOK。(ipmr为多播相关,估计是在需要通过路由转发多播数据时的处理)。 这样,IPTables模块就可以利用这个HOOK对应的FORWARD规则链表来对数据报进行规则匹配的筛选了。
- 涉及功能:mangle、filter
NF_IP_LOCAL_OUT
本地主机发出的数据报在IP数据报构建/发送函数ip_queue_xmit()(位于net/ipv4/ip_output.c,Line339)、以及ip_build_and_send_pkt()(位于net/ipv4/ip_output.c,Line122)的最后经过这个HOOK。(在数据报处理中,前者最为常用,后者用于那些不传输有效数据的SYN/ACK包)。经过这个HOOK处理后,数据报进入ip_queue_xmit2()(位于net/ipv4/ip_output.c,Line281)。另外,在ip_build_xmit_slow()(位于net/ipv4/ip_output.c,Line429)和ip_build_xmit()(位于net/ipv4/ip_output.c,Line638)中用于进行错误检测;在igmp_send_report()(位于net/ipv4/igmp.c,Line195)的最后也经过了这个HOOK,进行多播时相关的处理。这样,iptables模块就可以利用这个HOOK对应的OUTPUT规则链表来对数据报进行规则匹配的筛选了。
- 涉及功能: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的形式在网络设备上发送数据报。
iptables
iptables提供了管理员与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是用来过滤所有本地生成的包
- nat表
主要用于修改数据包的IP地址、端口号等信息(网络地址转换,如SNAT、DNAT、MASQUERADE、REDIRECT)。属于一个流的包(因为包的大小限制导致数据可能会被分成多个数据包)只会经过这个表一次。如果第一个包被允许做NAT或masqueraded,那么余下的包都会自动地被做相同的操作,也就是说,余下的包不会再通过这个表。表对应的内核模块为 iptable_nat,包含三个链:
PREROUTING链:作用是在包刚刚到达防火墙时改变它的目的地址
OUTPUT链:改变本地产生的包的目的地址
POSTROUTING链:在包就要离开防火墙之前改变其源地址
- mangle表
主要用于修改数据包的ToS(Type Of Service,服务类型)、TTL(Time To Live,生存周期)指以及为数据包设置mark标记,以实现Qos(Quality Of Service,服务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。包含五个规则链——PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD。
- raw表
是自1.2.9以后版本的iptables新增的表,主要用于决定数据包是否被状态跟踪机制处理。在匹配数据包时,raw表的规则要优先于其他表。包含两条规则链——OUTPUT、PREROUTING
iptables中数据包和4种被跟踪连接的4种不同状态:
- NEW:该包想要开始一个连接(重新连接或将连接重定向)
- RELATED:该包是属于某个已经建立的连接所建立的新连接。例如:FTP的数据传输连接就是控制连接所 RELATED出来的连接。–icmp-type 0 ( ping 应答) 就是–icmp-type 8 (ping 请求)所RELATED出来的。
- ESTABLISHED :只要发送并接到应答,一个数据连接从NEW变为ESTABLISHED,而且该状态会继续匹配这个连接的后续数据包。
- INVALID:数据包不能被识别属于哪个连接或没有任何状态比如内存溢出,收到不知属于哪个连接的ICMP错误信息,一般应该DROP这个状态的任何数据。
链和表的关系
- PREROUTING 的规则可以存在于:raw表,mangle表,nat表。
- INPUT 的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)。
- FORWARD 的规则可以存在于:mangle表,filter表。
- OUTPUT 的规则可以存在于:raw表mangle表,nat表,filter表。
- POSTROUTING 的规则可以存在于:mangle表,nat表。
规则
根据指定的匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,则由规则后面指定的处理动作进行处理
匹配条件分为基本匹配条件与扩展匹配条件
基本匹配条件:
源地址Source IP,目标地址 Destination IP
扩展匹配条件:
除了上述的条件可以用于匹配,还有很多其他的条件可以用于匹配,这些条件泛称为扩展条件,这些扩展条件其实也是netfilter中的一部分,只是以模块的形式存在,如果想要使用这些条件,则需要依赖对应的扩展模块。
源端口Source Port, 目标端口Destination Port
处理动作
处理动作在iptables中被称为target(这样说并不准确,我们暂且这样称呼),动作也可以分为基本动作和扩展动作。
此处列出一些常用的动作,之后的文章会对它们进行详细的示例与总结:
o ACCEPT:允许数据包通过。
o DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
o REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
o SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
o MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
o DNAT:目标地址转换。
o REDIRECT:在本机做端口映射。
o LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。
ebtables
ebtables和iptables类似,都是Linux系统下网络数据包过滤的配置工具(即功能由内核底层提供支持—netfilter)。ebtables为以太网桥防火墙,工作在数据链路层,制定过滤数据链路层的数据包。
ebtables的配置分为表、链和规则三级。
- 表
表是内置且固定的,共有三种: filter, nat, broute,用-t选项指定。最常用的就是filter了,所以不设-t时默认就是这个表。nat用于地址转换,broute用于以太网桥。
- 链
链有内置和自定义两种 。不同的表内置的链不同,这个从数据包的流程图中就可以看出来。所谓自定义的链也是挂接在对应的内置链内的,使用-j让其跳转到新的链中。
- 规则
每个链中有一系列规则,每个规则定义了一些过滤选项。每个数据包都会匹配这些项,一但匹配成功就会执行对应的动作。
所谓动作,就是过滤的行为了。有四种,ACCEPT,DROP,RETURN和CONTINUE,常用的就是ACCEPT和DROP。
ebtables使用规则如下:
ebtables [-t table] -[ADI] chain rule-specification [match-extensions] [watcher-extensions]
-t table :一般为filter表。
-ADI:A添加到现有链的末尾;D删除规则链(必须指明规则链号);I插入新的规则链(必须指明规则链号)。
-P:规则表的默认规则的设置。可以DROP,ACCEPT,RETURN。
-F:对所有的规则表的规则链清空。
-L:指明规则表。可加参数,--Lc,--Ln
-p:指明使用的协议类型,ipv4,arp等可选(使用时必选)详情见/etc/ethertypes
--ip-proto:IP包的类型,1为ICMP包,6为TCP包,17为UDP包,在/etc/protocols下有详细说明
--ip-src:IP包的源地址
--ip-dst:IP包的目的地址
--ip-sport:IP包的源端口
--ip-dport:IP包的目的端口
-i:指明从那片网卡进入
-o:指明从那片网卡出去
查看列表
root@WIA3300-20:~# ebtables -L
Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 6, policy: ACCEPT
-i ath+ -o ath17 -j DROP
-i ath17 -o ath+ -j DROP
-i ath+ -o ath0 -j DROP
-i ath0 -o ath+ -j DROP
-i ath+ -o ath16 -j DROP
-i ath16 -o ath+ -j DROP
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT
新建规则
ebtables -A FORWARD -p ipv4 -i eth0/eth1 --ip-proto (6/17) --ip-dst(目的IP) --ip-dport(目的端口) -j DROP
新建/删除链
ebtables -N <chain_name> ebtables -X <chain_name>
firewalld
防火墙守护 firewalld 服务引入了一个信任级别的概念来管理与之相关联的连接与接口。它支持 ipv4 与 ipv6,并支持网桥,采用 firewall-cmd (CLI) 或 firewall-config (GUI) 来动态的管理 kernel netfilter 的临时或永久的接口规则,并实时生效而无需重启服务。
firewalld与iptables的区别:
- firewalld使用安全域和服务的概念,而iptalbes使用链和规则
- iptables服务的配置在/etc/sysconfig/iptables中存储,而firewalld将配置存储在/usr/lib/firewalld/和etc/firewalld/目录下的各种XML文件中
- 使用iptables服务中每一个单独更改意味着清除所有旧有的规则和从/etc/sysconfig/iptables里读取所有新的规则,而使用firewalld却不会再创建任何新的规则,仅运行规则中的不同之处。因此,firewalld可以在运行中,改变配置而不丢失已有连接。
iptables和firewalld只能开一个
zone
· drop: 丢弃所有进入的包,而不给出任何响应
· block: 拒绝所有外部发起的连接,允许内部发起的连接
· public: 允许指定的进入连接
· external: 同上,对伪装的进入连接,一般用于路由转发
· dmz: 允许受限制的进入连接
· work: 允许受信任的计算机被限制的进入连接,类似 workgroup
· home: 同上,类似 homegroup
· internal: 同上,范围针对所有互联网用户
· trusted: 信任所有连接
过滤规则
· source: 根据源地址过滤
· interface: 根据网卡过滤
· service: 根据服务名过滤
· port: 根据端口过滤
· icmp-block: icmp 报文过滤,按照 icmp 类型配置
· masquerade: ip 地址伪装
· forward-port: 端口转发
· rule: 自定义规则
其中,过滤规则的优先级遵循如下顺序
1. source
2. interface
3. firewalld.conf
firewalld的三种配置方法:
firewall-config: firewall-config是图形化工具
firewall-cmd: 命令行工具
直接编辑xml文件
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。