在CentOS 7上开放防火墙端口

375

我正在使用CentOS 7,需要确保2888和3888端口是开放的。

我阅读了这篇文章,但它对CentOS 7操作系统无法使用iptables save命令,并没有起到作用。

有人告诉我上面那个URL对于CentOS 7无效,我应该遵循这篇文章。但是这篇文章并没有明确告诉我需要执行哪个命令。

我还找到了

firewall-cmd --zone=public --add-port=2888/tcp 

但这不会在重新启动后生效。

那么我该如何打开端口并使其在重新启动后生效呢?


堆栈溢出(Stack Overflow)是一个编程和开发问题的网站。该问题似乎不属于编程或开发范畴,因此被认为是离题的(off-topic)。请参阅帮助中心的可以在这里问什么样的问题。也许 Super User 或者 Unix & Linux Stack Exchange 更适合提问这个问题。 - jww
12个回答

725

使用此命令查找您的活动区域:

firewall-cmd --get-active-zones

它将显示为 public、dmz 或其他内容。您应该只应用所需的区域。

对于 public,请尝试:

firewall-cmd --zone=public --add-port=2888/tcp --permanent

然后记得重新加载防火墙以使更改生效。

firewall-cmd --reload
否则,将公共区域替换为您的区域,例如,如果您的区域是 DMZ:
firewall-cmd --zone=dmz --add-port=2888/tcp --permanent

31
我使用了这个命令,但是它对我没有起作用,成功的方法是将--zone=dmz改为--zone=public - Tom Hall
2
是的,使用public也是有用的。请检查Sotsir的下面命令以进行校正。 - ganeshragav
23
这里的前两个答案都没有解释--permanent是什么意思,它们只是说要这样做。如果能解释一下答案是如何起作用的,这两个答案就会更完整和有用。根据提问者提供的资料之一:通过添加--permanent选项,可以使规则变得永久。如果规则不是永久的,则需要在每次使用D-BUS接收到防火墙的start、restart或reload消息后重新应用规则。 - dKen
10
请不要盲目地在所有的区域启用端口,直到找到正确的区域。请使用 firewall-cmd --get-active-zones 命令查看系统上使用的区域。同时,可以查看 man firewall-cmd 获取更多信息。 - basic6
1
在阅读 Fedora 文档 时,它指出 --permanent 选项需要是所有永久调用的第一个选项。我使用上述方法没有收到任何错误,但我不确定这是否会对其他人造成问题。 - Marc
显示剩余5条评论

123

ganeshragav的答案是正确的,但是还有一个有用的技巧,你可以使用:

firewall-cmd --permanent --zone=public --add-port=2888/tcp 

但如果是已知的服务,您可以使用:

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

然后重新加载防火墙

firewall-cmd --reload

好的,请提供需要翻译的内容。

9
在语句末尾使用--permanent选项是不可靠的。文档明确指出,应该将其作为第一个选项。 - Martin Peter
1
@MartinPeter 在我的机器上(Fedora 21),man firewall-cmd 没有给出这样的指示。 - Jonathon Reinhart
@JonathonReinhart 我指的是Fedora的FirewallD Wiki中所述: --permanent选项需要成为所有永久调用的第一个选项。 - Martin Peter
它告诉我防火墙未运行。 - Rahul Tathod

53

CentOS (RHEL) 7已经更换了防火墙,使用firewall-cmd代替了之前的iptables。它引入了“区域”(zones)的概念类似于Windows中的公用、家庭和专用网络。你可以在这里查看每个区域的描述并选择适合自己的区域。EL7默认使用public区域,以下示例也使用此区域。

你可以使用firewall-cmd --list-all命令查看当前使用的区域,并使用firewall-cmd --set-default-zone=<zone>命令更改区域。

接下来你需要知道在哪个区域开放服务或端口:

firewall-cmd --permanent --zone=<zone> --add-service=http

firewall-cmd --permanent --zone=<zone> --add-port=80/tcp

你可以运行以下命令检查端口是否已打开:

firewall-cmd --zone=<zone> --query-port=80/tcp

firewall-cmd --zone=<zone> --query-service=http

根据文档

在永久模式下更改防火墙设置后,只有在重新加载防火墙或系统重启时才会生效。

你可以使用firewall-cmd --reload命令重新加载防火墙设置。


32

Fedora,通过使用iptables实现

sudo iptables -I INPUT -p tcp --dport 3030 -j ACCEPT
sudo service iptables save

似乎工作正常


1
我在我的CentOS 7安装中没有启用防火墙。这个方法非常有效。谢谢! - reza.safiyat

29

使用以下命令查看打开的端口。

firewall-cmd --list-ports

我们使用以下方法来查看其端口开放的服务。

firewall-cmd --list-services
我们使用以下命令来查看服务端口是否开放以及已开放的端口。
firewall-cmd --list-all

要将服务添加到防火墙中,我们使用以下命令,在这种情况下,该服务将使用任何端口在防火墙中打开。

firewall-cmd --add-services=ntp 

为了让这项服务长期开放,我们使用以下命令。

firewall-cmd —add-service=ntp --permanent 

要添加一个端口,请使用以下命令

firewall-cmd --add-port=132/tcp  --permanent

要运行防火墙,必须使用以下命令重新加载。

firewall-cmd --reload

雅阿里


应将上述的“firewall-cmd -add-service=ntp --permanent”更改为“firewall-cmd --add-service=ntp --permanent”。 - Maduranga Siriwardena

16

虽然 ganeshragavSotsir 提供了正确且直接适用的方法,但请注意您可以将自己的服务添加到/etc/firewalld/services中。可以查看/usr/lib/firewalld/services/获取灵感,其中包含firewalld预定义的服务。

这种方法的优点是,稍后您将知道为什么这些端口是开放的,因为您已经在服务文件中进行了描述。此外,您现在可以将其应用于任何区域,而不会有拼写错误的风险。此外,对服务所做的更改无需单独应用于所有区域,而只需应用于服务文件即可。

例如,您可以创建/etc/firewalld/services/foobar.xml:

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>FooBar</short>
  <description>
    This option allows you to create FooBar connections between
    your computer and mobile device. You need to have FooBar
    installed on both sides for this option to be useful.
  </description>
  <port protocol="tcp" port="2888"/>
  <port protocol="tcp" port="3888"/>
</service>

(有关语法信息,请参阅man firewalld.service。)

创建此文件后,您可以使用firewall-cmd --reload使其可用,并使用以下命令将其永久添加到某个区域:

firewall-cmd --permanent --zone=<zone> --add-service=foobar

跟着执行 firewall-cmd --reload 命令,使其立即生效。


这对我在配置Freeswitch(sips.xml)时起了作用。 - undefined

14

要查看打开的端口,请使用以下命令:

firewall-cmd --list-ports

我们使用以下内容查看其端口已打开的服务:

firewall-cmd --list-services

我们使用以下方式来查看哪些服务的端口是开放的,并查看开放的端口:

firewall-cmd --list-all

要将服务添加到防火墙中,我们使用以下命令,在这种情况下,该服务将使用任何端口在防火墙中打开:

firewall-cmd --add-services=ntp 

为了使此服务永久开放,我们使用以下命令:

firewall-cmd -add-service=ntp --permanent 

要添加一个端口,请使用以下命令:

firewall-cmd --add-port=132/tcp  --permanent

3
不要忘记使用 firewall-cmd --reload 重新加载。 - Aleem

5

这里的顶级答案是可行的,但我在Michael Hampton的答案中发现了更加优雅的解决方案。 "新"(firewalld-0.3.9-11+)--runtime-to-permanent选项可以让您创建运行时规则并在使其永久化之前进行测试:firewall-cmd

$ firewall-cmd --zone=<zone> --add-port=2888/tcp
<Test it out>
$ firewall-cmd --runtime-to-permanent

或者撤销仅在运行时更改的内容:

$ firewall-cmd --reload

另请参见Antony Nguyen的评论。显然,在某些规则已被删除的情况下,防火墙命令firewall-cmd --reload可能无法正常工作。在这种情况下,他建议重新启动firewalld服务:

$ systemctl restart firewalld

3
如果您需要在Centos 7防火墙中允许多个端口,则可以使用以下命令。
#firewall-cmd --add-port={port number/tcp,port number/tcp} --permanent

#firewall-cmd --reload


And check the Port opened or not after reloading the firewall.


#firewall-cmd --list-port


For other configuration [Linuxwindo.com][1]

2

在Centos 7的防火墙中,你可以使用以下命令来添加端口:

firewall-cmd --zone=public --add-port=2888/tcp

但是如果你重新加载防火墙,你的配置将不会被保存。因此,你需要使用以下命令来永久添加端口并保存配置:

firewall-cmd --permanent --zone=public --add-port=2888/tcp


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接