91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

端口連接異常排查全流程思路

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2026-03-27 16:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、概述

1.1 背景介紹

TCP/IP 網(wǎng)絡(luò)通信的本質(zhì)是進(jìn)程間通信。兩臺機(jī)器之間的數(shù)據(jù)傳輸,最終落到"某個 IP 地址的某個端口"這個粒度。端口號是傳輸層的概念,范圍 0-65535,其中 0-1023 為系統(tǒng)保留端口(Well-Known Ports),1024-49151 為注冊端口(Registered Ports),49152-65535 為動態(tài)端口(Ephemeral Ports)。

當(dāng)運維人員說"端口不通"時,實際可能指若干種完全不同的故障:

服務(wù)未監(jiān)聽:目標(biāo)端口上沒有進(jìn)程在監(jiān)聽,內(nèi)核直接返回 RST

防火墻攔截:數(shù)據(jù)包被 iptables/nftables/firewalld 規(guī)則丟棄或拒絕

安全策略阻斷:SELinux 阻止進(jìn)程綁定非標(biāo)準(zhǔn)端口

網(wǎng)絡(luò)路徑不可達(dá):中間路由設(shè)備、交換機(jī) ACL、云安全組阻斷

應(yīng)用層協(xié)議不匹配:TCP 連接建立成功但應(yīng)用層握手失敗

這五種情況的排查方法完全不同。如果不分層次地亂查,可能花幾個小時還找不到原因。

TCP 連接建立過程

理解端口不通的排查邏輯,首先需要理解 TCP 三次握手:

客戶端             服務(wù)端
 |                |
 | SYN (seq=x)         |
 |------------------------------>|
 |                |
 | SYN-ACK (seq=y, ack=x+1)  |
 |<------------------------------|
? | ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
? | ?ACK (seq=x+1, ack=y+1) ? ? ?|
? |------------------------------>|
 |                |
 | 連接建立完成          |

三次握手中任何一步出問題都會導(dǎo)致"端口不通"的表象,但根因截然不同:

階段 現(xiàn)象 常見原因
SYN 發(fā)出后無響應(yīng) 連接超時(通常 30-120 秒) 防火墻 DROP、路由不可達(dá)、目標(biāo)主機(jī)宕機(jī)
SYN 發(fā)出后收到 RST 連接立即被拒絕 端口未監(jiān)聽、防火墻 REJECT
SYN-ACK 已收到但 ACK 丟失 連接超時 客戶端出方向防火墻、NAT 問題
三次握手成功但隨后斷開 連接重置 應(yīng)用層拒絕、SSL/TLS 握手失敗

UDP 的特殊性

UDP 沒有連接建立過程,判斷"通不通"比 TCP 更復(fù)雜:

UDP 端口未監(jiān)聽時,內(nèi)核返回 ICMP Port Unreachable

如果防火墻丟棄了 ICMP 響應(yīng),客戶端無法區(qū)分"端口不通"和"數(shù)據(jù)包丟失"

UDP 探測的可靠方法是發(fā)送應(yīng)用層協(xié)議數(shù)據(jù)包并觀察是否有響應(yīng)

1.2 端口不通的七個排查層級

按照從近到遠(yuǎn)、從簡單到復(fù)雜的原則,端口不通的排查可以分為七個層級:

第一層:服務(wù)監(jiān)聽檢查(本機(jī))
 ↓
第二層:本地防火墻(iptables/nftables/firewalld)
 ↓
第三層:SELinux 端口策略
 ↓
第四層:本機(jī)連通性測試(telnet/nc/curl)
 ↓
第五層:網(wǎng)絡(luò)路徑排查(traceroute/mtr)
 ↓
第六層:云安全組 / 網(wǎng)絡(luò) ACL
 ↓
第七層:應(yīng)用層協(xié)議檢查

每一層只要確認(rèn)沒問題,就往下一層走。這種分層排查法避免了無頭蒼蠅式的排查。

1.3 適用場景

部署新服務(wù)后外部無法訪問

服務(wù)遷移后端口不通

網(wǎng)絡(luò)變更后部分端口受影響

容器化部署中的端口映射問題

跨云/跨機(jī)房的連通性故障

自動化巡檢中的端口健康檢查

1.4 環(huán)境要求

組件 版本要求 說明
操作系統(tǒng) Ubuntu 24.04 LTS / Rocky Linux 9.5 內(nèi)核 6.12+
iproute2 6.x 提供 ss 命令
nftables 1.1.x 新一代防火墻框架
firewalld 2.x 高級防火墻管理
nmap 7.95+ 端口掃描與探測
ncat/nc nmap 附帶 連通性測試
mtr 0.95+ 網(wǎng)絡(luò)路徑分析

# Ubuntu 24.04 安裝必要工具
sudo apt install -y iproute2 nmap netcat-openbsd traceroute mtr-tiny tcpdump

# Rocky Linux 9.5 安裝
sudo dnf install -y iproute nmap ncat traceroute mtr tcpdump

二、詳細(xì)步驟

2.1 準(zhǔn)備工作

在排查端口不通之前,先明確幾個關(guān)鍵信息:

# 確認(rèn)目標(biāo) IP 和端口
TARGET_IP="192.168.1.100"
TARGET_PORT="8080"

# 確認(rèn)本機(jī) IP
ip addr show | grep"inet "| grep -v 127.0.0.1

# 確認(rèn)本機(jī)到目標(biāo)的基本網(wǎng)絡(luò)連通性
ping -c 3$TARGET_IP

如果 ping 不通,問題可能在更底層(網(wǎng)絡(luò)層),需要先解決 IP 可達(dá)性問題。但注意:ping 不通不代表端口不通——很多環(huán)境禁止 ICMP 但允許 TCP。

2.2 第一層:服務(wù)是否監(jiān)聽

這是最常見的原因,也是最先排查的。

使用 ss 命令(推薦)

# 查看所有 TCP 監(jiān)聽端口
ss -tlnp

# 查看特定端口是否在監(jiān)聽
ss -tlnp | grep":8080"

# 輸出示例
# LISTEN 0 4096 *:8080 *:* users:(("java",pid=12345,fd=88))

ss命令參數(shù)解釋:

-t:只顯示 TCP

-l:只顯示 LISTEN 狀態(tài)

-n:數(shù)字格式顯示端口(不做 DNS 解析)

-p:顯示進(jìn)程信息

監(jiān)聽地址的區(qū)別

# 查看監(jiān)聽地址
ss -tlnp | grep":8080"

監(jiān)聽地址有三種情況,含義完全不同:

監(jiān)聽地址 含義 外部是否可訪問
0.0.0.0:8080 監(jiān)聽所有 IPv4 地址 可以
*:8080 或:::8080 監(jiān)聽所有地址(含 IPv6) 可以
127.0.0.1:8080 只監(jiān)聽本地回環(huán) 不可以
192.168.1.100:8080 只監(jiān)聽特定網(wǎng)卡 僅該網(wǎng)卡可達(dá)

最常見的坑:應(yīng)用配置文件里 bind 地址寫了127.0.0.1或localhost,導(dǎo)致只能本機(jī)訪問。

# 典型的配置錯誤排查
# Nginx
grep -r"listen"/etc/nginx/nginx.conf /etc/nginx/conf.d/

# MySQL
grep"bind-address"/etc/mysql/mysql.conf.d/mysqld.cnf

# Redis
grep"bind"/etc/redis/redis.conf

# Java 應(yīng)用的 application.yml
grep -r"server.address"/path/to/app/

使用 netstat(兼容方案)

# 部分老系統(tǒng)還在用 netstat
netstat -tlnp | grep":8080"

netstat已經(jīng)被ss取代,但在某些極簡容器鏡像中可能只有netstat。功能上兩者等價。

服務(wù)未監(jiān)聽的常見原因

原因 排查命令 解決方法
服務(wù)未啟動 systemctl status 啟動服務(wù)
服務(wù)啟動失敗 journalctl -u --no-pager -n 50 查看錯誤日志
端口被其他進(jìn)程占用 ss -tlnp | grep ":" 停止沖突進(jìn)程或更換端口
配置文件端口寫錯 檢查服務(wù)配置文件 修正端口配置
bind 地址錯誤 檢查 bind/listen 配置 改為 0.0.0.0

2.3 第二層:本地防火墻

確認(rèn)服務(wù)已經(jīng)在監(jiān)聽后,下一步檢查本機(jī)防火墻是否放行了該端口。

firewalld(CentOS/Rocky Linux 默認(rèn))

# 查看 firewalld 是否運行
systemctl status firewalld

# 查看當(dāng)前活動區(qū)域和規(guī)則
firewall-cmd --get-active-zones
firewall-cmd --zone=public --list-all

# 查看是否放行了特定端口
firewall-cmd --zone=public --query-port=8080/tcp

# 放行端口(臨時,重啟失效)
sudo firewall-cmd --zone=public --add-port=8080/tcp

# 放行端口(永久)
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

# 放行服務(wù)(推薦方式,比端口號更語義化)
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload

nftables(新一代框架)

Ubuntu 24.04 默認(rèn)使用 nftables 作為底層框架:

# 查看當(dāng)前規(guī)則集
sudo nft list ruleset

# 查看特定鏈的規(guī)則
sudo nft list chain inet filter input

# 添加放行規(guī)則
sudo nft add rule inet filter input tcp dport 8080 accept

# 查看規(guī)則編號(用于刪除)
sudo nft -a list chain inet filter input

# 刪除指定規(guī)則
sudo nft delete rule inet filter input handle 15

iptables(傳統(tǒng)方式)

# 查看所有規(guī)則(帶行號)
sudo iptables -L -n -v --line-numbers

# 查看 INPUT 鏈
sudo iptables -L INPUT -n -v --line-numbers

# 檢查是否有 DROP/REJECT 規(guī)則攔截了目標(biāo)端口
sudo iptables -L INPUT -n | grep -E"DROP|REJECT"

# 添加放行規(guī)則(插入到 INPUT 鏈的第一條)
sudo iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT

# 持久化規(guī)則
sudo netfilter-persistent save  # Ubuntu/Debian
sudo service iptables save    # CentOS/RHEL

防火墻排查要點

# 快速判斷是否是防火墻問題的方法:臨時關(guān)閉防火墻測試
# 注意:僅在測試環(huán)境使用,生產(chǎn)環(huán)境禁止關(guān)閉防火墻

# 查看 iptables 規(guī)則計數(shù)器,確認(rèn)數(shù)據(jù)包是否命中了 DROP 規(guī)則
sudo iptables -L -n -v | grep -i drop

# 實時監(jiān)控防火墻日志
sudo journalctl -f -t kernel | grep -i"iptables|nft|BLOCKED"

一個容易忽略的坑:Docker 會自動在 iptables 中創(chuàng)建 DOCKER 鏈和 NAT 規(guī)則。如果你在 Docker 宿主機(jī)上排查端口問題,需要同時檢查 DOCKER-USER 鏈:

# Docker 相關(guān)的 iptables 規(guī)則
sudo iptables -L DOCKER -n -v
sudo iptables -L DOCKER-USER -n -v
sudo iptables -t nat -L -n -v

2.4 第三層:SELinux 端口策略

在 Rocky Linux / CentOS 等開啟 SELinux 的系統(tǒng)上,即使防火墻放行了端口,SELinux 也可能阻止服務(wù)綁定非標(biāo)準(zhǔn)端口。

# 查看 SELinux 狀態(tài)
getenforce
# 輸出 Enforcing 表示開啟,Permissive 表示僅記錄不阻斷

# 查看 SELinux 允許的 HTTP 端口
semanage port -l | grep http_port_t
# http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000

# 如果需要 Nginx 監(jiān)聽 8080 端口
sudo semanage port -a -t http_port_t -p tcp 8080

# 查看 SELinux 拒絕日志
sudo ausearch -m avc -ts recent

# 查看 audit.log 中的 SELinux 拒絕記錄
sudo grep"denied"/var/log/audit/audit.log | tail -10

# 生成允許策略(排查時使用)
sudo ausearch -m avc -ts recent | audit2allow -w

SELinux 導(dǎo)致端口不通的典型特征:

ss -tlnp看不到服務(wù)在目標(biāo)端口監(jiān)聽

服務(wù)日志報 "Permission denied" 或 "Address already in use"(誤導(dǎo)性信息)

audit.log中有type=AVC msg=audit(...): avc: denied記錄

2.5 第四層:本機(jī)連通性測試

服務(wù)監(jiān)聽正常、防火墻已放行,接下來從其他機(jī)器測試連通性。

telnet

# 最基礎(chǔ)的 TCP 端口測試
telnet 192.168.1.100 8080

# 連接成功的輸出
# Trying 192.168.1.100...
# Connected to 192.168.1.100.
# Escape character is '^]'.

# 連接失敗(被拒絕)的輸出
# Trying 192.168.1.100...
# telnet: Unable to connect to remote host: Connection refused

# 連接超時的輸出
# Trying 192.168.1.100...
# (長時間無響應(yīng))

nc (netcat)

# TCP 端口測試(推薦,比 telnet 更靈活)
nc -zv 192.168.1.100 8080

# 設(shè)置超時時間(避免長時間等待)
nc -zv -w 5 192.168.1.100 8080

# 掃描端口范圍
nc -zv 192.168.1.100 8080-8090

# UDP 端口測試
nc -zuv -w 3 192.168.1.100 53

# 參數(shù)說明
# -z: 只掃描,不發(fā)送數(shù)據(jù)
# -v: 詳細(xì)輸出
# -w: 超時時間(秒)
# -u: UDP 模式

curl(HTTP/HTTPS 服務(wù))

# HTTP 服務(wù)測試
curl -v http://192.168.1.100:8080/health

# 只測試連通性,不關(guān)心響應(yīng)內(nèi)容
curl -o /dev/null -s -w"HTTP Code: %{http_code}
Time: %{time_total}s
"http://192.168.1.100:8080/

# HTTPS 服務(wù)測試(忽略證書驗證)
curl -vk https://192.168.1.100:443/

# 指定超時
curl --connect-timeout 5 --max-time 10 http://192.168.1.100:8080/

nmap(全面端口掃描)

# 掃描單個端口
nmap -p 8080 192.168.1.100

# 掃描多個端口
nmap -p 80,443,8080 192.168.1.100

# 掃描端口范圍
nmap -p 1-1024 192.168.1.100

# 掃描結(jié)果解讀
# PORT   STATE  SERVICE
# 8080/tcp open   http-proxy  <-- 端口開放
# 8081/tcp closed ? tproxy ? ? ? <-- 端口關(guān)閉(RST)
# 8082/tcp filtered unknown ? ? ?<-- 被防火墻過濾(DROP)

nmap 端口狀態(tài)含義:

狀態(tài) 含義 對應(yīng)情況
open 端口開放 有服務(wù)監(jiān)聽且防火墻放行
closed 端口關(guān)閉 無服務(wù)監(jiān)聽但防火墻放行(返回 RST)
filtered 被過濾 防火墻 DROP,無任何響應(yīng)
unfiltered 未過濾 ACK 掃描可達(dá)但無法確定開放/關(guān)閉

2.6 第五層:網(wǎng)絡(luò)路徑排查

從客戶端能 ping 通目標(biāo)但端口不通時,問題可能在中間路徑。

traceroute

# 基于 ICMP 的路由追蹤
traceroute 192.168.1.100

# 基于 TCP 的路由追蹤(穿透防火墻)
sudo traceroute -T -p 8080 192.168.1.100

# 基于 UDP 的路由追蹤
traceroute -U -p 8080 192.168.1.100

mtr(推薦)

# 實時路由追蹤+丟包統(tǒng)計
mtr 192.168.1.100

# 基于 TCP 的 mtr
sudo mtr --tcp -P 8080 192.168.1.100

# 報告模式(非交互)
mtr -r -c 100 192.168.1.100

# 輸出示例
#            Loss%  Snt  Last  Avg Best Wrst StDev
# 1. gateway       0.0%  100  0.5  0.6  0.3  2.1  0.3
# 2. 10.0.0.1      0.0%  100  1.2  1.3  0.8  3.5  0.4
# 3. ???        100.0% 100  0.0  0.0  0.0  0.0  0.0
# 4. 192.168.1.1     0.0%  100  2.1  2.3  1.5  5.2  0.6
# 5. 192.168.1.100    0.0%  100  2.3  2.5  1.8  5.8  0.7

mtr 結(jié)果解讀:

某一跳 100% Loss 但后續(xù)正常:該設(shè)備不響應(yīng)探測包,不代表故障

某一跳開始 Loss 升高且后續(xù)持續(xù)高丟包:該跳可能是瓶頸

最后一跳丟包:目標(biāo)主機(jī)或其前面的設(shè)備有問題

tcpdump 輔助判斷

在目標(biāo)服務(wù)器上抓包,確認(rèn) SYN 包是否到達(dá):

# 在目標(biāo)服務(wù)器上抓包
sudo tcpdump -i any -nn port 8080 -c 20

# 如果能看到 SYN 包到達(dá)但沒有 SYN-ACK 響應(yīng),說明是本機(jī)防火墻或服務(wù)問題
# 如果完全看不到 SYN 包,說明數(shù)據(jù)包在到達(dá)目標(biāo)服務(wù)器之前就被攔截了

# 輸出示例(正常連接)
# 1701.123456 IP 10.0.0.5.54321 > 192.168.1.100.8080: Flags [S], seq 123456
# 1701.123567 IP 192.168.1.100.8080 > 10.0.0.5.54321: Flags [S.], seq 789012, ack 123457
# 1701.124012 IP 10.0.0.5.54321 > 192.168.1.100.8080: Flags [.], ack 789013

# 輸出示例(SYN 到達(dá)但被 RST)
# 1701.123456 IP 10.0.0.5.54321 > 192.168.1.100.8080: Flags [S], seq 123456
# 1701.123567 IP 192.168.1.100.8080 > 10.0.0.5.54321: Flags [R.], seq 0, ack 123457

2.7 第六層:云安全組 / 網(wǎng)絡(luò) ACL

在云環(huán)境中(AWS/阿里云/騰訊云),安全組是獨立于操作系統(tǒng)防火墻之外的網(wǎng)絡(luò)層控制。

# 阿里云 CLI 查看安全組規(guī)則
aliyun ecs DescribeSecurityGroupAttribute --SecurityGroupId sg-xxxxx

# AWS CLI 查看安全組
aws ec2 describe-security-groups --group-ids sg-xxxxx

# 騰訊云 CLI
tccli cvm DescribeSecurityGroupPolicies --cli-unfold-argument 
 --SecurityGroupId sg-xxxxx

云安全組排查要點:

檢查項 說明
入站規(guī)則 是否允許目標(biāo)端口的入站流量
出站規(guī)則 是否允許響應(yīng)流量的出站
協(xié)議類型 TCP/UDP 是否匹配
源地址范圍 是否限制了客戶端 IP 段
規(guī)則優(yōu)先級 多條規(guī)則沖突時的優(yōu)先級
安全組關(guān)聯(lián) 實例是否綁定了正確的安全組

常見的云安全組陷阱:

安全組默認(rèn)拒絕所有入站流量

修改安全組規(guī)則后不需要重啟實例,但生效可能有幾秒延遲

VPC 網(wǎng)絡(luò) ACL 和安全組是兩層控制,兩者都要放行

2.8 第七層:應(yīng)用層協(xié)議檢查

TCP 連接能建立但業(yè)務(wù)層面不通,問題在應(yīng)用層協(xié)議。

# HTTP 應(yīng)用層檢查
curl -v http://192.168.1.100:8080/api/health 2>&1

# 檢查返回狀態(tài)碼
# HTTP/1.1 200 OK -> 正常
# HTTP/1.1 502 Bad Gateway -> 后端服務(wù)不可達(dá)
# HTTP/1.1 503 Service Unavailable -> 服務(wù)過載

# SSL/TLS 握手檢查
openssl s_client -connect 192.168.1.100:443 -servername example.com

# 查看證書信息
openssl s_client -connect 192.168.1.100:443 2>/dev/null | openssl x509 -noout -dates -subject

# gRPC 服務(wù)檢查
grpcurl -plaintext 192.168.1.100:9090 list

# MySQL 連接測試
mysql -h 192.168.1.100 -P 3306 -u root -p -e"SELECT 1"

# Redis 連接測試
redis-cli -h 192.168.1.100 -p 6379 ping

2.9 驗證與確認(rèn)

完成排查并修復(fù)后,做一次完整的驗證:

#!/bin/bash
# 端口連通性驗證腳本
# port_verify.sh

TARGET=$1
PORT=$2

echo"========== 端口連通性驗證 =========="
echo"目標(biāo):${TARGET}:${PORT}"
echo"時間:$(date '+%Y-%m-%d %H:%M:%S')"
echo"===================================="

# 1. DNS 解析
echo-e"
[1] DNS 解析"
host$TARGET2>/dev/null ||echo"非域名或解析失敗"

# 2. ICMP 連通性
echo-e"
[2] ICMP Ping"
ping -c 3 -W 2$TARGET2>/dev/null
if[ $? -ne 0 ];then
 echo"ICMP 不通(可能被禁止)"
fi

# 3. TCP 端口測試
echo-e"
[3] TCP 端口測試"
nc -zv -w 5$TARGET$PORT2>&1

# 4. 路由追蹤
echo-e"
[4] TCP 路由追蹤"
sudo traceroute -T -p$PORT-m 15$TARGET2>/dev/null

echo-e"
========== 驗證完成 =========="

三、示例代碼和配置

3.1 完整的端口排查流程腳本

#!/bin/bash
# port_diagnose.sh - 端口不通問題自動診斷腳本
# 用法: ./port_diagnose.sh <目標(biāo)IP> <端口號>

set-euo pipefail

# 顏色定義
RED='?33[0;31m'
GREEN='?33[0;32m'
YELLOW='?33[1;33m'
NC='?33[0m'

TARGET_IP="${1:?用法: $0 <目標(biāo)IP> <端口號>}"
TARGET_PORT="${2:?用法: $0 <目標(biāo)IP> <端口號>}"

log_pass() {echo-e"${GREEN}[PASS]${NC}$1"; }
log_fail() {echo-e"${RED}[FAIL]${NC}$1"; }
log_warn() {echo-e"${YELLOW}[WARN]${NC}$1"; }
log_info() {echo-e"[INFO]$1"; }

echo"============================================"
echo" 端口連通性診斷工具"
echo" 目標(biāo):${TARGET_IP}:${TARGET_PORT}"
echo" 時間:$(date '+%Y-%m-%d %H:%M:%S')"
echo"============================================"

# 第一層:檢查是否為本機(jī)
IS_LOCAL=false
ifip addr show | grep -q"${TARGET_IP}";then
  IS_LOCAL=true
  log_info"目標(biāo) IP 是本機(jī)地址"
fi

# 第二層:如果是本機(jī),檢查服務(wù)監(jiān)聽
if$IS_LOCAL;then
 echo-e"
--- 第一層:服務(wù)監(jiān)聽檢查 ---"
  LISTEN_INFO=$(ss -tlnp | grep":${TARGET_PORT}"||true)
 if[ -n"$LISTEN_INFO"];then
    log_pass"端口${TARGET_PORT}有服務(wù)在監(jiān)聽"
   echo" $LISTEN_INFO"

   # 檢查監(jiān)聽地址
    LISTEN_ADDR=$(echo"$LISTEN_INFO"| awk'{print $4}'| cut -d: -f1)
   if["$LISTEN_ADDR"="127.0.0.1"];then
      log_warn"服務(wù)僅監(jiān)聽 127.0.0.1,外部無法訪問"
   fi
 else
    log_fail"端口${TARGET_PORT}沒有服務(wù)在監(jiān)聽"
    log_info"可能原因:服務(wù)未啟動、配置端口不對、端口被占用"
 fi

 # 檢查防火墻
 echo-e"
--- 第二層:防火墻檢查 ---"
 ifcommand-v firewall-cmd &>/dev/null;then
   ifsystemctl is-active --quiet firewalld;then
      FW_RESULT=$(firewall-cmd --query-port=${TARGET_PORT}/tcp 2>/dev/null ||true)
     if["$FW_RESULT"="yes"];then
        log_pass"firewalld 已放行端口${TARGET_PORT}/tcp"
     else
        log_fail"firewalld 未放行端口${TARGET_PORT}/tcp"
     fi
   else
      log_info"firewalld 未運行"
   fi
 fi

 # 檢查 iptables
 ifcommand-v iptables &>/dev/null;then
    DROP_RULES=$(sudo iptables -L INPUT -n 2>/dev/null | grep -c"DROP|REJECT"||true)
   if["$DROP_RULES"-gt 0 ];then
      log_warn"iptables INPUT 鏈有${DROP_RULES}條 DROP/REJECT 規(guī)則"
   else
      log_pass"iptables INPUT 鏈無 DROP/REJECT 規(guī)則"
   fi
 fi

 # 檢查 SELinux
 echo-e"
--- 第三層:SELinux 檢查 ---"
 ifcommand-v getenforce &>/dev/null;then
    SELINUX_STATUS=$(getenforce)
   if["$SELINUX_STATUS"="Enforcing"];then
      log_warn"SELinux 處于 Enforcing 模式"
      AVC_DENIED=$(sudo ausearch -m avc -ts recent 2>/dev/null | grep -c"denied"||true)
     if["$AVC_DENIED"-gt 0 ];then
        log_fail"發(fā)現(xiàn)${AVC_DENIED}條 SELinux 拒絕記錄"
     fi
   else
      log_info"SELinux 狀態(tài):$SELINUX_STATUS"
   fi
 else
    log_info"SELinux 未安裝"
 fi
fi

# 第四層:連通性測試
echo-e"
--- 第四層:連通性測試 ---"

# TCP 測試
ifnc -zv -w 5"$TARGET_IP""$TARGET_PORT"2>&1 | grep -q"succeeded|Connected|open";then
  log_pass"TCP 連接到${TARGET_IP}:${TARGET_PORT}成功"
else
  log_fail"TCP 連接到${TARGET_IP}:${TARGET_PORT}失敗"

 # 進(jìn)一步診斷
 echo-e"
--- 第五層:網(wǎng)絡(luò)路徑分析 ---"
  log_info"執(zhí)行路由追蹤..."
 ifcommand-v mtr &>/dev/null;then
    mtr -r -c 10 --tcp -P"$TARGET_PORT""$TARGET_IP"2>/dev/null || 
    mtr -r -c 10"$TARGET_IP"2>/dev/null
 else
    traceroute -m 15"$TARGET_IP"2>/dev/null ||true
 fi
fi

# nmap 掃描
echo-e"
--- 端口狀態(tài)掃描 ---"
ifcommand-v nmap &>/dev/null;then
  NMAP_RESULT=$(nmap -p"$TARGET_PORT""$TARGET_IP"2>/dev/null | grep"^${TARGET_PORT}"||true)
 if[ -n"$NMAP_RESULT"];then
    log_info"nmap 結(jié)果:$NMAP_RESULT"
   ifecho"$NMAP_RESULT"| grep -q"filtered";then
      log_warn"端口被防火墻過濾(DROP),數(shù)據(jù)包未到達(dá)目標(biāo)"
   fi
 fi
fi

echo-e"
============================================"
echo" 診斷完成"
echo"============================================"

3.2 案例 1:firewalld 規(guī)則遺漏導(dǎo)致端口不通

場景:部署了一個新的 Java 應(yīng)用,監(jiān)聽 8080 端口,本機(jī) curl 正常,但外部訪問超時。

排查過程:

# 1. 確認(rèn)服務(wù)在監(jiān)聽
ss -tlnp | grep":8080"
# LISTEN 0 4096 *:8080 *:* users:(("java",pid=15234,fd=88))
# 結(jié)論:服務(wù)正常監(jiān)聽在所有接口

# 2. 本機(jī)測試
curl -s -o /dev/null -w"%{http_code}"http://127.0.0.1:8080/health
# 200
# 結(jié)論:本機(jī)訪問正常

# 3. 檢查防火墻
systemctl status firewalld
# Active: active (running)

firewall-cmd --zone=public --list-all
# public (active)
#  target: default
#  services: cockpit dhcpv6-client ssh
#  ports:
# 結(jié)論:firewalld 運行中,未放行 8080 端口

# 4. 放行端口
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

# 5. 驗證
firewall-cmd --zone=public --query-port=8080/tcp
# yes

# 從外部再次測試
# curl http://192.168.1.100:8080/health
# 200 OK

3.3 案例 2:SELinux 阻止非標(biāo)準(zhǔn)端口

場景:將 Nginx 的監(jiān)聽端口從 80 改為 9090 后,Nginx 啟動失敗。

# 1. 查看 Nginx 狀態(tài)
sudo systemctl status nginx
# nginx.service - The nginx HTTP and reverse proxy server
#  Active: failed

# 2. 查看錯誤日志
sudo journalctl -u nginx --no-pager -n 20
# nginx: [emerg] bind() to 0.0.0.0:9090 failed (13: Permission denied)

# 3. 檢查 SELinux
getenforce
# Enforcing

# 4. 查看 SELinux 允許的 HTTP 端口
sudo semanage port -l | grep http_port_t
# http_port_t  tcp  80, 81, 443, 488, 8008, 8009, 8443, 9000
# 結(jié)論:9090 不在允許列表中

# 5. 添加 9090 到 HTTP 端口類型
sudo semanage port -a -t http_port_t -p tcp 9090

# 6. 重啟 Nginx
sudo systemctl start nginx
sudo systemctl status nginx
# Active: active (running)

# 7. 驗證
ss -tlnp | grep":9090"
# LISTEN 0 511 0.0.0.0:9090 0.0.0.0:* users:(("nginx",...))

3.4 案例 3:Docker 容器端口映射異常

場景:運行 Docker 容器時指定了-p 8080:80,但外部無法訪問 8080 端口。

# 1. 確認(rèn)容器運行狀態(tài)
docker ps | grep myapp
# abc123 myapp:latest "nginx -g ..." Up 5 minutes 0.0.0.0:8080->80/tcp myapp

# 2. 檢查端口映射
docker port myapp
# 80/tcp -> 0.0.0.0:8080

# 3. 容器內(nèi)部測試
dockerexecmyapp curl -s http://127.0.0.1:80/
# 正常響應(yīng)

# 4. 宿主機(jī)測試
curl -s http://127.0.0.1:8080/
# 正常響應(yīng)

# 5. 外部測試失敗,檢查 Docker 的 iptables 規(guī)則
sudo iptables -L DOCKER -n -v
# Chain DOCKER (1 references)
# pkts bytes target prot opt in   out   source  destination
# 125 6500 ACCEPT tcp -- !docker0 docker0 0.0.0.0/0 172.17.0.2 tcp dpt:80

# 6. 檢查 DOCKER-USER 鏈(用戶自定義規(guī)則會在這里)
sudo iptables -L DOCKER-USER -n -v
# Chain DOCKER-USER (1 references)
# pkts bytes target prot opt in   out   source  destination
# 0  0   DROP  all -- eth0  *    0.0.0.0/0 0.0.0.0/0
# 結(jié)論:DOCKER-USER 鏈有一條 DROP 規(guī)則阻止了所有從 eth0 進(jìn)入的流量

# 7. 修復(fù):刪除錯誤的 DROP 規(guī)則
sudo iptables -D DOCKER-USER -i eth0 -j DROP

# 添加正確的規(guī)則(只允許特定端口)
sudo iptables -I DOCKER-USER -i eth0 -p tcp --dport 80 -j ACCEPT
sudo iptables -A DOCKER-USER -j RETURN

# 8. 驗證
curl -s http://192.168.1.100:8080/
# 正常響應(yīng)

3.5 端口連通性批量檢測腳本

#!/bin/bash
# batch_port_check.sh - 批量端口檢測腳本
# 用法: ./batch_port_check.sh <配置文件>
# 配置文件格式: IP:端口:服務(wù)名(每行一個)

CONFIG_FILE="${1:?用法: $0 <配置文件>}"
TIMEOUT=5
TIMESTAMP=$(date'+%Y-%m-%d %H:%M:%S')
TOTAL=0
PASS=0
FAIL=0

RED='?33[0;31m'
GREEN='?33[0;32m'
NC='?33[0m'

echo"=========================================="
echo" 批量端口連通性檢測"
echo" 時間:${TIMESTAMP}"
echo"=========================================="
echo""
printf"%-20s %-8s %-15s %-10s
""目標(biāo)""端口""服務(wù)""狀態(tài)"
printf"%-20s %-8s %-15s %-10s
""----""----""----""----"

whileIFS=:read-r ip port service;do
 # 跳過空行和注釋
  [[ -z"$ip"||"$ip"=~ ^# ]] && continue

  TOTAL=$((TOTAL + 1))

 ifnc -zv -w$TIMEOUT"$ip""$port"&>/dev/null;then
   printf"%-20s %-8s %-15s${GREEN}%-10s${NC}
""$ip""$port""$service""通"
    PASS=$((PASS + 1))
 else
   printf"%-20s %-8s %-15s${RED}%-10s${NC}
""$ip""$port""$service""不通"
    FAIL=$((FAIL + 1))
 fi
done

配置文件示例:

# port_check.conf
# 格式: IP:端口:服務(wù)名
192.168.1.100Nginx-HTTP
192.168.1.100Nginx-HTTPS
192.168.1.101MySQL
192.168.1.101Redis
192.168.1.102Prometheus
192.168.1.102Grafana
10.0.0.50App-Server-1
10.0.0.51App-Server-2

四、最佳實踐和注意事項

4.1 最佳實踐

防火墻規(guī)則管理規(guī)范

# 1. 使用服務(wù)名而非端口號(firewalld)
# 推薦:語義化更強(qiáng)
sudo firewall-cmd --add-service=http --permanent

# 不推薦:端口號不直觀
sudo firewall-cmd --add-port=80/tcp --permanent

# 2. 使用 rich rules 實現(xiàn)精細(xì)控制
# 只允許特定 IP 段訪問 MySQL
sudo firewall-cmd --permanent --add-rich-rule='
 rule family="ipv4"
 source address="10.0.0.0/24"
 port port="3306" protocol="tcp"
 accept'

# 3. 防火墻規(guī)則版本化管理
# 導(dǎo)出當(dāng)前規(guī)則
sudo iptables-save > /etc/iptables/rules.v4.$(date +%Y%m%d)
sudo nft list ruleset > /etc/nftables.conf.$(date +%Y%m%d)

# 4. 變更前備份
sudo cp /etc/firewalld/zones/public.xml /etc/firewalld/zones/public.xml.bak

端口變更 Checklist

序號 檢查項 負(fù)責(zé)人 完成
1 新端口在應(yīng)用配置中已修改 開發(fā)
2 操作系統(tǒng)防火墻已放行 運維
3 SELinux 策略已更新 運維
4 云安全組/網(wǎng)絡(luò) ACL 已更新 運維
5 負(fù)載均衡器后端端口已更新 運維
6 DNS 記錄已更新(如有) 運維
7 監(jiān)控探測端口已更新 運維
8 文檔已更新 運維
9 回滾方案已準(zhǔn)備 運維

安全加固建議

# 1. 只開放必要的端口,默認(rèn)拒絕所有
sudo firewall-cmd --set-default-zone=drop
sudo firewall-cmd --zone=drop --add-service=ssh --permanent

# 2. 限制 SSH 來源 IP
sudo firewall-cmd --permanent --add-rich-rule='
 rule family="ipv4"
 source address="10.0.0.0/8"
 service name="ssh"
 accept'

# 3. 定期審查開放端口
ss -tlnp | awk'NR>1 {print $4}'| sort -u

# 4. 關(guān)閉不需要的服務(wù)
sudo systemctldisable--now rpcbind
sudo systemctldisable--now avahi-daemon

4.2 注意事項

常見錯誤

錯誤現(xiàn)象 原因分析 解決方案
firewall-cmd 規(guī)則添加后不生效 未加 --permanent 或未 reload 加上 --permanent 并執(zhí)行 --reload
iptables 規(guī)則重啟后丟失 未持久化規(guī)則 使用 netfilter-persistent save
Docker 端口映射不通 DOCKER-USER 鏈有 DROP 規(guī)則 檢查并修復(fù) DOCKER-USER 鏈
telnet 超時但 ping 通 防火墻 DROP TCP 但放行 ICMP 檢查防火墻 TCP 規(guī)則
本機(jī) curl 通但外部不通 服務(wù)綁定 127.0.0.1 修改 bind 地址為 0.0.0.0
SELinux 拒絕非標(biāo)準(zhǔn)端口 端口不在 SELinux 策略中 semanage port 添加端口
nmap 顯示 filtered 中間設(shè)備 DROP 數(shù)據(jù)包 檢查云安全組/網(wǎng)絡(luò) ACL
端口狀態(tài)時通時斷 連接數(shù)超限或負(fù)載均衡問題 檢查 conntrack 表和負(fù)載均衡

兼容性注意事項

ss是iproute2包的組成部分,在所有現(xiàn)代 Linux 發(fā)行版中默認(rèn)安裝

netstat屬于net-tools包,在最小安裝中可能不存在

nftables是 iptables 的替代者,但 iptables 命令會自動轉(zhuǎn)換為 nftables 規(guī)則

firewalld 2.x 默認(rèn)使用 nftables 后端

Docker 仍然依賴 iptables 規(guī)則,即使系統(tǒng)使用 nftables

容器環(huán)境特殊注意

# Kubernetes 中的端口排查
# 1. 檢查 Service 端口映射
kubectl get svc -n 

# 2. 檢查 Endpoints
kubectl get endpoints  -n 

# 3. 檢查 Pod 端口
kubectl get pod  -n  -o jsonpath='{.spec.containers[*].ports}'

# 4. 檢查 NetworkPolicy
kubectl get networkpolicy -n 

# 5. 在 Pod 內(nèi)部測試
kubectlexec-it  -n  -- nc -zv  

五、故障排查和監(jiān)控

5.1 故障排查

日志查看

# firewalld 日志
sudo journalctl -u firewalld -n 50 --no-pager

# iptables 日志(需要先添加 LOG 規(guī)則)
sudo iptables -I INPUT -p tcp --dport 8080 -j LOG --log-prefix"PORT8080: "
sudo journalctl -k | grep"PORT8080"

# SELinux 拒絕日志
sudo ausearch -m avc -ts recent
sudo sealert -a /var/log/audit/audit.log

# 內(nèi)核網(wǎng)絡(luò)棧日志
dmesg | grep -i"nf_conntrack|dropped|martian"

conntrack 表排查

# 查看連接跟蹤表大小
cat /proc/sys/net/netfilter/nf_conntrack_count
cat /proc/sys/net/netfilter/nf_conntrack_max

# 如果 count 接近 max,新連接會被丟棄
# 臨時增大連接跟蹤表
sudo sysctl -w net.netfilter.nf_conntrack_max=1048576

# 查看特定端口的連接跟蹤記錄
sudo conntrack -L -p tcp --dport 8080 2>/dev/null | head -20

# 清除特定連接
sudo conntrack -D -p tcp --dport 8080

常見問題排查表

問題 快速診斷命令 預(yù)期結(jié)果
服務(wù)是否監(jiān)聽 ss -tlnp | grep : 看到 LISTEN 行
防火墻是否放行 firewall-cmd --query-port=/tcp yes
SELinux 是否阻止 ausearch -m avc -ts recent 無相關(guān)拒絕記錄
數(shù)據(jù)包是否到達(dá) tcpdump -i any port -c 5 看到 SYN 包
路徑是否可達(dá) mtr --tcp -P 最后一跳無丟包
conntrack 是否滿 cat /proc/sys/net/netfilter/nf_conntrack_count 遠(yuǎn)小于 max 值

5.2 性能監(jiān)控

Blackbox Exporter 端口探測

Prometheus 的 blackbox_exporter 是端口連通性監(jiān)控的標(biāo)準(zhǔn)方案。

# blackbox.yml - blackbox_exporter 配置
modules:
tcp_connect:
 prober:tcp
 timeout:5s
 tcp:
  preferred_ip_protocol:"ip4"

tcp_connect_tls:
 prober:tcp
 timeout:5s
 tcp:
  preferred_ip_protocol:"ip4"
  tls:true
  tls_config:
   insecure_skip_verify:false

http_2xx:
 prober:http
 timeout:10s
 http:
  valid_http_versions:["HTTP/1.1","HTTP/2.0"]
  valid_status_codes:[200,204]
  method:GET
  preferred_ip_protocol:"ip4"

icmp_check:
 prober:icmp
 timeout:5s
 icmp:
  preferred_ip_protocol:"ip4"
# prometheus.yml - Prometheus 抓取配置
scrape_configs:
-job_name:'blackbox-tcp'
 metrics_path:/probe
 params:
  module:[tcp_connect]
 static_configs:
  -targets:
   -'192.168.1.100:8080'
   -'192.168.1.101:3306'
   -'192.168.1.102:6379'
 relabel_configs:
  -source_labels:[__address__]
   target_label:__param_target
  -source_labels:[__param_target]
   target_label:instance
  -target_label:__address__
   replacement:'blackbox-exporter:9115'

-job_name:'blackbox-http'
 metrics_path:/probe
 params:
  module:[http_2xx]
 static_configs:
  -targets:
   -'http://192.168.1.100:80/health'
   -'https://192.168.1.100:443/health'
 relabel_configs:
  -source_labels:[__address__]
   target_label:__param_target
  -source_labels:[__param_target]
   target_label:instance
  -target_label:__address__
   replacement:'blackbox-exporter:9115'

Prometheus 告警規(guī)則

# port_alerts.yml
groups:
-name:port_connectivity
 rules:
  -alert:PortUnreachable
   expr:probe_success{job="blackbox-tcp"}==0
   for:2m
   labels:
    severity:critical
   annotations:
    summary:"端口不可達(dá):{{ $labels.instance }}"
    description:"目標(biāo){{ $labels.instance }}的端口連通性檢測失敗,已持續(xù) 2 分鐘"

  -alert:PortHighLatency
   expr:probe_duration_seconds{job="blackbox-tcp"}>1
   for:5m
   labels:
    severity:warning
   annotations:
    summary:"端口響應(yīng)延遲高:{{ $labels.instance }}"
    description:"目標(biāo){{ $labels.instance }}的 TCP 連接耗時超過 1 秒"

  -alert:SSLCertExpiringSoon
   expr:probe_ssl_earliest_cert_expiry-time()

關(guān)鍵監(jiān)控指標(biāo)

指標(biāo)名稱 含義 正常范圍 告警閾值
probe_success 探測是否成功 1 == 0 持續(xù) 2 分鐘
probe_duration_seconds 探測耗時 < 0.1s > 1s 持續(xù) 5 分鐘
probe_dns_lookup_time_seconds DNS 解析耗時 < 0.05s > 0.5s
probe_ssl_earliest_cert_expiry SSL 證書過期時間 > 30 天 < 30 天
node_netfilter_conntrack_entries conntrack 條目數(shù) < max 的 70% > max 的 80%

5.3 備份與恢復(fù)

防火墻規(guī)則備份

#!/bin/bash
# firewall_backup.sh - 防火墻規(guī)則備份腳本

BACKUP_DIR="/opt/backup/firewall"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p"$BACKUP_DIR"

# 備份 iptables 規(guī)則
ifcommand-v iptables-save &>/dev/null;then
  sudo iptables-save >"${BACKUP_DIR}/iptables_${DATE}.rules"
  sudo ip6tables-save >"${BACKUP_DIR}/ip6tables_${DATE}.rules"
 echo"iptables 規(guī)則已備份"
fi

# 備份 nftables 規(guī)則
ifcommand-v nft &>/dev/null;then
  sudo nft list ruleset >"${BACKUP_DIR}/nftables_${DATE}.conf"
 echo"nftables 規(guī)則已備份"
fi

# 備份 firewalld 配置
if[ -d /etc/firewalld ];then
  tar czf"${BACKUP_DIR}/firewalld_${DATE}.tar.gz"/etc/firewalld/
 echo"firewalld 配置已備份"
fi

# 保留最近 30 天的備份
find"$BACKUP_DIR"-name"*.rules"-mtime +30 -delete
find"$BACKUP_DIR"-name"*.conf"-mtime +30 -delete
find"$BACKUP_DIR"-name"*.tar.gz"-mtime +30 -delete

echo"備份完成:${BACKUP_DIR}"

規(guī)則恢復(fù)

# 恢復(fù) iptables 規(guī)則
sudo iptables-restore < /opt/backup/firewall/iptables_20260313.rules

# 恢復(fù) nftables 規(guī)則
sudo nft -f /opt/backup/firewall/nftables_20260313.conf

# 恢復(fù) firewalld 配置
sudo tar xzf /opt/backup/firewall/firewalld_20260313.tar.gz -C /
sudo firewall-cmd --reload

六、總結(jié)

6.1 技術(shù)要點回顧

端口不通問題需要分層排查:服務(wù)監(jiān)聽 → 防火墻 → SELinux → 網(wǎng)絡(luò)路徑 → 云安全組 → 應(yīng)用層

ss -tlnp是確認(rèn)服務(wù)監(jiān)聽的第一選擇,重點關(guān)注監(jiān)聽地址(0.0.0.0 vs 127.0.0.1)

防火墻排查需要同時檢查 firewalld/iptables/nftables,Docker 環(huán)境還要檢查 DOCKER-USER 鏈

SELinux 在 Enforcing 模式下會阻止非標(biāo)準(zhǔn)端口綁定,使用semanage port添加

nmap的端口狀態(tài)(open/closed/filtered)能精確反映問題所在層級

云環(huán)境需要額外檢查安全組和網(wǎng)絡(luò) ACL,這些是獨立于操作系統(tǒng)之外的控制

使用 blackbox_exporter 做端口連通性的持續(xù)監(jiān)控

6.2 進(jìn)階學(xué)習(xí)方向

eBPF 網(wǎng)絡(luò)追蹤:使用 bpftrace 追蹤內(nèi)核網(wǎng)絡(luò)棧中數(shù)據(jù)包的處理路徑,精確定位丟包位置

Kubernetes 網(wǎng)絡(luò)策略:NetworkPolicy、Calico/Cilium 網(wǎng)絡(luò)插件的端口控制機(jī)制

服務(wù)網(wǎng)格:Istio/Linkerd 環(huán)境中 sidecar 代理對端口通信的影響

零信任網(wǎng)絡(luò):基于身份而非 IP/端口的訪問控制架構(gòu)

6.3 參考資料

Linux man pages: ss(8), iptables(8), nft(8), firewall-cmd(1)

nmap 官方文檔: https://nmap.org/book/

Prometheus Blackbox Exporter: https://github.com/prometheus/blackbox_exporter

firewalld 官方文檔: https://firewalld.org/documentation/

Red Hat SELinux 管理指南: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/using_selinux

附錄

A. 命令速查表

# 服務(wù)監(jiān)聽檢查
ss -tlnp               # 查看所有 TCP 監(jiān)聽
ss -tlnp | grep":"      # 查看特定端口
ss -ulnp               # 查看所有 UDP 監(jiān)聽

# 防火墻操作
firewall-cmd --list-all        # 查看當(dāng)前規(guī)則
firewall-cmd --add-port=8080/tcp --permanent # 添加端口
firewall-cmd --reload         # 重載規(guī)則
sudo iptables -L -n -v        # iptables 規(guī)則
sudo nft list ruleset         # nftables 規(guī)則

# SELinux
getenforce              # 查看狀態(tài)
semanage port -l | grep     # 查看端口策略
semanage port -a -t  -p tcp  # 添加端口

# 連通性測試
nc -zv -w 5         # TCP 測試
nmap -p            # 端口掃描
curl -v http://:/      # HTTP 測試
telnet            # 基礎(chǔ)測試

# 路徑分析
mtr --tcp -P         # TCP 路由追蹤
traceroute -T -p       # TCP traceroute
tcpdump -i any port  -nn    # 抓包確認(rèn)

# conntrack
conntrack -L -p tcp --dport   # 查看連接跟蹤
conntrack -D -p tcp --dport   # 清除連接
cat /proc/sys/net/netfilter/nf_conntrack_count # 當(dāng)前連接數(shù)

B. 配置參數(shù)詳解

firewalld 區(qū)域默認(rèn)行為

區(qū)域 默認(rèn)行為 適用場景
drop 丟棄所有入站,不響應(yīng) 高安全需求
block 拒絕所有入站,返回 ICMP 拒絕 安全需求
public 只允許指定服務(wù) 公網(wǎng)服務(wù)器
external NAT 轉(zhuǎn)發(fā) 網(wǎng)關(guān)服務(wù)器
dmz 只允許指定服務(wù) DMZ 區(qū)域
work 信任同事網(wǎng)絡(luò) 辦公網(wǎng)絡(luò)
home 信任家庭網(wǎng)絡(luò) 家庭環(huán)境
internal 信任內(nèi)部網(wǎng)絡(luò) 內(nèi)網(wǎng)服務(wù)器
trusted 允許所有流量 完全信任網(wǎng)絡(luò)

nmap 常用掃描類型

參數(shù) 掃描類型 原理 適用場景
-sT TCP Connect 完整三次握手 普通用戶
-sS TCP SYN 半開掃描 需要 root
-sU UDP 發(fā)送 UDP 包 UDP 服務(wù)
-sA TCP ACK 判斷防火墻規(guī)則 防火墻檢測
-sN TCP Null 不設(shè)置任何標(biāo)志 繞過簡單過濾

C. 術(shù)語表

術(shù)語 英文 解釋
三次握手 Three-Way Handshake TCP 建立連接的過程:SYN → SYN-ACK → ACK
連接跟蹤 Connection Tracking 內(nèi)核記錄網(wǎng)絡(luò)連接狀態(tài)的機(jī)制(conntrack)
有狀態(tài)防火墻 Stateful Firewall 能識別連接狀態(tài)的防火墻,只需放行首包
安全組 Security Group 云平臺的虛擬防火墻,控制實例級別的網(wǎng)絡(luò)訪問
ACL Access Control List 網(wǎng)絡(luò)訪問控制列表,控制子網(wǎng)級別的流量
BPF Berkeley Packet Filter 內(nèi)核數(shù)據(jù)包過濾框架,用于 tcpdump 等工具
RST Reset TCP 連接重置標(biāo)志,表示拒絕連接
DNAT Destination NAT 目標(biāo)地址轉(zhuǎn)換,用于端口映射/轉(zhuǎn)發(fā)
Well-Known Ports 知名端口 0-1023 范圍內(nèi)的系統(tǒng)保留端口
Ephemeral Ports 臨時端口 49152-65535 范圍內(nèi)的動態(tài)分配端口

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • TCP
    TCP
    +關(guān)注

    關(guān)注

    8

    文章

    1428

    瀏覽量

    83629
  • 端口
    +關(guān)注

    關(guān)注

    4

    文章

    1107

    瀏覽量

    34001
  • 網(wǎng)絡(luò)通信
    +關(guān)注

    關(guān)注

    4

    文章

    842

    瀏覽量

    32618

原文標(biāo)題:「運維必備」端口連接異常排查全流程思路

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    Linux系統(tǒng)CPU占用率100%的排查思路

    今天浩道跟大家分享linux硬核干貨,工作中當(dāng)你服務(wù)器CPU達(dá)到100%時,干著急是沒有用的,該查問題還得自己去查。本文將給大家羅列排查異常故障思路,并且文末附上相關(guān)shell腳本,去實際一番,你會發(fā)現(xiàn)原來解決問題的方法如此之簡
    的頭像 發(fā)表于 01-23 10:26 ?7405次閱讀
    Linux系統(tǒng)CPU占用率100%的<b class='flag-5'>排查</b><b class='flag-5'>思路</b>

    科普小課堂|LCD 問題排查思路解析

    在嵌入式系統(tǒng)開發(fā)中,液晶顯示器(LCD)作為人機(jī)交互的重要界面,其穩(wěn)定性和可靠性至關(guān)重要。然而在實際應(yīng)用中,LCD難免會遇到各種問題。今天和各位小伙伴分享一些常見的LCD問題及其排查思路,幫助大家快速定位并解決這些問題。
    的頭像 發(fā)表于 08-05 17:06 ?2624次閱讀
    科普小課堂|LCD 問題<b class='flag-5'>排查</b><b class='flag-5'>思路</b>解析

    ARM異常處理流程

    在學(xué)習(xí)與開發(fā)ARM處理器的過程中,一個不能繞開的話題就是異常處理流程。它在ARM的體系架構(gòu)中,占據(jù)著不可動搖的重要地位。此處就以Coterx-A系列的ARM處理器簡單分析一下異常中斷處理流程
    發(fā)表于 10-14 16:15

    Flink on YARN(下):常見問題與排查思路

    Running Program?Flink on YARN 上、下兩篇文章對 Flink on YARN 應(yīng)用啟動流程進(jìn)行梳理,并對客戶端和 Flink Cluster 的常見問題提供了排查
    發(fā)表于 10-10 14:14

    Flink on YARN(下):常見問題與排查思路

    客戶端和 Flink Cluster 的常見問題,分享相關(guān)問題的排查思路??蛻舳顺R妴栴}與排查思路▼ 應(yīng)用提交控制臺異常信息:Could n
    發(fā)表于 10-14 15:04

    如何去排查移動通信基站的射頻干擾?有哪些流程?

    如何去排查移動通信基站的射頻干擾?有哪些流程?
    發(fā)表于 05-24 06:36

    志A40i應(yīng)用筆記 | 3種常見的網(wǎng)卡軟件問題以及排查思路

    網(wǎng)卡的設(shè)計問題,今天小編為大家分享3種在使用OKA40i-C開發(fā)板時容易遇到的網(wǎng)卡軟件問題以及排查思路。 一、問題分析: 問題描述1——以太網(wǎng)初始化報錯 No phy found 在執(zhí)行ifconfig
    發(fā)表于 11-08 10:02

    數(shù)字芯片的設(shè)計流程思路和技術(shù)說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)字芯片的設(shè)計流程思路和技術(shù)說明。
    發(fā)表于 06-09 08:00 ?1次下載
    數(shù)字芯片的設(shè)計<b class='flag-5'>流程</b><b class='flag-5'>思路</b>和技術(shù)說明

    在Kubernetes集群發(fā)生網(wǎng)絡(luò)異常時如何排查

    本文將引入一個思路:“在 Kubernetes 集群發(fā)生網(wǎng)絡(luò)異常時如何排查”。文章將引入 Kubernetes 集群中網(wǎng)絡(luò)排查思路,包含網(wǎng)
    的頭像 發(fā)表于 09-02 09:45 ?9745次閱讀

    網(wǎng)絡(luò)故障排查思路和處理方法

    網(wǎng)絡(luò)故障是最容易出現(xiàn)的,且難以解決的問題。本文提供的網(wǎng)絡(luò)故障排查思路和處理方法,可解決日常工作中大部分網(wǎng)絡(luò)問題。
    發(fā)表于 10-31 09:14 ?1.3w次閱讀

    網(wǎng)絡(luò)二層環(huán)路的排查思路與技巧

    今天浩道跟大家分享一篇關(guān)于網(wǎng)絡(luò)二層環(huán)路的排查思路與技巧,希望能夠在日常工作中幫助到你,得到老板的雞腿大餐!
    的頭像 發(fā)表于 12-29 15:38 ?5060次閱讀

    Java怎么排查oom異常

    據(jù)量的應(yīng)用中。要排查OOM異常,需要經(jīng)過以下幾個步驟: 理解OOM異常的原因:OOM異常通常有以下幾個原因:內(nèi)存泄露、內(nèi)存溢出、內(nèi)存不足以容納所需的數(shù)據(jù)等。理解OOM
    的頭像 發(fā)表于 12-05 13:47 ?2126次閱讀

    SWD端口無法連接如何排查

    大家在調(diào)試GD32 MCU的時候是否也碰到過SWD調(diào)試端口無法連接的情況?SWD端口無法連接的原因有很多,有時候排查沒有
    的頭像 發(fā)表于 01-10 10:46 ?3924次閱讀
    SWD<b class='flag-5'>端口</b>無法<b class='flag-5'>連接</b>如何<b class='flag-5'>排查</b>

    聚徽分享工業(yè)觸摸屏常見故障排查:從觸控失靈到顯示異常流程解決方案

    ,長期處于復(fù)雜多變的工業(yè)環(huán)境中,工業(yè)觸摸屏難免會出現(xiàn)各種故障。本文將聚焦工業(yè)觸摸屏常見的觸控失靈、顯示異常等問題,提供全面的故障排查流程與解決方案,幫助工業(yè)從業(yè)者快速定位和解決問題,保障生產(chǎn)順利進(jìn)行。 觸控失
    的頭像 發(fā)表于 05-28 15:27 ?2251次閱讀

    X-ray檢測設(shè)備故障排查與維護(hù)流程指南

    的最佳運行狀態(tài)?”等問題。了解故障排查與維護(hù)的流程不僅能提高設(shè)備的工作效率,還能減少維修成本,從而提升整體生產(chǎn)力。本文將為您詳細(xì)闡述X-ray檢測設(shè)備故障排查與維護(hù)的各個方面,幫助您
    的頭像 發(fā)表于 11-10 18:16 ?1629次閱讀