Skip to content

进程端口监控

此处端口监控所指并非端口扫描相关的安全问题
而是简单的通过监控服务进程的端口开启与否来判断服务进程是否挂掉

监控采集方式

核心是通过 netstat 命令查询当前服务启动的端口

txt
# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:9901            0.0.0.0:*               LISTEN      20296/python
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      2007/nginx: master
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      2007/nginx: master
tcp        0      0 0.0.0.0:2514            0.0.0.0:*               LISTEN      26425/rsyslogd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      969/sshd
tcp        0      0 0.0.0.0:9500            0.0.0.0:*               LISTEN      20299/python
tcp        0      0 0.0.0.0:9600            0.0.0.0:*               LISTEN      20300/python
tcp        0      0 127.0.0.1:8000          0.0.0.0:*               LISTEN      6187/uwsgi
tcp        0      0 0.0.0.0:9700            0.0.0.0:*               LISTEN      20298/python
tcp        0      0 0.0.0.0:9800            0.0.0.0:*               LISTEN      20301/python
tcp        0      0 127.0.0.1:8010          0.0.0.0:*               LISTEN      20307/uwsgi
tcp6       0      0 :::9010                 :::*                    LISTEN      20297/websocketd
tcp6       0      0 :::2514                 :::*                    LISTEN      26425/rsyslogd
tcp6       0      0 :::9000                 :::*                    LISTEN      20302/websocketd
tcp6       0      0 :::9100                 :::*                    LISTEN      560/node_exporter
#
  • 再通过 awk 即可分解出端口和进程的信息
    shell
    netstat -nltp | awk 'NR>2{print $4,$7}'
    txt
    0.0.0.0:9901 20296/python
    0.0.0.0:8080 2007/nginx:
    0.0.0.0:80 2007/nginx:
    0.0.0.0:2514 26425/rsyslogd
    0.0.0.0:22 969/sshd
    0.0.0.0:9500 20299/python
    0.0.0.0:9600 20300/python
    127.0.0.1:8000 6187/uwsgi
    0.0.0.0:9700 20298/python
    0.0.0.0:9800 20301/python
    127.0.0.1:8010 20307/uwsgi
    :::9010 20297/websocketd
    :::2514 26425/rsyslogd
    :::9000 20302/websocketd
    :::9100 560/node_exporter
  • 去重与再次分割等操作可在监控脚本中进一步处理

整体流程

  1. 从 cmdb 中获取所有的服务器信息
  2. 清理端口信息库中已经不存在于 cmdb 中的服务器端口数据
  3. 使用中控机密钥免密登录到服务器执行 netstat 命令,获取其进程端口信息
  4. 对于每一个服务器,比对此次端口(通过黑白名单过滤之后)和库中的历史端口;标记出端口的状态:新增、挂掉、恢复
  5. 将进程端口信息入库
  6. 根据状态进行告警的发送

总结

  • 此进程端口的监控,主要作为进程是否存活的加强、补充监控(服务进程如果挂掉也会有其它监控报出,比如 5xx)
  • 绝大部分服务均为稳定服务,无需额外处理;少部分可能需要添加白名单(允许的端口)、黑名单(排除的端口)功能来指定或过滤端口