SDN Firewall Rule Placement — ILP

Dari topologi .gml ke satu slot TCAM di switch

Alur nyata satu rule firewall — dari file topologi & ruleset dimuat, diproses oleh Python/networkx, dioptimasi oleh solver AMPL+CBC, sampai diverifikasi ulang dan disimpan. Setiap cell & rumus di halaman ini diambil langsung dari notebook, bukan ilustrasi.

5 topologi diverifikasi
13 cell per notebook
3 constraint wajib
1 titik solver bekerja
gulir untuk ikuti alurnya
01 · Input

Dua berkas mentah masuk

Sebelum ada penempatan apa pun, sistem butuh peta jaringan dan daftar rule yang harus ditaruh.

Topologi jaringan

Cell 4/13
# nx.read_gml(GML_PATH, label="id")
Contoh NSFNET: 13 node, 15 edge
INGRESS = "11"   EGRESS = "6"
.gmlgraph + degreenode fisik saja

Ruleset firewall

Cell 6/13
# snort_{N}.csv
rule_id, priority
500 – 4007 rule tergantung topologi
.csvpriority → kelasSnort 3
02 · Pra-pemrosesan — bukan solver

Python & networkx memetakan jaringan

Tahap ini murni algoritma graph klasik (DFS/BFS) dan aritmetika biasa. Solver ILP belum terlibat sama sekali di sini.

Cari semua jalur ingress → egress

Cell 5/13
PATHS = list(nx.all_simple_paths(G, INGRESS, EGRESS))
dist_ingress = nx.shortest_path_length(G, INGRESS)
# Surfnet saja: itertools.islice(nx.shortest_simple_paths(...), k=15)
NSFNET · ABVT · Geant2001 · BICS → all_simple_paths Surfnet → k-shortest (k=15)

Hitung jatah kapasitas per node, per kelas

Cell 6/13
eligible = (path_count[n] >= 1) and (dist_ingress[n] <= threshold[c])
Cclass[n,c] = C_n * (cnt_c / n_total) * margin if eligible else 0
NSFNET: rumus rata (awal) ABVT · Geant2001 · BICS · Surfnet: fungsi identik terverifikasi
03 · Optimisasi — di sini solver bekerja

AMPL + CBC memilih penempatan

Satu-satunya titik di seluruh proses di mana ILP benar-benar mencari solusi optimal — bukan sekadar hitung-hitungan.

min  w_h·Σ y_n  +  w_d·Σ dist_n·x_i,n  +  w_m·Σ m_i·x_i,n
COVERAGE

Tiap jalur wajib ketemu rule minimal di satu node.

CAPACITYCLASS

Jatah TCAM per kelas prioritas tidak boleh terlampaui.

PRIORITYPOSITION

Rule prioritas tinggi wajib dekat ingress (≤ threshold hop).

Solve per seed

Cell 7–8/13
status: solved status: limit (gap dicatat jujur) selain itu → raise error
04 · Verifikasi independen

Hasil solver dicek ulang, bukan dipercaya mentah

Coverage, kapasitas per node, dan posisi prioritas dihitung ulang secara terpisah dari solver.

Re-check manual

Cell 8/13
Σ x_i,n for n in path >= 1  # coverage ulang
Σ m_i · x_i,n <= C_n  # kapasitas ulang
05 · Output

Hasil tersimpan, apa adanya

Termasuk gap solver kalau statusnya limit — tidak disamakan dengan hasil optimal terbukti.

summary.json

per_seed.csv

rule_placement.csv

Sebelum & sesudah · NSFNET

Dari 13 node kosong ke 5 node aktif

Posisi node persis sesuai koordinat lon/lat asli di Nsfnet.gml. Data sesudah diambil dari rule_placement.csv seed 42 — bukan simulasi.

Sebelum — graph mentah, y_n belum ditentukan
Sesudah — 5 node aktif, ukuran = jumlah rule
11 (ingress) → 375 rule
6 (egress) → 124 rule
0, 9, 121 rule masing-masing
node_used: 5.0 (std 0.0)
Contoh konkret · NSFNET

Satu rule, tiga syarat, dua kemungkinan

Rule R1 (prioritas 1, threshold ≤ 3 hop) menyusuri jalur ingress 11 → egress 6.

11
ingress · hop 0
A
hop 1
B
hop 2
6
egress · hop 3
diterima3 syarat lolos
ditolakkapasitas kelas 1 penuh