File yang digunakan untuk menambahkan firewall PREROUTING pengalihan adalah

untuk mengkonfigurasi firewall atau firewall di Linux, kita dapat menggunakan iptables, alat canggih yang sepertinya dilupakan oleh banyak pengguna. Meskipun ada metode lain, seperti ebtables dan arptables untuk memfilter lalu lintas di tingkat tautan, atau Squid di tingkat aplikasi, iptables bisa sangat berguna dalam banyak kasus, menerapkan keamanan yang baik di sistem kami pada tingkat lalu lintas dan pengangkutan bersih .

Kernel Linux mengimplementasikan iptables, bagian yang menangani paket penyaringan dan di artikel ini kami mengajari Anda cara mengonfigurasi dengan cara yang sederhana. Sederhananya, iptables mengidentifikasi informasi apa yang bisa dan tidak bisa masuk, mengisolasi tim Anda dari potensi ancaman. Dan meskipun ada proyek lain seperti Firehol, Firestarter, dll., Banyak dari program firewall ini menggunakan iptables ...

Nah, Mari mulai bekerja, dengan contoh Anda akan memahami segalanya dengan lebih baik (untuk kasus ini perlu memiliki hak istimewa, jadi gunakan sudo di depan perintah atau jadilah root):

Cara umum menggunakan iptables untuk membuat kebijakan filter adalah:

IPTABLES -ARGUMEN I / O ACTION

Dimana -ARGUMENT berada argumen yang akan kami gunakan, biasanya -P untuk menetapkan kebijakan default, meskipun ada yang lain seperti -L untuk melihat kebijakan yang telah kita konfigurasikan, -F untuk menghapus kebijakan yang dibuat, -Z untuk mengatur ulang byte dan penghitung paket, dll. Pilihan lainnya adalah -A untuk menambahkan kebijakan (bukan default), -I untuk menyisipkan aturan pada posisi tertentu, dan -D untuk menghapus aturan tertentu. Juga akan ada argumen lain untuk menunjuk ke -p protokol, –sport source port, –dport untuk port tujuan, -i antarmuka masuk, -o antarmuka keluar, -s alamat IP sumber dan -d alamat IP tujuan.

Selanjutnya I / O akan mewakili jika politik Ini diterapkan ke input INPUT, ke output OUTPUT atau itu adalah pengalihan lalu lintas FORWARD (ada yang lain seperti PREROUTING, POSTROUTING, tetapi kami tidak akan menggunakannya). Akhirnya yang saya sebut ACTION bisa mengambil nilai ACCEPT jika kita terima, TOLAK jika kita tolak atau DROP jika kita hilangkan. Perbedaan antara DROP dan REJECT adalah bahwa ketika sebuah paket ditolak dengan REJECT, mesin yang memulainya akan tahu bahwa itu telah ditolak, tetapi dengan DROP itu bertindak secara diam-diam dan penyerang atau asal tidak akan tahu apa yang telah terjadi, dan tidak akan tahu apakah kita memiliki firewall atau koneksi gagal. Ada juga yang lain seperti LOG, yang mengirimkan tindak lanjut dari syslog ...

Untuk mengubah aturan, kami dapat mengedit file iptables dengan editor teks pilihan kami, nano, gedit, ... atau membuat skrip dengan aturan (jika Anda ingin menimpanya, Anda dapat melakukannya dengan meletakkan # di depan baris sehingga itu diabaikan sebagai komentar) melalui konsol dengan perintah seperti yang akan kami jelaskan di sini. Di Debian dan turunannya Anda juga dapat menggunakan alat iptables-save dan iptables-restore ...

Kebijakan paling ekstrim adalah memblokir semuanya, benar-benar semua lalu lintas, tetapi ini akan membuat kami terisolasi, dengan:

iptables -P INPUT DROP

Untuk menerima semuanya:

iptables -P INPUT ACCEPT

Jika kita menginginkan itu semua lalu lintas keluar dari tim kami diterima:

iptables -P OUTPUT ACEPT

La Tindakan radikal lainnya adalah menghapus semua kebijakan dari iptables dengan:

iptables -F

Mari kita lihat aturan yang lebih konkretBayangkan Anda memiliki server web dan oleh karena itu lalu lintas melalui port 80 harus diizinkan:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Dan jika selain aturan sebelumnya, kami menginginkan tim dengan iptables hanya dapat dilihat oleh komputer di subnet kami dan itu tidak diketahui oleh jaringan eksternal:

iptables -A INPUT -p tcp -s 192.168.30.0/24 --dport 80 -j ACCEPT

Pada baris sebelumnya, yang kami katakan ke iptables adalah menambahkan aturan -A, sehingga input INPUT, dan protokol TCP, melalui port 80, diterima. Sekarang bayangkan Anda menginginkan saya penjelajahan web ditolak untuk mesin lokal yang melewati mesin yang menjalankan iptables:

iptables -t filter -A FORWARD -i eth1 -o eth0 -p tcp --dport 80 DROP

Saya pikir penggunaannya sederhana, dengan mempertimbangkan untuk apa setiap parameter iptables, kita dapat menambahkan aturan sederhana. Anda dapat melakukan semua kombinasi dan aturan yang kami bayangkan ... Untuk tidak mengembangkan diri lebih jauh, cukup tambahkan satu hal lagi, dan jika mesin di-boot ulang, kebijakan yang dibuat akan dihapus. Tabel di-restart dan akan tetap seperti sebelumnya, oleh karena itu, setelah Anda menentukan aturan dengan baik, jika Anda ingin menjadikannya permanen, Anda harus membuatnya diluncurkan dari /etc/rc.local atau jika Anda memiliki Debian atau turunannya gunakan alat yang kami berikan (iptables-save, iptables-restore dan iptables-apply).

Iptables adalah suatu firewall yang memainkan peran penting dalam keamanan jaringan untuk banyak sistem Linux. Walaupun banyak tutorial iptables yang akan mengajarkan Anda cara menciptakan aturan firewall untuk mengamankan server, tutorial berikut ini akan berfokus pada aspek yang berbeda dari manajemen firewall: membuat daftar dan menghapus aturan.

Dalam tutorial ini, kita akan membahas cara melakukan tugas iptables berikut:

  • Membuat daftar aturan
  • Membersihkan Penghitung Bita dan Paket
  • Menghapus aturan
  • Melakukan flush rantai (menghapus semua aturan dalam suatu rantai)
  • Melakukan flush semua rantai dan tabel, menghapus semua rantai, dan menerima semua lalu lintas

Catatan: Ketika bekerja dengan firewall, berhati-hatilah agar jangan sampai Anda mengunci diri sendiri dari server dengan memblokir lalu lintas SSH (porta 22, secara asali). Jika Anda kehilangan akses karena pengaturan firewall, Anda mungkin perlu menghubungkannya melalui konsol di luar jaringan untuk memperbaiki akses Anda.

Prasyarat

Tutorial ini mengasumsikan Anda menggunakan server Linux dengan perintah iptables yang sudah terinstal, dan bahwa pengguna Anda memiliki privilese sudo.

Jika Anda memerlukan bantuan dengan penyiapan awal ini, silakan merujuk ke panduan Penyiapan Server Awal dengan Ubuntu 20.04 dari kami. Juga tersedia untuk Debian dan CentOS

Mari kita lihat cara membuat daftar aturan terlebih dahulu. Ada dua cara berbeda untuk melihat aturan iptables Anda yang sedang aktif: di dalam tabel atau sebagai daftar dari spesifikasi aturan. Kedua metode ini memberikan informasi yang kurang-lebih sama dalam format berbeda.

Untuk membuat daftar dari semua aturan iptables yang aktif menurut spesifikasi, jalankan perintah iptables dengan opsi -S:

Output

-P INPUT DROP -P FORWARD DROP -P OUTPUT ACCEPT -N ICMP -N TCP -N UDP -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate INVALID -j DROP -A INPUT -p udp -m conntrack --ctstate NEW -j UDP -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP -A INPUT -p icmp -m conntrack --ctstate NEW -j ICMP -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable -A INPUT -p tcp -j REJECT --reject-with tcp-reset -A INPUT -j REJECT --reject-with icmp-proto-unreachable -A TCP -p tcp -m tcp --dport 22 -j ACCEPT

Seperti yang Anda lihat, keluarannya terlihat seperti perintah yang digunakan untuk menciptakannya, tanpa perintah iptables yang mendahuluinya. Ini juga akan terlihat mirip dengan berkas konfigurasi aturan iptables, jika Anda pernah menggunakan iptables-persistent atau iptables save.

Membuat Daftar Rantai Spesifik

Jika Anda ingin membatasi keluaran menurut suatu rantai spesifik (INPUT, OUTPUT, TCP, dll.), Anda dapat menentukan nama rantai secara langsung setelah opsi -S. Misalnya, untuk menunjukkan semua spesifikasi aturan dalam rantai TCP, Anda akan menjalankan perintah ini:

Output

-N TCP -A TCP -p tcp -m tcp --dport 22 -j ACCEPT

Sekarang mari kita lihat cara alternatif untuk melihat aturan iptables yang aktif, sebagai tabel aturan.

Membuat Daftar Aturan sebagai Tabel

Membuat daftar aturan iptables dalam bentuk tabel dapat berguna untuk membandingkan aturan-aturan yang berbeda terhadap satu sama lain,

Untuk mendapatkan keluaran dari semua aturan iptables aktif dalam suatu tabel, jalankan perintah iptables dengan opsi -L:

Ini akan memberikan keluaran dari semua aturan saat ini yang diurutkan berdasarkan rantai.

Jika Anda ingin membatasi keluaran menurut suatu rantai tertentu (INPUT, OUTPUT, TCP, dll.), Anda dapat menentukan nama rantai secara langsung setelah opsi -L.

Mari kita lihat contoh dari rantai INPUT:

Output

Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere DROP all -- anywhere anywhere ctstate INVALID UDP udp -- anywhere anywhere ctstate NEW TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW ICMP icmp -- anywhere anywhere ctstate NEW REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable REJECT tcp -- anywhere anywhere reject-with tcp-reset REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable

Baris pertama keluaran mengindikasikan nama rantai (INPUT, dalam kasus ini), yang diikuti oleh kebijakan asali (DROP). Baris selanjutnya terdiri atas tajuk dari setiap kolom di dalam tabel, dan diikuti oleh aturan rantai. Mari kita membahas yang diindikasikan setiap tajuk:

  • target: Jika paket sesuai aturan, maka target menetapkan tindakan yang harus dilakukan dengannya. Sebagai contoh, paket dapat diterima, didrop, dicatat, atau dikirim ke rantai lain untuk dibandingkan terhadap aturan lebih lanjut
  • prot: Protokol, seperti tcp, udp, icmp, atau all
  • opt: Jarang digunakan, kolom ini mengindikasikan opsi IP
  • source: Alamat IP sumber atau subnet lalu lintas, atau anywhere
  • destination: Alamat IP tujuan atau subnet lalu lintas, atau anywhere

Kolom terakhir, yang tidak diberi label, mengindikasikan opsi dari suatu aturan. Yang berarti, bagian apa pun dari aturan yang tidak diindikasikan oleh kolom sebelumnya. Ini dapat berupa apa pun, mulai dari porta sumber dan tujuan hingga kondisi koneksi dari paket.

Menampilkan Hitungan Paket dan Ukuran Agregat

Ketika membuat daftar aturan iptables, dimungkinkan untuk menampilkan jumlah paket, dan ukuran agregat dari paket dalam bita, yang sesuai dengan setiap aturan tertentu. Ini seringkali berguna saat sedang mencoba mendapatkan ide kasar tentang aturan yang sesuai dengan paket. Untuk melakukannya, gunakan opsi -L dan -v secara bersamaan.

Misalnya, mari kita lihat rantai INPUT lagi, dengan opsi -v:

  1. sudo iptables -L INPUT -v

Output

Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 284K 42M ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED 0 0 ACCEPT all -- lo any anywhere anywhere 0 0 DROP all -- any any anywhere anywhere ctstate INVALID 396 63275 UDP udp -- any any anywhere anywhere ctstate NEW 17067 1005K TCP tcp -- any any anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW 2410 154K ICMP icmp -- any any anywhere anywhere ctstate NEW 396 63275 REJECT udp -- any any anywhere anywhere reject-with icmp-port-unreachable 2916 179K REJECT all -- any any anywhere anywhere reject-with icmp-proto-unreachable 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED

Perhatikan bahwa daftar itu sekarang memiliki dua kolom tambahan, pkts dan bytes.

Kini karena Anda telah mengetahui cara membuat daftar aturan firewall aktif dengan berbagai cara, mari kita lihat cara Anda dapat melakukan reset penghitung bita dan paket.

Melakukan Reset Hitungan Paket dan Ukuran Agregat

Jika Anda ingin membersihkan, atau menjadikan nol, penghitung bita dan paket untuk aturan Anda, gunakan opsi -Z. Opsi ini juga melakukan reset jika boot ulang terjadi. Ini berguna jika Anda ingin melihat apakah server Anda menerima lalu lintas baru yang sesuai dengan aturan yang ada.

Untuk membersihkan penghitung semua rantai dan aturan, gunakan opsi -Z itu sendiri:

Untuk membersihkan penghitung semua aturan dalam rantai tertentu, gunakan opsi -Z dan tentukan rantainya. Misalnya, untuk membersihkan penghitung rantai INPUT, jalankan perintah ini:

Jika Anda ingin membersihkan penghitung untuk suatu aturan tertentu, tentukan nama rantai dan nomor aturan. Misalnya, untuk menjadikan penghitung kembali ke nol pada aturan pertama dalam rantai INPUT, jalankan ini:

Karena kini Anda telah mengetahui cara melakukan reset penghitung bita dan paket iptables, mari kita lihat dua metode yang dapat digunakan untuk menghapusnya.

Salah satu cara untuk menghapus aturan iptables adalah dengan spesifikasi aturan. Untuk melakukannya, Anda dapat menjalankan perintah iptables dengan opsi -D yang diikuti oleh spesifikasi aturan. Jika Anda ingin menghapus aturan menggunakan metode ini, Anda dapat menggunakan keluaran dari daftar aturan iptables -S untuk bantuan.

Misalnya, jika Anda ingin menghapus aturan yang mengedrop paket masuk yang tidak valid (-A INPUT -m conntrack --ctstate INVALID -j DROP), Anda dapat menjalankan perintah ini:

  1. sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROP

Perhatikan bahwa opsi -A, yang digunakan untuk mengindikasikan posisi aturan pada waktu pembuatan, harus dikecualikan di sini.

Cara lain untuk menghapus aturan iptables adalah melalui rantai dan nomor barisnya. Untuk menentukan nomor baris aturan, buatlah daftar aturan dalam format tabel dan tambahkan opsi --line-numbers:

  1. sudo iptables -L --line-numbers
[secondary_output Output] Chain INPUT (policy DROP) num target prot opt source destination 1 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED 2 ACCEPT all -- anywhere anywhere 3 DROP all -- anywhere anywhere ctstate INVALID 4 UDP udp -- anywhere anywhere ctstate NEW 5 TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW 6 ICMP icmp -- anywhere anywhere ctstate NEW 7 REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable 8 REJECT tcp -- anywhere anywhere reject-with tcp-reset 9 REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable 10 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED ...

Ini menambahkan nomor baris di setiap baris aturan, yang diindikasikan oleh tajuk num.

Setelah Anda mengetahui aturan yang ingin Anda hapus, perhatikan rantai dan nomor baris dari aturannya. Kemudian, jalankan perintah iptables -D yang diikuti oleh rantai dan nomor raturan.

Misalnya, jika kita ingin menghapus aturan masukan yang mengedrop paket tidak valid, kita dapat melihat bahwa itu adalah aturan 3 dari rantai INPUT. Jadi, kita harus menjalankan perintah ini:

Karena kini Anda telah mengetahui cara menghapus aturan firewall individual, mari kita membahas cara melakukan flush rantai aturan.

Melakukan Flush Rantai

Iptables menawarkan cara untuk menghapus semua aturan dalam suatu rantai, atau melakukan flush suatu rantai. Bagian ini akan mencakup berbagai cara untuk melakukannya.

Catatan: Berhati-hatilah agar tidak mengunci diri sendiri dari server Anda, melalui SSH, dengan melakukan flush rantai menggunakan kebijakan asali dari drop atau deny. Jika Anda melakukannya, Anda mungkin perlu terhubung dengannya melalui konsol untuk memperbaiki akses.

Melakukan Flush Rantai Tunggal

Untuk melakukan flush rantai tertentu, yang akan menghapus semua aturan dalam rantai itu, Anda dapat menggunakan opsi -F, atau padanan kata dari --flush, dan nama dari rantai yang akan dilakukan flush.

Misalnya, untuk menghapus semua aturan dalam rantai INPUT, jalankan perintah ini:

Melakukan Flush Semua Rantai

Untuk melakukan flush semua rantai, yang akan menghapus semua aturan firewall, Anda dapat menggunakan opsi -F, atau padanan kata dari --flush dengan sendirinya:

Melakukan Flush Semua Aturan, Menghapus Semua Rantai, dan Menerima Semua

Bagian ini akan menunjukkan kepada Anda cara melakukan flush semua aturan firewall, tabel, dan rantai, serta mengizinkan semua lalu lintas jaringan.

Catatan: Ini akan secara efektif menonaktifkan firewall Anda. Anda dapat mengikuti bagian ini hanya jika Anda ingin memulai ulang seluruh konfigurasi firewall.

Pertama-tama, tetapkan kebijakan asali untuk setiap rantai bawaan menjadi ACCEPT. Alasan utama melakukan ini adalah untuk memastikan bahwa Anda tidak akan terkunci dari server Anda melalui SSH:

  1. sudo iptables -P INPUT ACCEPT
  2. sudo iptables -P FORWARD ACCEPT
  3. sudo iptables -P OUTPUT ACCEPT

Lalu lakukan flush tabel nat dan mangle, flush semua rantai (-F), dan hapus semua rantai non-asali (-X):

  1. sudo iptables -t nat -F
  2. sudo iptables -t mangle -F
  3. sudo iptables -F
  4. sudo iptables -X

Firewall Anda kini akan mengizinkan semua lalu lintas jaringan. Jika Anda membuat daftar aturan sekarang, Anda tidak akan melihat apa pun, dan hanya tiga rantai asali (INPUT, FORWARD, dan OUTPUT) yang tersisa.

Kesimpulan

Setelah mengikuti tutorial ini, Anda seharusnya memahami cara membuat daftar dan menghapus aturan firewall iptables.

Ingat bahwa setiap perubahan iptables melalui perintah iptables bersifat tidak permanen, dan perlu disimpan agar tetap ada di sepanjang boot ulang server. Ini dibahas dalam bagian Aturan Penyimpanan dari tutorial Aturan Firewall dan Perintah Umum.