Check Point R80.10 API. Vadība caur CLI, skripti un ne tikai

Check Point R80.10 API. Vadība caur CLI, skripti un ne tikai

Esmu pārliecināts, ka katram, kurš jebkad strādājis ar Check Point, ir bijusi sūdzība par iespēju rediģēt konfigurāciju no komandu uzvednes. Tas ir īpaši dīvaini tiem, kas iepriekš strādājuši ar Cisco ASA, kur absolūti visu var iestatīt CLI. Pie Check Point viss ir pretēji — visas drošības iestatīšanas tiek veiktas tikai caur grafisko saskarni. Tomēr daudzas lietas nav īpaši ērti darīt caur GUI (pat tik ērti kā pie Check Point). Piemēram, uzdevums pievienot 100 jaunus hostus vai tīklus kļūst par garlaicīgu procedūru. Katram objektam būs jāklikšķina ar peli vairākkārt un jāpievieno IP adrese. To pašu var teikt par vietņu grupu izveidi vai masveida IPS parakstu ieslēgšanu/izslēgšanu. Tajā pašā laikā ir liela iespēja pieļaut kļūdu.

Salīdzinoši nesen notika “brīnums”. Ar jaunās versijas izlaišanu Gaia R80 tika paziņota iespēja izmantojot API, kas atver plašas iespējas iestatījumu automatizācijai, administrēšanai, uzraudzībai utt. Tagad var:

  • izveidot objektus;
  • pievienot vai rediģēt access-listus;
  • ieslēgt/izslēgt blokus;
  • iestatīt tīkla saskarnes;
  • instalēt politikas;
  • un vēl daudz ko citu.

Ja godīgi, nesaprotu, kā šis jaunums izgāja garām Habr. Šajā rakstā mēs īsi aprakstīsim, kā izmantot API un sniegsim dažus praktiskus piemērus CheckPoint iestatīšanai ar skriptiem..

Uzreiz gribu teikt, ka API tiek izmantots tikai Management serverim. T.i., vadīt vārtejas bez Management servera joprojām nav iespējams.

Kādos gadījumos šis API var noderēt?

  1. Sistēmas administratori, kuri vēlas vienkāršot vai automatizēt rutīnas uzdevumus Check Point iestatīšanā;
  2. Uzņēmumi, kuri vēlas integrēt Check Point ar citām sistēmām (virtualizācijas sistēmām, biļešu sistēmām, konfigurācijas pārvaldības sistēmām utt.);
  3. Sistēmas integratori, kuri vēlas standartizēt iestatījumus vai izveidot papildu produktus, kas saistīti ar Check Point.

Tipiska shēma

Tātad, pieņemsim tipisku shēmu ar Check Point:

Check Point R80.10 API. Vadība caur CLI, skripti un ne tikai

Kā parasti, mums ir vārteja (SG), pārvaldības serveris (SMS) un administratora konsole (SmartConsole). Tajā pašā laikā parastais vārtejas iestatīšanas process izskatās šādi:

Check Point R80.10 API. Vadība caur CLI, skripti un ne tikai

T.i., vispirms ir jāielādē administrators datorā SmartConsole, ar kuru mēs pieslēdzamies vadības serverim (SMS). Uz SMS tiek veiktas drošības iestatīšanas, pēc tam tiek piemēroti (install policy) uz vārtiem (SG).

Izmantojot Management API, mēs varam principā izlaist pirmo punktu (SmartConsole palaišana) un piemērot API komandas tieši vadības serverim (SMS).

API izmantošanas metodes

Lai mainītu konfigurāciju, izmantojot API, ir četri galvenie veidi:

1) Ar mgmt_cli rīku

Piemērs — # mgmt_cli add host name host1 ip-address 192.168.2.100
Šo komandu palaiž komandrindā no vadības servera (SMS). Domāju, ka komandas sintakse ir skaidra — tiek izveidots host1 ar adresi 192.168.2.100.

2) Ievadīt API komandas caur clish (ekspertu režīmā)

Pamatā, viss, kas jums jādara, ir pieslēgties komandrindai (mgmt login) ar kontu, kas tiek izmantots pieslēgšanās laikā caur SmartConsole (vai root kontu). Pēc tam varat ievadīt API komandas (šajā gadījumā nav nepieciešams pirms katras komandas izmantot rīku mgmt_cli). Var izveidot pilnvērtīgus BASH skriptus. Skripta piemērs, kas izveido host:

Bash skripts

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

Ja interesē, varat noskatīties atbilstošu video:

Atskaņot video

3) Caur SmartConsole, atverot CLI logu

Viss, kas jādara, ir palaist logu flags -k integrācijai ar tieši no SmartConsole, kā parādīts zemāk attēlā.

Check Point R80.10 API. Vadība caur CLI, skripti un ne tikai

Šajā logā var tūlīt sākt ievadīt API komandas.

4) Web pakalpojumi. Izmantojiet HTTPS Post pieprasījumu (REST API)

Mūsuprāt, tas ir viens no visperspektīvākajiem veidiem, jo tas ļauj “veidot” veselas lietojumprogrammas par vadības servera pārvaldību (atvainojos par tautoloģiju). Zemāk mēs nedaudz sīkāk aplūkosim šo metodi.

Ja rezumējam:

  1. API + cli vairāk piemērots cilvēkiem, kas pieraduši pie Cisco;
  2. API + shell lai izmantotu skriptus un veiktu rutīnas uzdevumus;
  3. REST API automātizēšanai.

API ieslēgšana

Noklusējuma iestatījumos API ir ieslēgts vadības serveros ar RAM vairāk par 4GB un atsevišķās konfigurācijās ar RAM vairāk par 8GB. Statūs var pārbaudīt ar komandu: api status

Ja izrādīsies, ka API ir izslēgts, to ir diezgan viegli ieslēgt caur SmartConsole: Manage & Settings > Blades > Management API > Advanced Settings

Check Point R80.10 API. Vadība caur CLI, skripti un ne tikai

Pēc tam publicējiet (pakalpojumā) izmaiņas un izpildiet komandu api restart.

Web pieprasījumi + Python

Lai izpildītu API komandas, varat izmantot Web pieprasījumus, izmantojot Python un bibliotēkas requests, json. Vispārīgā veidā web pieprasījuma struktūra sastāv no trim daļām:

1) Adrese

(https://<vadības serveris>:<ports>/web_api/<komanda>) 


2) HTTP galvenes

content-Type: application/json
x-chkp-sid: <sesijas ID atslēga, ko atgriež pieslēgšanās komanda>


3) Pieprasījuma slodze

JSON formātā esošais teksts, kas satur dažādus parametrus

Piemērs dažādu komandu izsaukšanai:


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

Apskatīsim dažas tipiskas uzdevumus, ar kuriem visbiežāk sastopamies Check Point administrēšanā.

1) Piemērs autorizācijas un izrakstīšanās funkcijām:

Skripts


    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) Blade ieslēgšana un tīkla konfigurācija:

Skripts


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) Ugunsmūra noteikumu izmaiņas:

Skripts


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) Pielikt Application layer:

Skripts


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) Publikācija un politikas uzstādīšana, komandas izpildes pārbaude (task-id):

Skripts


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) Pievienot hostu:

Skripts


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) Pievienot Threat Prevention lauku:

Skripts


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) Apskatīt sesiju sarakstu

Skripts


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) Izveidot jaunu profilu:

Skripts


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) Mainīt darbību IPS parakstam:

Skripts


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) Pievienot savu pakalpojumu:

Skripts


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) Pievienot kategoriju, vietni vai grupu:

Skripts


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

Papildus tam, izmantojot Web API jūs varat pievienot un dzēst tīklus, hostus, piekļuves lomas utt. Ir iespēja konfigurēt bleyd Antivirus, Antibot, IPS, VPN. Ir iespējama arī licenci uzstādīšana ar komandu run-script. Ar visām Check Point API komandām var iepazīties šeit.

Check Point API + Postman

Arī ērti izmantot Check Point Web API kombinācijā ar Postman. Postman ir darbvirsmas versijas Windows, Linux un MacOS. Turklāt ir Google Chrome spraudnis. To mēs arī izmantosim. Sākumā jāatrod Postman Google Chrome veikalā un jāinstalē:

Check Point R80.10 API. Vadība caur CLI, skripti un ne tikai

Ar šo rīku mēs varēsim veidot Web pieprasījumus uz Check Point API. Lai neaizmirstu visas API komandas, ir iespēja importēt tā sauktos collection (šablonus), kuri jau satur visas nepieciešamās komandas:

Check Point R80.10 API. Vadība caur CLI, skripti un ne tikai

Šeit jūs atradīsiet collection lai R80.10. Pēc importēšanas mums būs pieejami API komandu šabloni:

Check Point R80.10 API. Vadība caur CLI, skripti un ne tikai

Manuprāt, tas ir ļoti ērti. Var diezgan ātri uzsākt aplikāciju izstrādi, izmantojot Check Point API.

Check Point + Ansible

Tāpat gribētu atzīmēt, ka pastāv Ansible moduli CheckPoint API. Modulis ļauj pārvaldīt konfigurācijas, taču tas nav tik ērts eksotisku uzdevumu risināšanai. Skriptu rakstīšana jebkurā programmēšanas valodā sniedz elastīgākus un ērtākus risinājumus.

Izvade

Uz šo, iespējams, mēs noslēgsim mūsu nelielo pārskatu par Check Point API. Manuprāt, šī funkcija bija ļoti gaidīta un nepieciešama. API parādīšanās atver ļoti plašas iespējas gan sistēmu administratoriem, gan sistēmu integratoriem, kuri strādā ar Check Point produktiem. Orķestrācija, automatizācija, atgriezeniskā saite ar SIEM... viss tas tagad ir iespējams.

P.S. Vairāk rakstu par Check Point jūs kā vienmēr varat atrast mūsu blogā Habr vai blogā pie vietnē.

P.S.S. Tehniskos jautājumus, kas saistīti ar Check Point iestatīšanu, varat uzdot šeit

Tikai reģistrētie lietotāji var piedalīties aptaujā. Pieteikties, lūdzu.

Vai plānojat izmantot API?

  • 70,6%Jā12

  • 23,5%Nē4

  • 5,9%Jau izmantoju1

Balsojuši 17 lietotāju. Atturējušies 3 lietotāji.

Avots: habr.com

Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem 🔥 Iegādājieties uzticamu tīmekļa hostingu ar DDoS aizsardzību, VPS VDS serveriem | ProHoster