API Check Point R80.10. Gestion via CLI, scripts et plus encore

API Check Point R80.10. Gestion via CLI, scripts et plus encore

Je suis sûr que chacun de ceux qui ont travaillé avec Check Point, a eu des réclamations concernant l'impossibilité de modifier la configuration depuis la ligne de commande. C'est particulièrement frustrant pour ceux qui ont auparavant travaillé avec des Cisco ASA, où tout peut être configuré dans l'interface CLI. Avec Check Point, c'est tout le contraire : tous les réglages de sécurité se font exclusivement via l'interface graphique. Cependant, certaines tâches sont vraiment pénibles à réaliser par le biais de l'interface graphique (même celle aussi conviviale que celle de Check Point). Par exemple, l'ajout de 100 nouveaux hôtes ou réseaux devient un processus long et fastidieux. Pour chaque objet, il faut cliquer plusieurs fois et entrer l'adresse IP. Il en va de même pour la création d'un groupe de sites ou pour activer/désactiver massivement les signatures IPS. Dans ce cas, il y a un grand risque de faire une erreur.

Récemment, un "miracle" a eu lieu. Avec la sortie de la nouvelle version Gaia R80 , la possibilité a été annoncée d'utiliser l'API, ce qui ouvre de larges possibilités d'automatisation des réglages, d'administration, de surveillance, etc. Maintenant, il est possible de :

  • créer des objets ;
  • ajouter ou modifier des listes d'accès ;
  • activer/désactiver des blades ;
  • configurer des interfaces réseau ;
  • installer des politiques ;
  • et bien plus encore.

Honnêtement, je ne comprends pas comment cette nouvelle a échappé à Habr. Dans cet article, nous décrirons brièvement comment utiliser l'API et fournirons quelques exemples pratiques de configuration de Check Point à l'aide de scripts.

Je voudrais tout de suite préciser que l'API n'est utilisée que pour le serveur de gestion. C'est-à-dire qu'il est toujours impossible de gérer les passerelles sans serveur de gestion.

À qui cet API peut-elle donc être utile ?

  1. Administrateurs système qui souhaitent simplifier ou automatiser des tâches répétitives de configuration de Check Point ;
  2. Entreprises qui souhaitent intégrer Check Point avec d'autres solutions (systèmes de virtualisation, systèmes de tickets, systèmes de gestion de configurations, etc.) ;
  3. Intégrateurs système qui souhaitent standardiser les configurations ou créer des produits supplémentaires liés à Check Point.

Schéma typique

Et donc, imaginons un schéma typique avec Check Point :

API Check Point R80.10. Gestion via CLI, scripts et plus encore

Comme d'habitude, nous avons une passerelle (SG), un serveur de gestion (SMS) et la console de l'administrateur (SmartConsole). Le processus habituel de configuration de la passerelle se présente comme suit :

API Check Point R80.10. Gestion via CLI, scripts et plus encore

C'est-à-dire qu'il est d'abord nécessaire de lancer SmartConsole, grâce à laquelle nous nous connectons au serveur de gestion (SMS). Les paramètres de sécurité sont appliqués sur le SMS, puis sont utilisés (politique d'installation) sur la passerelle (SG).

Lorsque vous utilisez Management API, nous pouvons en principe sauter le premier point (démarrage de SmartConsole) et appliquer commandes API directement au serveur de gestion (SMS).

Moyens d'utiliser l'API

Pour modifier la configuration à l'aide de l'API, il existe quatre méthodes principales :

1) À l'aide de l'outil mgmt_cli

Exemple — # mgmt_cli add host name host1 ip-address 192.168.2.100
Cette commande est exécutée à partir de la ligne de commande du serveur de gestion (SMS). Je pense que la syntaxe de la commande est claire — on crée host1 avec l'adresse 192.168.2.100.

2) Saisir les commandes API via clish (en mode expert)

En gros, tout ce dont vous avez besoin, c'est de vous connecter à la ligne de commande (mgmt login) avec un compte utilisé lors de la connexion via SmartConsole (ou le compte root). Ensuite, vous pouvez saisir commandes API (dans ce cas, il n'est pas nécessaire d'utiliser l'outil mgmt_cli). Vous pouvez créer des scripts BASH. Exemple de script qui crée un hôte :

Script 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

Si cela vous intéresse, vous pouvez regarder la vidéo correspondante :

Lire la vidéo

3) Via SmartConsole, en ouvrant la fenêtre CLI

Tout ce que vous devez faire, c'est lancer une fenêtre CLI directement depuis SmartConsole, comme cela est montré sur l'image ci-dessous.

API Check Point R80.10. Gestion via CLI, scripts et plus encore

Dans cette fenêtre, vous pouvez commencer à entrer des commandes API immédiatement.

4) Web Services. Utiliser une requête Post HTTPS (REST API)

À notre avis, c'est l'une des méthodes les plus prometteuses, car elle permet de “créer” des applications complètes pour la gestion du serveur de gestion (désolé pour la tautologie). Nous examinerons cette méthode un peu plus en détail ci-dessous.

Pour résumer :

  1. API + cli convient mieux à ceux qui sont habitués à Cisco ;
  2. API + shell pour l'utilisation de scripts et l'exécution de tâches routinières ;
  3. API REST pour l'automatisation.

Activation de l'API

Par défaut, l'API est activée sur les serveurs de gestion avec plus de 4 Go de RAM et les configurations autonomes avec plus de 8 Go de RAM. Vous pouvez vérifier le statut à l'aide de la commande : api status

Si l'API est désactivée, il est assez simple de l'activer via SmartConsole : Gérer & Paramètres > Blades > API de gestion > Paramètres avancés

API Check Point R80.10. Gestion via CLI, scripts et plus encore

Ensuite, publier (Publier) les changements et exécuter la commande api restart.

Requêtes Web + Python

Pour exécuter des commandes API, vous pouvez utiliser des requêtes Web avec Python et des bibliothèques requests, json. En termes généraux, la structure de la requête Web se compose de trois parties :

1) Adresse

(https://<serveur de gestion>:<port>/web_api/<commande>) 


2) En-têtes HTTP

content-Type: application/json
x-chkp-sid: <token d'identification de session tel que retourné par la commande de connexion>


3) Charge utile de la requête

Texte au format JSON contenant les différents paramètres

Exemple pour appeler différentes commandes :


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' -> Adresse IP GAIA

Voici quelques tâches types auxquelles on est souvent confronté lors de l'administration de Check Point.

1) Exemple de fonctions de connexion et de déconnexion :

Script


    payload = {'user': 'votre_utilisateur', 'password' : 'votre_mot_de_passe'}
    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) Activation des blades et configuration du réseau :

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) Modification des règles du pare-feu :

Script


new_access_data = {'name':'Règle de nettoyage','layer':'Réseau','action':'Accepter'}
new_access_result = api_call('xxx.xxx.xxx.xxx', 443, 'set-access-rule', new_access_data, sid)
print(json.dumps(new_access_result))

4) Ajouter une couche d'application :

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) Publication et installation de la politique, vérification de l'exécution de la commande (task-id) :

Script


publish_result = api_call('xxx.xxx.xxx.xxx', 443, 'publish', {}, sid)
print("résultat de la publication : " + 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) Ajouter un hôte :

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) Ajouter un champ de prévention des menaces :

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) Voir la liste des sessions

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) Créer un nouveau profil :

Script


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) Changer l'action pour la signature IPS :

Script


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) Ajouter votre service :

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) Ajouter une catégorie, un site ou un groupe :

Script


add_application_site_category={  "name" : "Valve","description" : "Jeux Valve"}
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" : "Jeux","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))

De plus, à l'aide de Web API vous pouvez ajouter et supprimer des réseaux, des hôtes, des rôles d'accès, etc. Il est possible de configurer des lames Antivirus, Antibot, IPS, VPN. Il est même possible d'installer des licences en utilisant la commande run-script. Toutes les commandes API de Check Point peuvent être consultées ici.

Check Point API + Postman

Il est également pratique d'utiliser Check Point Web API en combinaison avec Postman. Postman a des versions de bureau pour Windows, Linux et MacOS. De plus, il existe un plugin pour Google Chrome. C'est ce que nous allons utiliser. Tout d'abord, il faut trouver Postman dans le Google Chrome Store et l'installer :

API Check Point R80.10. Gestion via CLI, scripts et plus encore

Avec cet outil, nous pourrons effectuer des requêtes Web sur l'API Check Point. Pour ne pas avoir à mémoriser toutes les commandes de l'API, il est possible d'importer des collections (modèles) qui contiennent déjà toutes les commandes nécessaires :

API Check Point R80.10. Gestion via CLI, scripts et plus encore

Ici vous trouverez collection pour R80.10. Après l'importation, des modèles de commandes API seront disponibles :

API Check Point R80.10. Gestion via CLI, scripts et plus encore

À mon avis, c'est très pratique. On peut rapidement commencer le développement d'applications utilisant l'API Check Point.

Check Point + Ansible

Je voudrais également souligner qu'il existe Ansible modèle pour l'API CheckPoint. Le module permet de gérer les configurations, mais il n'est pas aussi pratique pour résoudre des tâches exotiques. Écrire des scripts dans n'importe quel langage de programmation offre des solutions plus flexibles et adaptées.

Sortie

Nous allons probablement conclure notre petite revue de l'API Check Point ici. À mon avis, cette fonctionnalité était très attendue et nécessaire. L'apparition de l'API ouvre de vastes possibilités tant pour les administrateurs systèmes que pour les intégrateurs systèmes travaillant avec les produits Check Point. L'orchestration, l'automatisation, les retours d'information avec SIEM... tout cela est désormais possible.

P.S. Vous pouvez trouver davantage d'articles sur Check Point comme toujours dans notre blog Habr ou dans le blog sur site.

P.S.S. Pour poser des questions techniques liées à la configuration de Check Point, vous pouvez ici

Seuls les utilisateurs enregistrés peuvent participer au sondage. Connectez-vous, s'il vous plaît.

Envisagez-vous d'utiliser l'API ?

  • 70,6%Oui12

  • 23,5%Non4

  • 5,9%J'utilise déjà1

17 utilisateurs ont voté. 3 utilisateurs se sont abstenus.

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster