Web 伺服器作為企業對外服務的前哨,面臨多層次威脅。本文系統梳理三大類核心風險——「過度服務暴露」、「私有資料誤公開」、「不可信輸入盲目信任」,並提供以 nmap、lsof、rpcinfo、showmount 為核心的偵察工具鏈,以及 Apache/.htaccess、PHP/Session、SSH/SCP 等實戰加固方案。
# 全埠掃描並過濾開放埠
nmap -sS -T4 -p 1-65535 www.example.server | grep open
# 輸出範例:
# 21/tcp open ftp
# 22/tcp open ssh
# 25/tcp open smtp
# 80/tcp open http
# 111/tcp open sunrpc <-- 高風險
# 3306/tcp open mysql <-- 高風險
# 4333/tcp open msql <-- 極高風險
| 服務 | 風險等級 | 處置建議 |
|---|---|---|
| SSH (22) | 低 (若為最新版) | 保留,強制金鑰認證、禁用密碼、修改預設埠 |
| HTTP/HTTPS (80/443) | 業務必需 | 保留,部署 WAF、啟用 HSTS、CSP |
| FTP (21) | 中 | 僅允許匿名下載;管理上傳改用 SCP/SFTP |
| SMTP (25) | 業務必需 | 保留,啟用 STARTTLS、SPF/DKIM/DMARC |
| SunRPC (111) | 高 | 防火牆封鎖對外,內網若需 NFS 改用 Kerberos 加密 |
| MySQL (3306) / mSQL (4333) | 極高 | 嚴禁對外開放,應用層連接走 Unix Socket 或內網私有 IP |
| SNMP (161/udp) | 高 | 若非必須關閉;必須用 SNMPv3 + 強社群字串 + ACL 限制來源 |
lsof# 列出所有網路連線與擁有進程
lsof -P -n -i
# 針對特定埠 (如 139/SMB)
lsof -P -n -i tcp:139
輸出範例:smbd 276 root 5u IPv4 175 TCP *:139 (LISTEN) → 確認服務身分,決策保留/停用。
/home/www/servers/www.customer.com/ <-- FTP 根目錄 (使用者可見)
├── pages/ <-- Web DocumentRoot (公開可存取)
│ ├── index.php
│ └── images/
├── private/ <-- 私有資料 (Web 不可見)
│ ├── orders.log
│ ├── config.db
│ └── debug.trace
└── .htaccess (若無法分離目錄時的次佳方案)
/ → 使用者可讀寫 pages/ 與 private/。pages/ → 瀏覽器永無法存取 private/ 下檔案。# /home/www/servers/www.customer.com/private/.htaccess
Order Deny,Allow
Deny from All
風險: 若主配置 AllowOverride Limit 被關閉,防護失效。根目錄分離為唯一可靠架構。
惡意租戶建立 ln -s /home/www/servers/victim.com/private /home/www/servers/attacker.com/pages/leak,透過自身 Web 存取他人私有檔案。
# Apache 主配置 httpd.conf 徹底禁用符號連結追蹤
Options -FollowSymLinks
AllowOverride None
# 虛擬主機層級嚴禁覆蓋開啟
搭配 suexec / PHP-FPM pool per user 以使用者身分執行 CGI/PHP,配合 open_basedir 限制 PHP 跨目錄存取。
GET, POST, COOKIEReferer, User-Agent, X-Forwarded-For, 所有 HTTP_* 變數REMOTE_ADDR (可偽造), REQUEST_URI
正確模式: 同步驗證 所有輸入參數 + 使用 CSRF Token (隨機、單次、綁定 Session)。
$rule) {
$val = $input[$field] ?? '';
// 白名單驗證:型別、長度、格式、範圍
if ($rule['type'] === 'int') { $val = filter_var($val, FILTER_VALIDATE_INT, ['options'=>['min_range'=>$rule['min']??0, 'max_range'=>$rule['max']??PHP_INT_MAX]]); }
elseif ($rule['type'] === 'email') { $val = filter_var($val, FILTER_VALIDATE_EMAIL); }
elseif ($rule['type'] === 'alpha') { $val = preg_match('/^[a-zA-Z]+$/', $val) ? $val : false; }
// ... 其他規則
if ($val === false) throw new InvalidArgumentException("Invalid $field");
$clean[$field] = $val;
}
return $clean;
}
// 應用層僅使用已驗證的 $clean 資料
$rules = ['id'=>['type'=>'int','min'=>1], 'email'=>['type'=>'email']];
$clean = validate_input($_POST, $rules);
$pdo->prepare("SELECT * FROM users WHERE id=:id AND email=:email")->execute($clean);
?>
// PHP: $_SESSION['cart'] = ['items'=>..., 'total'=>999.00];
// Java: session.setAttribute("cart", cartObj);
// ASP.NET: Session["cart"] = cartObj;
| 工具 | 用途 | 關鍵指令 |
|---|---|---|
nmap | 埠口掃描、服務版本偵測、OS 指紋 | nmap -sV -O -A target |
lsof | 本機進程-埠口-檔案關聯 | lsof -P -n -i |
nslookup / dig | DNS 區域傳輸、記錄枚舉 | dig axfr @ns.example.com example.com |
rpcinfo / showmount | NFS/RPC 服務枚舉、匿名掛載檢測 | showmount -e target |
Ethereal/Wireshark | 封包深度分析、明文密碼捕獲 | Follow TCP Stream |
Cheops | 網路拓撲視覺化、主機類型識別 | GUI 操作 |
lsof 定期審計;檔案系統 ACL + 無執行權限掛載;日誌集中化與異常告警。Web 伺服器安全非單一產品可解,而是「架構隔離、最小權限、零信任輸入、持續可見」四大支柱構成的系統工程。以本文工具鏈與模式為起點,建立屬於組織的標準化加固基線與驗證閉環。