Check Point R80.10 API. Zarządzanie przez CLI, skrypty i nie tylko

Check Point R80.10 API. Zarządzanie przez CLI, skrypty i nie tylko

Jestem pewien, że każdy, kto kiedykolwiek pracował z Check Point, 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?

  1. Administratorzy systemów, którzy chcą uprościć lub zautomatyzować rutynowe zadania związane z konfiguracją Check Point;
  2. Firmy, które chcą zintegrować Check Point z innymi rozwiązaniami (systemy wirtualizacji, systemy zgłoszeniowe, systemy zarządzania konfiguracjami itd.);
  3. 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:

Check Point R80.10 API. Zarządzanie przez CLI, skrypty i nie tylko

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:

Check Point R80.10 API. Zarządzanie przez CLI, skrypty i nie tylko

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:

Odtwarzaj wideo

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.

Check Point R80.10 API. Zarządzanie przez CLI, skrypty i nie tylko

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:

  1. API + cli lepiej nadaje się dla osób przyzwyczajonych do Cisco;
  2. API + shell do użycia skryptów i wykonywania rutynowych zadań;
  3. 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

Check Point R80.10 API. Zarządzanie przez CLI, skrypty i nie tylko

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ć tutaj.

Check Point API + Postman

Warto również użyć Check Point Web API w połączeniu z Postman. 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ć:

Check Point R80.10 API. Zarządzanie przez CLI, skrypty i nie tylko

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:

Check Point R80.10 API. Zarządzanie przez CLI, skrypty i nie tylko

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

Check Point R80.10 API. Zarządzanie przez CLI, skrypty i nie tylko

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 moduł 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 Check Point możesz jak zwykle znaleźć w naszym blogu Hub lub w blogu na stronie.

P.S.S. Można zadawać pytania techniczne związane z konfiguracją Check Point tutaj

Tylko zarejestrowani użytkownicy mogą brać udział w ankiecie. Zaloguj się, 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

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster