文章目录
1.防火墙基础概念
1.1 iptables 概述
- Linux系统的防火墙:IP信息包过滤系统,实际由两个组件netfilter和iptables组成。
- 包过滤的工作层次:主要工作在网络层,针对TCP/IP 数据包实施过滤和限制(体现在对包内的IP地址、端口等信息的处理上)属于典型的包过滤防火墙 或又称为网络层防火墙。
- netfilter/iptables:网络过滤器/IP信息包过滤系统,实际上netfilter 和 iptables组成。
1.2 netfilter与iptables关系
netfilter
:
- 称为Linux防火墙的“内核态” (Kernel Space,又称为内核空间)的防火墙功能体系。
由一些数据包过滤表组成,这些表包含内核用来控制数据包过滤处理的规则集。
iiptables
:
- 称为Linux防火墙的“用户态” (User Space,又称为用户空间)的防火墙管理体系。
是一种用来管理Linux 防火墙的命令程序,它使得插入、修改、删除数据包过滤表中的规则变得容易,位于/sbin/Iptables,通常用来管理防火墙规则的工具。
注:上述两种称呼都可以表示Linux防火墙。
2.iptables的表、链结构
2.1 四表五链
规则表?
- 表的作用:容纳各种规则链 。
- 表的划分依据:防火墙规则的作用相似。
默认包括四种规则表
1、raw表
- 确定是否对该数据包进行状态跟踪。(包含两个规则表:OUTPUT、PREROUTING)
2、mangle表
- 修改数据包内容,用来做流量整形的,给数据包设置标记。(包含五个规则链,INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING)
3、nat表
- 负责网络地址转换,用来修改数据包中的源、目标IP地址或端口(包含三个规则链,OUTPUT、PREROUTING、POSTROUTING)
4、filter表
- 负责过滤数据包,确定是否放行该数据包(过滤).(包含三个规则链,INPUT、FORWARD、OUTPUT)
规则链?
- 规则的作用:对数据包进行过滤或处理。
- 链的作用: 容纳各种防火墙规则。
- 链的分类依据:处理数据包的不同时机。
默认包括五种规则链
1、INPUT`
- 处理入站数据包。(匹配目标IP为本机的数据包)
2、OUTPUT
- 处理出站数据包。(一般不在此链上做配置)
3、FORWARD
- 处理转发数据包。(匹配流经本机的数据包)
4、PREROUTING
- 在进行路由选择前处理数据包。(用来修改目的地址,用来做DNAT。相当于把内网中的80端口映射到 路由器外网端口上)
5、POSTROUTING
- 在进行路由选择后处理数据包。(用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能 实现内网主机通过一个公网IP上网)
2.2 默认的表、链结构示意图
3、数据包过滤的匹配流程
3.1 规则表之间的匹配顺序
当数据包到达防火墙时,规则表之间的优先顺序为:
raw ===> mangle ===> nat ===>filter
3.2 规则链之间的匹配顺序
3.2.1主机型防火墙
① 入站数据
(来自外界的数据包,且目标地址是防火墙本机)
PREROUTING -> INPUT -> 本机的应用程序
②出站数据
(从防火墙本机向外部地址发送的数据包)
OUTPUT -> POSTROUTING -> POSTROUTING
3.2.2 网络型防火墙
③转发
转发数据(需要经过防火墙转发的数据包)
PREROUTING <- FORWARD <- POSTROUTING
注意事项:
- 主机型防火墙主要使用 INPUT、OUTPUT 链,设置规则时一般要详细的指定到端口。
- 网络型防火墙主要使用 FORWARD链,设置规则时很少去指定到端口,一般指定到 IP 地址或者到网段 即可。
3.3 规则链内的匹配顺序
-
按从上而下顺序依次检查,找到相匹配即停止,要么放行、要么丢弃。(LOG策略例外,表示记录相关日志)
-
若在该链内找不到相匹配的规则,则按该链的默认策略处理。(未修改的状况下,默认策略为允许)
注意:按第一条规则、第二条规则的顺序进行匹配处理,遵循 “匹配即停止” 的原则,一旦找到一条匹配规则将不再检查后续的其他规则,如果一直找不到匹配的规则,就按默认规则处理。
默认规则用 iptables -L 查看,规则链后面出现(policy ACCEPT)即是默认放行,默认策略不参与链内规则的顺序编排
-F 清空链时,默认策略不受影响。
4、编写防火墙规则
4.1 iptables 安装
CentOS7 默认使用 firewalld 防火墙,没有安装 iptables。若想使用 iptables 防火墙,必须先关闭 firewalld 防火墙,再安装 iptables。
#关闭 firewalld 防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
#安装 iptables 防火墙
yum -y install iptables iptables-services
#设置 iptables 开机启动
systemctl start iptables.service
systemctl enable iptables.service
iptables 防火墙的配置方法:
使用 iptables 命令行
使用 system-config-firewall,centos7 不能使用 centos6 可以使用
4.2 iptables 基本语法、数据包控制类型
4.2.1 基本语法
格式:
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
- 表名、链名用来指定 iptables 命令所操作的表和链,未指定表名时将默认使用 filter 表。
- 管理选项表示 iptables 规则的操作方式,如插入、增加、删除、查看等。
- 匹配条件用来指定要处理的数据包的特征,不符合指定条件的数据包将不会处理。
- 控制类型指的是数据包的处理方式,如允许、拒绝、丢弃等。
注意:
不指定表名时,默认指 filter 表
不指定链名时,默认指表内的所有链 除非设置链的默认策略,否则必须指定匹配条件选项、链名、控制类型使用大写字母,其余均为小写
4.2.2 数据包的常见控制类型
对于防火墙,数据包的控制类型非常关键,直接关系到数据包的放行、封堵以及相应的日志记录等。在 iptables 防火墙体系中,最常用的几种控制类型如下:
ACCEPT 允许数据包通过。
DROP 直接丢弃数据包,不给出任何回应信息。
REJECT 拒绝数据包通过,必要时会给数据发送端一个响应信息。
LOG 在 /var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则。
SNAT 修改数据包的源地址。
DNAT 修改数据包的目的地址。
MASQUERADE 伪装成一个非固定公网 IP 地址。
注意:
防火墙规则的 ”匹配即停止“ 对于 LOG 操作来说是一个特例,因为 LOG 只是一种辅助动作,并没有真正处理数据包。
4.2.3 匹配条件
匹配条件 | 说明 |
---|---|
p | 指定要匹配的数据包的协议类型 |
-s | 指定要匹配的数据包的源 IP 地址 |
-d | 指定要匹配的数据包的目的 IP 地址 |
-i | 指定报文仅能够从指定的接口流入 |
-o | 指定报文仅能够从指定的接口流出 |
- -sport | 定源端口号 |
- -dport | 指定目的端口号 |
4.3 添加、查看、删除规则等基本操作
4.3.1 iptables 命令的常用管理选项
管理选项 | 用法示例 |
---|---|
-A | 在指定链末尾追加一条新的规则 iptables -A INPUT |
-I | 在指定链中插入一条新的规则,未指定序号默认作为第一条 iptables -I INPUT |
-P | 设置指定链的默认策略规则 iptables -P OUTPUT ACCEPT |
-D | 根据规则编号删除规则 iptables -t nat -D INPUT |
-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 |
- |