如何在Linux中打开端口?

我正在研究一个简单的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 

我看到这一行2次。 仍然困惑! 不知道。

我现在打开以下urlhttp://www.yougetsignal.com/tools/open-ports/,并input我的主机IP和端口,它说,端口5122closures50.56.246.162(这是我的主机IP)

我的问题是我如何永久保持一个特定的端口开放聆听。

任何帮助将不胜感激。

您需要开始运行您的应用程序(使用该端口号)端口显示为打开。 只要它开始运行并成功侦听端口5122,本地nmap扫描将列出该端口被打开

一旦您的应用程序满意并且您想允许从外部主机访问,您只需修改防火墙规则即可。

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

说明

默认情况下,所有TCP和UDP端口都closures (不处于监听状态 )。 只有当一个服务器或类似的程序打开一个networking套接字并开始“监听”一个端口号时,该端口才会被打开

例如,在我的服务器上本地运行nmap -sT localhost显示大多数端口是closures的,只列出了打开的端口:

 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这样的防火墙可以用来有select地阻止对端口的访问,无论它们是否已经打开。 在这种情况下,这些端口被认为是被过滤的 – 尽pipe令人困惑的是,一些人和网站将过滤的端口称为“closures”,并且将防火墙filter移除为“打开”端口。

例如,从外部主机在同一台服务器上运行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已打开,但从外部angular度看,它们显示为正在过滤