Tampilkan postingan dengan label Tutorial Centos. Tampilkan semua postingan
Tampilkan postingan dengan label Tutorial Centos. Tampilkan semua postingan

Sabtu, 25 Februari 2012

Tutorial Untuk Membuat Port Forwarding Dalam IPTables

I. Pendahuluan

Dalam artikel sebelumnya, kita sudah mempelajari tentang dasar-dasar iptables. Artikel kali ini akan menjelaskan tentang pengunaan iptables lebih lanjut yaitu bagaimana cara membuat port forwarding dengan menggunakan iptables. Port forwarding merupakan sebuah konsep untuk meneruskan paket yang datang dari ip dan port tertentu ke ip dan port tertentu. Konsep ini mengijinkan seorang user untuk mengakses sebuah layanan seperti telnet atau ssh di jaringan lokal dari jaringan publik. Misalnya seseorang sedang menggunakan IP publik a.b.c.d ingin mengakses layanan ssh yang ada di jaringan lokal w.x.y.z. Maka dengan menggunakan port forwarding orang tersebut bisa melaksanakan hal tersebut. Kelemahan dari port forwarding adalah jika kita menggunakan sebuah port untuk forwarding maka port tersebut tidak dapat digunakan lagi. Port forwarding sering disebut juga PAT (Port Address Translation) atau NAPT (Network Address and Port Translation). Di artikel ini, penulis menggunakan Centos 5.4 sebagai distronya dan menggunakan iptables versi 1.3.5 dan seharusnya artikel ini dapat digunakan oleh berbagai macam distro dan berbagai versi iptables.

II. CARA KERJA

Port forwarding merupakan kebalikan dari proses masquerading (NAT). Jika pada proses NAT yang terjadi adalah beberapa komputer lokal LAN terhubung ke internet melalui IP Publik, maka pada port forwarding yang terjadi adalah koneksi dari internet masuk ke dalam komputer yang ada di dalam LAN kita. Untuk lebih memudahkan bagaimana port forwarding itu bekerja bayangkanlah seorang resepsionis kantor yang hanya mempunyai satu nomor publik untuk menghubungi nomor telepon luar. Jika misalnya ada orang dari luar menelpon ke kantor tersebut untuk berbicara dengan seseorang yang bernama badu misalnya, maka resepsionis akan menghubung badu melalui nomor ekstensi si badu itu sendiri. Tetapi dari si badu tidak bisa menelpon ke luar. Berdasarkan analogi tersebut, dapat dianalogikan bahwa telepon si resepsionis merupakan sebuah server yang mempunyai 2 ethernet yaitu IP publik dan IP lokal. Sedangkan ekstensi si badu merupakan nomor port sebuah layanan di sebuah server lokal. Jika seseorang ingin menggunakan layanan ke dalam sebuah server lokal, maka dia harus menuliskan port dari layanan tersebut.

III. Langkah-langkah

Sebelum kita mengunakan Port forwarding, maka ada dua hal yang harus dikonfigurasi. Pertama adalah routing kernel. Routing kernel harus bernilai 1 agar port forwarding dapat berjalan. Ketikkan perintah berikut:
# vi /etc/sysctl.conf
Lalu cari pada file tersebut tulisan net.ipv4.ip_forward dan rubah nilainya menjadi 1, sehingga akan menjadi:
net.ipv4.ip_forward = 1
Yang kedua adalah file ip_forward. Ketikan perintah berikut:
# vi /proc/sys/net/ipv4/ip_forward
Ubah nilainya menjadi 1.

Setelah kedua hal tersebut dikonfigurasi, maka kita bersiap untuk melakukan port forwarding. Port forwarding mempunyai format seperti berikut:

iptables -t nat [-command] PREROUTING [-p protocol] --dport [port yang diinginkan] -d [IP publik] -j DNAT --to [ip_tujuan:port tujuan]

Setelah kita melakukan port forwarding, maka jangan lupa untuk melakukan hal berikut:
iptables -t nat -A POSTROUTING -o [ethernet lokal] -j MASQUERADE

Di bawah ini akan diberikan contoh-contoh agar kita dapat memahami implementasi port forwarding dengan lebih baik. Contoh-contoh ini berasumsi bahwa kita mempunyai 2 ethernet yaitu eth0 dengan IP 123.45.67.89 dan eth1 dengan IP lokal 192.168.0.2. Dan seluruh rantai semuanya berpolicy ACCEPT. Begitu juga dengan komputer lokal dengan IP 192.168.0.13 yang seluruh rantai iptables-nya berpolicy ACCEPT. Jika memang iptables kita mempunyai rantai yang berpolicy DROP, maka hanya tinggal membuka saja port-port tersebut.

1. Memforward web Server
Misalnya kita mempunyai sebuah aplikasi MRTG untuk melihat traffik jaringan di lokal kita. Kita ingin agar ketika pulang dari kantor kita bisa memantau kondisi jaringan kantor kita. Maka dari itu kita akan menggunakan konsep port forwarding ini untuk melaksanaakn maksud tersebut. Untuk melaksanakan hal tersebut kita akan membuka port 23456 dari server gateway kita. Tuliskan perintah-perintah berikut:

# iptables -t nat -A PREROUTING -p tcp --dport 23456  -d 123.45.67.89 -j DNAT --to-destination 192.168.0.2:80
# iptables -I INPUT -p tcp -d 123.45.67.89 --dport 80 -j DROP
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Perintah iptables pertama memberikan perintah agar setiap protokol tcp yang menuju IP 123.45.67.89 dengan port 23456 akan diteruskan ke IP 192.168.0.2 dengan port 80. Perintah kedua memberikan perintah agar setiap protokol tcp yang menuju IP 123.45.67.89 dengan port 80 akan di drop. Sedangkan perintah terakhir memberikan perintah Masquerade untuk ethernet lokal dalam hal ini eth1.
Sekarang cobalah ke browser dan ketikkan
http://123.45.67.89:23456/mymrtg
Maka seharusnya kita sudah bisa melihat aplikasi MRTG kita dari IP publik. Bandingkan dengan kita hanya mengetikkan browser seperti berikut:
http://123.45.67.89/mymrtg
Maka akan terjadi error.

2. Memforward layanan telnet
Misalnya kita ingin melakukan telnet kepada sebuah server yang ada di dalam jaringan lokal kita dan kita berada di luar kantor serta menggunakan IP publik. Maka dari itu kita mengetikkan di iptables perintah sebagai berikut:
# iptables -t nat -A PREROUTING -p tcp --dport 12345  -d 123.45.67.89 -j DNAT --to-destination 192.168.0.13:23
# iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Perintah iptables pertama memberikan perintah agar setiap protokol tcp yang menuju IP 123.45.67.89 dengan port 12345 akan diteruskan ke IP 192.168.0.13 dengan port 23. Sedangkan perintah terakhir memberikan perintah Masquerade untuk ethernet lokal dalam hal ini eth1.
Untuk melakukan telnet, maka kita mengertikkan formatnya sebagai berikut:
# telnet [ip publik] [port layanan]
Dalam kasus ini, kita mengetikkan sebagai berikut:
# telnet 123.45.67.89 12345
Dan seharusnya kita akan masuk ke server dengan IP 192.168.0.13 melalui mode telnet.

3. Memforward layanan ssh
Misalnya kita ingin melakukan ssh kepada sebuah server yang ada di dalam jaringan lokal kita dan kita berada di luar kantor serta menggunakan IP publik. Maka dari itu kita mengetikkan di iptables perintah sebagai berikut:
# iptables -t nat -A PREROUTING -p tcp --dport 34567  -d 123.45.67.89 -j DNAT --to-destination 192.168.0.13:22
#  iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Perintah iptables pertama memberikan perintah agar setiap protokol tcp yang menuju IP 123.45.67.89 dengan port 34567 akan diteruskan ke IP 192.168.0.13 dengan port 22. Sedangkan perintah terakhir memberikan perintah Masquerade untuk ethernet lokal dalam hal ini eth1.
Untuk melakukan ssh, maka kita mengertikkan formatnya sebagai berikut:
 # ssh nama_user@ip_publik -p [port layanan]
Dalam kasus ini, kita mengetikkan sebagai berikut:
 # ssh 
 arfie@123.45.67.89This e-mail address is being protected from spambots, you need JavaScript enabled to view it
  -p 34567
Dan seharusnya kita akan masuk ke server dengan IP 192.168.0.13 melalui mode ssh.

IV. Catatan Penting

Perlu diketahui bahwa jika kita menggunakan sebuah port untuk port forwarding maka port tersebut tidak dapat dipakai lagi. Maka dari itu, sebelum kita menggunakan port, cek terlebih dahulu apakah port tersebut masih tersedia atau tidak. Dan sebaiknya jangan menggunakan port-port yang sudah familiar penggunaannya seperti port 22, port 23, dan sebagainya jika ingin digunakan untuk port forwarding karena dikhawatirkan kita belum mensetting ulang service-service yang menggunaka port-port tersebut sehingga akan terjadi bentrok. Dan juga untuk melihat port-port mana saja yang digunakan oleh linux, lihat saja di file /etc/services. Sebaiknya gunakan port di atas port 10000 jika ingin digunakan untuk port forwarding dan perlu diketahui bahwa batas port hanya sampai port 65563. Jadi masih banyak puluhan ribu port yang masih lowong untuk dipergunakan sebagai port forwarding.

Referensi:

https://forum.linux.or.id/
http://en.wikipedia.org/
http://www.simonzone.com/
http://www.kostumluar.co.cc/
http://forshare.info/

Dasar-Dasar IPtables



I. Pendahuluan

Firewall adalah sebuah bagian dari sistem komputer atau jaringan yang didesain untuk memblok atau mengijinkan sebuah jaringan lain untuk mengakses jaringan kita. Firewall bisa berbentuk hardware atau software atau pun kombinasi dari keduanya. Firewall digunakan untuk melindungi jaringan kita dari jaringan-jaringan yang berpotensi menimbulkan bahaya ke dalam sistem kita. Seluruh pesan yang masuk atau meninggalkan jaringan kita melalui firewall akan dicek setiap pesan dan memblok setiap pesan yang tidak memenuhi kriteria yang telah kita tetapkan di dalam firewall. Gambar dibawah merupakan ilustrasi tentang bagaimana firewall bekerja.


Firewall merupakan perangkat jaringan yang berada di dalam kategori perangkat Layer 3 (Network layer) dan Layer 4 (Transport layer) dari protocol 7 OSI layer. Seperti diketahui, layer 3 adalah layer yang mengurus masalah pengalamatan IP, dan layer 4 adalah menangani permasalahan port-port komunikasi (TCP/UDP). Pada kebanyakan firewall, filtering belum bisa dilakukan pada level data link layer atau layer 2 pada 7 OSI layer. Jadi dengan demikian, sistem pengalamatan MAC dan frame-frame data belum bisa difilter. Maka dari itu, kebanyakan firewall pada umumnya melakukan filtering dan pembatasan berdasarkan pada alamat IP dan nomor port komunikasi yang ingin dituju atau diterimanya.

Firewall yang sederhana biasanya tidak memiliki kemampuan melakukan filtering terhadap paket berdasarkan isi dari paket tersebut. Sebagai contoh, firewall tidak memiliki kemampuan melakukan filtering terhadap e-mail bervirus yang kita download atau terhadap halaman web yang tidak pantas untuk dibuka. Yang bisa dilakukan firewall adalah melakukan blokir terhadap alamat IP dari mail server yang mengirimkan virus atau alamat halaman web yang dilarang untuk dibuka. Dengan kata lain, firewall merupakan sistem pertahanan yang paling depan untuk jaringan Anda.

II. Iptables

Di artikel ini akan dijelaskan tentang iptables, sebuah aplikasi firewall terbaik yang biasa digunakan oleh para administrator linux. Iptables merupakan aplikasi yang dibuat oleh proyek the netfilter.org. Sebelum membuat iptables yang berjalan mulai dari linux kernel 2.4.x sampai sekarang, proyek tersebut sudah membuat aplikasi ipchains untuk kernel 2.2.x dan aplikasi ipfwadm untuk kernel 2.0.x. Saat ini, banyak distro-distro besar sudah memaketkan firewall di dalam distro mereka sehingga memudahkan kita untuk menginstal iptables ke dalam sistem kita. Pada tutorial kali ini kita akan menggunakan distro Centos 5.4. Tutorial iptables pada artikel ini hanya menjelaskan tentang dasar-dasar iptables saja dan aplikasi iptables pada jaringan lokal saja.

III. Perintah-Perintah Iptables

Untuk melihat apakah di dalam sistem kita sudah terinstal paket-paket iptables, ketikkan perintah berikut:
# rpm -qa | grep iptables
Jika memang belum terinstal, ketikkan perintah berikut:
# yum -y install iptables*
Agar iptables dapat berjalan otomatis setelah restart, gunakan perintah:
# chkconfig iptables on
Untuk melihat status iptables, gunakan perintah:
# service iptables status
Untuk menyalakan iptables, gunakan perintah:
# /etc/init.d/iptables start
Untuk mematikan iptables, gunakan perintah:
# /etc/init.d/iptables stop
Untuk merestart iptables, gunakan perintah:
# /etc/init.d/iptables restart

Sebelum melangkah lebih lanjut, pastikan firewall di sistem kita di enable yaitu dengan cara ketik setup lalu pilih Firewall configuration. Setelah itu, pada bagian Security Level beri tanda bintang pada item Enabled lalu pilih tombol OK.


IV. Sintaks Iptables

Secara umum, sintaks iptables dapat dituliskan seperti berikut:
# iptables [-t table] command [match] [target/jump]
Penjelasan dari sintaks di atas dapat dijelaskan di bawah ini:

1. Table
IPTables memiliki beberapa buah tabel yaitu NAT, MANGLE, dan FILTER. Penjelasannya adalah:
a. Table Mangle: tabel yang bertanggung jawab untuk melakukan penghalusan (mangle) paket seperti merubah quality of service (QOS), TTL, dan MARK di header TCP. Biasanya tabel ini jarang digunakan di lingkungan SOHO.

b. Table Filter: yaitu tabel yang bertanggung jawab untuk pemfilteran paket. Tabel ini mempunyai 3 rantai (chain) yaitu:
1. Rantai Forward yaitu rantai yang memfilter paket-paket yang akan ke server yang dilindungi oleh firewall. Rantai ini digunakan ketika paket-paket datang dari IP Publik dan bukan dari IP lokal.
2. Rantai Input: yaitu rantai yang memfilter paket-paket yang ditujukan ke firewall.
3. Rantai Output: yaitu rantai yang memfilter paket-paket yang berasal dari firewall.

c. Tabel NAT: yaitu rantai yang bertanggung jawab untuk melakukan Network Address Translation (NAT). NAT yaitu mengganti field asal atau alamat tujuan dari sebuah paket. Pada tabel ini terdapat 2 rantai, yaitu:
1. Rantai Pre-Routing: Merubah paket-paket NAT dimana alamat tujuan dari paket-paket tersebut terjadi perubahan. Biasanya dikenal dengan destination NAT atau DNAT.
2. Rantai Post-Routing: Merubah paket-paket NAT dimana alamat sumber dari paket-paket tersebut terjadi perubahan. Biasanya dikenal dengan source NAT atau SNAT.

Alur kerja IPTables dapat dilihat pada gambar di bawah ini:


Jalannya sebuah paket melalui gambar diatas bisa dicontohkan sebagai berikut:
1. Perjalanan Paket yang diforward ke host yang lain
a. Paket berada pada jaringan fisik (Network) dan masuk ke interface jaringan
b. Paket masuk ke rantai PREROUTING pada tabel MANGLE dan tabel NAT
c. Paket mengalami Routing apakah akan diproses oleh host lokal atau diteruskan ke host lain
d. Paket masuk ke rantai FORWARD pada tabel MANGLE dan tabel FILTER
e. Paket masuk ke rantai POSTROUTING pada tabel MANGLE dan tabel NAT
f. Paket keluar menuju ke interface jaringan
g. Paket kembali pada jaringan fisik (Network)

2. Perjalanan paket yang ditujukan bagi host lokal
a. Paket berada pada jaringan fisik (Network) dan masuk ke interface jaringan
b. Paket masuk ke rantai PREROUTING pada tabel MANGLE dan tabel NAT
c. Paket mengalami Routing
d. Paket masuk ke rantai INPUT pada tabel MANGLE dan tabel FILTER untuk mengalami proses penyaringan
e. Paket akan masuk ke proses lokal (Local Process)

3. Perjalanan paket yang berasal dari host lokal
a. Aplikasi lokal menghasilkan paket data yang akan dikirimkan melalui jaringan
b. Paket masuk ke rantai OUTPUT pada tabel MANGLE, lalu ke tabel NAT, kemudian ke tabel FILTER

c. Paket mengalami Routing
d. Paket masuk ke rantai POSTROUTING pada tabel MANGLE dan tabel NAT
e. Paket keluar menuju ke interface jaringan
f. Paket kembali pada jaringan fisik (Network)


2. command
command pada baris perintah iptables yang akan memberitahu apa yang harus dilakukan terhadap lanjutan sintaks perintah. Berikut adalah beberapa command pada iptables:

command Deskripsi
-A (--append) Menambah aturan pada akhir rantai sehingga akan dieksekusi terakhir
-D (--delete) Menghapus sebuah aturan pada rantai yang dilakukan dengan cara menyebutkan secara lengkap perintah yang ingin dihapus atau dengan menyebutkan nomor baris dimana perintah akan dihapus
-I (--insert) Memasukkan aturan pada sebuah baris rantai. Berbeda dengan perintah append, perintah insert akan menempati baris yang dimaksud dan aturan awal yang menempati baris tersebut akan digeser ke bawah
-L (--list) Menampilkan semua aturan pada sebuah tabel. Perintah ini akan dikombinasikan dengan opsi -v (verbose), -n (numeric), -x (exact), dan  --line-number

-F (--flush) Mengosongkan aturan pada sebuah chain
-N (--new-chain) Membuat rantai baru
-X (--delete-chain) Menghapus rantai yang disebutkan
-E (--rename-chain) Merubah suatu nama rantai
-P (--policy) Membuat kebijakan default pada sebuah rantai
-p (--protocol) Mengecek tipe protokol tertentu. Tanda inverse(!) berarti kecuali. Misalnya protocol ! tcp berarti kecuali tcp
-s (--source) Mencocokkan paket berdasarkan alamat IP asal. Bisa berbentuk alamat tunggal (mis:192.168.0.1) atau alamat network (mis:192.168.0.0/255.255.255.0 atau 192.168.0.0/24)
-d (--destination) Mencocokkan paket berdasarkan alamat tujuan
-i (--in-interface) Mencocokkan paket berdasarkan interface dimana paket datang dan berlaku pada rantai INPUT, FORWARD, dan PREROUTING
-o (--out-interface) Mencocokkan paket berdasarkan interface dimana paket keluar dan berlaku pada rantai OUTPUT, FORWARD, dan POSTROUTING
--sport (--source-port) Mencocokkan paket berdasarkan port asal(bisa dilihat di /etc/services). Perintah ini bisa digunakan untuk range port tertentu. Misal range antara port 22 sampai 80 bisa ditulis --sport 22-80. Jika --sport :80 berarti paket dengan port 0-80. Jika --sport 1024: berarti paket dengan port asal 1024-65535
--dport (--destination-port) Mencocokkan paket berdasarkan port tujuan. Penggunaannya sama dengan --sport
--syn Memeriksa apakah flag SYN di set dan ACK dan FIN tidak di set. Perintah ini sama dengan kita menggunakan match --tcp-flags SYN,ACK,FIN SYN. Paket dengan perintah tersebut digunakan untuk melakukan request koneksi TCP yang baru terhadap server
-m mac -mac-source Melakukan pencocokan paket berdasarkan MAC source address
-m multiport --source-port Mendefinisikan port atau port range lebih dari satu
-j (--jump)
Perlakuan yang diberikan terhadap paket-paket yang memenuhi kriteria. Setelah perintah ini ada beberapa opsi yaitu:
ACCEPT: akan mengijinkan paket
DROP: akan menolak paket
REJECT: akan menolak paket. Berbeda dengan DROP, REJECT akan memberitahukan error kesalahan kepada user pengirim sedangkan DROP tidak memberitahukan error kesalahan. Opsi untuk REJECT adalah icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreachable, icmp-net-prohibited, dan icmp-host-prohibited. Namun untuk menggunakan opsi-opsi tersebut harus diawali dengan --reject-with
RETURN: akan membuat paket berhenti melintasi aturan-aturan pada rantai dimana paket tersebut menemui target RETURN
MIRROR: fungsi utamanya adalah membalik source address dan destination address. Misalnya PC A menjalankan target RETURN kemudian komputer B melakukan koneksi http ke komputer A, maka yang muncul adalah pada browser adalah website komputer B itu sendiri
LOG: digunakan untuk menentukan tingkat log. Tingkatan log yang bisa digunakan adalah debug, info, notice,warning, err, crit, alert dan emerg. perintah -j LOG --log-prefix digunakan untuk memberikan string yang tertulis pada awalan log, sehingga memudahkan pembacaan log tersebut.
SNAT Target: Berguna untuk melakukan perubahan alamat asal dari paket (Source Network Address Translation). Target ini berlaku untuk tabel NAT pada rantai POSTROUTING, dan hanya disinilah rantai POSTROUTING. Jika paket pertama dari sebuah koneksi mengalami SNAT, maka paket-paket berikutnya dalam koneksi tersebut juga akan mengalami hal yang sama

DNAT Target: Digunakan untuk melakukan translasi field alamat tujuan (Destination Network Address Translation) pada header dari paket-paket yang memenuhi kriteria match. DNAT hanya bekerja untuk tabel NAT pada rantai PREROUTING dan OUTPUT atau rantai buatan yang dipanggil oleh kedua rantai tersebut
MASQUARADE Target: Target ini bekerja dengan cara yang hampir sama seperti target SNAT, tetapi target ini tidak memerlukan option --to-source. Target ini memang ini didesain untuk bekerja pada komputer dengan koneksi yang tidak tetap seperti dial-up atau DHCP yang akan memberi pada kita nomor IP yang berubah-ubah. Target ini hanya bekerja untuk tabel NAT pada rantai POSTROUTING
REDIRECT Target: Digunakan untuk mengalihkan jurusan (redirect) paket ke mesin itu sendiri. Target ini umumnya digunakan untuk mengarahkan paket yang menuju suatu port tertentu untuk memasuki suatu aplikasi proxy, lebih jauh lagi hal ini sangat berguna untuk membangun sebuah sistem jaringan yang menggunakan transparent proxy. Contohnya kita ingin mengalihkan semua koneksi yang menuju port http untuk memasuki aplikasi http proxy misalnya squid. Target ini hanya bekerja untuk tabel NAT pada rantai PREROUTING dan OUTPUT atau pada rantai buatan yang dipanggil dari kedua rantai tersebut.



Memang banyak sekali dan bisa menjadi sangat sangat kompleks teknik konfigurasi iptables. Pada kesempatan ini kita hanya mencoba melakukan konfigurasi firewall / iptables yang sederhana saja.


V. Connection Tracking

iptables mengandung sebuah modul yang mengijinkan para administrator untuk memeriksa dan membatasi service-service yang tersedia pada sebuah jaringan internal menggunakan sebuah metode yang disebut connection tracking. Fitur ini merupakan fitur baru di dalam firewall yang ditambahkan sejak kernel 2.4.x. Kemampuan dari connection tracking adalah untuk menyimpan dan menjaga informasi koneksi seperti koneksi baru atau koneksi yang sudah ada yang disertai dengan jenis protokol, alamat IP asal dan alamat IP tujuan. Dengan menggunakan fitur ini, para administrator dapat menolak atau mengijinkan berbagai macam koneksi.  Connection tracking mempunyai beberapa keadaan:

- NEW --> Sebuah klien mereques koneksi melalui firewall. Maksudnya server1 menghubungi server2 dengan mengirimkan paket SYN (Synchronize)
- RELATED --> Sebuah koneksi yang mereques sebuah reques baru tetapi masih merupakan bagian dari koneksi yang sudah ada. Maksudnya server2 menerima paket SYN dari server 1 dan kemudian merespon dengan sebuah paket SYN-ACK (Synchronize-Acknowledgment)
- ESTABLISHED --> Sebuah koneksi yang merupakan bagian dari koneksi yang sudah ada. Maksudnya server 1 menerima paket SYN-ACK dan kemudian merespon dengan paket ACK (Acknowledgment).
- INVALID --> Sebuah keadaan dimana tidak ada keadaan seperti 3 keadaan di atas

Untuk lebih jelasnya perhatikan contoh dibawah ini:
Misalnya kita ingin menggunakan service ftp pada IP=132.456.78.9, maka pada saat kita mengetikkan
# ftp 132.456.78.9
perintah tersebut akan membuka koneksi baru (NEW)
Lalu pada saat kita ingin mengambil sebuah file dari IP tersebut, misalnya paket yang bernama file.tar.gz, maka pada saat kita mengetikkan:
ftp> get file.tar.gz
itu berarti kita telah membuat keadaan koneksi ESTABLISHED.
Jika kita menggunakan sebuah koneksi ftp pasif, dimana port koneksi clien adalah 20 tetapi port transfer menggunakan port 1024 atau yang lebih besar, maka pada saat kita mengetikkan
ftp> pass
Passive mode on
kita harus menggunakan keadaan koneksi RELATED pada firewall jika kita mengijinkan akses ftp secara pasif.
Fungsi lain dari connection tracking yaitu ketika kita sudah mendefinisikan sebuah rule di chain tertentu, maka trafik network yang terkait dengan rule tersebut tidak perlu disebutkan lagi. Misalnya kita ingin menolak ssh dari sebuah IP, maka kita cukup mendefinisikan rule tersebut di chain INPUT saja, yang di outputnya tidak perlu lagi. Caranya adalah:

# iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -I OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

Di bawah ini adalah contoh iptables untuk mengijinkan service ssh dengan IP 132.456.78.9 masuk dan keluar serta hanya mengijinkan koneksi baru dan establlished untuk service ssh tersebut.

# iptables -A INPUT -p tcp -s 0/0 --sport 513:65535 -d 64.67.33.76 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -p tcp -s 132.456.78.9--sport 22 -d 0/0 --dport 513:65535 -m state --state ESTABLISHED -j ACCEPT


VI. Contoh-Contoh

Ada dua pendekatan di dalam Iptables yaitu pendekatan positif dan pendekatan negatif. Pendekatan positif yaitu dimana seluruh port ditutup sedangkan pendekatan negatif yaitu dimana seluruh port dibuka. Untuk melihat apakah sistem iptables kita menggunakan pendekatan positif atau negatif (namun, pada umumnya linux secara default menggunakan pendekatan negatif) ketikkan iptables -L dan lihat kata setelah kata POLICY. Jika ada kata ACCEPT maka berarti pendekatan yang digunakan adalah negatif. Di tutorial ini kita akan menggunakan pendekatan negatif. Berikut adalah contoh-contohnya:

1. Memblok paket yang datang dari sebuah IP
# iptables -I INPUT -s 192.168.0.149 -j REJECT
Perintah di atas digunakan untuk memblok paket dari IP 192.168.0.149. Ada 2 opsi yang digunakan sebenarnya yaitu DROP dan REJECT. Perbedaan dari keduanya adalah kalau REJECT, perintah ini akan memblok paket namun akan memberitahukan bahwa paket tersebut ditolak. Sedangkan kalau DROP, perintah ini akan memblok paket namun tidak diberitahu apakah paket tersebut ditolak atau tidak.
# iptables -I INPUT 10 -s 192.168.0.149 -j REJECT
Perintah di atas hampir sama dengan perintah sebelumnya hanya saja perintah ini memasukkan perintah ini pada baris ke 10 dari rantai INPUT. Sedangkan pada perintah sebelumnya perintah iptables akan dimasukkan ke baris paling atas ari rantai INPUT.

# iptables -A INPUT -s 192.168.0.149 -j REJECT 
Perintah di atas juga sama yaitu menambahkan perintah iptables ke dalam rantai INPUT. Hanya saja perbedaan dengan perintah-perintah sebelumnya, perintah ini memasukkan perintah iptables ke bagian paling bawah dari rantai INPUT.

2. Menghapus iptables
 
#  iptables -D INPUT 3
Menghapus iptables pada tabel input di baris ke 3

# iptables -F
Menghapus seluruh iptables

# iptables -F FORWARD
Menghapus seluruh iptables yang hanya berada di tabel forward

3. Menutup Port
# iptables -A INPUT -p tcp  --dport 22 -j REJECT
Perintah di atas memblok port 22 yang biasa digunakan untuk ssh

# iptables -A INPUT -p tcp -i eth0 --dport 23 -j REJECT
Perintah di atas memblok port 22 yang biasa digunakan untuk telnet
# iptables -I INPUT -s 192.168.0.250 -p tcp --dport 23 -j REJECT
Perintah di atas untuk memblok service telnet dari IP 192.168.0.250
 
4. Melihat tabel iptables
# iptables -L 
Perintah di atas digunakan untuk melihat daftar (list) iptables

#  iptables -L --line-number
Perintah di atas digunakan untuk melihat daftar (list) iptables dan disertai dengan nomor baris

# iptables -L -v --line-number
Perintah di atas digunakan untuk melihat daftar (list) iptables dan disertai dengan nomor baris serta dengan mode verbose
 # iptables -L -v --line-number -t nat
Perintah di atas digunakan untuk melihat daftar (list) iptables dan disertai dengan nomor baris dengan mode verbose serta menampilkan tabel NAT

5. Mengubah Policy
# iptables -P INPUT DROP 
Mengubah chain INPUT menjadi DROP
# iptables -P OUTPUT DROP
Mengubah chain OUTPUT menjadi DROP
# iptables -P FORWARD DROP
Mengubah chain FORWARD menjadi DROP

6. Lain-Lain
# iptables -A INPUT -m mac -mac-source 00-14-85-47-85-E5
Memblok komputer yang mempunyai mac address
00-14-85-47-85-E5
# iptables -A INPUT -p tcp -m multiport --source-port 22,53,80 
Memblok port-port 22,53, dan 80

7. Menggunakan Log
Untuk menggunakan log di dalam iptables, maka kita harus menambahkan skrip di file file syslog.conf pada folder /etc. Di dalam skrip tersebut, tambahkan skrip sebagai berikut:
kern.*                                                  /var/log/firewall.log
Setelah itu, simpan file tersebut dan restart syslog dengan cara:
# service syslog restart
Dengan demikian, segala hal yang terjadi pada iptables akan dicatat di /var/log/firewall.log

Penentuan posisi log juga berpengaruh terhadap pencatatan log itu sendiri. Sebaiknya posisi log ditempatkan di baris paling atas karena akan mencatat segala yang terjadi pada paket-paket sebelum paket-paket tersebut diperlakukan sesuai dengan rule yang ada di dalam iptables. Untuk lebih jelasnya, perhatikan contoh berikut. Kita akan membuat server linux di vmware dengan 2 ethernet. eth0 dengan IP 192.168.0.248 dan eth1 dengan IP 192.168.2.2. Lalu di iptables kita buat aturan sebagai berikut:
# iptables -P INPUT DROP
# iptables -I INPUT -s 192.168.0.1 -d 192.168.0.248 -j ACCEPT
# iptables -A INPUT -p ALL -m state --state NEW -j LOG --log-prefix "IPTABLES: (INPUT-REJECT)"
# iptables -A INPUT -i eth1 -j REJECT

Perintah pertama dapat dijelaskan bahwa policy default untuk rantai INPUT adalah DROP yang berarti akan memblok seluruh inputan. Perintah iptables kedua akan menerima inputan dari IP 192.168.0.1 dengan tujuan IP 192.168.0.248. Perintah iptables ketiga akan mencatat seluruh inputan yang mencoba masuk ke server selain yang sudah ditentukan.  Perintah iptables keempat akan memblok seluruh inputan yang menuju eth1 atau yang ber- IP 192.168.2.2.  Sekarang coba ping 192.168.0.248 dari komputer yang ber-IP 192.168.0.1, dan akan terlihat hasil sebagai berikut:


Dan kalau kita lihat di log firewall di /var/log/firewall akan terlihat tidak ada aktivitas apa-apa di dalam file tersebut. Tetapi pada saat kita menge-ping 192.168.2.2, maka akan terlihat gambar seperti di bawah ini:


Itu berarti IP tersebut di blok. Sekarang lihat di log firewall, seharusnya akan terlihat gambar berikut ini:


Contoh yang lain lagi misalnya kita mempunyai IP publik yang ada di eth1 dan kita ingin memblok seluruh IP publik yang ada untuk mengakses IP publik kita, namun kita juga ingin mengetahui IP-IP mana saja yang mengakses IP Publik kita maka sintaksnya seperti berikut:
# iptables -I INPUT -p All -i eth1 -s ! 192.168.0.0/24 -m state --state NEW -j LOG --log-prefix "IPTABLES: (INPUT-REJECT) "
# iptables -A INPUT -i eth1 -s ! 192.168.0.0/24 -j REJECT

Sintaks di atas dapat dijelaskan bahwa seluruh IP akan ditolak namun hanya IP-IP publik saja yang akan di catat dalam log.

8. Membackup dan merestore iptables
Jika kita sudah mengatur konfigurasi iptables, maka sebaiknya kita langsung menyimpan iptables tersebut. Karena jika tidak, konfigurasi iptables kita akan hilang jika server kita restart atau kita menggunakan perintah restart iptables dan kita harus menyusunnya kembali. Berikut adalah langkah-langkah untuk menyimpan iptables:
 # service iptables save
Maka perintah-perintah iptables akan disimpan di file iptables pada folder /etc/sysconfig. Jika misalnya kita sudah menyimpan iptables yang sudah kita konfigurasi sebelumnya, maka jika server kita restart atau iptables kita restart maka iptables kita bisa terestore secara otomatis. Untuk merestore iptables yang sudah kita simpan sebelumnya, maka ketikkan perintah:
 # service iptables restart
maka iptables yang sudah kita simpan akan terestore kembali.

VII. Catatan Untuk membuat IPtables

Jika kita ingin membuat sebuah rule di iptables, maka kita harus mengerti tujuan dari rule yang kita buat sendiri. Setelah itu, kita baru membuat rule-rule tersebut menurut sintaks yang sudah ditetapkan iptables. Jika sudah, kita harus melakukan beberapa pengujian. Uji apakah port-port yang ditutup masih dapat diakses atau tidak. Jika port yang sudah ditutup sudah tidak dapat diakses, berarti aturan yang kita terapkan sudah berjalan dengan baik. Begitu juga dengan port atau service yang dibuka oleh iptables. Jika semua berjalan sesuai dengan apa yang kita inginkan maka sebaiknya segera disimpan iptables tersebut.

Iptables sendiri merupakan tools yang sangat kompleks dan memiliki banyak kemampuan. Pada intinya, sesuaikan saja kebutuhan yang ingin kita terapkan dalam jaringan kita, kemudian gunakan option IPtables yang sesuai dengan kebutuhan kita.

 

Referensi:


Membuat Server DNS dengan chroot di Centos 5



altI. PENDAHULUAN

DNS (Domain Name System) adalah sebuah sistem yang menjaga informasi tentang nama host (hostname) dan juga nama domain (domain name) dalam bentuk database tersebar (distributed database) pada jaringan komputer. Dengan DNS, sebuah alamat IP dapat dipetakan ke dalam hostname dan domain name yang lebih mudah diingat oleh manusia. Adalah lebih mudah bagi kita untuk mengingat nama www.google.com dibandingkan dengan 66.249.89.99. DNS ditemukan oleh Paul Mockapertis pada tahun 1983.Ada beberapa metode untuk membuat server DNS, namun dalam tutorial ini akan dijelaskan cara membuat server DNS menggunakan BIND karena aplikasi BIND merupakan aplikasi terpopuler dalam membuat server pada saat ini dan dengan asumsi bahwa paket BIND sudah ada di dalam sistem.

II. Istilah-istilah Pada DNS

• RR atau Resource Records adalah kumpulan sumber informasi yang berhubungan dengan nama-nama domain.
Namespace adalah struktur dari seluruh DNS yang berbentuk pohon terbalik
Nameserver adalah program-program yang menyimpan informasi tentang namespace domain.
• TLD or Top-Level Domain adalah level domain paling atas dibawah root (“.”). Contoh dari TLD adalah .com, .net, .org, dan sebagainya.
Delegation atau delegasi adalah memberikan sbuah tanggung jawab kepada sebuah subdomain untuk mengatur dirinya sendiri.
Registry adalah sebuah organisasi yang bertanggung jawab untuk menjaga file-file data di TLD dan mendelegasikannya ke setiap subdomain dari TLD itu. Contoh Verisign untuk mengelola TLD .com dan .net.
Registrar adalah sebuah organisasi yang bertindak sebagai antar muka (interface) antara pelanggan dan registry atau lebih dikenal dengan nama ISP. Contohnya idwebhost.
Registration adalah proses dimana pelanggan memberitahukan ke sebuah registrar untuk mendelegasikan sebuah subdomain kepadanya.
Zone atau zona adalah sebuah daerah yang mencakup sebuah domain utuh atau hanya sebagian saja.

III. BIND

BIND singkatan dari Berkeley Internet Name Domain yang ditulis oleh Kevin Dunlap untuk BSD UNIX 4.3 Berkeley. Pada umumnya, setiap distro linux mempunyai paket BIND, tetapi jika kita tidak menemukan paket BIND dalam distro linux, kita bisa mendapatkan BIND versi terakhir di sini. Di Centos 5, versi terakhir dari BIND adalah versi 9. Pada paket ini, BIND menyertakan paket chroot untuk meningkatkan keamanan server DNS. ada beberapa file penting di dalam BIND yang harus diperhatikan, yaitu:
a. named.conf --> File konfigurasi utama untuk membuat DNS dan digunakan sebagai referensi untuk menentukan prosedur server DNS
b. named.ca --> Digunakan untuk menangani informasi server DNS root yang diperlukan untuk menginisialisasi cache dari domain server DNS internet yang disediakan oleh layanan registrasi interNIC. Di centos 5, file ini tidak ada sehingga harus di download dari sini (hasil download akan bernama named.root, namun kita akan merubah menjadi named.ca).
c. resolv.conf --> Berisi alamat domain atau alamat IP dari nameserver (biasanya IP ISP)
d. Zona forward --> Memetakan domain name ke alamat IP
e. Zona Reverse --> Memetakan alalamt IP ke domain name


III. CARA KERJA DNS

Untuk memahami bagaimana DNS itu bekerja, lihat gambar berikut ini:

alt

• Misal kita mau mengecek email kita di warnet dan dibrowser kita ketikkan http://mail.yahoo.com.
• Setelah itu PC kita akan mengontak server DNS lokal (Jaringan ISP yang terhubung ke warnet itu) untuk menanyakan alamat IP dari http://mail.yahoo.com. (Panah 1)
• Server DNS lokal akan melihat ke dalam memori cachenya (Panah 2)
• Jika data itu ada di cachenya, server tersebut akan memberikan alamat IP ke browser PC kita (Panah 5). Jika tidak, maka server tersebut mengontak server DNS di atasnya untuk mengetahui alamat IP tersebut.
• Jika domain itu benar-benar ada, maka root DNS akan mendapatkan alamat IP tersebut, kemudian akan dikirimkan ke server DNS lokal kita (Panah 3).
• Server DNS lokal akan mengontak server DNS mail.yahoo.com untuk menanyakan alamat IP-nya, dan server mail.yahoo.com akan mengirimkannya ke server DNS lokal kita (Panah 4).
• Server DNS lokal kita akan memberitahukan alamat IP untuk mail.yahoo.com kepada browser PC kita.
• Kemudian PC kita akan menggunakan alamat IP tersebut untuk mengontak mail.yahoo.com


IV. Persiapan nama domain

Kita akan membuat domain baru untuk server DNS, mail server dan webserver.
Domain name: example.com
DNS server name: ns1.example.com
IP DNS server: 192.168.1.2
Mail server name:mail.example.com
HTTP serever: www.example.com


V. Konfigurasi BIND

1. Cek paket BIND

Cek paket BIND di sistem kita, apakah sudah ada atau belum dengan cara:
# rpm -qa | grep bind 


alt

2. Konfigurasi rndc key

rndc key digunakan untuk mengendalikan operasi dari server DNS. Asalnya, rndc key sudah tersedia di dalam paket BIND. Kita bisa menggunakan apakah menggunakan yang sudah tersedia atau membuat yang baru. Jika kita ingin membuat RNDC key yang baru, maka berikan perintah:
# cd /var/named/chroot/etc/
# rndc-confgen > rndc.key
Setelah itu lihat file rndc.key dan akan berbentuk seperti ini:

alt

Hapuslah dari baris options sampai selesai dan salin bagian yang tidak dihapus untuk ditaruh di file named.conf.

3. Konfigurasi named.conf

Sesudah mengkonfigurasi rndc.key, kita harus memasukkan file rndc.key dan menyalin

Key “rndc.key” {
………………… };

Maka sesudah itu kita harus membuat file named.conf di direktory yang sama dengan cara:

# vi named.conf
dan menambahkan seperti berikut:

// mulai named.conf
    //kita masukkan rndc.key (copy-paste dari rndc.key yang baru dibuat)

key "rndckey" {
…………………………………………
};

// kita asumsikan server kita mempunyai IP 192.168.1.2 yang melayani 192.168.1.0/24
controls {
inet 192.168.1.2 allow { 192.168.1.0/24; } keys { "rndckey"; };
};

options {
directory "/var/named";
pid-file "/var/run/named/named.pid";

/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
query-source address * port 53;

// so people can't try to guess what version you're running
version "REFUSED";

allow-query {
any; };
};

server 192.168.1.2 {
keys { rndckey; };
};

zone "." IN {
type hint;
file "data/named.ca";
};

// Kita asumsikan dns server kita adalah example.com
zone "example.com" IN {
type master;
file "data/example.com.zone";
allow-update { none; };
};

// Kita asumsikan bahwa zona reverse kita adalah 1.168.192
zone "1.168.192.in-addr.arpa" IN {
type master;
file "data/1.168.192.zone";
};
// end of named.conf

4. Konfigurasi zona forward

Sesudah kita mengkonfigurasi named.conf kita harus membuat forward zone di dengan cara
# vi /var/named/chroot/var/named/data/example.com.zone
dan mengkonfigurasinya seperti ini:

$TTL 38400      ; 10 hours 40 minutes
@                          IN SOA  ns1.example.com. admin.example.com. (
                                                2007020400 ; serial
                                                180        ; refresh (3 minutes)
                                                360        ; retry (6 minutes)
                                                604800     ; expire (1 week)
                                                86400      ; minimum (1 day)
                                                                       )
                                NS     ns1.example.com.
                                A      192.168.1.2
                                MX     10 mail.example.com.
ftp                      IN   CNAME   ns1
mail                     IN   CNAME   ns1
ns1                     IN   A       192.168.1.2
www                   IN   CNAME   ns1

Penjelasan singkat:

TTL (Time to Live) --> Panjang waktu nameserver untuk menyimpan sebuah record. Jika TTL berakhir, nameserver harus membuang data yang tersimpan dan mendapatkan data baru dari nameserver otoritative

SOA (Start of Authority) --> Mengindikasikan otoritas untuk zona ini

IN (Internet Name) --> Digunakan jika menggunakan protokol TCP/IP

ns1.example.com --> Hostname yang bertanggungjawab untuk domain example.com

admin.example.com --> Alamat email administrator

serial --> Nomor serial yang akan bertambah jika data berubah, biasanya ditulis dengan format YYMMDDxx

refresh --> Panjang waktu untuk server secondary untuk mengecek perubahan di server primer

retry --> Panjang waktu untuk server secondary untuk menunggu verifikasi terhadap perubahan di server primer jika server primer tidak memberikan respon ketika refresh

expire --> Panjang waktu untuk secondary server untuk menahan zona file jika server secondary tidak melakukan keadaan refresh

@ --> Bagian ini identik dengan dengan zona yang didefinisikan di named.conf dan bisa digantikan dengan nama DNS (misal: example.com)

NS (Name Server) --> Digunakan untuk mendefinisikan sever hostname DNS dan harus diakhiri dengan tanda titik.

minimum ttl --> Menentukan nilai ttl untuk seluruh record di zona forward

IN NS ns1.example.com --> Mendefinisikan bahwa hostname ns.example.com yang memegang tanggung jawab terhadap domain example.com

IN MX 10 mail.example.com --> M
endefinisikan bahwa hostname mail.example.com yang memegang tanggung jawab sebagai mail server di domain example.com. nomor mewakili prioritas ketika pengiriman surat dan nomor kecil menjadi prioritas utama

ns IN A 192.168.1.2 --> Mengecek bahwa hostname ns.example.com mempunyai alamat IP di 192.168.1.2

mail IN CNAME NS --> Mengecek bahwa hostname ns.example.com mempunyai nama lain (name alias) mx.example.com

5. Konfigurasi zona reverse

Sesudah mengkonfigurasi zona forward, kita harus membuat zona reverse di dalam direktori yang sama dan mengkonfigurasinya seperti ini:
 # vi /var/named/chroot/var/named/data/1.168.192.zone 
dan mengkonfigurasinya seperti ini:
$TTL 38400      ; 10 hours 40 minutes
@                          IN SOA  ns1.example.com. admin.example.com. (
                                                2007020404 ; serial
                                                180        ; refresh (3 minutes)
                                                360        ; retry (6 minutes)
                                                604800     ; expire (1 week)
                                                86400      ; minimum (1 day)
                                                                       )
                                    NS     ns1.example.com.
2                              IN PTR    arfie.example.com


penjelasan singkat:

2 IN PTR arfie.example.com --> mengecek bahwa hostname arief.example.com mempunyai alamat IP di 192.168.1.2

sisanya sama dengan zona forward

6. Konfigurasi resolve.conf

Kita harus mengkonfigurasi file resolve.conf di /etc/resolv.conf dan mengkonfigurasinya seperti ini:
nameserver 192.168.1.2

7. Menambahkan named.ca

Setelah mendownload named.root, maka ubahlah namanya menjadi named.ca dengan cara
# mv named.root named.ca
lalu pindahkan file ini ke /var/named/chroot/var/named/data
# mv named.ca /var/named/chroot/var/named/data

8. Menyalakan Server DNS

Sesudah mengkonfigurasi server DNS, kita harus mengecek apakah server DNS kita sudah bekerja atau belum. Gunakan perintah ini:
# service named start

9. Mengecek server DNS

Gunakan nslookup atau dig untuk mengecek server DNS

# nslookup example.com

alt

# dig example.com

alt

VI. Troubleshooting

Mungkin apabila kita pertama kali membuat server DNS, akan banyak error yang terjadi. Biasanya, error akan langsung muncul setelah kita mencoba menyalakan DNS. Tapi, terkadang error itu tidak muncul dan DNS kita tidak bekerja. Untuk itu, lihatlah di file /var/log/messages sehingga kita bisa mengidentifikasi error apa dan bagaimana cara menghilangkan error itu. Di bawah ini ada beberapa solusi untuk menghilangkan error-error yang terjadi ketika membuat server DNS:


1. File tidak ada

Error:
xxxxxxxxxx: file not found

Solusi:
Kita memasukkan zona forward atau reverse ke direktory yang salah yang tidak sama dengan parameter yang ada di file named.conf atau bisa juga kita salah dalam membuat nama zona forward atau reverse yang tidak sama dengan parameter yang ada di file named.conf. Maka dari itu, pastikan bahwa nama file baik itu zona forward maupun zona reverse sesuai dengan yang ada di file named.conf. Dan juga pastikan bahwa, file-file tersebut sesuai dengan apa yang ada di file named.conf.


2. Non existent Domain

Error:
*** xxx can't find xxx: Non-existent domain

Solusi:
Cek di zona reverse apakah kita sudah memberi pointer kepada file itu. Jika belum, buatlah pointer seperti pada bagian diatas (Konfigurasi Zona Reverse).

3. Refused

Error:
** server can't find ****: REFUSED

Solusi:
Ganti IP DNS di /etc/resolv.conf

Referensi:

http://www.wains.be
Wagito, Jaringan Komputer Teori dan Implementasi Berbasis Linux, Penerbit Gava Media

Monitoring Squid Proxy Menggunakan sqstat, SARG, dan Lightsquid


I. Pendahuluan

Pada tutorial sebelumnya sudah dijelaskan tentang apa itu squid dan bagaimana cara mengkonfigurasinya di Linux (Centos 5.2). Dan juga sudah dijelaskan tentang bagaimana cara kita agar sebuah jaringan harus melewati sebuah proxy yang sudah kita buat. Pada bagian terakhir pada tulisan itu dijelaskan pula bagaimana cara memonitor user-user tersebut yang melewati proxy yaitu dengan menuliskan perintah:
# tail -f /var/log/squid/access.log
Namun perintah tersebut sangat tidak manusiawi karena hasil yang ditampilkan terlalu cepat untuk diikuti. Oleh karena itu di dalam tutorial kali ini akan dijelaskan tentang 3 buah tool untuk memonitor proxy server squid yang sangat manusiawi. Ketiga buah tool tersebut adalah sqstat, SARG dan lightsquid dan ketiga aplikasi tersebut akan diinstal di centos 5.2

A. sqstat

sqstat adalah sebuah aplikasi yang dibuat oleh Alex Samorukov. Aplikasi ini berfungsi untuk memonitor squid secara real time sehingga kita bisa melihat secara langsung IP berapa yang sedang mendownload dan lain sebagainya. Untuk menginstal sqstat ke dalam sistem kita, maka ikuti langkah-langkah berikut ini:
1. Download paket
Download paket sqstat di sini.
2. Ekstrak Paket
# gunzip sqstat-1.20.tar.gz
# tar -xvf sqstat-1.20.tar
3. Pindah Folder ke webserver
# mv sqstat-1.20 /var/www/html/; cd /var/www/html
4. Merubah Nama
# mv sqstat-1.20 sqstat 
5. Konfigurasi sqstat
# cd sqstat
# cp config.inc.php.defaults config.inc.php
# vi config.inc.php
 
Di dalam file config.inc.php, rubah ip address dan port squid kita. Di sini, penulis memasukkan ip dan port squid penulis:
/* Squid proxy server ip address or host name */
 $squidhost[0]="192.168.0.250";  /* Squid proxy server port */
 $squidport[0]=3128;
Setelah itu kita akan merubah file squid.conf
# vi /etc/squid/squid.conf
Di dalam file tersebut, tambahkan skrip berikut ini:
 acl manager proto cache_object
 acl webserver src 192.168.0.250/255.255.255.255
 http_access allow manager webserver
 http_access deny manager
6. Restart Webserver
# service httpd restart 
7. Tes sqstat
Buka browser lalu ketikkan:
 http://alamat_ip/sqstat
Maka akan ada tampilan sebagai berikut:



Rubahlah Auto refresh dari nilai 0 menjadi 5 agar aplikasi ini dapat refresh setiap 5 detik lalu tekan tombol Update.
6. Troubleshooting
Umumnya error yang terjadi adalah pada saat pengetesan sqstat di browser yaitu ada pernyataan error:

SqStat error
Error (1): Cannot get data. Server answered: HTTP/1.0 403 Forbidden


Hal ini dikarenakan kita salah menempatkan skrip: http_access deny manager di file squid.conf. Tempatkanlah skrip tersebut dibagian paling bawah pada item http_access. 

Jika tidak ada tampilan gambar seperti di atas, tetapi hanya berupa list saja pada browser, maka ketikkan:
# mv sqstat.php index.php

B. SARG

SARG atau Squid Analysis Report Generator merupakan sebuah aplikasi yang dibuat oleh Pedro Lineu Orso yang bertujuan untuk melihat dan merekam aktivitas user selama berada di internet. Aplikasi ini sangat lengkap sehingga kita bisa melihat situs-situs apa yang dikunjungi oleh user, berapa bandwidth yang terpakai, dan sebagainya. Untuk menginstal aplikasi ini ke dalam sistem, berikut adalah langkah-langkahnya:
1. Download paket
Download paket SARG di sini.
2. Ekstrak Paket
# tar -zxvf sarg-2.2.5.tar.gz
 # cd sarg-2.2.5
3. Instalasi SARG
# ./configure
 # make
 # make install
4. Konfigurasi SARG
 # cd /usr/local/sarg/
 # cp sarg.conf sarg.conf.ori
 # vi sarg.conf
Di file ini, rubahlah konfigurasi sarg sesuai dengan kebutuhan. Di bawah ini adalah konfigurasi sarg penulis:
 language English
 access_log /usr/local/squid/var/logs/access.log
 graphs yes
 graph_days_bytes_bar_color orange
 title "Squid User Access Reports"
 font_face Tahoma,Verdana,Arial
 header_color darkblue
 header_bgcolor blanchedalmond
 font_size 9px
 header_font_size 9px
 title_font_size 11px
 background_color white
 text_color #000000
 text_bgcolor lavender
 title_color green
 logo_image none
 logo_text ""
 logo_text_color #000000
 image_size 80 45
 background_image none
 password none
 temporary_dir /tmp
 output_dir /var/www/html/squid-reports
 output_email none
 resolve_ip no
 user_ip yes
 topuser_sort_field BYTES reverse
 index yes
 use_comma no
 long_url yes
 
5. Generate SARG
Untuk menjalankan SARG, maka ketikkan perintah di bawah ini untuk men-generate SARG:
# /usr/bin/sarg -l /var/log/squid/access.log
Maka secara ototmatis di dalam folder /var/www/html ada folder baru yang bernama squid-reports.
6. Restart Webserver
# service httpd restart
7. Melihat SARG
Untuk melihat tampilan SARG, maka ketikkan perintah berikut di browser:
http://alamat_ip/squid-reports
maka akan ada tampilan sebagai berikut:



Klik item yang berada pada kolom FILE/PERIOD, maka akan ada tampilan sebagai berikut:


Jika sudah ada tampilan seperti itu, maka SARG sudah berhasil diinstalasi di dalam sistem.

7. Penjadwalan Generate SARG
Untuk men-generate SARG, kita harus mengetikkan di dalam konsol perintah seperti berikut:  
# /usr/bin/sarg -l /var/log/squid/access.log
Namun, alangkah capeknya jika kita mengetikkan perintah tersebut secara manual. Maka dari itu kita menggunakan crontab untuk melakukan eksekusi otomatis. Misalnya kita ingin agar setiap 1 jam sekali perintah di atas dieksekusi secara otomatis oleh sistem, maka terlebih dahulu kita membuat skrip misalnya di folder /home dengan nama sarg.txt dan tambahkan skrip berikut:
#!/bin/bash
  /usr/bin/sarg -l /var/log/squid/access.log
Setelah itu, berikan perintah agar skrip tersebut dapat dieksekusi:
# chmod +x sarg.txt
Setelah itu kita konfigurasi crontab-nya:
# crontab -e
tambahkan skrip berikut:
0 * * * * /home/sarg.txt
Dan setelah itu sistem akan men-generate SARG secara otomatis.

C. lightsquid

Lightsquid merupakan aplikasi monitoring squid yang mempunyai fungsi yang sama dengan SARG. Aplikasi ini menggunakan bahasa perl untuk men-generatenya. Maka dari itu ceklah di dalam sistem apakah sudah ada paket-paket perl atau belum dan jika sudah ada, paket perl versi berapa karena ada penambahan skrip perl versi tertentu yang akan dibahas nanti.
# rpm -qa | grep perl
 # perl -v
Untuk menginstal lightsquid ke dalam sistem kita, maka ikuti langkah-langkah berikut:
1. Download paket
Download paket lightsquid di sini.
2. Ekstrak ke Webserver
# tar -zxvf lightsquid-1.7.1.tgz -C /var/www/html/; cd /var/www/html
3. Merubah Nama Folder
#  mv lightsquid-1.7.1/ lightsquid
4. Konfigurasi lightsquid
 # cd lightsquid
 # cp lightsquid.cfg lightsquid.cfg.ori
 # vi lightsquid.cfg
Di dalam file ini, rubahlah path cfgpath, tplpath, langpath, reportpath, logpath, ip2namepath yang sesuai dengan dimana folder lightsquid itu berada. Penulis menggunakan konfigurasi berikut:

#path to additional `cfg` files
$cfgpath ="var/www/html/lightsquid";
#path to `tpl` folder
$tplpath  ="/var/www/html/lightsquid/tpl";
#path to `lang` folder
$langpath ="/var/www/html/lightsquid/lang";
#path to `report` folder
$reportpath ="/var/www/html/lightsquid/report";
#path to access.log
$logpath ="/var/log/squid";
#path to `ip2name` folder
$ip2namepath ="/var/www/html/lightsquid/ip2name";
Jika sudah selesai, maka ketikan perintah berikut:
5. Merubah Mode
# chmod +x *.cgi
# chmod +x *.pl
6. Cek Setup lightsquid
Ketikkan perintah berikut untuk mengecek apakah konfigurasi lighsquid sudah benar atau belum:
# perl check-setup.pl
Jika ada tampilan seperti berikut:


Maka konfigurasi kita sudah benar.
7. Mengedit File Webserver
Setelah itu, kita mengkonfigurasi webserver yang berada di /etc/httpd/conf/httpd.conf, lalu cari skrip sebagai berikut:

    AllowOverride None
    Options None
    Order allow, deny
    Allow from all
menjadi:

    AddHandler cgi-script .cgi
    AllowOverride All
8. Generate lightsquid
Untuk men-generate lightsquid, gunakan perintah berikut:
# /var/www/html/lightsquid/lightparser.pl
9. Restart Webserver
# service httpd restart
10. Lihat lightsquid
Buka browser, lalu ketikkan
http://alamat_ip/lightsquid
maka akan ada tampilan sebagai berikut:


Klik pada item Date, maka akan muncul tampilan:


Jika sudah tampil gambar-gambar di atas, maka lightsquid sudah terinstal dalam sistem.
9. Penjadwalan Generate lightsquid
Sama seperti SARG, lightsquid bisa di generate secara otomatis menggunakan crontab. Buat dahulu filenya misalnya di /home yang bernama lightsquid.txt lalu masukkan skrip berikut:
#!/bin/bash
cd /var/www/html/lightsquid
/var/www/html/lightsquid/lightparser.pl
Dan kita ingin agar setiap 1 jam sekali sistem mengeksekusi file ini, maka masukkan di crontab:

0 * * * * /home/lightsquid.txt 
Dan jangan lupa berikan perintah:
 # chmod +x /home/lightsquid.txt
agar file tersebut dapat dieksekusi.

10. Troubleshooting

Pada umumnya error yang terjadi biasanya terlihat pada saat mengecek konfigurasi lightsquid, yaitu pada saat kita memberikan perintah:
 # perl check-setup.pl 
ada pernyataan error:
 no: GD.PM found, please install or set $graphreport=0 to disable
Error tersebut dikarenakan di dalam sistem kita tidak mempunyai paket gd yang digunakan untuk membuat tampilan grafik. Oleh karena itu, installah paket tersebut dengan menuliskan:
# yum -y install gd perl-gd

Atau jika kita tidak mau menginstal paket gd hal itu tidak menjadi masalah dan konsekwensi yang timbul hanyalah kita tidak bisa melihat tampilan grafik. Tapi kita harus mensetting di file lightsquid.cfg dan merubah nilai dari
$graphreport dari 1 menjadi 0.
Dan juga perlu diingat jika kita menggunakan perl versi 5.10, ada skrip yang harus ditambahkan di file lightparser.pl yaitu dengan merubah:
 
#extract site name
if $url =~ m/([a-z]+:\/\/)??([a-z0-9\-]+\.){1}(([a-z0-9\-]+\.){0,})([a-z0-9\-]+){1}(:[0-9]+)?\/(.*)/o;
      $site=$2.$3.$5;
      $site=$Lurl if ($site eq "");

menjadi:

#extract site name
if ($url =~ m/([a-z]+:\/\/)??([a-z0-9\-]+\.){1}(([a-z0-9\-]+\.){0,})([a-z0-9\-]+){1}(:[0-9]+)?\/(.*)/o) { $site=$2.$3.$5; } else { $site=$Lurl; }

V. Kesimpulan

Di atas, sudah dijelaskan tentang ketiga monitoring squid yang dapat digunakan. Namun, ada beberapa yang harus diperhatikan. Untuk sqstat, terkadang aplikasi ini tidak menampilkan seluruh IP yang sedang melewati proxy atau juga tidak dapat menampilkan user mana yang sedang mendownload. Maka dari itu, lengkapi pula di dalam sistem kita dengan aplikasi jnettop. Untuk SARG, kelebihannya adalah fitur yang lengkap sehingga kita mungkin merasa cukup dengan apa yang dilakukan oleh SARG. Tetapi sayangnya, aplikasi ini sangat boros memakan ruang dalam hard disk karena file-file yang digenerate berbentuk html. Pengalaman penulis, aplikasi ini mampu memakan ruang dalam hard disk sebesar kira-kira 1GB dalam sehari semalam. Berbeda halnya dengan lightsquid. Karena file-file yang dihasilkannya berbentuk txt, maka aplikasi ini tidak memakan ruang yang banyak di dalam hard disk tetapi sayangnya fiturnya dibawah SARG. Namun, penulis pikir ini adalah sebuah selera saja. Mana yang lebih mendekati selera si system administrator, maka aplikasi tersebut yang akan digunakan. Namun penulis menyarankan untuk lebih mendapatkan hasil yang akurat, selain menginstal aplikasi di atas, juga bisa ditambahkan aplikasi bwstat, dan jnettop dimana bwstat digunakan untuk melihat berapa bandwidth yang sudah dihabiskan per IP dan jnettop digunakan untuk melihat IP mana yang sedang download secara real-time. Sedangkan SARG dan lightsquid untuk melihat akumulatif bandwidth per hari.

Referensi
http://lightsquid.sourceforge.net/
http://paidjo.files.wordpress.com
http://masrifqi.web.id
http://samm.kiev.ua