Iptables: Difference between revisions
No edit summary |
|||
| (12 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
Sederhananya, '''Iptables''' adalah program [[Firewall|firewall]] untuk [[Linux]]. Ini akan memantau lalu lintas dari dan server menggunakan tabel. Tabel ini berisi kumpulan aturan, yang disebut rantai, yang akan menyaring paket data yang masuk dan keluar. | [[File:Iptables.png|thumb|300px|Source: [https://www.socinvestigation.com/wp-content/uploads/2021/01/iptables.png socinvestigation.com]]] | ||
Sederhananya, '''Iptables''' adalah program [[Firewall|firewall]] untuk [[Linux]]. Ini akan memantau lalu lintas dari dan [[server]] menggunakan tabel. Tabel ini berisi kumpulan aturan, yang disebut rantai, yang akan menyaring paket data yang masuk dan keluar. | |||
Ketika sebuah paket cocok dengan aturan, paket tersebut diberi target, yang dapat berupa rantai lain atau salah satu dari nilai khusus berikut: | Ketika sebuah paket cocok dengan aturan, paket tersebut diberi target, yang dapat berupa rantai lain atau salah satu dari nilai khusus berikut: | ||
| Line 6: | Line 7: | ||
*'''DROP''' - Tidak akan membiarkan paket lewat. | *'''DROP''' - Tidak akan membiarkan paket lewat. | ||
*'''RETURN''' - Menghentikan paket dari melintasi rantai dan memerintahkannya untuk kembali ke rantai sebelumnya. | *'''RETURN''' - Menghentikan paket dari melintasi rantai dan memerintahkannya untuk kembali ke rantai sebelumnya. | ||
Bekerja dengan salah satu tabel default, yang disebut filter. Ini terdiri dari tiga rantai: | Bekerja dengan salah satu tabel default, yang disebut filter. Ini terdiri dari tiga rantai: | ||
*'''INPUT''' - Mengontrol paket yang masuk ke server. | *'''INPUT''' - Mengontrol paket yang masuk ke server. | ||
*'''FORWARD''' - Menyaring paket-paket yang masuk yang akan diteruskan ke tempat lain. | *'''FORWARD''' - Menyaring paket-paket yang masuk yang akan diteruskan ke tempat lain. | ||
*'''OUTPUT''' - Memfilter paket yang keluar dari server Anda. | *'''OUTPUT''' - Memfilter paket yang keluar dari server Anda. | ||
Sebelum memulai, pastikan Anda memiliki akses root atau SSH ke mesin Anda yang berjalan di Ubuntu 16.04 atau lebih. Anda dapat membuat koneksi melalui Putty (Windows) atau terminal shell (Linux, macOS). | Sebelum memulai, pastikan Anda memiliki akses root atau [[SSH]] ke mesin Anda yang berjalan di [[Ubuntu]] 16.04 atau lebih. Anda dapat membuat koneksi melalui Putty ([[Windows]]) atau terminal shell ([[Linux]], [[macOS]]). | ||
==Option Dasar iptables== | ==Option Dasar iptables== | ||
Berikut adalah beberapa option dasar yang sering digunakan dalam mengkonfigurasi iptables. | Berikut adalah beberapa option dasar yang sering digunakan dalam mengkonfigurasi iptables. | ||
* | *<code>-A</code> Tambahkan rule / aturan ini ke rantai aturan yang ada. Rantai yang valid adalah <code>INPUT</code>, <code>FORWARD</code> and <code>OUTPUT</code>. Kita biasanya lebih banyak menggunakan rantai <code>INPUT</code> yang berdampak pada traffic yang masuk. | ||
* | *<code>-L</code> memperlihatkan daftar aturan / rule yang ada iptables. | ||
* | *<code>-m state</code> Mengijinkan aturan di cocokan berdasarkan kondisi sambungan (connection state). Mengijinkan penggunaan option <code>-–state</code>. | ||
* | *<code>--state</code> Mendefinisikan daftar dari kondisi / states bagi aturan untuk di cocokan. Beberapa state yang valid, adalah, | ||
* | *<code>NEW</code> Sambungan baru, dan belum pernah terlihat sebelumnya. | ||
* | *<code>RELATED</code> Sambungan baru, tapi berhubungan dengan sambungan lain yang telah di ijinkan. | ||
* | *<code>ESTABLISHED</code> Sambungan yang sudah terjadi. | ||
* | *<code>INVALID</code> Traffic yang karena berbagai alasan tidak bisa di identifikasi. | ||
* | *<code>-m limit</code> Dibutuhkan oleh rule jika ingin melakukan pencocokan dalam waktu / jumlah tertentu. Mengijinkan penggunakan option <code>--limit</code>. Berguna untuk membatasi aturan logging. | ||
* | *<code>--limit</code> Kecepatan maksimum pencocokan, diberikan dalam bentuk angka yang di ikuti oleh <code>/second</code>, <code>/minute</code>, <code>/hour</code>, atau <code>/day</code> tergantung seberapa sering kita ingin melakukan pencocokan aturan. Jika option ini tidak digunakan maka default-nya adalah <code>3/hour</code>. | ||
* | *<code>-p</code> Protokol yang digunakan untuk sambungan. | ||
* | *<code>--dport</code> Port tujuan yang digunakan oleh aturan iptables. Bisa berupa satu port, bisa juga satu range ditulis sebagai start:end, yang akan mencocokan semua port start sampai end. | ||
* | *<code>-j</code> Jump ke target yang spesifik. iptables mempunyai empat (4) target default, yaitu, | ||
**ACCEPT - Accept / menerika paket dan berhenti memproses aturan dalam rantai aturan ini. | **<code>ACCEPT</code> - Accept / menerika paket dan berhenti memproses aturan dalam rantai aturan ini. | ||
**REJECT - Reject / tlak paket dan beritahu ke pengirim bahwa kita menolak paket tersebut, dan stop pemrosesan | **<code>REJECT</code> - Reject / tlak paket dan beritahu ke pengirim bahwa kita menolak paket tersebut, dan stop pemrosesan aturan dalam rantai aturan ini. | ||
**DROP – Diam-diam tidak pedulikan paket, dan stop pemrosesan aturan di rantai aturan ini. | **<code>DROP</code> – Diam-diam tidak pedulikan paket, dan stop pemrosesan aturan di rantai aturan ini. | ||
**LOG - Log / catat paket, dan teruskan memprosesan aturan di rantai aturan ini. Mengijinkan penggunaan option | **<code>LOG</code> - Log / catat paket, dan teruskan memprosesan aturan di rantai aturan ini. Mengijinkan penggunaan option <code>--log-prefix</code> dan <code>--log-level</code>. | ||
*'''--log-prefix''' Jika pencatatan di lakukan, letakan text / tulisan sebelum catatan. Gunakan kutip di text / tulisan. | *'''--log-prefix''' Jika pencatatan di lakukan, letakan text / tulisan sebelum catatan. Gunakan kutip di text / tulisan. | ||
*'''--log-level''' Pencatatan menggunakan syslog level. 7 adalah pilihan yang baik, kecuali kita perlu suatu yang lain. | *'''--log-level''' Pencatatan menggunakan syslog level. 7 adalah pilihan yang baik, kecuali kita perlu suatu yang lain. | ||
*'''-i''' Lakukan pencocokan jika paket yang masuk dari interface tertentu. | *'''-i''' Lakukan pencocokan jika paket yang masuk dari interface tertentu. | ||
*'''-I''' Insert / masukan aturan. Butuh dua (2) option, yaitu, rantai aturan yang mana, dan nomor aturan. Jadi -I INPUT 5 akan memasukan ke rantai INPUT dan menjadikannya aturan nomor 5 di daftar. | *'''-I''' Insert / masukan aturan. Butuh dua (2) option, yaitu, rantai aturan yang mana, dan nomor aturan. Jadi <code>-I INPUT 5</code> akan memasukan ke rantai INPUT dan menjadikannya aturan nomor 5 di daftar. | ||
*'''-v''' Menampilkan lebih banyak informasi di layar. Sangat membantu jika ada beberapa aturan yang tampak mirip jika di tampilkan tanpa -v. | *'''-v''' Menampilkan lebih banyak informasi di layar. Sangat membantu jika ada beberapa aturan yang tampak mirip jika di tampilkan tanpa <code>-v</code>. | ||
==Cara== | ==Cara== | ||
| Line 47: | Line 46: | ||
Selanjutnya, <code>-i</code> menentukan interface untuk aturan tersebut. Dalam hal ini, ini adalah <code>eth0</code>. Saat Anda menulis aturan Anda sendiri, pastikan Anda mengetahui interface mana yang terhubung ke jaringan Anda. | Selanjutnya, <code>-i</code> menentukan interface untuk aturan tersebut. Dalam hal ini, ini adalah <code>eth0</code>. Saat Anda menulis aturan Anda sendiri, pastikan Anda mengetahui interface mana yang terhubung ke jaringan Anda. | ||
Bendera berikut, -p, menamai protokol. Aturan ini untuk tcp, yang merupakan lalu lintas Web. | Bendera berikut, <code>-p</code>, menamai protokol. Aturan ini untuk tcp, yang merupakan lalu lintas Web. | ||
Bendera -m sedikit berbeda. Digunakan untuk menegaskan bahwa ada suatu kondisi yang harus dipenuhi agar traffic tidak ditolak. Kondisi dalam aturan ini adalah negara. | Bendera <code>-m</code> sedikit berbeda. Digunakan untuk menegaskan bahwa ada suatu kondisi yang harus dipenuhi agar traffic tidak ditolak. Kondisi dalam aturan ini adalah negara. | ||
Negara sebenarnya adalah bendera berikutnya. Anda perlu memberikan --state daftar status yang dapat diterima yang ditulis dalam huruf besar semua dan dipisahkan dengan koma. Aturan ini menerima koneksi baru dan yang sudah ada. | Negara sebenarnya adalah bendera berikutnya. Anda perlu memberikan <code>--state</code> daftar status yang dapat diterima yang ditulis dalam huruf besar semua dan dipisahkan dengan koma. Aturan ini menerima koneksi baru dan yang sudah ada. | ||
Bendera kedua terakhir di sini adalah --sport. Itu singkatan dari "port sumber," dan memberi tahu iptables dari mana lalu lintas berasal. Ada juga flag --dport yang merupakan singkatan dari “destination port.” Ini digunakan untuk aturan OUTPUT untuk menangani lalu lintas port mana yang datang. | Bendera kedua terakhir di sini adalah <code>--sport</code>. Itu singkatan dari "port sumber," dan memberi tahu iptables dari mana lalu lintas berasal. Ada juga flag <code>--dport</code> yang merupakan singkatan dari “destination port.” Ini digunakan untuk aturan OUTPUT untuk menangani lalu lintas port mana yang datang. | ||
Akhirnya, ada flag -j. Ini memberi tahu iptable tindakan mana yang harus "dilompati". Dalam hal ini harus MENERIMA lalu lintas yang memenuhi kondisi sebelumnya. | Akhirnya, ada flag <code>-j</code>. Ini memberi tahu iptable tindakan mana yang harus "dilompati". Dalam hal ini harus MENERIMA lalu lintas yang memenuhi kondisi sebelumnya. | ||
==Installasi== | ==Installasi== | ||
<syntaxhighlight lang="shell"> | |||
sudo apt-get update | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="shell"> | |||
sudo apt-get install iptables | |||
</syntaxhighlight> | |||
*Periksa status konfigurasi iptables saat ini dengan menjalankan: | *Periksa status konfigurasi iptables saat ini dengan menjalankan: | ||
<syntaxhighlight lang="shell"> | |||
sudo iptables -L -v | |||
</syntaxhighlight> | |||
Di sini, opsi <code>-L</code> digunakan untuk membuat daftar semua aturan, dan <code>-v</code> adalah untuk menampilkan info dalam format yang lebih detail. Di bawah ini adalah contoh outputnya: | Di sini, opsi <code>-L</code> digunakan untuk membuat daftar semua aturan, dan <code>-v</code> adalah untuk menampilkan info dalam format yang lebih detail. Di bawah ini adalah contoh outputnya: | ||
<syntaxhighlight lang="shell"> | |||
Chain INPUT (policy ACCEPT 0 packets, 0 bytes) | |||
pkts bytes target prot opt in out source destination | |||
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) | |||
pkts bytes target prot opt in out source destination | |||
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) | |||
pkts bytes target prot opt in out source destination | |||
</syntaxhighlight> | |||
Sekarang akan menginstal [[Firewall|firewall]] [[Linux]]. Pada saat ini, dapat melihat bahwa semua rantai diatur ke <code>ACCEPT</code> dan tidak memiliki aturan. Ini tidak aman karena paket apa pun dapat masuk tanpa penyaringan. | Sekarang akan menginstal [[Firewall|firewall]] [[Linux]]. Pada saat ini, dapat melihat bahwa semua rantai diatur ke <code>ACCEPT</code> dan tidak memiliki aturan. Ini tidak aman karena paket apa pun dapat masuk tanpa penyaringan. | ||
==Mematikan Iptables== | ==Mematikan Iptables== | ||
<syntaxhighlight lang="shell"> | |||
sudo iptables -F | |||
</syntaxhighlight> | |||
==Contoh== | ==Contoh== | ||
*Memblokir sebuah website, disini memakai contoh Facebook | *Memblokir sebuah website, disini memakai contoh Facebook | ||
<syntaxhighlight lang="shell"> | |||
sudo iptables -A OUTPUT -p tcp -d www.facebook.com -j DROP | |||
</syntaxhighlight> | |||
<syntaxhighlight lang="shell"> | |||
sudo iptables -A OUTPUT -p tcp -d facebook.com -j DROP | |||
</syntaxhighlight> | |||
== | ==Source== | ||
*[https:// | *[https://www.hostinger.com/tutorials/iptables-tutorial hostingerdotcom] | ||
*[https:// | *[https://dev.to/dandyvica/securing-your-linux-desktop-using-iptables-firewall-rules-3p86 dev.to] | ||
*[https:// | *[https://www.maketecheasier.com/secure-linux-desktop-with-iptables/ maketecheasier.com] | ||
*[https:// | *[https://musaamin.web.id/cara-setting-firewall-dengan-iptables-di-linux/ musaamin.web.id] | ||
[[Category:Security]][[Category:Linux]] | [[Category:Security]] | ||
[[Category:Linux]] | |||
[[Category:Software]] | |||
[[Category:Firewall]] | |||
Latest revision as of 21:47, 2 January 2023

Sederhananya, Iptables adalah program firewall untuk Linux. Ini akan memantau lalu lintas dari dan server menggunakan tabel. Tabel ini berisi kumpulan aturan, yang disebut rantai, yang akan menyaring paket data yang masuk dan keluar.
Ketika sebuah paket cocok dengan aturan, paket tersebut diberi target, yang dapat berupa rantai lain atau salah satu dari nilai khusus berikut:
- ACCEPT - Akan mengizinkan paket untuk melewatinya.
- DROP - Tidak akan membiarkan paket lewat.
- RETURN - Menghentikan paket dari melintasi rantai dan memerintahkannya untuk kembali ke rantai sebelumnya.
Bekerja dengan salah satu tabel default, yang disebut filter. Ini terdiri dari tiga rantai:
- INPUT - Mengontrol paket yang masuk ke server.
- FORWARD - Menyaring paket-paket yang masuk yang akan diteruskan ke tempat lain.
- OUTPUT - Memfilter paket yang keluar dari server Anda.
Sebelum memulai, pastikan Anda memiliki akses root atau SSH ke mesin Anda yang berjalan di Ubuntu 16.04 atau lebih. Anda dapat membuat koneksi melalui Putty (Windows) atau terminal shell (Linux, macOS).
Option Dasar iptables
Berikut adalah beberapa option dasar yang sering digunakan dalam mengkonfigurasi iptables.
-ATambahkan rule / aturan ini ke rantai aturan yang ada. Rantai yang valid adalahINPUT,FORWARDandOUTPUT. Kita biasanya lebih banyak menggunakan rantaiINPUTyang berdampak pada traffic yang masuk.-Lmemperlihatkan daftar aturan / rule yang ada iptables.-m stateMengijinkan aturan di cocokan berdasarkan kondisi sambungan (connection state). Mengijinkan penggunaan option-–state.--stateMendefinisikan daftar dari kondisi / states bagi aturan untuk di cocokan. Beberapa state yang valid, adalah,NEWSambungan baru, dan belum pernah terlihat sebelumnya.RELATEDSambungan baru, tapi berhubungan dengan sambungan lain yang telah di ijinkan.ESTABLISHEDSambungan yang sudah terjadi.INVALIDTraffic yang karena berbagai alasan tidak bisa di identifikasi.-m limitDibutuhkan oleh rule jika ingin melakukan pencocokan dalam waktu / jumlah tertentu. Mengijinkan penggunakan option--limit. Berguna untuk membatasi aturan logging.--limitKecepatan maksimum pencocokan, diberikan dalam bentuk angka yang di ikuti oleh/second,/minute,/hour, atau/daytergantung seberapa sering kita ingin melakukan pencocokan aturan. Jika option ini tidak digunakan maka default-nya adalah3/hour.-pProtokol yang digunakan untuk sambungan.--dportPort tujuan yang digunakan oleh aturan iptables. Bisa berupa satu port, bisa juga satu range ditulis sebagai start:end, yang akan mencocokan semua port start sampai end.-jJump ke target yang spesifik. iptables mempunyai empat (4) target default, yaitu,
ACCEPT- Accept / menerika paket dan berhenti memproses aturan dalam rantai aturan ini.REJECT- Reject / tlak paket dan beritahu ke pengirim bahwa kita menolak paket tersebut, dan stop pemrosesan aturan dalam rantai aturan ini.DROP– Diam-diam tidak pedulikan paket, dan stop pemrosesan aturan di rantai aturan ini.LOG- Log / catat paket, dan teruskan memprosesan aturan di rantai aturan ini. Mengijinkan penggunaan option--log-prefixdan--log-level.
- --log-prefix Jika pencatatan di lakukan, letakan text / tulisan sebelum catatan. Gunakan kutip di text / tulisan.
- --log-level Pencatatan menggunakan syslog level. 7 adalah pilihan yang baik, kecuali kita perlu suatu yang lain.
- -i Lakukan pencocokan jika paket yang masuk dari interface tertentu.
- -I Insert / masukan aturan. Butuh dua (2) option, yaitu, rantai aturan yang mana, dan nomor aturan. Jadi
-I INPUT 5akan memasukan ke rantai INPUT dan menjadikannya aturan nomor 5 di daftar. - -v Menampilkan lebih banyak informasi di layar. Sangat membantu jika ada beberapa aturan yang tampak mirip jika di tampilkan tanpa
-v.
Cara
Itu mungkin terlihat seperti banyak, tetapi sangat sederhana ketika Anda memecahnya. Pertama, aturan ini dimulai dengan -A karena akan ditambahkan ke aturan iptables Anda.
Selanjutnya, -i menentukan interface untuk aturan tersebut. Dalam hal ini, ini adalah eth0. Saat Anda menulis aturan Anda sendiri, pastikan Anda mengetahui interface mana yang terhubung ke jaringan Anda.
Bendera berikut, -p, menamai protokol. Aturan ini untuk tcp, yang merupakan lalu lintas Web.
Bendera -m sedikit berbeda. Digunakan untuk menegaskan bahwa ada suatu kondisi yang harus dipenuhi agar traffic tidak ditolak. Kondisi dalam aturan ini adalah negara.
Negara sebenarnya adalah bendera berikutnya. Anda perlu memberikan --state daftar status yang dapat diterima yang ditulis dalam huruf besar semua dan dipisahkan dengan koma. Aturan ini menerima koneksi baru dan yang sudah ada.
Bendera kedua terakhir di sini adalah --sport. Itu singkatan dari "port sumber," dan memberi tahu iptables dari mana lalu lintas berasal. Ada juga flag --dport yang merupakan singkatan dari “destination port.” Ini digunakan untuk aturan OUTPUT untuk menangani lalu lintas port mana yang datang.
Akhirnya, ada flag -j. Ini memberi tahu iptable tindakan mana yang harus "dilompati". Dalam hal ini harus MENERIMA lalu lintas yang memenuhi kondisi sebelumnya.
Installasi
sudo apt-get update
sudo apt-get install iptables
- Periksa status konfigurasi iptables saat ini dengan menjalankan:
sudo iptables -L -v
Di sini, opsi -L digunakan untuk membuat daftar semua aturan, dan -v adalah untuk menampilkan info dalam format yang lebih detail. Di bawah ini adalah contoh outputnya:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Sekarang akan menginstal firewall Linux. Pada saat ini, dapat melihat bahwa semua rantai diatur ke ACCEPT dan tidak memiliki aturan. Ini tidak aman karena paket apa pun dapat masuk tanpa penyaringan.
Mematikan Iptables
sudo iptables -F
Contoh
- Memblokir sebuah website, disini memakai contoh Facebook
sudo iptables -A OUTPUT -p tcp -d www.facebook.com -j DROP
sudo iptables -A OUTPUT -p tcp -d facebook.com -j DROP