目录
一、Linux防火墙基础
Linux 的防火墙体系主要工作在网络层,针对 TCP/IP 数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。
体现在对包内的 IP 地址、端口等信息的处理上
Linux 系统的防火墙基于内核编码实现,具有非常稳定的性能和极高的效率,也因此获得广泛的应用
1、防火墙的分类
包过滤防火墙:网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),通过检查数据流每个数据的源地址,目的地址,所有端口号和协议状态等因素,或他们的组合来确定谁都允许该数据包通过。
优点:对用户来说透明,处理速度快且易于维护缺点:无法检查应用层数据,如病毒等
缺点:无法检查应用层数据,如病毒等
应用层防火墙:应用层防火墙/代理服务型防火墙,也成为代理服务器。将所有跨越防火墙的网络通信链路分为两段。内外网用户的访问都是通过代理服务器上的“链接”来实现优点:在应用层对数据进行检测比较安全。
缺点:增加防火墙的负载
二、防火墙工具iptables/nftables概述
2.1netfilter
是内核的一部分,由一些数据包过滤表组成,不以程序文或文件的形式存在
这些表包含内核用来控制数据包过滤处理的规则集
属于“内核态”(Kernel Space,又称为内核空间)的防火墙功能体系
2.2 iptables
是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录
属于“用户态”(User. Space,又称为用户空间) 的防火墙管理体系
iptables是基于内核的防火墙,其中内置了raw、mangle、 nat和filter四个规则表。表中所有规则配置后,立即生效,不需要重启服务
2.3netfilter/iptables的区别
netfilter:指的是Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于内核态(Kernel Space,又称为内核空间)的防火墙功能体系。
iptables:指的是用来管理Linux防火墙的命令程序,通常位于/sbin/iptables目录下,属于用户态(User Space,又称用户空间)的防火墙功能体系。
2.4 包过滤的工作层次
- 主要事网络层,针对IP数据包
- 体现在对包内的IP地址、端口等信息的处理上
2.5 iptables的表、链结构
iptables的作用是为包过滤机制的实现提供规则(或称为策略),通过各种不同的规则,告诉 netfilter 对来自某些源、前往某些目的或具有某些协议特征的数据包应该如何处理
netfilter/iptables 后期简称为 iptables
为了更方便地组织和管理防火墙规则,iptables 采用了“表”和“链”的分层结构,且表中所有规则配置后,立即生效,不需要重启服务
三、iptables
3.1、概述:
Linux 的防火墙体系主要工作在网络层,针对 TCP/IP 数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。Linux 系统的防火墙体系基于内核编码实现, 具有非常稳定的性能和高效率,也因此获得广泛的应用。
netfilter/iptables:IP 信息包过滤系统,它实际上由两个组件 netfilter 和 iptables组成。 主要工作在网络层,针对IP数据包,体现在对包内的IP地址、端口等信息的处理。
3.2、iptables四表五链
ptables的作用是为包过滤机制的实现提供规则,通过各种不同的规则,告诉netfilter对来自某些源,前往某些目的或具有某些协议特征的数据包应该如何处理,为了更加方便的组织和管理防火墙规则。
iptables采用了表和链的分层结构,所以它会对请求的数据包的包头数据进行分析,根据我们预先设定的规则进行匹配来决定是否可以进入主机。
其中,每个规则表相当于内核空间的一个容器,根据规则集的不同用途划分为默认的四个表,在每个表容器内又包括不同的规则链,根据处理数据包的不同时机划分为五种链
四表 | |
raw | 主要用来决定是否对数据包进行状态跟踪包含两个规则OUTPUT,PREROUTING |
mangle | 修改数据包内容,用来做流量整形的,给数据包设置标记,包含五个规则链:INPUT、oUTPUT、FORWARD、PREROUTING、POSTROUTING |
nat | 负责网络地址转换,用来修改数据包中的源、目标地址和端口,包含三个规则链:oUTPUT、PREROUTING、POSTROUTING |
filter | 负责过滤数据包,确定是否放行该数据包(过滤),包含三个表链:PREROUTING、POSTROUTING、OUTPUT |
注:在iptables 的四个规则表中,mangle 表 和raw表的应用相对较少
五链 | |
INPUT | 处理出战数据包,一般不在此链上做配置 |
OUTPUT | 处理转发数据包,匹配流经本机的数据包 |
FORWORD | 处理转发数据包,匹配流经本机的数据包 |
PREROUTING | 在进行路由选择钱处理数据包,用来修改目的地址,用来DNAT。相当于把内网 服务器的IP和端口映射到路由的外网IP和端口上。 |
POSTROUTING | 在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通 过路由器NAT转换功能实现内网主机通过一个公网IP地址上网 |
3.3数据包过滤的匹配流程
iptables 管理着四个默认表和五种链,各种防火墙规则依次存放在链中
3.4规则表之间的匹配顺序
当数据包抵达防火墙时,优先顺序为(如果存在):
raw >> mangle >> nat >> filter
3.5规则链之间的顺序
根据规则链的划分原则,不同链的处理时机是比较固定的,因此规则链之间的应用顺序取决于数据包的流向
1.入站数据流向:
来自外界的数据包到达防火墙后,首先被 PEROUTING 链处理(是否修改数据包地址等),然后进行路由选择(判断该数据包应该发往何处);如果数据包的目标地址是防火墙本机,那么内核将其传递给 INPUT 链进行处理(决定是否允许通过),通过后再交给系统上层的应用程序进行相应
2.转发数据流向:
来自外界的数据包到达防火墙后,首先被 PREOUTING 链处理,然后再进行路由选择;如果数据包的目标地址是其他外部地址,则内核将其传递给 FORWARD 链进行处理(允许转发、拦截或丢弃),最后交给 POSTROUTING 链进行处理(是否修改数据包的地址等)
3.出站数据流向:
防火墙本机向外部地址发送数据包,首先被 OUTPUT 链处理,然后进行路由选择,再交给 POSTROUTING 链进行处理(是否修改数据包的地址等)
3.6规则链内部各条防火墙规则之间的顺序
当数据包经过每条规则链时,自上向下按顺序依次进行检查,找到相匹配的规则即停止(LOG策略例外,表示记录相关日志)
若在该链内找不到相匹配的规则,则按该链的默认策略处理(未修改的状况下,默认策略为允许)
四、iptables工具使用
4.1、安装iptables
在安装之前我们需要先关闭自带的firewalld防火墙,再装iptables
关闭firewalld防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
安装iptables 防火墙
yum -y install iptables iptables-services
设置iptables开机启动
iptables防火墙的配置方法:
- 使用iptables命令行
- 使用system-config-firewall centso7不能使用 centos 6可以使用
4.2 iptables基本语法
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
#表名、链名:用来指定iptables命令所操作的表和链,未指定表名时将默认使用filter表;
#管理选项:表示iptables规则的操作方式,如插入、增加、删除、查看
#匹配条件:用来指定要处理的数据包的特征,不符合指定条件的数据包将不会处理
#控制类型指的是数据包的处理方式,如允许、拒绝、丢弃等
注意事项
- 不指定表名时,默认指filter表
- 不指定链名时,默认指表内的所有链
- 除非设置链的默认策略,否则必须指定匹配条件
- 选项、链名、控制类型使用大写字母,其余均为小写
4.3 数据包的常见控制类型
对于防火墙,数据包的控制类型非常关键,直接关系到数据包的放行、封堵及做相应的日志记录等。在 iptables 防火墙体系中,最常用的几种控制类型如下。
ACCEPT | 允许数据包通过 |
DROP | 直接丢弃数据包,不给出任何回应信息 |
REJECT | 拒绝数据包通过,必要时会给数据发送端一个响应信息 |
LoG | 在lvarlog/messages文件中记录日志信息,然后将数据包传递给下一条规则 |
SNAT | 修改数据包的源地址 |
DNAT | 修改数据包的目的地址 |
MASQUERADE | 伪装成一个非固定公网IP地址 |
防火墙规则的“匹配即停止”对于 LOG 操作来说是一个特例,因为 LOG 只是一种辅助 动作,并没有真正处理数据包。 注:需要大写
4.4 iptables 命令的常用管理选项
管理选 项 | 用法示例 |
-A | 在指定链末尾追加—条iptables -A INPUT(操作) |
-l | 在指定链中插入—条新的,未指定序号默认作为第—条iptables -l INPUT(操作) |
-P | 指定默认规则iptables -P OUTPUT ACCEPT(操作) |
-D | 删除iptables -t nat -D INPUT2(操作) |
-p | 服务名称 |
-R | 修改、替换某一条规则iptables -t nat -R INPUT(操作) |
-L | 查看iptables -t nat-L(查看) |
-n | 所有字段以数字形式显示(比如任意ip地址是0.0.0.0而不是 anywhere,比如显示协议端口号而不是服务名)iptables -L- n,iptables -nL,iptables -vnL(查看) |
-v | 查看时显示更详细信息,常跟-L一起使用(查看) |
--line- number | 规则带编号iptables -t nat -L-n --line-number /iptables -t nat -L -- line-number |
-F | 清除链中所有规则iptables -F(操作) |
-X | 清空自定义链的规则,不影响其他链iptables -x |
-Z | 清空链的计数器(匹配到的数据包的大小和总和)iptables -z |
-S | 看链的所有规则或者某个链的规则/某个具体规则后面跟编号 |
4.5添加新的规则(规则表从上到下)
添加新的防火墙规则时,使用管理选项“-A”、“-I”,前者用来追加规则,后者用来插入规则。
例如,若要在 filter 表 INPUT 链的末尾添加一条防火墙规则,可以执行以下操作(其中 “-p 协议名”作为匹配条件)。