Panduan Permulaan untuk iptables, Firewall Linux
Iptables adalah utiliti firewall yang sangat fleksibel yang dibina untuk sistem operasi Linux. Sama ada anda geek Linux pemula atau pentadbir sistem, mungkin ada beberapa cara agar iptables dapat digunakan dengan baik untuk anda. Baca terus kerana kami menunjukkan kepada anda cara mengkonfigurasi firewall Linux yang paling serba boleh.
Foto oleh ezioman .
Mengenai iptables
iptables adalah utiliti firewall baris perintah yang menggunakan rantai dasar untuk membenarkan atau menyekat lalu lintas. Apabila sambungan cuba memantapkan dirinya di sistem anda, iptables mencari peraturan dalam senarai yang sesuai dengannya. Sekiranya tidak menjumpainya, ia beralih ke tindakan lalai.
iptables hampir selalu dipasang di mana-mana edaran Linux. Untuk mengemas kini / memasangnya, ambil semula pakej iptables:
sudo apt-get install iptables
Terdapat alternatif GUI untuk iptables seperti Firestarter, tetapi iptables tidak begitu sukar setelah anda mempunyai beberapa perintah. Anda ingin sangat berhati-hati ketika mengkonfigurasi peraturan iptables, terutamanya jika anda menggunakan SSH ke pelayan, kerana satu perintah yang salah dapat mengunci anda secara kekal sehingga terpasang secara manual di mesin fizikal.
Jenis Rantai
iptables menggunakan tiga rantai yang berbeza: input, forward, dan output.
Input - Rantai ini digunakan untuk mengawal tingkah laku untuk sambungan masuk. Sebagai contoh, jika pengguna cuba memasukkan SSH ke dalam PC / pelayan anda, iptables akan berusaha untuk memadankan alamat IP dan port dengan peraturan dalam rantai input.
Maju - Rantai ini digunakan untuk sambungan masuk yang sebenarnya tidak dihantar secara tempatan. Fikirkan penghala - data selalu dihantar kepadanya tetapi jarang benar-benar ditujukan untuk penghala itu sendiri; data hanya dihantar ke sasarannya. Kecuali anda melakukan semacam routing, NATing, atau sesuatu yang lain pada sistem anda yang memerlukan pemajuan, anda bahkan tidak akan menggunakan rangkaian ini.
Terdapat satu kaedah pasti untuk memeriksa sama ada sistem anda menggunakan atau memerlukan rantai hadapan.
iptables -L -v
Tangkapan skrin di atas adalah pelayan yang berjalan selama beberapa minggu dan tidak mempunyai sekatan pada sambungan masuk atau keluar. Seperti yang anda lihat, rantaian input telah memproses 11GB paket dan rantai output telah memproses 17GB. Sebaliknya, rantai ke depan tidak perlu memproses satu paket. Ini kerana pelayan tidak melakukan apa-apa pemajuan atau digunakan sebagai peranti lulus.
Keluaran - Rantai ini digunakan untuk sambungan keluar. Sebagai contoh, jika anda cuba melakukan ping howtogeek.com, iptables akan memeriksa rantaian keluarannya untuk melihat apa peraturan mengenai ping dan howtogeek.com sebelum membuat keputusan untuk membenarkan atau menolak percubaan sambungan.
Peringatan
Walaupun melakukan ping host luaran sepertinya sesuatu yang hanya perlu melintasi rantai output, ingatlah bahawa untuk mengembalikan data, rantai input akan digunakan juga. Semasa menggunakan iptables untuk mengunci sistem anda, ingatlah bahawa banyak protokol akan memerlukan komunikasi dua arah, jadi rantai input dan output perlu dikonfigurasi dengan betul. SSH adalah protokol biasa yang dilupakan oleh orang di kedua-dua rantai tersebut.
Kelakuan Lalai Rantaian Dasar
Sebelum masuk dan mengkonfigurasi peraturan tertentu, anda harus memutuskan apa yang anda mahukan tingkah laku lalai dari ketiga rantai tersebut. Dengan kata lain, apa yang anda mahu iptables lakukan jika sambungannya tidak sesuai dengan peraturan yang ada?
Untuk melihat apa rantai polisi anda yang saat ini dikonfigurasi untuk dilakukan dengan lalu lintas yang tidak sepadan, jalankan iptables -L
perintah.
Seperti yang anda lihat, kami juga menggunakan perintah grep untuk memberi kami output yang lebih bersih. Dalam tangkapan skrin itu, rantai kami kini disangka menerima lalu lintas.
Lebih banyak kali daripada tidak, anda mahu sistem anda menerima sambungan secara lalai. Kecuali jika anda telah mengubah peraturan rantai dasar sebelumnya, tetapan ini harus dikonfigurasikan. Bagaimanapun, berikut adalah arahan untuk menerima sambungan secara lalai:
iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT
Dengan menetapkan peraturan penerimaan, Anda kemudian dapat menggunakan iptables untuk menolak alamat IP atau nombor port tertentu, sambil terus menerima semua sambungan lain. Kami akan sampai ke perintah tersebut dalam satu minit.
Sekiranya anda lebih suka menolak semua sambungan dan menentukan secara manual mana yang hendak anda izinkan untuk disambungkan, anda harus menukar dasar lalai rantai anda untuk digugurkan. Melakukan ini mungkin hanya berguna untuk pelayan yang mengandungi maklumat sensitif dan hanya mempunyai alamat IP yang sama disambungkan ke mereka.
iptables --policy INPUT DROP
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
Respons khusus sambungan
Dengan dasar rantai lalai anda dikonfigurasi, anda boleh mula menambahkan peraturan ke iptables sehingga tahu apa yang harus dilakukan ketika menghadapi sambungan dari atau ke alamat IP atau port tertentu. Dalam panduan ini, kita akan membahas tiga "respons" yang paling asas dan biasa digunakan.
Terima - Benarkan sambungan.
Putus - Putus hubungan, bertindak seperti yang tidak pernah berlaku. Ini terbaik jika anda tidak mahu sumber menyedari bahawa sistem anda ada.
Tolak - Jangan benarkan sambungan, tetapi hantar ralat. Ini terbaik jika anda tidak mahu sumber tertentu menyambung ke sistem anda, tetapi anda mahu mereka tahu bahawa firewall anda menyekatnya.
Cara terbaik untuk menunjukkan perbezaan antara ketiga peraturan ini adalah dengan menunjukkan seperti apa ketika PC cuba melakukan ping mesin Linux dengan iptables yang dikonfigurasi untuk setiap tetapan ini.
Membolehkan sambungan:
Putus sambungan:
Menolak sambungan:
Membolehkan atau Menyekat Sambungan Khusus
Dengan rantai polisi anda dikonfigurasi, anda kini dapat mengkonfigurasi iptables untuk membenarkan atau menyekat alamat, julat alamat, dan port tertentu. Dalam contoh ini, kami akan menetapkan sambungannya DROP
, tetapi anda boleh menukarnya ke ACCEPT
atau REJECT
, bergantung pada keperluan anda dan bagaimana anda mengkonfigurasi rantai polisi anda.
Catatan: Dalam contoh ini, kami akan menggunakan iptables -A
untuk menambahkan peraturan ke rantai yang ada. iptables bermula di bahagian atas senarai dan melalui setiap peraturan sehingga menjumpai peraturan yang sesuai. Sekiranya anda perlu memasukkan peraturan di atas yang lain, anda boleh menggunakan iptables -I [chain] [number]
untuk menentukan nombor yang seharusnya ada dalam senarai.
Sambungan dari satu alamat IP
Contoh ini menunjukkan cara menyekat semua sambungan dari alamat IP 10.10.10.10.
iptables -A INPUT -s 10.10.10.10 -j DROP
Sambungan dari pelbagai alamat IP
Contoh ini menunjukkan cara menyekat semua alamat IP dalam julat rangkaian 10.10.10.0/24. Anda boleh menggunakan nota garis miring atau garis miring standard untuk menentukan julat 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
Sambungan ke port tertentu
Contoh ini menunjukkan cara menyekat sambungan SSH dari 10.10.10.10.
iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP
Anda boleh mengganti "ssh" dengan sebarang protokol atau nombor port. Yang -p tcp
sebahagian daripada kod memberitahu iptables apa jenis sambungan kegunaan protokol. Sekiranya anda menyekat protokol yang menggunakan UDP dan bukan TCP, maka -p udp
diperlukan sebagai gantinya.
Contoh ini menunjukkan cara menyekat sambungan SSH dari mana-mana alamat IP.
iptables -A INPUT -p tcp --dport ssh -j DROP
Negeri Sambungan
Seperti yang telah kami sebutkan sebelumnya, banyak protokol memerlukan komunikasi dua arah. Sebagai contoh, jika anda ingin membenarkan sambungan SSH ke sistem anda, rantai input dan output memerlukan peraturan yang ditambahkan pada sistem tersebut. Tetapi, bagaimana jika anda hanya mahu SSH masuk ke dalam sistem anda diizinkan? Tidak akan menambahkan peraturan ke rantai output juga membenarkan percubaan SSH keluar?
Di situlah keadaan sambungan masuk, yang memberi anda kemampuan yang anda perlukan untuk membenarkan komunikasi dua hala tetapi hanya membenarkan sambungan sehala dibuat. Lihat contoh ini, di mana sambungan SSH DARI 10.10.10.10 dibenarkan, tetapi sambungan SSH KE 10.10.10.10 tidak dibenarkan. Walau bagaimanapun, sistem ini dibenarkan untuk menghantar kembali maklumat melalui SSH selagi sesi tersebut telah dibuat, yang memungkinkan komunikasi SSH antara kedua-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 peraturan iptables akan dibatalkan pada masa perkhidmatan iptables dimulakan semula melainkan anda menjalankan perintah untuk menyimpan perubahan. Perintah ini boleh berbeza bergantung pada sebaran anda:
Ubuntu:
sudo /sbin/iptables-save
Topi Merah / CentOS:
/sbin/service iptables save
Atau
/etc/init.d/iptables save
Perintah lain
Senaraikan peraturan iptables yang dikonfigurasi sekarang:
iptables -L
Menambah -v
pilihan akan memberi anda maklumat paket dan bait, dan menambahkan -n
akan menyenaraikan semuanya secara berangka. Dengan kata lain - nama host, protokol, dan rangkaian disenaraikan sebagai nombor.
Untuk menghapus semua peraturan yang sedang dikonfigurasi, anda boleh mengeluarkan perintah flush.
iptables -F