Kontrolearje Point R80.10 API. Behear fia CLI, skripts en mear

Kontrolearje Point R80.10 API. Behear fia CLI, skripts en mear

Ik bin der wis fan dat elkenien dy't oait wurke mei Check Point, der wie in klacht oer ûnmooglikheid om de konfiguraasje te bewurkjen fanút de kommandorigel. Dit is benammen nuver foar dyjingen dy't earder wurke mei Cisco ASA, dêr't absolút alles kin wurde konfigurearre yn de CLI. Mei Check Point is it oarsom - alle feiligensynstellingen waarden eksklusyf útfierd fanút de grafyske ynterface. Guon dingen binne lykwols folslein ûngemaklik om te dwaan fia de GUI (sels ien sa handich as dy fan Check Point). Bygelyks, de taak fan it tafoegjen fan 100 nije hosts of netwurken feroaret yn in lange en ferfeelsume proseduere. Foar elk objekt moatte jo ferskate kearen mei de mûs klikke en it IP-adres ynfiere. Itselde jildt foar it meitsjen fan in groep siden of massale ynskeakeljen / útskeakeljen fan IPS-hantekeningen. Yn dit gefal is d'r in hege kâns op it meitsjen fan in flater.

In "wûnder" barde relatyf koartlyn. Mei de frijlitting fan 'e nije ferzje Gaia R80 de kâns waard bekend makke API-gebrûk, dy't brede kânsen iepenet foar it automatisearjen fan ynstellings, administraasje, tafersjoch, ensfh. No kinsto:

  • meitsje objekten;
  • tagongslisten tafoegje of bewurkje;
  • ynskeakelje / útskeakelje blades;
  • ynstelle netwurk ynterfaces;
  • ynstallearje belied;
  • en folle mear.

Om earlik te wêzen, begryp ik net hoe't dit nijs troch Habr. Yn dit artikel sille wy koart beskriuwe hoe't jo de API brûke en ferskate praktyske foarbylden leverje. CheckPoint ynstellings mei help fan skripts.

Ik wol direkt in reservearje meitsje dat de API allinich brûkt wurdt foar de Managementserver. Dy. It is noch altyd ûnmooglik om gateways te behearjen sûnder in behearserver.

Wa kin dizze API yn prinsipe brûke?

  1. Systeembehearders dy't routine Check Point-konfiguraasjetaken ferienfâldigje of automatisearje wolle;
  2. Bedriuwen dy't Check Point wolle yntegrearje mei oare oplossingen (virtualisaasjesystemen, ticketsystemen, konfiguraasjebehearsystemen, ensfh.);
  3. Systeemintegrators dy't ynstellings standerdisearje wolle of ekstra Check Point-relatearre produkten meitsje wolle.

Typysk skema

Dat, lit ús in typysk skema foarstelle mei Check Point:

Kontrolearje Point R80.10 API. Behear fia CLI, skripts en mear

As gewoanlik hawwe wy in poarte (SG), behear tsjinner (SMS) en admin konsole (SmartConsole). Yn dit gefal sjocht it gewoane gateway-konfiguraasjeproses der sa út:

Kontrolearje Point R80.10 API. Behear fia CLI, skripts en mear

Dy. Earst moatte jo rinne op de kompjûter fan de behearder SmartConsole, wêrmei't wy ferbine mei de Behearserver (SMS). Feiligensynstellingen wurde makke op it SMS, en pas dan tapast (ynstallearje belied) nei poarte (SG).

By it brûken Management API, kinne wy ​​yn prinsipe it earste punt oerslaan (starte SmartConsole) en brûke API kommando direkt nei de Management tsjinner (SMS).

Manieren om de API te brûken

D'r binne fjouwer wichtige manieren om de konfiguraasje te bewurkjen mei de API:

1) Mei help fan it hulpprogramma mgmt_cli

Foarbyld - # mgmt_cli hostnamme tafoegje host1 ip-adres 192.168.2.100
Dit kommando wurdt útfierd fanút de kommandorigel fan Management Server (SMS). Ik tink dat de syntaksis fan it kommando dúdlik is - host1 is makke mei it adres 192.168.2.100.

2) API-kommando's ynfiere fia clish (yn ekspertmodus)

Yn prinsipe, alles wat jo hoege te dwaan is oanmelde by de kommandorigel (mgmt oanmelde) ûnder it akkount dat wurdt brûkt by it ferbinen fia SmartConsole (of root-akkount). Dan kinne jo ynfiere API kommando (yn dit gefal is d'r net nedich om it hulpprogramma te brûken foar elk kommando mgmt_cli). Jo kinne meitsje folweardich BASH skripts. In foarbyld fan in skript dat de host makket:

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

As jo ​​​​ynteressearre binne, kinne jo de oerienkommende fideo besjen:

3) Fia SmartConsole troch it CLI-finster te iepenjen

Alles wat jo hoege te dwaan is it finster iepenje CLI rjocht fan SmartConsole, lykas werjûn yn 'e ôfbylding hjirûnder.

Kontrolearje Point R80.10 API. Behear fia CLI, skripts en mear

Yn dit finster kinne jo fuortendaliks begjinne mei it ynfieren fan API-kommando's.

4) Web Tsjinsten. Brûk HTTPS Post-fersyk (REST API)

Yn ús miening, dit is ien fan de meast kânsrike metoaden, omdat kinne jo "bouwe" hiele applikaasjes basearre op behear tsjinner behear (sorry foar de tautology). Hjirûnder sille wy dizze metoade yn in bytsje mear detaillearje.

Gearfetsje:

  1. API + cli mear geskikt foar minsken dy't wend binne oan Cisco;
  2. API + shell foar it tapassen fan skripts en it útfieren fan routine taken;
  3. REST API foar automatisearring.

De API ynskeakelje

Standert is de API ynskeakele op behearservers mei mear dan 4GB RAM en standalone konfiguraasjes mei mear dan 8GB RAM. Jo kinne de status kontrolearje mei it kommando: api status

As it docht bliken dat de api is útskeakele, dan is it frij maklik om it yn te skeakeljen fia SmartConsole: Behear & Ynstellings> Blades> Management API> Avansearre ynstellings

Kontrolearje Point R80.10 API. Behear fia CLI, skripts en mear

Dan publisearje (Publisearje) feroaret en it kommando útfiere api opnij starte.

Web fersiken + Python

Om API-kommando's út te fieren, kinne jo weboanfragen brûke mei Python en biblioteken fersiken, json. Yn 't algemien bestiet de struktuer fan in webfersyk út trije dielen:

1) Adres

(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) Oanfraach lading

Tekst yn JSON-formaat mei de ferskate parameters

Foarbyld foar it oproppen fan ferskate kommando's:


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

Hjir binne in pear typyske taken dy't jo meast tsjinkomme by it administrearjen fan Check Point.

1) Foarbyld fan autorisaasje- en útlogfunksjes:

Skrift


    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) De blêden oansette en it netwurk ynstelle:

Skrift


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) Feroarje firewall regels:

Skrift


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) Tapassingslaach taheakje:

Skrift


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) Publisearje en set it belied yn, kontrolearje de útfiering fan it kommando (taak-id):

Skrift


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) Foegje host ta:

Skrift


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) Foegje in fjild foar bedrigingsprevinsje ta:

Skrift


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) Besjoch de list mei sesjes

Skrift


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) Meitsje in nij profyl:

Skrift


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) Feroarje de aksje foar de IPS-hântekening:

Skrift


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) Foegje jo tsjinst ta:

Skrift


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) Foegje in kategory, side of groep ta:

Skrift


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

Boppedat, mei help WebAPI jo kinne netwurken, hosts, tagongsrollen, ensfh. Blades kinne wurde oanpast Antivirus, Antibot, IPS, VPN. It is sels mooglik om lisinsjes te ynstallearjen mei it kommando run-skript. Alle Check Point API-kommando's binne hjir te finen hjir.

Check Point API + Postman

Ek handich om te brûken Check Point Web API yn gearhing mei Postrinner. Postman hat buroblêdferzjes foar Windows, Linux en MacOS. Derneist is d'r in plugin foar Google Chrome. Dit is wat wy sille brûke. Earst moatte jo Postman fine yn 'e Google Chrome Store en ynstallearje:

Kontrolearje Point R80.10 API. Behear fia CLI, skripts en mear

Mei dit helpmiddel kinne wy ​​weboanfragen generearje nei de Check Point API. Om net alle API-kommando's te ûnthâlden, is it mooglik om saneamde kolleksjes (sjabloanen) te ymportearjen, dy't al alle nedige kommando's befetsje:

Kontrolearje Point R80.10 API. Behear fia CLI, skripts en mear

it is Do silst fine samling foar R80.10. Nei it ymportearjen sille API-kommando-sjabloanen foar ús beskikber wurde:

Kontrolearje Point R80.10 API. Behear fia CLI, skripts en mear

Neffens my is dit heul handich. Jo kinne fluch begjinne mei it ûntwikkeljen fan applikaasjes mei de Check Point API.

Kontrolearje Point + Ansible

Ik soe ek graach konstatearje dat der is Sible module foar CheckPoint API. De module lit jo konfiguraasjes beheare, mar it is net sa handich foar it oplossen fan eksoatyske problemen. Skripten skriuwe yn elke programmeartaal leveret fleksibeler en handige oplossingen.

konklúzje

Dit is wêr't wy wierskynlik ús koarte resinsje fan 'e Check Point API sille ôfmeitsje. Yn myn miening wie dizze funksje heul lang ferwachte en needsaaklik. It ûntstean fan 'e API iepenet heul brede kânsen foar sawol systeembehearders as systeemintegrators dy't wurkje mei Check Point-produkten. Orkestraasje, automatisearring, SIEM-feedback ... it is no allegear mooglik.

PS Mear artikels oer Check Point lykas altyd kinne jo it fine op ús blog Habr of op it blog by side.

PSS Foar technyske fragen yn ferbân mei it ynstellen fan Check Point, kinne jo hjir

Allinnich registrearre brûkers kinne meidwaan oan 'e enkête. Ynlogge, asjebleaft.

Binne jo fan plan om de API te brûken?

  • 70,6%Ja12

  • 23,5%nr4

  • 5,9%Al brûkt 1

17 brûkers stimden. 3 brûkers ûntholden har.

Boarne: www.habr.com

Add a comment