Cara Mengatur Firewall Iptables untuk Mengaktifkan Akses Jarak Jauh ke Layanan di Linux - Bagian 8


Memperkenalkan Program Sertifikasi Linux Foundation

Anda akan ingat dari Bagian 1 – Tentang Iptables dalam seri LFCE (Linux Foundation Certified Engineer) ini yang kami berikan penjelasan dasar tentang apa itu firewall: mekanisme untuk mengelola paket masuk dan keluar jaringan. Yang kami maksud dengan “mengelola” adalah:

  1. Untuk mengizinkan atau mencegah paket tertentu masuk atau keluar dari jaringan kami.
  2. Untuk meneruskan paket lain dari satu titik jaringan ke titik lainnya.

berdasarkan kriteria yang telah ditentukan.

Pada artikel ini kita akan membahas cara mengimplementasikan pemfilteran paket dasar dan cara mengkonfigurasi firewall dengan iptables, frontend ke netfilter, yang merupakan modul kernel asli yang digunakan untuk firewall.

Harap dicatat bahwa firewall adalah subjek yang luas dan artikel ini tidak dimaksudkan sebagai panduan komprehensif untuk memahami semua hal yang perlu diketahui tentang firewall, melainkan sebagai titik awal untuk mempelajari topik ini lebih dalam. Namun, kita akan meninjau kembali subjek ini di Bagian 10 dari seri ini ketika kita menjelajahi beberapa kasus penggunaan spesifik firewall di Linux.

Anda dapat membayangkan firewall sebagai bandara internasional tempat pesawat penumpang datang dan pergi hampir 24/7. Berdasarkan sejumlah kondisi, seperti validitas paspor seseorang, atau negara asalnya (untuk menyebutkan beberapa contoh), ia mungkin, atau mungkin tidak, diizinkan masuk atau meninggalkan negara tertentu.

Pada saat yang sama, petugas bandara dapat menginstruksikan masyarakat untuk berpindah dari satu tempat di bandara ke tempat lain jika diperlukan, misalnya saat harus melalui Pelayanan Bea Cukai.

Kita mungkin menemukan analogi bandara berguna selama sisa tutorial ini. Ingatlah hubungan berikut saat kita melanjutkan:

  1. Orang=Paket
  2. Firewall=Bandara
  3. Negara #1=Jaringan #1
  4. Negara #2=Jaringan #2
  5. Peraturan bandara yang ditegakkan oleh petugas=aturan firewall

Iptables – Dasar-dasarnya

Pada tingkat rendah, kernel sendirilah yang “memutuskan ” apa yang harus dilakukan dengan paket berdasarkan aturan yang dikelompokkan dalam rantai, atau kalimat. Rantai ini menentukan tindakan apa yang harus diambil ketika sebuah paket cocok dengan kriteria yang ditentukan olehnya.

Tindakan pertama yang diambil oleh iptables adalah memutuskan apa yang harus dilakukan dengan sebuah paket:

  1. Terima (biarkan masuk ke jaringan kami)?
  2. Tolak (mencegahnya mengakses jaringan kita)?
  3. Teruskan (ke rantai lain)?

Kalau-kalau Anda bertanya-tanya mengapa alat ini disebut iptables, itu karena rantai ini disusun dalam tabel, dengan tabel filter menjadi yang paling dikenal dan paling banyak digunakan. digunakan untuk mengimplementasikan pemfilteran paket dengan tiga rantai defaultnya:

1. Rantai INPUT menangani paket yang masuk ke jaringan, yang ditujukan untuk program lokal.

2. Rantai OUTPUT digunakan untuk menganalisis paket yang berasal dari jaringan lokal, yang akan dikirim ke luar.

3. Rantai FORWARD memproses paket yang harus diteruskan ke tujuan lain (seperti dalam kasus router).

Untuk masing-masing rantai ini terdapat kebijakan default, yang menentukan apa yang harus dilakukan secara default ketika paket tidak cocok dengan aturan apa pun dalam rantai tersebut. Anda dapat melihat aturan yang dibuat untuk setiap rantai dan kebijakan default dengan menjalankan perintah berikut:

iptables -L

Kebijakan yang tersedia adalah sebagai berikut:

  1. TERIMA → membiarkan paket lewat. Paket apa pun yang tidak sesuai dengan aturan apa pun dalam rantai diizinkan masuk ke jaringan.
  2. DROP → menjatuhkan paket secara diam-diam. Paket apa pun yang tidak sesuai dengan aturan apa pun dalam rantai akan dicegah memasuki jaringan.
  3. REJECT → menolak paket dan mengembalikan pesan informatif. Kebijakan ini khususnya tidak berfungsi sebagai kebijakan default. Sebaliknya, ini dimaksudkan untuk melengkapi aturan pemfilteran paket.

Saat memutuskan kebijakan mana yang akan Anda terapkan, Anda perlu mempertimbangkan pro dan kontra dari setiap pendekatan seperti yang dijelaskan di atas – perlu diingat bahwa tidak ada satu pendekatan yang bisa diterapkan secara universal. -semua solusi.

Menambahkan Aturan

Untuk menambahkan aturan ke firewall, jalankan perintah iptables sebagai berikut:

iptables -A chain_name criteria -j target

Di mana,

  1. -A adalah singkatan dari Append (menambahkan aturan saat ini ke akhir rantai).
  2. nama_rantai adalah INPUT, OUTPUT, atau FORWARD.
  3. target adalah tindakan, atau kebijakan, yang diterapkan dalam kasus ini (ACCEPT, REJECT, atau DROP).
  4. kriteria adalah serangkaian kondisi yang menjadi dasar pemeriksaan paket. Ini terdiri dari setidaknya satu (kemungkinan besar lebih) dari bendera berikut. Opsi di dalam tanda kurung, dipisahkan oleh garis vertikal, setara satu sama lain. Sisanya mewakili sakelar opsional:
[--protocol | -p] protocol: specifies the protocol involved in a rule.
[--source-port | -sport] port:[port]: defines the port (or range of ports) where the packet originated.
[--destination-port | -dport] port:[port]: defines the port (or range of ports) to which the packet is destined.
[--source | -s] address[/mask]: represents the source address or network/mask.
[--destination | -d] address[/mask]: represents the destination address or network/mask.
[--state] state (preceded by -m state): manage packets depending on whether they are part of a state connection, where state can be NEW, ESTABLISHED, RELATED, or INVALID.
[--in-interface | -i] interface: specifies the input interface of the packet.
[--out-interface | -o] interface: the output interface.
[--jump | -j] target: what to do when the packet matches the rule.

Lingkungan Pengujian Kami

Mari kita rekatkan semua itu dalam 3 contoh klasik menggunakan lingkungan pengujian berikut untuk dua contoh pertama:

Firewall: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
Source: CentOS 7 
Hostname: dev1.gabrielcanepa.com
IP Address: 192.168.0.17

Dan ini untuk contoh terakhir

NFSv4 server and firewall: Debian Wheezy 7.5 
Hostname: debian
IP Address: 192.168.0.10
Source: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
CONTOH 1: Menganalisis perbedaan antara kebijakan DROP dan REJECT

Kami akan menentukan kebijakan DROP terlebih dahulu untuk memasukkan ping ke firewall kami. Artinya, paket icmp akan dikirimkan secara diam-diam.

ping -c 3 192.168.0.15
iptables -A INPUT --protocol icmp --in-interface eth0 -j DROP

Sebelum melanjutkan ke bagian REJECT, kita akan menghapus semua aturan dari rantai INPUT untuk memastikan paket kita akan diuji dengan aturan baru ini:

iptables -F INPUT
iptables -A INPUT --protocol icmp --in-interface eth0 -j REJECT
ping -c 3 192.168.0.15

CONTOH 2: Menonaktifkan/mengaktifkan kembali login ssh dari dev2 ke dev1

Kita akan menangani rantai OUTPUT saat menangani lalu lintas keluar:

iptables -A OUTPUT --protocol tcp --destination-port 22 --out-interface eth0 --jump REJECT

CONTOH 3: Mengizinkan/mencegah klien NFS (dari 192.168.0.0/24) memasang share NFS4

Jalankan perintah berikut di server/firewall NFSv4 untuk menutup port 2049 dan 111 untuk semua jenis lalu lintas:

iptables -F
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j REJECT

Sekarang mari kita buka port tersebut dan lihat apa yang terjadi.

iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j ACCEPT

Seperti yang Anda lihat, kami dapat memasang share NFSv4 setelah membuka lalu lintas.

Aturan Memasukkan, Menambahkan dan Menghapus

Pada contoh sebelumnya kami menunjukkan cara menambahkan aturan ke rantai INPUT dan OUTPUT. Jika kita ingin memasukkannya pada posisi yang telah ditentukan, kita harus menggunakan saklar -I (huruf besar i).

Anda harus ingat bahwa aturan akan dievaluasi satu demi satu, dan evaluasi berhenti (atau melompat) ketika kebijakan DROP atau ACCEPT cocok. Oleh karena itu, Anda mungkin perlu menaikkan atau menurunkan aturan dalam daftar rantai sesuai kebutuhan.

Kami akan menggunakan contoh sepele untuk menunjukkan hal ini:

Mari kita tempatkan aturan berikut,

iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT

di posisi 2) dalam rantai INPUT (sehingga memindahkan #2 sebelumnya ke #3)

Dengan menggunakan pengaturan di atas, lalu lintas akan diperiksa untuk melihat apakah lalu lintas diarahkan ke port 80 sebelum memeriksa port 2049.

Alternatifnya, Anda dapat menghapus aturan dan mengubah target aturan yang tersisa menjadi REJECT (menggunakan tombol -R):

iptables -D INPUT 1
iptables -nL -v --line-numbers
iptables -R INPUT 2 -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
iptables -R INPUT 1 -p tcp --dport 80 -j REJECT

Terakhir, namun tidak kalah pentingnya, Anda harus ingat bahwa agar aturan firewall tetap ada, Anda perlu menyimpannya ke file dan kemudian memulihkannya secara otomatis saat boot (menggunakan metode pilihan Anda atau metode yang Anda inginkan). tersedia untuk distribusi Anda).

Menyimpan aturan firewall:

iptables-save > /etc/iptables/rules.v4		[On Ubuntu]
iptables-save > /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

Memulihkan aturan:

iptables-restore < /etc/iptables/rules.v4		[On Ubuntu]
iptables-restore < /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

Di sini kita dapat melihat prosedur serupa (menyimpan dan memulihkan aturan firewall secara manual) menggunakan file tiruan bernama iptables.dump dan bukan file default seperti yang ditunjukkan di atas.

iptables-save > iptables.dump

Untuk membuat perubahan ini tetap ada di seluruh boot:

Ubuntu: Instal paket iptables-persistent, yang akan memuat aturan yang disimpan dalam file /etc/iptables/rules.v4.

apt-get install iptables-persistent

CentOS: Tambahkan 2 baris berikut ke file /etc/sysconfig/iptables-config.

IPTABLES_SAVE_ON_STOP="yes"
IPTABLES_SAVE_ON_RESTART="yes"

OpenSUSE: Cantumkan port, protokol, alamat, dan sebagainya yang diperbolehkan (dipisahkan dengan koma) di /etc/sysconfig/SuSEfirewall2.

Untuk informasi lebih lanjut lihat file itu sendiri, yang banyak dikomentari.

Kesimpulan

Contoh yang diberikan dalam artikel ini, meskipun tidak mencakup semua fitur iptables, bertujuan untuk mengilustrasikan cara mengaktifkan dan menonaktifkan lalu lintas masuk atau keluar.

Bagi Anda penggemar firewall, perlu diingat bahwa kami akan membahas kembali topik ini dengan penerapan yang lebih spesifik di Bagian 10 dari seri LFCE ini.

Jangan ragu untuk memberi tahu saya jika Anda memiliki pertanyaan atau komentar.