Jaringan dan Internet NAT dengan Linux Oleh : Agus Hartanto Waktu : Minggu, 25 Februari 2001 01:57:11 JAVT --------------------------------------------------------------------------------- Jika anda mempunyai beberapa buah komputer yang saling terhubung lewat jaringan (ethernet misalnya), anda dapat menggunakan linux sebagai pintu gerbang (router/gateway) untuk menyambungkan semua komputer anda menuju internet. Router dan gateway sendiri sebenarnya secara teori mempunyai filosofi arti yang berbeda, gateway sebenarnya mengacu pada alat yang difungsikan untuk menjembatani dua buah jaringan yang mempunyai topologi berbeda, berbeda subnet, dsb, sedangkan router untuk mengatur pengalamatan paket paket data dalam jaringan yang berbeda sehingga komunikasi dapat terlaksana. Akan tetapi dalam kenyataan sehari hari router dan gateway seringkali hanya ditangani oleh sebuah alat saja, hal inilah yang menyebabkan router selalu diidentikkan dengan gateway, demikian pula sebaliknya. Router banyak didistribusikan dalam bentuk perangkat keras bermerek seperti Cisco, Intel, Proteon, Bay Network dll dengan harga yang relatif tinggi, tapi dengan linux plus IP-Masquerade yang dipasang pada sebuah komputer (PC misalnya) kita dapat membangun sebuah router dengan biaya yang relatif jauh lebih murah. Pendahuluan Penulis tidak akan membahas lebih jauh tentang pengertian IP-Masquerade, karena topik ini sudah terlalu sering dibahas, anda bisa membaca dokumentasi IP-Masquerade HOWTO untuk mendapatkan teori dan pengertian lengkap tentang IP-Masquerade. Nah sebelum kita membahas lebih jauh tentang bagaimana melakukan settiing up IP-Masquerade di linux, marilah kita mengenal konsep IP private dalam TCP/IP. Dalam RFC 1597 menulis : The Internet Assigned Number Authority (IANA) has reserved the three blocks of the IP Address space for private networks : 10.0.0.0 - 10.255.255.255 for class A 172.16.0.0 - 172.31.255.255 for class B 192.168.0.0 - 192.168.255.255 for class C Kutipan diatas menjelaskan pada kita bahwa alamat alamat IP diatas hanya digunakan untuk jaringan pribadi (private networks), jadi alamat alamat IP ini tidak digunakan dalam Internet. Jika jaringan anda merupakan jaringan pribadi dan tidak mempunyai IP real (official IP), sebaiknya komputer komputer anda diberi alamat sesuai dengan aturan ini. Prasyarat IP Masquerade Minimal harus ada sebuah mesin linux dalam jaringan yang tersambung ke internet (mempunyai IP real/official IP). Kernel harus mendukung IPMasquerade. Ada program untuk mengaktifkan IP Masquerade : ipfwadm untuk kernel versi 2.0.xx ipchains untuk kernel versi 2.2.xx keatas kedua program tersebut dapat anda cari dan download melalui site site linux terkemuka seperti www.linuxapps.com , www.linuxberg.com atau mirror mirrornya seperti telkomnet.linuxberg.com dll. Komputer komputer klien sebaiknya diberi alamat sesuai dengan aturan IP private sesuai dengan kelasnya dan diletakkan satu netmask dengan komputer linux. contoh : ----------------- ISP ppp0=202.151.22.1 ----------+ ----------------- | | | | +-------------+-------------+---------------+ | | | | -----+----- -----+----- -----+----- -------+-------- 192.168.1.2 192.168.1.3 192.168.1.4 eth0=192.168.1.1 ----------- ----------- ----------- ---------------- KLIEN 1 KLIEN 2 KLIEN 3 Server netmask = 255.255.255.0 Setelah anda membaca prasyarat diatas, tentunya anda sudah mempunyai gambaran umum, marilah sekarang kita menginjak detail installasi dan konfigurasi dari IP masquerade ini. Langkah Langkah Membangun IP Masquerade 1. Konfigurasi Kernel Untuk keperluan IP-Masquerade, kernel anda harus mendukung beberapa driver dibawah ini : A. Kernel 2.2.xx keatas Bila anda menggunakan kernel 2.2.xx keatas, anda harus mengaktifkan beberapa dukungan dari kernel, sebelum anda melakukan kompilasi, Anda bisa mengkompile sebagai modul ataupun built-in ke dalam kernel yang ingin anda kompilasi : * Prompt for development and/or incomplete code/drivers CONFIG_EXPERIMENTAL - ini akan membuat anda dapat memilih dukungan IP Masquerade Eksperimental yang akan kita kompilasi ke dalam kernel. * Enable loadable module support CONFIG_MODULES - Mengijinkan anda untuk memanggil modul modul ip masquerade * Networking support CONFIG_NET * Network firewalls CONFIG_FIREWALL * TCP/IP networking CONFIG_INET * IP: forwarding/gatewaying CONFIG_IP_FORWARD * IP: firewalling CONFIG_IP_FIREWALL * IP: masquerading CONFIG_IP_MASQUERADE * IP: ipportfw masq support CONFIG_IP_MASQUERADE_IPPORTFW - Disarankan * IP: ipautofw masquerade support CONFIG_IP_MASQUERADE_IPAUTOFW - Bersifat optional * IP: ICMP masquerading CONFIG_IP_MASQUERADE_ICMP - Disarankan bila anda ingin mengaktifkan masquerading pada paket-paket ICMP * IP: always defragment CONFIG_IP_ALWAYS_DEFRAG - sangat disarankan * Dummy net driver support CONFIG_DUMMY * IP: ip fwmark masq-forwarding support CONFIG_IP_MASQUERADE_MFW - Bersifat optional B. Kernel 2.0.xx Bila anda menggunakan kernel versi 2.0.xx , kernel anda harus mndukung beberapa hal dibawah ini : * Prompt for development and/or incomplete code/drivers CONFIG_EXPERIMENTAL - ini akan membuat anda dapat memilih dukungan IP Masquerade Eksperimental yang akan kita kompilasi ke dalam kernel * Enable loadable module support CONFIG_MODULES - Mengijinkan anda untuk memanggil driver atau dukungan yang dikompile sebagai modul * Networking support CONFIG_NET * Network firewalls CONFIG_FIREWALL * TCP/IP networking CONFIG_INET * IP: forwarding/gatewaying CONFIG_IP_FORWARD * IP: firewalling CONFIG_IP_FIREWALL * IP: masquerading (EXPERIMENTAL) CONFIG_IP_MASQUERADE - WaJiB !! * IP: ipautofw masquerade support (EXPERIMENTAL) CONFIG_IP_MASQUERADE_IPAUTOFW - Disarankan * IP: ICMP masquerading CONFIG_IP_MASQUERADE_ICMP - Jika anda menginginkan mengaktifkan masquerading pada paket-paket ICMP, silakan aktifkan dukungan ini. * IP: always defragment CONFIG_IP_ALWAYS_DEFRAG - Sangat Disarankan * Dummy net driver support CONFIG_DUMMY - Disarankan Catatan penulis : Jika anda menggunakan Distribusi Redhat 5.x atau lebih baru, Kernel defaultnya sudah menyertakan dukungan untuk IP-Masquerade (dikompile sebagai modul), dan anda tinggal mengaktifkannya ! Nah, setelah kernel anda mendukung IP Masquerade, sekarang kita menginjak pada langkah berikutnya, yaitu mengaktifkan ip_forward dan memanggil modul-modul IP Masquerade (kalau anda kompile sebagai modul). 2. Mengaktifkan IP_FORWARDING Untuk mengaktifkan ip_forward anda harus memberikan nilai 1 ke file /proc/sys/net/ipv4/ip_forward, contohnya dengan mengetikkan perintah di prompt linux : [root@server /]# echo "1" > /proc/sys/net/ipv4/ip_forward Ini sangat penting untuk diperhatikan, karena sejak Kernel 2.0.34 , kernel tidak mengaktifkannya secara default. Atau cara lain, anda bisa juga mengedit file /etc/sysconfig/network, yakinkan di file tersebut ada baris : FORWARD_IPV4=true dengan adanya baris tersebut maka script /etc/rc.d/init.d/network akan memberikan nilai 1 secara otomatis ke file /proc/sys/net/ipv4/ip_forward pada saat memulai linux 3. Memanggil modul modul pendukung IP Masquerade Untuk mengaktifkan modul modul pendukung IP Masquerade, silakan anda masuk kedalam direktori modul tsb (modul ip masquerade ada di direktori ipv4), perhatikan contoh dibawah ini : [root@server /]# cd /lib/modules/2.2.5-15/ipv4/ [root@server ipv4]# ls ip_gre.o ip_masq_portfw.o rarp.o ip_masq_autofw.o ip_masq_quake.o ip_masq_cuseeme.o ip_masq_raudio.o ip_masq_ftp.o ip_masq_user.o ip_masq_irc.o ip_masq_vdolive.o ip_masq_mfw.o ipip.o Setelah anda berada di direktori modul ip masquerade, panggil modul tersebut, dengan perintah : [root@server ipv4]# modprobe -a * Nah, untuk memastikan apakah modul tsb udah terpanggil atau belum, berikan perintah: [root@server ipv4]# lsmod dan seharusnya anda akan melihat baris seperti ini : . . . ip_masq_vdolive 1072 0 (unused) ip_masq_user 2312 0 (unused) ip_masq_raudio 2736 0 (unused) ip_masq_quake 1092 0 (unused) ip_masq_portfw 2256 0 (unused) ip_masq_mfw 2880 0 (unused) ip_masq_irc 1520 0 (unused) ip_masq_ftp 2352 0 (unused) ip_masq_cuseeme 816 0 (unused) ip_masq_autofw 2208 0 (unused) ip_gre 6480 0 (unused) . . . 4. Mengkonfigurasikan Aturan dari IP Forwarding dan sedikit ttg Firewall Seperti telah disinggung diatas, anda membutuhkan program ipfwadm untuk kernel 2.0.xx , atau ipchains untuk kernel versi 2.2.xx , Ada sedikit perbedaan pada option option yang harus kita berikan dari kedua program tersebut. Marilah kita bahas satu persatu : A. ipfwadm (Bila anda menggunakan kernel 2.0.xx) Anda harus memberikan perintah : ipfwadm -F -a m -S yyy.yyy.yyy.yyy/x -D 0.0.0.0/0 dimana yyy.yyy.yyy.yyy/x adalah alamat alamat IP yang ada dibalik gateway anda, perhatikan tabel berikut : netmask | x | Subnet ~~~~~~~~~~~~~~~~|~~~~|~~~~~~~~~~~~~~~ 255.0.0.0 | 8 | Class A 255.255.0.0 | 16 | Class B 255.255.255.0 | 24 | Class C 255.255.255.255 | 32 | Point-to-point Untuk lebih jelasnya coba perhatikan contoh dibawah ini: a. Anda mempunyai jaringan dengan alamat IP gateway linux 192.168.1.1 dan klien klien 192.168.1.2 s/d 192.168.1.254 dengan netmask 255.255.255.0 , dan anda ingin mengaktifkan IP Masquerading atas alamat alamat ini, maka anda harus mengetikkan perintah : ipfwadm -F -a m -S 192.168.1.0/24 -D 0.0.0.0/0 b. Anda mempunyai alamat alamat IP spt diatas tapi anda ingin hanya klien dengan IP bernomer 192.168.1.5 dan 192.168.1.10 saja yang bisa mengakses internet, maka seharusnya anda hanya mengetikkan perintah : ipfwadm -F -a m -S 192.168.1.5/32 -D 0.0.0.0/0 ipfwadm -F -a m -S 192.168.1.10/32 -D 0.0.0.0/0 c. Anda mempunyai alamat alamat IP spt diatas dan anda ingin semua klien bisa mengakses internet, kecuali IP bernomer 192.168.1.5 dan 192.168.1.10 saja yang tidak bisa mengakses internet, maka seharusnya anda mengetikkan perintah : ipfwadm -F -a m -S 192.168.1.0/24 -D 0/0 untuk mengaktifkan masquerading. Baru kemudian kita cegat kedua komputer tersebut dengan perintah : ipfwadm -I -i deny -S 192.168.1.5/32 -D 0/0 ipfwadm -I -i deny -S 192.168.1.10/32 -D 0/0 d. Administrasi fasilitas fasilitas tertentu Kita bisa juga melakukan pencegatan terhadap paket paket yang akan masuk ke port tertentu, hal ini juga memungkinkan kita untuk mematikan atau menghidupkan beberapa fasilitas internet, misalnya anda ingin klien anda dengan alamat 192.168.1.5 tidak diperbolehkan untuk melakukan chatting, maka kita bisa men-deny , paket paket dari klien 192.168.1.5 yang akan menuju ke port IRC Server. Dibawah ini contoh untuk men-cegat paket TCP dari klien dengan alamat 192.168.1.5 yang akan menuju ke port 6667 (port IRC Server) : ipfwadm -I -i deny -S 192.168.1.5/32 -D 0/0 6667 -P tcp Untuk membuka atau menghapus aturan aturan yang telah kita buat kita bisa mengganti option -i, -a dsb, dengan option -d. Sebagai contoh, aturan : ipfwadm -I -i deny -S 192.168.1.5/32 -D 0/0 6667 -P tcp dapat di-hapus dengan perintah : ipfwadm -I -d deny -S 192.168.1.5/32 -D 0/0 6667 -P tcp e. Catatan option option ipfwadm yg digunakan diatas : -I menambahkan rule input -i menyisipkan (insert) rule firewall kee baris paling atas -d menghapus rule yg telah dibuat -S source address -D destination address m Masquerading deny Mencegat Untuk keterangan lebih detail silakan ketikkan 'man ipfwadm' dan baca dokumentasi dari ipfwadm. B. ipchains (bila anda menggunakan kernel 2.2.xx keatas) Anda harus memberikan perintah : ipchains -A forward -s yyy.yyy.yyy.yyy/x -j MASQ dengan tabel seperti diatas. Untuk lebih jelasnya coba perhatikan contoh dibawah ini : a. Anda mempunyai jaringan dengan alamat IP gateway linux 192.168.1.1 dan klien klien 192.168.1.2 s/d 192.168.1.254 dengan netmask 255.255.255.0 , dan anda ingin mengaktifkan IP Masquerading atas alamat alamat ini, maka anda harus mengetikkan perintah : ipchains -A forward -s 192.168.1.0/24 -d 0.0.0.0/0 -j MASQ b. Anda mempunyai alamat alamat IP spt diatas tapi anda ingin hanya klien dengan IP bernomer 192.168.1.5 dan 192.168.1.10 saja yang bisa mengakses internet, maka seharusnya anda hanya mengetikkan perintah : ipchains -A forward -s 192.168.1.5/32 -d 0.0.0.0/0 -j MASQ ipchains -A forward -s 192.168.1.10/32 -d 0.0.0.0/0 -j MASQ c. Anda mempunyai alamat alamat IP spt diatas dan anda ingin semua klien bisa mengakses internet, kecuali IP bernomer 192.168.1.5 dan 192.168.1.10 saja yang tidak bisa mengakses internet, maka seharusnya anda mengetikkan perintah : ipchains -A forward -s 192.168.1.0/24 -d 0/0 -j MASQ untuk mengaktifkan masquerading. Baru kemudian kita cegat kedua komputer tersebut dengan perintah : ipchains -I input -s 192.168.1.5/32 -d 0/0 -j DENY ipchains -I input -s 192.168.1.10/32 -d 0/0 -j DENY d. Administrasi fasilitas fasilitas tertentu Kita bisa juga melakukan pencegatan terhadap paket paket yang akan masuk ke port tertentu, hal ini juga memungkinkan kita untuk mematikan atau menghidupkan beberapa fasilitas internet, misalnya anda ingin klien anda dengan alamat 192.168.1.5 tidak diperbolehkan untuk melakukan chatting, maka kita bisa men-deny , paket paket dari klien 192.168.1.5 yang akan menuju ke port IRC Server (contoh port nomer 6667), Dibawah ini contoh untuk men-cegat paket TCP dari klien dengan alamat 192.168.1.5 yang akan menuju ke port 6667 (port IRC Server) : ipchains -I input -s 192.168.1.5/32 -d 0/0 6667 -j DENY -p tcp Untuk membuka atau menghapus aturan aturan yang telah kita buat kita bisa mengganti option -I , -A dsb, dengan option -D Sebagai contoh, aturan : ipchains -I input -s 192.168.1.5/32 -d 0/0 6667 -j DENY -p tcp dapat di-hapus dengan perintah : ipchains -D input -s 192.168.1.5/32 -d 0/0 6667 -j DENY -p tcp e. Catatan option option ipchains yg digunakan diatas -A menambahkan rule -I menyisipkan (insert) rule firewall kke baris paling atas -D menghapus rule yg telah dibuat -s source address -d destination address MASQ Masquerading DENY Mencegat untuk keterangan lebih detail tentang firewalling dengan menggunakan ipchains, silakan baca dokumentasi dan manual page dari ipchains. Selamat mencoba.