目录
一.防火墙基础
Netfilter
Iptables
包过滤的工作层次
规则链
默认包括5种规则链:
规则表
默认包括4个规则表
规则包过滤的匹配流程
二.编写防火墙规则
Iptables安装
基本语法,数据包控制类型
添加,查看,删除规则等基本操作
添加新的规则
查看规则列表
删除,清空规则
设置默认策略
三.规则的匹配条件
通用匹配
隐含匹配
显示匹配
一.防火墙基础
Netfilter
位于Linux内核中的包过滤功能体系
称为Linux防火墙的“内核态”
Iptables
位于/sbin/iptables,用来管理防火墙规则的工具
称为Linux防火墙的“用户态”
包过滤的工作层次
主要是网络层,针对IP数据包
体现在对包内的IP地址,端口等信息的处理上
规则链
规则链的作用:对数据包进行过滤或处理
链的作用:容纳各种防火墙规则
链的分类依据:处理数据包的不同时机
默认包括5种规则链:
INPUT:处理入站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包
POSTROUTING:在进行路由选择后处理数据包
PREROUTING:在进行路由选择前处理数据包
规则表
表的作用:容纳各种规则链
表的划分依据:防火墙规则的作用相似
默认包括4个规则表
raw表:确定是否对该数据包进行状态跟踪
内核模块为iptable_raw,表内包含两个链,即
OUTPUT,PREROUTING
mangle表:为数据包设置标记
内核模块为iptable_mangle,表内包含五个链,即
PREROUTING,POSTROUTING,INPUT,OUTPUT,FORWARD
nat表:修改数据包中的源,目标IP地址或端口
内核模块为iptable_nat,表内包含三个链,即PREROUTING,POSTROUTING,OUTPUT
filter表:确定是否放行该数据包(过滤)
内核模块为iptable_filter,表内包含三个链,即INPUT,FORWARD,OUTPUT
规则包过滤的匹配流程
规则表之间的顺序:raw->mangle->nat->filter
规则链之间的顺序
入站:PREROUTING->INPUT
出站:OUTPUT->POSTROUTING
转发:PREROUTING->FORWARD->POSTROUTING
规则链内的匹配顺序
按顺序依次检查,匹配即停止(LOG策略例外)
若找不到相匹配的规则,则按该链的默认策略处理
二.编写防火墙规则
在使用iptables防火墙之前,需要将firewalld防火墙关闭掉,以避免影响
Iptables安装
启动iptables防火墙并设置开机启动
基本语法,数据包控制类型
格式:iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
表名,链名用来指定iptables命令所操作的表和链,未指定表名时将默认使用filter表;管理选项表示iptables规则的操作方式;匹配条件用来指定要处理的数据包的特征,不符合指定条件的数据包将不会处理;控制类型指的是数据包的处理方式
常用的几种控制类型:
ACCEPT:允许数据包通过
DROP:直接丢弃数据包,不给出任何回应信息
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息
LOG:在/var/log/messages文件中记录日志文件,然后将数据包传递给下一条规则
(防火墙规则的“匹配即停止”对于LOG操作来说是个特例,它只是种辅助动作)
上述操作产生的直接效果是其他主机无法ping通本机
添加,查看,删除规则等基本操作
类别 | 选项 | 用途 |
增加 | -A | 追加到最后一行 |
-l | 插入到第一行(或指定序号) | |
查看 | -L | 列出所有规则 |
-n | 以数字形式显示 | |
-v | 详细信息 | |
-line(--line-numbers) | 显示序号 | |
删除 | -D | 删除一条(指定序列号内容) |
-F | 清空所有 | |
修改 | -R | 替换某条规则 |
设置默认 | -P | 设置默认规则 |
添加新的规则
使用管理选项“-A”,“-I”,前者用来追加规则,后者用来插入规则
当使用管理选项“-I”,允许指定新添加规则的顺序号,未指定序号时默认为第一条
查看规则列表
查看已有的防火墙规则时,使用管理选项“-L”,结合“--line-numbers”选项还可显示各条规则在链内的顺序号。
当防火墙规则的数量较多时,若能够以数字形式显示地址和端口信息,可以减少地址解析的环节,在一定程度上加快命令执行的速度
删除,清空规则
删除一条防火墙规则时,使用管理选项“-D”
清空指定链或表中的所有防火墙规则,使用管理选项“-F
使用管理选项“-F”时,允许省略链名而清空指定表所有链的规则
设置默认策略
Iptables的各条链中,默认策略是规则匹配的最后一个环节----当找不到任何一条能够匹配数据包的规则时,则执行默认策略。默认策略的控制类型为ACCEPT(允许),DROP(丢弃)
当使用管理选项“-F”清空链时,默认策略不受影响。若要修改默认策略,必须通过管理选项“-P”重新进行设置。
三.规则的匹配条件
匹配条件的设置包括三大类:通用匹配,隐含匹配,显示匹配
通用匹配
也称为常规匹配,这种匹配方式可以独立使用,不依赖于其他条件或扩展模块
协议匹配
编写iptables规则时使用“-p 协议名”的形式指定,用来检查数据包所使用的网络协议(--protocol),可用的协议类型存放在Linux系统的/etc/procotols文件中
地址匹配
编写iptables规则时使用“-s 源地址”或“-d 目标地址”的形式指定,用来检查数据包的源地址(--source)或目标地址(--destination)
当遇到小规模的网络扫描或攻击时,封锁IP地址是比较有效的fangshi
网络接口匹配
编写iptables规则时使用“-i 接口名”和“-o 接口名”的形式,用于检查数据包从防火墙的哪一个接口进入或发出,分别对应入站网卡(--in-interface),出站网卡(--out-interface)
隐含匹配
要求以指定的协议匹配作为前提条件,相当于子条件,因此无法独立使用,其对应的功能由iptables在需要时自动(隐含)载入内核
端口匹配
编写iptables规则时使用“--sport 源端口”或“--dport 目标端口”的形式,针对的协议为TCP或UDP,用来检查数据包的源端口(--source-port)或目标端口(--destination-port)。单个端口号或者以冒号”:”分隔的端口范围都是可以接受的,但不连续的多个端口不能采用这种方式
ICMP类型匹配
编写iptables规则时使用“--icmp-type ICMP 类型”的形式,针对的协议为ICMP,用来检查ICMP数据包的类型(--icmp-type)。ICMP类型使用字符串或数字代码表示,如“Echo-request”(代码为8),“echo-reply”(代码为0),“destination-unreachable”(代码为3),分别对应ICMP协议的请求,回显,目标不可达。
关于可用的ICMP协议类型,可以执行“iptables -p icmp -h”命令,在帮助信息的最后部分列出了所有支持的类型
显示匹配
要求有额外的内核模块提供支持,必须手动以“-m 模块名称”的形式调用相应的模块,然后方可设置匹配条件
多端口匹配
编写iptables规则时使用“-m multiport --dports 端口列表”,“-m multiport --sports 端口列表”的形式,用来检查数据包的源端口,目标端口,多个端口之间以逗号进行分隔
IP范围匹配
编写iptables规则时使用“-m iprange --src-range IP范围”,“-m iprange --dst-range IP范围”的形式用来检查数据包的源地址,目标地址,其中IP范围采用“起始地址-结束地址”的形式表示
MAC地址匹配
编写iptables规则时使用“-m mac --mac-source MAC 地址”的形式,用来检查数据包的源MAC地址。由于MAC地址本身的局限性,此类匹配条件一般只适用于内部网络
状态匹配
编写iptables规则时使用“-m state --state连接状态”的形式,基于iptables的状态跟踪机制用来检查数据包的连接状态(State)。常见的连接状态包括NEW(与任何连接无关的),ESTABLISHED(响应请求或者已建立连接的)和RELATED(与已有连接有相关性的)