Estic segur que tots els que han treballat alguna vegada
Fa relativament poc va passar un "miracle". Amb el llançament de la nova versió Gaia R80 es va anunciar l'oportunitat Ús de l'API, que obre àmplies oportunitats per automatitzar la configuració, l'administració, el seguiment, etc. Ara pots:
- crear objectes;
- afegir o editar llistes d'accés;
- activar/desactivar les fulles;
- configurar interfícies de xarxa;
- instal·lar polítiques;
- i molt més.
Per ser sincer, no entenc com va passar aquesta notícia per Habr. En aquest article descriurem breument com utilitzar l'API i oferirem diversos exemples pràctics. Configuració de CheckPoint mitjançant scripts.
M'agradaria fer una reserva immediatament perquè l'API només s'utilitza per al servidor de gestió. Aquells. Encara és impossible gestionar passarel·les sense un servidor de gestió.
Qui pot utilitzar aquesta API en principi?
- Administradors del sistema que vulguin simplificar o automatitzar les tasques rutinàries de configuració de Check Point;
- Empreses que vulguin integrar Check Point amb altres solucions (sistemes de virtualització, sistemes de tickets, sistemes de gestió de configuració, etc.);
- Integradors de sistemes que volen estandarditzar la configuració o crear productes addicionals relacionats amb Check Point.
Esquema típic
Per tant, imaginem un esquema típic amb Check Point:
Com de costum tenim una porta d'entrada (SG), servidor de gestió (SMS) i la consola d'administració (SmartConsole). En aquest cas, el procés habitual de configuració de la passarel·la té aquest aspecte:
Aquells. Primer heu d'executar-lo a l'ordinador de l'administrador SmartConsole, amb el qual ens connectem al servidor de gestió (SMS). La configuració de seguretat es fa a l'SMS i només després s'aplica (política d'instal·lació) a la passarel·la (SG).
Quan s'utilitza el API de gestió, bàsicament podem saltar el primer punt (llançar SmartConsole) i utilitzar-lo Ordres de l'API directament al servidor de gestió (SMS).
Maneres d'utilitzar l'API
Hi ha quatre maneres principals d'editar la configuració mitjançant l'API:
1) Utilitzant la utilitat mgmt_cli
Exemple - # mgmt_cli afegeix el nom d'amfitrió host1 adreça-ip 192.168.2.100
Aquesta ordre s'executa des de la línia d'ordres del servidor de gestió (SMS). Crec que la sintaxi de l'ordre és clara: host1 es crea amb l'adreça 192.168.2.100.
2) Introduïu les ordres de l'API mitjançant clish (en mode expert)
Bàsicament, tot el que heu de fer és iniciar sessió a la línia d'ordres (inici de sessió de gestió) sota el compte que s'utilitza quan es connecta mitjançant SmartConsole (o compte root). Després pots entrar Ordres de l'API (en aquest cas no cal fer servir la utilitat abans de cada comanda mgmt_cli). Podeu crear de ple dret Scripts BASH. Un exemple d'un script que crea l'amfitrió:
Guió 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
Si esteu interessats, podeu veure el vídeo corresponent:
3) Mitjançant SmartConsole obrint la finestra CLI
Tot el que has de fer és obrir la finestra CLI directament de SmartConsole, tal com es mostra a la imatge següent.
En aquesta finestra, podeu començar immediatament a introduir ordres de l'API.
4) Serveis web. Utilitza la sol·licitud de publicació HTTPS (API REST)
Al nostre parer, aquest és un dels mètodes més prometedors, perquè us permet "crear" aplicacions senceres basades en gestió del servidor de gestió (perdó per la tautologia). A continuació veurem aquest mètode amb una mica més de detall.
Resumir:
- API + cli més adequat per a persones acostumades a Cisco;
- API + shell per aplicar scripts i realitzar tasques rutinàries;
- REST API per a l'automatització.
Habilitació de l'API
Per defecte, l'API està habilitada en servidors de gestió amb més de 4 GB de RAM i configuracions autònomes amb més de 8 GB de RAM. Podeu comprovar l'estat mitjançant l'ordre: estat de l'API
Si resulta que l'API està desactivada, és bastant fàcil habilitar-la mitjançant SmartConsole: Gestiona i configuració > Blades > API de gestió > Configuració avançada
Després publica (Publicar) canvia i executeu l'ordre reinici de l'API.
Sol·licituds web + Python
Per executar ordres de l'API, podeu utilitzar sol·licituds web Pitó i biblioteques peticions, json. En general, l'estructura d'una sol·licitud web consta de tres parts:
1) Adreça
(https://<managemenet server>:<port>/web_api/<command>)
2) Capçaleres HTTP
content-Type: application/json
x-chkp-sid: <session ID token as returned by the login command>
3) Sol·licitar càrrega útil
Text en format JSON que conté els diferents paràmetres
Exemple per cridar diverses ordres:
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
Aquestes són algunes de les tasques típiques amb les que us trobeu més sovint quan administreu Check Point.
1) Exemple de funcions d'autorització i tancament de sessió:
Guió
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) Encendre les fulles i configurar la xarxa:
Guió
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) Canviar les regles del tallafoc:
Guió
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) Afegeix una capa d'aplicació:
Guió
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) Publiqueu i configureu la política, comproveu l'execució de l'ordre (ID de tasca):
Guió
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) Afegeix amfitrió:
Guió
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) Afegiu un camp de prevenció d'amenaces:
Guió
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) Veure la llista de sessions
Guió
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) Creeu un perfil nou:
Guió
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) Canvieu l'acció per a la signatura IPS:
Guió
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) Afegiu el vostre servei:
Guió
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) Afegeix una categoria, lloc o grup:
Guió
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))
A més, amb l'ajuda API web podeu afegir i eliminar xarxes, amfitrions, rols d'accés, etc. Les fulles es poden personalitzar Antivirus, Antibot, IPS, VPN. Fins i tot és possible instal·lar llicències mitjançant l'ordre run-script. Totes les ordres de l'API de Check Point es poden trobar aquí
Check Point API + Carter
També còmode d'utilitzar API web de Check Point en conjunció amb
Mitjançant aquesta utilitat, podrem generar sol·licituds web a l'API Check Point. Per no recordar totes les ordres de l'API, és possible importar les anomenades col·leccions (plantilles), que ja contenen totes les ordres necessàries:
Al meu entendre, això és molt convenient. Podeu començar ràpidament a desenvolupar aplicacions mitjançant l'API Check Point.
Check Point + Ansible
També m'agradaria assenyalar que n'hi ha Ansible
Sortida
Aquí és on probablement acabarem la nostra breu revisió de l'API Check Point. Al meu entendre, aquesta funció era molt esperada i necessària. L'aparició de l'API obre oportunitats molt àmplies tant per als administradors de sistemes com per als integradors de sistemes que treballen amb productes Check Point. Orquestració, automatització, feedback SIEM... tot és possible ara.
PS Més articles sobre
PSS Per a preguntes tècniques relacionades amb la configuració de Check Point, podeu fer-ho
Només els usuaris registrats poden participar en l'enquesta.
Teniu previst utilitzar l'API?
-
70,6%Sí 12
-
23,5%No4
-
5,9%Ja s'està fent servir 1
Han votat 17 usuaris. 3 usuaris es van abstenir.
Font: www.habr.com