SUPONO.
NetAuto • Kursus PraktisiPanduan Praktik Hands-On

Lab 2: CRUD Konfigurasi RouterOS Menggunakan Python Requests & REST API

Praktikum membaca resource router, menambah IP address, dan sinkronisasi firewall address-list secara terprogram.

Format: Markdown (.MD)•File: lab_2_rest_api_crud_konfigurasi.md•Sasaran: Praktisi & DevOps
Filter Versi CLI:

Tujuan Praktikum #

  1. Melakukan autentikasi HTTP Basic Auth via HTTPS ke MikroTik RouterOS v7.
  2. Membaca daftar interface dan IP address aktif melalui endpoint /rest/ip/address.
  3. Menambahkan firewall address-list baru secara dinamis menggunakan method PUT.
  4. Menghapus entri yang expired menggunakan method DELETE.
graph LR subgraph Host["DevOps Workstation"] PY["app_rest_client.py
(Requests Library)"] end subgraph Router["MikroTik Cloud / Physical"] API["HTTPS Engine
/rest/"] FW["Firewall Address-List
IP Whitelist / Blacklist"] end PY -->|PUT /rest/ip/firewall/address-list| API API --> FW FW -.->|JSON Response| PY

Langkah 1: Script Python CRUD Lengkap (mikrotik_rest_demo.py) #

PYTHON
import requests
import json
import urllib3

# Nonaktifkan warning self-signed certificate pada lab lokal
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

ROUTER_IP = "192.168.88.1"
API_USER = "netdev-user"
API_PASS = "P@ssw0rdDevOps2026!"
BASE_URL = f"https://{ROUTER_IP}/rest"

auth = (API_USER, API_PASS)
headers = {"Content-Type": "application/json"}

def get_system_resource():
    """Membaca beban CPU dan memori router"""
    res = requests.get(f"{BASE_URL}/system/resource", auth=auth, verify=False)
    if res.status_code == 200:
        data = res.json()
        print(f"[+] Uptime: {data.get('uptime')}")
        print(f"[+] CPU Load: {data.get('cpu-load')}%")
        print(f"[+] Free Memory: {int(data.get('free-memory', 0)) / 1024 / 1024:.2f} MB")
    else:
        print(f"[-] Gagal membaca resource: {res.status_code} - {res.text}")

def add_blocked_ip(ip_address, comment="Otomasi Threat Intel"):
    """Menambahkan IP berbahaya ke Firewall Address-List"""
    payload = {
        "list": "MALICIOUS_IPS",
        "address": ip_address,
        "comment": comment
    }
    res = requests.put(f"{BASE_URL}/ip/firewall/address-list", auth=auth, headers=headers, json=payload, verify=False)
    if res.status_code in [200, 201]:
        print(f"[+] Berhasil mendaftarkan {ip_address} ke MALICIOUS_IPS. ID: {res.json().get('.id')}")
    else:
        print(f"[-] Error: {res.status_code} - {res.text}")

if __name__ == "__main__":
    print("=== MIKROTIK REST API CONTROLLER ===")
    get_system_resource()
    add_blocked_ip("198.51.100.45", "Detected Bruteforce SSH")

Langkah 2: Verifikasi di RouterOS CLI #

Buka terminal RouterOS untuk memastikan data tersimpan otomatis:

ROUTEROS
/ip firewall address-list print where list="MALICIOUS_IPS"

Tugas Lab #

  • Kembangkan skrip di atas agar dapat membaca daftar IP dari file threats.csv dan mengunggahnya secara batch ke router dalam waktu kurang dari 5 detik!