Kontrolpunkto R80.10 API. Administrado per CLI, skriptoj kaj pli

Kontrolpunkto R80.10 API. Administrado per CLI, skriptoj kaj pli

Mi certas, ke ĉiuj kun kiuj iam laboris Kontroli Punkton, estis plendo pri невозможности правки конфигурации из командной строки. Ĉi tio estas speciale stranga por tiuj, kiuj antaŭe laboris kun Cisco ASA, kie absolute ĉio povas esti agordita en la CLI. Kun Check Point estas inverse - ĉiuj sekurecaj agordoj estis faritaj ekskluzive de la grafika interfaco. Tamen iuj aferoj estas tute maloportune fari per la GUI (eĉ unu tiel oportuna kiel tiu de Check Point). Ekzemple, la tasko aldoni 100 novajn gastigantojn aŭ retojn fariĝas longa kaj teda procedo. Por ĉiu objekto vi devos klaki la muson plurfoje kaj enigi la IP-adreson. La sama validas por krei grupon de retejoj aŭ amase ebligi/malŝalti IPS-subskribojn. En ĉi tiu kazo, estas alta probablo fari eraron.

"Miraklo" okazis relative lastatempe. Kun la ĵeto de la nova versio Gaia R80 la okazo estis anoncita использования API, kiu malfermas larĝajn ŝancojn por aŭtomatigi agordojn, administradon, monitoradon, ktp. Nun vi povas:

  • krei objektojn;
  • aldoni aŭ redakti alirlistojn;
  • ebligi/malŝalti klingojn;
  • agordi retajn interfacojn;
  • instali politikojn;
  • kaj multe pli.

Если честно, не понимаю как эта новость прошла мимо Хабра. В данной статье мы вкратце опишем как пользоваться API и приведем несколько практических примеров CheckPoint-agordoj uzante skriptojn.

Сразу хотел бы оговориться, API используется только для Management сервера. Т.е. управлять шлюзами без Management сервера по прежнему невозможно.

Kiu povas uzi ĉi tiun API principe?

  1. Sistemadministrantoj kiuj volas simpligi aŭ aŭtomatigi rutinajn agordajn taskojn de Check Point;
  2. Firmaoj kiuj volas integri Check Point kun aliaj solvoj (virtualigaj sistemoj, biletaj sistemoj, agordaj administradsistemoj ktp.);
  3. Sistemintegrantoj, kiuj volas normigi agordojn aŭ krei kromajn produktojn rilatajn al Check Point.

Tipa skemo

И так, представим типовую схему с Check Point:

Kontrolpunkto R80.10 API. Administrado per CLI, skriptoj kaj pli

Kiel kutime ni havas enirejon (SG), administradservilo (SMS) kaj administra konzolo (SmartConsole). En ĉi tiu kazo, la kutima pordeja agorda procezo aspektas jene:

Kontrolpunkto R80.10 API. Administrado per CLI, skriptoj kaj pli

Tiuj. Unue vi devas funkcii per la komputilo de la administranto SmartConsole, с помощью которой мы подключаемся к Management-серверу (SMS). Sekurecaj agordoj estas faritaj sur la SMS, kaj nur tiam aplikataj (instali politikon) на шлюз (SG).

Kiam vi uzas Administrado API, ni povas esence salti la unuan punkton (lanĉi SmartConsole) kaj uzi API-komandoj rekte al la Administra servilo (SMS).

Способы использования API

Для правки конфигурации с помощью API есть четыре основных способа:

1) Uzante la ilon mgmt_cli

Ekzemplo - # mgmt_cli aldoni gastigan nomon host1 ip-adreso 192.168.2.100
Ĉi tiu komando estas rulita de la komandlinio de Administra Servilo (SMS). Mi pensas, ke la sintakso de la komando estas klara - host1 estas kreita kun la adreso 192.168.2.100.

2) Вводить API команды через clish (в режиме expert)

Esence, ĉio, kion vi devas fari, estas ensaluti al la komandlinio (mgmt ensaluto) sub la konto, kiu estas uzata dum konekto per SmartConsole (aŭ radika konto). Tiam vi povas eniri API-komandoj (en ĉi tiu kazo ne necesas uzi la ilon antaŭ ĉiu komando mgmt_cli). Vi povas krei plenrajtan BASH-skriptoj. Ekzemplo de skripto, kiun la gastiganto kreas:

Bash-skripto

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

Se vi interesiĝas, vi povas spekti la respondan videon:

3) Per SmartConsole malfermante la CLI-fenestron

Ĉio, kion vi devas fari, estas malfermi la fenestron CLI rekte de SmartConsole, kiel montrite en la suba bildo.

Kontrolpunkto R80.10 API. Administrado per CLI, skriptoj kaj pli

В этом окне можно сразу начинать вводить API-команды.

4) Retaj Servoj. Uzu HTTPS-afiŝpeton (REST API)

Laŭ nia opinio, ĉi tiu estas unu el la plej promesplenaj metodoj, ĉar permesas vin "konstrui" tutajn aplikojn bazitajn sur administrado de servilo (pardonu pro la taŭtologio). Malsupre ni rigardos ĉi tiun metodon iom pli detale.

Por resumi:

  1. API + cli больше подходит для людей, кто привык к Cisco;
  2. API + shell por apliki skriptojn kaj plenumi rutinajn taskojn;
  3. REST-API por aŭtomatigo.

Ebligante la API

Defaŭlte, la API estas ebligita en administraj serviloj kun pli ol 4GB da RAM kaj memstaraj agordoj kun pli ol 8GB da RAM. Vi povas kontroli la staton per la komando: api statuso

Se rezultas, ke la api estas malŝaltita, tiam estas sufiĉe facile ebligi ĝin per SmartConsole: Administri & Agordoj > Klingoj > Administrado API > Altnivelaj Agordoj

Kontrolpunkto R80.10 API. Administrado per CLI, skriptoj kaj pli

Затем опубликовать (publikigas) ŝanĝas kaj rulu la komandon api rekomenci.

Retaj petoj + Python

Por ekzekuti API-komandojn, vi povas uzi Retajn petojn uzante python и библиотек petoj, json. Ĝenerale, la strukturo de retpeto konsistas el tri partoj:

1) Adreso

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


2) HTTP Headers

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


3) Request payload

Teksto en formato JSON enhavanta la malsamajn parametrojn

Ekzemplo por voki diversajn komandojn:


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

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

1) Ekzemplo de rajtigaj kaj elsalutfunkcioj:

Skripto


    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) Enŝaltu la klingojn kaj agordi la reton:

Skripto


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) Ŝanĝi la regulojn pri fajroŝirmilo:

Skripto


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) Aldonante Aplikan tavolon:

Skripto


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) Eldonu kaj agordu la politikon, kontrolu la plenumon de la komando (task-id):

Skripto


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) Aldonu gastiganton:

Skripto


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) Aldonu kampon pri Minaco-Preventado:

Skripto


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) Rigardu la liston de sesioj

Skripto


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) Kreu novan profilon:

Skripto


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) Поменять действие для IPS сигнатуры:

Skripto


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) Добавить свой сервис:

Skripto


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) Добавить категорию, сайт или группу:

Skripto


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

Krome, kun la helpo Reta API vi povas aldoni kaj forigi retojn, gastigantojn, aliri rolojn, ktp. Klingoj povas esti personecigitaj Antivirus, Antibot, IPS, VPN. Eblas eĉ instali permesilojn per la komando rul-skripto. Со всеми API-командами Check Point можно ознакомиться tie.

Check Point API + Poŝtisto

Ankaŭ oportuna por uzi Check Point Web API lige kun Poŝtisto. Postman havas labortablaj versioj por Vindozo, Linukso kaj MacOS. Krome, ekzistas kromaĵo por Google Chrome. Jen kion ni uzos. Unue vi devas trovi Postman en la Google Chrome Store kaj instali:

Kontrolpunkto R80.10 API. Administrado per CLI, skriptoj kaj pli

Uzante ĉi tiun ilon, ni povos generi Retajn petojn al la Check Point API. Por ne memori ĉiujn API-komandojn, eblas importi tiel nomatajn kolektojn (ŝablonojn), kiuj jam enhavas ĉiujn necesajn komandojn:

Kontrolpunkto R80.10 API. Administrado per CLI, skriptoj kaj pli

estas vi trovos kolekto por R80.10. Post importado, API-komandŝablonoj estos disponeblaj por ni:

Kontrolpunkto R80.10 API. Administrado per CLI, skriptoj kaj pli

Laŭ mi, ĉi tio estas tre oportuna. Vi povas rapide komenci evoluigi aplikojn uzante la Check Point API.

Kontrolpunkto + Ansible

Mi ankaŭ ŝatus noti ke ekzistas Respondema modulo por CheckPoint API. La modulo permesas al vi administri agordojn, sed ĝi ne estas tiel oportuna por solvi ekzotikajn problemojn. Skribi skriptojn en iu ajn programlingvo provizas pli flekseblajn kaj oportunajn solvojn.

konkludo

На этом пожалуй мы закончим наш небольшой обзор Check Point API. На мой взгляд эта функция была очень долгожданной и необходимой. Появление API открывает очень широкие возможности как для системных администраторов, так и для системных интеграторов, которые работают с продуктами Check Point. Оркестрация, автоматизация, обратная связь с SIEM… все это теперь возможно.

P.S. Больше статей о Kontroli Punkton kiel ĉiam vi povas trovi ĝin en nia blogo Habr aŭ en la blogo ĉe ejo.

P.S.S. Задать технические вопросы, связанные с настройкой Check Point, можно tie

Nur registritaj uzantoj povas partopreni la enketon. Ensaluti, bonvolu.

Ĉu vi planas uzi la API?

  • 70,6%Jes12

  • 23,5%No4

  • 5,9%Jam uzas1

Voĉdonis 17 uzantoj. 3 uzantoj sindetenis.

fonto: www.habr.com

Aldoni komenton