Check Point R80.10 API. Správa přes CLI, skripty a další

Check Point R80.10 API. Správa přes CLI, skripty a další

Jsem si jistý, že každý, s kým kdy spolupracoval Check Point, došlo ke stížnosti nemožnost editace konfigurace z příkazové řádky. To je zvláštní zejména pro ty, kteří dříve pracovali s Cisco ASA, kde lze v CLI nakonfigurovat naprosto vše. U Check Point je to naopak – všechna bezpečnostní nastavení byla prováděna výhradně z grafického rozhraní. Některé věci je však naprosto nepohodlné dělat přes GUI (dokonce tak pohodlné jako Check Point). Například úkol přidat 100 nových hostitelů nebo sítí se změní na dlouhou a únavnou proceduru. Pro každý objekt budete muset několikrát kliknout myší a zadat IP adresu. Totéž platí pro vytvoření skupiny webů nebo hromadné povolení/zakázání IPS signatur. V tomto případě je vysoká pravděpodobnost, že uděláte chybu.

Relativně nedávno se stal „zázrak“. S vydáním nové verze Gaia R80 příležitost byla oznámena Využití API, což otevírá široké možnosti pro automatizaci nastavení, administrace, sledování atp. Teď můžeš:

  • vytvářet předměty;
  • přidávat nebo upravovat přístupové seznamy;
  • povolit/zakázat čepele;
  • konfigurovat síťová rozhraní;
  • instalovat zásady;
  • a mnohem více.

Abych byl upřímný, nechápu, jak tato zpráva prošla kolem Habra. V tomto článku stručně popíšeme, jak API používat, a poskytneme několik praktických příkladů. Nastavení CheckPoint pomocí skriptů.

Rád bych si hned zarezervoval, že API se používá pouze pro Management server. Tito. Stále není možné spravovat brány bez Management serveru.

Kdo může toto API v zásadě používat?

  1. Správci systému, kteří chtějí zjednodušit nebo automatizovat rutinní konfigurační úlohy Check Point;
  2. Společnosti, které chtějí integrovat Check Point s dalšími řešeními (virtualizační systémy, tiketové systémy, systémy pro správu konfigurace atd.);
  3. Systémoví integrátoři, kteří chtějí standardizovat nastavení nebo vytvářet další produkty související s Check Point.

Typické schéma

Představme si tedy typické schéma s Check Point:

Check Point R80.10 API. Správa přes CLI, skripty a další

Jako obvykle máme bránu (SG), server pro správu (SMS) a administrátorská konzole (chytrá konzole). V tomto případě obvyklý proces konfigurace brány vypadá takto:

Check Point R80.10 API. Správa přes CLI, skripty a další

Tito. Nejprve je třeba spustit na počítači správce chytrá konzole, se kterým se připojujeme k Management serveru (SMS). Nastavení zabezpečení se provedou na SMS a teprve poté se použijí (zásady instalace) do brány (SG).

Při použití Management API, můžeme v podstatě přeskočit první bod (spustit SmartConsole) a použít API příkazy přímo na Management server (SMS).

Způsoby použití API

Existují čtyři hlavní způsoby, jak upravit konfiguraci pomocí API:

1) Pomocí nástroje mgmt_cli

Příklad - # mgmt_cli přidat název hostitele IP-adresa hostitele1 192.168.2.100
Tento příkaz se spouští z příkazového řádku Management Server (SMS). Myslím, že syntaxe příkazu je jasná - hostitel1 je vytvořen s adresou 192.168.2.100.

2) Zadejte příkazy API přes clish (v expertním režimu)

V podstatě vše, co musíte udělat, je přihlásit se do příkazového řádku (mgmt přihlášení) pod účtem, který se používá při připojení přes SmartConsole (nebo root účet). Pak můžete vstoupit API příkazy (v tomto případě není nutné použít nástroj před každým příkazem mgmt_cli). Můžete tvořit plnohodnotně BASH skripty. Příklad skriptu, který hostitel vytvoří:

Bash skript

#!/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

Pokud máte zájem, můžete se podívat na příslušné video:

3) Prostřednictvím SmartConsole otevřením okna CLI

Vše, co musíte udělat, je otevřít okno CLI přímo z chytrá konzole, jak je znázorněno na obrázku níže.

Check Point R80.10 API. Správa přes CLI, skripty a další

V tomto okně můžete okamžitě začít zadávat API příkazy.

4) Webové služby. Použít požadavek HTTPS Post (REST API)

Podle našeho názoru je to jedna z nejslibnějších metod, protože umožňuje „vytvářet“ celé aplikace založené na správa serveru pro správu (omlouvám se za tautologii). Níže se na tuto metodu podíváme trochu podrobněji.

Shrnout:

  1. API + cli vhodnější pro lidi, kteří jsou zvyklí na Cisco;
  2. API + shell pro aplikaci skriptů a provádění rutinních úkolů;
  3. REST API pro automatizaci.

Povolení API

Ve výchozím nastavení je rozhraní API povoleno na serverech pro správu s více než 4 GB paměti RAM a v samostatných konfiguracích s více než 8 GB paměti RAM. Stav můžete zkontrolovat pomocí příkazu: stav api

Pokud se ukáže, že je rozhraní API deaktivováno, je poměrně snadné jej povolit prostřednictvím SmartConsole: Správa a nastavení > Blades > Management API > Pokročilá nastavení

Check Point R80.10 API. Správa přes CLI, skripty a další

Poté publikujte (Publikovat) změní a spusťte příkaz restart api.

Webové požadavky + Python

Chcete-li spouštět příkazy API, můžete použít webové požadavky pomocí PYTHON a knihovny žádosti, json. Obecně se struktura webového požadavku skládá ze tří částí:

1) Adresa

(https://<managemenet server>:<port>/web_api/<command>) 


2) HTTP hlavičky

content-Type: application/json
x-chkp-sid: <session ID token as returned by the login command>


3) Vyžádejte si užitečné zatížení

Text ve formátu JSON obsahující různé parametry

Příklad pro volání různých příkazů:


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

Zde je několik typických úkolů, se kterými se při správě Check Point nejčastěji setkáváte.

1) Příklad funkcí autorizace a odhlášení:

Skript


    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) Zapnutí nožů a nastavení sítě:

Skript


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) Změna pravidel brány firewall:

Skript


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) Přidání aplikační vrstvy:

Skript


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) Publikovat a nastavit politiku, zkontrolovat provedení příkazu (task-id):

Skript


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) Přidat hostitele:

Skript


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) Přidejte pole Prevence hrozeb:

Skript


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) Prohlédněte si seznam relací

Skript


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) Vytvořte si nový profil:

Skript


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) Změňte akci pro IPS podpis:

Skript


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) Přidejte svou službu:

Skript


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) Přidejte kategorii, web nebo skupinu:

Skript


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))

Navíc s pomocí Webové rozhraní API můžete přidávat a odebírat sítě, hostitele, přístupové role atd. Čepele lze přizpůsobit Antivirus, Antibot, IPS, VPN. Je dokonce možné instalovat licence pomocí příkazu run-script. Všechny příkazy Check Point API naleznete zde zde.

Check Point API + Postman

Je také pohodlné používat Check Point Web API ve spojení s Listonoš. Postman má desktopové verze pro Windows, Linux a MacOS. Kromě toho existuje plugin pro Google Chrome. To je to, co budeme používat. Nejprve musíte najít Postman v Google Chrome Store a nainstalovat:

Check Point R80.10 API. Správa přes CLI, skripty a další

Pomocí této utility budeme schopni generovat webové požadavky na Check Point API. Aby se nepamatovaly všechny API příkazy, je možné importovat tzv. kolekce (šablony), které již obsahují všechny potřebné příkazy:

Check Point R80.10 API. Správa přes CLI, skripty a další

Zde najdete sbírka pro R80.10. Po importu nám budou k dispozici šablony příkazů API:

Check Point R80.10 API. Správa přes CLI, skripty a další

Podle mého názoru je to velmi pohodlné. Pomocí rozhraní Check Point API můžete rychle začít vyvíjet aplikace.

Check Point + Ansible

Také bych rád poznamenal, že existuje Možná modulu pro CheckPoint API. Modul umožňuje spravovat konfigurace, ale není tak vhodný pro řešení exotických problémů. Psaní skriptů v jakémkoli programovacím jazyce poskytuje flexibilnější a pohodlnější řešení.

Výkon

Zde pravděpodobně dokončíme naši krátkou recenzi Check Point API. Tato funkce byla dle mého názoru velmi dlouho očekávaná a potřebná. Vznik API otevírá velmi široké možnosti jak pro systémové administrátory, tak pro systémové integrátory, kteří pracují s produkty Check Point. Orchestrování, automatizace, zpětná vazba SIEM... to vše je nyní možné.

PS Další články o Check Point jako vždy to najdete na našem blogu Habr nebo na blogu na webové stránky.

PSS Máte-li technické dotazy týkající se nastavení Check Point, můžete zde

Průzkumu se mohou zúčastnit pouze registrovaní uživatelé. Přihlásit se, prosím.

Plánujete používat API?

  • 70,6%Ano 12

  • 23,5%No4

  • 5,9%Již používá 1

Hlasovalo 17 uživatelů. 3 uživatelů se zdrželo hlasování.

Zdroj: www.habr.com

Přidat komentář