Mi certas, ke ĉiuj kun kiuj iam laboris
"Miraklo" okazis relative lastatempe. Kun la ĵeto de la nova versio Gaia R80 la okazo estis anoncita использования API, kiu malfermas larĝajn ŝancojn por aŭtomatigi agordojn, administradon, monitoradon, ktp. Nun vi povas:
- krei objektojn;
- aldoni aŭ redakti alirlistojn;
- ebligi/malŝalti klingojn;
- agordi retajn interfacojn;
- instali politikojn;
- kaj multe pli.
Если честно, не понимаю как эта новость прошла мимо Хабра. В данной статье мы вкратце опишем как пользоваться API и приведем несколько практических примеров CheckPoint-agordoj uzante skriptojn.
Сразу хотел бы оговориться, API используется только для Management сервера. Т.е. управлять шлюзами без Management сервера по прежнему невозможно.
Kiu povas uzi ĉi tiun API principe?
- Sistemadministrantoj kiuj volas simpligi aŭ aŭtomatigi rutinajn agordajn taskojn de Check Point;
- Firmaoj kiuj volas integri Check Point kun aliaj solvoj (virtualigaj sistemoj, biletaj sistemoj, agordaj administradsistemoj ktp.);
- Sistemintegrantoj, kiuj volas normigi agordojn aŭ krei kromajn produktojn rilatajn al Check Point.
Tipa skemo
И так, представим типовую схему с Check Point:
Kiel kutime ni havas enirejon (SG), administradservilo (SMS) kaj administra konzolo (SmartConsole). En ĉi tiu kazo, la kutima pordeja agorda procezo aspektas jene:
Tiuj. Unue vi devas funkcii per la komputilo de la administranto SmartConsole, с помощью которой мы подключаемся к Management-серверу (SMS). Sekurecaj agordoj estas faritaj sur la SMS, kaj nur tiam aplikataj (instali politikon) на шлюз (SG).
Kiam vi uzas Administrado API, ni povas esence salti la unuan punkton (lanĉi SmartConsole) kaj uzi API-komandoj rekte al la Administra servilo (SMS).
Способы использования API
Для правки конфигурации с помощью API есть четыре основных способа:
1) Uzante la ilon mgmt_cli
Ekzemplo - # mgmt_cli aldoni gastigan nomon host1 ip-adreso 192.168.2.100
Ĉi tiu komando estas rulita de la komandlinio de Administra Servilo (SMS). Mi pensas, ke la sintakso de la komando estas klara - host1 estas kreita kun la adreso 192.168.2.100.
2) Вводить API команды через clish (в режиме expert)
Esence, ĉio, kion vi devas fari, estas ensaluti al la komandlinio (mgmt ensaluto) sub la konto, kiu estas uzata dum konekto per SmartConsole (aŭ radika konto). Tiam vi povas eniri API-komandoj (en ĉi tiu kazo ne necesas uzi la ilon antaŭ ĉiu komando mgmt_cli). Vi povas krei plenrajtan BASH-skriptoj. Ekzemplo de skripto, kiun la gastiganto kreas:
Bash-skripto
#!/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
Se vi interesiĝas, vi povas spekti la respondan videon:
3) Per SmartConsole malfermante la CLI-fenestron
Ĉio, kion vi devas fari, estas malfermi la fenestron CLI rekte de SmartConsole, kiel montrite en la suba bildo.
В этом окне можно сразу начинать вводить API-команды.
4) Retaj Servoj. Uzu HTTPS-afiŝpeton (REST API)
Laŭ nia opinio, ĉi tiu estas unu el la plej promesplenaj metodoj, ĉar permesas vin "konstrui" tutajn aplikojn bazitajn sur administrado de servilo (pardonu pro la taŭtologio). Malsupre ni rigardos ĉi tiun metodon iom pli detale.
Por resumi:
- API + cli больше подходит для людей, кто привык к Cisco;
- API + shell por apliki skriptojn kaj plenumi rutinajn taskojn;
- REST-API por aŭtomatigo.
Ebligante la API
Defaŭlte, la API estas ebligita en administraj serviloj kun pli ol 4GB da RAM kaj memstaraj agordoj kun pli ol 8GB da RAM. Vi povas kontroli la staton per la komando: api statuso
Se rezultas, ke la api estas malŝaltita, tiam estas sufiĉe facile ebligi ĝin per SmartConsole: Administri & Agordoj > Klingoj > Administrado API > Altnivelaj Agordoj
Затем опубликовать (publikigas) ŝanĝas kaj rulu la komandon api rekomenci.
Retaj petoj + Python
Por ekzekuti API-komandojn, vi povas uzi Retajn petojn uzante python и библиотек petoj, json. Ĝenerale, la strukturo de retpeto konsistas el tri partoj:
1) Adreso
(https://<managemenet 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
Teksto en formato JSON enhavanta la malsamajn parametrojn
Ekzemplo por voki diversajn komandojn:
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
Приведем несколько типовых задач, с которыми чаще всего приходится сталкиваться при администрировании Check Point.
1) Ekzemplo de rajtigaj kaj elsalutfunkcioj:
Skripto
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) Enŝaltu la klingojn kaj agordi la reton:
Skripto
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) Ŝanĝi la regulojn pri fajroŝirmilo:
Skripto
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) Aldonante Aplikan tavolon:
Skripto
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) Eldonu kaj agordu la politikon, kontrolu la plenumon de la komando (task-id):
Skripto
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) Aldonu gastiganton:
Skripto
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) Aldonu kampon pri Minaco-Preventado:
Skripto
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) Rigardu la liston de sesioj
Skripto
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) Kreu novan profilon:
Skripto
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) Поменять действие для IPS сигнатуры:
Skripto
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) Добавить свой сервис:
Skripto
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) Добавить категорию, сайт или группу:
Skripto
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))
Krome, kun la helpo Reta API vi povas aldoni kaj forigi retojn, gastigantojn, aliri rolojn, ktp. Klingoj povas esti personecigitaj Antivirus, Antibot, IPS, VPN. Eblas eĉ instali permesilojn per la komando rul-skripto. Со всеми API-командами Check Point можно ознакомиться
Check Point API + Poŝtisto
Ankaŭ oportuna por uzi Check Point Web API lige kun
Uzante ĉi tiun ilon, ni povos generi Retajn petojn al la Check Point API. Por ne memori ĉiujn API-komandojn, eblas importi tiel nomatajn kolektojn (ŝablonojn), kiuj jam enhavas ĉiujn necesajn komandojn:
Laŭ mi, ĉi tio estas tre oportuna. Vi povas rapide komenci evoluigi aplikojn uzante la Check Point API.
Kontrolpunkto + Ansible
Mi ankaŭ ŝatus noti ke ekzistas Respondema
konkludo
На этом пожалуй мы закончим наш небольшой обзор Check Point API. На мой взгляд эта функция была очень долгожданной и необходимой. Появление API открывает очень широкие возможности как для системных администраторов, так и для системных интеграторов, которые работают с продуктами Check Point. Оркестрация, автоматизация, обратная связь с SIEM… все это теперь возможно.
P.S. Больше статей о
P.S.S. Задать технические вопросы, связанные с настройкой Check Point, можно
Nur registritaj uzantoj povas partopreni la enketon.
Ĉu vi planas uzi la API?
-
70,6%Jes12
-
23,5%No4
-
5,9%Jam uzas1
Voĉdonis 17 uzantoj. 3 uzantoj sindetenis.
fonto: www.habr.com