Check Point R80.10 API. Styring via CLI, skript og mer

Check Point R80.10 API. Styring via CLI, skript og mer

Jeg er sikker på at alle som noen gang har jobbet med Check Point, var det en klage på umulig å redigere konfigurasjonen fra kommandolinjen. Dette er spesielt merkelig for de som tidligere har jobbet med Cisco ASA, hvor absolutt alt kan konfigureres i CLI. Med Check Point er det omvendt - alle sikkerhetsinnstillinger ble utført utelukkende fra det grafiske grensesnittet. Noen ting er imidlertid helt upraktiske å gjøre gjennom GUI (selv en så praktisk som Check Points). For eksempel blir oppgaven med å legge til 100 nye verter eller nettverk til en lang og kjedelig prosedyre. For hvert objekt må du klikke med musen flere ganger og angi IP-adressen. Det samme gjelder for å opprette en gruppe nettsteder eller masseaktivere/deaktivere IPS-signaturer. I dette tilfellet er det stor sannsynlighet for å gjøre en feil.

Et "mirakel" skjedde relativt nylig. Med utgivelsen av den nye versjonen Gaia 80 kr muligheten ble annonsert API-bruk, som åpner for store muligheter for automatisering av innstillinger, administrasjon, overvåking osv. Nå kan du:

  • lage objekter;
  • legge til eller redigere tilgangslister;
  • aktivere/deaktivere blader;
  • konfigurere nettverksgrensesnitt;
  • installere retningslinjer;
  • og mye mer.

For å være ærlig forstår jeg ikke hvordan denne nyheten gikk forbi Habr. I denne artikkelen vil vi kort beskrive hvordan du bruker API og gi flere praktiske eksempler. CheckPoint-innstillinger ved hjelp av skript.

Jeg vil med en gang ta en reservasjon om at API-en kun brukes for administrasjonsserveren. De. Det er fortsatt umulig å administrere gatewayer uten en administrasjonsserver.

Hvem kan bruke denne API-en i prinsippet?

  1. Systemadministratorer som ønsker å forenkle eller automatisere rutinemessige Check Point-konfigurasjonsoppgaver;
  2. Bedrifter som ønsker å integrere Check Point med andre løsninger (virtualiseringssystemer, billettsystemer, konfigurasjonsstyringssystemer, etc.);
  3. Systemintegratorer som ønsker å standardisere innstillinger eller lage flere Check Point-relaterte produkter.

Typisk opplegg

Så la oss forestille oss et typisk opplegg med Check Point:

Check Point R80.10 API. Styring via CLI, skript og mer

Som vanlig har vi en gateway (SG), administrasjonsserver (SMS) og administrasjonskonsoll (SmartConsole). I dette tilfellet ser den vanlige gateway-konfigurasjonsprosessen slik ut:

Check Point R80.10 API. Styring via CLI, skript og mer

De. Først må du kjøre på administratorens datamaskin SmartConsole, som vi kobler til administrasjonsserveren med (SMS). Sikkerhetsinnstillinger gjøres på SMS, og brukes først da (installeringspolicy) til gateway (SG).

Ved bruk Management API, kan vi i utgangspunktet hoppe over det første punktet (starte SmartConsole) og bruke API-kommandoer direkte til administrasjonsserveren (SMS).

Måter å bruke API

Det er fire hovedmåter å redigere konfigurasjonen ved å bruke API:

1) Bruke mgmt_cli-verktøyet

Eksempel - # mgmt_cli legg til vertsnavn host1 ip-adresse 192.168.2.100
Denne kommandoen kjøres fra kommandolinjen Management Server (SMS). Jeg tror syntaksen til kommandoen er klar - host1 er opprettet med adressen 192.168.2.100.

2) Skriv inn API-kommandoer via clish (i ekspertmodus)

I utgangspunktet er alt du trenger å gjøre å logge på kommandolinjen (mgmt pålogging) under kontoen som brukes ved tilkobling via SmartConsole (eller root-konto). Da kan du gå inn API-kommandoer (i dette tilfellet er det ikke nødvendig å bruke verktøyet før hver kommando mgmt_cli). Du kan lage fullverdig BASH-skript. Et eksempel på et skript som verten lager:

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 interessert, kan du se den tilhørende videoen:

3) Via SmartConsole ved å åpne CLI-vinduet

Alt du trenger å gjøre er å åpne vinduet CLI rett fra SmartConsole, som vist på bildet nedenfor.

Check Point R80.10 API. Styring via CLI, skript og mer

I dette vinduet kan du umiddelbart begynne å legge inn API-kommandoer.

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

Etter vår mening er dette en av de mest lovende metodene, fordi lar deg "bygge" hele applikasjoner basert på administrasjonsserveradministrasjon (beklager tautologien). Nedenfor skal vi se på denne metoden litt mer detaljert.

Å oppsummere:

  1. API + cli mer egnet for folk som er vant til Cisco;
  2. API + skall for å bruke skript og utføre rutineoppgaver;
  3. REST API for automatisering.

Aktivering av API

Som standard er API-en aktivert på administrasjonsservere med mer enn 4 GB RAM og frittstående konfigurasjoner med mer enn 8 GB RAM. Du kan sjekke statusen ved å bruke kommandoen: api-status

Hvis det viser seg at API-en er deaktivert, er det ganske enkelt å aktivere det via SmartConsole: Administrer og innstillinger > Blades > Management API > Avanserte innstillinger

Check Point R80.10 API. Styring via CLI, skript og mer

Deretter publiserer (Publiser) endringer og kjør kommandoen api omstart.

Nettforespørsler + Python

For å utføre API-kommandoer kan du bruke nettforespørsler ved å bruke Python og biblioteker forespørsler, JSON. Generelt består strukturen til en nettforespørsel av tre deler:

1) Adresse

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


2) HTTP-hoder

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


3) Be om nyttelast

Tekst i JSON-format som inneholder de forskjellige parameterne

Eksempel for å ringe ulike 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 noen typiske oppgaver som du oftest møter når du administrerer Check Point.

1) Eksempel på autorisasjons- og utloggingsfunksjoner:

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å knivene og sette opp nettverket:

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) Endre brannmurregler:

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) Legge til applikasjonslag:

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) Publiser og sett policyen, sjekk utførelsen av kommandoen (oppgave-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) Legg til vert:

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) Legg til et felt for trusselforebygging:

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 listen over økter

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) Opprett 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) Endre handlingen for 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) Legg til tjenesten din:

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) Legg til en kategori, et nettsted eller en gruppe:

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

I tillegg med hjelp Web-API du kan legge til og fjerne nettverk, verter, tilgangsroller osv. Bladene kan tilpasses Antivirus, Antibot, IPS, VPN. Det er til og med mulig å installere lisenser ved å bruke kommandoen kjøre-skript. Alle Check Point API-kommandoer finner du her her.

Check Point API + Postman

Også praktisk å bruke Check Point Web API i forbindelse med Postbud. Postman har skrivebordsversjoner for Windows, Linux og MacOS. I tillegg er det en plugin for Google Chrome. Det er dette vi skal bruke. Først må du finne Postman i Google Chrome Store og installere:

Check Point R80.10 API. Styring via CLI, skript og mer

Ved å bruke dette verktøyet vil vi kunne generere nettforespørsler til Check Point API. For ikke å huske alle API-kommandoene, er det mulig å importere såkalte samlinger (maler), som allerede inneholder alle nødvendige kommandoer:

Check Point R80.10 API. Styring via CLI, skript og mer

Her du vil finne samling for R80.10. Etter import vil API-kommandomaler bli tilgjengelige for oss:

Check Point R80.10 API. Styring via CLI, skript og mer

Etter min mening er dette veldig praktisk. Du kan raskt begynne å utvikle applikasjoner ved å bruke Check Point API.

Check Point + Ansible

Jeg vil også bemerke at det er Ansible modul for CheckPoint API. Modulen lar deg administrere konfigurasjoner, men den er ikke så praktisk for å løse eksotiske problemer. Å skrive skript på et hvilket som helst programmeringsspråk gir mer fleksible og praktiske løsninger.

Utgang

Det er her vi sannsynligvis avslutter vår korte gjennomgang av Check Point API. Etter min mening var denne funksjonen veldig etterlengtet og nødvendig. Fremveksten av API åpner for svært brede muligheter for både systemadministratorer og systemintegratorer som jobber med Check Point-produkter. Orkestrering, automatisering, SIEM-tilbakemeldinger... alt er mulig nå.

PS Flere artikler om Check Point som alltid finner du den på bloggen vår Habr eller på bloggen kl nettsted.

PSS For tekniske spørsmål knyttet til oppsett av Check Point kan du her

Kun registrerte brukere kan delta i undersøkelsen. Logg inn, vær så snill.

Planlegger du å bruke API?

  • 70,6%Ja 12

  • 23,5%No4

  • 5,9%Bruker allerede 1

17 brukere stemte. 3 brukere avsto.

Kilde: www.habr.com

Legg til en kommentar