Check Point R80.10 API. Valdymas naudojant CLI, scenarijus ir kt

Check Point R80.10 API. Valdymas naudojant CLI, scenarijus ir kt

Esu tikras, kad visi, kurie kada nors dirbo su Check Point, buvo skundas dėl neįmanoma redaguoti konfigūracijos iš komandinės eilutės. Tai ypač keista tiems, kurie anksčiau dirbo su Cisco ASA, kur absoliučiai viską galima sukonfigūruoti CLI. Su „Check Point“ viskas yra atvirkščiai – visi saugos nustatymai buvo atlikti tik iš grafinės sąsajos. Tačiau kai kuriuos dalykus visiškai nepatogu atlikti naudojant GUI (net ir tokį patogų kaip Check Point). Pavyzdžiui, užduotis pridėti 100 naujų kompiuterių ar tinklų virsta ilga ir varginančia procedūra. Prie kiekvieno objekto turėsite kelis kartus spustelėti pelę ir įvesti IP adresą. Tas pats pasakytina apie svetainių grupės kūrimą arba masinį IPS parašų įjungimą / išjungimą. Tokiu atveju yra didelė tikimybė suklysti.

„Stebuklas“ įvyko palyginti neseniai. Išleidus naują versiją Gaia R80 buvo paskelbta galimybė API naudojimas, kuri atveria plačias galimybes automatizuoti nustatymus, administravimą, stebėjimą ir kt. Dabar gali:

  • kurti objektus;
  • pridėti arba redaguoti prieigos sąrašus;
  • įjungti / išjungti peilius;
  • konfigūruoti tinklo sąsajas;
  • įdiegti politiką;
  • ir daug daugiau.

Tiesą sakant, nesuprantu, kaip šią naujieną perdavė Habras. Šiame straipsnyje trumpai apibūdinsime, kaip naudoti API, ir pateiksime keletą praktinių pavyzdžių. CheckPoint nustatymai naudojant scenarijus.

Norėčiau iš karto rezervuoti, kad API būtų naudojama tik valdymo serveriui. Tie. Vis dar neįmanoma valdyti šliuzų be valdymo serverio.

Kas iš principo gali naudoti šią API?

  1. Sistemos administratoriai, norintys supaprastinti arba automatizuoti įprastas Check Point konfigūravimo užduotis;
  2. Įmonės, kurios nori integruoti Check Point su kitais sprendimais (virtualizacijos sistemomis, bilietų sistemomis, konfigūracijos valdymo sistemomis ir kt.);
  3. Sistemos integratoriai, norintys standartizuoti nustatymus arba sukurti papildomų su Check Point susijusių produktų.

Tipiška schema

Taigi, įsivaizduokime tipišką schemą su Check Point:

Check Point R80.10 API. Valdymas naudojant CLI, scenarijus ir kt

Kaip įprasta, mes turime vartus (SG), valdymo serveris (SMS) ir administratoriaus konsolę (SmartConsole). Šiuo atveju įprastas šliuzo konfigūravimo procesas atrodo taip:

Check Point R80.10 API. Valdymas naudojant CLI, scenarijus ir kt

Tie. Pirmiausia turite paleisti administratoriaus kompiuteryje SmartConsole, su kuriuo prisijungiame prie valdymo serverio (SMS). Saugos nustatymai atliekami SMS žinutėje ir tik tada taikomi (diegimo politika) į vartus (SG).

kai naudojant Valdymo API, iš esmės galime praleisti pirmąjį tašką (paleisti SmartConsole) ir naudoti API komandos tiesiai į valdymo serverį (SMS).

API naudojimo būdai

Yra keturi pagrindiniai būdai, kaip redaguoti konfigūraciją naudojant API:

1) Naudodami programą mgmt_cli

Pavyzdys - # mgmt_cli pridėti prieglobos pavadinimą host1 ip-adresas 192.168.2.100
Ši komanda vykdoma iš valdymo serverio (SMS) komandų eilutės. Manau, kad komandos sintaksė aiški – host1 sukurtas adresu 192.168.2.100.

2) Įveskite API komandas naudodami clish (eksperto režimu)

Iš esmės viskas, ką jums reikia padaryti, tai prisijungti prie komandinės eilutės (mgmt prisijungimas) pagal paskyrą, kuri naudojama jungiantis per SmartConsole (arba root paskyrą). Tada galite įeiti API komandos (šiuo atveju nereikia naudoti naudingumo prieš kiekvieną komandą mgmt_cli). Galite sukurti visavertį BASH scenarijus. Scenarijaus, kurį sukuria priegloba, pavyzdys:

Bash scenarijus

#!/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

Jei jus domina, galite žiūrėti atitinkamą vaizdo įrašą:

3) Per SmartConsole atidarius CLI langą

Viskas, ką jums reikia padaryti, tai atidaryti langą CLI tiesiai iš SmartConsole, kaip parodyta paveikslėlyje žemiau.

Check Point R80.10 API. Valdymas naudojant CLI, scenarijus ir kt

Šiame lange galite iš karto pradėti įvesti API komandas.

4) Web Services. Naudokite HTTPS įrašo užklausą (REST API)

Mūsų nuomone, tai vienas perspektyviausių būdų, nes leidžia „kurti“ visas programas remiantis valdymo serverio valdymas (atsiprašau už tautologiją). Žemiau mes apžvelgsime šį metodą šiek tiek išsamiau.

Apibendrinti:

  1. API + klip labiau tinka žmonėms, kurie pripratę prie Cisco;
  2. API + apvalkalas už scenarijų taikymą ir įprastų užduočių atlikimą;
  3. POILSIO API automatizavimui.

API įgalinimas

Pagal numatytuosius nustatymus API įjungta valdymo serveriuose, kuriuose yra daugiau nei 4 GB RAM, ir atskirose konfigūracijose, kuriose yra daugiau nei 8 GB RAM. Galite patikrinti būseną naudodami komandą: api būsena

Jei paaiškėja, kad API išjungta, ją gana lengva įjungti naudojant „SmartConsole“: Tvarkyti ir nustatymai > Blades > Valdymo API > Išplėstiniai nustatymai

Check Point R80.10 API. Valdymas naudojant CLI, scenarijus ir kt

Tada paskelbkite (Skelbti) pakeitimus ir paleiskite komandą api paleisti iš naujo.

Žiniatinklio užklausos + Python

Norėdami vykdyti API komandas, galite naudoti žiniatinklio užklausas naudodami Pitonas ir bibliotekos prašymai, Džonsas. Apskritai žiniatinklio užklausos struktūra susideda iš trijų dalių:

1) Adresas

(https://<managemenet server>:<port>/web_api/<command>) 


2) HTTP antraštės

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


3) Prašyti naudingos apkrovos

JSON formato tekstas su skirtingais parametrais

Įvairių komandų iškvietimo pavyzdys:


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 address GAIA

Štai keletas tipinių užduočių, su kuriomis dažniausiai susiduriate administruodami „Check Point“.

1) Autorizacijos ir atsijungimo funkcijų pavyzdys:

Scenarijus


    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) Ašmenų įjungimas ir tinklo nustatymas:

Scenarijus


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) Užkardos taisyklių keitimas:

Scenarijus


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) Pridėkite taikymo sluoksnį:

Scenarijus


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) Paskelbkite ir nustatykite politiką, patikrinkite komandos vykdymą (užduoties ID):

Scenarijus


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) Pridėti prieglobą:

Scenarijus


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) Pridėkite grėsmių prevencijos lauką:

Scenarijus


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) Peržiūrėkite seansų sąrašą

Scenarijus


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) Sukurkite naują profilį:

Scenarijus


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) Pakeiskite IPS parašo veiksmą:

Scenarijus


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) Pridėkite savo paslaugą:

Scenarijus


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) Pridėkite kategoriją, svetainę arba grupę:

Scenarijus


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" : "Games","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))

Be to, su pagalba Žiniatinklio API galite pridėti ir pašalinti tinklus, pagrindinius kompiuterius, prieigos vaidmenis ir kt. Ašmenys gali būti pritaikyti Antivirusinė, antibotas, IPS, VPN. Netgi galima įdiegti licencijas naudojant komandą run-script. Visas Check Point API komandas galite rasti čia čia.

Check Point API + paštininkas

Taip pat patogus naudoti Check Point Web API kartu su Paštininkas. „Postman“ turi darbalaukio versijas, skirtas „Windows“, „Linux“ ir „MacOS“. Be to, yra „Google Chrome“ papildinys. Tai mes naudosime. Pirmiausia turite rasti „Postman“ „Google Chrome“ parduotuvėje ir įdiegti:

Check Point R80.10 API. Valdymas naudojant CLI, scenarijus ir kt

Naudodami šią priemonę galėsime generuoti žiniatinklio užklausas į Check Point API. Kad neprisimintų visų API komandų, galima importuoti taip vadinamus rinkinius (šablonus), kuriuose jau yra visos reikalingos komandos:

Check Point R80.10 API. Valdymas naudojant CLI, scenarijus ir kt

Čia rasite isvezimui R80.10. Po importavimo mums bus prieinami API komandų šablonai:

Check Point R80.10 API. Valdymas naudojant CLI, scenarijus ir kt

Mano nuomone, tai labai patogu. Galite greitai pradėti kurti programas naudodami Check Point API.

Check Point + Ansible

Taip pat norėčiau pažymėti, kad yra Galimas modulis skirta CheckPoint API. Modulis leidžia valdyti konfigūracijas, tačiau jis nėra toks patogus sprendžiant egzotiškas problemas. Scenarijų rašymas bet kuria programavimo kalba suteikia lankstesnių ir patogesnių sprendimų.

Produkcija

Čia tikriausiai baigsime trumpą Check Point API apžvalgą. Mano nuomone, ši funkcija buvo labai laukta ir reikalinga. API atsiradimas atveria labai plačias galimybes tiek sistemų administratoriams, tiek sistemų integratoriams, dirbantiems su Check Point produktais. Orkestravimas, automatizavimas, SIEM grįžtamasis ryšys... dabar viskas įmanoma.

P.S. Daugiau straipsnių apie Check Point kaip visada galite rasti mūsų tinklaraštyje Habr arba tinklaraštyje adresu Dabar naršo.

P.S.S. Jei turite techninių klausimų, susijusių su Check Point nustatymu, galite čia

Apklausoje gali dalyvauti tik registruoti vartotojai. Prisijungti, Prašau.

Ar planuojate naudoti API?

  • 70,6%Taip 12

  • 23,5%Nr.4

  • 5,9%Jau naudoju 1

Balsavo 17 vartotojų. 3 vartotojai susilaikė.

Šaltinis: www.habr.com

Добавить комментарий