Vérifiez l'API R80.10. Contrôle via CLI, scripts et plus

Vérifiez l'API R80.10. Contrôle via CLI, scripts et plus

Je suis sûr que tous ceux qui ont déjà travaillé avec Check Point, il y a eu une plainte concernant impossibilité d'éditer la configuration depuis la ligne de commande. Ceci est particulièrement étrange pour ceux qui ont déjà travaillé avec Cisco ASA, où absolument tout peut être configuré dans la CLI. Avec Check Point, c'est l'inverse : tous les paramètres de sécurité ont été effectués exclusivement à partir de l'interface graphique. Cependant, certaines choses sont complètement gênantes à faire via l'interface graphique (même une aussi pratique que celle de Check Point). Par exemple, la tâche consistant à ajouter 100 nouveaux hôtes ou réseaux se transforme en une procédure longue et fastidieuse. Pour chaque objet vous devrez cliquer plusieurs fois avec la souris et saisir l'adresse IP. Il en va de même pour la création d'un groupe de sites ou l'activation/désactivation en masse des signatures IPS. Dans ce cas, il y a une forte probabilité de se tromper.

Un « miracle » s’est produit relativement récemment. Avec la sortie de la nouvelle version Gaïa 80 R$ l'opportunité a été annoncée Utilisation de l'API, ce qui ouvre de larges possibilités d'automatisation des paramètres, de l'administration, de la surveillance, etc. Maintenant vous pouvez:

  • créer des objets ;
  • ajouter ou modifier des listes d'accès ;
  • activer/désactiver les lames ;
  • configurer les interfaces réseau ;
  • installer des politiques ;
  • И многое другое.

Pour être honnête, je ne comprends pas comment cette nouvelle est passée par Habr. Dans cet article, nous décrirons brièvement comment utiliser l'API et fournirons plusieurs exemples pratiques. Paramètres CheckPoint à l'aide de scripts.

Je voudrais tout de suite faire une réserve sur le fait que l'API est utilisée uniquement pour le serveur de gestion. Ceux. Il est encore impossible de gérer des passerelles sans serveur de gestion.

Qui peut en principe utiliser cette API ?

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

Schéma typique

Imaginons donc un schéma typique avec Check Point :

Vérifiez l'API R80.10. Contrôle via CLI, scripts et plus

Comme d'habitude nous avons une passerelle (SG), serveur de gestion (SMS) et la console d'administration (Console intelligente). Dans ce cas, le processus habituel de configuration de la passerelle ressemble à ceci :

Vérifiez l'API R80.10. Contrôle via CLI, scripts et plus

Ceux. Vous devez d'abord exécuter sur l'ordinateur de l'administrateur Console intelligente, avec lequel nous nous connectons au serveur de gestion (SMS). Les paramètres de sécurité sont définis sur le SMS, puis appliqués seulement (installer la politique) vers la passerelle (SG).

Lorsque vous utilisez le API de gestion, nous pouvons essentiellement ignorer le premier point (lancer SmartConsole) et utiliser Commandes API directement au serveur de gestion (SMS).

Façons d'utiliser l'API

Il existe quatre manières principales de modifier la configuration à l'aide de l'API :

1) Utilisation de l'utilitaire mgmt_cli

Exemple - # mgmt_cli ajoute le nom d'hôte host1, adresse IP 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 : host1 est créé avec l'adresse 192.168.2.100.

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

En gros, tout ce que vous avez à faire est de vous connecter à la ligne de commande (connexion à la gestion) sous le compte utilisé lors de la connexion via SmartConsole (ou compte root). Ensuite, vous pouvez entrer Commandes API (dans ce cas il n'est pas nécessaire d'utiliser l'utilitaire avant chaque commande mgmt_cli). Vous pouvez créer à part entière Scripts BASH. Un exemple de script créé par l'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 vous êtes intéressé, vous pouvez regarder la vidéo correspondante :

3) Via SmartConsole en ouvrant la fenêtre CLI

Tout ce que vous avez à faire c'est d'ouvrir la fenêtre CLI directement à partir de Console intelligente, comme le montre l'image ci-dessous.

Vérifiez l'API R80.10. Contrôle via CLI, scripts et plus

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

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

À notre avis, c'est l'une des méthodes les plus prometteuses, car vous permet de « construire » des applications entières basées sur gestion du serveur de gestion (désolé pour la tautologie). Ci-dessous, nous examinerons cette méthode un peu plus en détail.

Résumer:

  1. API + CLI plus adapté aux personnes habituées à Cisco ;
  2. API + shell pour appliquer des scripts et effectuer des tâches de routine ;
  3. API REST pour l'automatisation.

Activation de l'API

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

S'il s'avère que l'API est désactivée, alors il est assez simple de l'activer via SmartConsole : Gérer et paramètres > Lames > API de gestion > Paramètres avancés

Vérifiez l'API R80.10. Contrôle via CLI, scripts et plus

Puis publiez (Publier) change et exécutez la commande redémarrage de l'API.

Requêtes Web + Python

Pour exécuter des commandes API, vous pouvez utiliser des requêtes Web en utilisant Python et bibliothèques demandes, json. En général, la structure d'une requête Web se compose de trois parties :

1)Adresse

(https://<managemenet server>:<port>/web_api/<command>) 


2) En-têtes HTTP

content-Type: application/json
x-chkp-sid: <session ID token as returned by the login command>


3) Demander une charge utile

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

Exemple d'appel de diverses 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' -> Ip address GAIA

Voici quelques tâches typiques que vous rencontrez le plus souvent lors de l’administration de Check Point.

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

Scénario


    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) Allumer les lames et configurer le réseau :

Scénario


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 de pare-feu :

Scénario


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) Ajout d'une couche d'application :

Scénario


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) Publiez et définissez la politique, vérifiez l'exécution de la commande (task-id) :

Scénario


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) Ajouter un hôte :

Scénario


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) Ajoutez un champ Prévention des menaces :

Scénario


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) Afficher la liste des séances

Scénario


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éez un nouveau profil :

Scénario


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

Scénario


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

Scénario


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

Scénario


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))

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

API Check Point + Facteur

Également pratique à utiliser API Web de Check Point en collaboration avec Facteur. Postman propose des versions de bureau pour Windows, Linux et MacOS. De plus, il existe un plugin pour Google Chrome. C'est ce que nous utiliserons. Vous devez d’abord trouver Postman dans le Google Chrome Store et installer :

Vérifiez l'API R80.10. Contrôle via CLI, scripts et plus

Grâce à cet utilitaire, nous pourrons générer des requêtes Web vers l'API Check Point. Afin de ne pas mémoriser toutes les commandes API, il est possible d'importer ce que l'on appelle des collections (modèles), qui contiennent déjà toutes les commandes nécessaires :

Vérifiez l'API R80.10. Contrôle via CLI, scripts et plus

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

Vérifiez l'API R80.10. Contrôle via CLI, scripts et plus

À mon avis, c'est très pratique. Vous pouvez rapidement commencer à développer des applications à l'aide de l'API Check Point.

Point de contrôle + Ansible

Je voudrais également souligner qu'il existe Ansible module pour l'API CheckPoint. Le module permet de gérer les configurations, mais il n'est pas si pratique pour résoudre des problèmes exotiques. L'écriture de scripts dans n'importe quel langage de programmation offre des solutions plus flexibles et plus pratiques.

conclusion

C'est là que nous terminerons probablement notre brève revue de l'API Check Point. À mon avis, cette fonctionnalité était très attendue et nécessaire. L'émergence de l'API ouvre de très larges opportunités tant pour les administrateurs système que pour les intégrateurs système qui travaillent avec les produits Check Point. Orchestration, automatisation, feedback SIEM... tout est désormais possible.

PS Plus d'articles sur Check Point comme toujours, vous pouvez le trouver sur notre blog Habr ou sur le blog à En ligne.

PSS Pour les questions techniques liées à la configuration de Check Point, vous pouvez ici

Seuls les utilisateurs enregistrés peuvent participer à l'enquête. se connecters'il te plait.

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

Ajouter un commentaire