April 10Apr 10 ------------- 前言 ------------- GeoLite2是MaxMind提供的免費IP地理位置資料庫,在論壇伺服器環境中應用廣泛: 安全分析 識別異常登入來源國家,配合防火牆封鎖高風險區域 流量統計 分析訪客地理分佈,生成 國家/城市 統計報表 合規政策 依地區限制內容存取,滿足GDPR等法規需求 Fail2ban整合 攻擊來源國家分析,強化封鎖策略 MOTD 顯示 即時顯示攻擊來源國家 (本教學的核心用途) ------------------------------------------- 註冊MaxMind帳號與取得License Key ------------------------------------------- 自2019年12月起,在MaxMind下載GeoLite2必須使用License Key 註冊帳號:前往官網 https://www.maxmind.com/en/geolite2/signup 註冊頁面,申請免費的GeoLite2資料庫帳號 填寫並提交註冊信息:在頁面上,你需要提供一個有效且真實的郵箱地址,這將是你的用戶名。然後設置一個密碼,並填寫其他必要的資料來完成註冊 驗證郵箱地址:提交註冊信息後,MaxMind 會向你填寫的郵箱發送一封驗證郵件。你需要登入郵箱,點擊郵件中的驗證連結來啟用帳號 取得金鑰:登入網站後,前往「My Account」>「Manage License Keys」。點擊 Generate New License Key。取得 License Key 注意事項: 註冊時,若系統提示使用「一次性郵箱」或懷疑VPN,請先關閉所有VPN或代理後重試 申請時的IP若為資料中心IP,也可能觸發限制,建議使用一般家用網路申請 ------------------------- 回到 Debian 13 VPS ------------------------- SSH登入你的VPS ---------------- 安裝必要工具 ---------------- apt update -y apt install -y curl tar gzip unzip zip apt install -y mmdb-bin libmaxminddb0 libmaxminddb-dev ----------------------------- 建立 目錄 與 腳本 ----------------------------- 建立目錄 mkdir -p /usr/share/GeoIP 建立腳本vi /usr/local/bin/update_geoip.shupdate_geoip.sh貼上以下內容,並修改# 請在此填入你的 MaxMind License Key 授權金鑰LICENSE_KEY="YOUR_LICENSE_KEY"儲存檔案並離開vi編輯器按 Esc,輸入 :wq,按 Enter---------------------- 賦予腳本執行權限 ---------------------- 賦予執行權限 chmod 700 /usr/local/bin/update_geoip.sh 確認權限 chown root:root /usr/local/bin/update_geoip.sh ------------------ 檢查是否成功 ------------------ 手動執行一次 /usr/local/bin/update_geoip.sh 確認下載結果 ls -lh /usr/share/GeoIP/ 預期輸出 (這幾個檔案 各約 10MB ~ 70MB) GeoLite2-ASN.mmdb GeoLite2-City.mmdb GeoLite2-Country.mmdb 常見錯誤:若下載後執行MOTD腳本時出現「Permission denied」,通常是因為MOTD腳本以root執行,但資料庫權限設為 640 (只有 www-data 可讀) 解決方式:將 root 加入 www-data 群組,或暫時改為 644 (視安全需求決定) 方法一:將 root 加入 www-data 群組 usermod -aG www-data root 需重新登入才生效 方法二:放寬權限 (較不安全,不建議用於生產環境) chmod 644 /usr/share/GeoIP/*.mmdb ----------------------------- 設定自動更新服務 ----------------------------- 不修改官方 geoipupdate.service,而是建立相依服務,讓兩者在開機時依序執行 1. 建立自訂 Service 單元 vi /etc/systemd/system/update-geoip-custom.service 貼上內容 [Unit] Description=Custom GeoIP Update Script Before=geoipupdate.service After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/usr/local/bin/update_geoip.sh User=root Group=root StandardOutput=journal StandardError=journal [Install] WantedBy=geoipupdate.service 儲存檔案並離開vi編輯器 按 Esc,輸入 :wq,按 Enter 2. 建立關聯關係 建立軟連結,讓 geoipupdate.service 啟動時一併觸發 mkdir -p /etc/systemd/system/geoipupdate.service.wants/ ln -sf /etc/systemd/system/update-geoip-custom.service /etc/systemd/system/geoipupdate.service.wants/ 3. 重新載入並測試 systemctl daemon-reload systemctl restart geoipupdate 現在執行 systemctl restart geoipupdate 時,systemd 會依序: 先執行 update-geoip-custom.service (你的自訂腳本) 再執行 geoipupdate.service (MaxMind官方更新程序) ---------------- 驗證資料庫 ---------------- 查詢國家: mmdblookup --file /usr/share/GeoIP/GeoLite2-Country.mmdb --ip 8.8.8.8 查詢城市: mmdblookup --file /usr/share/GeoIP/GeoLite2-City.mmdb --ip 8.8.8.8 查詢 ASN: mmdblookup --file /usr/share/GeoIP/GeoLite2-ASN.mmdb --ip 8.8.8.8 預期顯示 "United States"、"Mountain View"、"AS15169" 等資訊,代表資料庫運作正常 --------------------------- 檢查服務狀態 --------------------------- systemctl status geoipupdate.service systemctl status geoipupdate.timer systemctl status update-geoip-custom.service ----------------------- 驗證SSH登入效果 ----------------------- 登出 exit 重新SSH登入,確認動態MOTD正常顯示 -------------------- 常見問題排查 -------------------- MOTD登入後完全不顯示 1. 確認腳本有執行權限 ls -la /etc/update-motd.d/10-system-info 2. 直接執行腳本,看是否有錯誤輸出 bash /etc/update-motd.d/10-system-info 3. 確認 PAM 設定 grep -n motd /etc/pam.d/sshd 4. 確認 SSH 設定 sshd -T | grep printmotd MOTD顯示但顏色全部消失 部分 SSH 客戶端(如舊版 PuTTY)預設不啟用 ANSI 色彩。在客戶端開啟 ANSI / xterm-256color 終端機模擬即可 GeoIP 查詢顯示 Permission denied 確認資料庫擁有者與權限 ls -lah /usr/share/GeoIP/ 臨時解法:允許 root 讀取 usermod -aG www-data root 重新登入後生效 sysstat 磁碟 IO 顯示空白 確認已啟用 grep ENABLED /etc/default/sysstat 應顯示:ENABLED="true" 確認服務運行 systemctl status sysstat 等待至少10分鐘讓 sysstat 收集資料後再次查看 SSH登入速度明顯變慢 (超過3 秒) 原因通常是腳本中的 sleep 1 (QPS計算) 加上GeoIP查詢。調整方式: 減少 GeoIP 分析的日誌行數(在腳本中從 200 改為 50) tail -n 50 "$_LOG" 或完全停用 GeoIP 分析(將對應程式碼區塊註解掉) ------------------------ 結語與後續擴展建議 ------------------------ 透過妥善規劃的動態MOTD,管理員在每次SSH登入時即可立刻掌握伺服器的健康狀態 對於資源受限的 2 GB VPS 而言,在問題影響論壇之前提早察覺記憶體或磁碟的異常,是非常實際的維運價值 後續可考慮的擴展方向: 更完整的即時監控 Netdata (輕量,適合 2 GB VPS) 指標長期儲存與警報 Prometheus + Grafana 日誌分析自動化 GoAccess (Nginx 日誌即時分析) 多伺服器集中管理 Zabbix、Grafana Alloy 自動封鎖惡意來源國 Nginx GeoIP 模組 + MaxMind Edited May 19May 19 by Jack
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.