猫

不知何故,我被委以组织安装涉及 4 台服务器的新生产环境的任务。

我必须向网络管理员提出请求,要求打开防火墙上的端口。他说他已经做了更改,我需要检查一下。

我需要检查:

1 服务器 alpha 将能够通过 SFTP 连接到服务器 beta。

2 服务器 alpha 将能够连接到服务器 gamma 636 上的 LDAP。

3 服务器 alpha 将能够查看服务器 delta 端口 80 上的 Web 服务

我知道的最好的办法就是尝试通过 telnet 连接到服务器,例如对于情况 #1,我尝试登录 alpha 并:

alpha> telnet beta.mycompany.com 22

有没有更好的方法来测试我是否可以连接端口 22、636 和 80?

答案1

假设服务正在使用 TELNET 客户端“监听”目标服务器以测试 TCP 连接是一种非常有效的方法。如果您想要获得更基本的功能,可以使用“netcat”之类的工具。您只是以这种方式测试 TCP 堆栈。如果不做更多事情,您无法保证第 7 层协议确实有效。

如果您想要第 7 层验证,请对每个相关协议使用一个客户端程序,并尝试从将提供连接的机器执行某种类型的客户端/服务器交互。

与往常一样,如果您不确定您的流量是否到达了您预期的目的地,我建议您使用嗅探器(tcpdump、Wireshark 等)来验证数据包是否真的到达了您预期的目的地。没有什么可以替代观察线路上的比特。

答案2

这实际上取决于您要寻找的验证级别。对于大多数简单的单端口 TCP 服务(例如列出的服务),您只需要验证端口是否打开并接受连接。最简单的方法是使用nmap。检查所述端口的具体语法是:

nmap -p 22,80,636 192.168.1.1

并将返回如下结果:

Starting Nmap 5.00 ( http://nmap.org ) at 2011-01-24 16:20 CST
Interesting ports on 192.168.1.1:
PORT    STATE  SERVICE
22/tcp  open   ssh
80/tcp  open   http
636/tcp closed ldapssl

Nmap done: 1 IP address (1 host up) scanned in 0.23 seconds

如果防火墙阻止了任何这些端口,则返回的 STATE 将是filtered而不是openclosed

但这仅验证了防火墙规则。它无法验证服务是否一定在端口上运行,也无法验证服务是否正常运行。为此,您必须运行了解您正在检查的服务的检查。

答案3

这是一个老问题,但如果有人需要测试他们的防火墙,我编写了一个名为 fcat(防火墙 cat)的工具,它用于在服务器 A 上打开一系列端口

在服务器 B 上,您可以使用 fcat 连接到 A 上的该范围,并查看防火墙阻止了哪些端口

我创建它的原因是,你可以用 nmap 轻松扫描开放端口,但我找不到一种简单的方法来启动端口监听器,而不使用某种混乱的 bash 循环

https://github.com/perfecto25/fcat

fcat 让这一切变得简单得多,

例子,

在主机 A 上

hostA> fcat -p 1500,1900,21000-21500  (will open ports 1500,1900 and every port in 21000-21500 range)

# can also bind to specific IPs or iface names
hostA > fcat -p 2000,3400-3500,27000-27150 -i 192.168.35.2 
hostA > fcat -p 2000,3400-3500,27000-27150 -i em1

在主机 B 上

hostB > fcat conn -h hostA -p 21000-21500 (will test basic TCP connection to this port range)

相关内容