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

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

Jeg er sikker på at alle som noen gang har jobbet med Check Point, har hatt en klage angående den umulige konfigureringen fra kommandolinjen. Dette er spesielt merkelig for de som tidligere har jobbet med Cisco ASA, hvor absolutt alt kan konfigureres i CLI. Hos Check Point er det motsatt — all sikkerhetskonfigurasjon har tidligere blitt utført utelukkende fra det grafiske grensesnittet. Men noen oppgaver er helt ubehagelige å gjøre gjennom GUI (selv så brukervennlig som den til Check Point). For eksempel kan oppgaven med å legge til 100 nye verter eller nettverk bli en langdryg og kjedelig prosess. For hver objekt må man klikke flere ganger med musen og skrive inn IP-adressen. Det samme gjelder oppretting av nettstedgrupper eller masseaktivering/deaktivering av IPS-signaturer. I tillegg er det stor sannsynlighet for å gjøre feil.

For ikke lenge siden skjedde det et “mirakel”. Med lanseringen av den nye versjonen Gaia R80 ble muligheten annonsert for å bruke API, som åpner opp for mange muligheter for automatisering av innstillinger, administrasjon, overvåking osv. Nå kan man:

  • opprette objekter;
  • legge til eller endre access-lister;
  • aktivere/deaktivere blader;
  • konfigurere nettverksgrensesnitt;
  • installere policyer;
  • og mye mer.

For å være ærlig, forstår jeg ikke hvordan denne nyheten gikk forbi Habr. I denne artikkelen skal vi kort beskrive hvordan man bruker API og gi noen praktiske eksempler på konfigurasjon av CheckPoint med skript.

Jeg vil gjerne presisere at API-et kun brukes for Management-serveren. Det vil si at det fortsatt er umulig å administrere gateways uten en Management-server.

Hvem kan egentlig ha nytte av dette API-et?

  1. Systemadministratorer som ønsker å forenkle eller automatisere rutineoppgaver for konfigurasjon av Check Point;
  2. Selskaper som ønsker å integrere Check Point med andre løsninger (virtualiseringssystemer, ticket-systemer, konfigurasjonsstyringssystemer osv.);
  3. Systemintegratorer som ønsker å standardisere innstillinger eller lage ekstra produkter relatert til Check Point.

Typisk diagram

Så, la oss forestille oss et typisk oppsett med Check Point:

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

Som vanlig har vi en gateway (SG), en administrasjonsserver (SMS) og administratorens konsoll (SmartConsole). Den vanlige prosessen for å konfigurere gatewayen ser slik ut:

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

Det vil si at administratoren først må starte opp SmartConsole, ved hjelp av hvilken vi kobler til Management-serveren (SMS). På SMS utføres sikkerhetsinnstillinger, og deretter brukes (install policy) på gateway (SG).

Når du bruker Management API, kan vi i utgangspunktet hoppe over første punkt (starte SmartConsole) og bruke API-kommandoer direkte mot Management-serveren (SMS).

Bruksområder for API

For å redigere konfigurasjonen ved hjelp av API finnes det fire hovedmetoder:

1) Gjennom verktøyet mgmt_cli

Eksempel — # mgmt_cli add host name host1 ip-address 192.168.2.100
Denne kommandoen kjøres fra kommandolinjen til Management-serveren (SMS). Jeg tror syntaksen til kommandoen er forståelig — en host1 blir opprettet med adresse 192.168.2.100.

2) Skrive API-kommandoer gjennom clish (i ekspertmodus)

I bunn og grunn trenger du bare å logge inn i kommandolinjen (mgmt login) med en konto som brukes ved tilkobling via SmartConsole (eller root-konto). Deretter kan du skrive API-kommandoer (i dette tilfellet er det ikke nødvendig å bruke verktøyet mgmt_cli). Du kan lage fullverdige BASH-skript.Eksempel på skriptet som oppretter en vert:

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

Hvis interessen er der, kan du se den relevante videoen:

Spill video

3) Gjennom SmartConsole, ved å åpne CLI-vinduet

Alt du trenger å gjøre, er å starte vinduet I cli-runtime og kubectl rett fra SmartConsole, som vist på bildet nedenfor.

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

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

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

Etter vår mening er dette en av de mest lovende metodene, da det lar deg "bygge" hele applikasjoner for administrasjonen av kontrollserveren (beklager for tautologien). Nedenfor vil vi se nærmere på denne metoden.

For å oppsummere:

  1. API + cli passer bedre for de som er vant til Cisco;
  2. API + shell for å bruke skript og utføre rutineoppgaver;
  3. REST API for automatisering.

Aktivering av API

Som standard er API aktivert på ledelsesservere med RAM over 4GB og standalone-konfigurasjoner med RAM over 8GB. Du kan sjekke statusen ved hjelp av kommandoen: api status

Hvis det viser seg at API er deaktivert, kan det enkelt aktiveres via SmartConsole: Manage & Settings > Blades > Management API > Advanced Settings

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

Deretter publiser (Publish) endringer og kjør kommandoen api restart.

Web forespørsel + Python

For å utføre API-kommandoer kan man bruke Web-forespørsel med Python og biblioteker requests, json. Generelt består strukturen til web-forespørselen 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) Forespørsel payload

Tekst i JSON-format som inneholder forskjellige parametere

Eksempel for å kalle 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 adresse GAIA

La oss se på noen typiske oppgaver som man ofte møter på når man administrerer Check Point.

1) Eksempel på funksjoner for innlogging og utlogging:

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) Aktivere blader og konfigurere nettverket:

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) Endre regler for brannmuren:

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

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) Publisere og installere policy, sjekke utførelsen av kommandoen (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) Legge til vert:

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) Legge til felt for Trusselbeskyttelse:

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) Vise listen over sesjoner

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

Skript


add_threat_profile={'name':'Apeiron', "active-protections-performance-impact" : "low","active-protections-severity" : "lav eller høyere","confidence-level-medium" : "forhindre",
  "confidence-level-high" : "forhindre", "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" : "Høy eller lavere"},
  "overrides" : [ {"protection" : "3Com Network Supervisor Directory Traversal","capture-packets" : True,"action" : "Forhindre","track" : "Logg"},
                  {"protection" : "7-Zip ARJ Archive Handling Buffer Overflow", "capture-packets" : True,"action" : "Forhindre","track" : "Logg"} ]}
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 handling for IPS-signatur:

Skript


set_threat_protection={
  "name" : "3Com Network Supervisor Directory Traversal",
  "overrides" : [{ "profile" : "Apeiron","action" : "Oppdage","track" : "Logg","capture-packets" : True},
    { "profile" : "Apeiron", "action" : "Oppdage", "track" : "Logg", "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 din egen tjeneste:

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

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" : "Spill","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 kan dere ved hjelp av Web API du kan legge til og fjerne nettverk, verter, tilgangsroller osv. Det er mulig å konfigurere blader Antivirus, Antibot, IPS, VPN. Det er til og med mulig å installere lisenser ved hjelp av kommandoen run-script. Alle API-kommandoer for Check Point kan ses her.

Check Point API + Postman

Det er også praktisk å bruke Check Point Web API sammen med Postman. Postman har skrivebordsversjoner for Windows, Linux og MacOS. I tillegg er det et tillegg for Google Chrome. Dette vil vi bruke. Først må vi finne Postman i Google Chrome Store og installere:

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

Med dette verktøyet kan vi lage Web-forespørsel mot API Check Point. For å unngå å huske alle API-kommandoene, finnes det muligheter for å importere såkalte collection-er (maler) som allerede inneholder alle nødvendige kommandoer:

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

Her finner du collection for R80.10. Etter importen vil vi ha tilgang til malene for API-kommandoene:

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

Etter min mening er dette veldig praktisk. Man kan raskt begynne med utviklingen av applikasjoner som bruker Check Point API.

Check Point + Ansible

Det er også verdt å merke seg at det finnes Ansible modulen for CheckPoint API. Modulen lar deg administrere konfigurasjoner, men den er ikke så praktisk for å løse eksotiske oppgaver. Skriving av skript på hvilket som helst programmeringsspråk gir mer fleksible og praktiske løsninger.

Utdata

Vi avslutter kanskje vår lille gjennomgang av Check Point API her. Etter min mening har denne funksjonen vært svært etterlengtet og nødvendig. Fremveksten av API gir veldig brede muligheter både for systemadministratorer og systemintegratorer som arbeider med Check Point-produkter. Orkestrering, automatisering, tilbakemelding til SIEM... alt dette er nå mulig.

P.S. Fler artikler om Check Point finner du som alltid i vår blogg Habr eller i bloggen på nettsiden.

P.S.S. Du kan stille tekniske spørsmål relatert til oppsett av Check Point her

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

Planlegger du å bruke API?

  • 70,6%Ja12

  • 23,5%Nei4

  • 5,9%Bruker det allerede1

17 brukere har stemt. 3 brukere avholdt.

Kilde: habr.com

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere | ProHoster