为什么 nmap 显示端口 25 已打开?服务器的防火墙应该阻止端口 25

为什么 nmap 显示端口 25 已打开?服务器的防火墙应该阻止端口 25

nmap远程执行7.70显示服务器25端口开放,但是我的VPS服务器防火墙只开放了ssh、http、https服务。

在笔记本电脑上:

nmap x.x.x.x

Not shown: 996 filtered ports
PORT    STATE  SERVICE
22/tcp  open   ssh
25/tcp  open   smtp
80/tcp  open   http
443/tcp closed https

在服务器上:

# firewall-cmd --list-all

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: ssh dhcpv6-client http https
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

我确保防火墙已重新加载,并在重启后进行测试。端口 ​​25 怎么可能显示为打开?我没有安装任何邮件服务器。Postfix 服务已被删除。

# systemctl list-units --type=service --state=running

auditd.service           loaded active running Security Auditing Service
chronyd.service          loaded active running NTP client/server
crond.service            loaded active running Command Scheduler
dbus.service             loaded active running D-Bus System Message Bus
firewalld.service        loaded active running firewalld - dynamic firewall daemon
[email protected]       loaded active running Getty on tty1
httpd.service            loaded active running The Apache HTTP Server
mariadb.service          loaded active running MariaDB 10.3.13 database server
network.service          loaded active running LSB: Bring up/down networking
rh-php71-php-fpm.service loaded active running The PHP FastCGI Process Manager
rsyslog.service          loaded active running System Logging Service
sshd.service             loaded active running OpenSSH server daemon
systemd-journald.service loaded active running Journal Service
systemd-logind.service   loaded active running Login Service
systemd-udevd.service    loaded active running udev Kernel Device Manager

# netstat -tulpn

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      2857/php-fpm: maste
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      2973/sshd
tcp6       0      0 :::3306                 :::*                    LISTEN      2872/mysqld
tcp6       0      0 :::80                   :::*                    LISTEN      6620/httpd
tcp6       0      0 :::22                   :::*                    LISTEN      2973/sshd
udp        0      0 0.0.0.0:68              0.0.0.0:*                           2789/dhclient
udp        0      0 127.0.0.1:323           0.0.0.0:*                           2019/chronyd
udp6       0      0 ::1:323                 :::*                                2019/chronyd

# lsof -i -n -P | grep LISTEN

php-fpm  2857    root    7u  IPv4  20425      0t0  TCP 127.0.0.1:9000 (LISTEN)
mysqld   2872   mysql   19u  IPv6  20474      0t0  TCP *:3306 (LISTEN)
php-fpm  2879  apache    0u  IPv4  20425      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm  2880  apache    0u  IPv4  20425      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm  2881  apache    0u  IPv4  20425      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm  2882  apache    0u  IPv4  20425      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm  2883  apache    0u  IPv4  20425      0t0  TCP 127.0.0.1:9000 (LISTEN)
sshd     2973    root    3u  IPv4  21087      0t0  TCP *:22 (LISTEN)
sshd     2973    root    4u  IPv6  21106      0t0  TCP *:22 (LISTEN)
httpd    6620    root    4u  IPv6 114083      0t0  TCP *:80 (LISTEN)
httpd    6621  apache    4u  IPv6 114083      0t0  TCP *:80 (LISTEN)
httpd    6622  apache    4u  IPv6 114083      0t0  TCP *:80 (LISTEN)
httpd    6623  apache    4u  IPv6 114083      0t0  TCP *:80 (LISTEN)
httpd    6624  apache    4u  IPv6 114083      0t0  TCP *:80 (LISTEN)
httpd    6625  apache    4u  IPv6 114083      0t0  TCP *:80 (LISTEN)
httpd    6626  apache    4u  IPv6 114083      0t0  TCP *:80 (LISTEN)
httpd    6627  apache    4u  IPv6 114083      0t0  TCP *:80 (LISTEN)

答案1

唯一可以确定的方法是在源(运行 nmap 的机器)和目标(服务器)上同时进行一组网络捕获。然后查找:

  • 您在目标机器的捕获中看到发往端口 25 的 SYN 数据包了吗?
  • 您是否看到上述 SYN 的响应 (SYN、ACK)在目标机器的捕获上

如果答案是“否/否”或“是/否”(确实不太可能,但有可能),那么这就是假阳性。

如果您得到误报并且想要了解更多信息,请打开源捕获并查看理论上来自服务器的 SYN、ACK。明白了吗?现在在 IP 层检查 TTL 值,明白了吗?

现在,在同一捕获中查找来自服务器的 SYN、ACK,以进行开放端口测试,例如 22/TCP。查找 TTL 值。它们很可能不匹配。

如果 22/TCP 上的 SYN、ACK 的 TTL 较小但接近 64、128 或 255,则与最接近的数字之间的差值就是从源到服务器的跳数。现在与 25/TCP 的 SYN、ACK 中的数字进行比较,您可能会看到完全不同的数字(例如 22/TCP 为 58,25/TCP 为 254)。

如果 25/TCP 的 SYN、ACK 接近但低于 64、128 或 255,则计算跳数,您就会知道响应您的 SYN 的设备在哪里(可能是正在进行应用程序检查的网络防火墙)。

如果 25/TCP 的 SYN,ACK 正好是 64、128 或 255,则表明您的网关正在执行此操作,或者您盒子中的本地安全软件正在执行此操作(主机 IDS/IPS/防火墙倾向于拦截到端口 25/TCP 的出站连接)。

或者你可以避免上述所有操作并从不同网络中的另一台机器运行测试:)

相关内容