windows系统连接到Linux系统某个端口的知识点
前言
基于b站博主:《韩顺平Linux》视频学习的记录,在真正的生产环境,往往需要将防火墙打开,但问题来了,如果我们把防火墙打开,那么外部请求数据包就不能跟服务器监听端口通讯?这是在工作中经常会用到的一个知识区,在本文当中,我将深入详细地说明某个系统连接某个系统端口的原理,涉及到的知识点有:【1】防火墙的工作原理【2】Linux系统下关于如何查看某个端口名和协议【3】如何连接【4】要解决的两个问题:1、关闭防火墙连接端口。2、开启防火墙连接端口。【5】一些相关的指令学习
(1)防火墙的工作原理
【1】定义说明:
防火墙是一种网络安全设备,主要用于保护计算机系统和网络免受来自外部网络的攻击。其工作原理主要是通过策略规则对网络数据进行过滤、管理和控制,从而控制网络的访问权限,保护网络和计算机系统的安全。
【2】防火墙的工作流程
- 防火墙在网络中建立一个边界,将外部网络与内部网络隔离开来。
网络数据包是计算机网络中传输信息的基本单位,它是在网络中流动的数据单元,包含一定大小的数据和一些头部信息。数据包的结构由标准的协议规范所定义,其中最常见的协议是TCP/IP协议栈。
【 知识点】:一个典型的数据包通常包含以下几个部分:
数据包头:数据包头部通常包含源IP地址、目标IP地址、端口号等关键信息,用于数据包在网络中的路由和传输。
【1】数据包体:数据包体则是实际的数据内容,可以是文本、图像、声音、视频等任意类型的数据。
【2】校验和:校验和用于检查数据包在传输过程中是否发生了损坏或丢失,以确保数据的完整性和可靠性。
【3】其他控制信息:还可能包括标识号、帧同步信息、流量控制等其他控制信息。
在网络中,当我们从一个网络设备向另一个网络设备发送数据时,数据会被切成一个个的数据包进行传输,直到将所有的数据包都传输完成,接收方才能将其重新组装为原始的数据流。因此,数据包在计算机网络中起着非常重要的作用。
- 在网络数据被传输到内部网络之前,防火墙会检查网络数据的源IP地址、目的IP地址、端口号、协议类型等,并根据设定的规则进行过滤和管理。
【1】源IP地址和目的IP地址可以通过DNS解析系统将网址转换成IP地址来实现通信,比如当我们在浏览器中输入一个网址时,浏览器会自动进行DNS解析并获得目的IP地址,然后向该IP地址发起请求。
【2】端口号用于区分通信中不同的服务或应用程序,同一个IP地址上的不同服务或应用程序可以通过不同的端口号来实现识别和区分,例如HTTP协议默认使用80端口,HTTPS协议默认使用443端口。端口号范围为065535,其中01023为固定端口,一般用于常见的服务或应用程序,需要特殊权限才能访问,如FTP(21)、SSH(22)、Telnet(23)和SMTP(25)等。[2]
【3】协议类型是指网络通信中所采用的协议类型,主要有TCP和UDP两种。TCP是面向连接的、可靠的、基于字节流的传输层通信协议,可以保证数据传输的可靠性,但相对较慢;UDP则是不可靠的传输协议,它不保证数据的可靠性,但速度较快,适用于对数据传输延迟要求较低的场景。
- 如果数据包符合安全规则,防火墙将允许其通过,并传输到内部网络;如果不符合规则,则防火墙会拦截该数据包,并对其进行处理,比如丢弃或回复一个拒绝访问的消息。
- 防火墙也可以根据其安全策略,对一些特定类型的数据包进行检测和处理,例如拦截病毒、防范DDoS攻击等。
- 防火墙可以对网络数据流进行实时监控和日志记录,以便及时发现和排除潜在的安全威胁。
【原理图】
(2)问题1:启动防火墙,在客户端(可以是自己的主机)测试 111 端口是否能 telnet、连接?
【1】查看Linux系统下的防火墙状态
指令:systemctl status firewalld
从结果中可以看出,Actice:active(sunning)
,当前防火墙是在运行状态的,一些端口当前是无法访问到该服务器的。
【2】启动、关闭防火墙的指令
注意:这里的指令只对于当前运行终端有效,关闭重启服务器之后失效。这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置。
1、启用指令:systemctl start firewalld
2、关闭指令:systemctl stop firewalld
注意:如果希望设置某个服务自启动或关闭永久生效,要使用 systemctl [enable|disable] 服务名
1、永久自启动指令:systemctl enable firewalld
2、永久关闭自启动指令:systemctl disable firewalld
【3】查看网络状态的指令
指令:netstat -anp | more
【4】问题:那么我们在防火墙打开的前提下,在客户端(可以是自己的主机)测试 111 端口是否能 telnet。
一般电脑都会默认关闭telnet终端指令功能,可以这样开启服务:
控制面板>程序和功能>启用或关闭windows功能里面找telnet,之后勾上。
你电脑主机(客户端)终端输入指令测试:telnet IP 端口
测试如下,你会发现,即使是在Linux系统防火墙打开的情况下,客户端还是没有成功连接目标端口。
原因分析:这是因为Linux系统的防火墙处于打开状态,把111端口存放在了关闭的位置,防火墙时关闭了该端口的访问权限。
关闭防火墙
指令:systemctl stop firewalld
测试是否可以连接,发现连接成功!关闭防火墙就相当于客户端可以直接连接服务端,没有任何的阻碍!
(3)问题2:防火墙打开状态下,如何连接端口
前提:在真正的生产环境,往往需要将防火墙打开,但问题来了,如果我们把防火墙打开,那么外部请求数据包就不能跟服务器监听端口通讯。这时,需要打开指定的端口。比如 80、22、8080 等,这个又怎么做呢?
【原理图】:防火墙打开状态下,里面类似有两个盒子,一个盒子装着关闭的端口,一个盒子装着打开的端口,只有在防火墙里面的端口打开之后,才可以链连接。
知识卡片:
firewall
指令
- 打开端口:
firewall-cmd --permanent --add-port=端口号/协议
- 关闭端口:
firewall-cmd --permanent --remove-port=端口号/协议
- 重新载入,才能生效 :
firewall-cmd --reload
- 查询端口是否开放:
firewall-cmd --query-port=端口/协议
【1】打开111端口
打开指令:firewall-cmd --permanent --add-port=111/tcp
重载指令:firewall-cmd --reload
查看当前端口状态:firewall-cmd --query-port=111/tcp
,yes表示打开状态
【2】客户端测试连接Linux服务端端口
指令:telnet telnet IP 端口
发现可以进去了。
【3】关闭111端口
关闭指令:firewall-cmd --permanent --remove-port=111/tcp
重载指令:firewall-cmd --reload
查看当前端口状态:firewall-cmd --query-port=111/tcp
,no表示关闭状态。
【4】客户端再次测试连接Linux服务端端口
指令:telnet telnet IP 端口
发现连接不成功!因为防火墙打开了,而访问的端口关闭了。
(4)总结
相信大家看到这里,应该对防火墙的工作原理以及客户端连接服务端端口有许些了解,同时,也希望大家能指出错误之处,大家一起交流、一起学习!