foto oleh ezioman.
Tentang iptables
iptables adalah utilitas firewall baris perintah yang menggunakan rantai kebijakan untuk memungkinkan atau memblokir lalu lintas. Ketika koneksi mencoba membangun dirinya sendiri di sistem Anda, iptables mencari aturan dalam daftar untuk mencocokkannya. Jika tidak menemukannya, ia akan beralih ke tindakan default.
iptables hampir selalu datang pra-instal pada distribusi Linux. Untuk memperbarui / menginstalnya, cukup ambil paket iptables:
sudo apt-get install iptables
Ada alternatif GUI untuk iptables seperti Firestarter, tetapi iptables tidak terlalu sulit begitu Anda memiliki beberapa perintah. Anda ingin sangat berhati-hati ketika mengonfigurasi aturan iptables, terutama jika Anda SSH masuk ke server, karena satu perintah yang salah dapat secara permanen mengunci Anda sampai secara manual diperbaiki pada mesin fisik.
Jenis Rantai
iptables menggunakan tiga rantai berbeda: masukan, maju, dan keluaran.
Memasukkan - Rantai ini digunakan untuk mengontrol perilaku koneksi masuk. Misalnya, jika pengguna mencoba SSH ke PC / server Anda, iptables akan berusaha mencocokkan alamat IP dan port ke aturan dalam rantai input.
Meneruskan - Rantai ini digunakan untuk koneksi masuk yang sebenarnya tidak dikirim secara lokal. Pikirkan router - data selalu dikirim ke sana tetapi jarang benar-benar ditakdirkan untuk router itu sendiri; data hanya diteruskan ke targetnya. Kecuali Anda melakukan semacam perutean, NATing, atau sesuatu yang lain di sistem Anda yang memerlukan penerusan, Anda bahkan tidak akan menggunakan rantai ini.
Ada satu cara yang pasti untuk memeriksa apakah sistem Anda menggunakan / memerlukan rantai ke depan.
iptables -L -v
Keluaran - Rantai ini digunakan untuk koneksi keluar. Sebagai contoh, jika Anda mencoba melakukan ping howtogeek.com, iptables akan memeriksa rantai outputnya untuk melihat aturan tentang ping dan howtogeek.com sebelum membuat keputusan untuk mengizinkan atau menolak upaya koneksi.
Peringatan itu
Meskipun ping host eksternal tampak seperti sesuatu yang hanya perlu melintasi rantai output, perlu diingat bahwa untuk mengembalikan data, rantai input akan digunakan juga. Saat menggunakan iptables untuk mengunci sistem Anda, ingat bahwa banyak protokol akan memerlukan komunikasi dua arah, sehingga rantai input dan output perlu dikonfigurasi dengan benar. SSH adalah protokol umum yang orang lupa untuk izinkan pada kedua rantai.
Perilaku Default Rantai Kebijakan
Sebelum masuk dan konfigurasikan aturan khusus, Anda akan ingin memutuskan perilaku default dari ketiga rantai yang Anda inginkan. Dengan kata lain, apa yang Anda inginkan iptables lakukan jika koneksi tidak sesuai dengan aturan yang ada?
Untuk melihat apa rantai kebijakan Anda saat ini dikonfigurasi untuk dilakukan dengan lalu lintas yang tak tertandingi, jalankan
iptables -L
perintah.
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 caranya, inilah perintah untuk menerima koneksi secara default:
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
Secara default ke aturan accept, Anda dapat menggunakan iptables untuk menolak alamat IP atau nomor port tertentu, sambil terus menerima semua koneksi lainnya. Kita akan sampai ke perintah itu dalam satu menit.
Jika Anda lebih suka menolak semua koneksi dan menentukan secara manual mana yang ingin Anda izinkan untuk terhubung, Anda harus mengubah kebijakan default dari rantai Anda untuk turun. Melakukan hal 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 tahu apa yang harus dilakukan ketika menemukan koneksi dari atau ke alamat IP atau port tertentu. Dalam panduan ini, kami akan membahas tiga "jawaban" yang paling dasar dan umum digunakan.
Menerima - Biarkan koneksi.
Penurunan - Jatuhkan koneksi, bertindak seperti itu tidak pernah terjadi. Ini terbaik jika Anda tidak ingin sumbernya menyadari sistem Anda ada.
Menolak - Jangan izinkan koneksi, tetapi kirim kembali kesalahan. Ini terbaik 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 untuk menunjukkan apa yang tampak seperti ketika sebuah PC mencoba untuk melakukan ping pada mesin Linux dengan iptables yang dikonfigurasi untuk masing-masing pengaturan ini.
Mengizinkan koneksi:
Membiarkan atau Memblokir Koneksi Tertentu
Dengan rantai kebijakan Anda dikonfigurasi, Anda sekarang dapat mengkonfigurasi iptables untuk mengizinkan atau memblokir alamat tertentu, rentang alamat, dan port. Dalam contoh ini, kami akan menetapkan koneksi ke
DROP
tetapi Anda dapat mengubahnya menjadi
ACCEPT
atau
REJECT
tergantung pada kebutuhan Anda dan bagaimana Anda mengatur rantai kebijakan Anda.
Catatan: Dalam contoh ini, kami akan menggunakannya
iptables -A
untuk menambahkan aturan ke rantai yang ada. iptables mulai di bagian atas daftar dan melewati setiap aturan sampai menemukan satu 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 dalam jangkauan jaringan 10.10.10.0/24. Anda dapat menggunakan netmask atau notasi slash standar untuk menentukan kisaran 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. Itu
-p tcp
bagian dari kode memberitahu iptables apa jenis koneksi yang digunakan protokol. Jika Anda memblokir protokol yang menggunakan UDP daripada TCP, lalu
-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
Negara koneksi
Seperti yang telah disebutkan 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 ke mereka. Tetapi, bagaimana jika Anda hanya ingin SSH masuk ke sistem Anda untuk diizinkan? Tidak akan menambahkan aturan ke rantai output juga memungkinkan upaya SSH keluar?
Di situlah letak status koneksi, yang memberi Anda kemampuan yang Anda butuhkan untuk memungkinkan komunikasi dua arah tetapi hanya memungkinkan satu cara koneksi dibentuk. Lihatlah contoh ini, di mana koneksi SSH FROM 10.10.10.10 diizinkan, tetapi koneksi SSH KE 10.10.10.10 tidak diizinkan. Namun, sistem ini diizinkan untuk mengirim kembali informasi melalui SSH selama sesi telah ditetapkan, 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 pada saat berikutnya layanan iptables dijalankan ulang kecuali Anda menjalankan perintah untuk menyimpan perubahan. Perintah ini dapat berbeda tergantung pada distribusi Anda:
Ubuntu:
sudo /sbin/iptables-save
Red Hat / CentOS:
/sbin/service iptables save
Atau
/etc/init.d/iptables save
Perintah lainnya
Daftar aturan iptables yang dikonfigurasi saat ini:
iptables -L
Menambahkan
-v
pilihan akan memberi Anda informasi paket dan byte, dan menambahkan
-n
akan mencantumkan semuanya secara numerik. Dengan kata lain - hostname, protokol, dan jaringan terdaftar sebagai angka.
Untuk menghapus semua aturan yang saat ini dikonfigurasi, Anda dapat mengeluarkan perintah flush.
iptables -F