{{-- 安全風險提示 --}}
選擇傳送方式前請評估資安風險
方法 A(rsyslog TCP):對外維持一條長連線至 port 5140,防火牆或 EDR 可能將其判斷為 C2 通訊或異常資料外洩(DLP 告警)。適合內網環境或已事先將目的地 IP 加入白名單的主機。
方法 B(HTTPS Push,建議):每 10 分鐘定期以 HTTPS POST 推送,走標準 port 443,流量外觀與一般 web 請求相同,不會觸發資安設備告警。
{{-- 方法 B:HTTPS Push Agent(建議) --}}
方法 B — HTTPS Push Agent 建議 走 HTTPS port 443,無長連線,不觸發資安告警
1下載 Push Agent 腳本
sudo curl -o /usr/local/bin/portal-log-push \
  https://portal.steps.tw/scripts/portal-log-push.py
sudo chmod +x /usr/local/bin/portal-log-push

或直接複製腳本內容到 /usr/local/bin/portal-log-push

2填入 Agent Token

開啟腳本,修改 AGENT_TOKEN 為主機的 Agent Token(主機管理 → 編輯):

PORTAL_URL  = "https://portal.steps.tw"
AGENT_TOKEN = "貼上你的 Agent Token"
3建立狀態目錄並設定 cron
sudo mkdir -p /var/lib/portal-log-push
# 測試執行
sudo /usr/local/bin/portal-log-push

# 加入 cron(每 10 分鐘執行一次)
echo "*/10 * * * * root /usr/local/bin/portal-log-push" \
  | sudo tee /etc/cron.d/portal-log-push
4驗證
sudo /usr/local/bin/portal-log-push
# 輸出:[portal-push] /var/log/syslog: pushed 142 lines
HTTPS Push 的優點
  • 流量走 HTTPS 443,與一般 web 請求相同
  • 每 10 分鐘一次,沒有持續連線
  • Bearer token 認證,傳輸加密
  • 不需要在防火牆開放任何 outbound port
  • 記錄上次傳送位置,不重複推送舊 log
  • 支援 log rotate(自動偵測 inode 變更)
{{-- 方法 A:rsyslog TCP --}}
方法 A — rsyslog TCP 轉送 長連線至 port 5140,建議僅用於內網或已白名單環境
1建立設定檔

建立 /etc/rsyslog.d/99-portal.conf

module(load="imfile")

# Apache access log
input(type="imfile"
      File="/var/log/apache2/access.log"
      Tag="apache-access"
      Severity="info"
      Facility="local6"
      PersistStateInterval="200"
      freshStartTail="on")

# Apache error log
input(type="imfile"
      File="/var/log/apache2/error.log"
      Tag="apache-error"
      Severity="error"
      Facility="local6"
      PersistStateInterval="200"
      freshStartTail="on")

# syslog + auth + kernel
*.* action(type="omfwd"
           target="portal.steps.tw"
           port="5140"
           protocol="tcp"
           action.resumeRetryCount="-1"
           queue.type="linkedList"
           queue.size="10000"
           queue.saveOnShutdown="on")

# Apache(local6)
local6.* action(type="omfwd"
                target="portal.steps.tw"
                port="5140"
                protocol="tcp"
                action.resumeRetryCount="-1"
                queue.type="linkedList"
                queue.size="5000")
2套用設定
sudo systemctl restart rsyslog
3驗證
sudo rsyslog -N1            # 語法檢查
logger "test from $(hostname)"  # 送一筆測試 log
使用前請確認
  • 目的地 IP(portal.steps.tw)已加入 outbound 白名單
  • 公司 DLP / IDS 已排除此連線
  • Client 防火牆允許 outbound TCP 5140
傳送行為
  • 10 分鐘或累積 2000 行批次送出
  • rsyslog 與 portal 維持長連線
  • 主機以來源 IP 對應(確認 curl ifconfig.me
{{-- 兩種方法對比 + Log 類型 --}}
兩種方法比較
項目 方法 B(HTTPS Push) 方法 A(rsyslog TCP)
連線型態 間歇性 HTTPS 請求 持續長連線
使用 Port 443 5140
資安設備誤判風險 低(正常 HTTPS) 中(可能觸發 DLP)
傳輸加密 TLS 加密 明文(未加密)
認證方式 Bearer token 來源 IP
安裝複雜度 cron + Python 腳本 rsyslog 設定檔
即時性 最多 10 分鐘延遲 準即時(幾秒內)
支援的 Log 類型
@foreach(\App\Models\LogCollection::$LOG_TYPES as $key => $meta)
{{ $meta['label'] }} {{ $key }}
@endforeach