Check Point R80.10 API. Kontrol sa pamamagitan ng CLI, mga script at higit pa

Check Point R80.10 API. Kontrol sa pamamagitan ng CLI, mga script at higit pa

Sigurado ako na lahat ng nakatrabaho Suriin ang Point, may reklamo tungkol sa imposibilidad ng pag-edit ng configuration mula sa command line. Ito ay kakaiba lalo na para sa mga dati nang nagtrabaho sa Cisco ASA, kung saan ganap na lahat ay maaaring i-configure sa CLI. Sa Check Point, baligtad ito - lahat ng mga setting ng seguridad ay ginawa ng eksklusibo mula sa graphical na interface. Gayunpaman, ang ilang mga bagay ay ganap na hindi maginhawang gawin sa pamamagitan ng GUI (kahit isa na kasing maginhawa ng Check Point's). Halimbawa, ang gawain ng pagdaragdag ng 100 bagong host o network ay nagiging isang mahaba at nakakapagod na pamamaraan. Para sa bawat bagay kailangan mong i-click ang mouse nang maraming beses at ipasok ang IP address. Ang parehong napupunta para sa paglikha ng isang pangkat ng mga site o mass pagpapagana/hindi pagpapagana ng mga lagda ng IPS. Sa kasong ito, may mataas na posibilidad na magkamali.

Isang "himala" ang nangyari kamakailan. Sa paglabas ng bagong bersyon Gaia R80 ang pagkakataon ay inihayag Paggamit ng API, na nagbubukas ng malawak na pagkakataon para sa pag-automate ng mga setting, pangangasiwa, pagsubaybay, atbp. Ngayon ay maaari ka nang:

  • lumikha ng mga bagay;
  • magdagdag o mag-edit ng mga listahan ng access;
  • paganahin / huwag paganahin ang mga blades;
  • i-configure ang mga interface ng network;
  • mga patakaran sa pag-install;
  • at marami pang iba.

Sa totoo lang, hindi ko maintindihan kung paano ipinasa ni Habr ang balitang ito. Sa artikulong ito, maikling ilalarawan namin kung paano gamitin ang API at magbigay ng ilang praktikal na halimbawa. Mga setting ng CheckPoint gamit ang mga script.

Gusto kong magpareserba kaagad na ang API ay ginagamit lamang para sa server ng Pamamahala. Yung. Imposible pa ring pamahalaan ang mga gateway nang walang server ng Pamamahala.

Sino ang maaaring gumamit ng API na ito sa prinsipyo?

  1. Mga administrator ng system na gustong pasimplehin o i-automate ang mga nakagawiang gawain sa pagsasaayos ng Check Point;
  2. Mga kumpanyang gustong isama ang Check Point sa iba pang mga solusyon (virtualization system, ticket system, configuration management system, atbp.);
  3. Mga system integrator na gustong i-standardize ang mga setting o gumawa ng mga karagdagang produkto na nauugnay sa Check Point.

Karaniwang pamamaraan

Kaya, isipin natin ang isang karaniwang pamamaraan na may Check Point:

Check Point R80.10 API. Kontrol sa pamamagitan ng CLI, mga script at higit pa

Gaya ng dati, mayroon kaming gateway (SG), server ng pamamahala (SMS) at admin console (SmartConsole). Sa kasong ito, ang karaniwang proseso ng pagsasaayos ng gateway ay ganito:

Check Point R80.10 API. Kontrol sa pamamagitan ng CLI, mga script at higit pa

Yung. Una kailangan mong tumakbo sa computer ng administrator SmartConsole, kung saan kumokonekta kami sa server ng Pamamahala (SMS). Ang mga setting ng seguridad ay ginawa sa SMS, at pagkatapos lamang ilapat (patakaran sa pag-install) sa gateway (SG).

Kapag ginagamit ang Management API, maaari nating laktawan ang unang punto (ilunsad ang SmartConsole) at gamitin Mga utos ng API direkta sa Management server (SMS).

Mga paraan ng paggamit ng API

Mayroong apat na pangunahing paraan upang i-edit ang configuration gamit ang API:

1) Gamit ang mgmt_cli utility

Halimbawa - # mgmt_cli magdagdag ng host name host1 ip-address 192.168.2.100
Ang command na ito ay pinapatakbo mula sa Management Server (SMS) command line. Sa tingin ko ang syntax ng command ay malinaw - ang host1 ay nilikha gamit ang address na 192.168.2.100.

2) Ipasok ang mga utos ng API sa pamamagitan ng clish (sa expert mode)

Karaniwan, ang kailangan mo lang gawin ay mag-log in sa command line (mgmt login) sa ilalim ng account na ginagamit kapag kumokonekta sa pamamagitan ng SmartConsole (o root account). Pagkatapos ay maaari kang pumasok Mga utos ng API (sa kasong ito ay hindi na kailangang gamitin ang utility bago ang bawat command mgmt_cli). Maaari kang lumikha ng ganap Mga script ng BASH. Isang halimbawa ng script na ginawa ng host:

Bash script

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

Kung interesado ka, maaari mong panoorin ang kaukulang video:

3) Sa pamamagitan ng SmartConsole sa pamamagitan ng pagbubukas ng CLI window

Ang kailangan mo lang gawin ay buksan ang bintana CLI diretso mula sa SmartConsole, tulad ng ipinapakita sa larawan sa ibaba.

Check Point R80.10 API. Kontrol sa pamamagitan ng CLI, mga script at higit pa

Sa window na ito, maaari mong simulan kaagad ang pagpasok ng mga API command.

4) Mga Serbisyo sa Web. Gamitin ang HTTPS Post request (REST API)

Sa aming opinyon, ito ay isa sa mga pinaka-promising na pamamaraan, dahil nagbibigay-daan sa iyo na "bumuo" ng buong mga application batay sa pamamahala ng pamamahala ng server (paumanhin para sa tautolohiya). Sa ibaba ay titingnan natin ang pamamaraang ito nang mas detalyado.

Upang ibuod:

  1. API + cli mas angkop para sa mga taong sanay sa Cisco;
  2. API + shell para sa paglalapat ng mga script at pagsasagawa ng mga nakagawiang gawain;
  3. REST API para sa automation.

Paganahin ang API

Bilang default, pinagana ang API sa mga server ng pamamahala na may higit sa 4GB ng RAM at mga standalone na configuration na may higit sa 8GB ng RAM. Maaari mong suriin ang katayuan gamit ang command: katayuan ng api

Kung ito ay lumabas na ang api ay hindi pinagana, kung gayon ito ay medyo madali upang paganahin ito sa pamamagitan ng SmartConsole: Pamahalaan at Mga Setting > Blades > Management API > Mga Advanced na Setting

Check Point R80.10 API. Kontrol sa pamamagitan ng CLI, mga script at higit pa

Pagkatapos ay i-publish (Maglathala) pagbabago at patakbuhin ang utos i-restart ang api.

Mga kahilingan sa web + Python

Upang maisagawa ang mga utos ng API, maaari mong gamitin ang mga kahilingan sa Web gamit ang Sawa at mga aklatan kahilingan, json. Sa pangkalahatan, ang istraktura ng isang kahilingan sa web ay binubuo ng tatlong bahagi:

1) Address

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


2) Mga Header ng HTTP

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


3) Humiling ng payload

Text sa JSON format na naglalaman ng iba't ibang parameter

Halimbawa para sa pagtawag sa iba't ibang mga utos:


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

Narito ang ilang tipikal na gawain na madalas mong nararanasan kapag nangangasiwa ng Check Point.

1) Halimbawa ng mga function ng awtorisasyon at pag-logout:

Script


    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) Pag-on sa mga blades at pag-set up ng network:

Script


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) Pagbabago ng mga panuntunan sa firewall:

Script


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

Script


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) I-publish at itakda ang patakaran, suriin ang pagpapatupad ng command (task-id):

Script


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) Magdagdag ng host:

Script


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) Magdagdag ng field ng Pag-iwas sa Banta:

Script


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) Tingnan ang listahan ng mga session

Script


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) Lumikha ng bagong profile:

Script


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) Baguhin ang aksyon para sa IPS signature:

Script


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) Idagdag ang iyong serbisyo:

Script


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) Magdagdag ng kategorya, site o grupo:

Script


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

Bilang karagdagan, sa tulong WebAPI maaari kang magdagdag at mag-alis ng mga network, host, mga tungkulin sa pag-access, atbp. Maaaring ipasadya ang mga blades Antivirus, Antibot, IPS, VPN. Posible ring mag-install ng mga lisensya gamit ang command run-script. Ang lahat ng mga utos ng Check Point API ay matatagpuan dito dito.

Check Point API + Postman

Maginhawa ring gamitin Check Point Web API kasabay ng Kartero. Ang Postman ay may mga desktop na bersyon para sa Windows, Linux at MacOS. Bilang karagdagan, mayroong isang plugin para sa Google Chrome. Ito ang ating gagamitin. Una kailangan mong hanapin ang Postman sa Google Chrome Store at i-install:

Check Point R80.10 API. Kontrol sa pamamagitan ng CLI, mga script at higit pa

Gamit ang utility na ito, makakabuo kami ng mga kahilingan sa Web sa Check Point API. Upang hindi matandaan ang lahat ng mga utos ng API, posibleng mag-import ng tinatawag na mga koleksyon (mga template), na naglalaman na ng lahat ng kinakailangang mga utos:

Check Point R80.10 API. Kontrol sa pamamagitan ng CLI, mga script at higit pa

Dito mahahanap mo koleksyon para sa R80.10. Pagkatapos mag-import, magiging available sa amin ang mga template ng command ng API:

Check Point R80.10 API. Kontrol sa pamamagitan ng CLI, mga script at higit pa

Sa palagay ko, ito ay napaka-maginhawa. Maaari mong mabilis na simulan ang pagbuo ng mga application gamit ang Check Point API.

Check Point + Ansible

Gusto ko ring tandaan na mayroon Ansible module para sa CheckPoint API. Pinapayagan ka ng module na pamahalaan ang mga pagsasaayos, ngunit hindi ito maginhawa para sa paglutas ng mga kakaibang problema. Ang pagsulat ng mga script sa anumang programming language ay nagbibigay ng mas nababaluktot at maginhawang solusyon.

Pagbubuhos

Dito marahil ay tatapusin natin ang ating maikling pagsusuri sa Check Point API. Sa aking opinyon, ang tampok na ito ay napakatagal na hinihintay at kinakailangan. Ang paglitaw ng API ay nagbubukas ng napakalawak na pagkakataon para sa parehong mga administrator ng system at mga integrator ng system na nagtatrabaho sa mga produkto ng Check Point. Orkestrasyon, automation, feedback ng SIEM... posible na ang lahat ngayon.

PS Higit pang mga artikulo tungkol sa Suriin ang Point gaya ng dati makikita mo ito sa aming blog Habr o sa blog sa Online.

PSS Para sa mga teknikal na tanong na may kaugnayan sa pag-set up ng Check Point, maaari mong dito

Ang mga rehistradong user lamang ang maaaring lumahok sa survey. Mag-sign in, pakiusap

Nagpaplano ka bang gamitin ang API?

  • 70,6%Oo12

  • 23,5%No4

  • 5,9%Gumagamit na ng1

17 mga gumagamit ang bumoto. 3 user ang umiwas.

Pinagmulan: www.habr.com

Magdagdag ng komento