防火墙的分类
-
硬件防火墙:性能强、功能多、操作简单、不会占用服务器的资源
-
软件防护墙: 主要iptables和firewalld两大类
iptables概述
Linux 的防火墙体系主要工作在网络层,针对 TCP/IP 数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。Linux 系统的防火墙体系基于内核编码实现, 具有非常稳定的性能和高效率,也因此获得广泛的应用。它实际上由两个组件netfilter和iptables组成。
netfilter和iptables的区别
-
netfilter:指的是 Linux 内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于“内核态”(Kernel Space,又称为内核空间)的防火墙功能体系。
-
iptables:指的是用来管理 Linux 防火墙的命令程序,通常位于/sbin/iptables 目录下, 属于“用户态”(User Space,又称为用户空间)的防火墙管理体系。
注 iptables是基于内核的防火墙,其中内置了raw、mangle、nat和filter四个规则表,表中所有的规则配置后,立即生效,不需要重启电脑
四个规则表、五个规则链
- 规则表的作用:容纳各种规则链
- 规则链的作用:容纳各种防火墙规则
- 总结:表里有链、链里由规则
四个规则表
为了从规则集的功能上有所区别,iptables 管理着四个不同的规则表,其功能分别由独立的内核模块实现
- filter 表:filter 表用来对数据包进行过滤,根据具体的规则要求决定如何处理一个数据包。filter 表对应的内核模块为 iptable_filter,表内包含三个链,即 INPUT、FORWARD、OUTPUT。
- nat 表:nat(Network Address Translation,网络地址转换)表主要用来修改数据包的IP 地址、端口号等信息。nat 表对应的内核模块为 iptable_nat,表内包含三个链,即PREROUTING、POSTROUTING、OUTPUT。
- mangle 表:mangle 表用来修改数据包的 TOS(Type Of Service,服务类型)、TTL(Time To Live,生存周期),或者为数据包设置 Mark 标记,以实现流量整形、策略路由等高级应用。mangle 表对应的内核模块为 iptable_mangle , 表内包含五个链, 即PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD。
- raw 表:raw 表是自 1.2.9 以后版本的 iptables 新增的表,主要用来决定是否对数据包进行状态跟踪。raw 表对应的内核模块为 iptable_raw,表内包含两个链,即 OUTPUT、PREROUTING。
五个规则链
在处理各种数据包时,根据防火墙规则的不同介入时机,iptables 默认划分为五种不同的规则链
-
INPUT 链:当收到访问防火墙本机地址的数据包(入站)时,应用此链中的规则。
-
OUTPUT 链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则。
-
FORWARD 链:当接收到需要通过防火墙中转发送给其他地址的数据包(转发)时, 应用此链中的规则。
-
PREROUTING 链:在对数据包做路由选择之前,应用此链中的规则。
-
POSTROUTING 链:在对数据包做路由选择之后,应用此链中的规则。
数据包过滤的匹配流程
规则表之间的顺序
raw>mangle>nat>filter
规则链中的顺序
入站
入站数据包从A网络发到B网络,首先发到防火墙,先后顺序经过有PREROUTING链的三个表(raw、mangle、nat),如果都是放通状态的会经过路由选择,然后根据目的地址一层一层往上送,经过有INPUT的两个表(mangle、filter),一直送到应用程序。
转发
目的地不是本机,数据包先从A网络过滤,经过PREROUTING链,看是否是自己的目的地址,如果是外网到内网需要用nat转换成内网IP,找到内网用户,经过FORWARD链进行过滤,允许放通的到达POSTROUING链,再把内网地址转换成公网,这样数据包才能回去;如果是内网往外网发顺序就是反过来。
出站
从本机的应用程序发出来, 经过路由选择,让路由知道从哪里发,先后顺序经过有OUTPUT链的四个表(raw、mangle、nat、filter),都放通后到达POSTROUING链的两个表(mangle、nat),如果没有什么转换地址,就出站。
iptables防火墙配置
Centos 7默认使用firewalld防火墙,没有安装iptables, 若想使用iptables防火墙。必须先关闭firewalld防火墙,再安装iptables
iptables命令
命令格式
iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 控制类型]
常用管理选项
常用控制类型
匹配条件
注
- 不指定表名时,默认指filter表
- 不指定链名时,默认指表内的所有链
- 除非设置链的默认策略,否则必须指定匹配条件控制类型使用大写字母,其余均为小写
实操
添加新的规则
-A:在filter表中的INPUT链末行添加拒绝icmp的规则
-I:不指定行,在指定链首行插入规则(允许tcp 22端口)
-I:不同上,指定行,是在指定的行上插入规则
查看规则
删除规则
注
- 若规则列表中期多条相同的规则时,按内容匹配只删除的序号最小的一条
- 按号码匹配删除时,确保规则号码小于等于已有规则数,否则报错
- 按内容匹配删数时,确保规则存在,否则报错
修改规则
-R:修改已有的规则
命令:iptables -t filter -R INPUT 1 -p icmp -j ACCEPT
-P 修改默认策略(修改为丢弃转发数据包)
命令:iptables -P FORWARD DROP
规则的匹配
协议端口匹配
--sport 和 --dsport 必须配合 -p 指定协议使用
tcp标记匹配
--tcp-flags 配合 -p tcp 使用,指定tcp标记(SYN、ACK、RST、URG、PSH、FIN)
注
- SYN,RST,ACK SYN 前面指定包范围,空格后再指定
- 表明前面指定的里面,除了这空格后面的SYN,其他都放行
ICMP类型匹配
--icmp-type 配合 -p icmp 使用 指定icmp类型(字符串或数字代码)
注
icmp类型可用iptables -p icmp -h 查看帮助信息
显示匹配
要求以 -m (扩展模块)的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件
多端口匹配
-
-m multiport --sport 源端口列表
-
-m multiport --dport 目的端口列表
ip范围匹配
- -m iprange --src-range 源IP范围
- -m iprange --dst-range 目的IP范围
状态匹配
- -m state --state 连接状态
常见的连接状态