Linux 中的 15 个强大的 firewall-cmd 命令,牛牛牛
mhr18 2024-12-03 12:29 17 浏览 0 评论
企业中,因为业务的重要性,通常会对网络安全十分重视,那么一个好的防火墙系统就是强有力的利器!
本文,将带大家了解 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 命令。
本文目录如下:
- 安装并启用firewallD服务
- 区域
- 1.如何查看firewalld中的所有可用区域?
- 2. 如何找出哪个是默认区域?
- 3. 如何查找活动区域和相关网络接口的列表?
- 4. 如何查看活动公共区域是否有任何规则列出?
- 5. 如何查看所有可用区域的列表?
- 6. 如何将默认区域更改为特定区域?
- 7. 如何将网络接口从一个区域更改为另一个区域?
- 8. 如何建立自定义的firewalld zone?
- 服务
- 1.如何列出firewalld中所有可用的服务?
- 2. 如何列出特定区域内的所有可用服务?
- 3. 如何将现有服务添加到默认区域?
- firewalld两种模式
- 1. 如何永久添加服务?
- 2. 如何将我的运行时设置迁移到永久设置?
- 端口
- 1. 如何在公共区域为samba服务开放端口?
- 超时
前置条件:
- 操作系统:CentOS 7 或更高版本
- 软件包:firewalld
- 用户帐户:root 用户或具有 sudo 权限的用户帐户
- 建议使用 sudo 权限而不是 root 来运行所有管理命令
有三种方式配置防火墙:
- 在“/etc/firewalld”配置文件中直接编辑
- 图形界面“firewall-config”工具
- 终端中的命令行“firewall-cmd”
注意:本文我们将只关注“firewall-cmd”命令。
安装并启用firewallD服务
首先,更新包的最新当前版本。
sudo yum update -y
Firewalld在 CentOS 7 的所有基本安装上可用,但在最小安装上不可用,在这种情况下,我们可以使用以下命令进行安装:
$ sudo yum install firewalld -y
使用以下命令启动和启用服务
$ sudo systemctl start firewalld.service
$ sudo systemctl 启用 firewalld.service
使用以下命令验证防火墙服务的状态:
$ sudo firewall-cmd --state
Output:
running
$ sudo systemctl status firewalld
详细输出:
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中的所有可用区域?
$ sudo firewall-cmd --get-zones
这是 firewalld 中的默认预定义区域
2. 如何找出哪个是默认区域?
$ firewall-cmd --get-default-zone
Output:
public
根据上面的输出,可以看到公共区域被标记为默认区域,我们可以根据我们的要求更改它,我们将在接下来的例子中进一步讨论。
3. 如何查找活动区域和相关网络接口的列表?
$ firewall-cmd --get-active-zones
Output:
public
interfaces: enp1s0
在上面的输出中,您可以看到公共区域处于活动状态并与“enp1s0”网络接口相关联,如果没有任何接口未指定给特定区域,它将自动附加到默认区域。
4. 如何查看活动公共区域是否有任何规则列出?
$ sudo firewall-cmd --list-all --zone="public"
上面的输出显示公共区域处于活动状态并设置为默认值,网络接口“enp1so”与活动区域相关联,在此区域中,dhcpv6-client 和 ssh 被允许通过防火墙服务。
5. 如何查看所有可用区域的列表?
$ sudo firewall-cmd --list-all-zones
与前面的例子类似,这里也会分别列出每个可用区域的详细配置页面,请自行检查,因为输出列表会很长。
6. 如何将默认区域更改为特定区域?
在更改到新区域之前,让我们检查现有的可用区域。
$ sudo firewall-cmd --get-default-zone
Output:
public
在输出中,可以看到公共区域设置为默认区域,现在让我们尝试将区域从公共更改为工作。
$ sudo firewall-cmd --set-default-zone=work
Output:
success
如您所见,上述命令的输出是成功的,让我们验证一下。
$ sudo firewall-cmd --get-default-zone
Output:
work <==
7. 如何将网络接口从一个区域更改为另一个区域?
如果系统有两个网络接口,比如“enp1s0 和 enp1s1”,默认情况下,所有接口都将被分配到默认区域,通过使用以下命令可以将接口更改为另一个区域。
$ sudo firewall-cmd --zone=internal --change-interface=enp1s1
可以使用以下命令进行验证:
$ sudo firewall-cmd --get-active-zones
8. 如何建立自定义的firewalld zone?
我们知道,所有系统指定的配置文件都位于“/usr/lib/firewalld/zones”,用户指定的文件位于“/etc/firewalld/zones”。
使用以下命令创建自定义区域文件允许使用端口号 80 和 22 的 ssh 和 apache 服务。
确保新文件应以 .xml 格式保存在用户定义的位置,目前,名称区域文件的长度仅限于 17 个字符。
$ sudo vi /etc/firewalld/zones/ linuxtecksecure .xml
<?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>
保存并退出。
重新加载防火墙服务:
$ sudo firewall-cmd --reload
Output:
success
现在,重新检查 firewalld 中的可用区域
$ sudo firewall-cmd --get-zones
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中所有可用的服务?
$ sudo firewall-cmd --get-services
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. 如何列出特定区域内的所有可用服务?
$ sudo firewall-cmd --zone=work --list-services
Output:
dhcpv6-client ssh
输出显示在“工作”区域中仅启用了两个服务。
3. 如何将现有服务添加到默认区域?
$ sudo firewall-cmd --add-service=samba
Output:
success
在此示例中,我已将名为 samba 的现有服务添加到默认区域,您可以使用以下命令进行验证:
$ sudo firewall-cmd --zone=public --list-services
Output:
dhcpv6-client samba ssh
同样,我们可以将服务添加到默认区域以外的其他区域。使用以下命令:
$ sudo firewall-cmd --zone=internal --add-service=ftp
firewalld两种模式
默认情况下,firewalld 支持两种独立的模式,永久和运行时(立即)。
当我们启动防火墙时,它会将所有永久配置文件加载到运行时中。
您进行添加或更新的任何机会都将应用于运行时配置,并且不会自动启用到永久配置。
为了使其成为永久规则,我们需要使用“--permanent”参数,为了在 firewalld 中启用这些更改,我们需要重新加载或重新启动防火墙服务。
1. 如何永久添加服务?
$ sudo firewall-cmd --permanent --add-service=ftp
Output:
success
$ sudo firewall-cmd --reload
Output:
success
请记住,无论何时使用“--permanent”标志,都不要忘记重新加载防火墙服务。
2. 如何将我的运行时设置迁移到永久设置?
$ sudo firewall-cmd --runtime-to-permanent
Output:
success
通常,我们在运行时环境中测试所有规则,一旦规则成功运行,然后我们使用“--permanent”选项使它们永久化,使用上述命令一次性将所有运行时设置迁移到永久模式,如果防火墙设置无效,则只需重新加载/重新启动防火墙服务即可使这些规则在永久配置中工作。
端口
firewalld 允许我们直接处理网络端口,美妙之处在于,甚至无需在系统中安装特定服务,我们就可以在防火墙中打开和关闭相关端口。
1. 如何在公共区域为samba服务开放端口?
$ 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
Output:
success
使用上面的命令,我们已经成功打开了samba服务的端口
验证一下:
$ sudo firewall-cmd --list-ports
Output:
137/udp 138/udp 139/tcp 445/tcp
成功测试后,如果您希望将这些规则作为防火墙的永久规则继续使用,则将“--permanent”标志与上述命令一起使用或使用运行时作为永久命令,不要忘记重新加载服务。
超时
Firewalld 还有一个有趣的功能叫做超时。此功能将帮助许多系统管理员在其运行时设置中添加临时规则,例如,如果用户想通过 FTP 服务从服务器下载文件。
由于这只是一次性操作,因此不需要永久规则。
下载文件可能只需要 2-5 分钟(可能会因文件大小而异)。
在我们的例子中,我们可以允许 FTP 服务 5 分钟,它会在给定的时间后自动断开连接。
$ sudo firewall-cmd --zone=public --add-service=ftp --timeout=5m
我们可以以秒 (s)、分钟 (m) 或小时 (h) 为单位指定超时。
感谢您抽出宝贵时间阅读!我希望这篇文章可以帮助您通过示例了解“firewall-cmd”命令的基本用法,如果你喜欢这篇文章,请分享给其他人。
相关推荐
- 【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库
-
如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...
- Pure Storage推出统一数据管理云平台及新闪存阵列
-
PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...
- 对Java学习的10条建议(对java课程的建议)
-
不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...
- SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!
-
官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...
- JDK21有没有什么稳定、简单又强势的特性?
-
佳未阿里云开发者2025年03月05日08:30浙江阿里妹导读这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。阅前声明:本文介绍的内容基于AJDK21.0.5[1]以及以上...
- 「松勤软件测试」网站总出现404 bug?总结8个原因,不信解决不了
-
在进行网站测试的时候,有没有碰到过网站崩溃,打不开,出现404错误等各种现象,如果你碰到了,那么恭喜你,你的网站出问题了,是什么原因导致网站出问题呢,根据松勤软件测试的总结如下:01数据库中的表空间不...
- Java面试题及答案最全总结(2025版)
-
大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...
- 数据库日常运维工作内容(数据库日常运维 工作内容)
-
#数据库日常运维工作包括哪些内容?#数据库日常运维工作是一个涵盖多个层面的综合性任务,以下是详细的分类和内容说明:一、数据库运维核心工作监控与告警性能监控:实时监控CPU、内存、I/O、连接数、锁等待...
- 分布式之系统底层原理(上)(底层分布式技术)
-
作者:allanpan,腾讯IEG高级后台工程师导言分布式事务是分布式系统必不可少的组成部分,基本上只要实现一个分布式系统就逃不开对分布式事务的支持。本文从分布式事务这个概念切入,尝试对分布式事务...
- oracle 死锁了怎么办?kill 进程 直接上干货
-
1、查看死锁是否存在selectusername,lockwait,status,machine,programfromv$sessionwheresidin(selectsession...
- SpringBoot 各种分页查询方式详解(全网最全)
-
一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...
- 《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略
-
《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...
- LoadRunner(loadrunner录制不到脚本)
-
一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...
- Redis数据类型介绍(redis 数据类型)
-
介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...
- RMAN备份监控及优化总结(rman备份原理)
-
今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)