Check Point R80.10 API. Upravljanje putem CLI, skripti i ne samo

Check Point R80.10 API. Upravljanje putem CLI, skripti i ne samo

Siguran sam da je svatko tko je ikada radio s Check Point, imao pritužbu o nemogućnosti izmjene konfiguracije iz komandne linije. To je posebno iritantno za one koji su ranije radili s Cisco ASA, gdje se sve može konfigurirati u CLI-u. U Check Point-u je sve obrnuto - sva podešavanja sigurnosti radila su se isključivo iz grafičkog sučelja. Ipak, neke stvari je potpuno nelagodno raditi putem GUI-a (čak i onog tako korisnog kao što je Check Point). Na primjer, dodavanje 100 novih hostova ili mreža postaje dugo i naporno. Za svaki objekt treba nekoliko puta kliknuti i unijeti IP adresu. Isto vrijedi i za kreiranje grupa stranica ili masovno uključivanje/isključivanje IPS signatura. Postoji velika vjerojatnost da će se napraviti greška.

Relativno nedavno se dogodilo “čudo”. S izlaskom nove verzije Gaia R80 najavljena je mogućnost korištenja API-a, što otvara široke mogućnosti za automatizaciju postavki, administraciju, monitoring itd. Sada možete:

  • kreirati objekte;
  • dodavati ili uređivati access liste;
  • uključivati/isključivati blade-ove;
  • podešavati mrežne sučelje;
  • instalirati politike;
  • in še mnogo več.

Iskreno, ne razumijem kako je ova vijest prošla pored Habr-a. U ovom članku ćemo ukratko opisati kako koristiti API i dati nekoliko praktičnih primjera postavki CheckPoint pomoću skripti.

Odmah bih želio napomenuti, API se koristi samo za Management server. Odnosno, upravljanje prolazima bez Management servera i dalje nije moguće.

Kome može biti koristan ovaj API?

  1. Sistemskim administratorima koji žele pojednostaviti ili automatizirati rutinske zadatke podešavanja Check Point-a;
  2. Tvrtkama koje žele integrirati Check Point s drugim rješenjima (sustavi virtualizacije, ticket sustavi, sustavi upravljanja konfiguracijom itd.);
  3. Sistemskim integratorima koji žele standardizirati postavke ili stvoriti dodatne proizvode povezane s Check Point-om.

Tipična shema

Dakle, zamislite tipičnu shemu s Check Point-om:

Check Point R80.10 API. Upravljanje putem CLI, skripti i ne samo

Kao i obično, imamo prolaz (SG), server za upravljanje (SMS) i konzolu administratora (SmartConsole). U međuvremenu, uobičajeni proces podešavanja prolaza izgleda ovako:

Check Point R80.10 API. Upravljanje putem CLI, skripti i ne samo

T.j. najprej je potrebno na računalniku administratorja zagnati SmartConsole, s katero se povezujemo z Management strežnikom (SMS). Na SMS se izvedejo nastavitve varnosti, nato pa se uporabijo (install policy) na prehodu (SG).

Pri uporabi Management API, lahko v bistvu preskočimo prvi korak (zagon SmartConsole) in uporabimo API ukaze direktno na Management strežniku (SMS).

Načini uporabe API

Za urejanje konfiguracije s pomočjo API obstajajo štirje glavne metode:

1) S pomočjo orodja mgmt_cli

Primer — # mgmt_cli add host name host1 ip-address 192.168.2.100
Ta ukaz se zažene iz ukazne vrstice Management strežnika (SMS). Mislim, da je sintaksa ukaza jasna — ustvarja se host1 z naslovom 192.168.2.100.

2) Vnašanje API ukazov preko clish (v expert načinu)

V bistvu, vse kar potrebujete, je, da se prijavite v ukazno vrstico (mgmt login) z uporabniškim računom, ki se uporablja pri povezovanju preko SmartConsole (ali root račun). Nato lahko vnašate API ukaze (v tem primeru ni potrebno uporabljati orodja mgmt_cli). Lahko ustvarite polne BASH skripte. Primer skripte, ki ustvari gostitelja:

Bash skripta

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

Če vas zanima, lahko pogledate ustrezen video:

Predvajaj video

3) Preko SmartConsole, odpiranje okna CLI

Vse, kar morate storiti, je, da zaženete okno CLI takoj iz SmartConsole, kot je prikazano na sliki spodaj.

Check Point R80.10 API. Upravljanje putem CLI, skripti i ne samo

V tem oknu lahko takoj začnete vnašati API ukaze.

4) Web Services. Uporaba HTTPS Post request (REST API)

Po našem mnenju je to eden najbolj obetavnih načinov, saj omogoča “gradnjo” celotnih aplikacij za upravljanje upravljalnega strežnika (oprosti za pleonazem). Spodaj bomo ta način podrobneje obravnavali.

Če povzamemo:

  1. API + cli bolje ustreza ljudem, ki so navajeni na Cisco;
  2. API + shell za izvajanje skript in opravljanje rutinskih nalog;
  3. REST API za avtomatizacijo.

Vklop API

Privzeto je API vklopljen na upravljalskih strežnikih z več kot 4GB RAM-a in samostojnih konfiguracijah z več kot 8GB RAM-a. Status lahko preverite s pomočjo ukaza: api status

Če se izkaže, da je api izklopljen, ga je precej enostavno vklopiti preko SmartConsole: Manage & Settings > Blades > Management API > Advanced Settings

Check Point R80.10 API. Upravljanje putem CLI, skripti i ne samo

Nato objavite (Publish) spremembe in izvedite ukaz api restart.

Web zahteve + Python

Za izvajanje API ukazov lahko uporabite spletne zahteve ob pomoči Python in knjižnic requests, json. V splošni obliki struktura web zahteve obsega tri dele:

1) Naslov

(https://:/web_api/) 


2) HTTP заголовки

content-Type: application/json
x-chkp-sid:


3) Полезная нагрузка запроса

Текст в формате JSON, содержащий различные параметры

Пример вызова различных команд:


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 адрес GAIA

Приведем несколько типовых задач, с которыми чаще всего приходится сталкиваться при администрировании Check Point.

1) Пример функций авторизации и выхода:

Skript


    payload = {'user': 'ваш_пользователь', '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) Включение блэйдов и настройка сети:

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) Изменение правил межсетевого экрана:

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) Добавление слоя Application:

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) Публикация и установка политики, проверка выполнения команды (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) Добавить хост:

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) Добавить поле Threat Prevention:

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) Ogledajte popis sesija

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) Kreirajte novi 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) Promijenite radnju za IPS potpis:

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) Dodajte svoju uslugu:

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) Dodajte kategoriju, stranicu ili grupu:

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

Osim toga, putem Web API možete dodavati i uklanjati mreže, hostove, pristupne uloge itd. Postoji mogućnost konfiguracije nožica Antivirus, Antibot, IPS, VPN. Moguće je čak i instalirati licence putem komande run-script. Sa svim API komandama Check Point možete se upoznati ovde.

Check Point API + Postman

Također je zgodno koristiti Check Point Web API u kombinaciji s PostmanPostman ima desktop verzije za Windows, Linux i MacOS. Također, postoji dodatak za Google Chrome. Njega ćemo koristiti. Prvo, potrebno je pronaći Postman u Google Chrome Store-u i instalirati ga:

Check Point R80.10 API. Upravljanje putem CLI, skripti i ne samo

Uz ovu alatku možemo formirati Web zahtjeve za API Check Point. Da ne bismo pamtile sve API komande, postoji mogućnost uvoza takozvanih kolekcija (predložaka) koje već sadrže sve potrebne komande:

Check Point R80.10 API. Upravljanje putem CLI, skripti i ne samo

Tukaj naći ćete kolekciju za R80.10. Nakon uvoza, bit će nam dostupni predlošci API komandi:

Check Point R80.10 API. Upravljanje putem CLI, skripti i ne samo

Po mom mišljenju, ovo je vrlo praktično. Moguće je vrlo brzo započeti razvoj aplikacija koristeći Check Point API.

Check Point + Ansible

Također bih htio napomenuti da postoji Ansible modul za CheckPoint API. Modul omogućava upravljanje konfiguracijama, ali nije toliko praktičan za rješavanje egzotičnih zadataka. Pisanje skripti na bilo kojem programskom jeziku pruža fleksibilnija i prikladnija rješenja.

Izlaz

Tako završavamo naš mali pregled Check Point API. Po mom mišljenju, ova funkcionalnost je bila veoma očekivana i potrebna. Pojava API-ja otvara široke mogućnosti za sistemske administratore i sistemske integratore koji rade s proizvodima Check Point. Orkestracija, automatizacija, povratne informacije s SIEM-om... sve to sada je moguće.

P.S. Više članaka o Check Point kao i uvijek možete pronaći u našoj blogu Хабр ili u blogu na website.

P.S.S. Tehnička pitanja vezana uz postavljanje Check Point-a možete postaviti ovde

Samo registrovani korisnici mogu učestvovati u anketi. Prijavite se, molim vas.

Planirate li koristiti API?

  • 70,6%Da12

  • 23,5%Ne4

  • 5,9%Već koristim1

Glasale su 17 korisnika. 3 korisnika su se suzdržala.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster