Sprawdź API punktu R80.10. Zarządzanie poprzez CLI, skrypty i nie tylko

Sprawdź API punktu R80.10. Zarządzanie poprzez CLI, skrypty i nie tylko

Jestem pewien, że każdy, kto kiedykolwiek współpracował Check Point, była skarga dotycząca brak możliwości edycji konfiguracji z linii poleceń. Jest to szczególnie dziwne dla tych, którzy wcześniej pracowali z Cisco ASA, gdzie absolutnie wszystko można skonfigurować w CLI. W przypadku Check Point jest odwrotnie – wszelkich ustawień zabezpieczeń dokonano wyłącznie z poziomu interfejsu graficznego. Jednak niektóre rzeczy są całkowicie niewygodne do wykonania za pośrednictwem GUI (nawet tak wygodnego jak Check Point). Na przykład zadanie dodania 100 nowych hostów lub sieci staje się długą i żmudną procedurą. Dla każdego obiektu będziesz musiał kilka razy kliknąć myszką i wprowadzić adres IP. To samo dotyczy tworzenia grupy witryn lub masowego włączania/wyłączania podpisów IPS. W takim przypadku istnieje duże prawdopodobieństwo popełnienia błędu.

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?

  1. Administratorzy systemów, którzy chcą uprościć lub zautomatyzować rutynowe zadania konfiguracyjne Check Point;
  2. Firmy chcące zintegrować Check Point z innymi rozwiązaniami (systemy wirtualizacji, systemy biletowe, systemy zarządzania konfiguracją itp.);
  3. 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:

Sprawdź API punktu R80.10. Zarządzanie poprzez CLI, skrypty i nie tylko

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:

Sprawdź API punktu R80.10. Zarządzanie poprzez CLI, skrypty i nie tylko

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.

Sprawdź API punktu R80.10. Zarządzanie poprzez CLI, skrypty i nie tylko

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:

  1. API + klik bardziej odpowiedni dla osób przyzwyczajonych do Cisco;
  2. API + powłoka do stosowania skryptów i wykonywania rutynowych zadań;
  3. 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

Sprawdź API punktu R80.10. Zarządzanie poprzez CLI, skrypty i nie tylko

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

Check Point API + Listonosz

Również wygodny w użyciu Sprawdź internetowy interfejs API punktu w połączeniu z Listonosz. Postman ma wersje komputerowe dla systemów Windows, Linux i MacOS. Ponadto dostępna jest wtyczka do przeglądarki Google Chrome. Tego właśnie użyjemy. Najpierw musisz znaleźć Postmana w sklepie Google Chrome i zainstalować:

Sprawdź API punktu R80.10. Zarządzanie poprzez CLI, skrypty i nie tylko

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:

Sprawdź API punktu R80.10. Zarządzanie poprzez CLI, skrypty i nie tylko

Tutaj znajdziesz kolekcja dla R80.10. Po zaimportowaniu udostępnione zostaną nam szablony poleceń API:

Sprawdź API punktu R80.10. Zarządzanie poprzez CLI, skrypty i nie tylko

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 moduł dla API CheckPoint. Moduł pozwala zarządzać konfiguracjami, ale nie jest już tak wygodny w rozwiązywaniu egzotycznych problemów. Pisanie skryptów w dowolnym języku programowania zapewnia bardziej elastyczne i wygodne rozwiązania.

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 Check Point jak zawsze znajdziecie je na naszym blogu Habr lub na blogu pod adresem witryna internetowa.

PSS W przypadku pytań technicznych związanych z konfiguracją Check Point, możesz tutaj

W ankiecie mogą brać udział tylko zarejestrowani użytkownicy. Zaloguj się, Proszę.

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

Dodaj komentarz