前言
保障数据的安全性是继保障数据的可用性之后最为重要的一项工作。防火墙作为公网与内网之间的保护屏障,在保障数据的安全性方面起着至关重要的作用。
iptables |
centos 5/6 系统默认防火墙 |
firewalld |
centos 7/8 系统默认防火墙 |
iptables用的较多 |
在7和8上也是有的,现在流行的k8s就是基于iptables |
一、iptables防火墙基础
硬件防火墙:性能好,用图形化 管理,一般公司用硬件(华为E9000)
软件防火墙:做辅助,做在服务器上,用命令管理
Linux系统的防火墙:IP信息包过滤系统,它实际上由两个组件netfilter和iptables组成
主要工作在网络层,针对IP数据包,体现在对包内的IP地址、端口、协议等信息的处理上
1.1 netfilter和iptables关系
Linux中称为包过滤防火墙,iptables和firewalld都有两个组件netfilter和iptables,这两种称呼都可以表示Linux防火墙。
注意:与netfilter相提并论的iptables是iptables防火墙的组件,可以认为是iptables防火墙的分支,但是名字一样
netfilter
1.位于Linux内核中的包过滤功能体系
2.称为Linux防火墙的“内核态”(又称内核空间)
iptables
1.位于/sbin/iptables,用来管理防火墙规则的工具
2.称为Linux防火墙的“用户态”(又称用户空间)
netfilter/iptables后期简称为iptables, iptables是基于内核的防火墙,其中内置了raw、mangle、nat和filter四个规则表。
表中所有规则配置后,立即生效,不需要重启服务。
1.2 iptables的四表五链
规则表的作用 |
容纳各种规则链 |
规则链的作用 |
容纳各种防火墙规则 |
总结 |
表中有链,链中有规则 |
1.2.1 四表
表 |
含义 |
包含的规则链 |
raw表 |
确定是否对该数据包进行状态跟踪 |
OUTPUT、PREROUTING |
mangle表 |
修改数据包内容,用来做流量整形的,给数据包设置标记 |
INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUING |
nat表 |
负责网络地址转换,用来修改数据包中的源、目标IP地址或端口 |
OUTPUT、PREROUTING、POSTROUING |
filter表 |
负责过滤数据包,确定是否放行该数据包(过滤) |
INPUT、FORWARD、OUTPUT |
在iptables的四个规则表中, mangle表和raw表的应用相对较少
filter表是防火墙的默认表
1.2.2 五链
链 |
作用 |
INPUT链 | 处理入站数据包,匹配目标IP为本机的数据包 |
OUTPUT链 |
处理出站数据包,一般不在此链上做配置 |
FORWARD链 |
处理转发数据包,匹配流经本机的数据包 |
PREROUTING链 |
在进行路由选择前处理数据包,用来修改目的地址,用来做DNAT。相当于把内网服务器的IP和端口映射到路由器的外网IP和端口上 |
POSTROUING链 |
在进行路由选择后处理数据包,用来修改源地址,用来做SNAT。相当于内网通过路由器NAT转换功能实现内网主机通过一个公网IP地址上网 |
规则链之间的匹配顺序:
主机型防火墙:
入站数据(来自外界的数据包,且目标地址是防火墙本机):PREROUTING --> INPUT -->本机的应用程序
出站数据(从防火墙本机向外部地址发送的数据包) :本机的应用程序--> OUTPUT --> POSTROUTING
网络型防火墙:
转发数据(需要经过防火墙转发的数据包) : PREROUTING --> FORWARD --> POSTROUTING
规则链内的匹配顺序:
自上向下按顺序依次进行检查,找到相匹配的规则即停止(LOG策略例外,表示记录相关日志)
若在该链内找不到相匹配的规则,则按该链的默认策略处理(未修改的状况下,默认策略为允许)
1.3 数据包控制的匹配流程
标红的代表该链的规则通常在这个表上配置
1.3.1 入站
入站数据包从A网络发到B网络,首先发到防火墙,先后顺序经过有PREROUTING链的三个表(raw、mangle、nat),如果都是放通状态的会经过路由选择,然后根据目的地址一层一层往上送,经过有INPUT的两个表(mangle、filter),一直送到应用程序
1.3.2 转发
目的地不是本机,数据包先从A网络过滤,经过PREROUTING链,看是否是自己的目的地址,如果是外网到内网需要用nat转换成内网IP,找到内网用户,经过FORWARD链进行过滤,允许放通的到达POSTROUING链,再把内网地址转换成公网,这样数据包才能回去;如果是内网往外网发顺序就是反过来
1.3.3 出站
从本机的应用程序发出来, 经过路由选择,让路由知道从哪里发,先后顺序经过有OUTPUT链的四个表(raw、mangle、nat、filter),都放通后到达POSTROUING链的两个表(mangle、nat),如果没有什么转换地址,就出站