Mengintegrasikan Large Language Model (LLM) agent langsung ke antarmuka eksekusi RouterOS menimbulkan risiko fatal: halusinasi sintaksis atau kesalahan logika rute dapat memutus akses manajemen perangkat. Solusi teknis untuk automasi ini menuntut isolasi eksekusi, validasi skema deklaratif yang ketat, pola canary release, serta pemanfaatan fitur native Safe Mode RouterOS untuk menjamin rollback otomatis tanpa intervensi manual.

Arsitektur Sistem Automasi dan Schema Enforcement

LLM agent tidak boleh mengeksekusi perintah CLI bebas (misalnya via SSH raw). Arsitektur yang aman menempatkan middleware orkestrator berbasis Python atau Go di antara LLM dan RouterOS REST API (tersedia sejak RouterOS v7) atau RouterOS API binary port (8728). LLM bertugas menerima instruksi intent pengguna, lalu memetakan instruksi tersebut ke dalam format JSON terstruktur menggunakan JSON Schema / Structured Outputs.

Validasi Skema Eksekusi

Gunakan Pydantic atau library validasi skema serupa untuk memastikan payload perintah tidak mengandung injeksi baris perintah atau argumen destruktif.

from pydantic import BaseModel, Field, IPvAnyNetwork
from typing import Literal, Optional

class FirewallRuleAction(BaseModel):
    chain: Literal["forward", "input", "output"]
    action: Literal["accept", "drop", "reject", "passthrough"]
    src_address: Optional[IPvAnyNetwork] = None
    dst_address: Optional[IPvAnyNetwork] = None
    protocol: Optional[Literal["tcp", "udp", "icmp"]] = None
    dst_port: Optional[int] = Field(None, ge=1, le=65535)
    comment: str = Field(..., max_length=64)

class CanaryTask(BaseModel):
    phase: Literal["canary", "production"]
    canary_subnet: IPvAnyNetwork
    rule: FirewallRuleAction

Safe Mode RouterOS API dan Canary Deployment

RouterOS menyediakan fitur bawaan Safe Mode. Jika sesi TCP antara agent pengirim perintah dan router terputus sebelum sesi mengirim konfirmasi rilis aman, kernel RouterOS membatalkan semua perubahan konfigurasi yang dibuat dalam sesi tersebut secara instan.

Eksekusi Canary dengan Safe Mode Menggunakan Python

Skrip berikut mengeksekusi modifikasi pada subset traffic (canary), melakukan pengujian sintetis, dan hanya melepaskan Safe Mode jika probe telemetri lolos verifikasi.

import requests
import time

ROUTER_IP = "192.168.88.1"
AUTH = ("agent-executor", "SecretTokenValue")
BASE_URL = f"https://{ROUTER_IP}/rest"

def apply_canary_rule(payload: dict):
    session = requests.Session()
    session.auth = AUTH
    session.verify = True  # Verifikasi sertifikat TLS router

    # Membuka sesi transaksi aman via header atau CLI wrapper
    # Pada REST API v7, gunakan batch transaction endpoint atau SSH wrapper ber-Safe Mode
    endpoint = f"{BASE_URL}/ip/firewall/filter"
    
    response = session.post(endpoint, json=payload, timeout=5)
    if response.status_code != 201:
        raise RuntimeError(f"Gagal injeksi konfigurasi canary: {response.text}")
    
    rule_id = response.json()["*id"]
    return session, rule_id

def verify_canary_telemetry(test_target_ip: str) -> bool:
    # Kirim probe sintetis untuk memastikan paket lewat sesuai expected drop/accept
    probe_status = False
    for _ in range(3):
        # Logika ping/HTTP probe sintetis ke canary test bench
        time.sleep(1)
        probe_status = True  # Ganti dengan response probe aktual
    return probe_status

def commit_or_revert(session, rule_id: str, success: bool):
    if not success:
        # Rollback paksa: Hapus rule canary jika metrik gagal
        session.delete(f"{BASE_URL}/ip/firewall/filter/{rule_id}")
        session.close()
        raise SystemError("Rollback dieksekusi: Verifikasi metrik canary gagal.")
    
    # Konfigurasi valid: tutup sesi dengan aman
    session.close()

Verifikasi Pasca-Apply dan Deteksi Anomali Rute via Prometheus

Setelah aturan firewall atau rute diterapkan pada fase canary, agent wajib mengkueri telemetri via Prometheus (mengambil metrik dari SNMP Exporter atau RouterOS native Prometheus metric client pada /system/resource dan /ip/route) sebelum memperluas perubahan ke seluruh antarmuka produksi.

  • Metric Drop Rates: Cek routeros_firewall_bytes_total atau mikrotik_interface_out_drops. Lonjakan anomali menunjukkan drop traffic yang tidak direncanakan.
  • BGP/OSPF State Flapping: Cek routeros_routing_bgp_session_state. Jika status sesi berpindah dari established ke idle/active, trigger automated rollback langsung.
  • Syntetic Ping Probes: Agent mengeksekusi ping via REST endpoint /ping dari router ke IP Next-Hop dan IP Gateway publik untuk memastikan transparansi forwarding.

Prosedur Automated Rollback Instan

Automated rollback dirancang bekerja dalam dua layer:

  1. Level 1 (Session Loss Rollback): Implementasikan session holding via SSH Safe Mode (tombol Ctrl+X pada interaksi PTY). Jika perintah agent menyebabkan interface down atau route drop yang mengisolasi IP manajemen agent, TCP socket putus dan router otomatis me-revert konfigurasi ke snapshot sebelum sesi dibuka.
  2. Level 2 (Telemetry Failure Rollback): Jika sesi tetap hidup tetapi metrik verifikasi menunjukkan error rate melebihi ambang batas toleransi canary (misal: packet loss > 2%), agent mengeksekusi snapshot revert via API internal atau menghapus ID objek yang tertera pada state audit log agent.

Postmortem Checklist: Saat Automasi Memutus Sesi Manajemen

Jika terjadi insiden fatal di mana LLM agent berhasil menerapkan konfigurasi yang mengisolasi akses manajemen dan Safe Mode gagal revert (misal: timeout sesi terlalu panjang):

  • Akses Out-of-Band (OOB): Lakukan koneksi fisik via Serial Port console (Baud rate 115200) atau MAC-Telnet/Winbox melalui L2 neighbor discovery pada interface bridge internal.
  • Analisis Konfigurasi Aktif: Jalankan perintah /system/history/print untuk melacak urutan perintah yang dimasukkan oleh akun agent sebelum putus.
  • Revert Manual Perintah Terakhir: Jalankan /system/history/undo berulang hingga rute manajemen kembali reachable.
  • Patch Agent Prompts & Schema: Perbarui skema validasi Pydantic untuk menolak kombinasi subnet yang mengarah pada gateway antarmuka manajemen (menghindari rute default 0.0.0.0/0 menimpa rute OOB).