Cara Setting Firewall dengan IPTables di Linux

Firewall adalah sebuah sistem perangkat lunak atau perangkat keras untuk keamanan jaringan dengan cara menyaring lalu lintas yang masuk atau keluar pada jaringan komputer. Pada sistem operasi berbasis Linux tersedia IPTables sebagai perangkat lunak firewall untuk menyaring paket dan NAT, umumnya telah tersedia secara default.

Dalam konfigurasi IPTables terdiri dari beberapa table, kemudian table berisi beberapa chain. Chain ada yang tersedia default dan bisa ditambah oleh sysadmin. Chain dapat berisi beberapa rule untuk paket.

Jadi struktur IPTables adalah /IPTables -> Tables -> Chains -> Rules/.

IPTables Table, Chain, dan Rule Structure (credit: thegeekstuff.com)

*A. TABLES dan CHAINS*

IPTables memiliki 4 built-in tables.

-1. Filter Table-

Filter adalah default table untuk IPTables. Jika sysadmin tidak mendefinisikan table sendiri, digunakanlah filter table. Filter table memiliki built-in chains:

1. INPUT chain: Untuk menyaring paket yang menuju ke server. 2. OUTPUT chain: Untuk menyaring paket yang keluar dari server. 3. FORWARD chain: Untuk menyaring paket yang menuju ke NIC lain dalam sever atau host lain.

INPUT, FORWAD, dan OUTPUT di Firewall (credit: hostinger.com)

-2. NAT Table-

Chain pada NAT table:

1. PREROUTING chain: Mengubah paket sebelum routing. Paket ditranslasi setelah paket masuk ke sistem sebelum routing. Ini untuk membantu menerjemahkan alamat IP tujuan (destination IP address) dari paket ke sesuatu yang cocok dengan perutean di server. Ini digunakan untuk DNAT (Destination NAT). 2. POSTROUTING chain: Mengubah paket setelah routing. Paket ditranslasi ketika paket tersebut meninggalkan sistem. Ini untuk membantu menerjemahkan alamat IP sumber (source IP address) ke sesuatu yang cocok dengan perutean pada destinasi. Ini digunakan untuk SNAT (Source NAT). 3. OUTPUT chain: NAT untuk paket yang dibuat secara lokal di server.

-3. Mangle Table-

Mangle table adalah unuk pengubahan paket khusus. Ini mengubah bit QOS di header TCP. Chain pada Mangle table:

1. PREROUTING chain 2. OUTPUT chain 3. FORWARD chain 4. INPUT chain 5. POSTROUTING chain

-4. Raw Table-

Raw table adalah untuk pengecualian konfigurasi. Chain pada Raw table:

1. PREROUTING chain 2. OUTPUT chain

IPTables built-in tables (credit: thegeekstuff.com)

*B. IPTABLES RULES*

Berikut ini poin-poin penting yang harus diingat dalam IPTables rules.

· Rule mengandung kriteria dan target. · Jika kriteria tersebut cocok, menuju ke rule yang ditentukan dalam target atau mengeksekusi nilai-nilai khusus yang disebutkan dalam target. · Jika kriteria tidak cocok, pindah ke rule berikutnya.

-Target Values-

Berikut ini value yang dapat dipasangkan pada target.

· ACCEPT: Firewall akan menerima paket. · DROP: Firewall akan menghancurkan paket. · QUEUE: Firewall akan meneruskan paket ke userspace. · RETURN: Firewall akan berhenti mengeksekusi rule berikutnya dalam chain saat ini khusus untuk paket ini. Kontrol akan dikembalikan ke calling chain.

*C. INSTALL & CONFIG IPTABLES*

Install iptables pada Linux Ubuntu Server 16.04

[INPUT]

1 $ sudo apt-get install iptables iptables-persistent

-Menampilkan Rules-

Menampilkan rules dari Filter table

[INPUT]

1 2 3 4 5 6 7 8 9 # iptables -t filter –list Chain INPUT (policy ACCEPT) target     prot opt source               destination           Chain FORWARD (policy ACCEPT) target     prot opt source               destination           Chain OUTPUT (policy ACCEPT) target     prot opt source               destination

Menampilkan rules dari Mangle table

[INPUT]

1 # iptables -t mangle –list

Menampilkan rules dari NAT table

[INPUT]

1 # iptables -t nat –list

Menampilkan rules dari Raw table

[INPUT]

1 # iptables -t raw –list

-Mengubah Default Policy Filter Table-

Melihat status policy iptables

[INPUT]

1 2 3 4 5 sudo iptables -L | grep policy   Chain INPUT (policy ACCEPT) Chain FORWARD (policy ACCEPT) Chain OUTPUT (policy ACCEPT)  

Mengubah policy chain

[INPUT]

1 2 3 sudo iptables –policy INPUT DROP sudo iptables –policy FORWARD DROP sudo iptables –policy OUTPUT ACCEPT

Mengecek ulang policy

[INPUT]

1 2 3 4 5 sudo iptables -L | grep policy   Chain INPUT (policy DROP) Chain FORWARD (policy DROP) Chain OUTPUT (policy ACCEPT)  

*PERINGATAN: Hati-hati dalam mengubah policy INPUT menjadi DROP, dapat mengakibatkan server tidak bisa diremote SSH.*

*Menambah Rule*

Pada contoh di bawah ini, IPTables mengijinkan paket ke server untuk protokol ICMP, SSH, HTTP, HTTPS, dan FTP.

Menambah rule

[INPUT]

1 2 3 4 5 sudo iptables -A INPUT -p icmp -j ACCEPT sudo iptables -A INPUT -p tcp –dport 21 -j ACCEPT sudo iptables -A INPUT -p tcp –dport 22 -j ACCEPT sudo iptables -A INPUT -p tcp –dport 80 -j ACCEPT sudo iptables -A INPUT -p tcp –dport 443 -j ACCEPT

Menghapus satu rule, misalnya port 21 (FTP)

[INPUT]

1 sudo iptables -D INPUT -p tcp –dport 21 -j ACCEPT

Menghapus semua rule

[INPUT]

1 sudo iptables -F

Melihat semua rule

[INPUT]

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 sudo iptables -L   Chain INPUT (policy DROP) target     prot opt source               destination         ACCEPT     icmp —  anywhere             anywhere             ACCEPT     tcp  —  anywhere             anywhere             tcp dpt:ssh ACCEPT     tcp  —  anywhere             anywhere             tcp dpt:http ACCEPT     tcp  —  anywhere             anywhere             tcp dpt:https ACCEPT     tcp  —  anywhere             anywhere             tcp dpt:ftp   Chain FORWARD (policy DROP) target     prot opt source               destination           Chain OUTPUT (policy ACCEPT) target     prot opt source               destination

Simpan konfigurasi IPTables

[INPUT]

1 2 sudo netfilter-persistent save sudo netfilter-persistent reload

Rule IPTables tersimpan di //etc/iptables/rules.v4/.

Berikut ini rule yang saya copy dari digitalocean.com yang dapat digunakan untuk menyaring paket menuju server. Saya menambahkan rule untuk ICMP, FTP, HTTP, dan HTTPS agar diterima.

Edit file rules.v4

[INPUT]

1 sudo nano /etc/iptables/rules.v4

Paste rules di bawah ini

[INPUT]

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 *filter # Allow all outgoing, but drop incoming and forwarding packets by default :INPUT DROP [:] :FORWARD DROP [:] :OUTPUT ACCEPT [:]   # Custom per-protocol chains :UDP – [:] :TCP – [:] :ICMP – [:]   # Acceptable UDP traffic   # Acceptable TCP traffic -A TCP -p tcp –dport 21 -j ACCEPT -A TCP -p tcp –dport 22 -j ACCEPT -A TCP -p tcp –dport 80 -j ACCEPT -A TCP -p tcp –dport 443 -j ACCEPT   # Acceptable ICMP traffic -A ICMP -p icmp -j ACCEPT   # Boilerplate acceptance policy -A INPUT -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT -A INPUT -i lo -j ACCEPT   # Drop invalid packets -A INPUT -m conntrack –ctstate INVALID -j DROP   # Pass traffic to protocol-specific chains ## Only allow new connections (established and related should already be handled) ## For TCP, additionally only allow new SYN packets since that is the only valid ## method for establishing a new TCP connection -A INPUT -p udp -m conntrack –ctstate NEW -j UDP -A INPUT -p tcp –syn -m conntrack –ctstate NEW -j TCP -A INPUT -p icmp -m conntrack –ctstate NEW -j ICMP   # Reject anything that’s fallen through to this point ## Try to be protocol-specific w/ rejection message -A INPUT -p udp -j REJECT –reject-with icmp-port-unreachable -A INPUT -p tcp -j REJECT –reject-with tcp-reset -A INPUT -j REJECT –reject-with icmp-proto-unreachable   # Commit the changes COMMIT   *raw :PREROUTING ACCEPT [:] :OUTPUT ACCEPT [:] COMMIT   *nat :PREROUTING ACCEPT [:] :INPUT ACCEPT [:] :OUTPUT ACCEPT [:] :POSTROUTING ACCEPT [:] COMMIT   *security :INPUT ACCEPT [:] :FORWARD ACCEPT [:] :OUTPUT ACCEPT [:] COMMIT   *mangle :PREROUTING ACCEPT [:] :INPUT ACCEPT [:] :FORWARD ACCEPT [:] :OUTPUT ACCEPT [:] :POSTROUTING ACCEPT [:] COMMIT

Simpan file, keluar dari nano. Agar file konfigurasi terload jalankan perintah

[INPUT]

1 2 3 sudo iptables-restore -t < /etc/iptables/rules.v4 sudo netfilter-persistent save sudo netfilter-persistent reload Pastikan rule IPTables masih tetap ada setelah server direstart. Selamat mencoba 🙂

Leave a Reply

Your email address will not be published.