跳转到帖子
在手机APP中查看

一个更好的浏览方法。了解更多

PHP论坛人

主屏幕上的全屏APP,带有推送通知、徽章等。

在iOS和iPadOS上安装此APP
  1. 在Safari中轻敲分享图标
  2. 滚动菜单并轻敲添加到主屏幕
  3. 轻敲右上角的添加按钮。
在安卓上安装此APP
  1. 轻敲浏览器右上角的三个点菜单 (⋮) 。
  2. 轻敲添加到主屏幕安装APP
  3. 轻敲安装进行确认。

SSH登入提示 Part 2 安裝MaxMind GeoLite2並建立自動更新腳本

精选回复

SSH登入提示 Part 2 安裝MaxMind GeoLite2並建立自動更新腳本

-------------
前言
-------------

在論壇網站中,IP地理位置資料庫非常重要。MaxMind GeoLite2 是目前最常見且可靠的免費IP地理資料庫之一

在論壇或網站環境中,GeoLite2 常用於:

安全分析
識別異常登入來源
判斷攻擊流量來源國家
配合防火牆策略封鎖高風險區域


流量統計
分析訪客地理分佈
生成國家 / 城市統計報表


合規與政策
依地區限制內容存取
GDPR / 法規相關需求


論壇應用
Fail2ban 攻擊來源分析
Nginx 日誌分析
會員註冊地偵測
風控系統




-------------------------------------------
註冊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 代理」,最常見的原因是當下的IP地址問題。請先關閉任何VPN或代理連接,然後再試一次



-------------------------
回到 Debian 13 伺服器
-------------------------

SSH登入你的VPS


----------------
安裝必要工具
----------------

apt update


apt install -y curl tar gzip


apt install -y mmdb-bin libmaxminddb0 libmaxminddb-dev





-----------------------------
建立 存放目錄 與 腳本
-----------------------------

建立目錄結構
mkdir -p /usr/share/GeoIP



建立自動更新腳本
vi /usr/local/bin/update_geoip.sh



貼上以下內容

請務必將 YOUR_LICENSE_KEY 替換為你的 License Key




#!/bin/bash
# MaxMind GeoLite2 資料庫下載腳本
# 適用於 Debian 13

# --- 配置區域 ---
# 請在此填入你的 MaxMind License Key 授權金鑰
LICENSE_KEY="YOUR_LICENSE_KEY"


# 下載基礎 URL
BASE_URL="https://download.maxmind.com/app/geoip_download"


# 目標目錄
GEOIP_DIR="/usr/share/GeoIP"

# 定義要下載的資料庫版本 (edition_id)
EDITIONS=(
    "GeoLite2-ASN"
    "GeoLite2-City"
    "GeoLite2-Country"
)

# --- 腳本本體 ---
echo "$(date): 開始更新 MaxMind GeoLite2 資料庫..."

# 確保目標目錄存在
mkdir -p "$GEOIP_DIR"

# 切換到目標目錄
cd "$GEOIP_DIR" || exit 1

for EDITION in "${EDITIONS[@]}"; do
    echo "正在處理: $EDITION"
    
    # 下載最新的 .mmdb 檔案 (使用 -s 靜默模式,-L 跟隨重定向,-O 指定輸出檔案)
    # 使用 curl 而非 wget,因為它在 Debian 13 上預設安裝且功能完備
    sudo curl -s -L -o "${EDITION}.tar.gz" \
        "${BASE_URL}?edition_id=${EDITION}&license_key=${LICENSE_KEY}&suffix=tar.gz"
    
    # 檢查下載是否成功
    if [ $? -ne 0 ] || [ ! -s "${EDITION}.tar.gz" ]; then
        echo "錯誤:下載 $EDITION 失敗" >&2
        continue
    fi
    
    # 解壓縮,並直接將 .mmdb 檔案提取到目前目錄,覆蓋舊檔案
    # --strip-components=1 會移除壓縮包內的第一層目錄 (例如 GeoLite2-City_20250101)
    sudo tar -xzf "${EDITION}.tar.gz" \
        --strip-components=1 \
        --wildcards '*.mmdb'
    
    # 檢查解壓縮是否成功
    if [ $? -ne 0 ]; then
        echo "錯誤:解壓縮 $EDITION 失敗" >&2
    else
        echo "$EDITION 更新完成"
    fi
    
    # 清理下載的壓縮檔
    sudo rm -f "${EDITION}.tar.gz"
    
    echo "------------------------"
done

# 設定正確的權限,讓 Web 服務 (如 PHP-FPM 執行的使用者) 可以讀取
# 假設你的 PHP-FPM 執行使用者是 www-data,Nginx 也是 www-data
sudo chown -R www-data:www-data "$GEOIP_DIR"
sudo chmod 750 "$GEOIP_DIR"
sudo find "$GEOIP_DIR" -type f -name '*.mmdb' -exec sudo chmod 640 {} \;

echo "$(date): GeoLite2 資料庫更新程序結束。"






儲存檔案並離開vi編輯器
按 Esc,輸入 :wq,按 Enter






----------------------
賦予腳本執行權限
----------------------

chmod +x /usr/local/bin/update_geoip.sh


確認所有權
chown root:root /usr/local/bin/update_geoip.sh





------------------
檢查是否成功
------------------


手動執行一次測試
/usr/local/bin/update_geoip.sh


檢查是否成功
ls -la /usr/share/GeoIP/


你應該會看到三個檔案:
GeoLite2-ASN.mmdb
GeoLite2-City.mmdb
GeoLite2-Country.mmdb

檔案大小約 數MB 至 數十MB,日期為當日









----------------------
測試查詢IP地理位置
----------------------


查詢國家:
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" 等資訊,代表資料庫運作正常



-------------------------------------------
與 geoipupdate.service 官方服務 連動
-------------------------------------------

建立獨立的 Service + Wants 依賴

這種方法不修改官方服務,而是建立一個相依服務,確保你的腳本和官方服務一起啟動


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 (執行官方更新)




---------------------------
檢查服務狀態
---------------------------

systemctl status geoipupdate.service



systemctl status geoipupdate.timer








-----------------------
驗證SSH登入效果
-----------------------

登出
exit


重新SSH登入,確認動態MOTD正常顯示







----------
結語
----------

透過妥善規劃的MOTD,管理員在每次SSH登入時即可立刻掌握伺服器的健康狀態,對於資源受限的 2GB VPS 尤為重要,在問題影響論壇之前,就能提早察覺記憶體或磁碟的異常

若日後論壇規模成長,可進一步整合監控工具 (如 Netdata、Prometheus + Grafana),並將關鍵指標的摘要透過MOTD呈現,打造更完善的維運環境

本帖最后于,由Jack编辑

创建帐户或登录后发表意见

帐户

导航

搜索

配置浏览器推送通知

Chrome (安卓)
  1. 轻敲地址栏旁的锁形图标。
  2. 轻敲权限 → 通知。
  3. 调整你的偏好。
Chrome (台式电脑)
  1. 点击地址栏中的挂锁图标。
  2. 选择网站设置。
  3. 找到通知选项并调整你的偏好。