Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Linux中打开端口?_Linux_Node.js_Port_Iptables - Fatal编程技术网

如何在Linux中打开端口?

如何在Linux中打开端口?,linux,node.js,port,iptables,Linux,Node.js,Port,Iptables,我正在开发一个简单的Node.js应用程序。这需要打开一个特定的端口。例如,如果我想让应用程序监听端口(比如)5122,我必须首先打开端口5122。为此,我在iptables中应用了以下规则 iptables -I INPUT 3 --proto tcp --dport 5122 -j ACCEPT service iptables save 起初,这对我很有效。但过了一段时间后,它突然停止了工作。 我现在想检查端口5122是否真的打开了。我发出了命令 nmap -sT -O localhos

我正在开发一个简单的Node.js应用程序。这需要打开一个特定的端口。例如,如果我想让应用程序监听端口(比如)5122,我必须首先打开端口5122。为此,我在iptables中应用了以下规则

iptables -I INPUT 3 --proto tcp --dport 5122 -j ACCEPT
service iptables save
起初,这对我很有效。但过了一段时间后,它突然停止了工作。 我现在想检查端口5122是否真的打开了。我发出了命令

nmap -sT -O localhost
我在这里没有看到任何这样的端口。但是

sudo iptables -L shows it like this -

ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:5122 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:5122 
这行我看了两遍。还是很困惑!不知道

我现在打开了下面的url,输入了我的主机IP和端口,上面写着,端口5122在50.56.246.162关闭(这是我的主机IP)

我的问题是如何永久保持某个特定端口打开以供侦听


非常感谢您的帮助。

您需要开始运行应用程序(使用该端口号)以使端口显示为打开状态。一旦它开始运行并成功侦听端口5122,本地nmap扫描就会将该端口列为打开状态

您只需要在应用程序运行到您满意的程度并且您希望允许从外部主机访问它时修改防火墙规则

iptables-L
的输出显示您的
iptables
命令 已成功修改防火墙规则以允许外部访问您的应用程序。事实上,看起来您已经插入了两次规则;这不会造成任何伤害,因为第二条规则不会被处理

解释 默认情况下,所有TCP和UDP端口均关闭(未处于侦听状态)。只有当服务器或类似程序打开网络套接字并开始“侦听”端口号时,该端口才会显示为打开

例如,在我的服务器上本地运行
nmap-sT localhost
会显示大多数端口已关闭,并且只列出打开的端口:

Nmap scan report for localhost (127.0.0.1)
Host is up (0.00019s latency).
rDNS record for 127.0.0.1: localhost.localdomain
Not shown: 995 closed ports
PORT     STATE SERVICE
25/tcp   open  smtp
80/tcp   open  http
3306/tcp open  mysql
可以使用Netfilter/iptables等防火墙有选择地阻止 访问端口,无论它们是否已打开。在这种情况下,这些端口被认为是经过过滤的——尽管令人困惑,一些人和网站将过滤后的端口称为“关闭”,将删除防火墙过滤器的行为称为“打开”端口

例如,从外部主机在同一台服务器上运行
nmap-sT server.name
会报告不同的结果,因为现在来自远程主机的数据包正在被防火墙过滤:

Interesting ports on server.name (78.47.203.133):
Not shown: 1679 filtered ports
PORT   STATE SERVICE
80/tcp open  http
请注意,端口25和3306在本地是打开的,但从外部角度看,它们显示为已过滤