設定
本頁列出 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 小時)。