Check Point R80.10 API. Hantering via CLI, skript och mer

Check Point R80.10 API. Hantering via CLI, skript och mer

Jag Ă€r sĂ€ker pĂ„ att alla som nĂ„gonsin har arbetat med Check Point, har haft en klagan angĂ„ende impossibiliteten att redigera konfigurationen frĂ„n kommandoraden. Detta Ă€r sĂ€rskilt galet för dem som tidigare har arbetat med Cisco ASA, dĂ€r allt kan konfigureras i CLI. Med Check Point Ă€r det motsatt — alla sĂ€kerhetsinstĂ€llningar görs enbart via det grafiska grĂ€nssnittet. Men vissa saker Ă€r verkligen obekvĂ€ma att göra via GUI (Ă€ven ett sĂ„ anvĂ€ndarvĂ€nligt som Check Points). Till exempel, att lĂ€gga till 100 nya vĂ€rdar eller nĂ€tverk blir en lĂ„ng och trĂ„kig procedur. För varje objekt mĂ„ste man klicka flera gĂ„nger och skriva in IP-adressen. Samma sak gĂ€ller för att skapa en webbplatsgrupp eller massaktivera/ inaktivera IPS-signaturer. Det finns en stor risk att göra ett misstag.

Nyligen hÀnde det ett "mirakel". Med utgivningen av den nya versionen Gaia R80 annonserades möjligheten att anvÀnda API, vilket öppnar upp för omfattande möjligheter för automatisering av instÀllningar, administration, övervakning etc. Nu kan man:

  • skapa objekt;
  • lĂ€gga till eller redigera access-listor;
  • aktivera/deaktivera blades;
  • konfigurera nĂ€tverksgrĂ€nssnitt;
  • installera policies;
  • och mycket mer.

Ärligt talat, jag förstĂ„r inte hur denna nyhet kan ha gĂ„tt förbi Habr. I denna artikel kommer vi kort att beskriva hur man anvĂ€nder API och ge nĂ„gra praktiska exempel pĂ„ CheckPoint-konfiguration med hjĂ€lp av skript..

Jag vill direkt pÄpeka att API anvÀnds endast för Management-servern. Det vill sÀga, det Àr fortfarande omöjligt att hantera gateways utan Management-server.

Vem kan i princip ha nytta av detta API?

  1. Systemadministratörer som vill förenkla eller automatisera rutinuppgifter med Check Point;
  2. Företag som vill integrera Check Point med andra lösningar (virtualiseringssystem, tickethanteringssystem, konfigurationshanteringssystem etc.);
  3. Systemintegratörer som vill standardisera instÀllningar eller skapa ytterligare produkter relaterade till Check Point.

Typisk schema

SÄ, lÄt oss förestÀlla oss ett typiskt schema med Check Point:

Check Point R80.10 API. Hantering via CLI, skript och mer

Som vanligt har vi en gateway (SG), en managementserver (SMS) och administratörskonsolen (SmartConsole). Normalt ser processen för att konfigurera gatewayen ut sÄ hÀr:

Check Point R80.10 API. Hantering via CLI, skript och mer

Det vill sÀga, först mÄste du starta SmartConsole, genom vilken vi ansluter till Management-servern (SMS). PÄ SMS utförs sÀkerhetsinstÀllningar, och sedan tillÀmpas (install policy) pÄ gateway (SG).

NÀr du anvÀnder Management API, vi kan i princip hoppa över första steget (starta SmartConsole) och tillÀmpa API-kommandon direkt till Management-servern (SMS).

SÀtt att anvÀnda API

För att Àndra konfigurationen via API finns det fyra huvudsakliga metoder:

1) Genom anvÀndning av verktyget mgmt_cli

Exempel — # mgmt_cli add host name host1 ip-address 192.168.2.100
Detta kommando körs frĂ„n kommandoraden pĂ„ Management-servern (SMS). Syntaxen för kommandot Ă€r tydlig — host1 skapas med adressen 192.168.2.100.

2) Ange API-kommandon genom clish (i expertlÀge)

I princip Àr allt du behöver att logga in i kommandoraden (mgmt login) med det konto som anvÀnds vid anslutning via SmartConsole (eller root-konto). DÀrefter kan du ange API-kommandon (i det hÀr fallet Àr det inte nödvÀndigt att anvÀnda verktyget mgmt_cli). Du kan skapa fullt fungerande BASH-skript. Exempel pÄ ett skript som skapar en vÀrd:

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

Om du Àr intresserad kan du se motsvarande video:

Spela video

3) Via SmartConsole, öppna CLI-fönstret

Allt du behöver göra Àr att starta fönstret CLI direkt frÄn SmartConsole, som visas pÄ bilden nedan.

Check Point R80.10 API. Hantering via CLI, skript och mer

I detta fönster kan du omedelbart börja ange API-kommandon.

4) Web Services. AnvÀnd HTTPS Post begÀran (REST API)

Enligt vÄr Äsikt Àr detta en av de mest lovande metoderna, eftersom den möjliggör att 'bygga' hela applikationer för hantering av huvudservern (ursÀkta upprepningen). Nedan kommer vi att titta nÀrmare pÄ denna metod.

Om vi sammanfattar:

  1. API + cli passar bÀttre för personer som Àr vana vid Cisco;
  2. API + shell för att anvÀnda skript och utföra rutinuppgifter;
  3. REST API för automatisering.

Aktivering av API

Som standard Àr API aktiverat pÄ managementservrar med mer Àn 4 GB RAM och standalone-konfigurationer med mer Àn 8 GB RAM. Du kan kontrollera statusen med kommandot: api status

Om det visar sig att API Àr avstÀngt kan det enkelt aktiveras via SmartConsole: Manage & Settings > Blades > Management API > Advanced Settings

Check Point R80.10 API. Hantering via CLI, skript och mer

DÀrefter publicera (Publish) Àndringar och utföra kommandot api restart.

WebbförfrÄgningar + Python

För att utföra API-kommandon kan du anvÀnda webbförfrÄgningar tillsammans med Python och bibliotek requests, json. I allmÀnhet bestÄr strukturen för webbförfrÄgningar av tre delar:

1) Adress

(https://<management 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) BegÀrningspayload

Text i JSON-format som innehÄller olika parametrar

Exempel pÄ anrop av olika kommandon:


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

LÄt oss ge nÄgra typiska uppgifter som man ofta stöter pÄ vid administration av Check Point.

1) Exempel pÄ inloggnings- och utloggningsfunktioner:

Skript


    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) Aktivering av blade och nÀtverksinstÀllningar:

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) Ändring av brandvĂ€ggsregler:

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) TillÀgg av applikationslager:

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) Publicera och installera policy, kontrollera utförandet av kommandot (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) LÀgg till vÀrd:

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) LÀgg till fÀlt för hotförebyggande:

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) Visa lista över sessioner

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) Skapa en ny 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) Byt ÄtgÀrd för IPS-signatur:

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) LÀgg till din tjÀnst:

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) LĂ€gg till kategori, webbplats eller grupp:

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

Dessutom, med hjÀlp av Web API du kan lÀgga till och ta bort nÀtverk, vÀrdar, Ätkomstroller osv. Det finns möjlighet att konfigurera bladhÄl. Antivirus, Antibot, IPS, VPN. Det Àr Àven möjligt att installera licenser med hjÀlp av kommandot run-script. Alla API-kommandon frÄn Check Point kan ses hÀr.

Check Point API + Postman

Det Àr ocksÄ bekvÀmt att anvÀnda Check Point Web API i samarbete med Postman. Postman har desktopversioner för Windows, Linux och MacOS. Dessutom finns det ett tillÀgg för Google Chrome. Det Àr det vi kommer att anvÀnda. Först mÄste du hitta Postman i Google Chrome Store och installera:

Check Point R80.10 API. Hantering via CLI, skript och mer

Med det hÀr verktyget kan vi formulera webbförfrÄgningar till Check Point API. För att slippa memorera alla API-kommandon finns det möjlighet att importera sÄ kallade collections (mallar) som redan innehÄller alla nödvÀndiga kommandon:

Check Point R80.10 API. Hantering via CLI, skript och mer

HÀr du hittar collection för R80.10. Efter importen blir mallarna för API-kommandon tillgÀngliga för oss:

Check Point R80.10 API. Hantering via CLI, skript och mer

Enligt min mening Àr det mycket bekvÀmt. Man kan snabbt börja utveckla applikationer med Check Point API.

Check Point + Ansible

Jag vill ocksÄ pÄpeka att det finns Ansible modul för CheckPoint API. Modulen möjliggör hantering av konfigurationer, men den Àr inte sÄ anvÀndbar för att lösa exotiska uppgifter. Att skriva skript pÄ vilket programmeringssprÄk som helst ger mer flexibla och bekvÀmare lösningar.

Utdata

HĂ€rmed avslutar vi vĂ„r lilla översikt av Check Point API. Enligt min mening var denna funktion mycket efterlĂ€ngtad och nödvĂ€ndig. FramtrĂ€dandet av API öppnar mycket stora möjligheter bĂ„de för systemadministratörer och systemintegratörer som arbetar med produkter frĂ„n Check Point. Orkestrering, automatisering, feedback med SIEM
 allt detta Ă€r nu möjligt.

P.S. Fler artiklar om Check Point kan du alltid hitta i vÄr blogg Habr eller i bloggen pÄ webbplats.

P.S.S. Tekniska frÄgor om konfigureringen av Check Point kan stÀllas hÀr

Endast registrerade anvÀndare kan delta i omröstningen. Logga in, tack.

Planerar du att anvÀnda API?

  • 70,6%Ja12

  • 23,5%Nej4

  • 5,9%AnvĂ€nder redan1

17 anvÀndare har röstat. 3 anvÀndare avstod.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster