טשעק פּוינט ר80.10 אַפּי. פאַרוואַלטונג דורך CLI, סקריפּס און מער

טשעק פּוינט ר80.10 אַפּי. פאַרוואַלטונג דורך CLI, סקריפּס און מער

Уверен, что у каждого, кто когда-либо работал с טשעק פּוינט, возникала претензия по поводу невозможности правки конфигурации из командной строки. Это особенно дико для тех, кто до этого работал с Cisco ASA, где абсолютно все можно настроить в CLI. У Check Point-а все наоборот — все настройки безопасности выполнялись исключительно из графического интерфейса. Однако, некоторые вещи совершенно не удобно делать через GUI (даже такой удобный как у Check Point). К примеру задача по добавлению 100 новых хостов или сетей превращается в долгую и нудную процедуру. Для каждого объекта придется несколько раз кликать мышкой и вбивать ip-адрес. То же самое касается создания группы сайтов или массового включения/отключения IPS сигнатур. При этом велика вероятность допустить ошибку.

Относительно недавно случилось “чудо”. С выходом новой версии גאַיאַ ר80 была анонсирована возможность использования API, что открывает широкие возможности по автоматизации настроек, администрированию, мониторингу и т.д. Теперь можно:

  • создавать объекты;
  • добавлять или править access-list-ы;
  • включать/отключать блейды;
  • настраивать сетевые интерфейсы;
  • инсталлировать политики;
  • און פיל מער.

Если честно, не понимаю как эта новость прошла мимо Хабра. В данной статье мы вкратце опишем как пользоваться API и приведем несколько практических примеров настройки CheckPoint с помощью скриптов.

Сразу хотел бы оговориться, API используется только для Management сервера. Т.е. управлять шлюзами без Management сервера по прежнему невозможно.

Кому в принципе может пригодиться данный API?

  1. Системные администраторы, которые хотят упростить или автоматизировать рутинные задачи по настройке Check Point;
  2. Компании, которые хотят интегрировать Check Point с другими решениями (системы виртуализации, тикет-системы, системы управления конфигурациями и т.д.);
  3. Системные интеграторы, которые хотят стандартизировать настройки или создать дополнительные продукты связанные с Check Point.

Типовая схема

И так, представим типовую схему с Check Point:

טשעק פּוינט ר80.10 אַפּי. פאַרוואַלטונג דורך CLI, סקריפּס און מער

Как обычно у нас есть шлюз (SG), сервер управления (SMS) и консоль администратора (SmartConsole). При этом обычный процесс настройки шлюза выглядит следующим образом:

טשעק פּוינט ר80.10 אַפּי. פאַרוואַלטונג דורך CLI, סקריפּס און מער

Т.е. сначала необходимо на компьютере администратора запустить SmartConsole, с помощью которой мы подключаемся к Management-серверу (SMS). На SMS выполняются настройки безопасности, а уже затем применяются (install policy) на шлюз (SG).

ווען ניצן פאַרוואַלטונג אַפּי, мы в принципе можем пропустить первый пункт (запуск 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

Все что нужно сделать, это запустить окошко קלי прямо из SmartConsole, как это показано на картинке ниже.

טשעק פּוינט ר80.10 אַפּי. פאַרוואַלטונג דורך CLI, סקריפּס און מער

В этом окне можно сразу начинать вводить API-команды.

4) Web Services. Использовать HTTPS Post request (REST API)

На наш взгляд это один из самых перспективных способов, т.к. позволяет “строить” целые приложения по управлению сервером управления (извиняюсь за тавтологию). Ниже мы рассмотрим данный метод чуть подробнее.

צו קיצער:

  1. API + cli больше подходит для людей, кто привык к Cisco;
  2. API + shell для применения скриптов и выполнения рутинных задач;
  3. REST API для автоматизации.

Включение API

По-умолчанию, API включен на менеджмент серверах с объемом RAM более 4Гб и standalone конфигурациях с RAM более 8Гб. Проверить статус можно с помощью команды: api status

Если окажется, что api выключен, то его довольно просто включить через SmartConsole: Manage & Settings > Blades > Management API > Advanced Settings

טשעק פּוינט ר80.10 אַפּי. פאַרוואַלטונג דורך CLI, סקריפּס און מער

Затем опубликовать (אַרויסגעבן) изменения и выполнить команду api restart.

Web requests + Python

Для выполнения API-команд можно использовать Web-запросы с применением פּיטהאָן и библиотек requests, דזשסאָן. В общем виде структура 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))

אין דערצו, מיט די הילף וועב אַפּי вы можете добавлять и удалять сети, хосты, роли доступа и т.д. Есть возможность настройки блейдов Antivirus, Antibot, IPS, VPN. Возможна даже установка лицензий с помощью команды לויפן-שריפט. Со всеми API-командами Check Point можно ознакомиться דאָ.

Check Point API + Postman

Также удобно использовать Check Point Web API в связке с פּאָסטמאַן. Postman имеет десктопные версии для Windows, Linux и MacOS. Кроме того, есть плагин для Google Chrome. Им мы и воспользуемся. Для начала необходимо найти Postman в Google Chrome Store и установить:

טשעק פּוינט ר80.10 אַפּי. פאַרוואַלטונג דורך CLI, סקריפּס און מער

С помощью этой утилиты мы сможем формировать Web-запросы к API Check Point. Чтобы не запоминать все API-команды, есть возможность импортировать так называемые collection-ы (шаблоны), которые уже содержат все необходимые команды:

טשעק פּוינט ר80.10 אַפּי. פאַרוואַלטונג דורך CLI, סקריפּס און מער

דאָ איר וועט געפֿינען זאַמלונג פאַר רקסנומקס. После импорта нам станут доступны шаблоны API-команд:

טשעק פּוינט ר80.10 אַפּי. פאַרוואַלטונג דורך CLI, סקריפּס און מער

На мой взгляд, это очень удобно. Можно весьма быстро приступить к разработке приложений с использованием Check Point API.

Check Point + Ansible

Также хотелось бы отметить, что существует Ansible מאָדולע для CheckPoint API. Модуль позволяет управлять конфигурациями, но он не так удобен для решения экзотических задач. Написание скриптов на любом языке программирования дает более гибкие и удобные решения.

רעזולטאַט

На этом пожалуй мы закончим наш небольшой обзор Check Point API. На мой взгляд эта функция была очень долгожданной и необходимой. Появление API открывает очень широкие возможности как для системных администраторов, так и для системных интеграторов, которые работают с продуктами Check Point. Оркестрация, автоматизация, обратная связь с SIEM… все это теперь возможно.

P.S. Больше статей о טשעק פּוינט вы как всегда можете найти в нашем блоге Habr или в блоге на אָנליין.

P.S.S. Задать технические вопросы, связанные с настройкой Check Point, можно דאָ

בלויז רעגיסטרירט ניצערס קענען אָנטייל נעמען אין די יבערבליק. סיין ארייןביטע.

Планируете ли вы использовать API?

  • קסנומקס%יאָ12

  • קסנומקס%No4

  • קסנומקס%Уже использую1

17 באנוצער האבן געשטימט. 3 באנוצער האבן זיך אפגעהאלטן.

מקור: www.habr.com

לייגן אַ באַמערקונג