Memahami dan Menggunakan Iptables Chains

Iptables Chains

ArboHost -Iptables adalah salah satu alat firewall yang paling populer dan serbaguna di Linux. Iptables dapat digunakan untuk memfilter, mengubah, dan mengarahkan lalu lintas jaringan yang masuk dan keluar dari sistem Linux. Dengan iptables, Anda dapat membuat aturan firewall yang sesuai dengan kebutuhan keamanan dan kinerja Anda.

Namun, untuk menggunakan iptables dengan efektif, Anda perlu memahami bagaimana iptables berinteraksi dengan kerangka kerja netfilter di kernel Linux. Netfilter adalah mekanisme yang menyediakan titik-titik pemeriksaan (hooks) untuk paket jaringan di berbagai tahap proses routing. Dengan mendaftarkan modul kernel di hook-hook ini, iptables dapat memeriksa dan memanipulasi paket sesuai dengan aturan yang ditentukan.

Dalam artikel ini, kita akan membahas secara mendalam tentang arsitektur iptables dan netfilter, dan bagaimana komponen-komponennya bekerja sama untuk menyediakan sistem filtering yang komprehensif.

Kita juga akan melihat beberapa contoh praktis dari penggunaan iptables chains, yaitu daftar aturan yang diproses secara berurutan ketika paket memicu hook tertentu. Tujuan dari artikel ini adalah untuk membuat Anda lebih memahami konsep dan logika di balik iptables, sehingga Anda dapat membuat aturan firewall yang andal dan fleksibel.

Apa itu Iptables dan Netfilter?

Iptables adalah alat firewall perangkat lunak untuk distribusi Linux. Di beberapa distribusi, iptables telah digantikan oleh alat baru bernama nftables, tetapi sintaks iptables masih sering digunakan sebagai dasar. Firewall iptables bekerja dengan berinteraksi dengan hook filtering paket di tumpukan jaringan kernel Linux. Hook-hook ini dikenal sebagai kerangka kerja netfilter.

Setiap paket yang melewati lapisan jaringan (masuk atau keluar) akan memicu hook-hook ini, memungkinkan program untuk berinteraksi dengan lalu lintas di titik-titik kunci. Modul kernel yang terkait dengan iptables mendaftar di hook-hook ini untuk memastikan bahwa lalu lintas sesuai dengan kondisi yang ditetapkan oleh aturan firewall.

Hook Netfilter

Ada lima hook netfilter yang dapat didaftarkan oleh program. Saat paket bergerak melalui tumpukan, mereka akan memicu modul kernel yang telah mendaftar dengan hook-hook ini. Hook-hook yang dipicu oleh paket tergantung pada apakah paket masuk atau keluar, tujuan paket, dan apakah paket ditolak atau dibuang pada titik sebelumnya.

Berikut adalah hook-hook yang mewakili titik-titik yang terdefinisi dengan baik di tumpukan jaringan:

  • NF_IP_PRE_ROUTING: Hook ini akan dipicu oleh lalu lintas masuk segera setelah memasuki tumpukan jaringan. Hook ini diproses sebelum keputusan routing apa pun dibuat mengenai ke mana mengirim paket.
  • NF_IP_LOCAL_IN: Hook ini dipicu setelah paket masuk diroute jika paket ditujukan untuk sistem lokal.
  • NF_IP_FORWARD: Hook ini dipicu setelah paket masuk diroute jika paket akan diteruskan ke host lain.
  • NF_IP_LOCAL_OUT: Hook ini dipicu oleh lalu lintas keluar yang dibuat secara lokal segera setelah mencapai tumpukan jaringan.
  • NF_IP_POST_ROUTING: Hook ini dipicu oleh lalu lintas keluar atau diteruskan setelah routing telah terjadi dan tepat sebelum dikirim keluar di kabel.

Modul kernel yang perlu mendaftar di hook-hook ini juga harus menyediakan nomor prioritas untuk membantu menentukan urutan panggilan mereka ketika hook dipicu.

Tabel dan Chain Iptables

Firewall iptables menggunakan tabel untuk mengatur aturannya. Tabel-tabel ini mengklasifikasikan aturan sesuai dengan jenis keputusan yang digunakan untuk membuatnya. Misalnya, jika aturan berhubungan dengan translasi alamat jaringan, maka akan dimasukkan ke dalam tabel nat.

Berikut adalah empat tabel bawaan iptables:

  • Filter: Tabel ini adalah tabel default untuk iptables. Ini bertindak sebagai penjaga pintu, memutuskan siapa yang masuk dan keluar dari jaringan Anda. Tabel ini memiliki chain bawaan berikut:
    • INPUT: Aturan di chain ini mengontrol paket yang diterima oleh server.
    • OUTPUT: Chain ini mengontrol paket untuk lalu lintas keluar.
    • FORWARD: Aturan di chain ini mengontrol paket yang diroute melalui server.
  • NAT: Tabel ini berisi aturan NAT (Network Address Translation) untuk meroute paket ke jaringan yang tidak dapat diakses secara langsung. Ketika tujuan atau sumber paket harus diubah, tabel NAT digunakan. Tabel ini mencakup chain berikut:
    • PREROUTING: Chain ini menetapkan paket segera setelah server menerimanya. Output – bekerja sama seperti chain output yang kami jelaskan di tabel filter.
    • POSTROUTING: Aturan di chain ini memungkinkan melakukan perubahan pada paket setelah mereka meninggalkan chain output.
    • OUTPUT: Chain ini digunakan untuk NAT paket yang dibuat secara lokal di firewall.
  • Mangle: Tabel ini digunakan untuk menyesuaikan properti header IP dari paket. Tabel ini memiliki semua chain berikut yang kami jelaskan di atas:
    • PREROUTING
    • POSTROUTING
    • OUTPUT
    • INPUT
    • FORWARD
  • Raw: Tabel ini digunakan untuk pengecualian konfigurasi. Tabel ini memiliki chain bawaan berikut:
    • PREROUTING
    • OUTPUT

Iptables chains adalah daftar aturan yang diproses secara berurutan ketika paket memicu hook tertentu. Mereka bisa menjadi salah satu yang tetap bawaan (INPUT, OUTPUT, FORWARD di tabel filter default, beberapa lainnya di misalnya tabel nat), atau yang ditentukan pengguna, yang kemudian dapat dipanggil dari yang lain.

Tiap aturan dalam chain memiliki kriteria pencocokan dan target. Kriteria pencocokan menentukan apakah aturan berlaku untuk paket tertentu atau tidak, berdasarkan atribut seperti protokol, port, sumber, dan tujuan. Target menentukan tindakan yang harus dilakukan terhadap paket jika cocok dengan aturan, seperti menerimanya, menolaknya, menjatuhkannya, atau memanggil chain lain.

Kita dapat menggunakan perintah iptables untuk membuat, menghapus, memasukkan, mengganti, dan menambahkan aturan ke dalam chain. Kita juga dapat menggunakan perintah iptables untuk membuat, menghapus, dan mengubah nama chain yang ditentukan pengguna. Kita akan melihat beberapa contoh dari operasi-operasi ini di bagian selanjutnya.

Contoh Penggunaan Iptables Chains

Dalam bagian ini, kita akan melihat beberapa contoh penggunaan iptables chains untuk skenario umum. Kita akan menggunakan sintaks iptables standar untuk membuat aturan firewall kita. Namun, Anda juga dapat menggunakan alat-alat seperti ufw atau firewalld untuk menyederhanakan proses konfigurasi iptables.

Melihat Aturan Iptables yang Ada

Kita dapat melihat aturan iptables yang ada dengan menggunakan perintah iptables -L. Namun, perintah ini akan mencoba melakukan pencarian nama host untuk alamat IP, yang dapat memperlambat outputnya. Oleh karena itu, lebih baik menggunakan opsi -n untuk menonaktifkan pencarian nama host. Kita juga dapat menggunakan opsi -v untuk melihat statistik paket dan byte untuk setiap aturan.

Berikut adalah contoh output dari perintah iptables -vnL:

$ sudo iptables -vnL Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all – lo * 0.0.0.0/0 0.0.0.0/0
2 120 ACCEPT icmp – * * 0.0.0.0/0 0.0.0.0/0
10 600 ACCEPT all – * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
1 60 ACCEPT tcp – * * 192.168.1.100 192.168.1.101 tcp dpt:22
1 40 DROP all – * * 192.168.1.102 192.168.1.101
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 11 packets, 660 bytes)
pkts bytes target prot opt in out source destination

Output ini menunjukkan bahwa ada tiga chain bawaan: INPUT, FORWARD, dan OUTPUT, yang masing-masing memiliki kebijakan default ACCEPT, yang berarti bahwa paket yang tidak cocok dengan aturan apa pun akan diterima secara default.

Output ini juga menunjukkan bahwa ada lima aturan di chain INPUT, yang masing-masing memiliki kriteria pencocokan dan target tertentu:

  • Aturan pertama menerima semua paket yang berasal dari antarmuka loopback (lo), yang digunakan untuk komunikasi internal.
  • Aturan kedua menerima semua paket ICMP (Internet Control Message Protocol), yang digunakan untuk mengirim pesan kesalahan dan permintaan seperti ping.
  • Aturan ketiga menerima semua paket yang memiliki status RELATED atau ESTABLISHED, yang berarti bahwa mereka adalah bagian dari koneksi yang sudah ada atau terkait dengan koneksi yang sudah ada.
  • Aturan keempat menerima semua paket TCP yang berasal dari alamat IP 192.168.1.100 dan ditujukan ke alamat IP lokal (192.168.1.101) di port tujuan 22, yang merupakan port standar untuk SSH (Secure Shell).
  • Aturan kelima menjatuhkan semua paket yang berasal dari alamat IP 192.168.1.102 dan ditujukan ke alamat IP lokal, tanpa memperhatikan protokol atau portnya.

Output ini juga menunjukkan bahwa tidak ada aturan di chain FORWARD dan OUTPUT, yang berarti bahwa semua paket yang melewati atau keluar dari sistem akan diterima secara default.

Membuat Chain Iptables yang Ditentukan Pengguna

Kita dapat membuat chain iptables yang ditentukan pengguna dengan menggunakan perintah iptables -N . Chain ini dapat digunakan untuk mengelompokkan aturan-aturan tertentu bersama-sama, sehingga dapat dipanggil dari chain lain dengan mudah.

Berikut adalah contoh cara membuat chain iptables yang ditentukan pengguna bernama LOGGING:

$ sudo iptables -N LOGGING

Perintah ini akan membuat chain baru bernama LOGGING, tetapi tidak akan menambahkan aturan apa pun ke dalamnya.

Menambahkan Aturan ke Chain Iptables

Kita dapat menambahkan aturan ke chain iptables dengan menggunakan perintah iptables -A -j . Perintah ini akan menambahkan aturan baru ke akhir chain yang ditentukan, dengan kriteria pencocokan dan target yang ditentukan.

Berikut adalah contoh cara menambahkan aturan ke chain LOGGING yang kita buat sebelumnya:

sudoiptables−ALOGGING−mlimit−−limit2/min−jLOG−−log−prefix"IPTables−Dropped:"−−log−level4 sudo iptables -A LOGGING -j DROP

Perintah pertama akan menambahkan aturan baru ke chain LOGGING, yang menggunakan modul limit untuk membatasi jumlah paket yang dicatat menjadi dua per menit. Target dari aturan ini adalah LOG, yang berarti bahwa paket yang cocok akan dicatat ke syslog dengan prefiks “IPTables-Dropped: ” dan level log 4 (peringatan). Perintah kedua akan menambahkan aturan lain ke chain LOGGING, yang akan menjatuhkan semua paket yang mencapai chain ini.

Setelah kita menambahkan aturan ke chain LOGGING, kita perlu memanggil chain ini dari chain lain agar efektif. Misalnya, jika kita ingin mencatat dan menjatuhkan semua paket yang tidak cocok dengan aturan lain di chain INPUT, kita dapat menggunakan perintah berikut:

$ sudo iptables -A INPUT -j LOGGING

Perintah ini akan menambahkan aturan baru ke akhir chain INPUT, yang akan memanggil chain LOGGING untuk semua paket yang mencapai titik ini.

Menghapus Aturan dari Chain Iptables

Kita dapat menghapus aturan dari chain iptables dengan menggunakan perintah iptables -D . Perintah ini akan menghapus aturan yang ditentukan oleh nomor urutnya di dalam chain yang ditentukan.

Berikut adalah contoh cara menghapus aturan pertama dari chain INPUT:

$ sudo iptables -D INPUT 1

Perintah ini akan menghapus aturan pertama dari chain INPUT, yang menerima semua paket dari antarmuka loopback. Kita dapat menggunakan perintah iptables -L untuk memverifikasi bahwa aturan telah dihapus.

Mengubah Aturan di Chain Iptables

Kita dapat mengubah aturan di chain iptables dengan menggunakan perintah iptables -R -j . Perintah ini akan mengganti aturan yang ditentukan oleh nomor urutnya di dalam chain yang ditentukan dengan kriteria pencocokan dan target baru.

Berikut adalah contoh cara mengubah aturan kedua di chain INPUT:

$ sudo iptables -R INPUT 2 -p icmp --icmp-type echo-request -j ACCEPT

Perintah ini akan mengganti aturan kedua di chain INPUT, yang sebelumnya menerima semua paket ICMP, dengan aturan baru yang hanya menerima paket ICMP dengan tipe echo-request, yaitu permintaan ping. Kita dapat menggunakan perintah iptables -L untuk memverifikasi bahwa aturan telah diubah.

Menghapus Chain Iptables yang Ditentukan Pengguna

Kita dapat menghapus chain iptables yang ditentukan pengguna dengan menggunakan perintah iptables -X . Perintah ini akan menghapus chain yang ditentukan beserta semua aturannya. Namun, sebelum kita dapat menghapus chain yang ditentukan pengguna, kita harus memastikan bahwa tidak ada chain lain yang merujuk kepadanya.

Berikut adalah contoh cara menghapus chain LOGGING yang kita buat sebelumnya:

sudoiptables−DINPUT−jLOGGING sudo iptables -X LOGGING

Perintah pertama akan menghapus aturan terakhir dari chain INPUT, yang memanggil chain LOGGING. Perintah kedua akan menghapus chain LOGGING beserta semua aturannya. Kita dapat menggunakan perintah iptables -L untuk memverifikasi bahwa chain telah dihapus.

Kesimpulan

Dalam artikel ini, kita telah membahas secara mendalam tentang arsitektur iptables dan netfilter, dan bagaimana komponen-komponennya bekerja sama untuk menyediakan sistem filtering yang komprehensif. Kita juga telah melihat beberapa contoh praktis dari penggunaan iptables chains, yaitu daftar aturan yang diproses secara berurutan ketika paket memicu hook tertentu.

Dengan memahami konsep dan logika di balik iptables, kita dapat membuat aturan firewall yang andal dan fleksibel untuk melindungi sistem Linux kita dari ancaman jaringan. Kita juga dapat menyesuaikan perilaku firewall kita sesuai dengan kebutuhan keamanan dan kinerja kita.

Referensi :
(1) Iptables Tutorial: Ultimate Guide to Linux Firewall – phoenixNAP. https://phoenixnap.com/kb/iptables-tutorial-linux-firewall.
(2) Linux Firewall Tutorial: IPTables Tables, Chains, Rules Fundamentals. https://www.thegeekstuff.com/2011/01/iptables-fundamentals/.
(3) Iptables Essentials: Common Firewall Rules and Commands. https://www.digitalocean.com/community/tutorials/iptables-essentials-common-firewall-rules-and-commands.
(4) 25 Practical examples of iptables command – Linux Concept. https://linuxconcept.com/25-practical-examples-of-iptables-command/.
(5) What is a chain in iptables? – Unix & Linux Stack Exchange. https://unix.stackexchange.com/questions/506729/what-is-a-chain-in-iptables.
(6) How can I check the hit count for each rule in iptables?. https://stackoverflow.com/questions/17548383/how-can-i-check-the-hit-count-for-each-rule-in-iptables.
(7) A Deep Dive into Iptables and Netfilter Architecture. https://www.digitalocean.com/community/tutorials/a-deep-dive-into-iptables-and-netfilter-architecture.

You May Also Like

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *