1. 程式人生 > 實用技巧 >OpenWAF學習筆記(四)—— API-接入規則

OpenWAF學習筆記(四)—— API-接入規則

openwaf_api是openwaf 的子模組,用於控制讀取/修改記憶體中的部分資訊,首先對接入規則這部分進行學習。
接入規則這部分的API有五種操作

首先,接入規則格式如下:

{
    "twaf_access_rule": [
        "rules": [                                 -- 注意先後順序
            {                                      
                "ngx_ssl": false,                  -- nginx 認證的開關
                "ngx_ssl_cert": "path",            -- nginx 認證所需 PEM 證書地址
                "ngx_ssl_key": "path",             -- nginx 認證所需 PEM 私鑰地址
                "host": "1.1.1.1",                 -- 域名/IP,正則匹配,WAF地址
                "path": "/",                       -- 路徑,正則匹配
                "port": 80,                        -- 埠,預設 80
                "server_ssl": false,               -- 後端伺服器 ssl 開關
                "forward": "server_5",             -- 後端伺服器 upstream 名稱
                "forward_addr": "1.1.1.2",         -- 後端伺服器ip地址,即需要防護的目標網站地址
                "forward_port": "8080",            -- 後端伺服器埠號(預設80),即需要防護的目標網站埠
                "user": "-",                       -- 使用者ID
                "uuid": "access_567b067ff2060",    -- 用來標記此規則的 uuid,api 中會用到,要保證全域性唯一
                "policy": "policy_uuid"            -- 安全策略 ID
            }
        ]
    }
}
GET

1.查詢所有使用者下所有接入規則

#(“ | python -m json.tool”可不加,只是為了讓輸出結果看起來友好一點)
curl http://192.168.37.130:61111/api/access_rule | python -m json.tool

2.查詢某使用者下所有接入規則({user}即接入規則中的使用者ID,新增時若不賦值則預設“-”)

curl http://192.168.37.130:61111/api/access_rule/{user} | python -m json.tool

3.查詢某使用者下某條接入規則({user}即接入規則中的使用者ID,新增時若不賦值則預設“-”,{uuid}為接入規則ID)

curl http://192.168.37.130:61111/api/access_rule/{user}/{uuid} | python -m json.tool
POST

1.按索引新增接入規則。若 pos 為空時,表示新增至 user 接入規則最後一條(user 為使用者 ID,pos 為位置索引)
格式:curl http://192.168.37.130:61111/api/access_rule/{user}/{pos}
例如,在使用者 aa 中,新增一條接入規則,且排序為 2,注意要為“host”賦值哦!!

curl http://192.168.37.130:61111/api/access_rule/aa/2 -X POST -d '{"config":{"user":"aa","uuid":"aaa","host":"……"}}'

2.按 uuid 新增接入規則。新增規則會新增至對應 uuid 的下一條規則,若 uuid 為空,則新增至 user 接入規則第一條(user 為使用者 ID,uuid 為接入規則 ID)
格式:curl http://192.168.37.130:61111/api/access_rule/{user}/uuid/{uuid}
例如,在使用者 bb 中,新增一條接入規則,且新增至 uuid 為 bbb 的下一條

curl http://192.168.37.130:61111/api/access_rule/bb/uuid/bbb -X POST -d '{"config":{"user":"bb","uuid":"bbbb","host":"……"}}'
PUT

全量修改已有接入規則配置(user 為使用者 ID, uuid 為接入規則 ID)
格式:http://192.168.37.130:61111/api/access_rule/{user}/{uuid}

例:當前接入規則如下:
{
    "twaf_access_rule": {
        "rules":[
            {"user":"u1","uuid":"id1", "port":88, "host":"a.com","forward":"test"},
            {"user":"u2","uuid":"id2", "port":90, "host":"b.com"}
        ]
    }
}
curl http://192.168.37.130:61111/api/access_rule/u1/id1 -X PUT -d '{"config":{"user":"u1","uuid":"id1", "port":80, "host":"a.com"}}'
修改後接入規則如下:
{
    "twaf_access_rule": {
        "rules":[
            {"user":"u1","uuid":"id1", "port":80, "host":"a.com"},
            {"user":"u2","uuid":"id2", "port":90, "host":"b.com"}
        ]
    }
}
PATCH

部分修改已有接入規則配置(user 為使用者 ID, uuid 為接入規則 ID)
格式:http://192.168.37.130:61111/api/access_rule/{user}/{uuid}

例:當前接入規則如下:
{
    "twaf_access_rule": {
        "rules":[
            {"user":"u1","uuid":"id1", "port":80, "host":"a.com"},
            {"user":"u2","uuid":"id2", "port":90, "host":"b.com"}
        ]
    }
}
curl http://192.168.37.130:61111/api/access_rule/u1/id1 -X PATCH -d '{"config":{"port":88,"forward":"test"}}'
修改後接入規則如下:
{
    "twaf_access_rule": {
        "rules":[
            {"user":"u1","uuid":"id1", "port":88, "host":"a.com","forward":"test"},
            {"user":"u2","uuid":"id2", "port":90, "host":"b.com"}
        ]
    }
}
DELETE

刪除接入規則(user 為使用者 ID, uuid 為接入規則 ID)
格式:curl http://192.168.37.130:61111/api/access_rule/{user}/{uuid1}/{uuid2}/...
此操作單獨、批量刪除指定使用者下的規則ID對應的規則資訊

# 刪除使用者 u1 下的 uuid 為 id1 的規則
curl http://192.168.37.130:61111/api/access_rule/u1/id1 -X DELETE