在CentOS 7上打开防火墙端口


339

我正在使用CentOS 7,并且必须确保端口2888和3888已打开。

我读了这篇文章,但这没有用,因为在CentOS 7 OS上没有iptables save命令。

有人告诉我,上述URL对CentOS 7无效。我应该遵循这一点。但是这篇文章对我到底需要执行什么命令尚不清楚。

我也发现

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

但这无法在重新启动后继续存在。

那么,如何打开端口并使其在重启后不受影响?


堆栈溢出是一个用于编程和开发问题的站点。这个问题似乎与主题无关,因为它与编程或开发无关。请在帮助中心中查看我可以询问哪些主题。也许超级用户Unix&Linux Stack Exchange是一个更好的选择。
jww

Answers:


653

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

firewall-cmd --get-active-zones

它会说是public,dmz或其他名称。您只应申请所需的区域。

在公共尝试的情况下:

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

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

firewall-cmd --reload

否则,用public代替您的区域,例如,如果您的区域是dmz:

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

29
我使用了此命令,但对我不起作用,后来改成--zone=dmz--zone=public
Tom Hall

2
是的,使用public也很有用。请也检查Sotsir的以下命令以进行更正。
ganeshragav 2014年

23
这里的前两个答案都没有真正解释什么--permanent,他们只是说要这样做。如果解释了答案的工作方式,那么这两个答案都将是更完整和有用的答案。从OP的资源之一中:“可以通过添加--permanent选项来使规则永久化。使用D-BUS从防火墙启动。”
dKen'3

9
请不要盲目地在所有区域中启用端口,直到您点击正确的端口。使用firewall-cmd --get-active-zones找出区在系统上使用。另外,man firewall-cmd。
basic6 2015年

1
在阅读fedora文档时 会指出The --permanent option needs to be the first option for all permanent calls。使用上面的代码我没有得到任何错误,但是我不确定这是否可能导致其他问题。
2016年

113

ganeshragav的回答是正确的,但是知道可以使用它也很有用:

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

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

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

然后重新加载防火墙

firewall-cmd --reload

[答案经过修改以反映Martin Peter的评论,原始答案--permanent在命令行结尾]


8
我不会依靠--permanent语句末尾的选项。该文档明确指出,它应该是第一个选择。
马丁·彼得

1
@MartinPeter man firewall-cmd在我的机器上未显示此类指示(Fedora 21)。
Jonathon Reinhart 2015年

@JonathonReinhart我指的是Fedora的FirewallD Wiki声明: The --permanent option needs to be the first option for all permanent calls.
马丁·彼得

它使我firewallD无法运行
Rahul Tathod 18/09/22

50

CentOS(RHEL)7已更改了使用firewall-cmd区域概念的防火墙,该概念类似于Windows版本的Public,Home和Private网络。您应该在此处查看您认为应该使用哪一个。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



23

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

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

14

虽然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立即激活它。


6

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

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

4

此处最有效的答案是可行的,但我在迈克尔·汉普顿(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

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

$ systemctl restart firewalld

1

如果您有多个端口允许在Centos 7 FIrewalled中使用,那么我们可以使用以下命令。

#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]

0

如果您熟悉centos 6或更早版本中的iptables服务,仍然可以通过手动安装来使用iptables服务:

步骤1 =>安装epel回购

百胜安装epel-release

步骤2 =>安装iptables服务

百胜安装iptables-服务

步骤3 =>停止Firewalld服务

systemctl停止防火墙

步骤4 =>在启动时禁用firewalld服务

systemctl禁用防火墙

步骤5 =>启动iptables服务

systemctl启动iptables

步骤6 =>在启动时启用iptables

systemctl启用iptables

最后,您现在可以在/ etc / sysconfig / iptables中编辑iptables配置。

所以->编辑规则->重新加载/重启。

确实喜欢较早的centos,具有与firewalld相同的功能。


0

对于iptables老手来说,Firewalld有点不直观。对于那些喜欢在简单的可配置树中使用类似iptables语法的iptables驱动的防火墙的人,请尝试用fwtree替换firewalld:https ://www.linuxglobal.com/fwtree-flexible-linux-tree-based-firewall/ 然后请执行下列操作:

 echo '-p tcp --dport 80 -m conntrack --cstate NEW -j ACCEPT' > /etc/fwtree.d/filter/INPUT/80-allow.rule
 systemctl reload fwtree 

0

您好在Centos 7 Firewall-cmd中。是正确的,如果您使用firewall-cmd --zone = public --add-port = 2888 / tcp,但是如果您重新加载firewal firewall-cmd --reload

您的配置不会被保存

您需要添加密钥

防火墙cmd-永久-区域=公共-添加端口= 2888 / tcp

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.