1)找到你的服务器开放的端口

1)找到你的服务器开放的端口

我正用这个把头撞到墙上......

我从桌面上为我拥有的特定服务器运行 nmap,以检查一些可能存在安全问题的开放端口。它返回不应打开的端口:

nmap -T5 WWW.XXX.YYY.ZZZ
Starting Nmap 7.12 ( https://nmap.org ) at 2016-08-09 21:21 CEST
Nmap scan report for mydomain.com (WWW.XXX.YYY.ZZZ)
Host is up (0.0034s latency).
Not shown: 992 filtered ports
PORT     STATE  SERVICE
80/tcp   open   http
110/tcp  open   pop3
143/tcp  open   imap
443/tcp  open   https
993/tcp  open   imaps
995/tcp  open   pop3s

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

必须打开http和https。但其他的则不然……我从 5 个不同的 IP 地址运行此测试。

好吧,也许由于 nmap 如何选择打开/过滤/关闭端口而导致误报。所以我尝试远程登录这些端口并且......我确实有一个连接:

[meandmyself@MacBook ~]$ telnet WWW.XXX.YYY.ZZZ 110
Trying WWW.XXX.YYY.ZZZ...
Connected to mydomain.com.
Escape character is '^]'.

在目标主机上,我仔细检查了 netstat 和 iptables,看看是否遗漏了某些内容:

[21:55] ovh-user@mydomain:~ $ sudo netstat -tanlp | grep LISTEN
[sudo] password for ovh-user:
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1016/master
tcp        0      0 WWW.XXX.YYY.ZZZ:4444      0.0.0.0:*               LISTEN      353/sshd
tcp        0      0 0.0.0.0:5665            0.0.0.0:*               LISTEN      2485/icinga2
tcp        0      0 127.0.0.1:8999          0.0.0.0:*               LISTEN      826/php-fpm.conf)
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      25433/mysqld
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      346/rpcbind
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      828/nginx -g daemon
tcp6       0      0 :::9000                 :::*                    LISTEN      25477/java
tcp6       0      0 :::111                  :::*                    LISTEN      346/rpcbind

除了 rpcbind 之外,我知道所有这些服务,只有 nginx 可以从外部访问。端口 110、143、993 和 995 上没有任何内容...

然后我仔细检查了我的 iptables :

[21:33] ovh-user@mydomain:~ $ sudo iptables -v -L INPUT
Chain INPUT (policy DROP 8 packets, 352 bytes)
 pkts bytes target     prot opt in     out     source               destination
 2602  749K ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED
   76  5472 ACCEPT     all  --  lo     any     anywhere             anywhere
  272  8912 ACCEPT     icmp --  any    any     anywhere             anywhere
    1    64 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:4444
   27  1604 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:http
    1    44 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp dpt:https
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spt:ftp state ESTABLISHED
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spt:ftp-data state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  any    any     anywhere             anywhere             tcp spts:1024:65535 dpts:1024:65535 state ESTABLISHED

[21:34] ovh-user@mydomain:~ $ sudo iptables -v -L FORWARD
Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
[21:55] ovh-user@mydomain:~ $ sudo iptables -t nat -nvL PREROUTING
Chain PREROUTING (policy ACCEPT 1342 packets, 49898 bytes)
 pkts bytes target     prot opt in     out     source               destination

pop 或 imap 端口上没有打开任何内容...

从我对 UNIX 服务和防火墙的基本了解来看,我不明白。为什么 telnet 为我提供“已连接到 mydomain.com”的端口,但没有进程在侦听该端口?有没有办法跟踪 telnet 如何到达某些地方?

答案1

也为那些将头撞到墙上的人提供了详细的答案。

1)找到你的服务器开放的端口

首先,使用地图诊断哪些端口打开以及哪些端口关闭/过滤。 Nmap 有不同的扫描模式要找到开放的端口,您应该尝试所有这些模式。

您最终会得到一个打开的端口列表,其中一些是合乎逻辑的,但其他则不然。

就我而言,端口 110、143、993、995 不应该打开。

2)这些端口是否真的开放了

使用远程登录或者数控测试这个TCP端口是否真的打开

[meandmyself@MacBook ~]$ telnet WWW.XXX.YYY.ZZZ 110
Trying WWW.XXX.YYY.ZZZ...
Connected to mydomain.com.
Escape character is '^]'.

就我而言,当我尝试访问服务器的端口 110 时,会有一个真正的答案。

这里是可怕的部分,端口似乎被打开了。

3)服务器端诊断

A)我的服务器上是否有正在运行的进程正在侦听此端口

网络统计或者拉索夫可以显示是否有正在运行的进程正在侦听这些打开的端口。

[21:55] ovh-user@mydomain:~ $ sudo netstat -tanlp | grep LISTEN
[sudo] password for ovh-user:
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1016/master
tcp        0      0 WWW.XXX.YYY.ZZZ:4444      0.0.0.0:*               LISTEN      353/sshd
tcp        0      0 0.0.0.0:5665            0.0.0.0:*               LISTEN      2485/icinga2
tcp        0      0 127.0.0.1:8999          0.0.0.0:*               LISTEN      826/php-fpm.conf)
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      25433/mysqld
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      346/rpcbind
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      828/nginx -g daemon
tcp6       0      0 :::9000                 :::*                    LISTEN      25477/java
tcp6       0      0 :::111                  :::*                    LISTEN      346/rpcbind

就我而言,没有进程在端口 110、993 上侦听...只有进程在端口 25、4444、5665、8999、3306、111、80、9000 上侦听。

B) 我的服务器是否允许传入端口 110 的请求

诊断 iptables 规则INPUT, FORWARD and PREROUTING chains

[21:33] ovh-user@mydomain:~ $ sudo iptables -v -L INPUT

就我而言,有一个默认DROP策略,这意味着必须明确指定每个开放端口才有机会到达正在运行的进程。

我现在可以得出结论,我的服务器不可能应答端口 110 上的请求。

4) 谁在响应端口 110 上向我的服务器发出的请求?

我的计算机和服务器之间的路径中的每个 actif 节点都可能是响应请求的节点。请记住,它还包括我自己的计算机。

要诊断此问题,请使用 nmap 和 telnet 进行测试:

  • 另一台计算机
  • 不同的接入点/ISP 盒
  • 不同的位置(使用 ssh 隧道和其他服务器来代理您的请求)

就我而言,我使用位于同一数据中心的另一台服务器进行了测试。重点是看看我的托管提供商设置的前端防火墙是否可以处理端口 110、143 上的请求...我还用手机在端口 110 上测试了 telnet,果汁SSH超过4G。

通过这些测试,端口 110 上的请求没有得到任何答复。

5)所以是我的电脑在本地打开这些端口

就我而言,我是在 OSX 10.11.5 上进行测试的。我运行 lsof 和 netstat 来跟踪我自己的计算机是否侦听特定端口:

[meandmyself@MacBook ~]$ sudo netstat -anv | grep LISTEN
tcp46      0      0  *.3306                 *.*                    LISTEN      131072 131072    827      0
tcp4       0      0  127.0.0.1.4380         *.*                    LISTEN      131072 131072    453      0
tcp4       0      0  127.0.0.1.4370         *.*                    LISTEN      131072 131072    453      0
tcp6       0      0  ::1.12993              *.*                    LISTEN      131072 131072    352      0
tcp4       0      0  127.0.0.1.12993        *.*                    LISTEN      131072 131072    352      0
tcp6       0      0  ::1.12995              *.*                    LISTEN      131072 131072    352      0
tcp4       0      0  127.0.0.1.12995        *.*                    LISTEN      131072 131072    352      0
tcp6       0      0  ::1.12143              *.*                    LISTEN      131072 131072    352      0
tcp4       0      0  127.0.0.1.12143        *.*                    LISTEN      131072 131072    352      0
tcp6       0      0  ::1.12110              *.*                    LISTEN      131072 131072    352      0
tcp4       0      0  127.0.0.1.12110        *.*                    LISTEN      131072 131072    352      0
tcp6       0      0  ::1.12443              *.*                    LISTEN      131072 131072    352      0
tcp4       0      0  127.0.0.1.12443        *.*                    LISTEN      131072 131072    352      0
tcp6       0      0  ::1.12080              *.*                    LISTEN      131072 131072    352      0
tcp4       0      0  127.0.0.1.12080        *.*                    LISTEN      131072 131072    352      0
tcp46      0      0  *.80                   *.*                    LISTEN      131072 131072    321      0
tcp4       0      0  127.0.0.1.49153        *.*                    LISTEN      131072 131072     78      0
tcp4       0      0  127.0.0.1.49152        *.*                    LISTEN      131072 131072     78      0

[meandmyself@MacBook ~]$ sudo lsof -i -n -P |grep LISTEN
mtmfs       78           root    4u  IPv4 0x7f85fc078645d63b      0t0    TCP 127.0.0.1:49152 (LISTEN)
mtmfs       78           root    6u  IPv4 0x7f85fc078645cd43      0t0    TCP 127.0.0.1:49153 (LISTEN)
httpd       83           root    4u  IPv6 0x7f85fc0788d37b8b      0t0    TCP *:80 (LISTEN)
httpd      321           _www    4u  IPv6 0x7f85fc0788d37b8b      0t0    TCP *:80 (LISTEN)
com.avast  352           root    3u  IPv4 0x7f85fc0788dc363b      0t0    TCP 127.0.0.1:12080 (LISTEN)
com.avast  352           root    4u  IPv6 0x7f85fc0788d380eb      0t0    TCP [::1]:12080 (LISTEN)
com.avast  352           root    5u  IPv4 0x7f85fc078645df33      0t0    TCP 127.0.0.1:12443 (LISTEN)
com.avast  352           root    6u  IPv6 0x7f85fc0788d3864b      0t0    TCP [::1]:12443 (LISTEN)
com.avast  352           root    7u  IPv4 0x7f85fc0788dc3f33      0t0    TCP 127.0.0.1:12110 (LISTEN)
com.avast  352           root    8u  IPv6 0x7f85fc0788d38bab      0t0    TCP [::1]:12110 (LISTEN)
com.avast  352           root    9u  IPv4 0x7f85fc0788dc2d43      0t0    TCP 127.0.0.1:12143 (LISTEN)
com.avast  352           root   10u  IPv6 0x7f85fc0788d3910b      0t0    TCP [::1]:12143 (LISTEN)
com.avast  352           root   11u  IPv4 0x7f85fc0788dc482b      0t0    TCP 127.0.0.1:12995 (LISTEN)
com.avast  352           root   12u  IPv6 0x7f85fc0788d3762b      0t0    TCP [::1]:12995 (LISTEN)
com.avast  352           root   13u  IPv4 0x7f85fc0788dc5123      0t0    TCP 127.0.0.1:12993 (LISTEN)
com.avast  352           root   14u  IPv6 0x7f85fc0788d370cb      0t0    TCP [::1]:12993 (LISTEN)
SpotifyWe  453        kheraud    6u  IPv4 0x7f85fc078a53282b      0t0    TCP 127.0.0.1:4370 (LISTEN)
SpotifyWe  453        kheraud    7u  IPv4 0x7f85fc078a533123      0t0    TCP 127.0.0.1:4380 (LISTEN)
mysqld     827         _mysql   33u  IPv6 0x7f85fc0788d36b6b      0t0    TCP *:3306 (LISTEN)

Lsof 给了我第一个提示。由于我的工作是一边听音乐一边构建网站,因此看到 Apache、Mysql 和 Spotify 在它们应该监听的端口上监听我并不感到惊讶……但 Avast 为我指明了正确的方向。每个打开的端口(110、143、993、995)均以“127.0.0.1.12XXX”列出(12110、12143、12993、12995...)。

我没有成功查看 Avast 如何处理端口 110 上的真实请求(@MarkPlotnick 指出我使用 pfctl 但使用它并不那么容易 - 欢迎任何帮助)。

我关闭了 Avast 并再次运行 lsof,然后是 telnet,然后是 nmap... 错误打开的端口不再存在。


在这种情况下,我吓坏了,很快就跳到 stackexchange 上寻找线索。我应该深吸一口气,再喝一杯咖啡,然后想想我的计算机和服务器之间的路径是什么。我会尝试从其他位置进行其他测试,并发现我的服务器没有遭受安全漏洞。

结论: 1) 思考 2) 再思考 3) 测试 4) 做

相关内容