有一定网络基础的朋友们都知道 , 服务器一旦接入公网就会面临各种各样的网络攻击,而攻击者想要入侵你的服务器就得先知道服务器的IP地址和开放的端口,然而公网上的服务器那么多,攻击者总不可能一个个去试 , 所以就会通过一些扫描软件来扫整个IP段的端口开放情况 , 看哪些IP地址对应的服务器是在线的,进而进一步去攻击这些服务器 。
也正是如此,现在的云服务器一般都提供了安全组功能,而服务器本身也提供有防火墙功能,默认情况下我们需要将开放的端口在安全组及防火墙规则里开放 。但有时候,我们明明在安全组和防火墙规则里开放了某些端口,然而使用端口扫描工具却发现这些端口依旧是关闭的,这是为什么呢?
端口扫描的原理及方式
所谓“端口扫描”其实就是通过专门的软件来对一段或指定端口进行扫描,端口扫描软件会提供一个扫描结果能知道这台服务器上哪些端口是开放的 。
1、原理
端口扫描的原理很简单 , 就是一个客户端主机向对方服务器的某个端口提出建立连接的请求,如果对方服务器应答了,就表示对方服务器的这个端口是开放的,这样就知道对方服务器上开放了哪些服务 。
2、常见扫描方式
- TCP Connect() 扫描
- TCP SYN 扫描
- TCP FIN 扫描
如果你在服务器安全组及防火墙中已经将某个端口设为开放状态了,使用端口扫描软件扫端口时依旧提示端口关闭,那可能原因有以下几种:
1、端口对应服务未启动
比如HTTP Web服务的端口是80 , 如果你的服务器上没有安装HTTP服务(如:IIS、Nginx、Tomcat、Apache),那80端口自然也不会开启监听 。
2、防火墙规则中限制了SYN、FIN等报文
通过上面说到的现在市面上端口扫描软件的扫描方式,如果在防火墙中做了限制SYN、FIN等报文 , 那即使你的服务器上的端口已经开启监听了、安全组及防火墙中也开放了此端口,端口扫描软件依旧是扫不到此端口的 。
比如Linux服务器,一旦我们在iptables中设置了以下规则,端口扫描软件就会失效 。
-A INPUT -p tcp –tcp-flags ALL FIN,URG,PSH -j REJECT
-A INPUT -p tcp –tcp-flags SYN,RST SYN,RST -j REJECT
【防火墙放开端口了还是不能访问 防火墙开放端口后还是不能访问】
-A INPUT -p tcp –tcp-flags SYN,FIN SYN,FIN -j REJECT
