我正在开发一个简单的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次。仍然困惑!不知道。
我现在打开了以下网址http://www.yougetsignal.com/tools/open-ports/并输入了我的主机IP和端口,它说,端口5122在50.56.246.162(这是我的主机IP)上关闭
我的问题是如何永久保持特定端口可供收听。
任何帮助都将受到高度赞赏。
答案 0 :(得分:2)
您需要开始运行应用程序(使用该端口号),以使端口显示为打开状态。一旦它开始运行并成功侦听端口5122,本地nmap扫描会将该端口列为 open 。
一旦您的应用程序工作满意并且您希望允许从外部主机访问它,您只需要修改防火墙规则。
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等防火墙可用于有选择地阻止 访问端口,无论它们是否已打开。在这种情况下,这些端口被认为是过滤 - 虽然令人困惑,但有些人和网站将过滤后的端口称为“已关闭”,并将防火墙过滤器移除为“打开”端口。
E.g。从外部主机在同一服务器上运行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是打开的,但从外部角度来看,它们显示为已过滤。