使用FirewallD在CentOS 7上管理防火墙

FirewallD是动态管理的防火墙,它支持基于RHEL 7的服务器上可用的IPv4和IPv6防火墙规则以及防火墙区域。它是iptables内核netfilter代码的直接替代品,并且可以使用。

本文将简要介绍使用firewall-cmd命令在CentOS 7上管理防火墙。

检查FirewallD是否正在运行

第一步是检查FirewallD是否已安装并正在运行。这可以通过systemd运行以下命令来完成:

$ systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2016-03-10 15:07:00 UTC; 1min 30s ago
   ...

或者,您可以使用以下firewall-cmd工具进行检查:

$ firewall-cmd --state
running

管理区域

FirewallD使用zones区域定义连接所用信任级别的概念进行操作。您可以将不同的网络接口划分为不同的区域,以便对每个接口应用特定的防火墙规则,也可以对所有接口使用一个区域。

开箱即用,所有操作都在默认public区域上完成,但是也可以应用其他几个预配置区域。

列出所有可用区域

您可能需要获取所有可用区域的列表,其中有些是开箱即用的。同样,可以使用firewall-cmd以下命令完成此操作:

$ firewall-cmd --get-zones
block dmz drop external home internal public trusted work

检查默认区域

您可以使用来发现当前配置的默认区域firewall-cmd

$ firewall-cmd --get-default-zone
public

如果您想更改默认区域(例如home),可以通过运行以下命令来完成:

$ firewall-cmd --set-default-zone=home
success

此信息将反映在主配置文件中/etc/firewalld/firewalld.conf。但是,建议您不要手动修改此文件,而应使用firewall-cmd

检查当前分配的区域

您可以通过运行以下命令获取分配接口的区域列表:

$ firewall-cmd --get-active-zones
public
  interfaces: eth0

您还可以eth0通过运行以下命令检查单个接口的区域(在这种情况下):

$  firewall-cmd --get-zone-of-interface=eth0
public

创建区域

如果默认的预配置区域不能完全满足您的需求,那么zone1再次创建新区域()的最简单方法是firewall-cmd

$ firewall-cmd --permanent --new-zone=zone1
success

创建后,您需要重新加载:

$ firewall-cmd --reload
success

将区域应用于接口

为了将网络接口永久分配给一个区域,您可以使用firewall-cmd记住--permanent保留该标记以保留更改的方法。如果使用NetworkManager,则还应确保使用nmcli来设置连接区域。

$ firewall-cmd --permanent --zone=internal --change-interface=eth1`
success

获取区域的永久配置

为了检查区域的永久配置(public在这种情况下),包括分配的接口,允许的服务,端口设置等,请运行:

$ firewall-cmd --permanent --zone=public --list-all
public (default)
  interfaces:
  sources:
  services: dhcpv6-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

管理服务

一旦分配并配置了所需的区域,就可以开始向区域添加服务。服务描述了可以为区域访问的协议和端口。

列出现有服务

在firewalld中预先配置了许多常用服务。这些可以列出:

$ firewall-cmd --get-services
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-client ipsec iscsi-target kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind rsyncd samba samba-client smtp ssh telnet tftp tftp-client transmission-client vdsm vnc-server wbem-https

您还可以获取为默认区域启用的服务的列表:

$ firewall-cmd --list-services
dhcpv6-client ssh

将服务添加到区域

您可以public使用以下--add-service标志永久启用区域()的给定服务:

$ firewall-cmd --permanent --zone=public --add-service=http
success

然后重新加载当前的防火墙会话:

$ firewall-cmd --reload
success

然后,验证是否已添加:

$ firewall-cmd --zone=public --list-services
dhcpv6-client http ssh

从区域中删除服务

您可以public使用以下--remove-service标志永久删除区域()的给定服务:

$ firewall-cmd --permanent --zone=public --remove-service=http
success

然后重新加载当前的防火墙会话:

$ firewall-cmd --reload
success

然后,验证是否已添加:

$ firewall-cmd --zone=public --list-services
dhcpv6-client ssh

从区域中添加/删除多个服务

您可以添加或删除多个服务(例如,httphttps从区按一次一个一次通过在大括号包裹所需的服务名称(),或全部{}):

$ firewall-cmd --permanent --zone=public --add-service=
success

$ firewall-cmd --permanent --zone=public --list-services
dhcpv6-client http https ssh

创建新服务

有时您可能需要添加新的自定义服务-例如,如果您已更改SSH守护程序的端口。服务是使用简单的XML文件定义的,默认文件位于/usr/lib/firewalld/services

$  tree /usr/lib/firewalld/services
/usr/lib/firewalld/services
├── amanda-client.xml
├── bacula-client.xml
├── bacula.xml
├── dhcpv6-client.xml
├── dhcpv6.xml
├── dhcp.xml
├── dns.xml
├── freeipa-ldaps.xml
├── freeipa-ldap.xml
├── freeipa-replication.xml
├── ftp.xml
├── high-availability.xml
├── https.xml
├── http.xml
...

创建新服务的最简单方法是复制这些现有服务文件之一并进行修改。定制服务应位于中/etc/firewalld/services。例如,自定义SSH服务:

$ cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-custom.xml

此复制文件的内容应类似于:

$ cat /etc/firewalld/services/ssh-custom.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="22"/>
</service>

为了更改端口,您应该更改服务的简称和端口。您也可以根据需要更改描述,但这只是用户界面或其他应用程序可以使用的额外元数据。在此示例中,我将端口更改为1234:

$ nano /etc/firewalld/services/ssh-custom.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SSH-Custom</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="1234"/>
</service>

保存后,您将需要重新加载防火墙,然后可以将规则应用于您的区域:

$ firewall-cmd --reload
success

$ firewall-cmd --permanent --zone=public --add-service=ssh-custom
success

港口管理

除了使用服务之外,您还可以按协议手动允许端口。要允许7777public区域的TCP端口:

$ firewall-cmd --permanent --zone=public --add-port=7777/tcp
success

您还可以添加端口范围:

$ firewall-cmd --permanent --zone=public --add-port=7000-8000/tcp
success

要删除(并因此拒绝)7777public区域的TCP端口:

$ firewall-cmd --permanent --zone=public --remove-port=7777/tcp
success

public重新加载当前防火墙会话后,您还可以列出给定区域()当前允许的端口:

$ firewall-cmd --zone=public --list-ports
7000-8000/tcp

启用防火墙D

一旦按照自己的喜好配置了防火墙,就应该确保通过systemd启用它,以确保它在启动时启动:

$ systemctl enable firewalld

结论

FirewallD中还有许多其他设置和选项,例如端口转发,伪装和通过D-Bus与防火墙通信。希望本指南可以帮助您掌握基础知识,并为您提供了开始对服务器进行防火墙保护的工具。下面的一些其他阅读材料将帮助您充分利用防火墙。



Leave a Comment

如何在CentOS 7上安装Oxwall

如何在CentOS 7上安装Oxwall

Oxwall是一个开源社交网络软件平台,可用于免费构建自定义社交网站(SNS)。在这篇文章中,

如何在CentOS 7上设置vsFTPd

如何在CentOS 7上设置vsFTPd

FTP是用于通过Internet传输文件的有用协议,本指南将向您展示如何设置vsFTPd(非常安全的文件传输协议守护程序)o

使用Nethogs监视网络带宽使用情况

使用Nethogs监视网络带宽使用情况

在本教程中,我们将介绍在CentOS 6x x64上安装和使用nethogs的过程。nethogs是一种网络监视工具,它允许Networ

如何在CentOS 7上安装BoltWire CMS

如何在CentOS 7上安装BoltWire CMS

使用其他系统?简介BoltWire是一个用PHP编写的免费,轻量级的内容管理系统。与大多数其他内容管理人员相比

在CentOS 6上设置SA-MP San Andreas多人服务器

在CentOS 6上设置SA-MP San Andreas多人服务器

欢迎来到另一个Vultr教程。在这里,您将学习如何安装和运行SAMP服务器。本指南是为CentOS 6编写的。先决条件

使用Etckeeper进行/ etc的版本控制

使用Etckeeper进行/ etc的版本控制

简介/ etc /目录在Linux系统运行中起着至关重要的作用。其原因是因为几乎每个系统配置

如何在CentOS 7上安装Microweber

如何在CentOS 7上安装Microweber

使用其他系统?Microweber是一个开放源代码的拖放式CMS和在线商店。Microweber源代码托管在GitHub上。本指南将向您展示

如何在CentOS 7上安装SonarQube

如何在CentOS 7上安装SonarQube

使用其他系统?SonarQube是用于质量系统开发的开源工具。它是用Java编写的,并且支持多个数据库。它提供

如何在CentOS 7上使用Mosh进行远程服务器管理

如何在CentOS 7上使用Mosh进行远程服务器管理

使用其他系统?Mosh是Mobile Shell的缩写,是一种新兴的远程终端应用程序,旨在提供更好的连接和使用

如何在CentOS 7上安装MoinMoin

如何在CentOS 7上安装MoinMoin

MoinMoin是一个使用Python编写的基于文件系统的开源Wiki引擎。如今,MoinMoin已广泛用于开源社区。许多供应商

在CentOS 7上安装H2O Web服务器

在CentOS 7上安装H2O Web服务器

H2O是新一代HTTP服务器,它对所有当前使用的Web服务器都具有出色的,功能齐全的HTTP / 2实现。使用H2O作为您的Web服务器

如何在Debian,CentOS和FreeBSD上使用Sudo

如何在Debian,CentOS和FreeBSD上使用Sudo

在Linux和Unix系统管理员中,使用sudo用户访问服务器并在root级执行命令是一种非常普遍的做法。使用泡沫

如何在Ubuntu 16.10上安装Countly Analytics

如何在Ubuntu 16.10上安装Countly Analytics

使用其他系统?Countly是一个开源Web /移动分析和营销平台。它具有许多用于从Web收集数据的功能

如何在CentOS 7上安装MODX CMS和Nginx

如何在CentOS 7上安装MODX CMS和Nginx

MODX是一个用PHP编写的免费开放源内容管理系统。它使用MySQL或MariaDB来存储其数据库。MODX专为满足以下条件的企业而设计:

如何在CentOS 7 LAMP VPS上安装Lychee 3.1相册

如何在CentOS 7 LAMP VPS上安装Lychee 3.1相册

使用其他系统?Lychee 3.1相册是一种简单,灵活,免费和开源的照片管理工具,可在VPS服务器上运行。安装

如何在CentOS 7上安装ERPNext开源ERP

如何在CentOS 7上安装ERPNext开源ERP

使用其他系统?ERP或企业资源计划是用于管理核心业务流程的企业应用程序套件。ERPNext是免费的

如何在CentOS 7 LAMP VPS上安装Paste 2.1

如何在CentOS 7 LAMP VPS上安装Paste 2.1

使用其他系统?Paste 2.1是一个简单,灵活,免费和开源的pastebin应用程序,用于存储代码,文本等。最初是

如何在CentOS 7上安装Seafile Server

如何在CentOS 7上安装Seafile Server

使用其他系统?Seafile(社区版本)是一个免费和开源的文件同步和共享解决方案,类似于ownCloud。机智

如何在CentOS 7上安装Kolab组件

如何在CentOS 7上安装Kolab组件

使用其他系统?Kolab Groupware是一个免费的基于Web的开源组件软件。它的功能包括电子邮件通信,事件

如何在CentOS 7 LAMP VPS上安装Omeka Classic 2.4 CMS

如何在CentOS 7 LAMP VPS上安装Omeka Classic 2.4 CMS

使用其他系统?Omeka Classic 2.4 CMS是一个免费的开源数字发布平台和用于共享数字内容的内容管理系统(CMS)

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

什麼是日誌文件系統,它是如何工作的?

什麼是日誌文件系統,它是如何工作的?

我們的計算機以稱為日誌文件系統的有組織的方式存儲所有數據。這是一種有效的方法,可以讓計算機在您點擊搜索時立即搜索和顯示文件。 https://wethegeek.com/?p=94116&preview=true

技術奇點:人類文明的遙遠未來?

技術奇點:人類文明的遙遠未來?

隨著科學的快速發展,接管了我們的大量工作,我們陷入無法解釋的奇點的風險也在增加。閱讀,奇點對我們意味著什麼。

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

2021 年人工智能對醫療保健的影響

2021 年人工智能對醫療保健的影響

過去幾十年,醫療保健領域的人工智能取得了巨大飛躍。因此,醫療保健中人工智能的未來仍在日益增長。