Π£Π²Π΅ΡΠ΅Π½, ΡΡΠΎ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ, ΠΊΡΠΎ ΠΊΠΎΠ³Π΄Π°-Π»ΠΈΠ±ΠΎ ΡΠ°Π±ΠΎΡΠ°Π» Ρ
ΠΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Π΄Π°Π²Π½ΠΎ ΡΠ»ΡΡΠΈΠ»ΠΎΡΡ βΡΡΠ΄ΠΎβ. Π‘ Π²ΡΡ ΠΎΠ΄ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Gaia R80 Π±ΡΠ»Π° Π°Π½ΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ API, ΡΡΠΎ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠΈΡΠΎΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ Π½Π°ΡΡΡΠΎΠ΅ΠΊ, Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Ρ ΠΈ Ρ.Π΄. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ:
- ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ;
- Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈΠ»ΠΈ ΠΏΡΠ°Π²ΠΈΡΡ access-list-Ρ;
- Π²ΠΊΠ»ΡΡΠ°ΡΡ/ΠΎΡΠΊΠ»ΡΡΠ°ΡΡ Π±Π»Π΅ΠΉΠ΄Ρ;
- Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΡΠ΅ΡΠ΅Π²ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ;
- ΠΈΠ½ΡΡΠ°Π»Π»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ;
- ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅.
ΠΡΠ»ΠΈ ΡΠ΅ΡΡΠ½ΠΎ, Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ ΠΊΠ°ΠΊ ΡΡΠ° Π½ΠΎΠ²ΠΎΡΡΡ ΠΏΡΠΎΡΠ»Π° ΠΌΠΈΠΌΠΎ Π₯Π°Π±ΡΠ°. Π Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ Π²ΠΊΡΠ°ΡΡΠ΅ ΠΎΠΏΠΈΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ API ΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ CheckPoint Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΊΡΠΈΠΏΡΠΎΠ².
Π‘ΡΠ°Π·Ρ Ρ ΠΎΡΠ΅Π» Π±Ρ ΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΡΡΡ, API ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Management ΡΠ΅ΡΠ²Π΅ΡΠ°. Π’.Π΅. ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ»ΡΠ·Π°ΠΌΠΈ Π±Π΅Π· Management ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΠΎ ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
ΠΠΎΠΌΡ Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ³ΠΎΠ΄ΠΈΡΡΡΡ Π΄Π°Π½Π½ΡΠΉ API?
- Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΡΡΡ ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΈΠ»ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠΈΠ½Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ Check Point;
- ΠΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΡΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ Check Point Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ (ΡΠΈΡΡΠ΅ΠΌΡ Π²ΠΈΡΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΡΠΈΠΊΠ΅Ρ-ΡΠΈΡΡΠ΅ΠΌΡ, ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΌΠΈ ΠΈ Ρ.Π΄.);
- Π‘ΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΎΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Check Point.
Π’ΠΈΠΏΠΎΠ²Π°Ρ ΡΡ Π΅ΠΌΠ°
Π ΡΠ°ΠΊ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΡΠΈΠΏΠΎΠ²ΡΡ ΡΡ Π΅ΠΌΡ Ρ Check Point:
ΠΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ Ρ Π½Π°Ρ Π΅ΡΡΡ ΡΠ»ΡΠ· (SG), ΡΠ΅ΡΠ²Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ (SMS) ΠΈ ΠΊΠΎΠ½ΡΠΎΠ»Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° (SmartConsole). ΠΡΠΈ ΡΡΠΎΠΌ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ»ΡΠ·Π° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
Π’.Π΅. ΡΠ½Π°ΡΠ°Π»Π° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π½Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° Π·Π°ΠΏΡΡΡΠΈΡΡ SmartConsole, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌΡΡ ΠΊ Management-ΡΠ΅ΡΠ²Π΅ΡΡ (SMS). ΠΠ° SMS Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, Π° ΡΠΆΠ΅ Π·Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ (install policy) Π½Π° ΡΠ»ΡΠ· (SG).
ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Management API, ΠΌΡ Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΏΡΠ½ΠΊΡ (Π·Π°ΠΏΡΡΠΊ SmartConsole) ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ API-ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΊ Management-ΡΠ΅ΡΠ²Π΅ΡΡ (SMS).
Π‘ΠΏΠΎΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ API
ΠΠ»Ρ ΠΏΡΠ°Π²ΠΊΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ API Π΅ΡΡΡ ΡΠ΅ΡΡΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π°:
1) Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΈΠ»ΠΈΡΡ mgmt_cli
ΠΡΠΈΠΌΠ΅Ρ β # mgmt_cli add host name host1 ip-address 192.168.2.100
ΠΠ°Π½Π½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Management-ΡΠ΅ΡΠ²Π΅ΡΠ° (SMS). ΠΡΠΌΠ°Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠΎΠ½ΡΡΠ΅Π½ β ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ host1 Ρ Π°Π΄ΡΠ΅ΡΠΎΠΌ 192.168.2.100.
2) ΠΠ²ΠΎΠ΄ΠΈΡΡ API ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΠ΅ΡΠ΅Π· clish (Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ expert)
ΠΠΎ ΡΡΡΠΈ, Π²ΡΠ΅ ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ, ΡΡΠΎ Π·Π°Π»ΠΎΠ³ΠΈΠ½ΠΈΡΡΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ (mgmt login) ΠΏΠΎΠ΄ ΡΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠ΅ΡΠ΅Π· SmartConsole (Π»ΠΈΠ±ΠΎ root-ΡΡΠ΅ΡΠΊΠ°). ΠΠ°ΡΠ΅ΠΌ ΡΠΆΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π²ΠΎΠ΄ΠΈΡΡ API-ΠΊΠΎΠΌΠ°Π½Π΄Ρ (Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΡΡΠΈΠ»ΠΈΡΡ mgmt_cli). ΠΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠ΅ BASH-ΡΠΊΡΠΈΠΏΡΡ. ΠΡΠΈΠΌΠ΅Ρ ΡΠΊΡΠΈΠΏΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ·Π΄Π°Π΅Ρ Ρ ΠΎΡΡ:
Bash-ΡΠΊΡΠΈΠΏΡ
#!/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
ΠΡΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ Π²ΠΈΠ΄Π΅ΠΎ:
3) Π§Π΅ΡΠ΅Π· SmartConsole, ΠΎΡΠΊΡΡΠ² ΠΎΠΊΠ½ΠΎ CLI
ΠΡΠ΅ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΡΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΎΠΊΠΎΡΠΊΠΎ CLI ΠΏΡΡΠΌΠΎ ΠΈΠ· SmartConsole, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ Π½ΠΈΠΆΠ΅.
Π ΡΡΠΎΠΌ ΠΎΠΊΠ½Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ°Π·Ρ Π½Π°ΡΠΈΠ½Π°ΡΡ Π²Π²ΠΎΠ΄ΠΈΡΡ API-ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
4) Web Services. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ HTTPS Post request (REST API)
ΠΠ° Π½Π°Ρ Π²Π·Π³Π»ΡΠ΄ ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ°ΠΌΡΡ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ², Ρ.ΠΊ. ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ βΡΡΡΠΎΠΈΡΡβ ΡΠ΅Π»ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ (ΠΈΠ·Π²ΠΈΠ½ΡΡΡΡ Π·Π° ΡΠ°Π²ΡΠΎΠ»ΠΎΠ³ΠΈΡ). ΠΠΈΠΆΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΄Π°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΡΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅.
ΠΡΠ»ΠΈ ΡΠ΅Π·ΡΠΌΠΈΡΠΎΠ²Π°ΡΡ:
- API + cli Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π»ΡΠ΄Π΅ΠΉ, ΠΊΡΠΎ ΠΏΡΠΈΠ²ΡΠΊ ΠΊ Cisco;
- API + shell Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΊΡΠΈΠΏΡΠΎΠ² ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΡΠΈΠ½Π½ΡΡ Π·Π°Π΄Π°Ρ;
- REST API Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ API
ΠΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, API Π²ΠΊΠ»ΡΡΠ΅Π½ Π½Π° ΠΌΠ΅Π½Π΅Π΄ΠΆΠΌΠ΅Π½Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ Ρ ΠΎΠ±ΡΠ΅ΠΌΠΎΠΌ RAM Π±ΠΎΠ»Π΅Π΅ 4ΠΠ± ΠΈ standalone ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ Ρ RAM Π±ΠΎΠ»Π΅Π΅ 8ΠΠ±. ΠΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠ°ΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ: api status
ΠΡΠ»ΠΈ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ api Π²ΡΠΊΠ»ΡΡΠ΅Π½, ΡΠΎ Π΅Π³ΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ ΡΠ΅ΡΠ΅Π· SmartConsole: Manage & Settings > Blades > Management API > Advanced Settings
ΠΠ°ΡΠ΅ΠΌ ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ (Publish) ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ api restart.
Web requests + Python
ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ API-ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Web-Π·Π°ΠΏΡΠΎΡΡ Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Python ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ requests, json. Π ΠΎΠ±ΡΠ΅ΠΌ Π²ΠΈΠ΄Π΅ ΡΡΡΡΠΊΡΡΡΠ° web-Π·Π°ΠΏΡΠΎΡΠ° ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΠ΅Ρ ΡΠ°ΡΡΠ΅ΠΉ:
1)ΠΠ΄ΡΠ΅Ρ
(https://<managemenet 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
Text in JSON format containing the different parameters
ΠΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ Π²ΡΠ·ΠΎΠ²Π° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄:
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
ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΏΠΎΠ²ΡΡ Π·Π°Π΄Π°Ρ, Ρ ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΡΡΠ°Π»ΠΊΠΈΠ²Π°ΡΡΡΡ ΠΏΡΠΈ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Check Point.
1) ΠΡΠΈΠΌΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΉ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ ΠΈ Π»ΠΎΠ³Π°ΡΡΠ°:
Π‘ΠΊΡΠΈΠΏΡ
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) ΠΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π±Π»ΡΠΉΠ΄ΠΎΠ² ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ΅ΡΠΈ:
Π‘ΠΊΡΠΈΠΏΡ
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) ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ» ΠΌΠ΅ΠΆΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠΊΡΠ°Π½Π°:
Π‘ΠΊΡΠΈΠΏΡ
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)ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Application layer:
Π‘ΠΊΡΠΈΠΏΡ
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) Publish ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ, ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ (task-id):
Π‘ΠΊΡΠΈΠΏΡ
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) ΠΠΎΠ±Π°Π²ΠΈΡΡ Ρ ΠΎΡΡ:
Π‘ΠΊΡΠΈΠΏΡ
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) ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ»Π΅ Threat Prevention:
Π‘ΠΊΡΠΈΠΏΡ
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) ΠΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅ΡΡΠΈΠΉ
Π‘ΠΊΡΠΈΠΏΡ
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) Π‘ΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΡΠΈΠ»Ρ:
Π‘ΠΊΡΠΈΠΏΡ
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) ΠΠΎΠΌΠ΅Π½ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π΄Π»Ρ IPS ΡΠΈΠ³Π½Π°ΡΡΡΡ:
Π‘ΠΊΡΠΈΠΏΡ
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) ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ²ΠΎΠΉ ΡΠ΅ΡΠ²ΠΈΡ:
Π‘ΠΊΡΠΈΠΏΡ
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) ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ, ΡΠ°ΠΉΡ ΠΈΠ»ΠΈ Π³ΡΡΠΏΠΏΡ:
Π‘ΠΊΡΠΈΠΏΡ
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))
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ Web API Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΈ ΡΠ΄Π°Π»ΡΡΡ ΡΠ΅ΡΠΈ, Ρ
ΠΎΡΡΡ, ΡΠΎΠ»ΠΈ Π΄ΠΎΡΡΡΠΏΠ° ΠΈ Ρ.Π΄. ΠΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π±Π»Π΅ΠΉΠ΄ΠΎΠ² Antivirus, Antibot, IPS, VPN. ΠΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π΄Π°ΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π»ΠΈΡΠ΅Π½Π·ΠΈΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ run-script. Π‘ΠΎ Π²ΡΠ΅ΠΌΠΈ API-ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ Check Point ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ
Check Point API + Postman
Π’Π°ΠΊΠΆΠ΅ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Check Point Web API Π² ΡΠ²ΡΠ·ΠΊΠ΅ Ρ
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠΉ ΡΡΠΈΠ»ΠΈΡΡ ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ Web-Π·Π°ΠΏΡΠΎΡΡ ΠΊ API Check Point. Π§ΡΠΎΠ±Ρ Π½Π΅ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡ Π²ΡΠ΅ API-ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ collection-Ρ (ΡΠ°Π±Π»ΠΎΠ½Ρ), ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
ΠΠ° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ. ΠΠΎΠΆΠ½ΠΎ Π²Π΅ΡΡΠΌΠ° Π±ΡΡΡΡΠΎ ΠΏΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Check Point API.
Check Point + Ansible
Π’Π°ΠΊΠΆΠ΅ Ρ
ΠΎΡΠ΅Π»ΠΎΡΡ Π±Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Ansible
ΠΡΠ²ΠΎΠ΄
ΠΠ° ΡΡΠΎΠΌ ΠΏΠΎΠΆΠ°Π»ΡΠΉ ΠΌΡ Π·Π°ΠΊΠΎΠ½ΡΠΈΠΌ Π½Π°Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΎΠ±Π·ΠΎΡ Check Point API. ΠΠ° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π±ΡΠ»Π° ΠΎΡΠ΅Π½Ρ Π΄ΠΎΠ»Π³ΠΎΠΆΠ΄Π°Π½Π½ΠΎΠΉ ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠΉ. ΠΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ API ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΠΎΡΠ΅Π½Ρ ΡΠΈΡΠΎΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠ°ΠΊ Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠΎΠ², ΡΠ°ΠΊ ΠΈ Π΄Π»Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°ΠΌΠΈ Check Point. ΠΡΠΊΠ΅ΡΡΡΠ°ΡΠΈΡ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ, ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΡΠ²ΡΠ·Ρ Ρ SIEMβ¦ Π²ΡΠ΅ ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
P.S. ΠΠΎΠ»ΡΡΠ΅ ΡΡΠ°ΡΠ΅ΠΉ ΠΎ
P.S.S. ΠΠ°Π΄Π°ΡΡ ΡΠ΅Ρ
Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΠΎΠΏΡΠΎΡΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΎΠΉ Check Point, ΠΌΠΎΠΆΠ½ΠΎ
Π’ΠΎΠ»ΡΠΊΠΎ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΠ°ΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΠΎΠΏΡΠΎΡΠ΅.
ΠΠ»Π°Π½ΠΈΡΡΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ API?
-
70,6%ΠΠ°12
-
23,5%ΠΠ΅Ρ4
-
5,9%Π£ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ1
ΠΡΠΎΠ³ΠΎΠ»ΠΎΡΠΎΠ²Π°Π»ΠΈ 17 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠΎΠ·Π΄Π΅ΡΠΆΠ°Π»ΠΈΡΡ 3 ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com