
Jestem pewien, że każdy, kto kiedykolwiek pracował z , miał problem z niemożnością edytacji konfiguracji z poziomu wiersza poleceń. To jest szczególnie frustrujące dla tych, którzy wcześniej pracowali z Cisco ASA, gdzie wszystko można skonfigurować w CLI. W Check Point jest odwrotnie — wszystkie ustawienia bezpieczeństwa były realizowane wyłącznie z poziomu interfejsu graficznego. Niemniej jednak, niektóre czynności są bardzo niewygodne do wykonania przez GUI (nawet tak wygodne jak w Check Point). Na przykład zadanie dodania 100 nowych hostów lub sieci staje się długą i nużącą procedurą. Dla każdego obiektu trzeba kilka razy klikać myszką i wpisywać adres IP. To samo dotyczy tworzenia grup witryn lub masowego włączania/wyłączania sygnatur IPS. Przy tym istnieje duże prawdopodobieństwo popełnienia błędu.
Niedawno zdarzyło się „cudo”. Z wydaniem nowej wersji Gaia R80 ogłoszono możliwość używania API, co otwiera szerokie możliwości automatyzacji ustawień, administracji, monitorowania itd. Teraz można:
- tworzyć obiekty;
- dodawać lub edytować listy dostępu;
- włączać/wyłączać blady;
- konfigurować interfejsy sieciowe;
- instalować polityki;
- i wiele więcej.
Szczerze mówiąc, nie rozumiem, jak ta wiadomość umknęła Habr. W tym artykule krótko opiszemy, jak korzystać z API i podamy kilka praktycznych przykładów konfiguracji CheckPoint za pomocą skryptów..
Od razu chciałbym zaznaczyć, że API może być używane tylko dla serwera zarządzania. Tzn. zarządzanie bramkami bez serwera zarządzania nadal jest niemożliwe.
Komu w ogóle może się przydać to API?
- Administratorzy systemów, którzy chcą uprościć lub zautomatyzować rutynowe zadania związane z konfiguracją Check Point;
- Firmy, które chcą zintegrować Check Point z innymi rozwiązaniami (systemy wirtualizacji, systemy zgłoszeniowe, systemy zarządzania konfiguracjami itd.);
- Integratory systemów, które chcą standaryzować ustawienia lub tworzyć dodatkowe produkty związane z Check Pointem.
Standardowy schemat
I tak, przedstawmy standardowy schemat z Check Point:

Jak zwykle mamy bramkę (SG), serwer zarządzania (SMS) i konsolę administratora (SmartConsole). Proces konfiguracji bramki wygląda zazwyczaj w następujący sposób:

Tzn. najpierw trzeba uruchomić na komputerze administratora SmartConsole, za pomocą którego łączymy się z serwerem zarządzania (SMS). Na SMS ustawiane są zabezpieczenia, a następnie stosowane są (polityka instalacji) na bramie (SG).
Podczas korzystania z Management API, w zasadzie możemy pominąć pierwszy krok (uruchomienie SmartConsole) i zastosować komendy API bezpośrednio do serwera zarządzania (SMS).
Sposoby użycia API
Aby edytować konfigurację za pomocą API, istnieją cztery główne metody:
1) Za pomocą narzędzia mgmt_cli
Przykład — # mgmt_cli add host name host1 ip-address 192.168.2.100
Ta komenda jest uruchamiana z wiersza poleceń serwera zarządzania (SMS). Myślę, że składnia komendy jest jasna — tworzony jest host1 z adresem 192.168.2.100.
2) Wprowadzać komendy API przez clish (w trybie expert)
W zasadzie wystarczy zalogować się w wierszu poleceń (mgmt login) na konto, które jest używane przy logowaniu przez SmartConsole (lub konto root). Następnie możesz wprowadzać komendy API (w tym przypadku nie ma potrzeby używać przed każdą komendą narzędzia mgmt_cli). Możesz tworzyć pełnoprawne skrypty BASH.Przykład skryptu, który tworzy host:
skrypt 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
Jeśli chcesz, możesz obejrzeć odpowiedni film:

3) Przez SmartConsole, otwierając okno CLI
Wszystko, co musisz zrobić, to uruchomić okno CLI bezpośrednio z SmartConsole, jak pokazano na poniższym obrazku.

W tym oknie możesz od razu zacząć wprowadzać komendy API.
4) Usługi internetowe. Użyj żądania POST HTTPS (REST API)
Naszym zdaniem jest to jeden z najbardziej obiecujących sposobów, ponieważ pozwala na „budowanie” całych aplikacji do zarządzania serwerem zarządzania (przepraszam za tautologię). Poniżej przyjrzymy się tej metodzie nieco dokładniej.
Podsumowując:
- API + cli lepiej nadaje się dla osób przyzwyczajonych do Cisco;
- API + shell do użycia skryptów i wykonywania rutynowych zadań;
- REST API do automatyzacji.
Włączenie API
Domyślnie API jest włączone na serwerach zarządzania z RAM większym niż 4GB oraz w konfiguracjach standalone z RAM większym niż 8GB. Status można sprawdzić za pomocą komendy: api status
Jeśli okaże się, że API jest wyłączone, można je dość łatwo włączyć przez SmartConsole: Zarządzaj & Ustawienia > Blades > Management API > Ustawienia zaawansowane

Następnie opublikować (Publikacja) zmiany i wykonać komendę api restart.
Żądania internetowe + Python
Do wykonywania komend API można używać żądań HTTP z wykorzystaniem Python oraz bibliotek requests, json.W ogólnym ujęciu struktura żądania HTTP składa się z trzech części:
1) Adres
(https://:/web_api/)
2) Nagłówki HTTP
content-Type: application/json
x-chkp-sid:
3) Ładunek żądania
Tekst w formacie JSON zawierający różne parametry
Przykład do wywoływania różnych poleceń:
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' -> Adres IP GAIA
Podamy kilka typowych zadań, z którymi najczęściej spotykają się administratorzy Check Point.
1) Przykład funkcji logowania i wylogowania:
Skrypt
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) Włączanie blade'ów i konfiguracja sieci:
Skrypt
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) Zmiana reguł zapory sieciowej:
Skrypt
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) Dodanie warstwy aplikacji:
Skrypt
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) Publikacja i instalacja polityki, sprawdzanie wykonania polecenia (task-id):
Skrypt
publish_result = api_call('xxx.xxx.xxx.xxx', 443,"publish", {}, sid)
print("wynik publikacji: " + 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) Dodanie hosta:
Skrypt
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) Dodanie pola Threat Prevention:
Skrypt
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) Zobacz listę sesji
Skrypt
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) Utwórz nowy profil:
Skrypt
add_threat_profile={'name':'Apeiron', "active-protections-performance-impact" : "niski","active-protections-severity" : "niski lub wyższy","confidence-level-medium" : "zapobiegaj",
"confidence-level-high" : "zapobiegaj", "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" : "Wysoki lub niższy"},
"overrides" : [ {"protection" : "3Com Network Supervisor Directory Traversal","capture-packets" : True,"action" : "Zapobiegaj","track" : "Log"},
{"protection" : "7-Zip ARJ Archive Handling Buffer Overflow", "capture-packets" : True,"action" : "Zapobiegaj","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) Zmień działanie dla sygnatury IPS:
Skrypt
set_threat_protection={
"name" : "3Com Network Supervisor Directory Traversal",
"overrides" : [{ "profile" : "Apeiron","action" : "Wykryj","track" : "Log","capture-packets" : True},
{ "profile" : "Apeiron", "action" : "Wykryj", "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) Dodaj swój serwis:
Skrypt
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) Dodaj kategorię, stronę lub grupę:
Skrypt
add_application_site_category={ "name" : "Valve","description" : "Gry Valve"}
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.pl" ], "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" : "Gry","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))
Ponadto, za pomocą Web API możesz dodawać i usuwać sieci, hosty, role dostępu itd. Istnieje możliwość konfiguracji blade'ów Antywirus, Antybote, IPS, VPN. Możliwa jest nawet instalacja licencji za pomocą polecenia run-script. Ze wszystkimi komendami API Check Point można się zapoznać .
Check Point API + Postman
Warto również użyć Check Point Web API w połączeniu z . Postman ma wersje desktopowe dla systemów Windows, Linux i MacOS. Dodatkowo dostępny jest dodatek do Google Chrome. Z niego właśnie skorzystamy. Na początek należy znaleźć Postman w sklepie Google Chrome i zainstalować:

Dzięki temu narzędziu będziemy mogli tworzyć zapytania Web do API Check Point. Aby nie zapamiętywać wszystkich poleceń API, istnieje możliwość importowania tzw. kolekcji (szablonów), które już zawierają wszystkie niezbędne polecenia:

znajdziesz kolekcję do R80.10. Po imporcie będą dostępne szablony poleceń API:

Moim zdaniem to bardzo wygodne. Można szybko zacząć pracę nad aplikacjami z użyciem API Check Point.
Check Point + Ansible
Chciałbym również zauważyć, że istnieje Ansible dla API CheckPoint. Moduł pozwala zarządzać konfiguracjami, ale nie jest tak wygodny do rozwiązywania egzotycznych zadań. Pisanie skryptów w dowolnym języku programowania daje bardziej elastyczne i wygodne rozwiązania.
Wnioski
Na tym kończymy naszą krótką prezentację API Check Point. Moim zdaniem ta funkcja była bardzo oczekiwana i niezbędna. Pojawienie się API otwiera szerokie możliwości zarówno dla administratorów systemów, jak i integratorów systemów pracujących z produktami Check Point. Orkiestracja, automatyzacja, sprzężenie zwrotne z SIEM... to wszystko jest teraz możliwe.
P.S. Więcej artykułów o możesz jak zwykle znaleźć w naszym blogu lub w blogu na .
P.S.S. Można zadawać pytania techniczne związane z konfiguracją Check Point
Tylko zarejestrowani użytkownicy mogą brać udział w ankiecie. , proszę.
Czy planujesz używać API?
70,6%Tak12
23,5%Nie4
5,9%Już używam1
Zagłosowało 17 użytkowników. 3 użytkowników wstrzymało się.
Źródło: habr.com
