Linux基础——Firewalld防火墙(一)

RedhatEnterprise Linux7 已经默认使用firewalld 作为防火墙,其使用方式已经变化。基于 iptables 的防火墙被默认不启动,但仍然可以继续使用。

RHEL7 中有几种防火墙共存:firewalld、iptables、ebtables等,默认使用 firewalld 作为防火墙,管理工具是firewall-cmd。使用 firewalld 来管理netfilter,不过底层调用的命令仍然是 iptables等。

因为这几种 daemon 是冲突的,所以建议禁用其他几种服务。

查看防火墙几种服务的运行状态:

Systemctl status {firewalld,iptables,ip6tables,ebtables}

Systemctl is-active firewalld.service

Systemctl is-active iptables.service

Systemctl is-active ip6tables.service

Systemctl is-active ebtables.service

禁用iptables、ip6tables、ebtables防火墙,

Systemctl mask {iptables,ip6tables,ebtables}

RHEL7 虽然有 iptables 但是不建议使用了,使用新的 firewalld 服务。

查看 firewalld 软件包是否安装:

rpm -q firewalld

Firewalld 提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的防火墙管理工具。拥有运行时配置和永久配置选项。它也支持允许服务或者应用程序直接添加防火墙规则的接口。以前的 system-config-firewall 防火墙模型是静态的,每次修改都要求防火墙完全重启。这个过程包括内核 netfilter 防火墙模块的卸载和新配置所需模块的装载等。相反,firewalldaemon 动态管理防火墙,不需要重启整个防火墙便可应用更改。因而也就没有必要重载所有内核防火墙模块了。

什么是区域:网络区域定义了网络连接的可信等级。

数据包要进入到内核必须要通过这些zone中的一个,而不同的zone里定义的规则不一样(即信任度不一样,过滤的强度也不一样)。可以根据网卡所连接的网络的安全性来判断,这张网卡的流量到底使用哪个 zone,比如上图来自 eth0 的流量全部使用 zone1 的过滤规则,eth1的流量使用 zone2。一张网卡同时只能绑定到一个 zone

预定义的服务:服务是端口和/或协议入口的组合。

端口和协议:定义了 tcp 或 udp 端口,端口可以是一个端口或者端口范围。

ICMP 阻塞:可以选择 Internet 控制报文协议的报文。这些报文可以是信息请求亦可是对信息请求或错误条件创建的响应。

伪装:私有网络地址可以被映射到公开的 IP 地址。这是一次正规的地址转换。

端口转发:端口可以映射到另一个端口以及/或者其他主机。

在进行 firewalld 配置之前,首先介绍一下区域(zones)这个概念。默认情况就有一些有效的区域。由 firewalld 提供的区域按照从不信任到信任的顺序排序。

•丢弃区域(Drop Zone):如果使用丢弃区域,任何进入的数据包将被丢弃。这个类似与我们之前使用iptables -j drop。使用丢弃规则意味着将不存在响应。

•阻塞区域(Block Zone):阻塞区域会拒绝进入的网络连接,返回icmp-host-prohibited,只有服务器已经建立的连接会被通过即只允许由该系统初始化的网络连接。

•公共区域(Public Zone):只接受那些被选中的连接,默认只允许 ssh 和 dhcpv6-client。这个 zone 是缺省 zone

•外部区域(External Zone):这个区域相当于路由器的启用伪装(masquerading)选项。只有指定的连接会被接受,即 ssh,而其它的连接将被丢弃或者不被接受。

•隔离区域(DMZ Zone):如果想要只允许给部分服务能被外部访问,可以在 DMZ 区域中定义。它也拥有只通过被选中连接的特性,即 ssh。

•工作区域(Work Zone):在这个区域,我们只能定义内部网络。比如私有网络通信才被允许,只允许ssh,ipp-client 和 dhcpv6-client。

•家庭区域(Home Zone):这个区域专门用于家庭环境。它同样只允许被选中的连接,即 ssh,ipp-client,mdns,samba-client和 dhcpv6-client。

•内部区域(Internal Zone):这个区域和工作区域(Work Zone)类似,只有通过被选中的连接,和 home 区域一样。

•信任区域(Trusted Zone):信任区域允许所有网络通信通过。记住:因为 trusted 是最被信任的,即使没有设置任何的服务,那么也是被允许的,因为trusted 是允许所有连接的

以上是系统定义的所有的 zone,但是这些 zone 并不是都在使用。只有活跃的 zone 才有实际操作意义。

Firewalld 的原则:

如果一个客户端访问服务器,服务器根据以下原则决定使用哪个 zone 的策略去匹配

1.如果一个客户端数据包的源 IP 地址匹配 zone 的 sources,那么该zone 的规则就适用这个客户端;一个源只能属于一个 zone,不能同时属于多个 zone。

2.如果一个客户端数据包进入服务器的某一个接口(如eth0)区配 zone 的interfaces,则么该 zone 的规则就适用这个客户端;一个接口只能属于一个 zone,不能同时属于多个zone。

3.如果上述两个原则都不满足,那么缺省的 zone 将被应用

你可以使用任何一种 firewalld 配置工具来配置或者增加区域,以及修改配置。工具有例如firewall-config这样的图形界面工具, firewall-cmd 这样的命令行工具,或者你也可以在配置文件目录中创建或者拷贝区域文件,/usr/lib/firewalld/zones 被用于默认和备用配置,/etc/firewalld/zones被用于用户创建和自定义配置文件。

命令行工具 firewall-cmd 支持全部防火墙特性,基本应用如下:

应用示例:

1、获取 firewalld 状态

firewall-cmd --state

2、在不改变状态的条件下重新加载防火墙:

firewall-cmd --reload

如果你使用--complete-reload,状态信息将会丢失。

3、获取支持的区域

firewall-cmd --get-zones

这条命令输出用空格分隔的列表

4、获取所有支持的服务

firewall-cmd --get-services

这条命令输出用空格分隔的列表。

服务是 firewalld 所使用的有关端口和选项的规则集合。被启动的服务会在firewalld 服务开启或者运行时自动加载。默认情况下,很多服务是有效的。使用下面命令可列出有效的服务。

想要列出默认有效的服务,也可以进入下面的目录也能够取得。

想要创建自己的服务,需要在下面的目录下定义它。比如,现在我想添加一个 rhmp 服务, 端口号 1935。首先,任选一个服务复制过来。

接下来打开并编辑文件的头部、描述、协议和端口号,以供 RTMP 服务使用,如下图所示。

重启 firewalld 服务或者重新加载设置,以激活这些设置。

# firewall-cmd --reload

为确认服务是否已经启动,运行下面的命令获取有效的服务列表。

# firewall-cmd --get-services

5、获取所有支持的 ICMP类型

firewall-cmd --get-icmptypes

这条命令输出用空格分隔的列表。

6、列出全部启用的区域的特性(即查询当前防火墙策略)

解释:特性可以是定义的防火墙策略,如:服务、端口和协议的组合、端口/数据报转发、伪装、ICMP 拦截或自定义规则等

上面的命令将会列出每种区域如 block、dmz、drop、external、home、internal、public、trusted

以及 work。如果区域还有其它详细规则(rich-rules)、启用的服务或者端口,这些区域信息也会分别被罗列出来

7、输出区域全部启用的特性。如果省略区域,将显示默认区域的信息。

firewall-cmd [--zone=] --list-all

输出指定区域启动的特性

8、查看默认区域

public 区域是默认区域。

在文件/etc/firewalld/firewalld.conf 中定义成 DefaultZone=public。

9、设置默认区域

firewall-cmd --set-default-zone=区域名

流入默认区域中配置的接口的新访问请求将被置入新的默认区域。当前活动的连接将不受影响。

10、获取活动的区域

11、根据接口获取区域即需要查看哪个区域和这个接口绑定即查看某个接口是属于哪个zone的:

firewall-cmd --get-zone-of-interface=接口名

12、将接口(网卡)增加到区域

firewall-cmd [--zone=] --add-interface=接口名

如果接口不属于区域,接口将被增加到区域。如果区域被省略了,将使用默认区域。接口在重新加载后将重新应用。

13、修改接口所属区域

firewall-cmd [--zone=] --change-interface=接口名

这个选项与 --add-interface 选项相似,但是当接口已经存在于另一个区域的时候,该接口将被添加到新的区域。

14、从区域中删除一个接口

firewall-cmd [--zone=] --remove-interface=接口名

注:如果某个接口不属于任何 Zone,那么这个接口的所有数据包使用默认的Zone 的规则

15、查询区域中是否包含某接口

firewall-cmd [--zone=] --query-interface=接口名

如果区域被省略了,将使用默认区域

16、列举区域中启用的服务

firewall-cmd [ --zone= ] --list-services

如果区域被省略了,将使用默认区域查看home 区域中启用服务

17、启用应急模式阻断所有网络连接,以防出现紧急状况

18、禁用应急模式、

Firewall-cmd –panic-off

19、查询应急模式

firewall-cmd --query-panic

其他相关的配置项可以查看firewall-cmd的手册页:#man firewall-cmd

原文发布于微信公众号 - L宝宝聊IT(gh_b0e552aa80db)

原文发表时间:2018-06-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SDNLAB

P4入门教程(2):P4程序的编译、运行验证与分析

在前面《P4入门教程:搭建开发和实验环境》一文中,梳理了P4实验的大致流程。P4程序只需要经过一次编译过程,生成数据平面的JSON格式描述文件,最后在启动软件交...

3115
来自专栏惨绿少年

inotify+rsync实现实时同步

1.1 什么是实时同步:如何实现实时同步 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化 发现目录中数据产生变化,就利用rsync服务推送...

1890
来自专栏程序员互动联盟

【专业技术】android 应用程序如何获取root权限

问题: 我遇到的问题是,在setting中我要操作/dev/mem设备,在一个寄存器中写值。对/dev/mem的操作毫无疑问是需要root权限的。开始我的做法是...

39710
来自专栏Kubernetes

聊聊你可能误解的Kubernetes Deployment滚动更新机制

Author: xidianwangtao@gmail.com 定义Deployment时与rolling update的相关项 以下面的frontend...

3857
来自专栏Hadoop实操

如何在CDH集群中为数据节点热插拔硬盘

1923
来自专栏有趣的django

Django+Bootstrap+Mysql 搭建个人博客(二)

2070
来自专栏liulun

基于.net开发chrome核心浏览器【三】

本篇我们讲解怎么用CefGlue开发一个最简单的浏览器 一: CefGlue是建立在Cef项目之上的, Cef项目是C/C++的项目; CefGlue只不过是通...

2325

Kubernetes的服务网格(第2部分):Pods目前看来还是很棒的

在我们最近关于Kubernetes的序列,Kubernetes的服务网格,第一部分:顶级服务质量一文中,细心的读者注意到,linkerd是使用DaemonSet...

2026
来自专栏北京马哥教育

htop使用详解--史上最强(没有之一)

在管理进程时通常要借助一些工具,比较常用的就是ps和top了;不过CentOS还为我们提供了一个更加强大的工具htop,下面就来了解一下此工具的使用方法。一、安...

1.1K7
来自专栏嵌入式程序猿

MQX中断系统深度解析(完)

MQX中断系统深度解析(完) MQX ISR 例程分析 以飞思卡尔KSDK最新版1.2.0 MQX isr例程为例说明,飞思卡尔从KSDK的1.1.0版本起...

3036

扫码关注云+社区