HTTPS API
VyOS предоставляет встроенный HTTPS/HTTP сервер для веб-интерфейса и REST/GraphQL API. Это позволяет автоматизировать управление роутером и интегрировать его с внешними системами.
Обзор
Ключевые компоненты
HTTPS Server:
- Nginx-based веб-сервер
- TLS/SSL шифрование
- Поддержка самоподписанных и настоящих сертификатов
- Virtual hosts (vhost)
API Endpoints:
- REST API: HTTP/JSON API для конфигурации и операций (VyOS 1.5+)
- GraphQL API: Гибкий query-based API (VyOS 1.5+)
- Legacy API: Совместимость с VyOS 1.4
Методы аутентификации:
- API keys (рекомендуется)
- Token-based authentication
VyOS 1.4 vs 1.5
VyOS 1.4 (Sagitta):
set service https api keys id <name> key '<api-key>'VyOS 1.5 (Circinus):
set service https api keys id <name> key '<api-key>'
set service https api rest # Включить REST API
set service https api graphql # Включить GraphQL API (опционально)В VyOS 1.5 REST и GraphQL endpoints раздельные.
Базовая конфигурация
Минимальная настройка HTTPS
# Базовый HTTPS сервер
set service https listen-address 0.0.0.0
set service https port 443
# Самоподписанный сертификат (для тестирования)
# VyOS автоматически генерирует при первом запуске
commit
saveВключение REST API (VyOS 1.5)
# HTTPS сервер
set service https listen-address 0.0.0.0
set service https port 443
# REST API
set service https api rest
set service https api keys id admin key 'MySecureAPIKey123!'
commit
saveВключение REST API (VyOS 1.4)
set service https listen-address 0.0.0.0
set service https port 443
# API (в 1.4 нет разделения rest/graphql)
set service https api keys id admin key 'MySecureAPIKey123!'
commit
saveПроверка работы
# Проверка статуса сервиса
show service https
# Проверка процесса
ps aux | grep nginx
# Проверка портов
netstat -tlnp | grep 443
# Тест REST API
curl -k https://localhost/retrieve \
-H "Content-Type: application/json" \
-d '{"op": "showConfig", "path": ["system", "host-name"]}' \
-H "key: MySecureAPIKey123!"Конфигурация сертификатов
Самоподписанный сертификат
VyOS автоматически создает самоподписанный сертификат при первом запуске HTTPS.
Генерация нового:
# Создать новый самоподписанный сертификат
generate pki certificate self-signed install vyos-https \
common-name "vyos.company.local" \
country "US" \
state "California" \
locality "San Francisco" \
organization "Company Inc" \
days 3650
# Применить к HTTPS
set service https certificates certificate vyos-https
commit
saveСертификат от CA
Использование сертификата от доверенного CA (Let’s Encrypt, корпоративный CA).
Подготовка сертификатов
Вам понадобятся:
- Certificate (server.crt): Серверный сертификат
- Private Key (server.key): Приватный ключ
- CA Certificate (ca.crt): Сертификат CA (опционально)
Импорт сертификатов
# Скопируйте файлы на роутер
scp server.crt vyos@router:/tmp/
scp server.key vyos@router:/tmp/
scp ca.crt vyos@router:/tmp/
# На роутере
configure
# Импорт CA
generate pki ca import ca-production file /tmp/ca.crt
# Импорт серверного сертификата и ключа
generate pki certificate import vyos-https-prod \
certificate-file /tmp/server.crt \
private-key-file /tmp/server.key
# Применить к HTTPS
set service https certificates certificate vyos-https-prod
commit
save
# Удалить временные файлы
rm /tmp/server.crt /tmp/server.key /tmp/ca.crtLet’s Encrypt с Certbot
Автоматическое получение и обновление сертификатов Let’s Encrypt.
# Установка Certbot (в shell, не в configure)
sudo apt-get update
sudo apt-get install certbot
# Получение сертификата (standalone mode)
# HTTPS сервис должен быть временно остановлен
sudo systemctl stop nginx
sudo certbot certonly --standalone -d vyos.example.com
# Импорт в VyOS
configure
generate pki certificate import letsencrypt-vyos \
certificate-file /etc/letsencrypt/live/vyos.example.com/fullchain.pem \
private-key-file /etc/letsencrypt/live/vyos.example.com/privkey.pem
set service https certificates certificate letsencrypt-vyos
commit
save
# Перезапуск HTTPS
restart service httpsАвтоматическое обновление
Создайте скрипт /config/scripts/renew-cert.sh:
#!/bin/bash
# Остановить nginx
systemctl stop nginx
# Обновить сертификат
certbot renew --quiet
# Проверить обновление
if [ $? -eq 0 ]; then
# Импорт нового сертификата
/usr/libexec/vyos/conf_mode/pki.py import-cert \
letsencrypt-vyos \
/etc/letsencrypt/live/vyos.example.com/fullchain.pem \
/etc/letsencrypt/live/vyos.example.com/privkey.pem
# Перезапуск nginx
systemctl restart nginx
else
# Запустить nginx даже при ошибке
systemctl start nginx
fiНастройка cron:
# Добавить в crontab (проверка каждый день в 3:00)
set system task-scheduler task renew-cert executable path '/config/scripts/renew-cert.sh'
set system task-scheduler task renew-cert interval 1d
set system task-scheduler task renew-cert start-time '03:00:00'
commitREST API
Структура API
REST API использует POST запросы на endpoint /configure, /retrieve, /show, etc.
Базовый URL: https://<router-ip>/
Endpoints:
/retrieve- Получение конфигурации (showConfig)/configure- Изменение конфигурации (set, delete, comment)/show- Операционные команды (show)/generate- Генерация ключей, сертификатов/reset- Сброс операций/image- Управление образами системы/config-file- Сохранение/загрузка конфигурации/reboot,/poweroff- Управление питанием
Аутентификация
# Header
key: MySecureAPIKey123!
# Или в URL (не рекомендуется)
?key=MySecureAPIKey123!Примеры REST API запросов
Получение конфигурации (retrieve)
# Hostname
curl -k https://192.168.1.1/retrieve \
-H "Content-Type: application/json" \
-H "key: MySecureAPIKey123!" \
-d '{
"op": "showConfig",
"path": ["system", "host-name"]
}'
# Все интерфейсы
curl -k https://192.168.1.1/retrieve \
-H "Content-Type: application/json" \
-H "key: MySecureAPIKey123!" \
-d '{
"op": "showConfig",
"path": ["interfaces"]
}'
# Вся конфигурация
curl -k https://192.168.1.1/retrieve \
-H "Content-Type: application/json" \
-H "key: MySecureAPIKey123!" \
-d '{
"op": "showConfig",
"path": []
}'Ответ:
{
"success": true,
"data": {
"host-name": "vyos-router"
}
}Изменение конфигурации (configure)
Set операция:
# Установить hostname
curl -k https://192.168.1.1/configure \
-H "Content-Type: application/json" \
-H "key: MySecureAPIKey123!" \
-d '{
"op": "set",
"path": ["system", "host-name", "vyos-gw"]
}'
# Установить IP адрес на интерфейсе
curl -k https://192.168.1.1/configure \
-H "Content-Type: application/json" \
-H "key: MySecureAPIKey123!" \
-d '{
"op": "set",
"path": ["interfaces", "ethernet", "eth1", "address", "192.168.10.1/24"]
}'Delete операция:
curl -k https://192.168.1.1/configure \
-H "Content-Type: application/json" \
-H "key: MySecureAPIKey123!" \
-d '{
"op": "delete",
"path": ["interfaces", "ethernet", "eth1", "address", "192.168.10.1/24"]
}'Comment операция:
curl -k https://192.168.1.1/configure \
-H "Content-Type: application/json" \
-H "key: MySecureAPIKey123!" \
-d '{
"op": "comment",
"path": ["interfaces", "ethernet", "eth1"],
"value": "Management interface"
}'Batch операции
Множественные изменения за один запрос:
curl -k https://192.168.1.1/configure \
-H "Content-Type: application/json" \
-H "key: MySecureAPIKey123!" \
-d '{
"op": "set",
"path": ["interfaces", "ethernet", "eth2"],
"commands": [
{"op": "set", "path": ["address", "10.0.0.1/24"]},
{"op": "set", "path": ["description", "LAN"]},
{"op": "set", "path": ["mtu", "1500"]}
]
}'Show команды
# Show interfaces
curl -k https://192.168.1.1/show \
-H "Content-Type: application/json" \
-H "key: MySecureAPIKey123!" \
-d '{
"op": "show",
"path": ["interfaces"]
}'
# Show version
curl -k https://192.168.1.1/show \
-H "Content-Type: application/json" \
-H "key: MySecureAPIKey123!" \
-d '{
"op": "show",
"path": ["version"]
}'Generate операции
# Generate WireGuard key
curl -k https://192.168.1.1/generate \
-H "Content-Type: application/json" \
-H "key: MySecureAPIKey123!" \
-d '{
"op": "generate",
"path": ["wireguard", "default-keypair"]
}'Config-file операции
# Save конфигурация
curl -k https://192.168.1.1/config-file \
-H "Content-Type: application/json" \
-H "key: MySecureAPIKey123!" \
-d '{
"op": "save"
}'
# Load конфигурация
curl -k https://192.168.1.1/config-file \
-H "Content-Type: application/json" \
-H "key: MySecureAPIKey123!" \
-d '{
"op": "load",
"file": "/config/backup.config"
}'Управление питанием
# Reboot
curl -k https://192.168.1.1/reboot \
-H "Content-Type: application/json" \
-H "key: MySecureAPIKey123!" \
-d '{
"op": "reboot",
"path": ["now"]
}'
# Poweroff
curl -k https://192.168.1.1/poweroff \
-H "Content-Type: application/json" \
-H "key: MySecureAPIKey123!" \
-d '{
"op": "poweroff",
"path": ["now"]
}'Python примеры
import requests
import json
# Disable SSL warnings для самоподписанных сертификатов
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
class VyOSAPI:
def __init__(self, host, api_key):
self.base_url = f"https://{host}"
self.headers = {
"Content-Type": "application/json",
"key": api_key
}
def show_config(self, path):
"""Получить конфигурацию"""
data = {
"op": "showConfig",
"path": path
}
response = requests.post(
f"{self.base_url}/retrieve",
headers=self.headers,
json=data,
verify=False
)
return response.json()
def set_config(self, path, value=None):
"""Установить конфигурацию"""
data = {
"op": "set",
"path": path
}
if value:
data["value"] = value
response = requests.post(
f"{self.base_url}/configure",
headers=self.headers,
json=data,
verify=False
)
return response.json()
def delete_config(self, path):
"""Удалить конфигурацию"""
data = {
"op": "delete",
"path": path
}
response = requests.post(
f"{self.base_url}/configure",
headers=self.headers,
json=data,
verify=False
)
return response.json()
def save(self):
"""Сохранить конфигурацию"""
data = {"op": "save"}
response = requests.post(
f"{self.base_url}/config-file",
headers=self.headers,
json=data,
verify=False
)
return response.json()
def show(self, path):
"""Операционная команда show"""
data = {
"op": "show",
"path": path
}
response = requests.post(
f"{self.base_url}/show",
headers=self.headers,
json=data,
verify=False
)
return response.json()
# Использование
api = VyOSAPI("192.168.1.1", "MySecureAPIKey123!")
# Получить hostname
result = api.show_config(["system", "host-name"])
print(f"Hostname: {result['data']}")
# Установить новый hostname
api.set_config(["system", "host-name", "new-hostname"])
api.save()
# Show interfaces
interfaces = api.show(["interfaces"])
print(json.dumps(interfaces, indent=2))GraphQL API (VyOS 1.5+)
GraphQL API обеспечивает более гибкий query-based интерфейс.
Включение GraphQL
set service https api graphql
set service https api keys id graphql-user key 'GraphQLKey123!'
commit
saveGraphQL Endpoint
URL: https://<router-ip>/graphql
Примеры GraphQL запросов
Получение конфигурации
curl -k https://192.168.1.1/graphql \
-H "Content-Type: application/json" \
-H "key: GraphQLKey123!" \
-d '{
"query": "{ systemStatus { hostname version uptime } }"
}'Изменение конфигурации
curl -k https://192.168.1.1/graphql \
-H "Content-Type: application/json" \
-H "key: GraphQLKey123!" \
-d '{
"query": "mutation { configSet(path: \"system host-name\", value: \"vyos-gw\") { success errors } }"
}'GraphQL документация доступна через GraphiQL интерфейс:
https://<router-ip>/graphql (в браузере)
Продвинутая конфигурация
Множественные API ключи
# Admin полный доступ
set service https api keys id admin key 'AdminKey123!'
# Read-only пользователь (только через firewall ограничение)
set service https api keys id readonly key 'ReadOnlyKey456!'
# Monitoring система
set service https api keys id monitoring key 'MonitorKey789!'
commitПримечание: VyOS API не имеет встроенного RBAC. Используйте разные ключи и контролируйте доступ через firewall.
Ограничение доступа к API
# Разрешить API только с определенных IP
set firewall ipv4 input filter rule 100 action accept
set firewall ipv4 input filter rule 100 destination port 443
set firewall ipv4 input filter rule 100 protocol tcp
set firewall ipv4 input filter rule 100 source address 192.168.1.0/24
set firewall ipv4 input filter rule 100 description 'Allow HTTPS API from management network'
# Заблокировать остальных
set firewall ipv4 input filter rule 109 action drop
set firewall ipv4 input filter rule 109 destination port 443
set firewall ipv4 input filter rule 109 protocol tcp
commitListen на определенных интерфейсах
# Только на management интерфейсе
set service https listen-address 192.168.1.1
# На нескольких интерфейсах
set service https listen-address 192.168.1.1
set service https listen-address 10.0.0.1
commitИзменение порта
# Нестандартный порт
set service https port 8443
commitVirtual hosts
# Vhost для разных доменов
set service https virtual-host api.example.com listen-address 0.0.0.0
set service https virtual-host api.example.com listen-port 443
set service https virtual-host api.example.com server-name api.example.com
# Отдельный сертификат для vhost
set service https virtual-host api.example.com certificates certificate api-cert
commitCORS настройки
Для веб-приложений, обращающихся к API:
set service https api cors allow-origin '*'
# Или конкретные домены
set service https api cors allow-origin 'https://admin.example.com'
commitБезопасность
Рекомендации по безопасности
- Сильные API ключи:
# Генерация случайного ключа
openssl rand -base64 32
# Пример: xK8pL9mN2qR5sT7vW0yZ3aB6cD9eF1gH2iJ4kL7mN0pQ=
set service https api keys id admin key 'xK8pL9mN2qR5sT7vW0yZ3aB6cD9eF1gH2iJ4kL7mN0pQ='Настоящие TLS сертификаты:
- Используйте Let’s Encrypt или корпоративный CA
- Не используйте самоподписанные в production
Ограничение доступа:
# Firewall rules
set firewall ipv4 input filter rule 100 source address 192.168.1.0/24
# Listen только на management интерфейсе
set service https listen-address 192.168.1.1- Rate limiting:
set firewall ipv4 input filter rule 100 recent count 10
set firewall ipv4 input filter rule 100 recent time minute 1- TLS версия:
# Минимальная версия TLS 1.2
set service https tls-version '1.2'Отключите HTTP (только HTTPS):
- VyOS по умолчанию использует только HTTPS
Ротация API ключей:
- Регулярно меняйте API ключи
- Используйте разные ключи для разных приложений
Логирование API запросов:
# Nginx логи
show log https
# Access log
cat /var/log/nginx/access.logАудит доступа
# Просмотр Nginx access логов
show log https access
# Поиск неудачных запросов
cat /var/log/nginx/access.log | grep '401\|403'
# Активные соединения
netstat -tn | grep :443Интеграция с внешними системами
Ansible
---
- name: Configure VyOS via API
hosts: localhost
gather_facts: no
vars:
vyos_host: "192.168.1.1"
vyos_api_key: "MySecureAPIKey123!"
tasks:
- name: Set hostname
uri:
url: "https://{{ vyos_host }}/configure"
method: POST
headers:
key: "{{ vyos_api_key }}"
Content-Type: "application/json"
body_format: json
body:
op: "set"
path: ["system", "host-name", "vyos-ansible"]
validate_certs: no
register: result
- name: Save configuration
uri:
url: "https://{{ vyos_host }}/config-file"
method: POST
headers:
key: "{{ vyos_api_key }}"
Content-Type: "application/json"
body_format: json
body:
op: "save"
validate_certs: noTerraform
terraform {
required_providers {
vyos = {
source = "example/vyos"
version = "1.0.0"
}
}
}
provider "vyos" {
endpoint = "https://192.168.1.1"
api_key = "MySecureAPIKey123!"
}
resource "vyos_interface" "eth2" {
name = "eth2"
address = "10.0.0.1/24"
description = "LAN managed by Terraform"
}Monitoring (Prometheus)
# Экспортер метрик VyOS для Prometheus
from prometheus_client import start_http_server, Gauge
import requests
import time
# Метрики
interface_status = Gauge('vyos_interface_status', 'Interface status', ['interface'])
interface_rx_bytes = Gauge('vyos_interface_rx_bytes', 'RX bytes', ['interface'])
interface_tx_bytes = Gauge('vyos_interface_tx_bytes', 'TX bytes', ['interface'])
class VyOSExporter:
def __init__(self, vyos_host, api_key):
self.api = VyOSAPI(vyos_host, api_key)
def collect(self):
# Получить статистику интерфейсов
result = self.api.show(["interfaces"])
for iface, data in result['data'].items():
interface_status.labels(interface=iface).set(1 if data['state'] == 'up' else 0)
interface_rx_bytes.labels(interface=iface).set(data['stats']['rx_bytes'])
interface_tx_bytes.labels(interface=iface).set(data['stats']['tx_bytes'])
if __name__ == '__main__':
exporter = VyOSExporter("192.168.1.1", "MySecureAPIKey123!")
start_http_server(9100)
while True:
exporter.collect()
time.sleep(15)Webhook для событий
# Event handler для отправки webhook
set system event-handler route-change name 'route-webhook'
set system event-handler route-change script '/config/scripts/route-webhook.sh'
set system event-handler route-change pattern 'route added|route deleted'
commit/config/scripts/route-webhook.sh:
#!/bin/bash
EVENT="$1"
curl -X POST https://monitoring.example.com/webhook \
-H "Content-Type: application/json" \
-d "{\"event\": \"$EVENT\", \"router\": \"vyos-gw\", \"timestamp\": \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"}"Troubleshooting
HTTPS не запускается
Проблема: Сервис HTTPS не стартует.
Диагностика:
# Проверить статус
show service https
# Nginx статус
systemctl status nginx
# Логи
show log https
cat /var/log/nginx/error.log
# Проверить конфигурацию nginx
nginx -tВозможные причины:
- Порт 443 занят другим процессом
- Проблемы с сертификатом
- Синтаксическая ошибка в конфигурации
Решение:
# Проверить что занимает порт
netstat -tlnp | grep :443
# Перезапустить сервис
restart service httpsAPI возвращает 401 Unauthorized
Проблема: API запросы не проходят аутентификацию.
Причины:
- Неправильный API key
- API key не настроен
- Неправильный header
Решение:
# Проверить API keys
show service https api keys
# Убедиться что key передается в header
curl -k https://192.168.1.1/retrieve \
-H "key: MySecureAPIKey123!" \
-vAPI возвращает 404
Проблема: Endpoint не найден.
VyOS 1.5 специфика:
- В VyOS 1.5 нужно явно включить REST API:
set service https api rest
commitМедленные ответы API
Проблема: API запросы долго выполняются.
Диагностика:
# CPU load
show system cpu
# Memory
show system memory
# Process list
topРешение:
- Уменьшите частоту запросов
- Используйте batch операции
- Кэшируйте результаты на клиенте
Проблемы с SSL сертификатом
Проблема: “SSL certificate problem: self signed certificate”.
Решение:
# В curl: использовать -k
curl -k https://...
# В Python: verify=False
requests.post(url, verify=False)
# Или импортировать CA сертификат в системуМониторинг и метрики
Nginx статистика
# Active connections
cat /var/run/nginx/nginx-status
# Access log анализ
cat /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn
# Requests per minute
cat /var/log/nginx/access.log | awk '{print $4}' | cut -d: -f1-3 | uniq -cAPI использование
# Количество API запросов
grep "POST /configure" /var/log/nginx/access.log | wc -l
# Top API users (по IP)
grep "POST /" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn
# Ошибки API
grep "HTTP/1.1\" [45]" /var/log/nginx/access.logПримеры использования
Пример 1: Автоматизация настройки DHCP
import requests
import json
class DHCPManager:
def __init__(self, router, api_key):
self.router = router
self.api_key = api_key
self.base_url = f"https://{router}"
self.headers = {
"Content-Type": "application/json",
"key": api_key
}
def add_dhcp_static_mapping(self, network, name, mac, ip):
"""Добавить статический DHCP mapping"""
path = [
"service", "dhcp-server",
"shared-network-name", network,
"subnet", self.get_subnet(network),
"static-mapping", name,
"mac-address", mac
]
# Set MAC
self.api_call("/configure", {"op": "set", "path": path})
# Set IP
path[-1] = "ip-address"
path.append(ip)
self.api_call("/configure", {"op": "set", "path": path})
# Save
self.api_call("/config-file", {"op": "save"})
def api_call(self, endpoint, data):
response = requests.post(
f"{self.base_url}{endpoint}",
headers=self.headers,
json=data,
verify=False
)
return response.json()
def get_subnet(self, network):
# Получить subnet для network
result = self.api_call("/retrieve", {
"op": "showConfig",
"path": ["service", "dhcp-server", "shared-network-name", network]
})
return list(result['data']['subnet'].keys())[0]
# Использование
dhcp = DHCPManager("192.168.1.1", "MySecureAPIKey123!")
dhcp.add_dhcp_static_mapping("LAN", "server1", "00:50:56:11:22:33", "192.168.1.10")Пример 2: Backup конфигурации
#!/bin/bash
# backup-vyos.sh - Автоматический backup конфигурации
ROUTER="192.168.1.1"
API_KEY="MySecureAPIKey123!"
BACKUP_DIR="/backup/vyos"
DATE=$(date +%Y%m%d-%H%M%S)
# Получить конфигурацию
curl -k https://${ROUTER}/retrieve \
-H "Content-Type: application/json" \
-H "key: ${API_KEY}" \
-d '{"op": "showConfig", "path": []}' \
> ${BACKUP_DIR}/config-${DATE}.json
# Получить текстовую конфигурацию
curl -k https://${ROUTER}/retrieve \
-H "Content-Type: application/json" \
-H "key: ${API_KEY}" \
-d '{"op": "show", "path": ["configuration"]}' \
> ${BACKUP_DIR}/config-${DATE}.txt
# Удалить старые backup (>30 дней)
find ${BACKUP_DIR} -type f -mtime +30 -delete
echo "Backup completed: ${BACKUP_DIR}/config-${DATE}.json"Пример 3: Health check monitoring
#!/usr/bin/env python3
# vyos-health-check.py
import requests
import sys
import json
from datetime import datetime
class VyOSHealthCheck:
def __init__(self, router, api_key):
self.api = VyOSAPI(router, api_key)
self.status = {"healthy": True, "issues": []}
def check_interfaces(self):
"""Проверить статус интерфейсов"""
result = self.api.show(["interfaces"])
for iface, data in result['data'].items():
if data['admin_state'] == 'up' and data['state'] != 'up':
self.status["healthy"] = False
self.status["issues"].append(f"Interface {iface} is down")
def check_bgp(self):
"""Проверить BGP neighbors"""
result = self.api.show(["bgp", "summary"])
for neighbor in result['data']['neighbors']:
if neighbor['state'] != 'Established':
self.status["healthy"] = False
self.status["issues"].append(f"BGP neighbor {neighbor['ip']} not established")
def check_vpn(self):
"""Проверить VPN туннели"""
result = self.api.show(["vpn", "ipsec", "sa"])
for tunnel in result['data']['tunnels']:
if tunnel['state'] != 'up':
self.status["healthy"] = False
self.status["issues"].append(f"VPN tunnel {tunnel['name']} is down")
def run(self):
"""Запустить все проверки"""
self.check_interfaces()
self.check_bgp()
self.check_vpn()
# Вывод результата
print(json.dumps({
"timestamp": datetime.utcnow().isoformat(),
"healthy": self.status["healthy"],
"issues": self.status["issues"]
}, indent=2))
# Exit code
sys.exit(0 if self.status["healthy"] else 1)
if __name__ == '__main__':
checker = VyOSHealthCheck("192.168.1.1", "MySecureAPIKey123!")
checker.run()Лучшие практики
- Используйте HTTPS - никогда не используйте HTTP в production
- Сильные API ключи - минимум 32 символа, случайные
- Настоящие сертификаты - Let’s Encrypt или корпоративный CA
- Ограничьте доступ - firewall rules для API endpoints
- Разные ключи - используйте разные API ключи для разных приложений
- Rate limiting - защита от brute-force
- Логирование - включите подробное логирование API запросов
- Мониторинг - отслеживайте API использование
- Версионирование - документируйте версию API в коде
- Error handling - обрабатывайте ошибки API корректно
- Timeout - устанавливайте разумные timeout для API запросов
- Retry logic - реализуйте retry для transient ошибок
- Backup - автоматизируйте backup конфигурации через API
- Testing - тестируйте API интеграцию в staging среде
- Documentation - документируйте все API интеграции
Заключение
HTTPS/REST API в VyOS предоставляет мощный инструмент для автоматизации и интеграции. Правильная настройка безопасности (сертификаты, API ключи, firewall) критична для защиты инфраструктуры.
Основные use cases:
- Автоматизация конфигурации через Ansible/Terraform
- Мониторинг состояния роутера
- Интеграция с внешними системами
- Self-service порталы для управления сетью
- CI/CD для network infrastructure as code
VyOS API обеспечивает полный доступ к конфигурации и операционным командам, делая VyOS идеальным выбором для современных автоматизированных сетевых инфраструктур.