
Tenho certeza de que todos que já trabalharam com , 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?
- Administradores de sistemas que desejam simplificar ou automatizar tarefas rotineiras na configuração do Check Point;
- 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.);
- 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:

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:

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:

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.

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:
- API + cli é mais adequado para pessoas acostumadas com Cisco;
- API + shell para a aplicação de scripts e execução de tarefas rotineiras;
- 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

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 .
Check Point API + Postman
Também é conveniente usar Check Point Web API em conjunto com . 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:

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:

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

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 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 você sempre pode encontrar em nosso blog ou no blog em .
P.S.S. Para fazer perguntas técnicas relacionadas à configuração do Check Point, você pode
Apenas usuários registrados podem participar da pesquisa. , 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
