Jestem pewien, że każdy, kto kiedykolwiek współpracował
Stosunkowo niedawno wydarzył się „cud”. Wraz z wydaniem nowej wersji Gaja R80 ogłoszono taką możliwość Użycie API, co otwiera szerokie możliwości automatyzacji ustawień, administracji, monitorowania itp. Teraz możesz:
- tworzyć obiekty;
- dodawać lub edytować listy dostępu;
- włącz/wyłącz ostrza;
- konfigurować interfejsy sieciowe;
- instaluj zasady;
- И многое другое.
Szczerze mówiąc, nie rozumiem, jak ta wiadomość przeszła przez Habr. W tym artykule krótko opiszemy jak korzystać z API i podamy kilka praktycznych przykładów. Ustawienia CheckPoint za pomocą skryptów.
Od razu zastrzegam, że API wykorzystywane jest wyłącznie dla serwera zarządzającego. Te. Zarządzanie bramami bez serwera zarządzającego jest w dalszym ciągu niemożliwe.
Kto w zasadzie może korzystać z tego API?
- Administratorzy systemów, którzy chcą uprościć lub zautomatyzować rutynowe zadania konfiguracyjne Check Point;
- Firmy chcące zintegrować Check Point z innymi rozwiązaniami (systemy wirtualizacji, systemy biletowe, systemy zarządzania konfiguracją itp.);
- Integratorów systemów, którzy chcą ujednolicić ustawienia lub stworzyć dodatkowe produkty związane z Check Point.
Typowy schemat
Wyobraźmy sobie więc typowy schemat z Check Point:
Jak zwykle mamy bramkę (SG), serwer zarządzania (SMS) i konsola administracyjna (Inteligentna konsola). W tym przypadku typowy proces konfiguracji bramy wygląda następująco:
Te. Najpierw musisz uruchomić na komputerze administratora Inteligentna konsola, za pomocą którego łączymy się z serwerem zarządzającym (SMS). Ustawienia zabezpieczeń są wprowadzane w wiadomości SMS i dopiero potem stosowane (zasady instalacji) do bramy (SG).
Podczas korzystania z Interfejs API zarządzania, możemy w zasadzie pominąć pierwszy punkt (uruchomić SmartConsole) i używać Polecenia API bezpośrednio do serwera zarządzającego (SMS).
Sposoby wykorzystania API
Istnieją cztery główne sposoby edycji konfiguracji za pomocą API:
1) Korzystanie z narzędzia mgmt_cli
Przykład - # mgmt_cli dodaj nazwę hosta Host1 adres IP 192.168.2.100
To polecenie jest uruchamiane z wiersza poleceń serwera zarządzania (SMS). Myślę, że składnia polecenia jest jasna - host1 jest tworzony z adresem 192.168.2.100.
2) Wprowadź polecenia API poprzez kliknięcie (w trybie eksperckim)
Zasadniczo wszystko, co musisz zrobić, to zalogować się do wiersza poleceń (mgmt zaloguj się) pod kontem używanym podczas łączenia się za pośrednictwem SmartConsole (lub konta root). Następnie możesz wejść Polecenia API (w tym przypadku nie ma potrzeby używania narzędzia przed każdym poleceniem mgmt_cli). Możesz tworzyć pełnoprawne Skrypty BASH. Przykład skryptu, który tworzy host:
Skrypt Basha
#!/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 jesteś zainteresowany, możesz obejrzeć odpowiedni film:
3) Za pomocą SmartConsole otwierając okno CLI
Wszystko, co musisz zrobić, to otworzyć okno CLI prosto z Inteligentna konsola, jak pokazano na poniższym obrazku.
W tym oknie możesz od razu przystąpić do wprowadzania poleceń API.
4) Usługi sieciowe. Użyj żądania HTTPS Post (REST API)
Naszym zdaniem jest to jedna z najbardziej obiecujących metod, ponieważ pozwala „budować” całe aplikacje w oparciu o zarządzanie serwerem zarządzającym (przepraszam za tautologię). Poniżej przyjrzymy się tej metodzie nieco bardziej szczegółowo.
Podsumowując:
- API + klik bardziej odpowiedni dla osób przyzwyczajonych do Cisco;
- API + powłoka do stosowania skryptów i wykonywania rutynowych zadań;
- REST API dla automatyzacji.
Włączenie interfejsu API
Domyślnie interfejs API jest włączony na serwerach zarządzania z więcej niż 4 GB pamięci RAM i konfiguracjach autonomicznych z więcej niż 8 GB pamięci RAM. Status możesz sprawdzić za pomocą polecenia: stan interfejsu API
Jeśli okaże się, że api jest wyłączone, włączenie go za pomocą SmartConsole jest dość łatwe: Zarządzaj i ustawienia > Kasety > Interfejs API zarządzania > Ustawienia zaawansowane
Następnie opublikuj (Publikować) zmiany i uruchom polecenie ponowne uruchomienie interfejsu API.
Żądania internetowe + Python
Aby wykonać polecenia API, możesz użyć żądań sieciowych za pomocą Python i biblioteki wywołań, json. Ogólnie rzecz biorąc, struktura żądania internetowego składa się z trzech części:
1)Adres
(https://<managemenet server>:<port>/web_api/<command>)
2) Nagłówki HTTP
content-Type: application/json
x-chkp-sid: <session ID token as returned by the login command>
3) Poproś o ładunek
Tekst w formacie JSON zawierający różne parametry
Przykład 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' -> Ip address GAIA
Oto kilka typowych zadań, z którymi najczęściej spotykasz się podczas administrowania Check Pointem.
1) Przykład funkcji autoryzacji i wylogowania:
Scenariusz
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łączenie serwerów blade i konfiguracja sieci:
Scenariusz
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:
Scenariusz
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:
Scenariusz
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) Opublikuj i ustaw politykę, sprawdź wykonanie polecenia (identyfikator zadania):
Scenariusz
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) Dodaj hosta:
Scenariusz
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) Dodaj pole Zapobieganie zagrożeniom:
Scenariusz
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
Scenariusz
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:
Scenariusz
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) Zmień akcję dla podpisu IPS:
Scenariusz
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) Dodaj swoją usługę:
Scenariusz
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ę, witrynę lub grupę:
Scenariusz
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))
W dodatku z pomocą Internetowy interfejs API możesz dodawać i usuwać sieci, hosty, role dostępu itp. Ostrza można dostosować Antywirus, Antibot, IPS, VPN. Można nawet zainstalować licencje za pomocą polecenia uruchom-skrypt. Wszystkie polecenia API Check Point można znaleźć tutaj
Check Point API + Listonosz
Również wygodny w użyciu Sprawdź internetowy interfejs API punktu w połączeniu z
Za pomocą tego narzędzia będziemy mogli generować żądania internetowe do API Check Point. Aby nie pamiętać wszystkich poleceń API, można zaimportować tzw. kolekcje (szablony), które zawierają już wszystkie niezbędne polecenia:
Moim zdaniem jest to bardzo wygodne. Możesz szybko rozpocząć tworzenie aplikacji, korzystając z API Check Point.
Punkt kontrolny + Ansible
Pragnę również zauważyć, że istnieje Wiarygodne
Wniosek
Na tym prawdopodobnie zakończymy naszą krótką recenzję API Check Point. Moim zdaniem ta funkcja była bardzo długo oczekiwana i potrzebna. Pojawienie się API otwiera bardzo szerokie możliwości zarówno dla administratorów systemów, jak i integratorów systemów pracujących z produktami firmy Check Point. Orkiestracja, automatyzacja, informacje zwrotne SIEM… to wszystko jest teraz możliwe.
PS Więcej artykułów na temat
PSS W przypadku pytań technicznych związanych z konfiguracją Check Point, możesz
W ankiecie mogą brać udział tylko zarejestrowani użytkownicy.
Czy planujesz korzystać z API?
-
70,6%Tak12
-
23,5%Nie4
-
5,9%Już korzystam z 1
Głosowało 17 użytkowników. 3 użytkowników wstrzymało się od głosu.
Źródło: www.habr.com