Product SiteDocumentation Site

14.2. Firewall atau Penyaringan Paket

A firewall is a filtering network gateway and is only effective on packets that must go through it. Therefore, it can only be effective when going through the firewall is the only route for these packets.
The lack of a standard configuration (and the “process, not product” motto) explains the lack of a turn-key solution. There are, however, tools that make it simpler to configure the netfilter firewall, with a graphical representation of the filtering rules. fwbuilder is undoubtedly among the best of them.
The Linux kernel embeds the netfilter firewall. It can be controlled from user space with the iptables and ip6tables commands. The difference between these two commands is that the former acts on the IPv4 network, whereas the latter acts on IPv6. Since both network protocol stacks will probably be around for many years, both tools will need to be used in parallel.

14.2.1. Perilaku Netfilter

netfilter memakai empat tabel berbeda yang menyimpan aturan-aturan yang mengatur tiga jenis operasi pada paket:
  • filter menyangkut aturan penyaringan (menerima, menolak, atau mengabaikan suatu paket);
  • nat menyangkut penerjemahan alamat dan port sumber atau tujuan dari paket-paket;
  • mangle menyangkut perubahan-perubahan lain ke paket-paket IP (termasuk ToS — Type of Service — ruas dan opsi);
  • raw mengizinkan modifikasi manual lain pada paket-paket sebelum mereka mencapai sistem pelacakan koneksi.
Each table contains lists of rules called chains. The firewall uses standard chains to handle packets based on predefined circumstances. The administrator can create other chains, which will only be used when referred to by one of the standard chains (either directly or indirectly).
Tabel filter memiliki tiga rantai standar:
  • INPUT: menyangkut paket-paket yang tujuannya adalah firewall itu sendiri;
  • OUTPUT: menyangkut paket-paket yang dipancarkan oleh firewall;
  • FORWARD: menyangkut paket-paket yang transit melalui firewall (yang bukan sumber atau tujuan mereka).
Tabel nat juga memiliki tiga rantai standar:
  • PREROUTING: untuk mengubah paket segera setelah mereka tiba;
  • POSTROUTING: untuk mengubah paket-paket ketika mereka siap melanjutkan perjalanan;
  • OUTPUT: untuk mengubah paket-paket yang dibuat oleh firewall itu sendiri.
Bagaimana rantai netfilter dipanggil

Gambar 14.1. Bagaimana rantai netfilter dipanggil

Each chain is a list of rules; each rule is a set of conditions and an action to execute when the conditions are met. When processing a packet, the firewall scans the appropriate chain, one rule after another; when the conditions for one rule are met, it “jumps” (hence the -j option in the commands) to the specified action to continue processing. The most common behaviors are standardized, and dedicated actions exist for them. Taking one of these standard actions interrupts the processing of the chain, since the packet's fate is already sealed (barring an exception mentioned below):
  • ACCEPT: mengizinkan paket melanjutkan perjalanannya;
  • REJECT: menolak paket dengan paket galat ICMP (opsi --reject-with tipe ke iptables mengizinkan memilih tipe galat);
  • DROP: hapus (abaikan) paket;
  • LOG: mencatat log (melalui syslog) suatu pesa dengan keterangan atas paket; perhatikan bahwa aksi ini tidak mengiterupsi pemrosesan, dan eksekusi dari rantai berlanjut pada aturan berikutnya, sehingga untuk mencatat log paket yang ditolak memerlukan aturan LOG dan REJECT/DROP;
  • ULOG: mencatat log pesan melalui ulogd, yang bisa diadaptasi lebih baik dan lebih efisien daripada syslogd untuk menangani banyak pesan; perhatikan bahwa aksi ini, seperti LOG, juga kembali memroses ke aturan selanjutnya dalan rantai pemanggil;
  • nama_rantai: melompat ke rantai yang diberikan dan mengevaluasi aturan-aturannya;
  • RETURN: menginterupsi pemrosesan dari rantai saat ini, dan kembali ke rantai pemanggil; dalam hal rantai saat ini adalah suatu rantai standar, tidak ada rantai pemanggil, sehingga aksi baku (didefinisikan dengan opsi -P ke iptables) dieksekusi sebagai pengganti;
  • SNAT (hanya dalam tabel nat): menerapkan NAT Sumber (opsi tambahan menjelaskan perubahan eksak yang akan diterapkan);
  • DNAT (hanya dalam tabel nat): menerapkan NAT Tujuan (opsi tambahan menjelaskan perubahan eksak apa yang akan diterapkan);
  • MASQUERADE (hanya dalam tabel nat): menerapkan masquerading (suatu kasus khusus dari NAT Sumber);
  • REDIRECT (hanya dalam tabel nat): mengalihkan suatu paket ke port lain firewall itu sendiri; ini dapat dipakai untuk menyiapkan satu proksi web transparan yang bekerja tanpa konfigurasi pada sisi klien, karena klien mengira dia menyambung ke penerima padahal komunikasi sebenarnya melalui proksi.
Aksi-aksi lain, terutama yang menyangkut tabel mangle, di luar cakupan dari teks ini. iptables(8) dan ip6tables(8) mempunyai daftar yang komprehensif.

14.2.2. Sintaks dari iptables dan ip6tables

Perintah iptables dan ip6tables mengizinkan manipulasi tabel, rantai, dan aturan. Opsi -t tabel mengindikasikan tabel mana tempat beroperasi (bakunya, filter).

14.2.2.1. Perintah

Opsi -N chain membuat sebuah rantai baru. -X rantai menghapus suatu rantai yang kosong dan tidak dipakai. -A rantai aturan menambahkan suatu aturan di ujung rantai yang diberikan. Opsi -I rantai no_aturan aturan menyisipkan suatu aturan sebelum aturan nomor no_aturan. Opsi -D rantai no_aturan (atau -D rantai aturan) menghapus suatu aturan dalam sebuah ranti, sintaks pertama mengidentifikasi aturan yang akan dihapus berdasarkan nomornya, sedangkan yang belakangan mengidentifikasi menurut isinya. Opsi -F rantai menggelontor suatu rantai (menghapus semua aturannya); bila tidak ada rantai yang disebutkan, semua rantai dalam tabel dihapus. Opsi -L rantai menampilkan daftar aturan dalam suatu rantai. Akhirnya, opsi -P rantai aksi menentukan aksi baku, atau "kebijakan", bagi suatu rantai yang diberikan; perhatikan bahwa hanya rantai standar yang bisa memiliki kebijakan seperti itu.

14.2.2.2. Aturan

Setiap aturan dinyatakan sebagai kondisi -j aksiopsi_aksi. Bila beberapa kondisi diuraikan dalam aturan yang sama, maka kriteria adana konjungsi (and lojik) dan kondisi-kondisi, yang paling kurang membatasi daripada setiap kondisi individual.
Persyaratan -p protokol dicocokkan dengan field protokol dari paket IP. Nilai-nilai paling umum adalah tcp, udp, icmp, dan icmpv6. Memberi awalan tanda seru ke syarat menegasi kondisi, yang kemudian menjadi kecocokan atas "sebarang paket dengan protokol yang berbeda dengan yang dinyatakan". Mekanisme negasi ini tidak spesifik ke opsi -p dan juga dapat diterapkan ke syarat-syarat lain.
Syarat -salamat atau -s jaringan/mask mencocokkan alamat sumber paket. Sedangkan -d alamat atau -d jaringan/mask mencocokkan alamat tujuan.
Syarat -i antarmuka memilih paket-paket yang datang dari antarmuka jaringan tertentu. -o antarmuka memilih paket-paket yang akan keluar pada antarmuka tertentu.
There are more specific conditions, depending on the generic conditions described above. For instance, the -p tcp condition can be complemented with conditions on the TCP ports, with clauses such as --source-port port and --destination-port port.
The --state state condition matches the state of a packet in a connection (this requires the ipt_conntrack kernel module, for connection tracking). The NEW state describes a packet starting a new connection; ESTABLISHED matches packets belonging to an already existing connection, and RELATED matches packets initiating a new connection related to an existing one (which is useful for the ftp-data connections in the “active” mode of the FTP protocol).
The previous section lists available actions, but not their respective options. The LOG action, for instance, has the following options:
  • --log-level, with default value warning, indicates the syslog severity level;
  • --log-prefix allows specifying a text prefix to differentiate between logged messages;
  • --log-tcp-sequence, --log-tcp-options and --log-ip-options indicate extra data to be integrated into the message: respectively, the TCP sequence number, TCP options, and IP options.
The DNAT action provides the --to-destination address:port option to indicate the new destination IP address and/or port. Similarly, SNAT provides --to-source address:port to indicate the new source IP address and/or port.
Aksi PENGALIHAN (hanya tersedia jika NAT tersedia ) menyajikan --to-ports port(s) pilihn untuk mengindikasi port, atau jangkauan port, dimana paket harusnya dialihkan.

14.2.3. Membuat Aturan

Each rule creation requires one invocation of iptables/ip6tables. Typing these commands manually can be tedious, so the calls are usually stored in a script so that the same configuration is set up automatically every time the machine boots. This script can be written by hand, but it can also be interesting to prepare it with a high-level tool such as fwbuilder.
# apt install fwbuilder
Prinsipnya sederhana. Dalam langkah pertama, kita perlu menjelaskan semua elemen yang akan terlibat dalam aturan yang sebenarnya:
  • firewall itu sendiri, dengan antarmuka jaringannya;
  • jaringan, dengan rentang IP mereka yang sesuai;
  • server;
  • port milik layanan yang diwadahi server.
The rules are then created with simple drag-and-drop actions on the objects. A few contextual menus can change the condition (negating it, for instance). Then the action needs to be chosen and configured.
As far as IPv6 is concerned, one can either create two distinct rulesets for IPv4 and IPv6, or create only one and let fwbuilder translate the rules according to the addresses assigned to the objects.
Jendela utama Fwbuilder

Gambar 14.2. Jendela utama Fwbuilder

fwbuilder kemudian dapat menghasilkan skrip konfigurasi firewall sesuai dengan aturan yang telah ditentukan. Arsitektur modular memberi kemampuan untuk menghasilkan skrip-skrip yang menarget sistem-sistem yang berbeda (iptables untuk Linux, ipf untuk FreeBSD, dan pf untuk OpenBSD).

14.2.4. Menginstal Aturan Pada Setiap Boot

In other cases, the recommended way is to register the configuration script in an up directive of the /etc/network/interfaces file. In the following example, the script is stored under /usr/local/etc/arrakis.fw.

Contoh 14.1. interfaces file calling firewall script

auto eth0
iface eth0 inet static
    address 192.168.0.1
    network 192.168.0.0
    netmask 255.255.255.0
    broadcast 192.168.0.255
    up /usr/local/etc/arrakis.fw
This obviously assumes that you are using ifupdown to configure the network interfaces. If you are using something else (like NetworkManager or systemd-networkd), then refer to their respective documentation to find out ways to execute a script after the interface has been brought up.