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 & DevOpsFilter Versi CLI:
Tujuan Praktikum #
- Melakukan autentikasi HTTP Basic Auth via HTTPS ke MikroTik RouterOS v7.
- Membaca daftar interface dan IP address aktif melalui endpoint
/rest/ip/address. - Menambahkan firewall address-list baru secara dinamis menggunakan method
PUT. - 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
(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.csvdan mengunggahnya secara batch ke router dalam waktu kurang dari 5 detik!