Shunze 學園 >資訊設備專區 >Sophos XG > 《分享》API應用範例 哈囉,還沒有註冊或者登入。請你[註冊|登入]
« 上一篇主題 下一篇主題 » 顯示成列印模式 | 增加到我的最愛
發表新主題 發表回覆
作者
主題
shunze
工友伯伯


註冊日期: 2002 04
來自: 潮汐終止之地
文章: 2387

shunze 離線
《分享》API應用範例引用回覆 編輯/刪除文章 搜尋由  發表的其他文章 回報給版主 IP 位置 回此頁最上方

在防止“暴力猜測帳密”上,由於XG只是進行routing,將連線需求轉給後端的server,
所以XG本身並不知道每次連線所輸入的帳號/密碼是否正確?
自然也就無法辦到“輸入錯誤帳密幾次後,封鎖惡意IP”這樣的工作...

但假設後端主機可以主動擷取“輸入錯誤次數過多的IP資訊”,
那XG能否主動去封鎖這樣的惡意IP連線?

答案是可以的!
XG提供API功能,讓後端主機可以透過XML格式,將要阻擋的IP物件直接在XG中建立。
我們只要在防火牆規則中,預先建好阻擋規則,
再由後端主機去維謢這個block IP清單或群組,就可以實現這樣的需求。


使用API功能時,請先確認執行的管理員帳號是否具有物件的寫入權限。



然後再於API Configuration中放行後端主機的使用權限,



這樣就後端主機就可以使用管理員權限帳號來執行API功能了∼


首先,我們可以透過以下指令來查看IP物件清單與格式。

https://XG_IP/webconsole/APIController?reqxml=<Request><Login><Username>admin_account</Username><Password>P@ssw0rd</Password></Login><Get><IPHost><Name></Name><IPFamily></IPFamily><HostType></HostType><IPAddress></IPAddress></IPHost></Get></Request>


若我們要取得Block_IP這個IP List物件的內容,可透過以下指令。
https://XG_IP/webconsole/APIController?reqxml=<Request><Login><Username>admin_account</Username><Password>P@ssw0rd</Password></Login><Get><IPHost><Filter><key name="Name" criteria="like">Block_IP</key></Filter></IPHost></Get></Request>


若Block_IP這個IP List物件不存在,我們可以透過以下指令來建立。
https://XG_IP/webconsole/APIController?reqxml=<Request><Login><Username>admin_account</Username><Password>P@ssw0rd</Password></Login><Set operation="add"><IPHost><Name>Block_IP</Name><IPFamily>IPv4</IPFamily><HostType>IPList</HostType><ListOfIPAddresses>199.199.199.199</ListOfIPAddresses></IPHost></Set></Request>


若Block_IP這個IP List物件已存在,我們可以透過以下指令去更新它的IP內容。
https://XG_IP/webconsole/APIController?reqxml=<Request><Login><Username>admin_account</Username><Password>P@ssw0rd</Password></Login><Set operation="update"><IPHost><Name>Block_IP</Name><IPFamily>IPv4</IPFamily><HostType>IPList</HostType><ListOfIPAddresses>199.199.199.199</ListOfIPAddresses></IPHost></Set></Request>


要刪除Block_IP這個特定IP List物件,則可透過以下指令。
https://XG_IP/webconsole/APIController?reqxml=<Request><Login><Username>admin_account</Username><Password>P@ssw0rd</Password></Login><Remove><IPHost><Name>Block_IP</Name><IPFamily>IPv4</IPFamily><HostType>IPList</HostType></IPHost></Remove></Request>


若我們不想用IP List物件來管理,想要透過IP群組的方式來管理,
將要被封鎖的IP物件直接加到Block_IP_Group群組中,可以透過以下指令來建立隸屬於群組的IP物件。
https://XG_IP/webconsole/APIController?reqxml=<Request><Login><Username>admin_account</Username><Password>P@ssw0rd</Password></Login><Set operation="add"><IPHost><Name>Test_IP</Name><IPFamily>IPv4</IPFamily><HostType>IP</HostType><HostGroupList><HostGroup>Block_IP_Group</HostGroup></HostGroupList><IPAddress>199.199.199.199</IPAddress></IPHost></Set></Request>



有了以上幾個sample指令後,
在後端主機上,我們就可以透過curl(linux主機)或powershell(Windows主機)於XG上直接建立封鎖物件了∼


參考資料
How to use the API



♥順子老婆的網拍,請多關照∼

If you don't like something, change it.
If you can't change it, change your attitude.
Don't complain!


2020-09-11, 12:11 shunze 的個人資料 把 shunze 加入好友列表 發送Email給 shunze 瀏覽 shunze 的網站 MSN : shunze@gmail.com
shunze
工友伯伯


註冊日期: 2002 04
來自: 潮汐終止之地
文章: 2387

shunze 離線
《分享》API應用範例之2-大量輸入FQDN引用回覆 編輯/刪除文章 搜尋由  發表的其他文章 回報給版主 IP 位置 回此頁最上方

有客戶在問,情資單位給的惡意FQDN清單,Sophos有沒有辦法批次匯入?

順子仔細去查了一下,SFOS都已經到21版了,但Sophos還是沒有這個功能...
不過有好心的使用者提供了自製的API script,可以透過API大量輸入IP與FQDN物件,連結如下。
Automated load of object through API from CSV!

這個script順子看了一下,發現它只要稍微修改一下,就可以完美符合客戶需求!

要修改哪些內容呢?
首先,FQDN跟IP物件不一樣,IP有IP list可用,可以以一個IP list物件收容多個IP,並套用在防火牆規則之中簡單管理;
但FQDN沒有FQDN list物件,每一個FQDN都是一個獨立物件,若要將大量的FQDN列入拒絕清單,對管理者而言將是一筆不小的負擔。

不過雖然FQDN沒有FQDN list可用,但我們可以透過FQDN group來達成類似需求,
把這些FQDN加到FQDN group之中,就可以在防火牆規則之中以FQDN group來進行管理。

再來就是匯入的FQDN雖然可以加上前綴字串來識別與管理,
但script中的內容是寫死的,順子把它變成一個變數,讓使用者依需求去調整。

基於以上的需求,順子修改了script內容,
讓它它可以依需求先建立FQDN Group,讓隨後的FQDN物件在建立時直接歸屬在這個FQDN Group之中,
之後要套用在防火牆規則時就簡單多了,直接套用這個Group物件即可。

# Variables you need to adjust for your environment
# -------------------------------------------------
$_FIREWALL_IP = "192.168.1.210"
$_FIREWALL_PORT = "4444"
$_API_USER = "admin"
$_API_PASSWORD = 'correcthorsebatterystaple'
$_WORK_FOLDER = "D:\test\"
$_DATA_FILE_NAME = "ips.txt"
$_ADD_PREFIXES_TO_OBJECTS = "Yes"
$_FQDN_Prefix = "Bulk_"
$_ADD_FQDN_GROUP = "FQDN_G_Test"


# Main functions
# --------------

# 順子增加FQDN群組判斷
if ($_ADD_FQDN_GROUP -ne "")
    {
    $_API_QUERY_URL = "https://$($_FIREWALL_IP):$($_FIREWALL_PORT)/webconsole/APIController?reqxml=<Request><Login><UserName>$($_API_USER)</UserName><Password>$($_CODIFIED_API_PASSWORD)</Password></Login><Get><FQDNHostGroup><Filter><key name='Name' criteria='='>$($_ADD_FQDN_GROUP)</key></Filter></FQDNHostGroup></Get></Request>"    
    $_API_QUERY_RESULT = Invoke-WebRequest -Uri "$_API_QUERY_URL"
    [xml] $_API_QUERY_RESULT_PARSED = $_API_QUERY_RESULT.Content

    #FQDN GROUP物件不存在時,建立FQDN物件
if ($_API_QUERY_RESULT_PARSED.Response.FQDNHostGroup.Status -eq "No. of records Zero.")
{    
        $_API_QUERY_URL = "https://$($_FIREWALL_IP):$($_FIREWALL_PORT)/webconsole/APIController?reqxml=<Request><Login><UserName>$($_API_USER)</UserName><Password>$($_CODIFIED_API_PASSWORD)</Password></Login><Set><FQDNHostGroup><Name>$($_ADD_FQDN_GROUP)</Name></FQDNHostGroup></Set></Request>"

        $_API_QUERY_RESULT = Invoke-WebRequest -Uri "$_API_QUERY_URL"
        [xml] $_API_QUERY_RESULT_PARSED = $_API_QUERY_RESULT.Content
        Write-Host "[INFO] Create FQDN Group object $($_ADD_FQDN_GROUP)"
        }
        
    $_ADD_FQDN_GROUP = "<FQDNHostGroupList><FQDNHostGroup>" + $_ADD_FQDN_GROUP + "</FQDNHostGroup></FQDNHostGroupList>"
    }            
    
    
    # For FQDN item
    # --------------
    if ($_OPERATION -eq "FQDN_Mode")
     {
        $_API_QUERY_URL = "https://$($_FIREWALL_IP):$($_FIREWALL_PORT)/webconsole/APIController?reqxml=<Request><Login><UserName>$($_API_USER)</UserName><Password>$($_CODIFIED_API_PASSWORD)</Password></Login><Set><FQDNHost><Name>$($_CODIFIED_ITEM_NAME)</Name><FQDN>$($_SECOND_FIELD)</FQDN>$($_ADD_FQDN_GROUP)</FQDNHost></Set></Request>"
        $_TYPE_OBJECT = "FQDN"        
     }


然後批次建立的FQDN物件的前綴字串也可以自訂,只要修改對應的參數即可。

$_ADD_PREFIXES_TO_OBJECTS = "Yes"
$_FQDN_Prefix = "Bulk_"


# Prefix for name of object
    # -------------------------

if ($_ADD_PREFIXES_TO_OBJECTS -eq "Yes")
{
if ($_OPERATION -eq "FQDN_Mode")
{
$_ITEM_NAME = $_FQDN_Prefix + $_ITEM_NAME
} else {
if ($_THIRD_FIELD -eq "255.255.255.255")
{
$_ITEM_NAME = "HOST_" + $_ITEM_NAME
} else {
$_ITEM_NAME = "NET_" + $_ITEM_NAME
}
}
}


完整的script就在附加檔案之中(解壓密碼Sophos),有需要的朋友請自行取用∼





shunze 上傳的檔案
Sophos_API.zip (5 KB, 已經被下載 75 次)


♥順子老婆的網拍,請多關照∼

If you don't like something, change it.
If you can't change it, change your attitude.
Don't complain!


2024-12-27, 17:35 shunze 的個人資料 把 shunze 加入好友列表 發送Email給 shunze 瀏覽 shunze 的網站 MSN : shunze@gmail.com
  « 上一篇主題 下一篇主題 »
發表新主題 發表回覆
跳到:

Powered by: Burning Board 1.1.1 2001 WoltLab GbR