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ý, kdo někdy pracoval s Check Point, se setkal s problémem ohledně nepřípustnosti úpravy konfigurace z příkazového řádku. To je obzvlášť šílené pro ty, kteří předtím pracovali s Cisco ASA, kde lze všechno nastavit v CLI. U Check Pointu je to naopak – veškerá nastavení zabezpečení se prováděla výhradně z grafického rozhraní. Přesto některé úkoly jsou z GUI (i tak příjemného, jako je u Check Pointu) opravdu nepohodlné. Například úkol přidání 100 nových hostitelů nebo sítí se stává dlouhou a nudnou procedurou. U každého objektu je třeba několikrát klikat myší a zadávat IP adresu. Totéž platí pro vytváření skupin webů nebo hromadné zapínání/vypínání IPS podpisů. Tím se zvyšuje pravděpodobnost chyby.

Relativně nedávno došlo k "zázraku". S vydáním nové verze Gaia R80 byla ohlášena možnost využití API, což otvírá široké možnosti pro automatizaci nastavení, administraci, monitorování atd. Nyní je možné:

  • vytvářet objekty;
  • přidávat nebo upravovat access-listy;
  • zapínat/vypínat blade;
  • nastavovat síťové rozhraní;
  • instalovat politiky;
  • a mnoho dalšího.

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

Okamžitě bych rád podotkl, že API se používá pouze pro Management server. Tedy spravovat brány bez Management serveru je stále nemožné.

Komu může tento API vlastně přijít vhod?

  1. Systémovým administrátorům, kteří chtějí zjednodušit nebo automatizovat rutinní úkoly při nastavování Check Point;
  2. Firmám, které chtějí integrovat Check Point s jinými řešeními (virtualizační systémy, ticketovací systémy, systémy správy konfigurací atd.);
  3. Systémovým integrátorům, kteří chtějí standardizovat nastavení nebo vytvořit další produkty související s Check Point.

Typový diagram

A tak, představme si typový diagram s Check Pointem:

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

Jak bývá obvyklé, máme zde bránu (SG), server řízení (SMS) a konzoli administrátora (SmartConsole). Přičemž běžný proces nastavení brány vypadá následovně:

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

Tedy nejprve je nutné na počítači administrátora spustit SmartConsole, pomocí které se připojujeme k Management serveru (SMS). Na SMS se provádějí bezpečnostní nastavení, a až poté se aplikují (instalační politika) na bránu (SG).

Při používání Management API, prakticky můžeme přeskočit první bod (spuštění SmartConsole) a aplikovat API příkazy přímo na Management server (SMS).

Způsoby využití API

Pro úpravu konfigurace pomocí API existují čtyři základní způsoby:

1) Pomocí nástroje mgmt_cli

Příklad — # mgmt_cli add host name host1 ip-address 192.168.2.100
Tento příkaz je spuštěn z příkazového řádku Management serveru (SMS). Myslím, že syntaxe příkazu je jasná — vytváří se host1 s adresou 192.168.2.100.

2) Zadávání API příkazů přes clish (v expertním režimu)

V podstatě je vše, co potřebujete, přihlásit se do příkazového řádku (mgmt login) pod účtem, který se používá při připojení přes SmartConsole (nebo root účet). Poté můžete zadávat API příkazy (v tomto případě není třeba používat před každým příkazem nástroj mgmt_cli). Můžete vytvářet plnohodnotné BASH skripty. Příklad skriptu, který vytváří host:

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 vás to zajímá, můžete se podívat na příslušné video:

Přehrát video

3) Přes SmartConsole, otevřením okna CLI

Vše, co musíte udělat, je spustit okno CLI přímo z SmartConsole, jak je uvedeno na obrázku níže.

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

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

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

Podle našeho názoru je to jeden z nejperspektivnějších způsobů, protože umožňuje "stavět" celé aplikace pro ovládání správy serveru (omlouvám se za tautologii). Níže se podíváme na tuto metodu podrobněji.

Pokud shrneme:

  1. API + cli je více vhodné pro lidi, kteří jsou zvyklí na Cisco;
  2. API + shell pro použití skriptů a provádění rutinních úkolů;
  3. REST API pro automatizaci.

Aktivace API

Ve výchozím nastavení je API aktivováno na manažerských serverech s RAM větší než 4 GB a standalone konfiguracích s RAM větší než 8 GB. Stav lze zkontrolovat pomocí příkazu: api status

Pokud se ukáže, že je api vypnuto, je poměrně snadné jej aktivovat přes SmartConsole: Manage & Settings > Blades > Management API > Advanced Settings

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

Poté publikovat (Publish) změny a vykonat příkaz api restart.

Webové dotazy + Python

Pro vykonání API příkazů lze použít webové dotazy s využitím CouchDB a knihoven requests, json. V obecném rámci struktura webového dotazu se skládá ze tří částí:

1) Adresa

(https://<manage server>:<port>/web_api/<příkaz>) 


2) HTTP záhlaví

content-Type: application/json
x-chkp-sid: <ID relace token vrácené příkazem pro přihlášení>


3) Payload požadavku

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 adresa GAIA

Představíme několik typických úkolů, se kterými se nejčastěji setkáváme při administraci Check Point.

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

Skript


    payload = {'user': 'váš_uživatel', 'password': 'vaše_heslo'}
    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) Aktivace blade 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 firewallu:

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) Publikování a instalace politiky, kontrola provedení příkazu (task-id):

Skript


publish_result = api_call('xxx.xxx.xxx.xxx', 443, 'publish', {}, sid)
print("výsledek publikace: " + 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řidání 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řidání 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) Zobrazit 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řit nový profil:

Skript


add_threat_profile={'name':'Apeiron', "active-protections-performance-impact" : "nízký","active-protections-severity" : "nízký nebo výše","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" : "Vysoký nebo nižší"},
  "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ěnit akci pro IPS signaturu:

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řidat 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řidat 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" : "Hry","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))

Kromě toho, s pomocí Web API můžete přidávat a odstraňovat sítě, hostitele, role přístupu atd. Je zde možnost nastavení bladeů Antivirus, Antibot, IPS, VPN. Lze dokonce instalovat licence pomocí příkazu run-script. Se všemi API příkazy Check Point se můžete seznámit zde.

Check Point API + Postman

Také je užitečné používat Check Point Web API ve spojení s Postman. Postman má desktopové verze pro Windows, Linux a MacOS. Kromě toho existuje plugin pro Google Chrome. Ten použijeme. Nejdříve je třeba najít Postman v Google Chrome Store a nainstalovat:

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

Pomocí tohoto nástroje můžeme vytvářet webové požadavky na API Check Point. Abychom si nemuseli pamatovat všechny API příkazy, je možné importovat tzv. collection (š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 collection pro R80.10. Po importu se nám zpřístupní šablony API příkazů:

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

Podle mého názoru je to velmi pohodlné. Lze velmi rychle začít vyvíjet aplikace s využitím API Check Point.

Check Point + Ansible

Také bych chtěl poznamenat, že existuje Ansible modul pro CheckPoint API. Modul umožňuje spravovat konfigurace, ale není tak pohodlný pro řešení exotických úkolů. Psání skriptů v jakémkoli programovacím jazyce nabízí flexibilnější a pohodlnější řešení.

Výstup

Tímto bychom asi zakončili naši malou recenzi API Check Point. Podle mě byla tato funkce velmi 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. Orchestrace, automatizace, zpětná vazba se SIEM... to vše je nyní možné.

P.S. Více článků o Check Point najdete jako obvykle v našem blogu Habr nebo na blogu na webu.

P.S.S. Technické dotazy týkající se nastavení Check Point můžete položit zde

Pouze registrovaní uživatelé se mohou účastnit ankety. Přihlaste se, prosím.

Plánujete používat API?

  • 70,6%Ano12

  • 23,5%Ne4

  • 5,9%Už používám1

Hlasovalo 17 uživatelů. Zdrželo se 3 uživatelů.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster