Olen varma, että jokainen, joka on koskaan työskennellyt
"Ihme" tapahtui suhteellisen hiljattain. Uuden version julkaisun myötä Gaia R80 tilaisuudesta ilmoitettiin API käyttö, joka avaa laajat mahdollisuudet automatisoida asetuksia, hallintoa, valvontaa jne. Nyt voit:
- luoda esineitä;
- lisätä tai muokata pääsyluetteloita;
- ota terät käyttöön/poista käytöstä;
- määrittää verkkoliitännät;
- asennuskäytännöt;
- ja paljon muuta.
Ollakseni rehellinen, en ymmärrä, kuinka nämä uutiset välittivät Habrin. Tässä artikkelissa kuvataan lyhyesti API:n käyttöä ja annetaan useita käytännön esimerkkejä. CheckPoint-asetukset skriptien avulla.
Haluaisin tehdä varauksen heti, että API:a käytetään vain hallintapalvelimelle. Nuo. Yhdyskäytävien hallinta on edelleen mahdotonta ilman hallintapalvelinta.
Kuka voi periaatteessa käyttää tätä API:ta?
- Järjestelmänvalvojat, jotka haluavat yksinkertaistaa tai automatisoida rutiininomaisia Check Point -määritystehtäviä;
- Yritykset, jotka haluavat integroida Check Pointin muihin ratkaisuihin (virtualisointijärjestelmät, lippujärjestelmät, konfiguroinnin hallintajärjestelmät jne.);
- Järjestelmäintegraattorit, jotka haluavat standardoida asetuksia tai luoda Check Pointiin liittyviä lisätuotteita.
Tyypillinen kaava
Joten, kuvitellaan tyypillinen järjestelmä Check Pointin kanssa:
Kuten tavallista, meillä on portti (SG), hallintapalvelin (SMS) ja hallintakonsoli (SmartConsole). Tässä tapauksessa tavallinen yhdyskäytävän määritysprosessi näyttää tältä:
Nuo. Ensin sinun on suoritettava järjestelmänvalvojan tietokoneella SmartConsole, jolla muodostamme yhteyden hallintapalvelimeen (SMS). Suojausasetukset tehdään tekstiviestissä ja otetaan käyttöön vasta sitten (asennuskäytäntö) yhdyskäytävään (SG).
Käytettäessä Management API, voimme periaatteessa ohittaa ensimmäisen kohdan (käynnistä SmartConsole) ja käyttää API-komennot suoraan hallintapalvelimelle (SMS).
API:n käyttötavat
On neljä päätapaa muokata määritystä API:n avulla:
1) mgmt_cli-apuohjelman käyttäminen
Esimerkki - # mgmt_cli lisää isäntänimi host1 ip-osoite 192.168.2.100
Tämä komento suoritetaan Management Server (SMS) -komentoriviltä. Mielestäni komennon syntaksi on selkeä - host1 luodaan osoitteella 192.168.2.100.
2) Anna API-komennot clishin kautta (asiantuntijatilassa)
Periaatteessa sinun tarvitsee vain kirjautua sisään komentoriville (mgmt kirjautuminen) sen tilin alla, jota käytetään muodostettaessa yhteyttä SmartConsolen (tai päätilin) kautta. Sitten pääset sisään API-komennot (tässä tapauksessa apuohjelmaa ei tarvitse käyttää ennen jokaista komentoa mgmt_cli). Voit luoda täysimittaisen BASH-skriptit. Esimerkki komentosarjasta, jonka isäntä luo:
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
Jos olet kiinnostunut, voit katsoa vastaavan videon:
3) SmartConsolen kautta avaamalla CLI-ikkuna
Sinun tarvitsee vain avata ikkuna CLI suoraan alkaen SmartConsole, kuten alla olevassa kuvassa näkyy.
Tässä ikkunassa voit aloittaa heti API-komentojen syöttämisen.
4) Verkkopalvelut. Käytä HTTPS Post -pyyntöä (REST API)
Mielestämme tämä on yksi lupaavimmista menetelmistä, koska voit "rakentaa" kokonaisia sovelluksia perustuen hallintapalvelimen hallinta (anteeksi tautologia). Alla tarkastelemme tätä menetelmää hieman yksityiskohtaisemmin.
Yhteenvetona:
- API + cli sopii paremmin ihmisille, jotka ovat tottuneet Ciscoon;
- API + kuori skriptien soveltamiseen ja rutiinitehtävien suorittamiseen;
- REST API automaatiota varten.
Sovellusliittymän käyttöönotto
Oletusarvoisesti API on käytössä hallintapalvelimissa, joissa on yli 4 Gt RAM-muistia, ja erillisissä kokoonpanoissa, joissa on yli 8 Gt RAM-muistia. Voit tarkistaa tilan komennolla: api-tila
Jos käy ilmi, että api on poistettu käytöstä, se on melko helppoa ottaa käyttöön SmartConsolen kautta: Hallinta ja asetukset > Blades > Hallintasovellusliittymä > Lisäasetukset
Julkaise sitten (julkaista) muutokset ja suorita komento api uudelleenkäynnistys.
Verkkopyynnöt + Python
API-komentojen suorittamiseen voit käyttää verkkopyyntöjä käyttämällä Python ja kirjastot pyynnöt, json. Yleensä verkkopyynnön rakenne koostuu kolmesta osasta:
1) Osoite
(https://<managemenet server>:<port>/web_api/<command>)
2) HTTP-otsikot
content-Type: application/json
x-chkp-sid: <session ID token as returned by the login command>
3) Pyydä hyötykuormaa
JSON-muotoinen teksti, joka sisältää eri parametrit
Esimerkki erilaisten komentojen kutsumisesta:
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
Tässä on muutamia tyypillisiä tehtäviä, joita kohtaat useimmiten Check Pointin hallinnassa.
1) Esimerkki valtuutus- ja uloskirjautumistoiminnoista:
Käsikirjoitus
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) Terien käynnistäminen ja verkon määrittäminen:
Käsikirjoitus
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) Palomuurisääntöjen muuttaminen:
Käsikirjoitus
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) Sovelluskerroksen lisääminen:
Käsikirjoitus
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) Julkaise ja aseta käytäntö, tarkista komennon suoritus (task-id):
Käsikirjoitus
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) Lisää isäntä:
Käsikirjoitus
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) Lisää Uhkien ehkäisykenttä:
Käsikirjoitus
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) Näytä istuntojen luettelo
Käsikirjoitus
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) Luo uusi profiili:
Käsikirjoitus
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) Muuta IPS-allekirjoituksen toimintoa:
Käsikirjoitus
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) Lisää palvelusi:
Käsikirjoitus
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) Lisää luokka, sivusto tai ryhmä:
Käsikirjoitus
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))
Lisäksi avustuksella Web-sovellusliittymä voit lisätä ja poistaa verkkoja, isäntiä, käyttörooleja jne. Terät voidaan räätälöidä Virustorjunta, Antibot, IPS, VPN. On jopa mahdollista asentaa lisenssejä komennolla run-script. Kaikki Check Point API -komennot löytyvät täältä
Check Point API + Postman
Myös kätevä käyttää Check Point Web API kanssa
Tämän apuohjelman avulla voimme luoda Web-pyyntöjä Check Point API:lle. Jotta ei muistaisi kaikkia API-komentoja, on mahdollista tuoda niin sanottuja kokoelmia (malleja), jotka sisältävät jo kaikki tarvittavat komennot:
Mielestäni tämä on erittäin kätevää. Voit nopeasti aloittaa sovellusten kehittämisen Check Point API:n avulla.
Check Point + Ansible
Haluaisin myös huomauttaa, että on Ansible
johtopäätös
Tähän saamme luultavasti päättää lyhyen Check Point API -katsauksen. Mielestäni tämä ominaisuus oli erittäin odotettu ja tarpeellinen. API:n ilmestyminen avaa erittäin laajat mahdollisuudet sekä järjestelmänvalvojille että järjestelmäintegraattoreille, jotka työskentelevät Check Pointin tuotteiden parissa. Orkestrointi, automaatio, SIEM-palaute... kaikki on nyt mahdollista.
PS Lisää artikkeleita aiheesta
PSS Check Pointin määrittämiseen liittyvissä teknisissä kysymyksissä voit
Vain rekisteröityneet käyttäjät voivat osallistua kyselyyn.
Aiotteko käyttää API:ta?
-
70,6%Kyllä 12
-
23,5%Nro 4
-
5,9%Käytössä jo 1
17 käyttäjää äänesti. 3 käyttäjää pidättyi äänestämästä.
Lähde: will.com