前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux 中的 15 个强大的 firewall-cmd 命令,牛牛牛!

Linux 中的 15 个强大的 firewall-cmd 命令,牛牛牛!

原创
作者头像
网络技术联盟站
发布于 2021-11-25 15:23:24
发布于 2021-11-25 15:23:24
2.5K0
举报

企业中,因为业务的重要性,通常会对网络安全十分重视,那么一个好的防火墙系统就是强有力的利器!

本文,将带大家了解 CentOS 7新的防火墙服务firewalld的基本原理,它有个非常强大的过滤系统,称为 Netfilter,它内置于内核模块中,用于检查穿过系统的每个数据包。

这意味着它可以在到达目的地之前以编程方式检查、修改、拒绝或丢弃任何网络数据包,如传入、传出或转发,从 Centos-7 开始,firewalld 成为管理基于主机的防火墙服务的默认工具,firewalld 的守护进程是从 firewalld 包安装的,它将在操作系统的所有基本安装上可用,但在最小安装上不可用。

使用 FirewallD 优于“iptables”的优点:
  • 在运行时所做的任何配置更改都不需要重新加载或重新启动 firewalld 服务
  • 通过将整个网络流量安排到区域中来简化防火墙管理
  • 每个系统可以设置多个防火墙配置以更改网络环境
  • 使用 D-Bus 消息系统来交互/维护防火墙设置

在 CentOS 7 或更高版本中,我们仍然可以使用经典的 iptables,如果要使用 iptables,需要停止并禁用 firewalld 服务。同时使用firewalld 和 iptables会使系统混乱,因为它们彼此不兼容。

建议使用 firewalld 来管理防火墙服务,除非我们有一些特定的理由继续使用经典的 iptables。

Firewalld 设计了强大的过滤系统,并且在处理防火墙管理方面也更加灵活。为了利用这种设计,firewalld 将传入流量分类到源地址定义的接口上的区域中。

每个区域都旨在根据指定的标准管理流量。如果没有进行任何修改,默认区域将设置为 public,并且关联的网络接口将附加到 public。

所有预定义的区域规则都存储在两个位置:系统指定的区域规则在“/usr/lib/firewalld/zones/”下,用户指定的区域规则在/etc/firewalld/zones/ 下。如果在系统区域配置文件中进行了任何修改,它将自动复制到 /etc/firewalld/zones/

本文将详细介绍firewalld 服务基础知识,了解如何在 RHEL/CentOS 7 中使用 firewall-cmd 命令。

本文目录如下

TOC

前置条件:

  • 操作系统:CentOS 7 或更高版本
  • 软件包:firewalld
  • 用户帐户:root 用户或具有 sudo 权限的用户帐户
  • 建议使用 sudo 权限而不是 root 来运行所有管理命令

有三种方式配置防火墙:

  • 在“/etc/firewalld”配置文件中直接编辑
  • 图形界面“firewall-config”工具
  • 终端中的命令行“firewall-cmd”

注意:本文我们将只关注“firewall-cmd”命令。

安装并启用firewallD服务

首先,更新包的最新当前版本。

代码语言:txt
AI代码解释
复制
sudo yum update -y

Firewalld在 CentOS 7 的所有基本安装上可用,但在最小安装上不可用,在这种情况下,我们可以使用以下命令进行安装:

代码语言:txt
AI代码解释
复制
$ sudo yum install firewalld -y

使用以下命令启动和启用服务

代码语言:txt
AI代码解释
复制
$ sudo systemctl start firewalld.service

$ sudo systemctl 启用 firewalld.service

使用以下命令验证防火墙服务的状态:

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --state
代码语言:txt
AI代码解释
复制
Output:

running
代码语言:txt
AI代码解释
复制
$ sudo systemctl status firewalld

详细输出:

代码语言:txt
AI代码解释
复制
firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
Active: active (running) since Sat 2020-04-18 22:39:56 IST; 2h 52min ago
Main PID: 759 (firewalld)
CGroup: /system.slice/firewalld.service
└─759 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

Apr 18 22:39:56 localhost.localdomain systemd[1]: Started firewalld - dynamic...

提示:有些行被省略,使用 -l 显示完整。

区域

Firewalld 为不同的目的引入了几个预定义的区域和服务,主要目的之一是更轻松地处理 firewalld 管理。

基于这些区域和服务,我们可以阻止任何形式的系统传入流量,除非它明确允许在区域中使用一些特殊规则。

1.如何查看firewalld中的所有可用区域?

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --get-zones

这是 firewalld 中的默认预定义区域

2. 如何找出哪个是默认区域?

代码语言:txt
AI代码解释
复制
$ firewall-cmd --get-default-zone
代码语言:txt
AI代码解释
复制
Output:

public

根据上面的输出,可以看到公共区域被标记为默认区域,我们可以根据我们的要求更改它,我们将在接下来的例子中进一步讨论。

3. 如何查找活动区域和相关网络接口的列表?

代码语言:txt
AI代码解释
复制
$ firewall-cmd --get-active-zones
代码语言:txt
AI代码解释
复制
Output:

public
interfaces: enp1s0

在上面的输出中,您可以看到公共区域处于活动状态并与“enp1s0”网络接口相关联,如果没有任何接口未指定给特定区域,它将自动附加到默认区域。

4. 如何查看活动公共区域是否有任何规则列出?

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --list-all --zone="public"

上面的输出显示公共区域处于活动状态并设置为默认值,网络接口“enp1so”与活动区域相关联,在此区域中,dhcpv6-client 和 ssh 被允许通过防火墙服务。

5. 如何查看所有可用区域的列表?

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --list-all-zones

与前面的例子类似,这里也会分别列出每个可用区域的详细配置页面,请自行检查,因为输出列表会很长。

6. 如何将默认区域更改为特定区域?

在更改到新区域之前,让我们检查现有的可用区域。

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --get-default-zone
代码语言:txt
AI代码解释
复制
Output:

public

在输出中,可以看到公共区域设置为默认区域,现在让我们尝试将区域从公共更改为工作。

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --set-default-zone=work
代码语言:txt
AI代码解释
复制
Output:

success

如您所见,上述命令的输出是成功的,让我们验证一下。

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --get-default-zone
代码语言:txt
AI代码解释
复制
Output:

work      <==

7. 如何将网络接口从一个区域更改为另一个区域?

如果系统有两个网络接口,比如“enp1s0 和 enp1s1”,默认情况下,所有接口都将被分配到默认区域,通过使用以下命令可以将接口更改为另一个区域。

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --zone=internal --change-interface=enp1s1

可以使用以下命令进行验证:

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --get-active-zones

8. 如何建立自定义的firewalld zone?

我们知道,所有系统指定的配置文件都位于“/usr/lib/firewalld/zones”,用户指定的文件位于“/etc/firewalld/zones”。

使用以下命令创建自定义区域文件允许使用端口号 80 和 22 的 ssh 和 apache 服务。

确保新文件应以 .xml 格式保存在用户定义的位置,目前,名称区域文件的长度仅限于 17 个字符。

代码语言:txt
AI代码解释
复制
$ sudo vi /etc/firewalld/zones/ linuxtecksecure .xml
代码语言:txt
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>linuxtecksecure</short>
<description>用于企业领域。</description>
<service name="apache"/>
<service name="ssh"/>
<port protocol="tcp" port="80"/>
<port protocol="tcp" port="22"/>
</zone>

保存并退出。

重新加载防火墙服务:

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --reload
代码语言:txt
AI代码解释
复制
Output:


success

现在,重新检查 firewalld 中的可用区域

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --get-zones
代码语言:txt
AI代码解释
复制
Output:

block dmz drop external home internal "linuxtecksecure" public trusted work

使用上面的命令,我们可以创建一个新的 (linuxtecksecure) zone 来默认仅启用 apache 和 ssh 服务,创建文件后,我们需要“重新加载”firewalld 服务,以便将区域激活到firewalld

请记住:在对现有区域文件进行任何更改/更新后,请务必重新加载您的firewalld 服务激活,否则防火墙中的更改不会受到影响。

服务

firewalld 有另一个名为“服务”的组件,这些服务可以在区域文件中用于管理防火墙设置中的流量规则,每个预定义的“服务”在区域文件的默认配置中使用.

dhcpv6-client

管理DHCP v6客户端的本地流量,使用udp端口546。

ssh

管理ssh服务器服务的本地通信量,并使用tcp端口22。

Samba-client

管理Windows FLES/打印机共享服务的本地通信量,并使用137(UDP)和138(UDP)端口

lpp-client

管理用于打印服务器服务的本地通信量,并使用udp端口631。

mdns

管理多播本地链路服务,并使用udp端口5353。

1.如何列出firewalld中所有可用的服务?

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --get-services
代码语言:txt
AI代码解释
复制
RH-Satellite-6 amanda-client amanda-k5-client amqp amqps apcupsd audit bacula bacula-client bgp bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc 
ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client distcc dns docker-registry docker-swarm dropbox-lansync elasticsearch 
etcd-client etcd-server finger freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master git gre 
high-availability http https imap imaps ipp ipp-client ipsec irc ircs iscsi-target isns jenkins kadmin kerberos kibana klogin kpasswd kprop 
kshell ldap ldaps libvirt libvirt-tls lightning-network llmnr managesieve matrix mdns minidlna mongodb mosh mountd mqtt mqtt-tls ms-wbt mssql 
murmur mysql nfs nfs3 nmea-0183 nrpe ntp nut openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole plex pmcd pmproxy pmwebapi pmwebapis 
pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius redis rpc-bind rsh rsyncd rtsp salt-master samba samba-client 
samba-dc sane sip sips slp smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh steam-streaming svdrp svn syncthing syncthing-gui 
synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client upnp-client vdsm vnc-server wbem-http wbem-https wsman wsmans 
xdmcp xmpp-bosh xmpp-client xmpp-local xmpp-server zabbix-agent zabbix-server

2. 如何列出特定区域内的所有可用服务?

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --zone=work --list-services
代码语言:txt
AI代码解释
复制
Output:

dhcpv6-client ssh

输出显示在“工作”区域中仅启用了两个服务。

3. 如何将现有服务添加到默认区域?

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --add-service=samba
代码语言:txt
AI代码解释
复制
Output:

success

在此示例中,我已将名为 samba 的现有服务添加到默认区域,您可以使用以下命令进行验证:

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --zone=public --list-services
代码语言:txt
AI代码解释
复制
Output:

dhcpv6-client samba ssh

同样,我们可以将服务添加到默认区域以外的其他区域。使用以下命令:

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --zone=internal --add-service=ftp

firewalld两种模式

默认情况下,firewalld 支持两种独立的模式,永久和运行时(立即)。

当我们启动防火墙时,它会将所有永久配置文件加载到运行时中。

您进行添加或更新的任何机会都将应用于运行时配置,并且不会自动启用到永久配置。

为了使其成为永久规则,我们需要使用“--permanent”参数,为了在 firewalld 中启用这些更改,我们需要重新加载或重新启动防火墙服务。

1. 如何永久添加服务?

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --permanent --add-service=ftp
代码语言:txt
AI代码解释
复制
Output:

success
代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --reload
代码语言:txt
AI代码解释
复制
Output:

success

请记住,无论何时使用“--permanent”标志,都不要忘记重新加载防火墙服务。

2. 如何将我的运行时设置迁移到永久设置?

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --runtime-to-permanent
代码语言:txt
AI代码解释
复制
Output:

success

通常,我们在运行时环境中测试所有规则,一旦规则成功运行,然后我们使用“--permanent”选项使它们永久化,使用上述命令一次性将所有运行时设置迁移到永久模式,如果防火墙设置无效,则只需重新加载/重新启动防火墙服务即可使这些规则在永久配置中工作。

端口

firewalld 允许我们直接处理网络端口,美妙之处在于,甚至无需在系统中安装特定服务,我们就可以在防火墙中打开和关闭相关端口。

1. 如何在公共区域为samba服务开放端口?

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --zone=public --add-port=137/udp

$ sudo firewall-cmd --zone=public --add-port=138/udp

$ sudo firewall-cmd --zone=public --add-port=139/tcp

$ sudo firewall-cmd --zone=public --add-port=445/tcp
代码语言:txt
AI代码解释
复制
Output:

success

使用上面的命令,我们已经成功打开了samba服务的端口

验证一下:

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --list-ports
代码语言:txt
AI代码解释
复制
Output:

137/udp 138/udp 139/tcp 445/tcp

成功测试后,如果您希望将这些规则作为防火墙的永久规则继续使用,则将“--permanent”标志与上述命令一起使用或使用运行时作为永久命令,不要忘记重新加载服务。

超时

Firewalld 还有一个有趣的功能叫做超时。此功能将帮助许多系统管理员在其运行时设置中添加临时规则,例如,如果用户想通过 FTP 服务从服务器下载文件。

由于这只是一次性操作,因此不需要永久规则。

下载文件可能只需要 2-5 分钟(可能会因文件大小而异)。

在我们的例子中,我们可以允许 FTP 服务 5 分钟,它会在给定的时间后自动断开连接。

代码语言:txt
AI代码解释
复制
$ sudo firewall-cmd --zone=public --add-service=ftp --timeout=5m

我们可以以秒 (s)、分钟 (m) 或小时 (h) 为单位指定超时。

感谢您抽出宝贵时间阅读!我希望这篇文章可以帮助您通过示例了解“firewall-cmd”命令的基本用法,如果你喜欢这篇文章,请分享给其他人。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CentOS 防火墙 firewall-cmd 命令
I Teach You 我教你
2023/07/18
6250
Linux - firewall-cmd 命令添加端口规则不生效排查
如果 firewall-cmd 命令添加端口规则后没有生效,有几个可能的原因,你可以检查以下步骤:
小小工匠
2023/10/28
2.7K0
Linux - firewall-cmd 命令添加端口规则不生效排查
Linux防火墙基础配置教程(ssh以及禁止ping防火墙)
作为一名系统管理员或开发者,你是否曾经被 Linux 防火墙配置搞得头大?在生产环境中,我们经常需要配置防火墙来保护服务器安全,但面对 iptables 和 firewalld 这两个工具,很多人都会觉得无从下手。别担心!这篇文章将用通俗易懂的方式,带你了解 CentOS 中的防火墙配置,并通过一个实际案例,手把手教你如何正确设置防火墙规则。
神秘泣男子
2024/12/30
3830
Linux防火墙基础配置教程(ssh以及禁止ping防火墙)
Linux基础——Firewalld防火墙(一)
RedhatEnterprise Linux7 已经默认使用firewalld 作为防火墙,其使用方式已经变化。基于 iptables 的防火墙被默认不启动,但仍然可以继续使用。 RHEL7 中有几种防火墙共存:firewalld、iptables、ebtables等,默认使用 firewalld 作为防火墙,管理工具是firewall-cmd。使用 firewalld 来管理netfilter,不过底层调用的命令仍然是 iptables等。 因为这几种 daemon 是冲突的,所以建议禁用其他几种服务。
L宝宝聊IT
2018/06/27
1.4K0
搞它!!!Linux--深入介绍firewalld防火墙管理工具
firewall-cmd是firewalld防火墙自带的字符管理工具,可以用来设置firewalld防火墙的各种规则
不吃小白菜
2020/09/03
2K0
搞它!!!Linux--深入介绍firewalld防火墙管理工具
如何使用 firewall-cmd 管理网络服务
现在你将看到如何“添加”、“删除”和“列出”服务、协议和端口,以便“阻止”或“允许”它们。
用户1880875
2021/09/16
6320
CentOS7-firewall防火墙使用 原
红帽RHEL7系统已经用firewalld服务替代了iptables服务,新的防火墙管理命令firewall-cmd与图形化工具firewall-config。特点是拥有运行时配置与永久配置选项且能够支持动态更新以及”zone”的区域功能概念,使用图形化工具firewall-config或文本管理工具firewall-cmd,下面实验中会讲到~
拓荒者
2019/03/11
2K0
CentOS7-firewall防火墙使用
                                                                            原
10.22 firewalld关于service的操作
Linux防火墙-firewalled firewall-cmd --get-services 查看所有的servies firewall-cmd --list-services //查看当前zone下有哪些service firewall-cmd --zone=public --add-service=http //把http增加到public zone下面 firewall-cmd --zone=public --remove-service=http ls /usr/li
运维小白
2018/02/06
9270
Linux系统firewalld、zone、service
编辑网卡配置文件(复制系统网卡配置文件进行更名)的方法为其添加zone(配置完成后重启网络服务,并重新加载firewalld服务:“systemctl restart firewalld”)。
阿dai学长
2019/04/03
1.5K0
firewall-cmd防火墙
前言:启动CentOS/RHEL 7后,防火墙规则设置由firewalld服务进程默认管理。一个叫做firewall-cmd的命令行客户端支持和这个守护进程通信以永久修改防火墙规则。
王念博客
2019/07/24
9160
CentOS7下Firewall一些基本常用命令
一、介绍  防火墙守护 firewalld 服务引入了一个信任级别的概念来管理与之相关联的连接与接口。它支持 ipv4 与 ipv6,并支持网桥,采用 firewall-cmd (command) 或 firewall-config (gui) 来动态的管理 kernel netfilter 的临时或永久的接口规则,并实时生效而无需重启服务。
拓荒者
2019/03/11
3560
fedora 28 , firewalld 防火墙控制,firewall-cmd 管理防火墙规则
今天,在使用fedora时,需要修改防火墙规则,一时间忘记了命令是什么,这里进行记录一下。 目前 fedora 28/ centos 7 使用 firewalld 作为防火墙软件;下面我就怎么简单管理防火墙规则进行记录,网上的例子很多,这里我列举我经常使用的命令,来进行备忘:
西湖醋鱼
2020/12/30
1.1K0
Linux防火墙firewall的使用
CentOS 7新的防火墙服务firewalld的基本原理,它有个非常强大的过滤系统,称为 Netfilter,它内置于内核模块中,用于检查穿过系统的每个数据包。
小陈运维
2024/11/18
1160
Linux基础(day35)
10.19 iptables规则备份和恢复 iptables规则的备份和恢复 保存和备份iptables规则 service iptables save //会把规则保存到/etc/sysconfig/iptables 把iptables规则备份到my.ipt文件中 iptables-save > my.ipt 恢复刚才备份的规则 iptables-restore < my.ipt 将iptables规则保存到其他文件中 service iptables save 这个命令会把规则保存到配置文件中/etc/
运维小白
2018/02/06
8890
Linux基础(day35)
如何在CentOS 7上使用FirewallD设置防火墙
Firewalld是一种防火墙管理解决方案,可用于许多Linux发行版,它们充当Linux内核提供的iptables包过滤系统的前端。在本教程中,我们将介绍如何为您的服务器设置防火墙,并向您展示使用firewall-cmd管理工具管理防火墙的基础知识。
挺问中原
2018/10/16
2.9K0
Linux下的防火墙
假设自定义的 ssh 端口号为 11011,使用下面的命令来添加新端口的防火墙规则:
Xiongan-桃子
2023/06/10
5130
Linux下的防火墙
Linux firewalld防火墙学习总结
Firewalld是一种简单的、有状态的、基于区域(zone-based)的防火墙。策略和区域用于组织防火墙规则。网络在逻辑上被划分为多个区域,它们之间的流量可以通过策略进行管理。
授客
2024/11/21
1550
Linux firewalld防火墙学习总结
Firewall防火墙配置-2
firewall-cmd Linux上新用的防火墙软件,跟iptables差不多的工具
院长技术
2021/02/19
7120
Centos7 firewalld防火墙基本操作
前言 在centos6的版本中,防火墙使用的iptables,iptables是一个静态防火墙,就是说它不能够动态的添加开启端口,必须在配置文件中添加开启端口,然后重启iptables后才能生效。而centos7的防火墙使用的是firewalld,它是动态的,可以通过命令添加开启端口,不用重启服务就可以使改变生效。 防火墙管理 systemctl enable firewalld       #设置开机启动 systemctl start firewalld        #开启服务 system
行 者
2018/03/26
1.1K0
Centos7 firewalld防火墙基本操作
如何使用Firewalld配置Linux主机?
在之前的文章中我介绍了Linux防火墙的基本配置,并在最后简单提及了下firewalld。本文我将详细为大家介绍如何使用firewalld配置Linux防火墙。Firewalld为用户提供了一个GUI界面,在这上面用户可以访问到所有的功能。此外,它还为我们提供了一个任务栏/面板小程序,可以让你快速的访问到最常用的功能,包括“阻止所有网络流量”选项。大多数配置都将在CLI(命令行界面)完成。本文我使用的是xfce终端,但只要是支持bash,ksh或其他Linux shell的任何终端你都可以用。
FB客服
2018/12/21
2K0
相关推荐
CentOS 防火墙 firewall-cmd 命令
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档