Check Point R80.10 API. Gestão através de CLI, scripts e mais

Check Point R80.10 API. Gestão através de CLI, scripts e mais

Tenho certeza de que todos que já trabalharam com Check Point, já tiveram reclamações sobre a impossibilidade de editar a configuração através da linha de comando. Isso é especialmente insensato para aqueles que anteriormente trabalharam com Cisco ASA, onde tudo pode ser configurado na CLI. No Check Point, é o contrário — todas as configurações de segurança são feitas exclusivamente através da interface gráfica. No entanto, algumas coisas são extremamente inconvenientes de fazer pelo GUI (mesmo um tão prático quanto o do Check Point). Por exemplo, a tarefa de adicionar 100 novos hosts ou redes se torna um longo e tedioso processo. Para cada objeto, é necessário clicar várias vezes e digitar o endereço IP. O mesmo se aplica à criação de grupos de sites ou habilitação/desabilitação em massa de assinaturas IPS. Além disso, há uma grande probabilidade de cometer um erro.

Recentemente, ocorreu um "milagre". Com o lançamento da nova versão Gaia R80 , foi anunciada a possibilidade de usar API, que abre amplas oportunidades para automação de configurações, administração, monitoramento, etc. Agora é possível:

  • criar objetos;
  • adicionar ou editar listas de controle de acesso;
  • habilitar/desabilitar blades;
  • configurar interfaces de rede;
  • instalar políticas;
  • e muito mais.

Para ser honesto, não entendo como essa notícia passou despercebida no Habr. Neste artigo, descreveremos brevemente como usar a API e forneceremos alguns exemplos práticos de configuração do Check Point por meio de scripts.

Quero esclarecer de imediato que a API é usada apenas para o servidor de gerenciamento. Ou seja, ainda é impossível gerenciar gateways sem o servidor de gerenciamento.

Quem pode realmente se beneficiar dessa API?

  1. Administradores de sistemas que desejam simplificar ou automatizar tarefas rotineiras na configuração do Check Point;
  2. Empresas que desejam integrar o Check Point com outras soluções (sistemas de virtualização, sistemas de ticket, sistemas de gerenciamento de configurações, etc.);
  3. Integradores de sistemas que desejam padronizar configurações ou criar produtos adicionais relacionados ao Check Point.

Esquema típico

E assim, vamos imaginar um esquema típico com Check Point:

Check Point R80.10 API. Gestão através de CLI, scripts e mais

Como de costume, temos um gateway (SG), um servidor de gerenciamento (SMS) e o console do administrador (SmartConsole). O processo normal de configuração do gateway é o seguinte:

Check Point R80.10 API. Gestão através de CLI, scripts e mais

Ou seja, primeiro é necessário iniciar no computador do administrador SmartConsole, com o qual nos conectamos ao Management Server (SMS). As configurações de segurança são realizadas no SMS, e depois aplicadas (install policy) no gateway (SG).

Ao usar Management API, basicamente podemos pular o primeiro passo (iniciar o SmartConsole) e aplicar comandos API diretamente no Management Server (SMS).

Maneiras de utilizar a API

Para editar a configuração usando a API, existem quatro maneiras principais:

1) Usando a ferramenta mgmt_cli

Exemplo — # mgmt_cli add host name host1 ip-address 192.168.2.100
Este comando é executado a partir da linha de comando do Management Server (SMS). Acredito que a sintaxe do comando seja clara — um host1 é criado com o endereço 192.168.2.100.

2) Inserindo comandos API através do clish (em modo expert)

Basicamente, tudo o que você precisa fazer é fazer login na linha de comando (mgmt login) com a conta que é utilizada para a conexão via SmartConsole (ou a conta root). Depois disso, você pode inserir comandos API (neste caso, não há necessidade de usar a ferramenta mgmt_cli). Você pode criar scripts completos em BASH.Exemplo de script que cria um host:

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

Se você estiver interessado, pode assistir o vídeo correspondente:

Por que no hosting comum a administração do PrestaShop é lenta, e no seu não é?

3) Através do SmartConsole, abrindo a janela CLI

Tudo o que você precisa fazer é iniciar a janela CLI diretamente de SmartConsole, como mostrado na imagem abaixo.

Check Point R80.10 API. Gestão através de CLI, scripts e mais

Nesta janela, você pode começar a inserir comandos API imediatamente.

4) Web Services. Usar um pedido HTTPS Post (REST API)

Em nossa opinião, esta é uma das maneiras mais promissoras, pois permite 'construir' aplicativos completos para gerenciar o servidor de gerenciamento (desculpe pela tautologia). Abaixo, examinaremos este método com um pouco mais de detalhe.

Resumindo:

  1. API + cli é mais adequado para pessoas acostumadas com Cisco;
  2. API + shell para a aplicação de scripts e execução de tarefas rotineiras;
  3. REST API para automação.

Ativar API

Por padrão, a API está ativada em servidores de gerenciamento com mais de 4GB de RAM e em configurações autônomas com mais de 8GB de RAM. Você pode verificar o status usando o comando: api status

Se descobrir que a API está desativada, é bastante simples ativá-la através do SmartConsole: Manage & Settings > Blades > Management API > Advanced Settings

Check Point R80.10 API. Gestão através de CLI, scripts e mais

Em seguida, publique (Publicação do relatório) as alterações e execute o comando api restart.

Requisições Web + Python

Para executar comandos API, você pode usar requisições Web com a aplicação de Python e bibliotecas requests, json. De maneira geral, a estrutura da requisição web consiste em três partes:

1) Endereço

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


2) Cabeçalhos HTTP

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


3) Payload da requisição

Texto em formato JSON contendo os diferentes parâmetros

Exemplo para chamar vários comandos:


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' -> Endereço IP GAIA

Vamos apresentar algumas tarefas típicas que mais frequentemente encontramos na administração do Check Point.

1) Exemplo de funções de autenticação e logout:

Script


    payload = {'user': 'seu_usuario', 'password' : 'sua_senha'}
    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) Ativação de blades e configuração da rede:

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) Alteração das regras do firewall:

Script


new_access_data = {'name':'Regra de Limpeza','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) Adição de camada de Aplicação:

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) Publicar e instalar a política, verificar a execução do comando (task-id):

Script


publish_result = api_call('xxx.xxx.xxx.xxx', 443, 'publish', {}, sid)
print("resultado da publicação: " + 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) Adicionar host:

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) Adicionar campo de Prevenção de Ameaças:

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) Ver a lista de sessões

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) Criar um novo perfil:

Script


add_threat_profile={'name':'Apeiron', "active-protections-performance-impact" : "baixo","active-protections-severity" : "baixo ou acima","confidence-level-medium" : "prevenir",
  "confidence-level-high" : "prevenir", "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" : "Alto ou inferior"},
  "overrides" : [ {"protection" : "3Com Network Supervisor Directory Traversal","capture-packets" : True,"action" : "Prevenir","track" : "Log"},
                  {"protection" : "7-Zip ARJ Archive Handling Buffer Overflow", "capture-packets" : True,"action" : "Prevenir","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) Mudar a ação para a assinatura IPS:

Script


set_threat_protection={
  "name" : "3Com Network Supervisor Directory Traversal",
  "overrides" : [{ "profile" : "Apeiron","action" : "Detectar","track" : "Log","capture-packets" : True},
    { "profile" : "Apeiron", "action" : "Detectar", "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) Adicionar seu serviço:

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) Adicionar uma categoria, site ou grupo:

Script


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

Além disso, com o Web API você pode adicionar e remover redes, hosts, funções de acesso etc. Há também a possibilidade de configurar blades Antivírus, Antibot, IPS, VPN. É até possível instalar licenças usando o comando run-script. Todas as comandos da API do Check Point podem ser consultados aqui.

Check Point API + Postman

Também é conveniente usar Check Point Web API em conjunto com Postman. O Postman tem versões desktop para Windows, Linux e MacOS. Além disso, há um plugin para Google Chrome. Nós vamos usá-lo. Primeiro, você precisa encontrar o Postman na Google Chrome Store e instalá-lo:

Check Point R80.10 API. Gestão através de CLI, scripts e mais

Com esta ferramenta, podemos fazer solicitações Web à API Check Point. Para não ter que decorar todos os comandos da API, existe a possibilidade de importar as chamadas coleções (modelos), que já contêm todos os comandos necessários:

Check Point R80.10 API. Gestão através de CLI, scripts e mais

Aqui você encontrará coleção para R80.10. Após a importação, teremos acesso aos modelos de comandos da API:

Check Point R80.10 API. Gestão através de CLI, scripts e mais

Na minha opinião, isso é muito conveniente. É possível começar rapidamente o desenvolvimento de aplicativos utilizando a API Check Point.

Check Point + Ansible

Também gostaria de destacar que existe Ansible módulo para a API CheckPoint. O módulo permite gerenciar configurações, mas não é tão prático para resolver tarefas exóticas. A escrita de scripts em qualquer linguagem de programação oferece soluções mais flexíveis e convenientes.

Saída

Com isso, vamos encerrar nossa breve análise da API Check Point. Na minha avaliação, essa funcionalidade era muito aguardada e necessária. O surgimento da API abre possibilidades muito amplas tanto para administradores de sistemas quanto para integradores de sistemas que trabalham com produtos Check Point. Orquestração, automação, feedback com SIEM... tudo isso agora é possível.

P.S. Mais artigos sobre Check Point você sempre pode encontrar em nosso blog Habr ou no blog em site.

P.S.S. Para fazer perguntas técnicas relacionadas à configuração do Check Point, você pode aqui

Apenas usuários registrados podem participar da pesquisa. Entre, por favor.

Você planeja usar a API?

  • 70,6%Sim12

  • 23,5%Não4

  • 5,9%Já estou usando1

Votaram 17 usuários. 3 usuários se abstiveram.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster