Pemisahan Jaringan Dengan OpenWRT
Setiap perangkat yang terhubung di router yang sama dapat berkomunikasi satu dengan yang lainnya. Kebebasan ini akan mempermudah pengguna dalam menghubungkan berbagai perangkat IoT, media server, smart phone, komputer dan sebagainya. Namun, bila dilihat dari sudut pandang keamanan komputer, tidak ada yang bisa menjamin bahwa seluruh perangkat yang terhubung adalah perangkat yang aman. Ada saatnya saya ingin membatasi komunikasi perangkat tertentu yang terhubung di router yang sama. Hal ini dapat dicapai dengan membuat subnet baru, melakukan partisi dengan menggunakan VLAN, dan juga konfigurasi firewall.
Sebagai contoh, saya akan melakukan pemisahan jaringan pada router rumahan saya yang menggunakan sistem operasi OpenWRT. Saya akan mulai dengan melakukan SSH ke router sebagai user root
:
ssh root@192.168.1.1
Secara garis besar, saya akan melakukan partisi untuk komunikasi sesama perangkat yang terhubung melalui WiFi, komunikasi sesama perangkat yang terhubung melalui LAN, dan komunikasi antar perangkat yang terhubung melalui WiFi dan LAN.
Membatasi Komunikasi Sesama Perangkat WiFi
Untuk membatasi komunikasi sesama perangkat yang terhubung melalui SSID yang sama, saya bisa menggunakan fasilitas bawaan yang disebut AP Isolation. Untuk mengaktifkannya di OpenWRT, saya dapat menambahkan option isolate 1
di konfigurasi wifi-iface di /etc/config/wireless
, seperti pada:
config wifi-iface 'wifinet1' option device 'radio1' option mode 'ap' option network 'lan' option ssid 'Jocki1' ... option isolate '1'
config wifi-iface 'wifinet2' option device 'radio1' option mode 'ap' option network 'lan' option ssid 'Jocki2' ... option isolate '1'
Pada konfigurasi di atas, perangkat router saya menyediakan dua SSID berbeda: Jocki1
dan Jocki2
. Saya menambahkan option isolate 1
ke masing-masing SSID tersebut. Setelah itu, saya memberikan perintah berikut ini agar perubahan file tersebut diaplikasikan:
service network reload
Sekarang, perangkat yang terhubung melalui WiFi ke SSID yang sama tidak akan bisa berkomunikasi. Sebagai contoh, bila perangkat A dan B terhubung ke SSID Jocki1
yang sama, maka perangkat A tidak dapat berkomunikasi dengan perangkat B. Begitu juga dengan perangkat C dan D yang terhubung ke SSID Jocki2
; perangkat C tidak akan bisa berkomunikasi dengan perangkat D. Namun, perlu diingat bahwa AP Isolation hanya bekerja di SSID yang sama. Perangkat A akan bisa berkomunikasi dengan perangkat C, begitu juga dengan perangkat B yang bisa berkomunikasi dengan perangkat D, karena mereka terhubung ke SSID yang berbeda!
Untuk mencegah komunikasi antar perangkat dari SSID yang berbeda, saya dapat mengatur supaya SSID Jocki2
menggunakan sebuah interface baru dengan subnet berbeda. Sebagai contoh, saya menambahkan baris berikut ini di /etc/config/network
:
config device option name 'br-wifi2' option type 'bridge'
config interface 'wifi2' option proto 'static' option netmask '255.255.255.0' option ipaddr '192.168.2.1' option device 'br-wifi2'
Kemudian, pada file /etc/config/wireless
, saya mengubah nilai network
dari 'lan'
menjadi 'wifi2'
(nama interface baru) untuk wifi-iface SSID Jocki2
. Selain dengan mengubah file secara langsung, saya juga bisa memodifikasi file tersebut dengan menggunakan perintah uci
seperti:
uci set wireless.@wifi-iface[2].network=wifi2uci commit wireless
Pada perintah di atas, saya menggunakan @wifi-iface[2]
karena Jocki2
adalah wifi-iface ketiga yang terdaftar di file konfigurasi tersebut.
Setelah itu, saya mengaktifkan DHCP untuk wifi2
dengan menambahkan baris berikut ini di /etc/config/dhcp
:
config dhcp 'wifi2' option interface 'wifi2' option start '100' option limit '110' option leasetime '1h' option ra 'server'
Untuk mengizinkan perangkat yang terhubung ke wifi2
mengakses internet, saya menambahkan konfigurasi berikut ini di /etc/config/firewall
:
config zone option name 'wifi2' list network 'wifi2' option input ACCEPT option output ACCEPT option forward REJECT
config forwarding option dest 'wan' option src 'wifi2'
config rule option name 'Allow-DHCP-wifi2' option src 'wifi2' option dest_port '67' option proto 'udp' option family 'ipv4' option target ACCEPT
Pada konfigurasi firewall di atas, saya membuat sebuah zone baru untuk interface wifi2
dan melakukan forwarding dari wifi2
ke wan
. Ini akan mengizinkan perangkat di wifi2
untuk mengakses Internet.
Setelah me-restart router, kini perangkat yang terkoneksi ke SSID Jocki1
tidak akan bisa menghubungi perangkat yang terkoneksi di SSID Jocki2
dan begitu juga sebaliknya.
Membatasi Komunikasi Sesama Perangkat LAN
Biasanya router rumahan menyediakan satu atau lebih port untuk jaringan lokal (LAN). Walaupun demikian, tidak semua port fisik tersebut ditangani oleh network interface tersendiri. Sebagai contoh, saya hanya menemukan eth0
pada perangkat yang saya pakai, walaupun terdapat 5 port fisik untuk LAN. Lalu bagaimana cara mengakses setiap port fisik yang terhubung di sistem operasi bila hanya ada satu network interface? Router tersebut menggunakan VLAN switch untuk melakukan segmentasi LAN secara virtual menjadi eth0.1
, eth0.2
, eth0.3
, eth0.4
dan eth0.5
.
Konfigurasi default untuk VLAN adalah setiap perangkat yang terhubung di port LAN dapat saling berkomunikasi satu dengan yang lainnya, seperti yang terlihat pada konfigurasi di /etc/config/network
berikut ini:
config switch option name 'switch0' option reset '1' option enable_vlan '1'
config switch_vlan option device 'switch0' option vlan '1' option vid '1' option ports '1 2 3 4 5 0t'
Pada nilai ports
di atas, terlihat bahwa seluruh port yang tersedia memiliki status untagged sehingga seluruh perangkat yang terhubung di LAN dapat saling berkomunikasi.
Untuk memisahkan sebuah perangkat yang terhubung ke LAN sehingga perangkat tersebut tidak dapat berkomunikasi dengan perangkat lainnya di LAN namun masih tetap dapat mengakses internet, saya dapat membuat sebuah VLAN baru untuk port yang dipakai perangkat tersebut. Sebagai contoh, saya menambahkan konfigurasi berikut ini di /etc/config/network
:
config switch_vlan option device 'switch0' option vlan '1' option ports '1 3 4 5 0t'
config switch_vlan option device 'switch0' option vlan '2' option ports '2 0t'
config interface 'lan2' option device 'eth0.2' option proto 'static' option ipaddr '192.168.22.1' option netmask '255.255.255.0'
Pada konfigurasi di atas, saya menghapus port 2
dari VLAN 1 dan menambahkan VLAN 2 khusus untuk port 2
tersebut. Selain itu, saya membuat interface lan2
untuk VLAN 2 dengan IP 192.168.22.1
.
Agar sederhana, saya tidak mengaktifkan DHCP untuk lan2
. Perangkat yang terhubung ke port tersebut dapat menggunakan IP statis seperti 192.168.22.2
dan menggunakan 192.168.22.1
sebagai gateway. Sampai disini, perangkat ini tidak akan akan bisa berkomunikasi dengan perangkat LAN lain yang terhubung ke router yang sama. Selain itu, karena menggunakan VLAN, bila saya mengatur IP statis di perangkat lan2
menjadi nilai lain seperti 192.168.1.2
yang menggunakan gateway 192.168.1.1
, jaringan perangkat tersebut tidak akan bekerja.
Sebagai langkah terakhir, untuk membolehkan perangkat di lan2
mengakses Internet, saya menambahkan baris berikut ini ke /etc/config/firewall
:
config zone option name 'lan2' list network 'lan2' option input 'REJECT' option output 'ACCEPT' option forward 'REJECT'
config forwarding option src 'lan2' option dest 'wan'
config rule option name 'Allow-DNS-Lan2' option src 'lan2' option dest_port '53' option proto 'tcp udp' option target 'ACCEPT'
Setelah menjalankan ulang router, kini perangkat yang terkoneksi ke lan2
akan ter-isolasi dari perangkat LAN lainnya. Perangkat tersebut juga tetap bisa mengakses internet seperti biasanya.
Membatasi Komunikasi Antara Perangkat WiFi dan LAN
Sebagai bawaan dari OpenWRT, perangkat WiFi dan LAN di-bridge bersama. Ini adalah konfigurasi yang disebut sebagai Bridged AP. Pada konfigurasi ini, perangkat dari Wifi dan LAN dapat saling berkomunikasi. Bridged AP dipilih sebagai bawaan karena sangat mempermudah komunikasi, misalnya pengguna bisa melakukan streaming dari smart phone yang terhubung di WiFi ke media server yang terhubung di LAN.
Bagaimana bila saya ingin memisahkan WiFi dan LAN sehingga perangkat WiFi tidak berkomunikasi dengan perangkat LAN? Salah satu solusi untuk masalah ini adalah menerapkan membagi jaringan ke dalam VLAN seperti yang saya lakukan sebelumnya. Pada contoh tersebut, lan2
tidak dapat berkomunikasi dengan perangkat Wifi. Saya hanya perlu menambahkan VLAN baru seperti lan3
, lan4
, dan lan5
.
Namun, alternatif yang lebih aman adalah dengan menerapkan konfigurasi Routed AP yang melakukan pemisahan antara jaringan WiFi dan LAN. Saya dapat melakukannya dnegan menambahkan sebuah interface baru di /etc/config/network
:
config interface 'wifi' option proto 'static' option ipaddr '192.168.33.1' option netmask '255.255.255.0'
Kemudian, saya melakukan perubahan di /etc/config/wireless
supaya wifi-iface menggunakan interface yang baru tersebut. Selain dengan mengubah file secara manual, saya juga bisa melakukan perubahan dengan memberikan perintah berikut ini:
uci set wireless.@wifi-iface[1].network=wifiuci commit
Saya juga mengaktifkan DHCP untuk interface wifi
dengan menambahkan baris berikut ini di /etc/config/dhcp
:
config dhcp 'wifi' option interface 'wifi' option start '100' option limit '10' option leasetime '12h'
Sebagai langkah terakhir, saya mengatur firewall untuk mengizinkan perangkat Wifi mengakses internet dengan menambahkan baris berikut ini di /etc/config/firewall
:
config zone option name 'wifi' list network 'wifi' option input 'ACCEPT' option output 'ACCEPT' option forward 'REJECT'
config forwarding option src 'wifi' option dest 'wan'
Setelah menjalankan ulang router, kali ini perangkat WiFi akan memiliki IP seperti 192.168.33.100
dan perangkat LAN tetap menggunakan IP seperti 192.168.1.2
. Perangkat yang terkoneksi ke WiFi kini tidak dapat lagi berkomunikasi dengan perangkat yang terkoneksi ke LAN (dan sebaliknya). Walaupun demikian, keduanya tetap memiliki akses Internet.
Membatasi Akses LuCI dan SSH
Secara bawaan, OpenWRT membolehkan perangkat WiFi untuk mengakses dashboard LuCI dan SSH ke router. Karena saya hampir tidak pernah melakukan administrasi router dari perangkat WiFi, akan lebih aman bila saya membatasi akses sehingga hanya perangkat LAN saja yang boleh membuka LuCI atau melakukan SSH ke router.
Untuk itu, saya dapat dengan menambahkan baris berikut ini pada /etc/config/firewall
:
config rule option name 'Block-Management-Wifi' option src 'wifi' list proto 'tcp' option dest_port '80 443 22' option target 'REJECT'
Konfigurasi di atas akan menolak koneksi port 80
(http), 443
(https), dan 22
(SSH) yang berasal dari jaringan wifi
.