同事遇到場景:A 服務器調用 B 服務器的短信發送 WebService 接口,安全合規要求「入站端口管控,禁用非必要端口」,疑慮:客戶端發起調用時本地端口隨機,是否需要開放入站端口?
純客戶端調用(Outbound)僅需開放「出站」規則允許訪問目標服務器 IP:Port,完全不需要開放任何「入站」端口。
客戶端 (A) 服務端 (B) | | |--- SYN (Src Port: 隨機如 54321, Dst: 8080) -->| |<-- SYN+ACK (Src: 8080, Dst: 54321) ----------| |--- ACK (Src: 54321, Dst: 8080) ------------->| | | |=== 數據雙向傳輸 (HTTP Request/Response) ===| | | |--- FIN (主動關閉) -------------------------->| |<-- ACK --------------------------------------| |<-- FIN (被動關閉) ---------------------------| |--- ACK ------------------------------------->|
| 概念 | 方向 | 防火牆規則 | 本場景適用性 |
|---|---|---|---|
| 出站 | 內網 → 外網 | 允許源 IP:A 訪問目標 IP:B:Port | 必須開放(允許 A 發起 TCP 連接到 B 的 WebService 端口) |
| 入站 | 外網 → 內網 | 允許外部 IP 主動連接內部 IP:Port | 完全不需要(B 從不主動向 A 發起新連接) |
| 回包/返回流量 | 外網 → 內網 (已建立連接) | 狀態檢測防火牆自動允許 ESTABLISHED/RELATED 流量 | 屬於出站連接的「回應」,不算獨立入站規則 |
# iptables 示例:僅允許 A 主動訪問 B 的 8080/8443 # 出站鏈 iptables -A OUTPUT -s 10.0.1.10 -d 10.0.2.20 -p tcp -m multiport --dports 8080,8443 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -s 10.0.2.20 -d 10.0.1.10 -p tcp -m multiport --sports 8080,8443 -m state --state ESTABLISHED -j ACCEPT # 拒絕其他入站 iptables -A INPUT -i eth0 -j DROP
理解「出站發起、入州被動」的 TCP 基礎語義,是制定精準防火牆策略的前提。WebService 客戶端調用屬於典型出站場景,**只需放行目標服務器端口的出站規則,入站規則保持默認拒絕即可**,兼顧安全合規與業務通暢。