Panduan Pemula untuk iptables, Linux Firewall
Iptables adalah utilitas firewall yang sangat fleksibel yang dibuat untuk sistem operasi Linux. Baik Anda seorang ahli Linux pemula atau administrator sistem, mungkin ada beberapa cara agar iptables dapat sangat berguna bagi Anda. Baca terus selagi kami tunjukkan cara mengkonfigurasi firewall Linux yang paling serbaguna.
Foto oleh ezioman .
Tentang iptables
iptables adalah utilitas firewall baris perintah yang menggunakan rantai kebijakan untuk mengizinkan atau memblokir lalu lintas. Ketika koneksi mencoba untuk membangun dirinya sendiri di sistem Anda, iptables mencari aturan dalam daftarnya untuk dicocokkan. Jika tidak menemukannya, itu akan menggunakan tindakan default.
iptables hampir selalu sudah diinstal sebelumnya pada distribusi Linux mana pun. Untuk memperbarui / menginstalnya, cukup ambil paket iptables:
sudo apt-get install iptables
Ada alternatif GUI untuk iptables seperti Firestarter, tetapi iptables tidak terlalu sulit setelah Anda memiliki beberapa perintah. Anda ingin sangat berhati-hati saat mengonfigurasi aturan iptables, terutama jika Anda menggunakan SSH ke server, karena satu perintah yang salah dapat mengunci Anda secara permanen hingga diperbaiki secara manual di mesin fisik.
Jenis Rantai
iptables menggunakan tiga rantai berbeda: input, forward, dan output.
Input - Rantai ini digunakan untuk mengontrol perilaku koneksi masuk. Misalnya, jika pengguna mencoba SSH ke PC / server Anda, iptables akan mencoba mencocokkan alamat IP dan port ke aturan dalam rantai masukan.
Teruskan - Rantai ini digunakan untuk koneksi masuk yang sebenarnya tidak dikirim secara lokal. Pikirkan sebuah router - data selalu dikirim ke sana tetapi jarang benar-benar ditujukan ke router itu sendiri; data hanya diteruskan ke targetnya. Kecuali jika Anda melakukan semacam perutean, NAT, atau hal lain di sistem Anda yang memerlukan penerusan, Anda bahkan tidak akan menggunakan rantai ini.
Ada satu cara pasti untuk memeriksa apakah sistem Anda menggunakan / membutuhkan rantai maju atau tidak.
iptables -L -v
Tangkapan layar di atas adalah dari server yang telah berjalan selama beberapa minggu dan tidak memiliki batasan pada koneksi masuk atau keluar. Seperti yang Anda lihat, rantai masukan telah memproses 11GB paket dan rantai keluaran telah memproses 17GB. Rantai maju, di sisi lain, tidak perlu memproses satu paket pun. Ini karena server tidak melakukan penerusan apa pun atau digunakan sebagai perangkat penerusan.
Output - Rantai ini digunakan untuk koneksi keluar. Misalnya, jika Anda mencoba melakukan ping ke howtogeek.com, iptables akan memeriksa rantai keluarannya untuk melihat apa aturannya terkait ping dan howtogeek.com sebelum membuat keputusan untuk mengizinkan atau menolak upaya koneksi.
Peringatan itu
Meskipun melakukan ping ke host eksternal tampak seperti sesuatu yang hanya perlu melintasi rantai keluaran, perlu diingat bahwa untuk mengembalikan data, rantai masukan juga akan digunakan. Saat menggunakan iptables untuk mengunci sistem Anda, ingatlah bahwa banyak protokol akan membutuhkan komunikasi dua arah, sehingga rantai masukan dan keluaran perlu dikonfigurasi dengan benar. SSH adalah protokol umum yang orang lupa izinkan di kedua rantai.
Perilaku Default Rantai Kebijakan
Sebelum masuk dan mengonfigurasi aturan tertentu, Anda sebaiknya memutuskan apa yang Anda inginkan untuk perilaku default dari ketiga rantai tersebut. Dengan kata lain, apa yang Anda ingin iptables lakukan jika koneksi tidak cocok dengan aturan yang ada?
Untuk melihat apa yang rantai kebijakan Anda saat ini dikonfigurasi untuk dilakukan dengan lalu lintas yang tidak cocok, jalankan iptables -L
perintah.
Seperti yang Anda lihat, kami juga menggunakan perintah grep untuk memberi kami keluaran yang lebih bersih. Di tangkapan layar itu, rantai kami saat ini dianggap menerima lalu lintas.
Lebih sering daripada tidak, Anda ingin sistem Anda menerima koneksi secara default. Kecuali Anda telah mengubah aturan rantai kebijakan sebelumnya, pengaturan ini harus sudah dikonfigurasi. Apa pun itu, berikut adalah perintah untuk menerima koneksi secara default:
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
Secara default ke aturan accept, Anda kemudian dapat menggunakan iptables untuk menolak alamat IP atau nomor port tertentu, sambil terus menerima semua koneksi lainnya. Kita akan membahas perintah itu sebentar lagi.
Jika Anda lebih suka menolak semua koneksi dan secara manual menentukan yang mana yang ingin Anda izinkan untuk terhubung, Anda harus mengubah kebijakan default rantai Anda untuk dijatuhkan. Melakukan ini mungkin hanya berguna untuk server yang berisi informasi sensitif dan hanya memiliki alamat IP yang sama yang terhubung dengannya.
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
Tanggapan Khusus Koneksi
Dengan kebijakan rantai default Anda dikonfigurasi, Anda dapat mulai menambahkan aturan ke iptables sehingga iptables tahu apa yang harus dilakukan saat menemukan koneksi dari atau ke alamat IP atau port tertentu. Dalam panduan ini, kita akan membahas tiga "tanggapan" yang paling dasar dan umum digunakan.
Terima - Izinkan koneksi.
Jatuhkan - Putuskan koneksi, bertindak seperti itu tidak pernah terjadi. Ini paling baik jika Anda tidak ingin sumber menyadari bahwa sistem Anda ada.
Tolak - Jangan izinkan koneksi, tetapi kirim kembali kesalahan. Ini paling baik jika Anda tidak ingin sumber tertentu terhubung ke sistem Anda, tetapi Anda ingin mereka tahu bahwa firewall Anda memblokirnya.
Cara terbaik untuk menunjukkan perbedaan antara ketiga aturan ini adalah dengan menunjukkan seperti apa saat PC mencoba melakukan ping ke mesin Linux dengan iptables yang dikonfigurasi untuk masing-masing pengaturan ini.
Mengizinkan koneksi:
Menjatuhkan koneksi:
Menolak koneksi:
Mengizinkan atau Memblokir Koneksi Tertentu
Dengan rantai kebijakan Anda dikonfigurasi, Anda sekarang dapat mengonfigurasi iptables untuk mengizinkan atau memblokir alamat, rentang alamat, dan port tertentu. Dalam contoh ini, kami akan menyetel koneksi ke DROP
, tetapi Anda dapat mengalihkannya ke ACCEPT
atau REJECT
, bergantung pada kebutuhan Anda dan cara Anda mengonfigurasi rantai kebijakan.
Catatan: Dalam contoh ini, kami akan menggunakan iptables -A
untuk menambahkan aturan ke rantai yang ada. iptables dimulai dari bagian atas daftar dan melewati setiap aturan sampai menemukan yang cocok. Jika Anda perlu memasukkan aturan di atas yang lain, Anda dapat menggunakan iptables -I [chain] [number]
untuk menentukan nomor yang harus ada dalam daftar.
Koneksi dari satu alamat IP
Contoh ini menunjukkan cara memblokir semua koneksi dari alamat IP 10.10.10.10.
iptables -A INPUT -s 10.10.10.10 -j DROP
Koneksi dari berbagai alamat IP
Contoh ini menunjukkan cara memblokir semua alamat IP di jangkauan jaringan 10.10.10.0/24. Anda dapat menggunakan netmask atau notasi garis miring standar untuk menentukan rentang alamat IP.
iptables -A INPUT -s 10.10.10.0/24 -j DROP
atau
iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP
Koneksi ke port tertentu
Contoh ini menunjukkan cara memblokir koneksi SSH dari 10.10.10.10.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
Anda dapat mengganti "ssh" dengan protokol atau nomor port apa pun. Bagian -p tcp
dari kode tersebut memberi tahu iptables jenis koneksi apa yang digunakan protokol. Jika Anda memblokir protokol yang menggunakan UDP daripada TCP, maka -p udp
akan diperlukan sebagai gantinya.
Contoh ini menunjukkan cara memblokir koneksi SSH dari alamat IP mana pun.
iptables -A INPUT -p tcp --dport ssh -j DROP
Status Koneksi
Seperti yang kami sebutkan sebelumnya, banyak protokol akan membutuhkan komunikasi dua arah. Misalnya, jika Anda ingin mengizinkan koneksi SSH ke sistem Anda, rantai input dan output akan membutuhkan aturan yang ditambahkan padanya. Tetapi, bagaimana jika Anda hanya ingin SSH yang masuk ke sistem Anda diizinkan? Tidakkah menambahkan aturan ke rantai keluaran juga memungkinkan upaya SSH keluar?
Di situlah status koneksi masuk, yang memberi Anda kemampuan yang Anda perlukan untuk mengizinkan komunikasi dua arah tetapi hanya mengizinkan koneksi satu arah untuk dibuat. Lihat contoh ini, di mana koneksi SSH DARI 10.10.10.10 diizinkan, tetapi koneksi SSH KE 10.10.10.10 tidak. Namun, sistem diizinkan untuk mengirim kembali informasi melalui SSH selama sesi telah dibuat, yang memungkinkan komunikasi SSH antara dua host ini.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT
Menyimpan perubahan
Perubahan yang Anda buat pada aturan iptables Anda akan dihapus saat berikutnya layanan iptables dimulai ulang kecuali Anda menjalankan perintah untuk menyimpan perubahan. Perintah ini dapat berbeda tergantung pada distribusi Anda:
Ubuntu:
sudo /sbin/iptables-save
Topi Merah / CentOS:
/sbin/service iptables save
Atau
/etc/init.d/iptables save
Perintah Lainnya
Buat daftar aturan iptables yang saat ini dikonfigurasi:
iptables -L
Menambahkan -v
opsi akan memberi Anda informasi paket dan byte, dan menambahkan -n
akan mencantumkan semuanya secara numerik. Dengan kata lain - nama host, protokol, dan jaringan dicantumkan sebagai angka.
Untuk menghapus semua aturan yang saat ini dikonfigurasi, Anda dapat mengeluarkan perintah flush.
iptables -F