
Sunt sigur că toată lumea care a lucrat vreodată cu , a avut o plângere despre imposibilitatea de a modifica configurația din linia de comandă. Aceasta este cu atât mai ciudat pentru cei care au lucrat anterior cu Cisco ASA, unde absolut totul poate fi configurat în CLI. La Check Point, totul este invers — toate setările de securitate erau realizate exclusiv prin intermediul interfeței grafice. Cu toate acestea, unele lucruri sunt complet incomode de realizat prin GUI (chiar și așa de convenabil cum este cel de la Check Point). De exemplu, sarcina de a adăuga 100 de gazde sau rețele noi devine o procedură lungă și plictisitoare. Pentru fiecare obiect, va trebui să faci clic de mai multe ori și să introduci adresa IP. Același lucru este valabil și pentru crearea unui grup de site-uri sau activarea/dezactivarea în masă a semnăturilor IPS. În acest context, există un mare risc de a face o greșeală.
Relativ recent s-a întâmplat un "miracol". Cu lansarea noii versiuni Gaia R80 a fost anunțată posibilitatea utilizării API-ului, ceea ce deschide oportunități largi pentru automatizarea setărilor, administrare, monitorizare etc. Acum este posibil să:
- creezi obiecte;
- adaugi sau modifici listele de acces;
- activezi/dezactivezi blade-urile;
- configurezi interfețele de rețea;
- instalezi politici;
- și multe altele.
Sincer, nu înțeleg cum această veste a scăpat de sub atenția Habra. În acest articol, vom descrie pe scurt cum să utilizăm API-ul și vom oferi câteva exemple practice de configurare Check Point prin intermediul scripturilor.
Aș dori să specific imediat că API-ul este folosit doar pentru serverul de Management. Așadar, gestionarea gateway-urilor fără serverul de Management este în continuare imposibilă.
Cui îi poate fi de folos acest API?
- Administratorii de sistem care doresc să simplifice sau să automatizeze sarcinile de rutină pentru configurarea Check Point;
- Companiile care doresc să integreze Check Point cu alte soluții (sisteme de virtualizare, sisteme de ticketing, sisteme de gestionare a configurațiilor etc.);
- Integratorii de sistem care doresc să standardizeze configurațiile sau să creeze produse suplimentare legate de Check Point.
Schema tipică
Și așa, să ne imaginăm o schemă tipică cu Check Point:

Așa cum este de obicei, avem un gateway (SG), un server de management (SMS) și o consolă de administrator (SmartConsole). În acest context, procesul obișnuit de configurare a unui gateway arată astfel:

Deci, mai întâi este necesar să porniți SmartConsole, cu ajutorul căreia ne conectăm la serverul de management (SMS). Pe SMS se fac setările de securitate, iar apoi se aplică (politica de instalare) pe gateway (SG).
Când folosești Management API, practic putem să sărim peste primul punct (pornirea SmartConsole) și să aplicăm comenzile API direct la serverul de management (SMS).
Modalități de utilizare a API-ului
Pentru modificarea configurației folosind API există patru moduri principale:
1) Folosind utilitarul mgmt_cli
Exemplu — # mgmt_cli add host name host1 ip-address 192.168.2.100
Această comandă este lansată din linia de comandă a serverului de management (SMS). Cred că sintaxa comenzii este clară — se creează host1 cu adresa 192.168.2.100.
2) Introducerea comenzilor API prin clish (în modul expert)
Practic, tot ce trebuie să faceți este să vă autentificați în linia de comandă (mgmt login) cu un cont care este utilizat în conexiunea prin SmartConsole (sau contul root). Apoi, puteți introduce comenzile API (în acest caz nu este necesar să folosiți utilitarul mgmt_cli). Puteți crea scripturi complete BASH.Exemplu de script care creează un host:
script Bash
#!/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
Dacă sunteți interesat, puteți viziona videoclipul corespunzător:

3) Prin SmartConsole, deschizând fereastra CLI
Tot ce trebuie să faceți este să lansați fereastra CLI direct din SmartConsole, așa cum este arătat în imaginea de mai jos.

În această fereastră puteți începe imediat să introduceți comenzile API.
4) Servicii web. Utilizați cereri HTTPS Post (REST API)
Din punctul nostru de vedere, acesta este unul dintre cele mai promițătoare moduri, deoarece permite „construirea” de aplicații întregi pentru managementul serverului de management (îmi cer scuze pentru tautologie). Mai jos vom discuta acest metod mai în detaliu.
Dacă rezumăm:
- API + cli se potrivește mai bine pentru persoanele care sunt obișnuite cu Cisco;
- API + shell pentru aplicarea scripturilor și executarea sarcinilor de rutină;
- REST API pentru automatizare.
Activarea API-ului
În mod implicit, API-ul este activ pe serverele de management cu o memorie RAM mai mare de 4GB și configurațiile standalone cu RAM mai mare de 8GB. Puteți verifica starea folosind comanda: api status
Dacă se dovedește că API-ul este oprit, este destul de simplu să-l activați prin SmartConsole: Manage & Settings > Blades > Management API > Advanced Settings

Apoi publicați (Publicați) modificările și executați comanda api restart.
Cereri web + Python
Pentru a executa comenzile API puteți folosi cereri web cu aplicarea Python și bibliotecilor requests., jsonÎn general, structura unei cereri web constă din trei părți:
1) Adresa
(https://<serverul de management>:<port>/web_api/<comanda>)
2) Anteturile HTTP
content-Type: application/json
x-chkp-sid:
3) Încărcătura cererii
Text în format JSON care conține diferitele parametrii
Exemplu pentru apelarea diferitelor comenzi:
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' -> Adresa IP GAIA
Iată câteva sarcini tipice cu care ne confruntăm cel mai des în administrarea Check Point.
1) Exemplu de funcții de autentificare și de deconectare:
Script
payload = {'user': 'userul_tău', 'password' : 'parola_ta'}
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) Activarea blade-urilor și configurarea rețelei:
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) Modificarea regulilor firewall-ului:
Script
new_access_data = {'name':'Regula de curățare','layer':'Rețea','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) Adăugarea layer-ului de aplicație:
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) Publicarea și instalarea politicii, verificarea executării comenzii (task-id):
Script
publish_result = api_call('xxx.xxx.xxx.xxx', 443, 'publish', {}, sid)
print("rezultatul publicării: " + 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) Adăugarea unui gazd:
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) Adăugarea unui câmp pentru prevenirea amenințărilor:
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) Vizualizați lista sesiunilor
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) Creați un nou profil:
Script
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) Schimbați acțiunea pentru semnătura IPS:
Script
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) Adăugați serviciul dumneavoastră:
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) Adăugați o categorie, site sau grup:
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))
În plus, cu ajutorul Web API puteți adăuga și șterge rețele, gazde, roluri de acces etc. Există posibilitatea de a configura blade-uri Antivirus, Antibot, IPS, VPN. Este posibilă chiar și instalarea licențelor folosind comanda run-script. Toate comenzile API Check Point pot fi consultate .
Check Point API + Postman
De asemenea, este convenabil să folosiți Check Point Web API în combinație cu . Postman are versiuni desktop pentru Windows, Linux și MacOS. De asemenea, există un plugin pentru Google Chrome. O vom folosi. Mai întâi, trebuie să căutăm Postman în Google Chrome Store și să-l instalăm:

Cu ajutorul acestei utilități, vom putea forma cereri Web către API-ul Check Point. Pentru a nu memora toate comenzile API, există posibilitatea de a importa așa-numitele collection-uri (șabloane) care conțin deja toate comenzile necesare:

veți găsi collection pentru R80.10. După import, ne vor deveni disponibile șabloanele comenzilor API:

Din punctul meu de vedere, este foarte convenabil. Se poate începe destul de repede dezvoltarea aplicațiilor folosind API-ul Check Point.
Check Point + Ansible
De asemenea, aș dori să menționez că există Ansible pentru CheckPoint API. Modulul permite gestionarea configurațiilor, dar nu este atât de convenabil pentru soluționarea problemelor exotice. Scrierea de scripturi în orice limbaj de programare oferă soluții mai flexibile și convenabile.
Ieșire
Aici, cred că vom încheia mica noastră prezentare despre API-ul Check Point. Din punctul meu de vedere, această funcție a fost foarte așteptată și necesară. Apariția API-ului deschide oportunități foarte vaste atât pentru administratori de sistem, cât și pentru integratori de sistem care lucrează cu produsele Check Point. Orchestrarea, automatizarea, feedback-ul cu SIEM... toate acestea sunt acum posibile.
P.S. Mai multe articole despre puteți găsi ca întotdeauna pe blogul nostru sau pe blogul de pe .
P.S.S. Întrebările tehnice legate de configurarea Check Point pot fi adresate
Numai utilizatorii înregistrați pot participa la sondaj. , vă rugăm.
Plănuiți să utilizați API-ul?
70,6%Da12
23,5%Nu4
5,9%Deja folosesc1
Au votat 17 utilizatori. 3 utilizatori s-au abținut.
Sursa: habr.com
