Jeg er sikker på, at alle, der nogensinde har arbejdet med
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?
- Systemadministratorer, der ønsker at forenkle eller automatisere rutinemæssige Check Point-konfigurationsopgaver;
- Virksomheder, der ønsker at integrere Check Point med andre løsninger (virtualiseringssystemer, billetsystemer, konfigurationsstyringssystemer osv.);
- 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:
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:
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.
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:
- API + cli mere velegnet til folk, der er vant til Cisco;
- API + shell til at anvende scripts og udføre rutineopgaver;
- 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
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
Check Point API + Postmand
Også praktisk at bruge Check Point Web API i forbindelse med
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:
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
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
PSS For tekniske spørgsmål i forbindelse med opsætning af Check Point kan du
Kun registrerede brugere kan deltage i undersøgelsen.
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