系統網絡端口安全掃描腳本及詳解

#!/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
英文地址,請注明出處:http://en.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…