Firewall & Bandwidth Management
by Henry Saptono
[email protected],
[email protected] http://www.nurulfikri.com Jan 2007
Network Diagram
Network Diagram (with PC gateway)
Network Diagram (with PC gateway)
Kata Kunci
Router
Device dedicated yang berfungsi mengatur proses 'routing' antar jaringan komputer
Firewall
Mekanisme untuk melakukan Paket Filtering, Paket Investigasi, dan Paket manipulasi. Diimplementasikan pada level “Kernel Space” yang berupa modul atau built in Secara logik sebagai node khusus dalam jaringan komputer
Gateway
Mengatur “proses static routing” antar jaringan. Dalam wujud PC. Diimplementasikan pada level “kernel space”, umumnya sebagai fungsi built in.
Linux sebagai Sistem Operasi yang mendukung Jaringan
Sistem operasi linux memiliki ragam bentuk fungsi-fungsi “ dukungan jaringan (Networking Support)”, diantaranya sbb:
Routing (IP Forwarding)
Firewall (Netfilter)
QoS (Quality Of Service)
Tunneling
IPsec(vpn)
LVS, dan lain -lain
Implementasi Linux Gateway
Fungsi linux sebagai gateway (IP Forwarding) adalah fungsi built-in pada kernel Perlu diaktifkan pada saat 'boot'
echo 1 > /proc/sys/net/ipv4/ip_forward
Atau edit file /etc/sysctl.conf, dan set parameter net.ipv4.ip_forward=1
Jika diperlukan mengatur tabel routing (gunakan perintah 'route' )
Ilustrasi IP Forwarding
Internet Sharing
Internet sharing : berbagi akses koneksi internet pada sebuah koneksi internet. Implementasinya pada level 'kernel space' melibatkan fungsi-fungsi kernel yaitu : IP forwarding(routing/gateway) dan IP Masquerading (Netfilter/IPtables)
Internet sharing
Di Linux Langkah-langkah menerapkannya, sbb:
IP Forwarding (gateway)
echo 1 > /proc/sys/net/ipv4/ip_forward
Atau, vi /etc/sysctl.conf net.ipv4.ip_forward=1
IP Masquerading
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 o eth0 -j MASQUERADE
Ilustrasi IP Masquerade
Klasifikasi Firewall
Firewall dapat diklasifikasikan secara umum terdiri dari 2 class:
Proxy (Dual homed host)
Packet Filter (screening router)
Firewall(packet filter)
Diimplementasikan pada level 'kernel space', dengan nama fungsi “netfilter” , dalam bentuk modul. Cek dukungan kernel terhadap netfilter sbb:
grep -i netfilter /boot/config-2.6.13
Konfigurasi kernel
Tool Administrasi Firewall
Tool administrasi firewall (netfilter) di linux disediakan secara default dalam bentuk perintah (command) 'iptables'
Iptables
netfilter/iptables terdiri dari 3 tabel: filter, nat, mangle Perintah 'iptables' digunakan untuk mengelola, memaintain, menginspeksi rulerule IP packet filter dalam kernel linux.
Tabel Filter filter: This is the default table (if no -t option is passed). It contains the built-in chains INPUT (for packets destined to local sockets), FORWARD (for packets being routed through the box), and OUTPUT (for locally-generated packets).
Tabel nat nat: This table is consulted when a packet that creates a new connection is encountered. It consists of three built-ins: PREROUTING (for altering packets as soon as they come in), OUTPUT (for alteringlocally-generated packets before routing), and POSTROUTING (for altering packets as they are about to go out).
Tabel mangle mangle: This table is used for specialized packet alteration. Until kernel 2.4.17 it had two built-in chains: PREROUTING (for altering incoming packets before routing) and OUTPUT (for altering locally-generated packets before routing). Since kernel 2.4.18, three other built-in chains are also supported: INPUT (for packets coming into the box itself), FORWARD (for altering packets being routed through the box),and POSTROUTING (for altering packets as they are about to go out).
iptables - administration tool for IPv4 packet filtering and NAT SYNOPSIS iptables [-t table] -[AD] chain rule-specification [options] iptables [-t table] -I chain [rulenum] rule-specification [options] iptables [-t table] -R chain rulenum rule-specification [options] iptables [-t table] -D chain rulenum [options] iptables [-t table] -[LFZ] [chain] [options] iptables [-t table] -N chain iptables [-t table] -X [chain] iptables [-t table] -P chain target [options] iptables [-t table] -E old-chain-name new-chain-name
Diagram netfilter/iptables
Contoh perintah iptables Sebuah rule iptables dapat menspesifiksikan sumber paket (-s), tujuan paket (-d) , protokol (-p), dan port. Sebagai contoh , untuk memblok (deny) seuatu paket yang datang dari IP address 192.168.0.254 , sebgai berikut:
iptables -t filter -A INPUT -s 192.168.0.254 -j DROP filter adalah default table jika option -t tidak disertakan.
Contoh perintah iptables Jika tanda "!" disertakan didepan ip address sumber atau tujuan , ini menyatakan negasi dari ip address tersebut. iptables -t filter -A OUTPUT -d ! 192.168.0.254 -j DROP Rule diatas memblok semua paket dari local komputer firewall yang ditujukan ke semua ip address kecuali ke ip address 192.168.0.254. Incoming atau Outgoing interface dapat di spesifikasikan sebagai berikut: iptables -t filter -A INPUT -s 192.168.0.251 -i eth1 -j DROP
iptables dan NAT Network Address Translation dapat ditampilkan oleh kernel 2.4 dalam bentuk satu dari dua buah cara , yaitu: source NAT (SNAT) dan destination NAT (DNAT). DNAT sering digunakan untuk membelokkan (redirect) paket yang datang ke suatu interface dan diarahkan menjadi ke lokasi lain, seperti ke mesin proxy(squid proxy server). SNAT digunakan untuk menyembunyikan source address dari paket dengan cara memetakan ulang source address paket yang keluar ke IP address komputer yang lain atau rentang address yang lain. Kernel 2.4 secara otomatis melakukan reverse-translate semua paket-paket NAT yang dimaksud.
Ilustrasi DNAT
Ilustrasi SNAT
Contoh NAT
Untuk mengimplementasikan ip masquerading lakukan hal-hal sebagai berikut, :
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
Untuk menerapkan REDIRECT untuk keperluan membelokkan paket web secara transparan yang datang pada interface eth0 ke proxy server pada firewall itu sendiri, jalankan perintah berikut:
iptables -t nat -A PREROUTING -p tcp --dport 80 -i eth0 -j REDIRECT –to-port 3128
Contoh NAT
Untuk menerapkan destination NAT untuk keperluan membelokkan paket web secara transparan yang datang pada interface eth0 ke 192.168.0.1, jalankan perintah berikut:
iptables -t nat -A PREROUTING -p tcp -m multiport --dport 80,443 -i eth0 -j DNAT --to-destination 192.168.0.1
Untuk merubah source address melalui SNAT menjadi ip address 192.168.0.33 dengan port 1024 sampai 65535, gunkan perintah berikut:
iptables -t nat -A POSTROUTING -p tcp -o eth1 -j SNAT --to 192.168.0.33:1024-65535
Shorewall Shoreline Firewall atau lebih dikenalnya dengan istilah shorewall adalah tool tingkat tinggi yang digunakan untuk konfigurasi netfilter/iptables (firewall di linux). Untuk implementasi firewall dengan shorewall Anda harus mengkonfigurasi beberapa file konfigurasi shorewall seperti file zones, interfaces, policy, masq, dan rules. Semua file konfigurasi shorewall terletak dalam folder /etc/shorewall.
Konfigurasi Shorewall Langkah pertama, edit file /etc/shorewall/shorewall.conf untuk mengenable atau mengaktifkan shorewall, carilah parameter “STARTUP_ENABLED”, kemudian set parameter tersebut sebagai berikut: STARTUP_ENABLED=Yes Langkah kedua, editlah file /etc/shorewall/zones untuk mendefinisikan zone (segment) jaringan yang ada. Dalam contoh ini kita anggap firewall memiliki 2 buah interface network masing-masing terhubung dengan zone net (internet) dan zone loc (LAN). Lihat contoh berikut ini: #ZONE TYPE #
OPTIONS OPTIONS
fw
firewall
net
ipv4
loc
ipv4
IN
OUT OPTIONS
#LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE
Konfigurasi Shorewall Langkah ketiga, editlah file /etc/shorewall/interfaces untuk mendefinisikan interface network mana sajakah yang ada pada komputer firewall dan terhubung dengan zone mana sajakah.Lihat contoh berikut ini: #ZONE INTERFACE net
eth0
detect
loc
eth1
detect
BROADCAST
OPTIONS
#LAST LINE - ADD YOUR ENTRIES ABOVE THIS ONE - DO NOT REMOVE
Konfigurasi Shorewall Langkah keempat, editlah file /etc/shorewall/policy untuk mendefinisikan default kebijakan firewall pada masing-masing zone yang telah didefinisikan. Lihat contoh berikut ini: #SOURCE
DEST
POLICY
#
LEVEL
fw
all
ACCEPT
loc
fw
DROP
loc
net
DROP
info
net
fw
DROP
info
net
loc
DROP
info
all
all
info
DROP
#LAST LINE -- DO NOT REMOVE
LOG
LIMIT:BURST
Konfigurasi Shorewall Langkah kelima, editlah file /etc/shorewall/masq untuk memungkinkan masquerade paket dari LAN yang akan keluar dari firewall menuju internet. Lihat contoh berikut ini: #INTERFACE SUBNET eth0
ADDRESS
PROTO PORT(S)IPSEC
eth1
#LAST LINE -- ADD YOUR ENTRIES ABOVE THIS LINE -- DO NOT REMOVE
Konfigurasi Shorewall Langkah keenam, editlah file /etc/shorewall/rules untuk mendefinisikan rule-rule firewall selain rule default yang telah didefinisikan dalam file /etc/shorewall/policy. Lihat contoh berikut ini:
SECTION NEW ACCEPT net:202.159.11.154
fw
ACCEPT loc:192.168.1.100
fw
REDIRECT
loc:!192.168.1.31
3128
tcp www
ACCEPT
net:202.159.11.154
fw
tcp
20,21,22,25,53,80
ACCEPT
net:202.159.11.154
fw
udp
ACCEPT
loc
net
tcp
20,21,22,25,53,80,443
ACCEPT
loc
net
udp
20,21,22,25,53,80
20,21,22,25,53,80,443
#LAST LINE -- ADD YOUR ENTRIES ABOVE THIS LINE -- DO NOT REMOVE
Bandwidth Management Bandwidth Management (Traffic Control/Shaping) adalah suatu istilah yang ditujukan pada suatu subsistem antrian packet dalam/pada suatu jaringan atau network devices. Secara singkat traffic control/shaping adalah suatu usaha mengontrol traffic jaringan sehingga bandwidth lebih optimal dan performa network lebih terjamin. Fungsi dan operasi traffic control pada kernel linux terdiri dari komponen-komponen berikut ini: queueing disciplines (qdisc)
classes
filters
policer
Bandwidth Management Queueing discipline (Qdisc) bertanggungjawab untuk mentransmisikan data. Classes dipasang pada qdisc dan mengandung/berisi traffic. Setiap class yang tidak memiliki child class selalu memiliki 1 qdisc yang berasosiasi dengannya untuk mentransmisikan paket-paket data, dan qdisc tersebut menampung seluruh traffic yang masuk/mengalir ke dalam class tersebut. Filters dipasang pada qdisc dan class dan men-split traffic menjadi beberapa child-class yang berbeda. Policers digunakan untuk meyakinkan filters sesuai/match hanya dengan satu rate paket tertentu. Policers dapat dishare oleh beberapa filter berbeda dan pada interface-interface berbeda.
Bandwidth Management
Bandwidth Management (Trfaffic Control/Shaping) adalah mekanisme mengelola dan memaintain traffic yang dibangkitkan oleh suatu Interface Network. Bandwidth Management diimplementasikan pada level 'kernel space' Merupakan bagian dari fungsi QoS. Cek dukungan kernel sbb:
# grep -i qos /boot/config-2.6.17
Konfigurasi kernel
Tool administrasi traffic shaping
Untuk mengelola dan memaintain trraffic digunakn tool administrasi yang disediakan dalam bentuk perintah 'tc'. tc merupakan tool yang berasal dari paket software 'iproute' atau 'iproute2'
tc - show / manipulate traffic control settings SYNOPSIS
tc qdisc [ add | change | replace | link ] dev DEV [ parent qdisc-id |root ] [ handle qdisc-id ] qdisc [ qdisc specific parameters ] tc class [ add | change | replace ] dev DEV parent qdisc-id [ classid class-id ] qdisc [ qdisc specific parameters ] tc filter [ add | change | replace ] dev DEV [ parent qdisc-id | root ] protocol protocol prio priority filtertype [ filtertype specific parameters ] flowid flow-id tc [-s | -d ] qdisc show [ dev DEV ] tc [-s | -d ] class show dev DEV tc filter show dev DEV
Diagram hubungan netfilter dan TC
Skenario Traffic Shaping
Traffic shaping hanya akan efektif diimplementasikan pada Outgoing traffic/bandwith Outgoing traffic diterapkan sebagai TC EGRESS
Spesifikasi Bandwidths / rates kbps :Kilobytes per second mbps :Megabytes per second kbit :Kilobits per second mbit :Megabits per second
Konfigurasi Shorewall sbg Traffic controll Langkah pertama dalam implementasi traffic controll menggunakan shorewall adalah mengenable Traffic Controll (TC) pada file konfigurasi utama shorewall (/etc/shorewall/shorewall.conf). Sebelumnya diasumsikan konfigurasi shorewall sebagai firewall dan gateway telah dilakukan dengan baik dan benar. Dalam file tersebut carilah parameter “TC_ENABLED”, dan pastikan atau set nilai parameter tersebut menjadi ssb:
TC_ENABLED=Internal Langkah kedua editlah file /etc/shorewall/tcdevices, untuk menentukan pada device manakah akan Anda terapkan pengontrolan bandwidth, serta berapakan maksimum incoming dan outgoing bandwidth. Sebagai contoh kita akan mengatur agar bandwidth maksimum yang datang ke devices eth1 sebesar 512kbit dan bandwidth outgoing (traffic download dari client/ LAN) maksimum sebesar 384kbit. Lihat contoh berikut ini: #INTERFACE eth1
IN-BANDWITH
512kbit
OUT-BANDWIDTH
384kbit
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Konfigurasi Shorewall sbg Traffic controll Langkah ketiga editlah file /etc/shorewall/tcclasses, untuk menentukan atau mendefinisikan class-class pada qdisc. Sebagai contoh kita akan mendefinisikan 3 buah class , class pertama dengan prioritas utama memiliki rate 50% dari bandwidth (outgoing bandwidth) yang ada. Dan class yang kedua 30%, class yang ketiga 20% sebagai default class. Lihat contoh berikut ini: #INTERFACE MARK
RATE
CEIL
eth1
1
full*5/10 full
eth1
2
full*3/10 full*5/10 1
eth1
3
full*2/10 full*5/10 2
PRIORITY
OPTIONS
0 default
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Konfigurasi Shorewall sbg Traffic controll Langkah keempat editlah file /etc/shorewall/tcrules, untuk menentukan atau mendefinisikan rule klasifikasi traffic. Dalam file ini menentukan traffic manakah yang masuk dalam class -class yang telah kita definisikan dalam file tcclasses. Lihat contoh sebagai berikut: #MARK SOURCE
DEST
#
PROTO PORT(S) CLIENT USER
TEST
PORT(S)
1:F
0.0.0.0/0
0.0.0.0/0
icmp
1:F
0.0.0.0/0
192.168.1.2
all
2:F
0.0.0.0/0
192.168.1.3
tcp
3:F
0.0.0.0/0
192.168.1.100 all
-
80,443
#LAST LINE -- ADD YOUR ENTRIES BEFORE THIS ONE -- DO NOT REMOVE
Konfigurasi Shorewall sbg Traffic controll Langkah kelima, restartlah shorewall dengan perintah sbb: #shorewall restart Kemudian checklah qdisc dan class sbb:
#shorewall show tc Dan terakhir cobalah Anda uji dan amati dengan mengakses server di internet (http,https,ssh dll) dari LAN atau dari IP - IP yang dicontohkan dalam tcrules (misal ip 192.168.1.2, 192.168.1.3, 192.168.1.100)
Referensi
www.google.com
www.iptables.org
www.shorewall.net
www.docum.org
www.linuxhomenetworking.com