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, har haft en klage over den manglende mulighed for at redigere konfigurationen fra kommandolinjen. Dette er især frustrerende for dem, der tidligere har arbejdet med Cisco ASA, hvor alt kan konfigureres i CLI. Hos Check Point er det modsatte tilfældet — alle sikkerhedsindstillinger blev kun foretaget gennem det grafiske brugergrænseflade. Men visse opgaver er ganske ubehagelige at udføre via GUI (selv en så brugervenlig som Check Points). For eksempel bliver opgaven med at tilføje 100 nye værter eller netværk til en lang og trættende procedure. For hver genstand skal man klikke flere gange og indtaste IP-adressen. Det samme gælder oprettelse af webstedsgrupper eller masseaktivering/deaktivering af IPS-signaturer. Samtidig er der en høj risiko for at lave fejl.

Relativt for nylig skete der et "mirakel". Med udgivelsen af den nye version Gaia R80 blev muligheden for at bruge API, hvilket åbner op for store muligheder for automatisering af indstillinger, administration, overvågning osv. Nu kan du:

  • oprette objekter;
  • tilføje eller redigere access-lister;
  • aktivere/deaktivere blades;
  • konfigurere netværksgrænseflader;
  • installere politikker;
  • og meget mere.

Ærligt talt forstår jeg ikke, hvordan denne nyhed gik hen over Habr. I denne artikel vil vi kort beskrive, hvordan man bruger API'et og give nogle praktiske eksempler på CheckPoint-konfiguration ved hjælp af scripts..

Jeg vil straks præcisere, at API'et kun bruges til Management-serveren. Det vil sige, at man stadig ikke kan administrere gateways uden Management-serveren.

Hvem kan principielt have gavn af dette API?

  1. Systemadministratorer, der ønsker at forenkle eller automatisere rutineopgaver i forbindelse med konfiguration af Check Point;
  2. Virksomheder, der ønsker at integrere Check Point med andre løsninger (virtualiseringssystemer, ticket-systemer, konfigurationsstyringssystemer osv.);
  3. Systemintegratorer, der ønsker at standardisere indstillinger eller oprette yderligere produkter, der relaterer til Check Point.

Typisk skema

Lad os forestille os et typisk skema med Check Point:

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

Som sædvanligt har vi en gateway (SG), en managementserver (SMS) og en administrationskonsol (SmartConsole). I dette tilfælde ser den almindelige proces for konfiguration af gatewayen sådan ud:

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

Det vil sige, at man først skal starte SmartConsole, ved hjælp af hvilken vi opretter forbindelse til Management-serveren (SMS). På SMS udføres sikkerhedsindstillingerne, og derefter anvendes (install policy) på gatewayen (SG).

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

Metoder til brug af API

Der er fire hovedmetoder til at redigere konfigurationen ved hjælp af API:

1) Ved hjælp af værktøjet mgmt_cli

Eksempel — # mgmt_cli add host name host1 ip-address 192.168.2.100
Denne kommando køres fra kommandolinjen på Management-serveren (SMS). Jeg tror, at kommandoens syntaks er forståelig — der oprettes host1 med adressen 192.168.2.100.

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

I bund og grund er alt, hvad du skal gøre, at logge ind i kommandolinjen (mgmt login) med den konto, der bruges til at oprette forbindelse via SmartConsole (eller root-kontoen). Derefter kan du indtaste API-kommandoer (i dette tilfælde er det ikke nødvendigt at bruge værktøjet før hver kommando mgmt_cli). Du kan oprette komplette BASH-scripts. Eksempel på et script, der opretter en vært:

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 relevante video:

Afspil video

3) Gennem SmartConsole, ved at åbne CLI-vinduet

Det eneste, du skal gøre, er at åbne vinduet flagen -k til integration med direkte 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) Web Services. Brug HTTPS Post-anmodning (REST API)

Efter vores mening er dette en af de mest lovende metoder, da det gør det muligt at "bygge" hele applikationer til styring af management-serveren (jeg undskylder for tautologien). Nedenfor vil vi se nærmere på denne metode.

For at opsummere:

  1. API + cli er mere velegnet til personer, der er vant til Cisco;
  2. API + shell til anvendelse af scripts og udførelse af rutineopgaver;
  3. REST API til automatisering.

Aktivering af API

Som standard er API aktiveret på management-servere med mere end 4 GB RAM og standalone-konfigurationer med mere end 8 GB RAM. Status kan kontrolleres med kommandoen: api status

Hvis det viser sig, at API'en er deaktiveret, kan den ganske enkelt aktiveres via SmartConsole: Manage & Settings > Blades > Management API > Advanced Settings

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

Derefter publiceres (Publish) ændringerne, og kommandoen api restart.

Web-anmodninger + Python

For at udføre API-kommandoer kan du bruge web-anmodninger ved hjælp af Python og biblioteker requests, json. I almindelig form består strukturen af web-anmodningen af tre dele:

1) Adresse

(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) Request payload

JSON-formattekst indeholdende de forskellige parametre

Eksempel til kald 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-adresse GAIA

Lad os gennemgå nogle typiske opgaver, som man ofte står over for, når man administrerer Check Point.

1) Eksempel på funktioner til login og logout:

Script


    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 af blades og netværkskonfiguration:

Script


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:

Script


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:

Script


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) Publicering og installation af politik, kontrol af kommandoudførelsen (task-id):

Script


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 host:

Script


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 Threat Prevention-lag:

Script


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

Script


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:

Script


add_threat_profile={'name':'Apeiron', "active-protections-performance-impact" : "lav","active-protections-severity" : "lav eller højere","confidence-level-medium" : "forhindring",
  "confidence-level-high" : "forhindring", "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øj eller lavere"},
  "overrides" : [ {"protection" : "3Com Network Supervisor Directory Traversal","capture-packets" : True,"action" : "Forhindring","track" : "Log"},
                  {"protection" : "7-Zip ARJ Archive Handling Buffer Overflow", "capture-packets" : True,"action" : "Forhindring","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) Ændre handling for IPS signatur:

Script


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

Script


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 kategori, websted eller gruppe:

Script


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, ved hjælp af Web API du kan tilføje og fjerne netværk, værter, adgangsroller osv. Der er mulighed for at konfigurere blades Antivirus, Antibot, IPS, VPN. Det er også muligt at installere licenser ved hjælp af kommandoen run-script. Alle API-kommandoer fra Check Point kan ses her.

Check Point API + Postman

Det er også praktisk at bruge Check Point Web API i samarbejde med Postman. Postman har desktopversioner til Windows, Linux og MacOS. Derudover findes der et plugin til Google Chrome. Det vil vi benytte. For at starte, skal du finde Postman i Google Chrome Store og installere:

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

Med dette værktøj kan vi danne Web-anmodninger til Check Point API. For at undgå at huske alle API-kommandoer, er der mulighed for at importere såkaldte collections (skabeloner), som allerede indeholder alle nødvendige kommandoer:

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

Her finder du collection for R80.10. Efter importen bliver API-kommando skabeloner tilgængelige for os:

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

Efter min mening er dette meget praktisk. Man kan hurtigt begynde at udvikle applikationer ved brug af Check Point API.

Check Point + Ansible

Jeg vil også gerne bemærke, at der findes Ansible modul til CheckPoint API. Modulet gør det muligt at administrere konfigurationer, men det er ikke så praktisk til løsning af eksotiske opgaver. At skrive scripts i ethvert programmeringssprog giver mere fleksible og praktiske løsninger.

Output

Her afslutter vi vores lille gennemgang af Check Point API. Efter min mening har denne funktion været længe ventet og nødvendig. Fremkomsten af API åbner meget brede muligheder både for systemadministratorer og systemintegratorer, der arbejder med Check Point produkter. Orkestrering, automatisering, feedback til SIEM... alt dette er nu muligt.

P.S. Flere artikler om Check Point kan du altid finde i vores blog Habr eller i bloggen på websitet.

P.S.S. Teknisk spørgsmål vedrørende konfigurationen af Check Point kan stilles her

Kun registrerede brugere kan deltage i undersøgelsen. Log ind, please.

Planlægger du at bruge API?

  • 70,6%Ja12

  • 23,5%Nej4

  • 5,9%Bruger det allerede1

17 brugere har stemt. 3 brugere har undgået.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster