Advertisement
Scroll to top

() translation by (you can also view the original English article)

Ada beberapa aplikasi firewall untuk Linux, tetapi apa yang mungkin tidak Anda sadari adalah bahwa, di jantung semua program ini adalah aplikasi yang sangat kuat yang dibangun langsung ke dalam Linux Kernel: iptables. Ini adalah firewall Linux. Tidak peduli program mana yang Anda gunakan untuk mengkonfigurasi firewall Anda di Linux, akhirnya semuanya turun ke iptables. Semua yang dilakukan program lain ini adalah mengkonfigurasinya.

Jadi, inilah pertanyaannya: jika program tersebut hanya mengonfigurasi iptables, mengapa tidak langsung mengonfigurasikannya sendiri? Melakukannya lebih mudah daripada yang Anda kira!


Latar Belakang Jaringan

Jika Anda terbiasa dengan istilah jaringan, seperti koneksi, IP, TCP, dan Port, maka jangan ragu untuk langsung beralih ke langkah berikutnya. Jika tidak, jika Anda baru mengenal jaringan, baca terus untuk membiasakan diri dengan istilah yang perlu Anda pahami, untuk mengikuti tutorial ini.

Harap perhatikan bahwa persyaratan dan definisi di bawah ini telah disengaja terlalu disederhanakan. Mereka dimaksudkan untuk pengguna setiap hari, bukan sysadmin. Jadi jika Anda adalah sysadmin berpengalaman atau Anda memiliki CCNA di saku Anda, mohon maaf karena tidak memasukkan rinciannya.

TCP/IP

TCP/IP adalah protokol yang memungkinkan komputer berkomunikasi satu sama lain melalui Internet dan Jaringan Ethernet.

Kegagalan adalah pilihan terakhir.

Bayangkan sebuah Ethernet Network sebagai jaringan lokal kecil (LAN - jaringan area lokal), seperti PC rumah, laptop, dan ponsel pintar Anda. Ini adalah jaringan heterogen kecil yang terisolasi dari seluruh dunia. Jaringan jaringan semacam itu adalah apa yang kita semua kenal sebagai Internet: satu set jaringan yang saling terhubung.

TCP/IP adalah kombinasi dari dua protokol yang bekerja pada tingkat yang berbeda dalam hirarki rantai komunikasi jaringan. Kita tidak akan menyelidiki detail tentang hierarki itu. TCP adalah singkatan dari Transfer Control Protocol, dan tanggung jawab utamanya adalah untuk memastikan bahwa komunikasi berhasil. Ini mengontrol kebenaran data yang dikirim, dan memastikan keberhasilannya. Ini memiliki algoritma yang berbeda untuk melakukan checksum canggih, koreksi otomatis, dan coba lagi. Kegagalan adalah pilihan terakhir. Nama, IP berasal dari Protokol Internet. Anda dapat menghubungkannya dengan "nomor telepon" dari PC Anda. Setiap mesin yang mampu berkomunikasi melalui Internet harus memiliki alamat IP - nomor telepon unik - sehingga paket komunikasi dapat menemukan tujuan mereka. Sebuah paket adalah bagian kecil dari data di dalam suatu aliran komunikasi, yang terkandung dan dapat diperiksa kebenarannya. Pada dasarnya, kita dapat mengatakan bahwa komputer kita mengirim paket TCP melalui Internet menggunakan protokol IP.

Setiap komunikasi jaringan terikat ke port tertentu. jaringan port berkisar dari 0 hingga 2 ^ 16 (65536). Setiap koneksi jaringan memiliki port keluar untuk orang yang memulai, dan port masuk untuk orang yang sedang mendengarkan pesan komputer lain. Ada beberapa koneksi antara beberapa komputer melalui port yang sama. Komputer dapat, bagaimanapun, berbicara melalui beberapa port sekaligus. Jadi, pada dasarnya, port baik untuk mengidentifikasi layanan dan menentukan saluran komunikasi, tetapi mereka tidak membatasi jumlah data atau koneksi.

Beberapa komputer dapat memiliki alamat IP yang sama. Anda mungkin telah mengamati bahwa baik komputer Anda di rumah dan di kantor memiliki alamat IP yang mengambil bentuk sesuatu di sepanjang garis 192.168.something.something, atau 10.0.something.something, atau 172.16.something.something. Ini adalah alamat IP pribadi yang hanya dapat digunakan di dalam LAN Anda. Anda tidak bisa keluar ke Internet dengan alamat IP seperti ini. Mereka mirip dengan nomor interior untuk jaringan telepon perusahaan Anda.

Gateway & Bridge

Bridge adalah komputer dengan alamat IP (publik) yang nyata yang dilewatkan ke Internet.

The bridgeThe bridgeThe bridge

Pada dasarnya, komputer ini memiliki hak dan kemampuan untuk berbicara satu sama lain di Internet secara langsung. Tapi, karena tidak ada koneksi langsung antara semua komputer di dunia (yang akan sangat sulit untuk dicapai), jembatan bertanggung jawab untuk menghubungkan segmen-segmen Internet.

Dengan menjaga analogi telepon kita tetap hidup, Anda dapat membayangkan jembatan-jembatan ini serupa dengan pusat-pusat telepon di kota atau lingkungan Anda. Jika Anda melakukan panggilan ke nomor lokal lain (komputer di sebelah kiri dalam skema kita), komunikasi dapat dilakukan langsung oleh pusat telepon Anda dengan secara fisik menghubungkan saluran Anda dengan tetangga Anda. Namun, jika Anda malah ingin memanggil paman jauh Anda, Bob, panggilan Anda harus dialihkan ke beberapa pusat telepon sampai telepon paman Anda dapat dihubungkan. Ini membentuk bridje antara kota Anda dan kotanya.

Gateway adalah cara untuk komputer dari jaringan pribadi (LAN dengan alamat IP pribadi) untuk berkomunikasi dengan komputer lain di Internet.

GatewayGatewayGateway

Jaringan pribadi seperti jaringan telepon pribadi perusahaan Anda. Anda dapat memanggil nomor interior, tetapi untuk memanggil seseorang yang berada di luar jaringan perusahaan Anda - seperti istri Anda di rumah - Anda harus terlebih dahulu menghubungi nomor khusus atau awalan.

Komputer sebenarnya berfungsi dengan cara yang sama. Ketika Anda berada di jaringan pribadi, Anda memiliki apa yang disebut komputer gateway. Ketika komputer Anda mencoba untuk berbicara dengan komputer lain di Internet, itu secara otomatis akan menghubungi gateway terlebih dahulu dan meminta "garis" ke dunia luar. Gateway akan melakukan pembicaraan ke komputer yang ditemukan di Internet, dan akan meneruskan pesan kembali ke komputer Anda. Anda, sebagai pengguna biasa, tidak melihat perbedaan antara jembatan dan gerbang. Komputer Anda akan tahu cara mengatasinya.


Definisi Firewall

Firewall adalah program yang berjalan di Gateway, Bridge atau PC/Laptop/Smartphone yang mampu memfilter paket jaringan masuk, keluar, dan diteruskan. Firewall pada dasarnya adalah alat yang memungkinkan Anda membatasi Anda atau akses jaringan Anda ke Internet, dan akses orang lain dari Internet ke jaringan Anda.

Dan ya, router kabel Anda atau Wi-Fi rumah, pada kenyataannya, firewall untuk semua komputer dan gadget Anda yang terhubung ke internet melaluinya.


Masalah yang Akan Kita Atasi

Untuk mengatur konteksnya, mari kita bayangkan arsitektur jaringan yang sangat mungkin. Saya telah melihat banyak perusahaan kecil menjalankan sesuatu yang mirip dengan ini.

NetworkNetworkNetwork

Apa yang kita miliki di sini sebenarnya adalah sesuatu yang sangat sederhana:

  • Beberapa komputer dan perangkat lain yang terhubung ke jaringan - kotak hijau
  • Server e-mail - kotak merah
  • Server Microsoft Active Directory - kotak biru
  • Gateway, yang juga merupakan firewall, untuk jaringan kita yang menjalankan Linux - kotak hitam
  • Di antara semua ini adalah switch jaringan sederhana

Di bagian berikutnya, kita akan mengkonfigurasi iptables di gateway itu, sehingga akan memungkinkan semua perangkat di jaringan untuk terhubung ke Internet. Ini akan memungkinkan kita untuk terhubung, melalui SSH, dan akan memungkinkan server surat eksternal untuk mencapai server email di dalam jaringan kita - komputer yang bahkan tidak memiliki alamat IP publik; hanya yang pribadi.


Komponen Iptables

Nama Iptables sebenarnya memiliki arti dalam fungsinya. Ini satu set tabel alamat IP dan port dengan beberapa tindakan yang melekat padanya. Dalam istilah iptabel, tabel ini disebut sebagai rantai. Sebuah iptables yang tidak terkonfigurasi dan kosong mungkin terlihat seperti ini:

1
csaba ~ # iptables -L

2
Chain INPUT (policy ACCEPT)
3
target     prot opt source               destination
4
5
Chain FORWARD (policy ACCEPT)
6
target     prot opt source               destination
7
8
Chain OUTPUT (policy ACCEPT)
9
target     prot opt source               destination

Anda dapat mengamati bahwa ada tiga rantai utama:

  • INPUT - semua koneksi masuk
  • FORWARD - koneksi yang lewat
  • OUTPUT - koneksi yang berangkat dari server ini

Istilah, "ACCEPT kebijakan" dalam kurung berarti bahwa ACCEPT ditetapkan sebagai kebijakan default untuk rantai tertentu. Jadi, ketika tidak ada kecocokan untuk koneksi, aturan itu akan diterapkan. Ada tiga konsep utama yang dapat Anda gunakan ketika mengkonfigurasi firewall Anda:

  • kebijakan default MENERIMA & menolak secara selektif semua yang Anda butuhkan - mungkin sulit untuk menentukan semua yang ditolak. Saya tidak merekomendasikan pendekatan ini.
  • DROP atau REJECT kebijakan default & izinkan semua yang Anda perlukan secara selektif - ini lebih baik, tetapi memiliki masalah. Jika Anda membuat kesalahan dalam konfigurasi iptables Anda, Anda dapat dengan mudah tetap dengan rantai kosong menolak akses ke semua dan semua orang, termasuk Anda. Jadi, kecuali Anda selalu memiliki akses fisik ke server/komputer firewall Anda, saya sarankan Anda menggunakan pendekatan berikutnya.
  • kebijakan default ACCEPT & kebijakan eksplisit untuk DROP semua & kemudian memungkinkan selektif yang Anda butuhkan - ini adalah solusi gabungan antara dua kemungkinan pertama. Ini akan menggunakan kebijakan standar ACCEPT, jadi jika ada yang salah, Anda dapat masuk kembali melalui SSH atau koneksi remote apa pun yang Anda gunakan untuk firewall Anda. Pada saat yang sama, aturan DROP eksplisit untuk koneksi yang tak tertandingi memastikan bahwa Anda aman. Membiarkan hanya apa yang Anda ketahui dan benar-benar perlu menggunakan menawarkan perlindungan terbaik.

Menambahkan Aturan ke Iptables

Ada dua cara untuk menambahkan aturan baru ke iptables. Salah satunya adalah memasukkannya di awal rantai. Pilihan lainnya adalah menambahkannya ke ujung rantai. Mengapa penting di mana urutan aturan terjadi?

Important: iptables memeriksa aturan dalam rantai dari atas ke bawah. Ini akan menghentikan pencariannya pada pertandingan pertama.

Anda harus merancang aturan Anda sedemikian rupa untuk mempertimbangkan perilaku iptables yang disebutkan di atas. Setelah pertandingan pertama aturan, iptables akan mengambil tindakan yang ditentukan oleh aturan, dan kemudian menghentikan pencarian. Jika tidak ada aturan yang cocok dengan koneksi yang dicentang, kebijakan default berlaku.

Menyisipkan Aturan Baru

Katakanlah kita ingin menambahkan aturan ke iptables kita yang akan memungkinkan siapa pun untuk terhubung ke port 22 pada firewall kita. Port 22 adalah port untuk protokol SSH. Tentu saja, admin server yang baik akan mengubah port ini menjadi sesuatu yang tidak terduga untuk alasan keamanan/ketidakjelasan yang jelas, tetapi itu adalah cerita lain untuk tutorial lain. Kita akan tetap dengan 22.

1
csaba ~ # iptables -I INPUT -i eth0 -p tcp --dport 22 -j ACCEPT

2
csaba ~ # iptables -L

3
Chain INPUT (policy ACCEPT)
4
target     prot opt source               destination
5
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh

Saya menduga alamat IP yang menghadap Internet dengan IP publik ada di antarmuka jaringan, yang disebut eth0. Mari kita membedah perintah ini:

  • -- singkatan untuk memasukkan aturan
  • INPUT - menentukan rantai yang diinginkan
  • -- singkatan dari antarmuka jaringan - dalam kasus kita, eth0
  • -p - adalah untuk protokol (tcp atau udp)
  • --dport 22 - untuk port tujuan 22 - ia memiliki versi --sport yang sesuai untuk verifikasi port sumber
  • -j - sebenarnya berasal dari "melompat," dan diikuti oleh tindakan-dalam kasus kita, tindakan untuk menerima koneksi

Namun, Anda mungkin sudah menduga bahwa aturan ini memiliki pengaruh yang kecil saat ini. Kebijakan standar kami adalah ACCEPT, sehingga menerima sesuatu secara eksplisit tidak menawarkan fungsi tambahan apa pun kepada kita. Sekarang, ingat cara ketiga yang disarankan untuk mengatur firewall kita: aturan eksplisit untuk menolak semua yang tidak cocok. Mari tambahkan aturan itu.

Menambahkan Aturan

Kita ingin menambahkan aturan yang memblokir lalu lintas masuk. Tapi hati-hati: kita hanya ingin memblokir apa yang bisa berbahaya. Jika kita memblokir semuanya, kita tidak akan dapat melakukan apa-apa, karena balasan atas permintaan kita akan ditolak. Misalnya, ketika Anda menelusuri halaman web, Anda membuat permintaan, maka Anda menerima jawaban. Jawaban ini masuk ke komputer Anda, jadi, pada rantai INPUT, kita harus memiliki aturan untuk mengizinkannya.

Pertama, kita akan menambahkan aturan untuk menerima lalu lintas masuk untuk koneksi yang sudah ada, seperti tanggapan terhadap permintaan.

1
csaba ~ # iptables -A INPUT -i eth0 -m conntrack  --ctstate ESTABLISHED,RELATED -j ACCEPT

2
csaba ~ # iptables -L

3
Chain INPUT (policy ACCEPT)
4
target     prot opt source               destination
5
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
6
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED

Sekarang setelah kita menjaga koneksi yang ada dan membalas koneksi yang kita lakukan, kita dapat menyangkal semua hal lain yang tidak cocok.

1
csaba ~ # iptables -A INPUT -i eth0 -p tcp -j DROP

2
csaba ~ # iptables -L

3
Chain INPUT (policy ACCEPT)
4
target     prot opt source               destination
5
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
6
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
7
DROP       tcp  --  anywhere             anywhere

Kita telah menambahkan baris lain, dengan aturan untuk DROP semua koneksi yang cocok. Ingat: aturan ini hanya akan berlaku jika tidak ada yang benar-benar cocok sebelumnya.

Ada dua cara untuk menolak koneksi.

  1. Anda dapat menggunakan DROP, yang setara dengan menghubungi nomor telepon yang tidak ada dengan perbedaan yang, setelah beberapa waktu, koneksi jaringan habis. Dengan nomor telepon, robot memberi tahu Anda bahwa nomor itu tidak ada. Tetapi hasil akhir dari sudut pandang si penelepon adalah sama: ia berpikir bahwa tujuan itu tidak ada.
  2. Cara kedua untuk menolak koneksi adalah dengan aturan, REJECT, dan pesan opsional. Ini analog dengan nomor yang Anda coba panggil sedang sibuk. Anda mungkin tahu bahwa ada nomor, Anda tahu itu dapat dipanggil, tetapi itu hanya menolak untuk menerima panggilan Anda. Secara opsional, Anda dapat memberikan pesan dengan aturan REJECT; defaultnya adalah "ICMP port unreachable" atau yang serupa.

Izinkan Komputer untuk Mengakses Internet

Pada titik ini, kita memiliki beberapa aturan dasar untuk rantai INPUT. Tetapi kita memiliki jaringan komputer yang memiliki alamat IP pribadi. Kita perlu menyediakan gateway ke Internet. Ini juga dilakukan oleh iptables: firewall.

Network Address Translation (NAT)

Mungkin, Anda sudah mendengar istilah ini: NAT. Ini mengacu pada prosedur menerjemahkan satu alamat jaringan ke yang lain dan meneruskan informasi di antara keduanya. Ini paling sering digunakan dalam arsitektur seperti milik kita. Gateway harus melakukan NAT untuk menerjemahkan IP komputer apa pun dari LAN ke IP publiknya sendiri dan kemudian kembali.

Routing adalah prosedur dimana suatu sistem dapat mengetahui apa antarmuka jaringan dan menuju gerbang apa yang dapat berkomunikasi untuk mencapai tujuannya. Setiap komputer memiliki tabel routing sendiri untuk menentukan ini. Iptables dapat menghubungkan ke prosedur routing ini pada dua titik yang berbeda: sebelum dan sesudah prosedur telah terjadi.

Nating dengan Iptables

1
csaba ~ # iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 89.72.31.243

Perintah ini menambahkan aturan sebagai POSTROUTING ke tabel NATing (-t nat). POSTROUTING pada dasarnya berarti bahwa paket-paket pertama melewati mekanisme routing pada gateway, dan, hanya setelah itu mereka diubah. Aturan -j SNAT berarti Sumber NAT; alamat sumber paket akan diubah ke alamat pada antarmuka yang ditentukan oleh -o eth0 - dalam kasus kita, ke alamat IP yang ditentukan oleh opsi, --to-source. Jadi, siapa pun yang dihubungi oleh komputer di jaringan Anda akan berasumsi bahwa ia sedang berbicara langsung ke gateway Anda. Itu sama sekali tidak tahu tentang fakta bahwa paket-paket itu ditujukan untuk komputer yang berbeda. Gateway, menggunakan iptables, akan menyimpan daftar internal dari semua alamat IP yang diterjemahkan, dan, ketika balasan datang, itu akan mengembalikan perubahan dan meneruskan jawaban ke komputer di dalam jaringan.


Izinkan Klien dari Internet ke Server Email

Masalah lain yang kita hadapi adalah apa yang harus dilakukan ketika kita memiliki server yang berada di belakang firewall. Kita perlu mengizinkan klien, datang dari Internet, untuk berkomunikasi dengan server kita dalam beberapa cara. Ini adalah kasus dengan server email kita. Ketika email tiba yang harus dikirim ke akun mail di server, server email pengirim harus terhubung ke penerima.

Tetapi server email kita hanya memiliki alamat IP pribadi. Tidak mungkin komputer eksternal dapat terhubung secara langsung. Di sisi lain, gateway kita memiliki IP eksternal yang dapat dihubungi siapa pun. Solusinya? Buka port di gateway kita sehingga permintaan dari Internet ke port itu akan benar-benar masuk ke server email. Jawabannya, tentu saja, akan melakukan perjalanan melalui gateway kembali ke klien. Triknya adalah menggunakan jenis NAT yang berbeda di sini, yang disebut Destination NAT. Ini mengubah tujuan paket dan kemudian mengembalikannya kembali ketika respons terjadi. Pikirkan DNAT sebagai kebalikan dari SNAT.

Tip: Anda mungkin tahu fitur ini sebagai "Server Virtual," jika Anda pernah bermain-main dengan router rumah kecil.

1
csaba ~ # iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT --to-destination 192.168.1.2:25

Jadi, apa kita di port 25 (port yang digunakan untuk SMTP, protokol email yang digunakan seluruh Internet). Aturan di atas menangkap paket ini karena opsi --dport 25, yang pada dasarnya mengatakan, "Cocokkan apa saja yang masuk ke port ini pada antarmuka yang ditentukan oleh -i eth0. Setelah paket dicocokkan, ubah tujuannya dari mesin saat ini. (gateway) ke yang ditentukan oleh --to-destination." Harap dicatat bahwa Anda dapat menentukan port secara eksplisit setelah alamat IP dengan memisahkannya dengan titik dua.

Akhirnya, perhatikan bahwa ini ada di hook PREROUTING. Tujuan harus diubah sebelum routing benar-benar terjadi. Jika tidak, paket akan berakhir di gateway dan tidak menemukan cara ke server email.


Konfigurasi iptables tetap

Aturan yang Anda masukkan atau tambahkan ke iptables ada di memori. Setelah reboot, spoof: semuanya hilang! Untuk menyimpan konfigurasi Anda, Anda harus memasukkannya ke dalam file, seperti:

1
csaba ~ # iptables-save > /some/directory/my_rules.fw

Nama file itu tidak masalah, juga tidak ekstensi. Untuk mengembalikan aturan, jalankan perintah ini saat komputer Anda mulai.

1
iptables-restor < /some/directory/my_rules.fw

Jika Anda melihat konten yang disimpan, Anda akan melihat bahwa mereka adalah parameter yang sama yang kami gunakan dengan perintah iptables. Ada beberapa perbedaan kecil, tetapi Anda dapat dengan mudah memahami file yang disimpan, dan bahkan dapat menulis sendiri file seperti itu dengan tangan dan memuatnya.


Pikiran Akhir

Sebagai penutup, berikut adalah beberapa pemikiran tentang kapan dan kapan tidak menggunakan firewall dengan komputer Linux.

Gunakan firewall di Linux ketika Anda mengonfigurasi server (seperti gateway dalam contoh kami), atau ketika Anda memiliki komputer dengan informasi penting di dalamnya yang secara langsung terkena Internet. Sebelum Anda melompat untuk mengkonfigurasi iptables Anda, pertimbangkan potensi bahaya. Tanya diri Anda: apakah komputer saya dikenal di Internet? Ada beberapa miliar komputer di luar sana. Jika milik Anda hanya satu, peluang untuk menjadi sasaran sangat rendah. Apakah ada orang yang langsung tertarik dengan informasi Anda? Peretas tidak membuang waktu mencuri data acak dengan harapan mereka dapat menemukan sesuatu. Mereka biasanya tahu apa yang mereka cari, dan kemudian menargetkan komputer yang berisi informasi yang diinginkan. Tentu saja, ada serangan yang tak terhitung jumlahnya terhadap komputer acak yang mencoba menginstal beberapa jenis worm atau virus, tetapi di Linux, Anda kebal dengan desain.

Jangan buang waktu Anda dengan mengkonfigurasi firewall di Linux ketika itu adalah komputer yang selalu di belakang firewall, seperti PC rumah di belakang router rumah Anda, atau ketika Anda tidak memiliki informasi penting pada laptop Anda. Jika Anda menjaga layanan yang mendengarkan di jaringan seminimal mungkin dan memiliki kata sandi yang aman, Anda dapat melupakan firewall Anda. Saya pribadi tidak memiliki komputer pribadi, laptop atau smartphone dengan firewall yang berjalan. Namun, saya memiliki router rumah dengan firewall yang dikonfigurasi dengan baik.

Saya pikir Anda dapat dengan aman menerapkan ide-ide ini ke Mac OSX juga. Jika Anda pengguna Windows, maaf: firewall adalah lini pertahanan pertama Anda. Untuk Linux atau MacOS, melalui, firewall adalah garis pertahanan terakhir Anda. Sandi yang dipilih dengan hati-hati dan tidak menjalankan layanan tidak berguna harus menangani sebagian besar perlindungan komputer Anda.

Terima kasih sudah membaca. Pertanyaan?

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.