Check Point R80.10 API. Hantering via CLI, skript med mera

Check Point R80.10 API. Hantering via CLI, skript med mera

Jag är säker på att alla som någonsin har arbetat med Check Point, det fanns ett klagomål på omöjlighet att redigera konfigurationen från kommandoraden. Detta är särskilt märkligt för de som tidigare har arbetat med Cisco ASA, där absolut allt kan konfigureras i CLI. Med Check Point är det tvärtom - alla säkerhetsinställningar utfördes uteslutande från det grafiska gränssnittet. Vissa saker är dock helt obekväma att göra via GUI (även en så bekväm som Check Points). Till exempel blir uppgiften att lägga till 100 nya värdar eller nätverk till en lång och tråkig procedur. För varje objekt måste du klicka med musen flera gånger och ange IP-adressen. Detsamma gäller för att skapa en grupp webbplatser eller massaktivera/inaktivera IPS-signaturer. I det här fallet är det stor sannolikhet att göra ett misstag.

Ett "mirakel" hände relativt nyligen. Med lanseringen av den nya versionen Gaia 80 kr möjligheten tillkännagavs API-användning, vilket öppnar för stora möjligheter för automatisering av inställningar, administration, övervakning etc. Nu kan du:

  • skapa objekt;
  • lägga till eller redigera åtkomstlistor;
  • aktivera/avaktivera blad;
  • konfigurera nätverksgränssnitt;
  • installera policyer;
  • и многое другое.

För att vara ärlig förstår jag inte hur denna nyhet passerade Habr. I den här artikeln kommer vi att kortfattat beskriva hur man använder API:t och ge flera praktiska exempel. CheckPoint-inställningar med skript.

Jag skulle vilja göra en reservation omedelbart att API endast används för Management-servern. De där. Det är fortfarande omöjligt att hantera gateways utan en Management-server.

Vem kan använda detta API i princip?

  1. Systemadministratörer som vill förenkla eller automatisera rutinmässiga Check Point-konfigurationsuppgifter;
  2. Företag som vill integrera Check Point med andra lösningar (virtualiseringssystem, biljettsystem, konfigurationshanteringssystem etc.);
  3. Systemintegratörer som vill standardisera inställningar eller skapa ytterligare Check Point-relaterade produkter.

Typiskt schema

Så låt oss föreställa oss ett typiskt schema med Check Point:

Check Point R80.10 API. Hantering via CLI, skript med mera

Som vanligt har vi en gateway (SG), hanteringsserver (SMS) och administratörskonsolen (SmartConsole). I det här fallet ser den vanliga gatewaykonfigurationsprocessen ut så här:

Check Point R80.10 API. Hantering via CLI, skript med mera

De där. Först måste du köra på administratörens dator SmartConsole, med vilken vi ansluter till Management-servern (SMS). Säkerhetsinställningar görs på SMS, och tillämpas först då (installationspolicy) till gateway (SG).

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

Sätt att använda API

Det finns fyra huvudsakliga sätt att redigera konfigurationen med hjälp av API:et:

1) Använda verktyget mgmt_cli

Exempel - # mgmt_cli lägg till värdnamn host1 ip-adress 192.168.2.100
Detta kommando körs från Management Server (SMS) kommandoraden. Jag tror att syntaxen för kommandot är tydlig - host1 skapas med adressen 192.168.2.100.

2) Ange API-kommandon via clish (i expertläge)

I princip allt du behöver göra är att logga in på kommandoraden (mgmt inloggning) under kontot som används vid anslutning via SmartConsole (eller root-konto). Då kan du gå in API-kommandon (i det här fallet finns det inget behov av att använda verktyget före varje kommando mgmt_cli). Du kan skapa fullfjädrad BASH-skript. Ett exempel på ett skript som värden skapar:

Bash manus

#!/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 titta på motsvarande video:

3) Via SmartConsole genom att öppna CLI-fönstret

Allt du behöver göra är att öppna fönstret CLI direkt från SmartConsole, som visas på bilden nedan.

Check Point R80.10 API. Hantering via CLI, skript med mera

I det här fönstret kan du omedelbart börja ange API-kommandon.

4) Webbtjänster. Använd HTTPS Post request (REST API)

Enligt vår mening är detta en av de mest lovande metoderna, eftersom låter dig "bygga" hela applikationer baserat på hantering av serverhantering (ursäkta tautologin). Nedan kommer vi att titta på denna metod lite mer detaljerat.

För att sammanfatta:

  1. API + cli mer lämplig för personer som är vana vid Cisco;
  2. API + skal för att tillämpa skript och utföra rutinuppgifter;
  3. REST API för automatisering.

Aktiverar API

Som standard är API:et aktiverat på hanteringsservrar med mer än 4 GB RAM och fristående konfigurationer med mer än 8 GB RAM. Du kan kontrollera statusen med kommandot: api-status

Om det visar sig att api:n är inaktiverad är det ganska enkelt att aktivera det via SmartConsole: Hantera och inställningar > Blades > Management API > Avancerade inställningar

Check Point R80.10 API. Hantering via CLI, skript med mera

Publicera sedan (Publicera) ändrar och kör kommandot api omstart.

Webbförfrågningar + Python

För att köra API-kommandon kan du använda webbförfrågningar med Python och bibliotek förfrågningar, json. I allmänhet består strukturen av en webbförfrågan av tre delar:

1) Adress

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


2) HTTP-rubriker

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


3) Begär nyttolast

Text i JSON-format som innehåller de olika parametrarna

Exempel för att anropa 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 address GAIA

Här är några typiska uppgifter som du oftast stöter på när du administrerar Check Point.

1) Exempel på behörighets- och utloggningsfunktioner:

Manus


    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) Slå på bladen och ställa in nätverket:

Manus


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) Ändra brandväggsregler:

Manus


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) Lägga till applikationsskikt:

Manus


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 ställ in policyn, kontrollera exekveringen av kommandot (uppgifts-id):

Manus


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:

Manus


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 ett fält för förebyggande av hot:

Manus


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) Se listan över sessioner

Manus


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:

Manus


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) Ändra åtgärden för IPS-signaturen:

Manus


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:

Manus


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 en kategori, webbplats eller grupp:

Manus


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 Web API du kan lägga till och ta bort nätverk, värdar, åtkomstroller etc. Bladen kan anpassas Antivirus, Antibot, IPS, VPN. Det är till och med möjligt att installera licenser med kommandot run-script. Alla Check Point API-kommandon finns här här.

Check Point API + Postman

Också bekväm att använda Check Point Web API i samband med Postman. Postman har stationära versioner för Windows, Linux och MacOS. Dessutom finns det ett plugin för Google Chrome. Detta är vad 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 med mera

Med hjälp av det här verktyget kommer vi att kunna generera webbförfrågningar till Check Point API. För att inte komma ihåg alla API-kommandon är det möjligt att importera så kallade samlingar (mallar), som redan innehåller alla nödvändiga kommandon:

Check Point R80.10 API. Hantering via CLI, skript med mera

Här hittar samling för R80.10. Efter importen blir API-kommandomallar tillgängliga för oss:

Check Point R80.10 API. Hantering via CLI, skript med mera

Enligt min åsikt är detta väldigt bekvämt. Du kan snabbt börja utveckla applikationer med hjälp av Check Point API.

Check Point + Ansible

Jag vill också notera att det finns Ansible modul för CheckPoint API. Modulen låter dig hantera konfigurationer, men den är inte så bekväm för att lösa exotiska problem. Att skriva skript i valfritt programmeringsspråk ger mer flexibla och bekväma lösningar.

Utgång

Det är här vi förmodligen kommer att avsluta vår korta recension av Check Point API. Enligt min mening var denna funktion mycket efterlängtad och nödvändig. Framväxten av API:t öppnar mycket breda möjligheter för både systemadministratörer och systemintegratörer som arbetar med Check Points produkter. Orkesterering, automatisering, SIEM-feedback... allt är möjligt nu.

PS Fler artiklar om Check Point som alltid hittar du den på vår blogg Habr eller på bloggen kl Online.

PSS För tekniska frågor relaterade till att installera Check Point kan du här

Endast registrerade användare kan delta i undersökningen. Logga in, Snälla du.

Planerar du att använda API?

  • 70,6%Ja 12

  • 23,5%Nr 4

  • 5,9%Använder redan 1

17 användare röstade. 3 användare avstod från att rösta.

Källa: will.com

Lägg en kommentar