Check Point R80.10 API. Halduse CLI kaudu, skriptid ja palju muud

Check Point R80.10 API. Halduse CLI kaudu, skriptid ja palju muud

Olen veendunud, et igaühel, kes on kunagi töötanud Check Point, on esinenud kaebuseid konfiguratsiooni muutmise võimatusest käsurealt. See on eriti kummaline neile, kes on varem töötanud Cisco ASA-ga, kus kõik on võimalik seadistada CLI kaudu. Check Pointis on aga kõik vastupidi — kõik turvaseaded tehti ainult graafilise liidese kaudu. Siiski on mõned asjad täiesti ebamugavad teha GUI kaudu (isegi nii mugav kui Check Point). Näiteks 100 uue hosti või võrgu lisamine muutub pika ja tüütu protsessiks. Iga objekti jaoks tuleb mitu korda hiirt klõpsata ja IP-aadressi sisestada. Sama kehtib ka veebisaitide rühma loomise või IPS-signatuuride massilise sisselülitamise/väljalülitamise kohta. Samuti on suure tõenäosusega võimalik teha viga.

Hiljuti juhtus 'ime'. Uue versiooni väljalaskmisega Gaia R80 kuulutati välja võimalus kasutada API-d, mis avab laiad võimalused seadistuste automatiseerimiseks, haldamiseks, jälgimiseks jne. Nüüd on võimalik:

  • luua objekte;
  • lisada või muuta access-list-e;
  • sisse lülitada/välja lülitada blade'e;
  • seada sisse võrgu liideseid;
  • installeerimise poliitikad;
  • ja palju muud.

Ausalt öeldes ei saa ma aru, kuidas see uudis Habrast mööda läks. Selles artiklis anname lühikese ülevaate API kasutamisest ja toome mitu praktilist näidet. CheckPointi seadistamine skriptide abil.

Tahan kohe öelda, et API-d kasutatakse ainult Management serveri jaoks. See tähendab, et gatewaysid ei saa endiselt hallata ilma Management serverita.

Kellele võib see API kasuks tulla?

  1. Süsteemiadministraatorid, kes soovivad lihtsustada või automatiseerida rutiinseid Check Pointi seadistamise ülesandeid;
  2. Ettevõtted, kes soovivad integreerida Check Pointi teiste lahendustega (virtualiseerimissüsteemid, piletisüsteemid, konfigureerimise haldamise süsteemid jms);
  3. Süsteemiintegratsioonifirmad, kes soovivad standardiseerida seadistusi või luua täiendavaid tooteid, mis on seotud Check Pointiga.

Tüüpiline skeem

Kujutage näiteks ette tüüpilist skeemi Check Pointiga:

Check Point R80.10 API. Halduse CLI kaudu, skriptid ja palju muud

Nagu tavaliselt, on meil olemas gateway (SG), haldussüsteem (SMS) ja administraatori konsool (SmartConsole). Tavaline gateway seadistamise protsess näeb välja järgmine:

Check Point R80.10 API. Halduse CLI kaudu, skriptid ja palju muud

Esiteks, peab administraatori arvutis olema käivitatud SmartConsole, millega me ühendume haldusserveriga (SMS). SMS-is tehakse turvaseaded ja seejärel rakendatakse (install policy) värava (SG).

При использовании Management API, põhjus on, et me saame esimest sammu (SmartConsole'i käivitamine) jätta vahele ja rakendada API-käsud otseselt haldusserverile (SMS).

API kasutamise meetodid

API kaudu konfiguratsiooni muutmiseks on neli peamist võimalust:

1) Kasutades utiliiti mgmt_cli

Näide — # mgmt_cli add host name host1 ip-address 192.168.2.100
See käsk käivitatakse haldusserveri (SMS) käsurealt. Arvan, et käsusüntaks on arusaadav — luuakse host1 aadressiga 192.168.2.100.

2) Sisestades API käsud läbi clish (ekspertrežiimis)

Põhimõtteliselt, kõik, mida vajate, on sisse logida käsureale (mgmt login) kasutajakontoga, mida kasutatakse SmartConsole'i kaudu ühenduse loomiseks (või root-kontoga). Seejärel saab sisestada API-käsud (sel juhul ei ole vajalik kasutada iga käsu ees utiliiti mgmt_cli). Saate luua täisväärtuslikke BASH-skripte. Skripti näide, mis loob hosti:

Bash-skripti

#!/bin/bash

main() {
    clear

    #LOGIN (don't ask for username and password, user is already logged in to Management server as 'root' user)
    mgmt_cli login --root true > id_add_host.txt
    on_error_print_and_exit "Error: Failed to login, check that the server is up and running (run 'api status')"

    #READ HOST NAME
    printf "Enter host name:n"
    read -e host_name
    on_empty_input_print_and_exit "$host_name" "Error: The host's name cannot be empty."

    #READ IP ADDRESS
    printf "nEnter host IP address:n"
    read -e ip
    on_empty_input_print_and_exit "$ip" "Error: The host's IP address cannot be empty."

    #CREATE HOST
    printf "Creating new host: $host_name with IP address: $ipn"
    new_host_response=$(mgmt_cli add host name $host_name ip-address $ip -s id_add_host.txt 2> /dev/null)
    on_error_print_and_exit "Error: Failed to create host object. n$new_host_response"

    #PUBLISH THE CHANGES
    printf "nPublishing the changesn"
    mgmt_cli publish --root true -s id_add_host.txt &> /dev/null
    on_error_print_and_exit "Error: Failed to publish the changes."

    #LOGOUT
    logout
	
	printf "Done.n"
}

logout(){
	mgmt_cli logout --root true -s id_add_host.txt &> /dev/null
}

on_error_print_and_exit(){
    if [ $? -ne 0 ]; then
        handle_error "$1" 
	fi
}

handle_error(){
    printf "n$1n" #print error message
    mgmt_cli discard --root true -s id_add_host.txt &> /dev/null
    logout
    exit 1
}

on_empty_input_print_and_exit(){
	if [ -z "$1" ]; then
		printf "$2n" #print error message
		logout
		exit 0
	fi
}

# Script starts here. Call function "main".
main

Kui olete huvitatud, võite vaadata vastavat videot:

Vaata videot

3) Läbi SmartConsole, avades CLI akna

Kõik, mida peate tegema, on avada aken CLI otse SmartConsole, nagu on näidatud alloleval pildil.

Check Point R80.10 API. Halduse CLI kaudu, skriptid ja palju muud

Selles aknas saab kohe alustada API käskude sisestamist.

4) Veebiteenused. Kasutage HTTPSi POST-päringut (REST API)

Meie arvates on see üks kõige paljutõotavamaid viise, kuna see võimaldab "ehitada" terveid rakendusi serverihalduse jaoks (vabandust tautoloogia eest). Allpool vaatame seda meetodit veidi üksikasjalikumalt.

Kokkuvõttes:

  1. API + cli sobib rohkem neile, kes on harjunud Cisco'ga;
  2. API + shell skriptide rakendamiseks ja rutiinsete ülesannete täitmiseks;
  3. REST API automaatika jaoks.

API aktiveerimine

Käivitataval seadmel, mille RAM on üle 4 GB, ja iseseisvates konfiguratsioonides, mille RAM on üle 8 GB, on API vaikevälja lülitatud. Staatusi saab kontrollida käsuga: api status

Kui selgub, et api on välja lülitatud, on seda üsna lihtne aktiveerida SmartConsole'i kaudu: Manage & Settings > Blades > Management API > Advanced Settings

Check Point R80.10 API. Halduse CLI kaudu, skriptid ja palju muud

Seejärel avaldage (Publish) muudatused ja käivitage käsk api restart.

Veebipäringud + Python

API käskude täitmiseks saab kasutada veebipäringute ja Python raamatukogude requests, json. Üldiselt koosneb veebipäringu struktuur kolmest osast:

1) Aadress

(https://<halduse server>:<port>/web_api/<käsk>) 


2) HTTP Päised

content-Type: application/json
x-chkp-sid: <session ID token as returned by the login command>


3) Päringu koormus

JSON formaadis tekst, mis sisaldab erinevaid parameetreid

Näide erinevate käskude väljakutsumiseks:


def api_call(ip_addr, port, command, json_payload, sid):
    url = 'https://' + ip_addr + ':' + str(port) + '/web_api/' + command
    if sid == '':
        request_headers = {'Content-Type' : 'application/json'}
    else:
        request_headers = {'Content-Type' : 'application/json', 'X-chkp-sid' : sid}
    r = requests.post(url, data=json.dumps(json_payload), headers=request_headers, verify=False)
    return r.json()                                        
'xxx.xxx.xxx.xxx' -> Ip aadress GAIA

Toome välja mõned tüüpilised ülesanded, millega kõige sagedamini kokku puututakse Check Point'i haldamisel.

1) Näide autoriseerimise ja välja logimise funktsioonidest:

Skript


    payload = {'user': 'your_user', 'password' : 'your_password'}
    response = api_call('xxx.xxx.xxx.xxx', 443, 'login', payload, '')
    return response['sid']

    response = api_call('xxx.xxx.xxx.xxx', 443, 'logout', {}, sid)
    return response['message']

2) Bläde aktiveerimine ja võrgu seadistamine:

Skript


new_gateway_data = {'name': 'CPGleb', 'anti-bot': True, 'anti-virus': True, 'application-control': True, 'ips': True, 'url-filtering': True, 'interfaces':
                    [{'name': 'eth0', 'topology': 'external', 'ipv4-address': 'xxx.xxx.xxx.xxx', 'ipv4-network-mask': '255.255.255.0'},
                     {'name': 'eth1', 'topology': 'internal', 'ipv4-address': 'xxx.xxx.xxx.xxx', 'ipv4-network-mask': '255.255.255.0'}]}
new_gateway_result = api_call('xxx.xxx.xxx.xxx', 443, 'set-simple-gateway', new_gateway_data, sid)
print(json.dumps(new_gateway_result))

3) Tulekahju seina reeglite muutmine:

Skript


new_access_data={'name':'Cleanup rule','layer':'Network','action':'Accept'}
new_access_result = api_call('xxx.xxx.xxx.xxx', 443,'set-access-rule', new_access_data ,sid)
print(json.dumps(new_access_result))

4) Rakenduse taseme lisamine:

Skript


add_access_layer_application={ 'name' : 'application123',"applications-and-url-filtering" : True,"firewall" : False}
add_access_layer_application_result = api_call('xxx.xxx.xxx.xxx', 443,'add-access-layer', add_access_layer_application ,sid)
print(json.dumps(add_access_layer_application_result))

set_package_layer={"name" : "Standard","access":True,"access-layers" : {"add" : [ { "name" : "application123","position" :2}]} ,"installation-targets" : "CPGleb"}
set_package_layer_result = api_call('xxx.xxx.xxx.xxx', 443,'set-package', set_package_layer ,sid)
print(json.dumps(set_package_layer_result))

5) Poliitika avaldamine ja installimine, käsu (task-id) täitmise kontrollimine:

Skript


publish_result = api_call('xxx.xxx.xxx.xxx', 443,"publish", {},sid)
print("publish result: " + json.dumps(publish_result))
new_policy = {'policy-package':'Standard','access':True,'targets':['CPGleb']}
new_policy_result = api_call('xxx.xxx.xxx.xxx', 443,'install-policy', new_policy ,sid)
print(json.dumps(new_policy_result)

task_id=(json.dumps(new_policy_result ["task-id"]))
len_str=len(task_id)
task_id=task_id[1:(len_str-1)]
show_task_id ={'task-id':(task_id)}
show_task=api_call('xxx.xxx.xxx.xxx',443,'show-task',show_task_id,sid)
print(json.dumps(show_task))

6) Lisa host:

Skript


new_host_data = {'name':'JohnDoePc', 'ip-address': '192.168.0.10'}
new_host_result = api_call('xxx.xxx.xxx.xxx', 443,'add-host', new_host_data ,sid)
print(json.dumps(new_host_result))

7) Lisa Threat Prevention väli:

Skript


set_package_layer={'name':'Standard','threat-prevention' :True,'installation-targets':'CPGleb'}
set_package_layer_result = api_call('xxx.xxx.xxx.xxx', 443,'set-package',set_package_layer,sid)
print(json.dumps(set_package_layer_result))

8) Vaata seansside loendit

Skript


new_session_data = {'limit':'50', 'offset':'0','details-level' : 'standard'}
new_session_result = api_call('xxx.xxx.xxx.xxx', 443,'show-sessions', new_session_data ,sid)
print(json.dumps(new_session_result))

9) Loo uus profiil:

Skript


add_threat_profile={'name':'Apeiron', "active-protections-performance-impact" : "low","active-protections-severity" : "low or above","confidence-level-medium" : "prevent",
  "confidence-level-high" : "prevent", "threat-emulation" : True,"anti-virus" : True,"anti-bot" : True,"ips" : True,
  "ips-settings" : { "newly-updated-protections" : "staging","exclude-protection-with-performance-impact" : True,"exclude-protection-with-performance-impact-mode" : "High or lower"},
  "overrides" : [ {"protection" : "3Com Network Supervisor Directory Traversal","capture-packets" : True,"action" : "Prevent","track" : "Log"},
                  {"protection" : "7-Zip ARJ Archive Handling Buffer Overflow", "capture-packets" : True,"action" : "Prevent","track" : "Log"} ]}
add_threat_profile_result=api_call('xxx.xxx.xxx.xxx',443,'add-threat-profile',add_threat_profile,sid)
print(json.dumps(add_threat_profile_result))  

10) Muuda IPS signatuuri tegevust:

Skript


set_threat_protection={
  "name" : "3Com Network Supervisor Directory Traversal",
  "overrides" : [{ "profile" : "Apeiron","action" : "Detect","track" : "Log","capture-packets" : True},
    { "profile" : "Apeiron", "action" : "Detect", "track" : "Log", "capture-packets" : False} ]}
set_threat_protection_result=api_call('xxx.xxx.xxx.xxx',443,'set-threat-protection',set_threat_protection,sid)
print(json.dumps(set_threat_protection_result))

11) Lisa oma teenus:

Skript


add_service_udp={    "name" : "Dota2_udp", "port" : '27000-27030',
"keep-connections-open-after-policy-installation" : False,
"session-timeout" : 0, "match-for-any" : True,
"sync-connections-on-cluster" : True,
"aggressive-aging" : {"enable" : True, "timeout" : 360,"use-default-timeout" : False  },
"accept-replies" : False}
add_service_udp_results=api_call('xxx.xxx.xxx.xxx',443,"add-service-udp",add_service_udp,sid)
print(json.dumps(add_service_udp_results))

12) Lisa kategooria, sait või grupp:

Skript


add_application_site_category={  "name" : "Valve","description" : "Valve Games"}
add_application_site_category_results=api_call('xxx.xxx.xxx.xxx',443,"add-application-site-category",add_application_site_category,sid)
print(json.dumps(add_application_site_category_results))

add_application_site={    "name" : "Dota2", "primary-category" : "Valve",  "description" : "Dotka",
  "url-list" : [ "www.dota2.ru" ], "urls-defined-as-regular-expression" : False}
add_application_site_results=api_call('xxx.xxx.xxx.xxx',443,"add-application-site " , 
add_application_site , sid)
print(json.dumps(add_application_site_results))

add_application_site_group={"name" : "Mängud","members" : [ "Dota2"]}
add_application_site_group_results=api_call('xxx.xxx.xxx.xxx',443,"add-application-site-group",add_application_site_group,sid)
print(json.dumps(add_application_site_group_results))

Lisaks saate Web API lisada ja kustutada võrgustikke, hoste, juurdepääsu rolle jne. Olemas on blade'ide seadistamise võimalus Antivirus, Antibot, IPS, VPN. Samuti on võimalik litsentside paigaldamine käsu abil run-script. Kõigi API-käskudega Check Point'is saate tutvuda siit.

Check Point API + Postman

Samuti on mugav kasutada Check Point Web API seotud Postman. Postmanil on töölauaversioonid Windowsile, Linuxile ja MacOS-ile. Lisaks on olemas ka Google Chrome'i plugin. Kasutame seda. Esiteks tuleb leida Postman Google Chrome'i poes ja installida see:

Check Point R80.10 API. Halduse CLI kaudu, skriptid ja palju muud

Selle tarkvara abil suudame genereerida veebiküsimusi Check Point API-le. Et mitte kõik API-käsud meelde jätta, on võimalik importida nn kogusid (šabloone), mis sisaldavad juba kõiki vajalikke käske:

Check Point R80.10 API. Halduse CLI kaudu, skriptid ja palju muud

Siit leiate kogus kuna R80.10. Pärast importimist saavad meile kättesaadavaks API-käskude šablonid:

Check Point R80.10 API. Halduse CLI kaudu, skriptid ja palju muud

Minu arvates on see väga mugav. Saame üsna kiiresti alustada rakenduste väljatöötamist, kasutades Check Point API-d.

Check Point + Ansible

Samuti tahan märkida, et olemas on Ansible mooduli CheckPoint API jaoks. Moodul võimaldab hallata konfiguratsioone, kuid ei ole nii mugav eksootiliste ülesannete lahendamiseks. Skriptide kirjutamine mis tahes programmeerimiskeeles pakub paindlikumaid ja mugavamaid lahendusi.

Kokkuvõte

Siin lõpetame meie väikese ülevaate Check Point API-st. Minu arvates on see funktsioon olnud kauaoodatud ja hädavajalik. API ilmumine avab väga laiad võimalused nii süsteemiadministraatoritele kui ka süsteemiintegraatoritele, kes töötavad Check Pointi toodetega. Orkestreerimine, automatiseerimine, tagasiside SIEM-ile... kõik see on nüüd võimalik.

P.S. Rohkem artikleid Check Point leiate nagu alati meie blogist Habr või blogist veebilehel.

P.S.S. Tehnilisi küsimusi, mis on seotud Check Pointi seadistamisega, saab esitada siit

Ainult registreeritud kasutajad saavad küsitluses osaleda. Logige sisse, palun.

Kas plaanite API kasutada?

  • 70,6%Jah12

  • 23,5%Ei4

  • 5,9%Kasutab juba1

Hääletas 17 kasutajat. 3 kasutajat jäid erapooletuks.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster