Contents

在Linux中打开网络端口

1. 概述

实际上,每个应用程序都使用端口与网络上的其他设备进行交互。使用 TCP 和 UDP 作为两种主要的传输协议,我们需要端口来通过网络传输/接收数据。所有操作系统都需要这个逻辑实体来进行有效的通信。每当我们启动应用程序服务时,它们都会自动映射到可用的网络端口。

但是,在许多操作系统中,这些端口默认是关闭的。这就是为什么我们必须在基础操作系统上打开网络端口以启用从基础到远程系统的通信流。

本文介绍如何在 Linux 中打开网络端口。

2. 什么是网络端口?

从根本上说,每台主机都可以在系统中运行多个应用程序。如果应用程序必须与其他设备通信,它会使用具有主机相关 IP 地址的网络接口。但是,如果两个或多个应用程序在同一台机器上运行,则关联的端口有助于区分该特定应用程序的流量与网络接口。 当我们说一个端口打开或监听时,这意味着应用程序或进程已准备好接受流量。

3. iptables

*iptables *是 Linux 系统用来过滤网络数据包的默认防火墙软件。它使用 Netfilter 框架来实现管理传入和传出数据包的 IP 数据包过滤规则。基本上,它围绕着表和链的概念展开

链是用于处理数据包的一组规则,而表是用于执行特定功能的链的集合。在这里,过滤器根据规则检查数据包并相应地路由它们。启用数据包过滤器以提高应用程序和系统的安全性始终是一种很好的做法。

接下来,让我们使用iptables命令列出防火墙规则:

$ sudo iptables -L
Chain INPUT (policy DROP)
target     prot opt source               destination
Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

在这里,输出显示默认情况下,所有输入流量都被阻止。结果,任何从其他设备到达服务器的数据包都会被丢弃。 通常,规则的应用是暂时的,并且在系统重新启动时会被删除。为了避免这种情况发生,让我们使用iptables-save命令保存iptables规则:

$ /sbin/iptables-save

4.打开网络端口

为了便于讨论,我们举以下例子:

/uploads/open_port/1.png

在这里,我们在 Linux 机器的 8080 端口上托管了一个 Web 应用程序。Linux 系统中的防火墙软件监控传入和传出的流量。但是,它会根据用户定义的防火墙规则过滤网络数据包。即使 Web 应用程序在系统内成功运行,将其暴露给外界取决于防火墙规则。

让我们在运行在 8080 端口的服务器上部署一个简单的nodejs应用程序:

$ npm start
> node-hello@1.0.0 start /home/tools/blogdemo-iptables/node-hello
> node index.js
Server running on http://192.168.56.109:8080/ 
..
..

我们成功部署了应用程序,并且可以在机器上访问它,因为我们可以使用curl命令进行验证:

$ curl https://localhost:8080/
Hello Node!

现在,让我们从浏览器打开http://192.168.56.109:8080尽管“nodejs”应用程序正常运行,但该站点并未从浏览器中打开

/uploads/open_port/2.png

在这里,由于服务器中的数据包过滤器部署而出现问题。如下图所示,服务器在接口丢弃请求:

/uploads/open_port/3.png

为了克服这个问题,我们必须在 iptable 中创建一个规则,允许所有 Web 流量从端口 8080 进入服务器

$ sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

在这种情况下,我们将一条规则附加到 INPUT 链中以接受任何目标端口为 8080 的 TCP 数据包:

/uploads/open_port/4.png

现在,让我们刷新浏览器页面并检查:

/uploads/open_port/5.png

同样,让我们再看几个阻止传入网络连接的示例。

为了阻止到服务器的所有传入 TELNET 连接,我们将以下规则添加到 INPUT 链中:

$ sudo iptables -I INPUT -p tcp --dport 23 -j DROP

如果我们想阻止从特定 IP 地址到服务器的任何传入 Web 流量连接,我们可以通过在 INPUT 链中添加类似的规则来实现:

$ sudo iptables -I INPUT -p tcp --dport 80 -s 192.168.56.109 -j DROP