系统网络端口安全扫描脚本及详解

#!/bin/bash
# 系统服务端口安全扫描 - 修正版echo "=== 系统服务端口安全扫描报告 ==="# 1. 高风险端口识别
echo "⚠️  对外开放的高风险端口:"
awk '
/0.0.0.0:21/ {print "  端口 21 - FTP (明文传输)\n    🚨 严重安全风险,建议关闭或限制访问"}
/0.0.0.0:23/ {print "  端口 23 - Telnet (明文传输)\n    🚨 严重安全风险,建议关闭或限制访问"}
/0.0.0.0:135/ {print "  端口 135 - RPC Endpoint Mapper\n    🚨 严重安全风险,建议关闭或限制访问"}
/0.0.0.0:445/ {print "  端口 445 - SMB/CIFS\n    🚨 严重安全风险,建议关闭或限制访问"}
/0.0.0.0:3306/ {print "  端口 3306 - MySQL数据库\n    ⚠️  对所有IP开放,建议限制访问IP"}
/0.0.0.0:27017/ {print "  端口 27017 - MongoDB数据库\n    ⚠️  对所有IP开放,建议限制访问IP"}
' netstat_output.txt# 2. 端口绑定分析
echo -e "\n=== 端口绑定分析 ==="
all_interfaces=$(grep "0.0.0.0:" netstat_output.txt | wc -l)
localhost_only=$(grep "127.0.0.1:" netstat_output.txt | wc -l)
specific_ip=$(grep -E "(192\.168\.|10\.|172\.)" netstat_output.txt | wc -l)echo "  对所有接口开放的端口数: $all_interfaces"
echo "  仅本地访问的端口数: $localhost_only"
echo "  绑定特定IP的端口数: $specific_ip"echo "  对外开放的端口:"
grep "0.0.0.0:" netstat_output.txt | awk '{split($4, a, ":"); print "    - " a[2]}' | sort -n | uniq# 3. 数据库服务检查
echo -e "\n=== 数据库服务检查 ==="
if grep -q "0.0.0.0:3306" netstat_output.txt; thenecho "  ✅ MySQL服务运行中"echo "    ⚠️  建议配置bind-address限制访问"
fiif grep -q "0.0.0.0:6379" netstat_output.txt; thenecho "  ✅ Redis服务运行中"
fiif grep -q "0.0.0.0:27017" netstat_output.txt; thenecho "  ✅ MongoDB服务运行中"echo "    ⚠️  建议配置bindIp和认证"
fi# 4. 服务关联分析
echo -e "\n=== 服务关联分析 ==="
web_ports=$(grep -c "0.0.0.0:80\|0.0.0.0:443" netstat_output.txt)
ssh_ports=$(grep -c "0.0.0.0:22" netstat_output.txt)
db_ports=$(grep -c "0.0.0.0:3306\|0.0.0.0:27017\|0.0.0.0:5432" netstat_output.txt)echo "  Web服务端口: $web_ports 个"
echo "  SSH服务端口: $ssh_ports 个"
echo "  数据库端口: $db_ports 个"# 5. 安全建议
echo -e "\n=== 安全建议 ==="# 修正原来的awk语法错误
high_risk_ports=$(grep "0.0.0.0:" netstat_output.txt | awk '{split($4, a, ":"); print a[2]}' | grep -E "^(23|21|135|445|3389|5900)$" | wc -l)if [[ $high_risk_ports -gt 0 ]]; thenecho "  ❌ 发现 $high_risk_ports 个高风险端口对外开放"echo "  🔒 建议立即采取以下措施:"echo "    - 使用防火墙限制高风险端口访问"echo "    - 配置服务仅监听必要IP地址"echo "    - 考虑关闭非必要服务"
elseecho "  ✅ 未发现明显的高风险端口"
fi# 检查是否所有端口都对所有接口开放
if [[ $all_interfaces -gt 5 ]]; thenecho "  ⚠️  过多端口对所有接口开放 ($all_interfaces 个)"echo "  🔧 建议配置服务绑定到特定IP地址"
fi# 提供具体的优化建议
echo "  💡 具体优化建议:"
echo "    - MySQL: 配置 bind-address=127.0.0.1 或特定IP"
echo "    - Redis: 配置 bind 127.0.0.1"
echo "    - MongoDB: 配置 bindIp 和启用认证"
echo "    - 使用iptables或firewalld配置访问控制策略"
echo "    - 定期扫描开放端口,确保符合安全策略"# 6. 监控建议
echo -e "\n=== 监控建议 ==="
echo "  📊 建议监控以下指标:"
echo "    - 端口开放情况变化"
echo "    - 异常连接尝试"
echo "    - 服务访问日志"
echo "    - 端口扫描活动"echo -e "\n=== 扫描完成 ==="
echo "建议定期执行端口安全扫描,及时发现和修复安全风险"

代码详解

#!/bin/bash
  • 解释:指定脚本解释器为bash,是 Linux 脚本的标准开头,确保脚本可直接执行。
# 系统服务端口安全扫描 - 修正版
echo "=== 系统服务端口安全扫描报告 ==="
  • 解释
    • 注释说明脚本功能(系统服务端口安全扫描,且为修正版)。
    • 输出扫描报告的标题,明确脚本的核心目的是生成安全扫描报告。
# 1. 高风险端口识别
echo "⚠️  对外开放的高风险端口:"
  • 解释
    • 注释标记第一部分功能(识别高风险端口)。
    • 输出提示信息,告知用户接下来将展示对外开放的高风险端口。
awk '
/0.0.0.0:21/ {print "  端口 21 - FTP (明文传输)\n    🚨 严重安全风险,建议关闭或限制访问"}
/0.0.0.0:23/ {print "  端口 23 - Telnet (明文传输)\n    🚨 严重安全风险,建议关闭或限制访问"}
/0.0.0.0:135/ {print "  端口 135 - RPC Endpoint Mapper\n    🚨 严重安全风险,建议关闭或限制访问"}
/0.0.0.0:445/ {print "  端口 445 - SMB/CIFS\n    🚨 严重安全风险,建议关闭或限制访问"}
/0.0.0.0:3306/ {print "  端口 3306 - MySQL数据库\n    ⚠️  对所有IP开放,建议限制访问IP"}
/0.0.0.0:27017/ {print "  端口 27017 - MongoDB数据库\n    ⚠️  对所有IP开放,建议限制访问IP"}
' netstat_output.txt
  • 解释
    • 使用awk工具处理netstat_output.txt(端口监听状态文件)。
    • 匹配规则:当文件中出现 “0.0.0.0:端口号”(表示端口对外开放)时,输出对应端口的服务名称、风险等级及建议。
    • 目的:精准定位常见高风险端口的对外开放情况,并直观展示风险。
# 2. 端口绑定分析
echo -e "\n=== 端口绑定分析 ==="
  • 解释
    • 注释标记第二部分功能(分析端口绑定情况)。
    • 输出标题,-e允许解析转义字符\n,实现换行分隔不同部分。
all_interfaces=$(grep "0.0.0.0:" netstat_output.txt | wc -l)
localhost_only=$(grep "127.0.0.1:" netstat_output.txt | wc -l)
specific_ip=$(grep -E "(192\.168\.|10\.|172\.)" netstat_output.txt | wc -l)
  • 解释
    • 定义变量统计不同绑定类型的端口数量:
      • all_interfaces:统计对外开放(绑定0.0.0.0)的端口数(grep筛选后用wc -l计数)。
      • localhost_only:统计仅本地访问(绑定127.0.0.1)的端口数。
      • specific_ip:统计绑定内网 IP(192.168.、10.、172. 开头)的端口数。
echo "  对所有接口开放的端口数: $all_interfaces"
echo "  仅本地访问的端口数: $localhost_only"
echo "  绑定特定IP的端口数: $specific_ip"
  • 解释:输出上述统计结果,直观展示端口绑定的分布情况。
echo "  对外开放的端口:"
grep "0.0.0.0:" netstat_output.txt | awk '{split($4, a, ":"); print "    - " a[2]}' | sort -n | uniq
  • 解释
    • 筛选对外开放的端口,用awksplit函数从监听地址中提取端口号。
    • sort -n按数字排序,uniq去重,最终列出所有对外开放的端口号。
# 3. 数据库服务检查
echo -e "\n=== 数据库服务检查 ==="
  • 解释
    • 注释标记第三部分功能(检查数据库服务端口)。
    • 输出标题,分隔不同分析模块。
if grep -q "0.0.0.0:3306" netstat_output.txt; thenecho "  ✅ MySQL服务运行中"echo "    ⚠️  建议配置bind-address限制访问"
fi
  • 解释
    • grep -q静默检查是否存在对外开放的 MySQL 端口(3306),若存在则输出服务运行状态及安全建议(限制访问 IP)。
if grep -q "0.0.0.0:6379" netstat_output.txt; thenecho "  ✅ Redis服务运行中"
fi
  • 解释:检查对外开放的 Redis 端口(6379),若存在则提示服务运行中(Redis 默认无认证,风险隐含在后续建议中)。
if grep -q "0.0.0.0:27017" netstat_output.txt; thenecho "  ✅ MongoDB服务运行中"echo "    ⚠️  建议配置bindIp和认证"
fi
  • 解释:检查对外开放的 MongoDB 端口(27017),若存在则输出服务状态及建议(限制 IP + 启用认证)。
# 4. 服务关联分析
echo -e "\n=== 服务关联分析 ==="
  • 解释
    • 注释标记第四部分功能(关联服务与端口)。
    • 输出标题,分析不同类型服务的端口开放情况。
web_ports=$(grep -c "0.0.0.0:80\|0.0.0.0:443" netstat_output.txt)
ssh_ports=$(grep -c "0.0.0.0:22" netstat_output.txt)
db_ports=$(grep -c "0.0.0.0:3306\|0.0.0.0:27017\|0.0.0.0:5432" netstat_output.txt)
  • 解释
    • 统计不同服务类型的对外开放端口数:
      • web_ports:Web 服务(80/443 端口)数量(\|表示 “或”)。
      • ssh_ports:SSH 服务(22 端口)数量。
      • db_ports:数据库服务(MySQL/3306、MongoDB/27017、PostgreSQL/5432)数量。
echo "  Web服务端口: $web_ports 个"
echo "  SSH服务端口: $ssh_ports 个"
echo "  数据库端口: $db_ports 个"
  • 解释:输出服务关联的端口数量,从业务维度汇总端口开放数据。
# 5. 安全建议
echo -e "\n=== 安全建议 ==="
  • 解释
    • 注释标记第五部分功能(生成安全建议)。
    • 输出标题,基于前文分析提供可执行的安全措施。
  • 解释
    • 提取所有对外开放的端口号,筛选出高风险端口(21/23/135/445 等),统计数量并赋值给high_risk_ports
if [[ $high_risk_ports -gt 0 ]]; thenecho "  ❌ 发现 $high_risk_ports 个高风险端口对外开放"echo "  🔒 建议立即采取以下措施:"echo "    - 使用防火墙限制高风险端口访问"echo "    - 配置服务仅监听必要IP地址"echo "    - 考虑关闭非必要服务"
elseecho "  ✅ 未发现明显的高风险端口"
fi
  • 解释:根据高风险端口数量输出对应提示:若存在高风险端口,给出防火墙限制、端口绑定、关闭服务等建议;否则提示无明显风险。
if [[ $all_interfaces -gt 5 ]]; thenecho "  ⚠️  过多端口对所有接口开放 ($all_interfaces 个)"echo "  🔧 建议配置服务绑定到特定IP地址"
fi
  • 解释:若对外开放的端口数超过 5 个,提示风险并建议绑定特定 IP(减少暴露面)。
echo "  💡 具体优化建议:"
echo "    - MySQL: 配置 bind-address=127.0.0.1 或特定IP"
echo "    - Redis: 配置 bind 127.0.0.1"
echo "    - MongoDB: 配置 bindIp 和启用认证"
echo "    - 使用iptables或firewalld配置访问控制策略"
echo "    - 定期扫描开放端口,确保符合安全策略"
  • 解释:针对关键服务(MySQL/Redis/MongoDB)给出具体配置建议,同时提供通用措施(防火墙、定期扫描)。
# 6. 监控建议
echo -e "\n=== 监控建议 ==="
echo "  📊 建议监控以下指标:"
echo "    - 端口开放情况变化"
echo "    - 异常连接尝试"
echo "    - 服务访问日志"
echo "    - 端口扫描活动"
  • 解释
    • 注释标记第六部分功能(提供监控建议)。
    • 输出需长期监控的指标,确保端口安全状态可追踪。
echo -e "\n=== 扫描完成 ==="
echo "建议定期执行端口安全扫描,及时发现和修复安全风险"
  • 解释:脚本结束提示,强调定期扫描的重要性(持续安全保障)。

结语

对于刚学完shell的同学,不妨不看解释先自行分析一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/94851.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/94851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DAY 39 图像数据与显存

知识点回顾 图像数据的格式:灰度和彩色数据模型的定义显存占用的4种地方 模型参数梯度参数优化器参数数据批量所占显存神经元输出中间状态 batchisize和训练的关系 一、 图像数据的介绍 1.1 灰度图像 从这里开始我们进入到了图像数据相关的部分,也是默认…

从大数据视角理解时序数据库选型:为何选择 Apache IoTDB?

目录一、什么是时序数据库?为什么你需要它?🔧典型应用场景:二、时序数据库选型维度有哪些?三、为什么推荐 Apache IoTDB?🧠 Apache 顶级项目,工业 IoT 场景原生支持🚀 性…

[ MySQL 数据库 ] 环境安装配置和使用

目录 一. 数据库(DataBase) 1.定义: 2. 常见的数据库产品: 3. MySQL数据库 (1). 介绍 : (2). cmd命令行方式连接 MySQL (3). MySQL的常用命令 二. MySQL数据库 环境安装及配置 三. SQL 1.定义 : 2. DDL (1)数据库 (2)数据表 1. 字段(列)和记录(行) 2. 表特征 3.…

Numpy科学计算与数据分析:Numpy布尔索引与花式索引实战

Numpy高级索引 学习目标 通过本课程,学员将掌握Numpy中布尔索引和花式索引的使用方法,能够灵活运用这些高级索引技术进行复杂的数据操作和处理。 相关知识点 Numpy高级索引 学习内容 1 Numpy高级索引 1.1 布尔索引 布尔索引是Numpy中一种非常强大…

【Linux】patch补丁的生成与使用方法总结

引言 在 Linux 和开源世界中,patch 是一个极其强大且常用的工具。它允许开发者和系统管理员以增量方式修改文件,特别适用于源代码的更新、错误修复、功能补丁的分发与应用。 目录 引言 一、patch介绍 二、生成补丁文件 三、补丁文件内容解析 四、p…

杂谈 001 · VScode / Copilot 25.08 更新

原文链接https://www.castamerego.com/blog/talk-001 2025.08.08 , VS code 发布八月更新,同一天 Copilot 也更新了 GPT-5, 浅体验一下 VS code 更新 发行说明更新页面内跳转显示 AI 比例页面内跳转 Copilot 更新 对话回溯 checkpoints页面内跳转进度列表页面内…

微软发布Project Ire项目:可自主检测恶意软件的人工智能系统

微软Project Ire项目利用AI自主逆向工程并分类软件性质微软近日公布了Project Ire项目,这是一个能够自主进行逆向工程并分类软件性质的人工智能(AI)系统。该系统由大型语言模型(LLM)驱动,通过使用反编译器等…

k8s核心组件——kubelet详解

🚀Kubernetes 核心组件解析:什么是 Kubelet?它的作用是什么? 在 Kubernetes(K8s)集群中,Kubelet 是最重要的 Node 组件之一,它负责管理和维护 Pod 的生命周期,确保容器在…

C++ 部署LSTM(.onnx)

0、 背景 在工业自动化控制领域,预测某些变量是否关键。根据工厂的数据,训练好模型之后,将其转我通用的onnx 模型,并实现高效的推理。 模型训练 import numpy as np from para import * from data_utils import MyDataset from da…

深度学习-卷积神经网络CNN-1×1卷积层

1x1卷积核,又称为网中网(Network in Network):NIN卷积的本质是有效提取相邻像素间的相关特征,而11的卷积显然没有此作用。它失去了卷积层的特有能力——在高度和宽度维度上,识别相邻元素间相互作用的能力。…

使用 Python 异步爬虫抓取豆瓣电影Top250排行榜

导读 在现代网络爬虫开发中,面对 海量网页数据、慢速响应的网络接口,传统的同步爬虫方式已经不能满足高效抓取需求。本文将手把手带你构建一个 基于 aiohttp + asyncio 的异步爬虫系统,实战目标是抓取豆瓣电影 Top250 排行榜中的电影名称、评分和详情页地址。 目录 导读 …

云原生开发全面解析:从核心理念到实践挑战与解决方案

1. 云原生开发的核心理念与定义 云原生(Cloud Native)是一种基于云计算环境设计和运行应用程序的方法论,其三大技术支柱为容器化、微服务和声明式API。根据CNCF定义,云原生技术通过标准化接口和自动化管理,使应用具备…

WebForms 实例

WebForms 实例 引言 WebForms 是 ASP.NET 技术中的一种重要技术,它允许开发者以表单的形式创建动态网页。本文将通过具体的实例,深入探讨 WebForms 的基本概念、实现方法以及在实际项目中的应用。 WebForms 简介 WebForms 是一种用于创建动态网页的框架,它允许开发者以类…

Java 之 多态

一、多态 多态故名思义,多种状态。比如Animal 这个类中,eat 方法是 公共的方法,但是当 People,Dog , Cat,继承时,我们知道人要吃的是米饭,狗要吃的是狗粮,猫要吃的是猫粮。所以当不同类型的引用…

文件结构树的├、└、─ 符号

目录一、├、└、─符号的背景二、├、└、─ 符号的含义2.1 ├ 带竖线的分支符号2.2 └不带竖线的分支符号2.3 ─横线符号三、Windows系统中生成目录树一、├、└、─符号的背景 我们在编程中,可能会经常遇到一些特殊符号├、└、─。这并非偶然,二十由…

微软XBOX游戏部门大裁员

近日有报道称,微软正计划对Xbox游戏部门进行另外一次裁员,影响的将是整个团队,而不是特定岗位或者部门,大概10%至20%的Xbox团队成员受到影响,这是微软这次对Xbox业务重组的一部分。 据报道,微软已经开始新…

【关于Java 8 的新特性】

问:“Java 8 有啥新东西?” 你憋了半天,只说出一句:“嗯……有 Lambda 表达式。”别慌!Java 8 可不只是“语法糖”那么简单。它是一次真正让 Java 从“老派”走向“现代” 的大升级!一、Lambda 表达式&…

《嵌入式数据结构笔记(六):二叉树》

1. ​​树数据结构的基本定义和属性​​树是一种重要的非线性数据结构,用于表示层次关系。​​基本定义​​:树是由 n(n ≥ 0)个结点组成的有限集合。当 n 0 时,称为空树;当 n > 0 时,树必须…

sqlite的sql语法与技术架构研究

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 参考:参考提示词与豆包AI交互输出内容。 sqlite作为最常用的本地数据库,其支持的sql语法也比较全面,历经了二十多年经久不衰,其技术架构设计也是非常优秀的。 一&#xff1a…

Javascript中的一些常见设计模式

1. 单例模式(Singleton Pattern) 核心思想 一个类只能有一个实例,并提供一个全局访问点。 场景 全局缓存Vuex / Redux 中的 store浏览器中的 localStorage 管理类 示例 const Singleton (function () {let instance;function createInstance…