Saturday, September 4, 2010

Mikrotik Firewall

Disini saya coba bahas sedikit tentang mikrotik firewall dari apa yang saya pelajari dari mikrotik wiki. Sudah suatu kewajiban pemasangan firewall pada mesin mikrotik untuk melindungi kita baik dari sisi luar (baca : internet) ataupun dari sisi client. Nah biar ga asal copas scripts dan paham bagaimana proses perlindungannya, berikut penjelasannya :
Firewall biasanya terbentuk dari suatu packet filtering atas semua traffic yang keluar masuk mesin router. Bersama NAT (Network Address Translation), firewall akan memberikan batasan “pihak luar” untuk tidak ikut campur urusan “dalam negeri” sekaligus filter bagi semua urusan “dalam negeri” dengan “pihak luar”.
Packet Flow Diagram bisa dilihat pada gambar dibawah :

Bingung? sama….. :D :D
Wes, lupakan soal diagram… pake logika aja… pada dasarnya ada 3 chain utama, yaitu :
INPUT – Digunakan untuk memproses semua packet yang masuk pada router melalui interface apapun.
FORWARD – Digunakan untuk memproses semua packet yang melewati router
OUTPUT – Digunakan untuk memproses semua packet berasal dari router yang keluar melalui interface, namun bukan hasil proses chain forward diatas.
Untuk memproses suatu packet, maka aturan yang dibaca adalah berurutan dari rule paling atas trus kebawah, jadi semisal ada packet yang masuk kriteria pada rule pertama ya diproses, jika tidak maka akan diteruskan ke rule berikutnya, dst dst….
Pertama kita pahami dulu connection-states dari sebuah packet, males nerjemahin jadi pake bahasa aslinya aja…
established – a packet which belongs to an existing connection
invalid – a packet which could not be identified for some reason
new – a packet which begins a new connection
related – a packet which is related to, but not part of an existing connection, such as ICMP errors or a packet which begins FTP data connection
Contoh… langsung praktek aja…. data yang digunakan untuk tutorial ini adalah sbb :
Interface ke local = Local
Interface ke PPPoE = Speedy
Interface ke proxy = Proxy
IP jaringan local = 192.168.2.0/27
IP jaringan proxy = 192.168.3.28/30
Alur yang kita proses adalah berurutan :
  
MEMPROSES INPUT PACKET
1. Drop semua INVALID PACKET
/ip firewall filter
add action=drop chain=input comment="Drop Invalid connections" connection-state=invalid disabled=no
2. Allow packet dari interface LAN dan PROXY dengan subnet yang udah ditentukan
add action=accept chain=input comment="Allow Input from LOCAL Network" \
    disabled=no in-interface=Local src-address=192.168.2.0/27
add action=accept chain=input comment="Allow Input from PROXY Network" \
    disabled=no in-interface=Proxy src-address=192.168.3.28/30
3. Allow packet dari interface PPPoE dengan connection state ESTABLISHED dan RELATED
add action=accept chain=input comment="Allow Established connections" \
    connection-state=established disabled=no in-interface=Speedy
add action=accept chain=input comment="Allow Related connections" \
    connection-state=related disabled=no in-interface=Speedy
4. Drop sisanya
add action=drop chain=input comment="Drop everything else" disabled=no
Nah, dari rule yang sederhana diatas bisa dibilang router udah aman dari “pihak luar”. Masalahnya ya router mikrotik ga bisa diakses dari luar… termasuk winbox nya.. :D untuk itu perlu tambahkan baris untuk allow port winbox, INGAT! aktifkan saat dibutuhkan aja…
add action=accept chain=input comment=\
    "Allow Winbox Access ---------- CHECK BEFORE ENABLED" disabled=yes \
    dst-port=8291 in-interface=Speedy protocol=tcp
Taruh dibagian bawah SEBELUM “Drop everything else”!
Jika ada tambahan untuk blocking port scanner, tinggal tambahkan baris berikut :
add action=add-src-to-address-list address-list="port scanners" \
    address-list-timeout=2w chain=input comment="Port scanners to list " \
    disabled=no protocol=tcp psd=21,3s,3,1
add action=add-src-to-address-list address-list="port scanners" \
    address-list-timeout=2w chain=input comment="NMAP FIN Stealth scan" \
    disabled=no protocol=tcp tcp-flags=fin,!syn,!rst,!psh,!ack,!urg
add action=add-src-to-address-list address-list="port scanners" \
    address-list-timeout=2w chain=input comment="SYN/FIN scan" disabled=no \
    protocol=tcp tcp-flags=fin,syn
add action=add-src-to-address-list address-list="port scanners" \
    address-list-timeout=2w chain=input comment="SYN/RST scan" disabled=no \
    protocol=tcp tcp-flags=syn,rst
add action=add-src-to-address-list address-list="port scanners" \
    address-list-timeout=2w chain=input comment="FIN/PSH/URG scan" disabled=\
    no protocol=tcp tcp-flags=fin,psh,urg,!syn,!rst,!ack
add action=add-src-to-address-list address-list="port scanners" \
    address-list-timeout=2w chain=input comment="ALL/ALL scan" disabled=no \
    protocol=tcp tcp-flags=fin,syn,rst,psh,ack,urg
add action=add-src-to-address-list address-list="port scanners" \
    address-list-timeout=2w chain=input comment="NMAP NULL scan" disabled=no \
    protocol=tcp tcp-flags=!fin,!syn,!rst,!psh,!ack,!urg
add action=drop chain=input comment="Dropping port scanners" disabled=no \
    src-address-list="port scanners"
Taruh baris diatas, SESUDAH “Drop Invalid connections”
Hasil bisa dilihat pada gambar berikut :
MEMPROSES FORWARD PACKET
1. Drop semua INVALID PACKET
add action=drop chain=forward comment="Drop Invalid connections" \
    connection-state=invalid disabled=no
2. Bikin CHAIN untuk memproses packet TCP, UDP dan ICMP
add action=jump chain=forward comment="Bad packets filtering" disabled=no \
    jump-target=tcp protocol=tcp
add action=jump chain=forward comment="" disabled=no jump-target=udp \
    protocol=udp
add action=jump chain=forward comment="" disabled=no jump-target=icmp \
    protocol=icmp
3. Drop TCP packet yang dirasa membahayakan bangsa dan negara
add action=drop chain=tcp comment="deny SMTP" disabled=no dst-port=25 \
    protocol=tcp
add action=drop chain=tcp comment="deny TFTP" disabled=no dst-port=69 \
    protocol=tcp
add action=drop chain=tcp comment="deny RPC portmapper" disabled=no dst-port=\
    111 protocol=tcp
add action=drop chain=tcp comment="deny RPC portmapper" disabled=no dst-port=\
    135 protocol=tcp
add action=drop chain=tcp comment="deny NBT" disabled=no dst-port=137-139 \
    protocol=tcp
add action=drop chain=tcp comment="deny cifs" disabled=no dst-port=445 \
    protocol=tcp
add action=drop chain=tcp comment="deny NFS" disabled=no dst-port=2049 \
    protocol=tcp
add action=drop chain=tcp comment="deny NetBus" disabled=no dst-port=\
    12345-12346 protocol=tcp
add action=drop chain=tcp comment="deny NetBus" disabled=no dst-port=20034 \
    protocol=tcp
add action=drop chain=tcp comment="deny BackOriffice" disabled=no dst-port=\
    31337 protocol=tcp
add action=drop chain=tcp comment="deny DHCP" disabled=no dst-port=67-68 \
    protocol=tcp
add action=drop chain=tcp comment="deny P2P" disabled=no p2p=all-p2p
4. Drop pula UDP packets nya…
add action=drop chain=udp comment="deny TFTP" disabled=no dst-port=69 \
    protocol=udp
add action=drop chain=udp comment="deny PRC portmapper" disabled=no dst-port=\
    111 protocol=udp
add action=drop chain=udp comment="deny PRC portmapper" disabled=no dst-port=\
    135 protocol=udp
add action=drop chain=udp comment="deny NBT" disabled=no dst-port=137-139 \
    protocol=udp
add action=drop chain=udp comment="deny NFS" disabled=no dst-port=2049 \
    protocol=udp
add action=drop chain=udp comment="deny BackOriffice" disabled=no dst-port=\
    31337 protocol=udp
add action=drop chain=udp comment="deny P2P" disabled=no p2p=all-p2p
5. Untuk ICMP kita batesin aja 5 packets per detik, lebih dari itu kita drop
add action=accept chain=icmp comment="limit packets 5/secs" disabled=no \
    icmp-options=0:0-255 limit=5,5 protocol=icmp
add action=accept chain=icmp comment="limit packets 5/secs" disabled=no \
    icmp-options=3:0 protocol=icmp
add action=accept chain=icmp comment="limit packets 5/secs" disabled=no \
    icmp-options=3:3 limit=5,5 protocol=icmp
add action=accept chain=icmp comment="limit packets 5/secs" disabled=no \
    icmp-options=3:4 limit=5,5 protocol=icmp
add action=accept chain=icmp comment="limit packets 5/secs" disabled=no \
    icmp-options=8:0-255 limit=5,5 protocol=icmp
add action=accept chain=icmp comment="limit packets 5/secs" disabled=no \
    icmp-options=11:0-255 limit=5,5 protocol=icmp
add action=drop chain=icmp comment="Drop other icmp packets" disabled=no
6. Allow packet forward dari interface LAN dan PROXY dengan subnet yang udah ditentukan
add action=accept chain=forward comment="Allow Forward from LOCAL Network" \
    disabled=no in-interface=Local src-address=192.168.2.0/27
add action=accept chain=forward comment="Allow Forward from PROXY Network" \
    disabled=no in-interface=Proxy src-address=192.168.3.28/30
7. Allow packet forward dari interface PPPoE dengan connection state ESTABLISHED dan RELATED
add action=accept chain=forward comment="Allow Established connections" \
    connection-state=established disabled=no in-interface=Speedy
add action=accept chain=forward comment="Allow Related connections" \
    connection-state=related disabled=no in-interface=Speedy
8. Drop sisanya
add action=drop chain=forward comment="Drop everything else" disabled=no
Hasil bisa dilihat pada gambar berikut :

Dan untuk NAT nya sebagai berikut :
add action=dst-nat chain=dstnat comment="TRANSPARENT PROXY" disabled=no \
    dst-address=!192.168.3.28/30 dst-port=80,8080,3128 in-interface=Local \
    protocol=tcp to-addresses=192.168.3.29 to-ports=3128
add action=masquerade chain=srcnat comment="MASQUERADE PPPOE" disabled=no \
    out-interface=Speedy
Beres, router udah “aman” dari luar dan dalam. Kalo mu cek firewallnya silahkan googling aja dengan keyword “firewall test”. Rekomendasinya silahkan cek di GRC atau PC Flank. Kalo di pikir2 apa ada sih yg aman di internet? xixixixiixi
http://wiki.warneter.net/mikrotik-firewall.aspx (by imer)

No comments: