
Jeg er sikker på at alle som noen gang har jobbet med , har hatt en klage angående den umulige konfigureringen fra kommandolinjen. Dette er spesielt merkelig for de som tidligere har jobbet med Cisco ASA, hvor absolutt alt kan konfigureres i CLI. Hos Check Point er det motsatt — all sikkerhetskonfigurasjon har tidligere blitt utført utelukkende fra det grafiske grensesnittet. Men noen oppgaver er helt ubehagelige å gjøre gjennom GUI (selv så brukervennlig som den til Check Point). For eksempel kan oppgaven med å legge til 100 nye verter eller nettverk bli en langdryg og kjedelig prosess. For hver objekt må man klikke flere ganger med musen og skrive inn IP-adressen. Det samme gjelder oppretting av nettstedgrupper eller masseaktivering/deaktivering av IPS-signaturer. I tillegg er det stor sannsynlighet for å gjøre feil.
For ikke lenge siden skjedde det et “mirakel”. Med lanseringen av den nye versjonen Gaia R80 ble muligheten annonsert for å bruke API, som åpner opp for mange muligheter for automatisering av innstillinger, administrasjon, overvåking osv. Nå kan man:
- opprette objekter;
- legge til eller endre access-lister;
- aktivere/deaktivere blader;
- konfigurere nettverksgrensesnitt;
- installere policyer;
- og mye mer.
For å være ærlig, forstår jeg ikke hvordan denne nyheten gikk forbi Habr. I denne artikkelen skal vi kort beskrive hvordan man bruker API og gi noen praktiske eksempler på konfigurasjon av CheckPoint med skript.
Jeg vil gjerne presisere at API-et kun brukes for Management-serveren. Det vil si at det fortsatt er umulig å administrere gateways uten en Management-server.
Hvem kan egentlig ha nytte av dette API-et?
- Systemadministratorer som ønsker å forenkle eller automatisere rutineoppgaver for konfigurasjon av Check Point;
- Selskaper som ønsker å integrere Check Point med andre løsninger (virtualiseringssystemer, ticket-systemer, konfigurasjonsstyringssystemer osv.);
- Systemintegratorer som ønsker å standardisere innstillinger eller lage ekstra produkter relatert til Check Point.
Typisk diagram
Så, la oss forestille oss et typisk oppsett med Check Point:

Som vanlig har vi en gateway (SG), en administrasjonsserver (SMS) og administratorens konsoll (SmartConsole). Den vanlige prosessen for å konfigurere gatewayen ser slik ut:

Det vil si at administratoren først må starte opp SmartConsole, ved hjelp av hvilken vi kobler til Management-serveren (SMS). På SMS utføres sikkerhetsinnstillinger, og deretter brukes (install policy) på gateway (SG).
Når du bruker Management API, kan vi i utgangspunktet hoppe over første punkt (starte SmartConsole) og bruke API-kommandoer direkte mot Management-serveren (SMS).
Bruksområder for API
For å redigere konfigurasjonen ved hjelp av API finnes det fire hovedmetoder:
1) Gjennom verktøyet mgmt_cli
Eksempel — # mgmt_cli add host name host1 ip-address 192.168.2.100
Denne kommandoen kjøres fra kommandolinjen til Management-serveren (SMS). Jeg tror syntaksen til kommandoen er forståelig — en host1 blir opprettet med adresse 192.168.2.100.
2) Skrive API-kommandoer gjennom clish (i ekspertmodus)
I bunn og grunn trenger du bare å logge inn i kommandolinjen (mgmt login) med en konto som brukes ved tilkobling via SmartConsole (eller root-konto). Deretter kan du skrive API-kommandoer (i dette tilfellet er det ikke nødvendig å bruke verktøyet mgmt_cli). Du kan lage fullverdige BASH-skript.Eksempel på skriptet som oppretter en vert:
Bash-skript
#!/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
Hvis interessen er der, kan du se den relevante videoen:

3) Gjennom SmartConsole, ved å åpne CLI-vinduet
Alt du trenger å gjøre, er å starte vinduet I cli-runtime og kubectl rett fra SmartConsole, som vist på bildet nedenfor.

I dette vinduet kan du umiddelbart begynne å skrive inn API-kommandoer.
4) Webtjenester. Bruke HTTPS Post request (REST API)
Etter vår mening er dette en av de mest lovende metodene, da det lar deg "bygge" hele applikasjoner for administrasjonen av kontrollserveren (beklager for tautologien). Nedenfor vil vi se nærmere på denne metoden.
For å oppsummere:
- API + cli passer bedre for de som er vant til Cisco;
- API + shell for å bruke skript og utføre rutineoppgaver;
- REST API for automatisering.
Aktivering av API
Som standard er API aktivert på ledelsesservere med RAM over 4GB og standalone-konfigurasjoner med RAM over 8GB. Du kan sjekke statusen ved hjelp av kommandoen: api status
Hvis det viser seg at API er deaktivert, kan det enkelt aktiveres via SmartConsole: Manage & Settings > Blades > Management API > Advanced Settings

Deretter publiser (Publish) endringer og kjør kommandoen api restart.
Web forespørsel + Python
For å utføre API-kommandoer kan man bruke Web-forespørsel med Python og biblioteker requests, json. Generelt består strukturen til web-forespørselen av tre deler:
1)Adresse
(https://<managemenet server>:<port>/web_api/<command>)
2) HTTP-hoder
content-Type: application/json
x-chkp-sid: <session ID token as returned by the login command>
3) Forespørsel payload
Tekst i JSON-format som inneholder forskjellige parametere
Eksempel for å kalle ulike kommandoer:
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 adresse GAIA
La oss se på noen typiske oppgaver som man ofte møter på når man administrerer Check Point.
1) Eksempel på funksjoner for innlogging og utlogging:
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) Aktivere blader og konfigurere nettverket:
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) Endre regler for brannmuren:
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) Legge til applikasjonslaget:
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) Publisere og installere policy, sjekke utførelsen av kommandoen (task-id):
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) Legge til vert:
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) Legge til felt for Trusselbeskyttelse:
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) Vise listen over sesjoner
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) Opprett en ny profil:
Skript
add_threat_profile={'name':'Apeiron', "active-protections-performance-impact" : "low","active-protections-severity" : "lav eller høyere","confidence-level-medium" : "forhindre",
"confidence-level-high" : "forhindre", "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" : "Høy eller lavere"},
"overrides" : [ {"protection" : "3Com Network Supervisor Directory Traversal","capture-packets" : True,"action" : "Forhindre","track" : "Logg"},
{"protection" : "7-Zip ARJ Archive Handling Buffer Overflow", "capture-packets" : True,"action" : "Forhindre","track" : "Logg"} ]}
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) Endre handling for IPS-signatur:
Skript
set_threat_protection={
"name" : "3Com Network Supervisor Directory Traversal",
"overrides" : [{ "profile" : "Apeiron","action" : "Oppdage","track" : "Logg","capture-packets" : True},
{ "profile" : "Apeiron", "action" : "Oppdage", "track" : "Logg", "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) Legg til din egen tjeneste:
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) Legg til kategori, nettsted eller gruppe:
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" : "Spill","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))
I tillegg kan dere ved hjelp av Web API du kan legge til og fjerne nettverk, verter, tilgangsroller osv. Det er mulig å konfigurere blader Antivirus, Antibot, IPS, VPN. Det er til og med mulig å installere lisenser ved hjelp av kommandoen run-script. Alle API-kommandoer for Check Point kan ses .
Check Point API + Postman
Det er også praktisk å bruke Check Point Web API sammen med . Postman har skrivebordsversjoner for Windows, Linux og MacOS. I tillegg er det et tillegg for Google Chrome. Dette vil vi bruke. Først må vi finne Postman i Google Chrome Store og installere:

Med dette verktøyet kan vi lage Web-forespørsel mot API Check Point. For å unngå å huske alle API-kommandoene, finnes det muligheter for å importere såkalte collection-er (maler) som allerede inneholder alle nødvendige kommandoer:

finner du collection for R80.10. Etter importen vil vi ha tilgang til malene for API-kommandoene:

Etter min mening er dette veldig praktisk. Man kan raskt begynne med utviklingen av applikasjoner som bruker Check Point API.
Check Point + Ansible
Det er også verdt å merke seg at det finnes Ansible for CheckPoint API. Modulen lar deg administrere konfigurasjoner, men den er ikke så praktisk for å løse eksotiske oppgaver. Skriving av skript på hvilket som helst programmeringsspråk gir mer fleksible og praktiske løsninger.
Utdata
Vi avslutter kanskje vår lille gjennomgang av Check Point API her. Etter min mening har denne funksjonen vært svært etterlengtet og nødvendig. Fremveksten av API gir veldig brede muligheter både for systemadministratorer og systemintegratorer som arbeider med Check Point-produkter. Orkestrering, automatisering, tilbakemelding til SIEM... alt dette er nå mulig.
P.S. Fler artikler om finner du som alltid i vår blogg eller i bloggen på .
P.S.S. Du kan stille tekniske spørsmål relatert til oppsett av Check Point
Kun registrerte brukere kan delta i undersøkelsen. , vær så snill.
Planlegger du å bruke API?
70,6%Ja12
23,5%Nei4
5,9%Bruker det allerede1
17 brukere har stemt. 3 brukere avholdt.
Kilde: habr.com
