一、前言
Linux 中常用的软件级防火墙管理服务是 Iptables
和 Firewalld
。
二、Iptables 和 Firewalld 的区别
在早期的 Linux 系统中,默认使用的是 Iptables
防火墙管理服务来配置和管理防火墙。但是他们都是 Linux 中防火墙的管理程序,主要是对于策略的管理上不同,最终的执行者都是位于内核中的 netfilter
。
- iptables 是基于接口设置规则,从而判断网络的安全性,firewalld 是基于区域,根据不同的区域设置不同的规则,从而保证网络的安全。
- iptables 是静态防火墙,firewalld 是动态防火墙。
- iptables 修改某一条规则会删除旧的规则,并从
/etc/sysconfig/iptables
加载所有新的规则。firewalld 修改时不会创建新的规则,而是仅仅运行规则中新加的部分,因此 firewalld 可以在运行时间内,改变设置而不丢失现行连接。 - iptables 在 /etc/sysconfig/iptables 中储存配置。firewalld 将配置储存在 /etc/firewalld/ (优先加载) 和 /usr/lib/ firewalld/ ( 默认的配置文件) 中的各种 XML 文件里。
Iptables
netfilter/iptables(简称为 iptables)组成 Linux 平台下的包过滤防火墙,与大多数的 Linux 软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
Firewalld
firewalld 防火墙是 Centos7 系统默认的防火墙管理工具,取代了之前的 iptables 防火墙,也是工作在网络层,属于包过滤防火墙。firewalld 和 iptables 都是用来管理防火墙的工具 (属于用户态) 来定义防火墙的各种规则功能,内部结构都指向 netfilter 网络过滤子系统 (属于内核态) 来实现包过滤防火墙功能。firewalld 提供了支持网络区域所定义的网络连接以及接口安 | 全等级的动态防火墙管理工具。
三、Firewalld
在RHEL7里有几种防火墙共存:firewalld、iptables、ebtables,默认是使用firewalld来管理netfilter子系统,不过底层调用的命令仍然是iptables等。firewalld跟iptables比起来至少有两大好处:
1、firewalld可以动态修改单条规则,而不需要像iptables那样,在修改了规则后必须得全部刷新才可以生效;
2、firewalld在使用上要比iptables人性化很多,即使不明白“五张表五条链”而且对TCP/IP协议也不理解也可以实现大部分功能。
3.1 特性
firewalld跟iptables比起来,不好的地方是每个服务都需要去设置才能放行,因为默认是拒绝。而iptables里默认是每个服务是允许,需要拒绝的才去限制。
firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。
3.2 区域的概念
区域 | 代码 | 描述 |
---|---|---|
阻塞区域 | block | 任何传入的网络数据包都将被阻止。 |
工作区域 | work | 相信网络上的其他计算机,不会损害你的计算机。 |
家庭区域 | home | 相信网络上的其他计算机,不会损害你的计算机。 |
公共区域 | public | 不相信网络上的任何计算机,只有选择接受传入的网络连接。 |
隔离区域 | DMZ | 隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接。 |
信任区域 | trusted | 所有的网络连接都可以接受。 |
丢弃区域 | drop | 任何传入的网络连接都被拒绝。 |
内部区域 | internal | 信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。 |
外部区域 | external | 不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。 |
默认区域是 public。
firewalld默认提供了九个zone配置文件:block.xml、dmz.xml、drop.xml、external.xml、 home.xml、internal.xml、public.xml、trusted.xml、work.xml,他们都保存在 /usr/lib/firewalld/zones/
目录下。
3.3 配置方法
firewalld的配置方法主要有三种:firewall-config、firewall-cmd和直接编辑xml文件,其中 firewall-config是图形化工具,firewall-cmd是命令行工具,而对于linux来说大家应该更习惯使用命令行方式的操作
3.3.1 安装
Centos7 默认防火墙管理服务就是 firewalld, 无需安装。
yum install firewalld firewall-config
3.3.2 管理服务
# 启动
systemctl start firewalld
# 停止
systemctl stop firewalld
# 禁用
systemctl disable firewalld
# 查看状态
systemctl status firewalld
常用参数说明
# firewall-cmd [OPTIONS...]
--state # 查看状态
# 查看版本
--version
# 查看帮助
--help
# 查看区域信息
--get-active-zones
# 查看指定网络接口所在区域
--get-zone-of-interface=eth0
# 拒绝/取消拒绝所有的包
--panic-on
--panic-off
# 查看是否拒绝
--query-panic
# 更新防火墙规则
--reload # 修改后需要执行才能生效,无需断开
--complete-reload # 需要断开,类似重启
--permanent # 让配置永久生效(服务器重启后还有效)
# 添加网络接口
--add-interface=eth0
# 设置接口默认区域
--set-default-zone=public
# 查看所有打开的端口
--list-ports
# 添加端口
--add-port=8080/tcp
# 指定操作区域
--zone=work
# 添加/移除服务
--add-service=smtp
--remove-service=smtp
# 添加富规则
--add-rich-rule
四、Iptables
iptables 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。
4.1 规则分类
iptables 用于处理或者过滤流量的策略那些条目成为规则,多条规则可以组成一条规则链,我们可以将规则链在数据包按不同位置处理进行分类,大致如下:
PREROUTING
:路由选择前
INPUT
:流量进入前
OUTPU
:流量放出前
FORWARD
:流量转发前
POSTROUTING
:路由选择后
4.2 处理动作
1、ACCEPT 允许通过
2、REJECT 拒绝通过(回恢复消息被抛弃了)
3、LOG 仅记录日志信息
4、DROP 拒绝通过(直接抛弃,不做任何响应)
4.1 基本命令参数
根据OSI七层模型的定义,iptables 属于数据链路层的服务,所以可以根据流量的源地址、目的地址、传输协议、服务类型等信息进行匹配;一旦匹配成功,iptables 就会根据策略规则所预设的动作来处理这些流量。另外,再次提醒一下,防火墙策略规则的匹配顺序是从上到下的,因此要把较为严格、优先级较高的策略规则放到前面,以免发生错误。
参数 | 作用 |
---|---|
-P | 设置默认策略 |
-F | 清空规则链 |
-L | 查看规则链 |
-A | 在规则链的末尾加入新规则 |
-I num | 在规则链的头部加入新规则 |
-D num | 删除某一条规则 |
-s | 匹配来源地址IP/MASK,加叹号“!”表示除这个IP外 |
-d | 匹配目标地址 |
-i | 网卡名称 匹配从这块网卡流入的数据 |
-o | 网卡名称 匹配从这块网卡流出的数据 |
-p | 匹配协议,如TCP、UDP、ICMP |
–dport num | 匹配目标端口号 |
–sport num | 匹配来源端口号 |
# 查看已有防火墙规则链
iptables -L
# 清空规则链
iptalbes -F
# 设置进入规则的默认策略为拒绝【慎用】
iptables -P INPUT DROP