进程端口监控
此处端口监控所指并非端口扫描相关的安全问题
而是简单的通过监控服务进程的端口开启与否来判断服务进程是否挂掉
监控采集方式
核心是通过 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
即可分解出端口和进程的信息shellnetstat -nltp | awk 'NR>2{print $4,$7}'
txt0.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
- 去重与再次分割等操作可在监控脚本中进一步处理
整体流程
- 从 cmdb 中获取所有的服务器信息
- 清理端口信息库中已经不存在于 cmdb 中的服务器端口数据
- 使用中控机密钥免密登录到服务器执行 netstat 命令,获取其进程端口信息
- 对于每一个服务器,比对此次端口(通过黑白名单过滤之后)和库中的历史端口;标记出端口的状态:新增、挂掉、恢复
- 将进程端口信息入库
- 根据状态进行告警的发送
总结
- 此进程端口的监控,主要作为进程是否存活的加强、补充监控(服务进程如果挂掉也会有其它监控报出,比如 5xx)
- 绝大部分服务均为稳定服务,无需额外处理;少部分可能需要添加白名单(允许的端口)、黑名单(排除的端口)功能来指定或过滤端口