首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

實戰分享:企業級 Linux 伺服器安全防護策略與自動封鎖機制

     編輯:PHP 相關知識

架構概覽

某公司內部 7 台 CentOS 伺服器,各擁固定公網 IP,雙網卡 (公網 + 內網),前端由硬體防火牆統一分發流量,**僅對外開放 80 連接埠**,其餘全部封鎖。SSH 管理採用「跳板機」模式:先連線內網 Windows 跳板機,再經由 SSH 連線各 Linux 主機,且每台主機 iptables 僅允許跳板機內網 IP 存取 SSH (22 連接埠)。

面臨的攻擊類型

  1. WebBench 壓力測試攻擊:針對已知程式高 CPU 耗用特性,嘗試癱瘓 Nginx。
  2. 掃描/猜測攻擊:大量嘗試存取 /admin、/phpmyadmin、/backup、/config 等敏感路徑,尋找洩漏檔案或後台入口。

此類攻擊均走 HTTP (80 連接埠),若不攔截將導致 500/502 錯誤、服務中斷。

自動化防禦體系設計

核心邏輯:PHP 即時分析請求特徵 → 符合封鎖條件 → 寫入 Shell 腳本 → Crontab 以 Root 權限執行 iptables 封鎖 → 郵件通知管理員。

1. PHP 核心防護代碼 (置於全域引入檔或 404 處理器)

<?php
/**
 * 自動封鎖惡意 IP 機制
 * 部署步驟:
 * 1. 將此代碼放入專案全域 require 的配置檔 (如 common.inc.php)
 * 2. 建立可寫入的 shell 腳本路徑 /home/wwwroot/bossAdm_Web/webbench.sh
 * 3. crontab -e 加入:*/1 * * * * root /home/wwwroot/bossAdm_Web/webbench.sh
 * 4. service crond restart
 */

// --- 封鎖 WebBench 壓測工具 ---
if (isset($_SERVER['HTTP_USER_AGENT'])) {
    $ua = strtolower(trim($_SERVER['HTTP_USER_AGENT']));
    if (stripos($ua, 'webbench') !== false && !empty($_SERVER['REMOTE_ADDR'])) {
        doLock($_SERVER['REMOTE_ADDR']);
        exit('Forbidden');
    }
}

// --- 封鎖敏感路徑掃描 (建議放在自定義 404.php,並配置 Apache ErrorDocument 404 /404.php) ---
$sensitive_paths = [
    '/admin', '/sign', '/reg', '/tiki-', '/join', '/config', '/backup', '/www',
    '/manage', '/password', '/install', '/phpmyadmin', '/webadmin', '/inc',
    '/user', '/upload', '/setup', '/sys', '/cert'
];

if (isset($_SERVER['REQUEST_URI'])) {
    $uri = strtolower($_SERVER['REQUEST_URI']);
    foreach ($sensitive_paths as $path) {
        if (stripos($uri, $path) !== false) {
            doLock($_SERVER['REMOTE_ADDR']);
            exit('Forbidden');
        }
    }
}

/**
 * 執行封鎖:寫入 shell 腳本,由 crontab root 執行 iptables
 */
function doLock(string $ip): void {
    $script = '/home/wwwroot/bossAdm_Web/webbench.sh';
    $cmd = "#!/bin/bash\n";
    $cmd .= "iptables -I INPUT -s {$ip} -j DROP;\n";
    $cmd .= "echo \"{$ip} - \" `date` \" | mail -s \"Auto-Block Alert\" admin@example.com;\n";
    $cmd .= "cat /dev/null > {$script};"; // 執行後自我清空,避免重複執行
    
    file_put_contents($script, $cmd, LOCK_EX);
    chmod($script, 0755);
    chown($script, 'www'); // 確保 www 用戶可寫入,root 可執行
}
?>

2. Shell 腳本與 Crontab 配置

webbench.sh 由 PHP 動態生成,內容如上。Crontab 每分鐘檢查並執行:

# /etc/crontab
*/1 * * * * root /home/wwwroot/bossAdm_Web/webbench.sh

原理: PHP 無權直接執行 iptables (需 root),故寫入腳本,由已具 root 權限的 Crontab 定期執行,實現權限提升與解耦。

3. 郵件通知配置

伺服器需安裝 mailx 或 postfix 並配置 SMTP 轉發,確保 mail -s "Subject" admin@example.com 能正常發送。

跳板機 SSH 存取機制 (補充說明)

作者採用「一次性開放 3389 (RDP)」設計:

  1. 管理員登入內部後台 → 發送「開放 3389」請求 (寫入 ini 旗標檔)。
  2. Linux 監控腳本 (inotify/輪詢) 偵測到旗標 → 經 Samba 將旗標傳至 Windows 跳板機。
  3. Windows 監控端讀取旗標 → 呼叫硬體防火牆 API 開放 3389 映射 (隨機高連接埠 → 跳板機 3389)。
  4. 管理員遠端桌面連線跳板機 → 再 SSH 至各 Linux 主機。
  5. 群組策略 (gpedit) 設定「登出時自動發送關閉 3389 請求」→ 監控端關閉映射。

全程約 1 分鐘,極大縮小暴露面。

總結與建議

  • 分層防護:硬體防火牆 (網路層) + 系統 iptables (主機層) + 應用層 PHP 行為分析。
  • 最小權限原則:SSH 僅限跳板機 IP、Web 僅開 80/443、資料庫僅限內網存取。
  • 自動化回應:將「偵測 → 封鎖 → 通知」閉環自動化,降低人工介入延遲。
  • 日誌審計:定期分析封鎖日誌、Nginx access/error log、系統 auth.log,調整規則減少誤封。
  • 現代化替代方案:可考慮引入 Fail2Ban (分析日誌自動封鎖)、ModSecurity (WAF)、CrowdSec (群體威脅情報) 替代/增強自製腳本。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved