Shoreline Firewall, yang lebih dikenal dengan "Shorewall", adalah sebuah tool tingkat tinggi untuk mengkonfigurasi Netfilter. Kita dapat mendeskripsikan kebutuhan firewall/gateway menggunakan masukan satu set file konfigurasi. Shorewall membaca file konfigurasi tersebut dengan bantuan iptables. Shorewall mengkonfigurasi Netfilter untuk menyesuaikan kebutuhan kita. Shorewall dapat digunakan pada suatu sistem deticated, gateway/router/server multifungsi atau pada standalone linux.
Shorewall tidak menggunakan mode kompatibel ipchain Netfilter dan dapat mengambil keuntungan pada kemampuan tracking connection state Netfilter.
Shorewall bukanlah sebuah daemon. Tugas dari shorewall sudah lengkap bila sudah mengkonfigurasi Netfilter. Setelah itu, tidak ada kode shorewall yang dijalankan meskipun program /sbin/shorewall dapat digunakan setiap waktu untuk memonitor firewall Netfilter. Shorewall bukanlah tools konfigurasi iptables yang termudah untuk digunakan, tapi shorewall adalah yang paling fleksibel dan powerful.
Sebelum kita membahas tentang shorewall, ada beberapa istilah yang harus kita ketahui diantaranya:
- Netfilter - Fasilitas packet filter yang digunakan pada kernel linux 2.4 dan sesudahnya
- IPchains - Fasilitas packet filter yang digunakann pada kernel linux 2.2. Juga merupakan program yang digunakan untuk mengkonfigurasi dan mengatur fasilitas tersebut. Netfilter dapat digunakan pada mode kompatible
- IPchainsiptables - program yang digunakan untuk mengkonfigurasi dan mengontrol Netfilter. Istilah 'iptables' sering digunakan pada kombinasi dari iptables+Netfilter.
1. Netfilter dan Iptables
Netfilter merupakan salah satu perangkat di dalam linux kernel yang menyediakan modul inti untuk register fungsi callback dengan network stack. Register fungsi callback adalah pemanggilan kembali setiap paket data yang ditransfer tanpa network stack.
Iptables adalah struktur tabel secara umum untuk rulesets. Pada setiap tabel IP harus ada penggolongan nomor (iptables matches) dan satu koneksi (iptables target). Netfilter, ip_tables, connection tracking (ip_conntrack, nf_conntrack) dan subsystem NAT merupakan bagian utama pada framework.
Fungsi dari netfilter dan iptables yaitu:
- Membangun firewall internet pada paket filtering stateless dan stateful.
- Dapat menggunakan NAT dan masquerading untuk pembagian acces internet jika kita tidak mempunyai alamat IP public.
- Dapat menggunakan NAT untuk implementasi proxy.
- Membantu tc dan sistem iproute2 dalam membuat QoS yang canggih dan aturan router.
- Memanipulasi paket selanjutnya (mangling) seperti mengubah TOS/DSCP/ECN bit pada IP utama.
Netfilter terdiri dari tiga tabel yaitu: Filter, Nat dan Mangle, dimana setiap tabel tersebut mempunyai urutan: PREROUTING, INPUT, FORWARD, OUTPUT dan POSTROUTING.
Filter yaitu paket filtering yang digunakan untuk menolak, mengeluarkan dan menerima paket-paket data.
Nat yaitu Network Address Translation yang terdiri dari DNAT, SNAT dan Masquerading.
Mangle yaitu modifikasi paket umum seperti menyeting nilai TOS atau kode paket untuk aturan routing dan pembentukan traffic.
Di bawah ini merupakan diagram bagaimana paket data dikirim dengan rangkaian pembangun tanpa Netfilter.

Gambar 6.12. Diagram Paket Data Dikirim dengan Rangkaian Pembangun Tanpa Netfilter
Catatan: Tidak semua dari isi tabel digunakan,tergantung isi penggunaanya “Local Process” berarti proses yang dijalankan di sistem shorewall itu sendiri.

Pada box diatas diberi nama blok pembangun (INPUT) yang berhubungan dengan nama tabel (Mangle and Filter). Dimana blok yang ada dan perintah dari blok tersebut ditransfer. Pada contoh diatas menunjukkan bahwa paket pertama seluruhnya menuju blok INPUT pada tabel Mangle selanjutnya menuju blok INPUT pada tabel Filter . Pada saat blok ditutup, Shorewall tidak menggunakan blok (INPUT) pada tabel (Mangle).
Catatan: Rangkaian di tabel Nat hanya ditransfer untuk permintaan koneksi baru (terkait dengan koneksi tetap) sedangkan rangkaian pada tabel lain ditransfer setiap paketnya. Menurut peraturan menunjukkan bahwa semua tujuan traffic untuk firewall berasal dari firewall di eth0 disebut "eth0_in". Seperti contoh di bawah ini.
Contoh dari status shorewall pada server dengan interface (eth0):
[root@lists html]# shorewall status
Shorewall-1.4.7 Status at lists.shorewall.net - Mon Oct 13 12:51:13 PDT 2003
Counters reset Sat Oct 11 08:12:57 PDT 2003
1.1 Tabel pertama yang tampil adalah tabel Filter
Chain INPUT (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
679K 182M ACCEPT all -- lo * 0.0.0.0/0
0.0.0.0/0
785K 93M accounting all -- * * 0.0.0.0/0
0.0.0.0/0
0 0 DROP !icmp -- * * 0.0.0.0/0
0.0.0.0/0 state INVALID
Menurut peraturan menunjukkan bahwa semua tujuan traffic untuk firewall berasal dari firewall di eth0 disebut "eth0_in". Rangkaian akan ditunjukkan lebih jauh lagi.
785K 93M eth0_in all -- eth0 * 0.0.0.0/0
0.0.0.0/0
0 0 common all -- * * 0.0.0.0/0
0.0.0.0/0
0 0 LOG all -- * * 0.0.0.0/0
0.0.0.0/0 LOG flags 0 level 6 prefix `Shorewall:INPUT:REJECT:'
0 0 reject all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 accounting all -- * * 0.0.0.0/0
0.0.0.0/0
0 0 DROP !icmp -- * * 0.0.0.0/0
0.0.0.0/0 state INVALID
0 0 eth0_fwd all -- eth0 * 0.0.0.0/0
0.0.0.0/0
0 0 common all -- * * 0.0.0.0/0
0.0.0.0/0
0 0 LOG all -- * * 0.0.0.0/0
0.0.0.0/0 LOG flags 0 level 6 prefix
`Shorewall:FORWARD:REJECT:'
0 0 reject all -- * * 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy DROP 1 packets, 60 bytes)
pkts bytes target prot opt in out source destination
679K 182M ACCEPT all -- * lo 0.0.0.0/0
0.0.0.0/0
922K 618M accounting all -- * * 0.0.0.0/0
0.0.0.0/0
0 0 DROP !icmp -- * * 0.0.0.0/0
0.0.0.0/0 state INVALID
922K 618M fw2net all -- * eth0 0.0.0.0/0
0.0.0.0/0
0 0 common all -- * * 0.0.0.0/0
0.0.0.0/0
0 0 LOG all -- * * 0.0.0.0/0
0.0.0.0/0 LOG flags 0 level 6 prefix
`Shorewall:OUTPUT:REJECT:'
0 0 reject all -- * * 0.0.0.0/0 0.0.0.0/0
Dibawah ini rangkaian dari eth0_in :
Chain eth0_in (1 references)
pkts bytes target prot opt in out source destination
785K 93M dynamic all -- * * 0.0.0.0/0
0.0.0.0/0
785K 93M net2fw all -- * * 0.0.0.0/0
0.0.0.0/0
1.2 Kemudian Tabel NAT
Nat table
Chain PREROUTING (policy ACCEPT 182K packets, 12M bytes)
pkts bytes target prot opt in out source destination
20005 1314K net_dnat all -- eth0 * 0.0.0.0/0
0.0.0.0/0
Chain POSTROUTING (policy ACCEPT 678K packets, 44M bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 678K packets, 44M bytes)
pkts bytes target prot opt in out source destination
Chain net_dnat (1 references)
pkts bytes target prot opt in out source destination
638 32968 REDIRECT tcp -- * * 0.0.0.0/0
!206.124.146.177 tcp dpt:80 redir ports 3128
1.3 Yang Terakhir Tabel Mangle
Mangle Table
Chain PREROUTING (policy ACCEPT 14M packets, 2403M bytes)
pkts bytes target prot opt in out source destination
1464K 275M pretos all -- * * 0.0.0.0/0
0.0.0.0/0
Chain INPUT (policy ACCEPT 14M packets, 2403M bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 15M packets, 7188M bytes)
pkts bytes target prot opt in out source destination
1601K 800M outtos all -- * * 0.0.0.0/0
0.0.0.0/0
Chain POSTROUTING (policy ACCEPT 15M packets, 7188M bytes)
pkts bytes target prot opt in out source destination
Chain outtos (1 references)
pkts bytes target prot opt in out source destination
0 0 TOS tcp -- * * 0.0.0.0/0
0.0.0.0/0 tcp dpt:22 TOS set 0x10
315K 311M TOS tcp -- * * 0.0.0.0/0
0.0.0.0/0 tcp spt:22 TOS set 0x10
0 0 TOS tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:21 TOS set 0x10
683 59143 TOS tcp -- * * 0.0.0.0/0
0.0.0.0/0 tcp spt:21 TOS set 0x10
3667 5357K TOS tcp -- * * 0.0.0.0/0
0.0.0.0/0 tcp spt:20 TOS set 0x08
0 0 TOS tcp -- * * 0.0.0.0/0
0.0.0.0/0 tcp dpt:20 TOS set 0x08
Chain pretos (1 references)
pkts bytes target prot opt in out source destination
271K 15M TOS tcp -- * * 0.0.0.0/0
0.0.0.0/0 tcp dpt:22 TOS set 0x10
0 0 TOS tcp -- * * 0.0.0.0/0
0.0.0.0/0 tcp spt:22 TOS set 0x10
730 41538 TOS tcp -- * * 0.0.0.0/0
0.0.0.0/0 tcp dpt:21 TOS set 0x10
0 0 TOS tcp -- * * 0.0.0.0/0
0.0.0.0/0 tcp spt:21 TOS set 0x10
0 0 TOS tcp -- * * 0.0.0.0/0
0.0.0.0/0 tcp spt:20 TOS set 0x08
2065 111K TOS tcp -- * * 0.0.0.0/0
0.0.0.0/0
2. Konsep Shorewall
File konfigurasi untuk Shorewall diletakkan di direktori /etc/shorewall. Shorewall seperti jaringan yang bekerja dengan satu set zones. Zones ditempatkan pada file /etc/shorewall/zones. File ini untuk mendefinisikan zona asal trafik pada jaringan.
Isi file /etc/shorewall/zone
#ZONE DISPLAY COMMENTS
net Net Internet
loc Local Local networks
dmz Dmz Demilitarized zone
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Server tempat shorewall diinstall dikenal sebagai zona yang disebut fw.
Aturan tentang traffic yang diterima dan traffic yang ditolak berkaitan dengan zones.
Kita menyampaikan default policy untuk koneksi dari zone satu ke zone yang lain pada file /etc/shorewall/policy. Beberapa pilihan dalam kebijakan tersebut adalah:
- ACCEPT -- Menerima koneksi tersebut
- DROP -- Mengabaikan permintaan koneksi
- REJECT -- Mengembalikan kesalahan sesuai permintaan koneksi.
Kita menjelaskan aturan secara umum pada file /etc/shorewall/rules
Kita hanya memerlukan permintaan koneksi. Kita tidak harus menggambarkan tentang peraturan bagaimana traffic menjadi bagian dalam pembentukan koneksi, dan pada beberapa kasus kita tidak perlu mencemaskan bagaimana koneksi yang terkait ditangani (paket error pada ICMP dan permintaan koneksi TCP seperti yang digunakan pada FTP).
Untuk semua traffic yang lewat pada firewall diatur pada /etc/shorewall/rules, jika tidak terdefinisikan pada file tersebut maka akan dicek pada /etc/shorewall/policy jika tidak terdefinisikan akan dicek pada /etc/shorewall/action/usr/share/shorewall/actions.std.
Contoh aturan pada file /etc/shorewall/policy yang memiliki tiga-interfaces:

Jika kita menginginkan system firewall dapat mengakses internet secara penuh, kita mengganti command seperti di bawah:

Kebijakan di atas akan:
- Mengizinkan semua permintaan koneksi dari local network kita ke internet.
- Mengabaikan semua permintaan koneksi dari internet ke local network atau firewall; jika pada koneksi drop, log level diisi info
- Menerima semua koneksi dari firewall ke internet (jika pada kondisi policy tidak ada komentar).
- Mereject semua koneksi; jika saat koneksi reject pada log level diisi info /etc/shorewall/interface.
File ini untuk menentukan interface yang akan terhubung dengan suatu zona

File diatas berarti eth0 terhubung dengan jaringan internet, eth1 terhubung dengan jaringan local, dan eth2 terhubung dengan zona demilitarized.
Untuk menggambarkan bagaimana kebijakan tersebut memberi pengecualian, contohnya jika kita memiliki kebijakan tersebut tapi kita tidak dapat menghubungkan firewall dari internet yang menggunakan Secure Shell (SSH), meskipun SSH terhubung ke TCP port 22.

Jadi meskipun kita mempunyai kebijakan untuk mengabaikan semua koneksi ke internet, kita harus tetap menghubungkan ke SSH server pada firewall kita.