
Jeg er sikker på, at alle, der nogensinde har arbejdet med , har haft en klage over den manglende mulighed for at redigere konfigurationen fra kommandolinjen. Dette er især frustrerende for dem, der tidligere har arbejdet med Cisco ASA, hvor alt kan konfigureres i CLI. Hos Check Point er det modsatte tilfældet — alle sikkerhedsindstillinger blev kun foretaget gennem det grafiske brugergrænseflade. Men visse opgaver er ganske ubehagelige at udføre via GUI (selv en så brugervenlig som Check Points). For eksempel bliver opgaven med at tilføje 100 nye værter eller netværk til en lang og trættende procedure. For hver genstand skal man klikke flere gange og indtaste IP-adressen. Det samme gælder oprettelse af webstedsgrupper eller masseaktivering/deaktivering af IPS-signaturer. Samtidig er der en høj risiko for at lave fejl.
Relativt for nylig skete der et "mirakel". Med udgivelsen af den nye version Gaia R80 blev muligheden for at bruge API, hvilket åbner op for store muligheder for automatisering af indstillinger, administration, overvågning osv. Nu kan du:
- oprette objekter;
- tilføje eller redigere access-lister;
- aktivere/deaktivere blades;
- konfigurere netværksgrænseflader;
- installere politikker;
- og meget mere.
Ærligt talt forstår jeg ikke, hvordan denne nyhed gik hen over Habr. I denne artikel vil vi kort beskrive, hvordan man bruger API'et og give nogle praktiske eksempler på CheckPoint-konfiguration ved hjælp af scripts..
Jeg vil straks præcisere, at API'et kun bruges til Management-serveren. Det vil sige, at man stadig ikke kan administrere gateways uden Management-serveren.
Hvem kan principielt have gavn af dette API?
- Systemadministratorer, der ønsker at forenkle eller automatisere rutineopgaver i forbindelse med konfiguration af Check Point;
- Virksomheder, der ønsker at integrere Check Point med andre løsninger (virtualiseringssystemer, ticket-systemer, konfigurationsstyringssystemer osv.);
- Systemintegratorer, der ønsker at standardisere indstillinger eller oprette yderligere produkter, der relaterer til Check Point.
Typisk skema
Lad os forestille os et typisk skema med Check Point:

Som sædvanligt har vi en gateway (SG), en managementserver (SMS) og en administrationskonsol (SmartConsole). I dette tilfælde ser den almindelige proces for konfiguration af gatewayen sådan ud:

Det vil sige, at man først skal starte SmartConsole, ved hjælp af hvilken vi opretter forbindelse til Management-serveren (SMS). På SMS udføres sikkerhedsindstillingerne, og derefter anvendes (install policy) på gatewayen (SG).
Ved brug af Management API, kan vi i princippet springe det første punkt over (start SmartConsole) og anvende API-kommandoer direkte til Management-serveren (SMS).
Metoder til brug af API
Der er fire hovedmetoder til at redigere konfigurationen ved hjælp af API:
1) Ved hjælp af værktøjet mgmt_cli
Eksempel — # mgmt_cli add host name host1 ip-address 192.168.2.100
Denne kommando køres fra kommandolinjen på Management-serveren (SMS). Jeg tror, at kommandoens syntaks er forståelig — der oprettes host1 med adressen 192.168.2.100.
2) Indtaste API-kommandoer via clish (i eksperttilstand)
I bund og grund er alt, hvad du skal gøre, at logge ind i kommandolinjen (mgmt login) med den konto, der bruges til at oprette forbindelse via SmartConsole (eller root-kontoen). Derefter kan du indtaste API-kommandoer (i dette tilfælde er det ikke nødvendigt at bruge værktøjet før hver kommando mgmt_cli). Du kan oprette komplette BASH-scripts. Eksempel på et script, der opretter en vært:
Bash-script
#!/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 du er interesseret, kan du se den relevante video:

3) Gennem SmartConsole, ved at åbne CLI-vinduet
Det eneste, du skal gøre, er at åbne vinduet flagen -k til integration med direkte fra SmartConsole, som vist på billedet nedenfor.

I dette vindue kan du straks begynde at indtaste API-kommandoer.
4) Web Services. Brug HTTPS Post-anmodning (REST API)
Efter vores mening er dette en af de mest lovende metoder, da det gør det muligt at "bygge" hele applikationer til styring af management-serveren (jeg undskylder for tautologien). Nedenfor vil vi se nærmere på denne metode.
For at opsummere:
- API + cli er mere velegnet til personer, der er vant til Cisco;
- API + shell til anvendelse af scripts og udførelse af rutineopgaver;
- REST API til automatisering.
Aktivering af API
Som standard er API aktiveret på management-servere med mere end 4 GB RAM og standalone-konfigurationer med mere end 8 GB RAM. Status kan kontrolleres med kommandoen: api status
Hvis det viser sig, at API'en er deaktiveret, kan den ganske enkelt aktiveres via SmartConsole: Manage & Settings > Blades > Management API > Advanced Settings

Derefter publiceres (Publish) ændringerne, og kommandoen api restart.
Web-anmodninger + Python
For at udføre API-kommandoer kan du bruge web-anmodninger ved hjælp af Python og biblioteker requests, json. I almindelig form består strukturen af web-anmodningen af tre dele:
1) Adresse
(https://<management server>:<port>/web_api/<command>)
2) HTTP Headers
content-Type: application/json
x-chkp-sid: <session ID token as returned by the login command>
3) Request payload
JSON-formattekst indeholdende de forskellige parametre
Eksempel til kald af forskellige 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
Lad os gennemgå nogle typiske opgaver, som man ofte står over for, når man administrerer Check Point.
1) Eksempel på funktioner til login og logout:
Script
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) Aktivering af blades og netværkskonfiguration:
Script
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) Ændring af firewall-regler:
Script
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) Tilføjelse af applikationslag:
Script
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) Publicering og installation af politik, kontrol af kommandoudførelsen (task-id):
Script
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) Tilføj host:
Script
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) Tilføj Threat Prevention-lag:
Script
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) Se listen over sessioner
Script
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) Opret en ny profil:
Script
add_threat_profile={'name':'Apeiron', "active-protections-performance-impact" : "lav","active-protections-severity" : "lav eller højere","confidence-level-medium" : "forhindring",
"confidence-level-high" : "forhindring", "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øj eller lavere"},
"overrides" : [ {"protection" : "3Com Network Supervisor Directory Traversal","capture-packets" : True,"action" : "Forhindring","track" : "Log"},
{"protection" : "7-Zip ARJ Archive Handling Buffer Overflow", "capture-packets" : True,"action" : "Forhindring","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) Ændre handling for IPS signatur:
Script
set_threat_protection={
"name" : "3Com Network Supervisor Directory Traversal",
"overrides" : [{ "profile" : "Apeiron","action" : "Registrer","track" : "Log","capture-packets" : True},
{ "profile" : "Apeiron", "action" : "Registrer", "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) Tilføj din egen tjeneste:
Script
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) Tilføj kategori, websted eller gruppe:
Script
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))
Derudover, ved hjælp af Web API du kan tilføje og fjerne netværk, værter, adgangsroller osv. Der er mulighed for at konfigurere blades Antivirus, Antibot, IPS, VPN. Det er også muligt at installere licenser ved hjælp af kommandoen run-script. Alle API-kommandoer fra Check Point kan ses .
Check Point API + Postman
Det er også praktisk at bruge Check Point Web API i samarbejde med . Postman har desktopversioner til Windows, Linux og MacOS. Derudover findes der et plugin til Google Chrome. Det vil vi benytte. For at starte, skal du finde Postman i Google Chrome Store og installere:

Med dette værktøj kan vi danne Web-anmodninger til Check Point API. For at undgå at huske alle API-kommandoer, er der mulighed for at importere såkaldte collections (skabeloner), som allerede indeholder alle nødvendige kommandoer:

finder du collection for R80.10. Efter importen bliver API-kommando skabeloner tilgængelige for os:

Efter min mening er dette meget praktisk. Man kan hurtigt begynde at udvikle applikationer ved brug af Check Point API.
Check Point + Ansible
Jeg vil også gerne bemærke, at der findes Ansible til CheckPoint API. Modulet gør det muligt at administrere konfigurationer, men det er ikke så praktisk til løsning af eksotiske opgaver. At skrive scripts i ethvert programmeringssprog giver mere fleksible og praktiske løsninger.
Output
Her afslutter vi vores lille gennemgang af Check Point API. Efter min mening har denne funktion været længe ventet og nødvendig. Fremkomsten af API åbner meget brede muligheder både for systemadministratorer og systemintegratorer, der arbejder med Check Point produkter. Orkestrering, automatisering, feedback til SIEM... alt dette er nu muligt.
P.S. Flere artikler om kan du altid finde i vores blog eller i bloggen på .
P.S.S. Teknisk spørgsmål vedrørende konfigurationen af Check Point kan stilles
Kun registrerede brugere kan deltage i undersøgelsen. , please.
Planlægger du at bruge API?
70,6%Ja12
23,5%Nej4
5,9%Bruger det allerede1
17 brugere har stemt. 3 brugere har undgået.
Kilde: habr.com
