目录
前言
在 Internet 中,企业通过架设各种应用系统来为用户提供各种网络服务,如 Web 网站、电子邮件系统、FTP 服务器、数据库系统等。那么,如何来保护这些服务器,过滤企业不需要的访问甚至是恶意的入侵呢?
Linux 系统中的防火墙 netfilter 和 iptables 为了实现该目标而生。Linux 的防火墙体系主要工作在网络层,针对 TCP/IP 数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。Linux 系统的防火墙体系基于内核编码实现, 具有非常稳定的性能和高效率,也因此获得广泛的应用。
一、iptables概述
netfilter/iptables:IP信息包过滤系统,它实际上由两个组件netfilter和iptables组成。主要工作在网络层,针对IP数据包,体现在对包内的IP地址、端口等信息的处理。
1.1 netfilter/iptables关系
netfilter:
(1)属于 “内核态” (kernel space,又称内核空间)的防火墙功能体系
(2)linux 好多东西都分 “内核态” 和 “用户态”,运维人员关注的是用户态,内核态是开发人员需要关心的事情
(3)netfilter 是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集
iptables:
(1)属于 “用户态”(User Space,又称用户空间)的防火墙管理体系
(2)是一种用来管理 Linux 防火墙的命令程序,它使插入、修改和删除数据包和过滤表中的规则变得容易,通常位于 /sbin/iptables 目录下
(3)iptables 是基于内核的防火墙,其中内置了 raw、mangle、nat 和 filter 四个规则表。表中所有规则配置后,立即生效,不需要重启服务。
二、 iptables 的表、链结构
2.1 iptables的四表五链结构介绍
ptables 的作用是为包过滤机制的实现提供规则,通过各种不同的规则,告诉 netfilter 对来自某些源,前往某些目的或具有某些协议特征的数据包应该如何处理,为了更加方便的组织和管理防火墙规则,iptables 采用了表和链的分层结构,所以它会对请求的数据包的包头数据进行分析,根据我们预先设定的规则进行匹配来决定是否可以进入主机。
其中,每个规则表相当于内核空间的一个容器,根据规则集的不同用途划分为默认的四个表,在每个表容器内又包括不同的规则链,根据处理数据包的不同时机划分为五种链。
2.1.1 四表五链
规则表的作用:容纳各种规则链;
表的划分依据:防火墙规则的作用相似;
规则链的作用:容纳各种防火墙规则;
规则的作用:对数据包进行过滤或处理;
链的分类依据:处理数据包的不同时机;
总结:表里有链,链里有规则
2.1.2 四表
raw表:确定是否对该数据包进行状态跟踪。包含两个规则链,OUTPUT、PREROUTING。
mangle表:修改数据包内容,用来做流量整形的,给数据包设置标记。包含五个规则链,INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING。
nat表:负责网络地址转换,用来修改数据包中的源、目标IP地址或端口。包含三个规则链,OUTPUT、PREROUTING、POSTROUTING。
filter表:负责过滤数据包,确定是否放行该数据包(过滤)。包含三个规则链,INPUT、FORWARD、OUTPUT。 注:在 iptables 的四个规则表中,mangle 表和 raw 表的应用相对较少。
2.1.3 五链
INPUT:处理入站数据包,匹配目标IP为本机的数据包。
OUTPUT:处理出站数据包,一般不在此链上做配置。
FORWARD:处理转发数据包,匹配流经本机的数据包。
PREROUTING链:在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。相当于把内网中的80端口映射到路由器外网端口上。
POSTROUTING链:在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网。
2.1.4 默认的表、链结构示意图
数据包到达防火墙时,规则表之间的优先顺序:raw→ mangle→ nat→ filter
2.2 数据包过滤的匹配流程
数据包到达防火墙时,规则表之间的优先顺序:raw→ mangle→ nat→ filter
2.2.1 规则链之间的匹配顺序
主机型防火墙:
入站数据(来自外界的数据包,且目标地址是防火墙本机):PREROUTING -> INPUT -> 本机的应用程序
出站数据(从防火墙本机向外部地址发送的数据包) :本机的应用程序–> OUTPUT --> POSTROUTING
网络型防火墙 :
转发数据(需要经过防火墙转发的数据包) : PREROUTING --> FORWARD --> POSTROUTING
2.2.2 规则链内的匹配顺序
自上向下按顺序依次进行检查,找到相匹配的规则即停止(LOG策略例外,表示记录相关日志) 若在该链内找不到相匹配的规则,则按该链的默认策略处理(未修改的状况下,默认策略为允许)
注:按第一条规则……第二条规则的顺序进行匹配处理,遵循“匹配即停止”的原则,一旦找到一条匹配规则将不再检查后续的其他规则,如果一直找不到匹配的规则,就按默认规则处理。
默认规则用iptables -L查看,规则链后面出现(policy ACCEPT)即是默认放行
默认策略不参加链内规则的顺序编排
-F清空链时,默认策略不受影响
2.3 数据包在规则表、链间的匹配流程
(1)入站数据流向:来自外界的数据包到达防火墙后,首先被PREROUTING链处理(是否修改数据包地址等),然后进行路由选择(判断该数据包应发往何处):如果数据包的目的地址是防火墙本机(如Internet 用户访问网关的Web服务端口),那么内核将其传递给INPUT链进行处理(决定是否允许通过等),通过以后再交给系统上层的应用程序(如httpd服务器)进行响应。
(2)转发数据流向:来自外界的数据包到达防火墙后,首先被PREROUTING链处理,然后再进行路由选择:如果数据包的目标地址是其他外部地址(如局域网用户通过网关访问QQ服务器),则内核将其传递给FORWARD链进行处理(允许转发或拦截、丢弃),最后交给POSTROUTING链(是否修改数据包的地址等)进行处理。
(3)出站数据流向:防火墙本机向外部地址发送的数据包(如在防火墙主机中测试公网DNS服务时),首先进行路由选择,确定了输出路径后,再经由OUTPUT链处理,最后再交POSTROUTING链(是否修改数据包的地址等)进行处理。
三、编写防火墙规则
3.1 iptables 安装
CentOS7 默认使用 firewalld 防火墙,没有安装 iptables。若想使用 iptables 防