Thursday, July 11, 2013

Firewall Bertingkat. Pembatasan Akses Internet Bersadarkan IP dan Port

Akhirnya sempat juga nulis lagi di blog setelah sekian lama karena sibuk kerjaan :p

Saya ingin berbagi mengenai konfigurasi mikrotik untuk pembatasan Akses internet Berdasarkan IP dan Port yang digunakan. Konfigurasi ini saya gunakan karena banyaknya koneksi dari user yang tidak sewajarnya keluar dari interface-gateway seperti port2 yang digunakan virus / trojan / worm untuk berkomunikasi antara komputer clinet yang terinfeksi dengan server virus / trojan / worm itu sendiri. Sebelumnya saya sempat mengimplementasikan dengan menggunakan metode Blacklist artinya mendrop port2 yang sering digunakan untuk virus / trojan / worm. Setapi setelah dicoba dan di analisa ternyata metode ini saya rasa kurang cocok karena bisa saja varian virus / trojan / worm baru menggunakan port yang baru dan juga chain rule di mikrotik menjadi semakin banyak. Alhasil jadi meningkatkan resource mikrotik itu sendiri. Terakhir saya implementasi menggunakan Blacklist Port ada sekitar 500 rules yang dibuat. Akhirnya munculah ide untuk menggunakan metode Whitelist. Jadi saya hanya melewatkan Port2 yang saya daftarkan dan mendrop sisanya. Oke langsung aja ke TKP.

Dicontohkan Ip Lokal adalah 192.168.88.0/24 dan ip mikrotik dari arah client adalah 192.168.88.1.

SCRIPT
/ip firewall address-list
add address=192.168.88.2 disabled=no list=boleh-internet
add address=192.168.88.3 disabled=no list=boleh-internet
/ip firewall filter
add action=accept chain=input comment="Accept Input Established" connection-state=established disabled=no
add action=accept chain=input comment="Accept Input Related" connection-state=related disabled=no
add action=drop chain=input comment="Drop Input Invalid" connection-state=invalid disabled=no
add action=accept chain=input comment="Accept Input Limited ICMP" disabled=no limit=50/5s,2 protocol=icmp
add action=drop chain=input comment="Drop Input Exceed ICMP" disabled=no protocol=icmp
add action=accept chain=input comment="Accept Input Winbox" disabled=no dst-port=8291 protocol=tcp
add action=accept chain=input comment="Accept Input Webfig" disabled=no dst-port=80 protocol=tcp
add action=accept chain=input comment="Accept Input Telnet" disabled=no dst-port=23 protocol=tcp
add action=accept chain=input comment="Accept Input SSH" disabled=no dst-port=22 protocol=tcp
add action=accept chain=input comment="Accept Input DNS" disabled=no dst-port=53 protocol=udp
add action=accept chain=input comment="Accept Input WInbox Discovery" disabled=no dst-port=5678 protocol=udp
add action=drop chain=input comment="Drop Input Anything Else" disabled=no
add action=accept chain=forward comment="Accept Forward Established" connection-state=established disabled=no
add action=accept chain=forward comment="Accept Forward Related" connection-state=related disabled=no
add action=drop chain=forward comment="Drop Forward Invalid" connection-state=invalid disabled=no
add action=jump chain=forward comment="Accept User Internet and Jump to Port-Filter" disabled=no jump-target=port-filter src-address-list=boleh-internet
add action=accept chain=port-filter comment="Accept Port-Filter HTTP" disabled=no port=80 protocol=tcp
add action=accept chain=port-filter comment="Accept Port-Filter HTTPS" disabled=no port=443 protocol=tcp
add action=accept chain=port-filter comment="Accept Port-Filter Email Ports" disabled=no port=25,587,465,110,143,993,995 protocol=tcp
add action=accept chain=port-filter comment="Accept Port-Filter YM" disabled=no port=5050 protocol=tcp
add action=accept chain=port-filter comment="Accept Port-Filter VPN BCA" disabled=no port=500,10000 protocol=udp
add action=accept chain=port-filter comment="Accept Port-Filter DNS" disabled=no port=53 protocol=udp
add action=accept chain=port-filter comment="Accept Port-Filter NTP" disabled=no port=123 protocol=udp
add action=accept chain=port-filter comment="Accept Port-Filter ICMP" disabled=no protocol=icmp
add action=drop chain=port-filter comment="Drop Port-Filter Anything Else" disabled=no
add action=drop chain=forward comment="Drop Forward Anything Else" disabled=no

Penjelasannya :
CHAIN INPUT
/ip firewall address-list
add address=192.168.88.2 disabled=no list=boleh-internet
add address=192.168.88.3 disabled=no list=boleh-internet

Script diatas adalah untuk mendaftarkan IP user siapa saja yang bisa akses internet.

/ip firewall filter
add action=accept chain=input comment="Accept Input Established" connection-state=established disabled=no
add action=accept chain=input comment="Accept Input Related" connection-state=related disabled=no
add action=drop chain=input comment="Drop Input Invalid" connection-state=invalid disabled=no

Script diatas adalah default config bawaan mikrotik yang berfungsi untuk Menerima koneksi Established dan Related, dan Men-drop invalid connection yang menuju ke Mikrotik itu sendiri. Fungsi utamanya sih agar beban kinerja mikrotik bisa lebih ringan karena tidak perlu mengulang permintaan yang sebelumnya sudah terbentuk.

add action=accept chain=input comment="Accept Input Limited ICMP" disabled=no limit=50/5s,2 protocol=icmp

add action=drop chain=input comment="Drop Input Exceed ICMP" disabled=no protocol=icmp

Script diatas adalah untuk melimit ping yang menuju mikrotik dan mendrop yang melebihi batas ping. Menurut saya lebih ke arah Flood Ping yang berlebihan kepada Mikrotik.

add action=accept chain=input comment="Accept Input Winbox" disabled=no dst-port=8291 protocol=tcp
add action=accept chain=input comment="Accept Input Webfig" disabled=no dst-port=80 protocol=tcp
add action=accept chain=input comment="Accept Input Telnet" disabled=no dst-port=23 protocol=tcp
add action=accept chain=input comment="Accept Input SSH" disabled=no dst-port=22 protocol=tcp
add action=accept chain=input comment="Accept Input DNS" disabled=no dst-port=53 protocol=udp
add action=accept chain=input comment="Accept Input WInbox Discovery" disabled=no dst-port=5678 protocol=udp

Script diatas adalah untuk menerima port - port yang diijinkan masuk ke arah mikrotik itu sendiri.

add action=drop chain=input comment="Drop Input Anything Else" disabled=no

Script diatas adalah untuk mendrop paket yang masuk ke mikrotik apabila tidak ada yang sesuai dengan chain yang sudah dijelaskan diatasnya.


CHAIN FORWARD
add action=accept chain=forward comment="Accept Forward Established" connection-state=established disabled=no
add action=accept chain=forward comment="Accept Forward Related" connection-state=related disabled=no
add action=drop chain=forward comment="Drop Forward Invalid" connection-state=invalid disabled=no

Penjelasan Script diatas mungkin sama seperti sebelumnya hanya perbedaannya berlaku untuk koneksi yang melewati mikrotik.

add action=jump chain=forward comment="Accept User Internet and Jump to Port-Filter" disabled=no jump-target=port-filter src-address-list=boleh-internet

Script diatas adalah untuk memforward IP yang didaftarkan pada Address list boleh-internet (whitelist IP) dan di jump ke chain baru yaitu port-filter yang nantinya akan digunakan pada whitelist port yang bisa dilewati.

add action=accept chain=port-filter comment="Accept Port-Filter HTTP" disabled=no port=80 protocol=tcp
add action=accept chain=port-filter comment="Accept Port-Filter HTTPS" disabled=no port=443 protocol=tcp
add action=accept chain=port-filter comment="Accept Port-Filter Email Ports" disabled=no port=25,587,465,110,143,993,995 protocol=tcp
add action=accept chain=port-filter comment="Accept Port-Filter YM" disabled=no port=5050 protocol=tcp
add action=accept chain=port-filter comment="Accept Port-Filter VPN BCA" disabled=no port=500,10000 protocol=udp
add action=accept chain=port-filter comment="Accept Port-Filter DNS" disabled=no port=53 protocol=udp
add action=accept chain=port-filter comment="Accept Port-Filter NTP" disabled=no port=123 protocol=udp
add action=accept chain=port-filter comment="Accept Port-Filter ICMP" disabled=no protocol=icmp

Script diatas adalah untuk meneruskan port - port yang boleh melewati mikrotik yang berasal dari jump chain sebelumnya yaitu forward whitelist IP Address.

add action=drop chain=port-filter comment="Drop Port-Filter Anything Else" disabled=no

Script diatas adalah untuk mendrop paket yang melewati mikrotik apabila tidak ada yang sesuai dengan chain yang sudah dijelaskan diatasnya (chain port-filter).

add action=drop chain=forward comment="Drop Forward Anything Else" disabled=no

Script diatas adalah untuk mendrop semua paket yang melewati mikrotik.


Silahkan ditambahkan port - port yang diperlukan dan disesuaikan dengan keadaan di mikrotik anda. Untuk IP yang tidak didaftarkan pada address list maka tidak akan bisa terkoneksi ke internet.

Terima kasih kepada Mas Naufal Assegaf dan forummmikrotik.com atas masukan dan sarannya. Semoga sedikit tulisan ini bisa bermanfaat bagi kita semua. Amin.