Jag är säker på att alla som någonsin har arbetat med
Ett "mirakel" hände relativt nyligen. Med lanseringen av den nya versionen Gaia 80 kr möjligheten tillkännagavs API-användning, vilket öppnar för stora möjligheter för automatisering av inställningar, administration, övervakning etc. Nu kan du:
- skapa objekt;
- lägga till eller redigera åtkomstlistor;
- aktivera/avaktivera blad;
- konfigurera nätverksgränssnitt;
- installera policyer;
- и многое другое.
För att vara ärlig förstår jag inte hur denna nyhet passerade Habr. I den här artikeln kommer vi att kortfattat beskriva hur man använder API:t och ge flera praktiska exempel. CheckPoint-inställningar med skript.
Jag skulle vilja göra en reservation omedelbart att API endast används för Management-servern. De där. Det är fortfarande omöjligt att hantera gateways utan en Management-server.
Vem kan använda detta API i princip?
- Systemadministratörer som vill förenkla eller automatisera rutinmässiga Check Point-konfigurationsuppgifter;
- Företag som vill integrera Check Point med andra lösningar (virtualiseringssystem, biljettsystem, konfigurationshanteringssystem etc.);
- Systemintegratörer som vill standardisera inställningar eller skapa ytterligare Check Point-relaterade produkter.
Typiskt schema
Så låt oss föreställa oss ett typiskt schema med Check Point:
Som vanligt har vi en gateway (SG), hanteringsserver (SMS) och administratörskonsolen (SmartConsole). I det här fallet ser den vanliga gatewaykonfigurationsprocessen ut så här:
De där. Först måste du köra på administratörens dator SmartConsole, med vilken vi ansluter till Management-servern (SMS). Säkerhetsinställningar görs på SMS, och tillämpas först då (installationspolicy) till gateway (SG).
När du använder Management API, kan vi i princip hoppa över den första punkten (starta SmartConsole) och använda API-kommandon direkt till Management-servern (SMS).
Sätt att använda API
Det finns fyra huvudsakliga sätt att redigera konfigurationen med hjälp av API:et:
1) Använda verktyget mgmt_cli
Exempel - # mgmt_cli lägg till värdnamn host1 ip-adress 192.168.2.100
Detta kommando körs från Management Server (SMS) kommandoraden. Jag tror att syntaxen för kommandot är tydlig - host1 skapas med adressen 192.168.2.100.
2) Ange API-kommandon via clish (i expertläge)
I princip allt du behöver göra är att logga in på kommandoraden (mgmt inloggning) under kontot som används vid anslutning via SmartConsole (eller root-konto). Då kan du gå in API-kommandon (i det här fallet finns det inget behov av att använda verktyget före varje kommando mgmt_cli). Du kan skapa fullfjädrad BASH-skript. Ett exempel på ett skript som värden skapar:
Bash manus
#!/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
Om du är intresserad kan du titta på motsvarande video:
3) Via SmartConsole genom att öppna CLI-fönstret
Allt du behöver göra är att öppna fönstret CLI direkt från SmartConsole, som visas på bilden nedan.
I det här fönstret kan du omedelbart börja ange API-kommandon.
4) Webbtjänster. Använd HTTPS Post request (REST API)
Enligt vår mening är detta en av de mest lovande metoderna, eftersom låter dig "bygga" hela applikationer baserat på hantering av serverhantering (ursäkta tautologin). Nedan kommer vi att titta på denna metod lite mer detaljerat.
För att sammanfatta:
- API + cli mer lämplig för personer som är vana vid Cisco;
- API + skal för att tillämpa skript och utföra rutinuppgifter;
- REST API för automatisering.
Aktiverar API
Som standard är API:et aktiverat på hanteringsservrar med mer än 4 GB RAM och fristående konfigurationer med mer än 8 GB RAM. Du kan kontrollera statusen med kommandot: api-status
Om det visar sig att api:n är inaktiverad är det ganska enkelt att aktivera det via SmartConsole: Hantera och inställningar > Blades > Management API > Avancerade inställningar
Publicera sedan (Publicera) ändrar och kör kommandot api omstart.
Webbförfrågningar + Python
För att köra API-kommandon kan du använda webbförfrågningar med Python och bibliotek förfrågningar, json. I allmänhet består strukturen av en webbförfrågan av tre delar:
1) Adress
(https://<managemenet server>:<port>/web_api/<command>)
2) HTTP-rubriker
content-Type: application/json
x-chkp-sid: <session ID token as returned by the login command>
3) Begär nyttolast
Text i JSON-format som innehåller de olika parametrarna
Exempel för att anropa olika kommandon:
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
Här är några typiska uppgifter som du oftast stöter på när du administrerar Check Point.
1) Exempel på behörighets- och utloggningsfunktioner:
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å bladen och ställa in nätverket:
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) Ändra brandväggsregler:
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) Lägga till applikationsskikt:
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) Publicera och ställ in policyn, kontrollera exekveringen av kommandot (uppgifts-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) Lägg till värd:
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) Lägg till ett fält för förebyggande av hot:
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 listan över sessioner
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) Skapa 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) Ändra åtgärden för 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) Lägg till din tjänst:
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) Lägg till en kategori, webbplats eller grupp:
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))
Dessutom med hjälp Web API du kan lägga till och ta bort nätverk, värdar, åtkomstroller etc. Bladen kan anpassas Antivirus, Antibot, IPS, VPN. Det är till och med möjligt att installera licenser med kommandot run-script. Alla Check Point API-kommandon finns här
Check Point API + Postman
Också bekväm att använda Check Point Web API i samband med
Med hjälp av det här verktyget kommer vi att kunna generera webbförfrågningar till Check Point API. För att inte komma ihåg alla API-kommandon är det möjligt att importera så kallade samlingar (mallar), som redan innehåller alla nödvändiga kommandon:
Enligt min åsikt är detta väldigt bekvämt. Du kan snabbt börja utveckla applikationer med hjälp av Check Point API.
Check Point + Ansible
Jag vill också notera att det finns Ansible
Utgång
Det är här vi förmodligen kommer att avsluta vår korta recension av Check Point API. Enligt min mening var denna funktion mycket efterlängtad och nödvändig. Framväxten av API:t öppnar mycket breda möjligheter för både systemadministratörer och systemintegratörer som arbetar med Check Points produkter. Orkesterering, automatisering, SIEM-feedback... allt är möjligt nu.
PS Fler artiklar om
PSS För tekniska frågor relaterade till att installera Check Point kan du
Endast registrerade användare kan delta i undersökningen.
Planerar du att använda API?
-
70,6%Ja 12
-
23,5%Nr 4
-
5,9%Använder redan 1
17 användare röstade. 3 användare avstod från att rösta.
Källa: will.com