当前位置: 首页 > news >正文

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

#!/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.lryc.cn/news/613905.html

相关文章:

  • Fabarta个人专属智能体:三维搜索链+动态大纲重构教材开发范式
  • 南方略咨询与与清源科技正式启动国际市场GTM流程规划咨询项目!!!
  • 论文阅读:User Behavior Simulation with Large Language Model-based Agents
  • Langchain入门:构建一个基于SQL数据的问答系统
  • 云平台运维工具 ——Azure 原生工具
  • 化工厂安全升级:分布式光纤传感的 “实时监测 + 精准预警” 方案
  • 高校合作 | 世冠科技联合普华、北邮项目入选教育部第二批工程案例
  • 分布式膛压应变测量系统
  • 稿定科技:多云架构下的 AI 存储挑战与 JuiceFS 实践
  • No time to train! Training-Free Reference-Based Instance Segmentation之论文阅读
  • 无人机教育热潮下,超优航空如何为青少年插上科技翅膀?
  • 芯科科技成为全球首家通过PSA 4级认证的物联网芯片厂商巩固其在物联网安全领域的领导地位
  • Claude Code 实战场景解析:从代码生成到系统重构的典型应用案例
  • 负氧离子监测站:守护清新空气的科技卫士
  • Horse3D引擎研发记录(二):基于QtOpenGL使用仿Three.js的BufferAttribute结构重构三角形绘制
  • 技术融合赋能文旅元宇宙:虚实共生重构产业新生态
  • 天翼云与飞轮科技达成战略合作,共筑云数融合新生态
  • Web 图像捕获革命:ImageCapture API 全面解析与实战指南
  • 【昇腾】基于RK3588 arm架构Ubuntu22.04系统上适配Atlas 200I A2加速模块安装EP模式下的驱动固件包_20250808
  • 新手向:Python实现图片转ASCII艺术
  • 《Leetcode》-面试题-hot100-链表
  • 从深度伪造到深度信任:AI安全的三场攻防战
  • 【杂谈】-逆缩放悖论:为何更多思考会让AI变“笨“?
  • 从C学C++(8)——友元
  • VScode 文件标签栏多行显示
  • Wegame 界面英雄联盟进不去游戏,打不开,LOL登陆错误码7620296等解决办法
  • 实战:在已有K8S集群如何新增和删除Node节点
  • 汽车零部件深孔加工质控升级:新启航激光频率梳 3D 测量解决传统光学扫描遮挡
  • 登录注册前端详细实现 (Angular 15+)
  • 5.0.9 C# wpf通过WindowsFormsHost嵌入winform控件