文件 v1.0.0

設定

本頁列出 Config 及其子結構 Redis、Log、Filepath、EmailConfig 的欄位、JSON key 與預設值;評分與速率參數另見 參數。

Config

欄位 JSON key 型別 必要 說明
Redis redis Redis 是 Redis 連線
Email email *EmailConfig 否 Deny 通知;nil 不寄送
Log log *Log 否 日誌設定(pardnchiu/go-logger)
Filepath filepath Filepath 否 GeoLite2 與名單檔路徑
Parameter parameter Parameter 否 門檻、分數、速率、封鎖時長

New() 接收值而非指標,並保留自己的副本;建立後再修改呼叫端的 Config 不會生效。

Redis

欄位 JSON key 預設 說明
Host host localhost 主機
Port port 6379 連接埠;超出 1–65535 時套用預設
Password password "" 密碼
DB db 0 DB 編號

所有 key 都沒有前綴,與其他服務共用 Redis 時建議使用獨立 DB 編號,key 一覽見 Redis Key。

Log

Log 是 pardnchiu/go-logger 的 Log 型別別名:

欄位 JSON key 預設 說明
Path path ./logs/mysqlPool 日誌路徑
Stdout stdout false 同時輸出到 stdout
MaxSize max_size 16777216(16 MiB) 單檔上限(位元組)
MaxBackup max_backups 5 保留的輪替檔數
Type type text text 或 json

Filepath

欄位 JSON key 預設 說明
CityDB city_db "" GeoLite2-City.mmdb 路徑
CountryDB country_db "" GeoLite2-Country.mmdb 路徑
WhiteList trust_list ./whiteList.json Allow 名單檔
BlackList ban_list ./blackList.json Deny 名單檔

注意 JSON key 與欄位名不同(trust_list、ban_list)。

EmailConfig

欄位 JSON key 型別 說明
Host host string SMTP 主機
Port port int SMTP 連接埠(建議 587)
Username username string PLAIN 認證帳號
Password password string PLAIN 認證密碼
From from string 寄件者
To to []string 收件者
CC cc []string 只寫入標頭,不會實際投遞
Subject - *func(ip, reason string) string 自訂主旨
Body - *func(ip, reason string) string 自訂內文

細節見 Email 通知。

從 JSON 載入

package main

import (
    "encoding/json"
    "log"
    "os"

    golangIPSentry "github.com/pardnchiu/golang-ip-sentry"
)

func main() {
    raw, err := os.ReadFile("sentry.json")
    if err != nil {
        log.Fatal(err)
    }
    var cfg golangIPSentry.Config
    if err := json.Unmarshal(raw, &cfg); err != nil {
        log.Fatal(err)
    }
    sentry, err := golangIPSentry.New(cfg)
    if err != nil {
        log.Fatal(err)
    }
    defer sentry.Close()
}
{
  "redis": {"host": "localhost", "port": 6379, "db": 2},
  "log": {"path": "./logs/sentry", "type": "json"},
  "filepath": {"city_db": "./GeoLite2-City.mmdb", "trust_list": "./allow.json", "ban_list": "./deny.json"},
  "parameter": {"block_time_min": 300000000000, "block_time_max": 86400000000000}
}

time.Duration 欄位在 JSON 中以奈秒整數表示(上例為 5 分鐘與 24 小時)。

EN