Check Point R80.10 API. Administration via CLI, scripts og mere

Check Point R80.10 API. Administration via CLI, scripts og mere

Jeg er sikker på, at alle, der nogensinde har arbejdet med Check Point, var der en klage over umuligt at redigere konfigurationen fra kommandolinjen. Det er især mærkeligt for dem, der tidligere har arbejdet med Cisco ASA, hvor absolut alt kan konfigureres i CLI. Med Check Point er det omvendt - alle sikkerhedsindstillinger blev udelukkende udført fra den grafiske grænseflade. Nogle ting er dog fuldstændig ubelejlige at gøre gennem GUI (selv en så praktisk som Check Points). For eksempel bliver opgaven med at tilføje 100 nye værter eller netværk til en lang og kedelig procedure. For hvert objekt skal du klikke med musen flere gange og indtaste IP-adressen. Det samme gælder for at oprette en gruppe af websteder eller masseaktivere/deaktivere IPS-signaturer. I dette tilfælde er der stor sandsynlighed for at lave en fejl.

Et "mirakel" skete relativt for nylig. Med udgivelsen af ​​den nye version Gaia 80 kr muligheden blev annonceret API-brug, hvilket åbner op for brede muligheder for automatisering af indstillinger, administration, overvågning mv. Nu kan du:

  • skabe objekter;
  • tilføje eller redigere adgangslister;
  • aktivere/deaktivere klinger;
  • konfigurere netværksgrænseflader;
  • installere politikker;
  • og meget mere.

For at være ærlig forstår jeg ikke, hvordan denne nyhed gik forbi Habr. I denne artikel vil vi kort beskrive, hvordan du bruger API'et og give flere praktiske eksempler. CheckPoint-indstillinger ved hjælp af scripts.

Jeg vil gerne tage en reservation med det samme, at API'en kun bruges til Management-serveren. De der. Det er stadig umuligt at administrere gateways uden en Management-server.

Hvem kan bruge denne API i princippet?

  1. Systemadministratorer, der ønsker at forenkle eller automatisere rutinemæssige Check Point-konfigurationsopgaver;
  2. Virksomheder, der ønsker at integrere Check Point med andre løsninger (virtualiseringssystemer, billetsystemer, konfigurationsstyringssystemer osv.);
  3. Systemintegratorer, der ønsker at standardisere indstillinger eller oprette yderligere Check Point-relaterede produkter.

Typisk ordning

Så lad os forestille os et typisk skema med Check Point:

Check Point R80.10 API. Administration via CLI, scripts og mere

Som sædvanlig har vi en gateway (SG), administrationsserver (SMS) og administrationskonsol (SmartConsole). I dette tilfælde ser den sædvanlige gateway-konfigurationsproces sådan ud:

Check Point R80.10 API. Administration via CLI, scripts og mere

De der. Først skal du køre på administratorens computer SmartConsole, som vi forbinder til administrationsserveren med (SMS). Sikkerhedsindstillinger foretages på SMS'en og anvendes først derefter (installationspolitik) til gateway (SG).

Ved brug af Management API, kan vi stort set springe det første punkt over (start SmartConsole) og bruge API-kommandoer direkte til Management-serveren (SMS).

Måder at bruge API

Der er fire hovedmåder til at redigere konfigurationen ved hjælp af API'en:

1) Brug af værktøjet mgmt_cli

Eksempel - # mgmt_cli tilføj værtsnavn host1 ip-adresse 192.168.2.100
Denne kommando køres fra kommandolinjen Management Server (SMS). Jeg tror, ​​at kommandoens syntaks er klar - host1 er oprettet med adressen 192.168.2.100.

2) Indtast API-kommandoer via clish (i eksperttilstand)

Grundlæggende er alt hvad du skal gøre at logge ind på kommandolinjen (mgmt login) under den konto, der bruges ved tilslutning via SmartConsole (eller root-konto). Så kan du komme ind API-kommandoer (i dette tilfælde er det ikke nødvendigt at bruge værktøjet før hver kommando mgmt_cli). Du kan skabe fuldgyldige BASH scripts. Et eksempel på et script, som værten opretter:

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

Hvis du er interesseret, kan du se den tilsvarende video:

3) Via SmartConsole ved at åbne CLI-vinduet

Alt du skal gøre er at åbne vinduet CLI lige fra SmartConsole, som vist på billedet nedenfor.

Check Point R80.10 API. Administration via CLI, scripts og mere

I dette vindue kan du straks begynde at indtaste API-kommandoer.

4) Webtjenester. Brug HTTPS Post request (REST API)

Efter vores mening er dette en af ​​de mest lovende metoder, fordi giver dig mulighed for at "bygge" hele applikationer baseret på management server management (beklager tautologien). Nedenfor vil vi se på denne metode lidt mere detaljeret.

At opsummere:

  1. API + cli mere velegnet til folk, der er vant til Cisco;
  2. API + shell til at anvende scripts og udføre rutineopgaver;
  3. REST-API til automatisering.

Aktivering af API

Som standard er API'en aktiveret på administrationsservere med mere end 4 GB RAM og selvstændige konfigurationer med mere end 8 GB RAM. Du kan kontrollere status ved hjælp af kommandoen: api status

Hvis det viser sig, at api'et er deaktiveret, så er det ret nemt at aktivere det via SmartConsole: Administrer og indstillinger > Blades > Management API > Avancerede indstillinger

Check Point R80.10 API. Administration via CLI, scripts og mere

Udgiv derefter (Udgiv) ændringer og kør kommandoen api genstart.

Webanmodninger + Python

For at udføre API-kommandoer kan du bruge webanmodninger vha Python og biblioteker anmodninger, json. Generelt består strukturen af ​​en webanmodning af tre dele:

1) Adresse

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


2) HTTP-headere

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


3) Anmod om nyttelast

Tekst i JSON-format, der indeholder de forskellige parametre

Eksempel på opkald af forskellige kommandoer:


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

Her er et par typiske opgaver, som du oftest støder på, når du administrerer Check Point.

1) Eksempel på autorisations- og logoutfunktioner:

Manuskript


    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) Tænd for knivene og opsætning af netværket:

Manuskript


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 af firewall-regler:

Manuskript


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) Tilføjelse af applikationslag:

Manuskript


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) Udgiv og indstil politikken, kontroller udførelsen af ​​kommandoen (opgave-id):

Manuskript


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) Tilføj vært:

Manuskript


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) Tilføj et felt til forebyggelse af trusler:

Manuskript


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 listen over sessioner

Manuskript


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) Opret en ny profil:

Manuskript


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) Rediger handlingen for IPS-signaturen:

Manuskript


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) Tilføj din tjeneste:

Manuskript


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) Tilføj en kategori, et websted eller en gruppe:

Manuskript


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

Derudover med hjælp Web API du kan tilføje og fjerne netværk, værter, adgangsroller osv. Bladene kan tilpasses Antivirus, Antibot, IPS, VPN. Det er endda muligt at installere licenser ved hjælp af kommandoen run-script. Alle Check Point API-kommandoer kan findes her her.

Check Point API + Postmand

Også praktisk at bruge Check Point Web API i forbindelse med Postman. Postman har desktopversioner til Windows, Linux og MacOS. Derudover er der et plugin til Google Chrome. Det er det, vi vil bruge. Først skal du finde Postman i Google Chrome Store og installere:

Check Point R80.10 API. Administration via CLI, scripts og mere

Ved at bruge dette værktøj vil vi være i stand til at generere webanmodninger til Check Point API. For ikke at huske alle API-kommandoer, er det muligt at importere såkaldte samlinger (skabeloner), som allerede indeholder alle de nødvendige kommandoer:

Check Point R80.10 API. Administration via CLI, scripts og mere

Her du vil finde samling for R80.10. Efter import bliver API-kommandoskabeloner tilgængelige for os:

Check Point R80.10 API. Administration via CLI, scripts og mere

Efter min mening er dette meget praktisk. Du kan hurtigt begynde at udvikle applikationer ved hjælp af Check Point API.

Check Point + Ansible

Jeg vil også gerne bemærke, at der er Ansible modul til CheckPoint API. Modulet giver dig mulighed for at administrere konfigurationer, men det er ikke så praktisk til at løse eksotiske problemer. At skrive scripts i et hvilket som helst programmeringssprog giver mere fleksible og bekvemme løsninger.

Output

Det er her, vi formentlig vil afslutte vores korte gennemgang af Check Point API. Efter min mening var denne funktion meget længe ventet og nødvendig. Fremkomsten af ​​API'et åbner op for meget brede muligheder for både systemadministratorer og systemintegratorer, der arbejder med Check Point-produkter. Orkestrering, automatisering, SIEM-feedback... det er alt muligt nu.

PS Flere artikler om Check Point som altid kan du finde det på vores blog Habr eller på bloggen kl Online.

PSS For tekniske spørgsmål i forbindelse med opsætning af Check Point kan du her

Kun registrerede brugere kan deltage i undersøgelsen. Log ind, Vær venlig.

Planlægger du at bruge API'et?

  • 70,6 %Ja 12

  • 23,5 %Nr 4

  • 5,9 %Bruger allerede 1

17 brugere stemte. 3 brugere undlod at stemme.

Kilde: www.habr.com

Tilføj en kommentar