linux admin mengamati log sistem -...
Post on 02-May-2019
227 Views
Preview:
TRANSCRIPT
INFOLINUX 09/200550
TUTORIAL Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
Linux Admin
Tugas sistem operasi sangatlah berat.
Selain bertugas dari sisi low level un-
tuk berbicara dengan hardware dan
mengatur proses sistem, sistem operasi juga
harus bertindak layaknya seorang mata-ma-
ta tangguh yang mencatat hampir semua hal
yang terjadi pada komputer.
Apa yang dicatat tersebut umumnya
dimulai dari proses booting, kemudian
event-event yang terjadi pada sistem ketika
beroperasi, dan catatan-catatan lainnya.
Tentu saja, karena sistem bisa berkembang
menjadi begitu kompleks, sistem operasi ti-
dak dapat mencatat semuanya sendiri. Oleh
karena beberapa program yang berfungsi
menyediakan service kemudian membantu
sistem operasi untuk turut mencatat ke log
sistem sesuai dengan tugas yang diemban-
nya. Dengan demikian, log untuk hampir
keseluruhan sistem pun dapat dicapai.
Sebenarnya, apa saja yang bisa kita laku-
kan dengan log-log tersebut? Berikut ini
adalah beberapa di antaranya:
� Troubleshooting. Tidaklah mudah untuk
melakukan troubleshooting. Apalagi pada
sistem yang kompleks. Namun setidak-
nya, dengan adanya log fi le, kita bisa
mendapatkan sedikit catatan tentang apa
yang terjadi sebelumnya. Ini diharapkan
bisa membantu kita untuk memecahkan
masalah.
� Audit keamanan. Umumnya, bicara ma-
salah keamanan, sistem operasi multiuser
seperti halnya Linux akan sangat peduli.
Segala yang berhubungan dengan tinda-
kan mengganggu hardware, mengganggu
user lain, mengganggu sis tem, menggang-
gu jaringan umumnya akan dicatat. Ad-
ministrator dapat membuat script seder-
hana untuk melihat percobaan gangguan
pada sistem. Hanya, tentu saja kita tidak
bisa selalu mengandalkan log fi le untuk
setiap percobaan gangguan. User yang
nakal (dan hebat pula) selalu ada.
� Audit service. Apabila kita mengelola
server yang menjalankan service SAMBA,
SQUID, HTTPD, dan lainnya, ban tuan
log fi le akan terasa sangat berguna. U mum -
nya, apa yang dilakukan oleh user un-
tuk meminta service memang tidak akan
dapat dicatat oleh server. Namun, penye-
dia service semacam SAMBA, SQUID dan
HTTPD akan membantu sistem de ngan
menyediakan catatan yang lebih de tail,
sekaligus melengkapi log sistem (tidak
semua service menyediakan fi tur ini).
Umumnya, satu masalah besar yang
menghambat log adalah tidak terinteg-
rasinya log fi le. Di Linux, log general untuk
sistem memang tersedia (syslog), namun,
tidak semua proses lantas memiliki hak
untuk mengubah fi le tersebut begitu saja.
Dengan demikian, beberapa aplikasi akan
memilih untuk membuat log fi le sendiri di
lokasi yang bervariasi: mulai dari home di-
rectory user saja (akan sangat menyebalkan)
sampai lokasi temporary lain. Proses-proses
semacam ini membuat log yang bahkan
dapat dihapus oleh user.
Sayangnya, kita tidak bisa memaksa
semua aplikasi untuk dapat mencatat ke
log sistem. Apa yang bisa dilakukan adalah
menjaga sebaik-baiknya, sekaligus meman-
faatkan log fi le semaksimal mungkin untuk
menjaga sistem.
Setelah ini, kita akan mulai membahas
beberapa log fi le yang dapat membantu kita
untuk melakukan troubleshooting, audit ke-
amanan dan audit service. Hampir semua fi le
log akan disimpan di direktori /var/log. An-
da akan membutuhkan hak akses root untuk
dapat membaca semua log yang dibahas di
artikel ini. Sebagai catatan, beberapa log fi le
disimpan di lokasi yang terpisah atau bahkan
tidak tersedia, tergantung pada kebijakan
distro. Distro yang menuruti standar Linux
seharusnya tidak akan menghapus atau
menggabungkan atau menyimpan ke tempat
lain log fi le tertentu. Tulisan ini dibuat pada
distro SUSE 9.3 Pro, namun seharusnya bisa
diterapkan pada distro-distro lain.
/var/log/messagesIni adalah fi le log yang sangat sangat ber-
guna. Hampir semua kejadian sistem akan
didokumentasikan di sini. Karena fi le ini
merupakan catatan hampir semua aktivi-
tas sistem, maka hanya user root dan group
root yang bisa membacanya (namun be-
berapa distro mengubahnya menjadi lebih
ketat atau lebih longgar).
File ini akan mencatat mulai proses boot-
ing sampai service. Umumnya, beberapa
service besar juga akan mencatat ke fi le log
ini, jadi, boleh dikatakan, fi le log ini memi-
liki hampir semua informasi.
Berikut ini adalah baris-baris acak dari
messages.
Jun 14 11:44:29 tbiserv0 kernel: klogd 1.4.1, log source = /proc/kmsg started.Jun 14 11:44:29 tbiserv0 kernel: ieee1394: Host added: ID:BUS[0-00:1023] GUID[000fea0000f64305]Jun 14 11:44:29 tbiserv0 kernel: hw_random hardware driver 1.0.0 loadedJun 14 11:44:29 tbiserv0 kernel:
Mengamati Log SistemHampir semua dari apa yang terjadi ketika komputer beroperasi, umumnya akan dicatat ke log file. Dengan demikian, administrator sistem dapat mengamati log untuk melihat apa saja yang sedang terjadi pada sistem, untuk kemudian dapat menindaklanjutinya sesuai dengan kebijakan yang diterapkan. Di artikel kali ini, kita akan membahas beberapa log di sistem yang mungkin akan sangat berguna dalam memecahkan masalah.
INFOLINUX 09/2005 51
TUTORIALBerita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
Linux Admin
Linux agpgart interface v0.100 (c) Dave JonesJun 14 11:44:29 tbiserv0 kernel: agpgart: Detected an Intel 865 Chipset.Jun 14 11:44:29 tbiserv0 kernel: agpgart: Maximum main memory to use for agp memory: 941MJun 14 11:44:29 tbiserv0 kernel: agpgart: AGP aperture is 128M @ 0xe8000000Jun 14 11:44:29 tbiserv0 kernel: usbcore: registered new driver usbfsJun 14 11:44:29 tbiserv0 kernel: usbcore: registered new driver hubJun 14 11:44:29 tbiserv0 kernel: ACPI: PCI interrupt 0000:00:1d.7[D] -> GSI 23 (level, low) -> IRQ 185Jun 14 11:44:29 tbiserv0 kernel: ehci_hcd 0000:00:1d.7: EHCI Host Controller......Jun 14 13:07:09 tbiserv0 squid[8307]: Accepting HTTP connections at 0.0.0.0, port 8888, FD 12.Jun 14 13:07:09 tbiserv0 squid[8307]: Accepting ICP messages at 0.0.0.0, port 3130, FD 13.Jun 14 13:07:09 tbiserv0 squid[8307]: HTCP Disabled.Jun 14 13:07:09 tbiserv0 squid[8307]: Accepting SNMP messages on port 3401, FD 14.Jun 14 13:07:09 tbiserv0 squid[8307]: WCCP Disabled.Jun 14 13:07:09 tbiserv0 squid[8307]: Ready to serve requests.Jun 14 13:07:09 tbiserv0 squid[8307]: Done scanning /var/cache/squid swaplog (0 entries)Jun 14 13:07:09 tbiserv0 squid[8307]: Finished rebuilding storage from disk.Jun 14 13:07:09 tbiserv0 squid[8307]: 0 Entries scannedJun 14 13:07:09 tbiserv0
squid[8307]: 0 Invalid entries.Jun 14 13:07:09 tbiserv0 squid[8307]: 0 With invalid flags.Jun 14 13:07:09 tbiserv0 squid[8307]: 0 Objects loaded.Jun 14 13:07:09 tbiserv0 squid[8307]: 0 Objects expired.Jun 14 13:07:09 tbiserv0 squid[8307]: 0 Objects cancelled.Jun 14 13:07:09 tbiserv0 squid[8307]: 0 Duplicate URLs purged.Jun 14 13:07:09 tbiserv0 squid[8307]: 0 Swapfile clashes avoided.Jun 14 13:07:09 tbiserv0 squid[8307]: Took 0.6 seconds ( 0.0 objects/sec).
...
...Jun 14 17:32:05 tbiserv0 nmbd[5939]: [2005/06/14 17:32:05, 0] nmbd/nmbd_become_dmb.c:become_domain_master_browser_bcast(282)Jun 14 17:32:05 tbiserv0 nmbd[5939]: become_domain_master_browser_bcast:Jun 14 17:32:05 tbiserv0 nmbd[5939]: Attempting to become domain master browser on workgroup TBI-CKG on subnet 192.168.0.1Jun 14 17:32:05 tbiserv0 nmbd[5939]: [2005/06/14 17:32:05, 0] nmbd/nmbd_become_dmb.c:become_domain_master_browser_bcast(295)Jun 14 17:32:05 tbiserv0 nmbd[5939]: become_domain_master_browser_bcast: querying subnet 192.168.0.1 for domain master browser on workgroup TBI-CKG
...
...Jun 14 17:33:38 tbiserv0 dhcpd:
DHCPREQUEST for 192.168.0.99 from 00:0f:ea:e5:6b:22 (tbi03) via eth0Jun 14 17:33:38 tbiserv0 dhcpd: DHCPACK on 192.168.0.99 to 00:0f:ea:e5:6b:22 (tbi03) via eth0
Dari baris-baris yang ditampilkan terse-
but, bisa kita lihat bahwa messages men-
catat apa yang terjadi pada kernel (umum-
nya pada saat booting atau ada perubahan
di sistem), mencatat apa yang terjadi pada
SQUID, dan mencatat yang terjadi pada
SAMBA, dan mencatat permintaan IP dari
workstation kepada DHCPD.
File ini juga mencatat yang yang terjadi
ketika Anda mengutak-atik perangkat keras
yang berpengaruh pada sistem, sebagai con-
toh, ketika kita mencabut kabel dari kartu
jaringan dan memasangnya kembali:
Jun 14 17:34:00 tbiserv0 kernel: eth0: network connection downJun 14 17:34:02 tbiserv0 kernel: eth0: network connection up using port AJun 14 17:34:02 tbiserv0 kernel: speed: 100Jun 14 17:34:02 tbiserv0 kernel: autonegotiation: yesJun 14 17:34:02 tbiserv0 kernel: duplex mode: fullJun 14 17:34:02 tbiserv0 kernel: flowctrl: symmetricJun 14 17:34:02 tbiserv0 kernel: irq moderation: disabledJun 14 17:34:02 tbiserv0 kernel: scatter-gather: enabledJun 14 17:34:02 tbiserv0 kernel: tx-checksum: enabledJun 14 17:34:02 tbiserv0 kernel: rx-checksum: enabled
Dengan banyaknya kejadian yang dicatat
oleh fi le ini, ukuran fi le akan membesar
dengan cepat. Namun, beberapa distro telah
menerapkan log rotator yang akan merotasi
log sehingga ukurannya tetap masuk akal.
Memanfaatkan log ini, Anda bisa me nge-
tahui apa yang diinginkan dengan bantuan
program grep dan menyaringnya dengan
kata kunci yang telah didefi nisikan (grep
bertingkat bisa diterapkan untuk pencarian
yang lebih akurat). Atau, Anda dapat lang-
INFOLINUX 09/200552
TUTORIAL Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
Linux Admin
sung membuka fi le log ini dan mencari de-
ngan kata kunci tersebut. Anda yang senang
membangun shell script tentunya bisa
membangun shell script sederhana untuk
membuat log ini lebih mudah dibaca.
/var/log/apache2/*Untuk Anda yang menyalakan web server
apache2, maka patut bergembira. Apache
HTTPD merupakan salah satu service yang
sangat senang mencatat kegiatan yang di-
lakukan selama melayani koneksi. Log yang
dicatat mencakup kegiatan selama melayani
ataupun ketika terjadi kegagalan. Lokasi fi le
log akan sangat tergantung pada distro yang
Anda gunakan (cobalah /var/log/httpd apa-
bila apache2 tidak ditemukan).
Yang menarik dari web server ini adalah
level log yang jelas dan sangat mudah untuk
diatur di fi le konfi gurasi utamanya. Bahkan,
format log juga bisa diatur dengan sangat
mudah. Selain itu, tersedia banyak sekali log
analyser untuk apache web server di pasaran
open source.
Berikut ini adalah beberapa contoh log
kegiatan:
192.168.0.99 - - [21/Jun/2005:12:39:27 +0700] “OPTIONS / HTTP/1.1” 200 - “-” “Microsoft-WebDAV-MiniRedir/5.1.2600”192.168.0.99 - - [21/Jun/2005:12:39:27 +0700] “PROPFIND /NETLOGON HTTP/1.1” 405 972 “-” “Microsoft-WebDAV-MiniRedir/5.1.2600”192.168.0.99 - - [21/Jun/2005:12:40:13 +0700] “OPTIONS / HTTP/1.1” 200 - “-” “Microsoft-WebDAV-MiniRedir/5.1.2600”192.168.0.99 - - [21/Jun/2005:12:40:13 +0700] “PROPFIND /dos HTTP/1.1” 405 972 “-” “Microsoft-WebDAV-MiniRedir/5.1.2600”192.168.0.1 - - [21/Jun/2005:13:16:36 +0700] “GET /favicon.ico HTTP/1.0” 404 1044 “-” “Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1”
Sementara, berikut ini adalah beberapa
contoh log entry ketika terjadi kesalahan:
[Tue Jun 21 11:50:11 2005] [warn] Init: Session Cache is not configured [hint: SSLSessionCache][Tue Jun 21 11:50:11 2005] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec2)[Tue Jun 21 11:50:11 2005] [notice] Apache/2.0.53 (Linux/SUSE) configured -- resuming normal operations[Tue Jun 21 11:57:18 2005] [error] [client 192.168.0.1] File does not exist: /srv/www/htdocs/favicon.ico
Bisa kita lihat bahwa level-level log ditu-
liskan dengan sangat mudah dibaca. Mulai
dari notice, warn, dan error.
/var/log/samba/log.*Bagi Anda yang menyalakan service SAM-
BA, Anda juga patut berbahagia. SAMBA
termasuk salah satu proyek open source ter-
baik dari sisi dokumentasi dan pencatatan.
Di dalam direktori /var/log/samba lah ter-
dapat catatan dari segala aktivitas yang ter-
jadi selama melayani.
Umumnya, Anda akan memiliki dua fi le
yaitu log.smbd dan log.nmbd. Apabila Anda
menggunakan winbind, maka sebuah log
tambahan, log.winbindd akan dapat Anda
temukan.
Di fi le-fi le log tersebut, dengan mudah
Anda bisa melihat apa yang sedang terjadi,
termasuk catatan berguna untuk menyele-
saikan masalah.
Contoh log.smbd:[2005/06/21 13:07:12, 1] smbd/service.c:make_connection_snum(642) tbi04 (192.168.0.98) connect to service dos initially as user dos (uid=1002, gid=100) (pid 6914)[2005/06/21 13:07:14, 1] smbd/service.c:make_connection_snum(642) tbi04 (192.168.0.98) connect to service netlogon initially as user dos (uid=1002, gid=100) (pid 6914)
[2005/06/21 13:12:24, 1] smbd/service.c:make_connection_snum(642) tbi04 (192.168.0.98) connect to service dos initially as user dos (uid=1002, gid=100) (pid 6914)[2005/06/21 13:12:39, 1] smbd/service.c:close_cnum(830) tbi04 (192.168.0.98) closed connection to service netlogon
Di fi le log.smbd tersebut, Anda bisa me-
lihat setiap detil koneksi SAMBA. Dalam
contoh tersebut, kita bisa melihat bagaima-
na proses logout sedang dilakukan (closed
connection).
Contoh fi le log.nmbd:[2005/06/21 11:50:09, 0] nmbd/nmbd_become_dmb.c:become_domain_master_browser_bcast(282) become_domain_master_browser_bcast: Attempting to become domain master browser on workgroup TBI-CKG on subnet 192.168.0.1[2005/06/21 11:50:09, 0] nmbd/nmbd_become_dmb.c:become_domain_master_browser_bcast(295) become_domain_master_browser_bcast: querying subnet 192.168.0.1 for domain master browser on workgroup TBI-CKG[2005/06/21 11:50:13, 0] nmbd/nmbd_logonnames.c:become_logon_server_success(124) become_logon_server_success: Samba is now a logon server for workgroup TBI-CKG on subnet 192.168.0.1[2005/06/21 11:50:17, 0] nmbd/nmbd_become_dmb.c:become_domain_master_stage2(113) *****
Samba server TBISERV0 is now a domain master browser for workgroup TBI-CKG on subnet 192.168.0.1 *****[2005/06/21 11:50:32, 0] nmbd/nmbd_become_lmb.c:become_local_master_stage2(396)
INFOLINUX 09/2005 53
TUTORIALBerita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
Linux Admin
*****
Samba name server TBISERV0 is now a local master browser for workgroup TBI-CKG on subnet 192.168.0.1
*****
Di fi le log.nmbd tersebut, Anda bisa me-
lihat setiap detil SAMBA yang berhubungan
dengan kegiatan name resolution. Pada con-
toh tersebut, terlihat proses bagaiman SAM-
BA server bernegosiasi menjadi LMB.
/var/log/squid/*.logSquid juga merupakan salah satu service
yang sangat menyenangkan penggunanya.
Di log yang dimiliki, squid mencatat ham-
pir segalanya, mulai dari kegiatan melayani
se bagai proxy sampai detail akses per kom-
puter dan tujuan yang diakses.
Berikut ini adalah beberapa baris dari
cache.log, yang mencatat kegiatan selama
melayani:
2005/06/21 11:50:18| Beginning Validation Procedure2005/06/21 11:50:18| Completed Validation Procedure2005/06/21 11:50:18| Validated 44 Entries
Sementara, berikut ini adalah catatan
detil akses dari komputer client dan alamat
yang dituju. Contoh berikut ini juga mem-
pertunjukkan porn fi lter yang menolak user
ketika mengunjungi 17tahun.com.
1119334601.378 785 192.168.0.98 TCP_DENIED/403 1285 GET http://17tahun.com/ - NONE/- text/html1119334601.471 92 192.168.0.98 TCP_DENIED/403 1307 GET http://17tahun.com/favicon.ico - NONE/- text/html1119334681.184 19 192.168.0.98 TCP_IMS_HIT/304 274 GET http://192.168.0.1/
- NONE/- text/html1119334685.190 13 192.168.0.98 TCP_MISS/200 934 GET http://192.168.0.1/pub/ - DIRECT/192.168.0.1 text/html
/var/log/boot*Di fi le log ini, Anda bisa mengamati be-
berapa hal yang terjadi pada saat booting.
Tidak semua memang, tapi cukup banyak
yang bisa diamati. Anda juga mungkin bisa
melihat tambahannya di messages.
Beberapa service seperti DHCPD memang
tidak memiliki sendiri. Namun, kerjasama-
nya cukup baik dengan menuliskan informa-
si yang sangat detil di messages. Melihat log
DCHCP di messages akan sangat membantu.
Dengan tetap memperhatikan fi le log, banyak
hal yang mengganggu sistem mungkin dapat
dicegah atau dihentikan. Tentunya, termasuk
bagaimana menjaga sistem agar tetap handal
melayani. Sampai di sini dulu pembahasan
kita tentang fi le log. Tetaplah mengawasi!
Noprianto (noprianto@infolinux.co.id)
INFOLINUX 09/200554
TUTORIAL Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
PHP
Bekerja dengan teks sebenarnya me-
nyenangkan. Apabila Anda ba nyak
bekerja dengan pemrograman atau
SQL seperti disebutkan, banyak sekali pem-
rosesan teks yang terjadi pada bidang-bi-
dang tersebut. Barangkali yang paling umum
adalah bagaimana interpreter atau kompiler
memeriksa apakah kode Anda benar atau ti-
dak. Setelah itu, bagaimana interpreter atau
kompiler mengenali maksud Anda menge-
tikkan kode program Anda. Contoh lain
yang sangat umum juga adalah bagaimana
database engine mengenali dan memahami
sintaks SQL yang Anda berikan.
Tentu saja, pemrosesan tersebut tidak
sesederhana bagaimana kita memeriksa
input dengan if misalnya. Karena, kita ti-
dak akan tahu persis bagaimana seseorang
menuliskan kode program atau sintaks SQL
misalnya. Ada yang menuliskan dalam be-
berapa baris untuk satu perintah, ada yang
menggunakan banyak tab dan spasi, ada
yang menuliskannya sedempet mungkin,
dan lain sebagainya. Belum lagi kalau kita
mengizinkan adanya bagian opsional dari
suatu sintaks. Apa yang bisa kita lakukan
adalah dengan memberikan aturan. Sebagai
contoh, aturan-aturan fungsi dalam bahasa
pemrograman tertentu. Atau, aturan sintaks
SQL untuk mengambil data. Sebagai con-
toh, berikut ini adalah aturan sintaks SE-
LECT dalam PostgreSQL:
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
* | expression [ AS output_ name ] [, ...] [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY expression [, ...] ] [ HAVING condition [, ...] ] [ { UNION | INTERSECT | EXCEPT } [ ALL ] select ] [ ORDER BY expression [ ASC | DESC | USING operator ] [, ...] ] [ LIMIT { count | ALL } ] [ OFFSET start ] [ FOR UPDATE [ OF table_name [, ...] ] ]
Setelah aturan kita defi nisikan, maka
kemudian kita dapat mengatur sejumlah
parser untuk menangani input dari user.
Bicara soal parser itu sendiri, banyak sekali
tool parser yang ada di dunia open source.
Parser-parser generator tersebut dapat di-
manfaatkan apabila Anda berniat untuk
membangun aturan bahasa sendiri. Umum-
nya, apabila Anda ingin membangun bahasa
pemrograman sendiri.
Di artikel ini, kita tidak akan membahas
parser-parser tersebut. Apa yang akan kita
bahas adalah pembuatan parser sederhana
dengan memanfaatkan regular expression.
Bahasa pemrograman yang akan dipergu-
nakan adalah bahasa PHP. Dan, tentu saja,
karena regular expression bekerja dengan
sangat lambat, maka kecepatan parsing akan
jauh kalah dibandingkan kalau parsing di-
lakukan oleh tool yang sebenarnya.
Beberapa contoh yang akan kita bahas
adalah pemeriksaan apakah suatu sintaks
benar atau salah. Tentu saja, sintaks tersebut
kita buat sesuai aturan yang kita inginkan.
Setelah itu, kita juga bisa memanfaatkan
regular expression untuk mengambil teks
tertentu yang memenuhi sejumlah aturan
(yang kita buat sendiri) untuk diproses le-
bih lanjut. Contoh yang paling nyata adalah
ketika kita ingin membangun sendiri doku-
mentator dari source code kita.
Regular expression yang akan kita ba-
has mencakup posix extended RE dan Perl
Compatible RE, sebagaimana yang didu-
kung oleh PHP. Versi PHP yang digunakan
adalah 4.x.
Posix Extended Regular expressionPosix extended RE adalah implementasi
PHP untuk regular expression POSIX yang
diatur dalam POSIX 1003.2. Umumnya,
program-program di Linux yang kompati-
bel dengan standar POSIX juga menerapkan
regular expression yang mengacu kepada
standar POSIX tersebut. Contoh yang pa-
ling baik adalah grep dan tr.
Di PHP, umumnya Posix RE lebih mudah
digunakan daripada PCRE. Sayangnya, Posix
RE PHP tidaklah binary-safe. Namun, untuk
pemrosesan teks yang kompleks sekalipun,
Posix RE sudah jauh lebih dari cukup.
Parsing Sederhana dengan Regular ExpressionBagi Anda yang terbiasa bekerja dengan pemrograman atau SQL, tentunya bekerja de-ngan sesuatu yang melibatkan penggunaan sintaks adalah hal yang wajar. Baik sintaks dalam pemrograman ataupun statement SQL. Di artikel kali ini, kita akan membahas cara melakukan parsing sederhana secara high level memanfaatkan regular expression. De-ngan demikian, kita bisa membuat sintaks sederhana, memeriksa apakah suatu sintaks valid atau tidak dan atau mengambil teks tertentu dalam suatu file untuk diformat lebih lanjut.
INFOLINUX 09/2005 55
TUTORIALBerita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
PHP
Umumnya, PHP yang terinstal pada
sistem Anda telah dilengkapi dengan du-
kungan untuk regular expression ini, se-
hingga instalasi tambahan tidak diperlukan.
Implementasi Posix RE di PHP dilakukan
melalui fungsi-fungsi berikut ini:
� ereg_replace (untuk mengganti teks ber-
dasarkan pattern RE).
� ereg (untuk mencari teks berdasarkan
pattern RE).
� eregi_replace (sama seperti ereg_replace,
namun bekerja secara case insensitive).
� eregi (sama seperti ereg, namun bekerja
secara case insensitive).
� split (memecah teks menjadi array ber-
dasarkan pattern RE).
� spliti (sama seperti split, namun bekerja
secara case insensitive).
� sql_regcase (pembuatan RE untuk pen-
carian case insensitive).
Dengan fungsi-fungsi tersebut (yang
sebenarnya sangat sedikit, hanya ada tiga
sampai empat fungsi kalau tidak memper-
hatikan variannya), Anda sudah bisa mem-
bangun pemrosesan teks yang luar biasa
menggunakan RE. Berikut ini adalah be-
berapa contoh sederhana.
ereg dan eregiAndai kata Anda memiliki sejumlah teks, di
mana Anda ingin mengetahui apakah ter-
dapat teks tertentu di dalam teks tersebut
yang memiliki aturan tertentu, bisa mem-
pergunakan fungsi ini. Secara umum, apa-
bila terdapat kemungkinan bahwa teks di-
tuliskan tanpa memperhatikan case (dan ini
sangat umum terjadi), maka penggunaan
eregi() akan lebih aman dan akurat.
Contoh sederhana adalah bagaimana
eregi() digunakan untuk mengetahui apa-
kah tanggal yang dimasukkan oleh user
telah memenuhi aturan tanggal YYYY-
MM-DD atau tidak. Berikut ini adalah
kodenya:
source code:<?
$pat = “([0-9]{4})-([0-9] {1,2})-([0-9]{1,2})”; $input1 = “2005-06-19”; $input2 = “2005-6-19”; $input3 = “05-06-19”;
if (ereg($pat, $input1)) echo “$input1 sesuai dengan aturan $pat”; else echo “$input1 TIDAK sesuai dengan aturan $pat”; echo “\n”;
if (ereg($pat, $input2)) echo “$input2 sesuai dengan aturan $pat”; else echo “$input2 TIDAK sesuai dengan aturan $pat”; echo “\n”;
if (ereg($pat, $input3)) echo “$input3 sesuai dengan aturan $pat”; else echo “$input3 TIDAK sesuai dengan aturan $pat”; echo “\n”;
?>
Penjelasan kode:� Kita memiliki tiga variabel, masing-ma-
sing adalah $Input1, $input2 dan $in-
put3. Ketiga variabel tersebut akan diuji
dengan pattern $pat.
� Fungsi ereg() akan mengembalikan nilai
true atau false sesuai dengan hasil peme-
riksaan RE berdasarkan $pat kepada $in-
put1, $input2, atau $input3.
Berikut ini adalah keluaran dari kode
tersebut:
$ php a.php 2005-06-19 sesuai dengan aturan ([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})2005-6-19 sesuai dengan aturan ([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})05-06-19 TIDAK sesuai dengan aturan ([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})
Contoh tersebut tentunya bisa dikem-
bangkan lebih lanjut menjadi contoh
pemeriksaan sintaks sederhana. Contoh
berikut ini akan menguji apakah teks yang
diberikan mengandung penulisan fungsi
PHP yang valid dengan asumsi fungsi PHP
yang valid adalah:
� diawali dengan kata function.
� diikuti oleh nama fungsi.
� diikuti oleh kurung buka.
� diikuti oleh variable list (opsional).
� diikuti oleh kurung tutup.
� diikuti oleh kurung kurawal buka.
� diikuti oleh isi fungsi (opsional).
� diikuti dan ditutup oleh kurung kurawal
tutup.
� antar token yang diperiksa boleh dipi-
sahkan dengan white space.
Namun, kita tidak akan memeriksa apa-
kah sintaks dalam variable list dan isi fungsi
adalah sintaks yang benar atau tidak.
source code:<?
$pat = “^(function)([[: space:]]+)([a-zA-Z_]+[[ :alnum:]]*)([[:space:]]* )(\()(.*)(\))([[:space: ]]*)(\{)(.*)(\})$”;
$input1 = “function a() { echo ‘a’; }”;
$input2 = “function _b($a, $b, $c) { print_r($a); print_ r($b); print_r($c); }”;
$input3 = “function 1a() { echo ‘ini function yang salah karena nama fungsi diawali bilangan’;}”;
$input4 = “function z()”;
if (eregi($pat, $input1)) echo “Syntax OK”; else echo “Syntax Error”; echo “\n”;
if (eregi($pat, $input2)) echo “Syntax OK”; else
INFOLINUX 09/200556
TUTORIAL Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
PHP
echo “Syntax Error”; echo “\n”;
if (eregi($pat, $input3)) echo “Syntax OK”; else echo “Syntax Error”; echo “\n”;
if (eregi($pat, $input4)) echo “Syntax OK”; else echo “Syntax Error”; echo “\n”;
?>
penjelasan source code:� Kita memiliki satu pattern untuk
pengecekan sintaks penulisan fungsi di
PHP yang disimpan dalam variabel $pat.
Sekali lagi, ini adalah pengecekan seder-
hana dan tidak mengecek kebenaran sin-
taks variable list dan function body.
� Kita memiliki empat variabel input yang
masing-masing berisikan string fungsi
yang ingin diuji.
� $input1 dan $input2 adalah contoh yang
valid
� $input3 dan $input4 adalah contoh yang
tidak valid karena pada $input3, nama
fungsi diawali dengan bilangan. Semen-
tara, $input4 tidak valid karena deklarasi
fungsi belum memasukkan penanda isi
fungsi.
� Khusus untuk $pat, kita memecah to-
ken-token yang ingin diuji ke dalam
group-group, yang ditandai dengan
kurang buka dan kurung tutup. Ada-
nya [[:space:]] diantara beberapa token
menandai bahwa white space diijinkan
diantara token-token tersebut.
� repetition operator * berarti nol atau le-
bih, repetion operator + berarti satu atau
lebih.
� Karakter . (titik) mewakili setiap karak-
ter.
� Beberapa karakter seperti ( dan { perlu
diescape menjadi \( dan \{ karena meru-
pakan karakter spesial yang memiliki arti
tertentu di dalam RE.
Berikut ini adalah keluaran dari kode
tersebut:
$ php b.php Syntax OKSyntax OKSyntax ErrorSyntax Error
Fungsi ereg() dan eregi() merupakan
fungsi yang sangat berguna, seperti dalam
kedua contoh tersebut. Anda bisa memba-
ngun rutin untuk memeriksa pattern yang
defi nisikan sebagai aturan Anda sendiri.
Untuk membantu, POSIX RE telah menye-
diakan beberapa kelas karakter. Berikut ini
adalah beberapa di antaranya:
� [:alnum:], semua huruf dan bilangan.
� [:alpha:], semua huruf.
� [:blank:], semua white space horizontal.
� [:digit:], semua bilangan.
� [:print:], semua karakter yang bisa dice-
tak, termasuk spasi.
� [:space:], semua white space vertikal dan
horizontal.
Kelas-kelas tersebut bisa digunakan di
program grep, tr dan program lain yang
memanfaatkan Posix RE.
ereg_replace dan eregi_replaceFungsi ereg() dan eregi() berguna untuk
melakukan matching. Namun, ada kalanya,
matching saja tidak cukup. Contoh yang
umum terjadi misalnya adalah ketika Anda
ingin mengganti teks tertentu dalam suatu
teks. Apabila menggunakan ereg() atau ere-
gi(), maka hanya dilakukan pencocokan ter-
hadap pattern tertentu. Sementara, apabila
Anda ingin langsung melakukan penguba-
han, maka Anda harus menggunakan fungsi
ereg_replace() ataupun eregi_replace().
Contoh sederhana berikut ini adalah
bagaimana kita mengganti semua a kecil
menjadi a besar. Berikut ini adalah source
code-nya:
<?
$pat_src = “a”; $pat_dst = “A”; $src = “Hari ini saya ke pasar baru untuk membeli buku bekas”; $dst = eregi_replace($pat_src, $pat_dst, $src);
echo “src:\n$src\n”;
echo “dst:\n$dst\n”;
?>
Penjelasan kode:Dengan menggunakan eregi_replace(), kita
mengganti semua a ke A. Fungsi eregi_re-
place() akan menerima tiga parameter, ya itu
pattern, replacement dan string asal, serta
akan mengembalikan string hasil penggan-
tian.
Satu hal yang harus diperhatikan dalam
penggunaan ereg_replace() ataupun ere-
gi_replace() adalah masalah penggantian
teks dengan bilangan. Sebagai contoh, Anda
ingin mengganti tulisan satu menjadi angka
1. Apabila Anda memberikan 1 sebagai re-
placement, maka hasil penggantian mungkin
tidak akan berjalan sesuai yang diinginkan.
Agar hasil penggantian benar, Anda harus
menggantinya dengan karakter ‘1’.
split dan splitiTerkadang, dalam beberapa kasus pem-
rograman, ada kalanya kita perlu memisah-
kan elemen teks berdasarkan pemisah ter-
tentu ke dalam array. Tentunya, memproses
array akan jauh lebih mudah daripada kita
memroses teks begitu saja. Contoh kasus
yang umum adalah ketika kita ingin mem-
proses entri di /etc/passwd.
Berikut ini adalah contoh untuk
mendapatkan username dan home direc-
tory semua user di /etc/passwd:
<? $f_passwd = fopen(“/etc/ passwd”,”r”); while (!feof($f_passwd)) { $buff = fgets($f_passwd); if (strlen($buff) > 1) { $user_arr = split(“:”, $buff); echo “user: {$user_ arr[0]}, homedir: {$user_ arr[5]}\n”; } } fclose($f_passwd);?>
INFOLINUX 09/2005 57
TUTORIALBerita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
PHP
Berikut ini adalah keluaran program
tersebut di komputer penulis:
$ php d.php user: root, homedir: /rootuser: bin, homedir: /binuser: daemon, homedir: /sbinuser: lp, homedir: /var/spool/lpduser: mail, homedir: /var/spool/clientmqueueuser: news, homedir: /etc/newsuser: uucp, homedir: /etc/uucpuser: games, homedir: /var/gamesuser: man, homedir: /var/cache/manuser: at, homedir: /var/spool/atjobsuser: wwwrun, homedir: /var/lib/wwwrunuser: ftp, homedir: /srv/ftpuser: postfix, homedir: /var/spool/postfixuser: sshd, homedir: /var/lib/sshduser: messagebus, homedir: /var/run/dbususer: haldaemon, homedir: /var/run/haluser: nobody, homedir: /var/lib/nobodyuser: nop, homedir: /home/nopuser: postgres, homedir: /var/lib/pgsql
Karena split() menerima pattern RE se-
bagai pemisah, maka pemisah tidak harus
selalu berupa karakter pasti. Contoh yang
umum terjadi adalah ketika pemisahan ingin
dilakukan berdasarkan white space. Dalam
kasus tersebut, kita tidak bisa hanya menen-
tukan berdasarkan spasi, atau tab, ataupun
kombinasi keduanya. Memecah entri pada
/etc/fstab adalah contoh yang baik. Berikut
ini adalah contohnya:
<? $f_fstab = fopen(“/etc/ fstab”,”r”); while (!feof($f_fstab)) { $buff = fgets($f_fstab); if (strlen($buff) > 1) { $fs_arr = split(“[[: space:]]+”, $buff); echo “device: {$fs_ arr[0]}, mount point: {$fs_arr[1]}\n”; } } fclose($f_fstab);?>
Penjelasan kode:Karena kita ingin memisahkan berdasarkan
white space, maka kita perlu menggunakan
kelas karakter [:space:]. Adalah penting un-
tuk menambahkan + agar white space dike-
lompokkan (bukannya satu per satu spasi
misalnya).
Dengan beberapa fungsi saja yang datang
dengan Posix RE, kita bisa membangun
parser sederhana ataupun tool-tool lain yang
bisa membantu kita bekerja lebih cepat.
PCRE Pattern PCRE umumnya cenderung lebih
susah untuk dibaca. Namun, PCRE sendiri
pada PHP seringkali dikatakan lebih cepat
daripada implementasi Posix RE. Dan, imple-
mentasi PCRE PHP telah binary safe. Dalam
beberapa kasus yang lebih berat, umum nya
PCRE lebih disukai daripada Posix RE.
Implementasi PCRE di PHP datang de-
ngan fungsi-fungsi berikut:
� preg_grep, mengembalikan array yang
sesuai dengan pattern.
� preg_match_all, memeriksa seluruh teks
� preg_match, memeriksa teks.
� preg_quote, melakukan quoting pada
karakter RE.
� preg_replace_callback, melakukan pen-
carian RE dan melakukan penggantian
dengan fungsi callback.
� preg_replace, mencari dan mengganti
teks.
� preg_split, memecah teks dan menyim-
pannya ke dalam array.
Berbeda dengan Posix RE, PCRE menge-
nal Pattern Modifi er, modifi er untuk pat-
tern RE. Di sini, kita bisa menentukan apa-
kah pencarian akan dilakukan case sensitive
dan lain sebagainya.
Satu catatan, walaupun mengusung
nama PCRE, implementasi PCRE di PHP
memiliki beberapa perbedaan dengan Perl.
Anda bisa membaca lebih lanjut pada Do-
HTML hasil dokumentator.php. Source code HTML hasil dokumentator.php.
INFOLINUX 09/200558
TUTORIAL Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
PHP
kumentasi PHP pada bagian Regular Ex-
pression Functions (Perl-Compatible), sub-
bagian Pattern syntax.
preg_match dan preg_match_allFungsi ini berguna untuk melakukan
matching pattern RE pada teks. Kita akan
membuat ulang contoh yang kita bahas pa-
da pembahasan fungsi ereg() dan eregi() se-
belumnya. Yang pertama adalah bagaimana
memeriksa apakah input tanggal telah me-
menuhi aturan YYYY-MM-DD atau tidak.
Berikut ini adalah source code-nya:
<?
$pat = “/([0-9]{4})-([0-9] {1,2})-([0-9]{1,2})/i”; $input1 = “2005-06-19”; $input2 = “2005-6-19”; $input3 = “05-06-19”;
if (preg_match($pat, $input1)) echo “$input1 sesuai dengan aturan $pat”; else echo “$input1 TIDAK sesuai dengan aturan $pat”; echo “\n”;
if (preg_match($pat, $input2)) echo “$input2 sesuai dengan aturan $pat”; else echo “$input2 TIDAK sesuai dengan aturan $pat”; echo “\n”;
if (preg_match($pat, $input3)) echo “$input3 sesuai dengan aturan $pat”; else echo “$input3 TIDAK sesuai dengan aturan $pat”; echo “\n”;
?>
Penjelasan kode:� Bisa dilihat bahwa apa yang berubah pa-
da contoh versi Posix RE adalah pattern
dan penggunaan fungsi preg_match()
� Pattern modifi er yang kita gunakan
adalah i, yang artinya pencarian akan
dilakukan case insensitive (sama seperti
penggunaan fungsi eregi()).
Selanjutnya, kita akan membuat ulang
kode untuk memeriksa keabsahan defi nisi
fungsi PHP:
<?
$pat = “/^(function)(\s*?) ([a-zA-Z_]+\w*)(\s*?) (\()(.*)(\))(\s*?) (\{)(.*)(\})$/mis”;
$input1 = “function a() { echo ‘a’; }”;
$input2 = “function _b($a, $b, $c) { print_r($a); print_ r($b); print_r($c); }”;
$input3 = “function -a() { echo ‘ini function yang salah karena nama fungsi diawali bilangan’;}”;
$input4 = “function z()”;
if (preg_match($pat, $input1)) echo “Syntax OK”; else echo “Syntax Error”; echo “\n”;
if (preg_match($pat, $input2)) echo “Syntax OK”; else echo “Syntax Error”; echo “\n”;
if (preg_match($pat, $input3)) echo “Syntax OK”; else echo “Syntax Error”; echo “\n”;
if (preg_match($pat, $input4)) echo “Syntax OK”; else echo “Syntax Error”;
echo “\n”;
?>
Penjelasan kode:� Kita menggunakan pattern modifi er mis,
yang artinya adalah:
� m untuk multiline.
� i untuk case insensitive.
� s untuk membuat metakarakter . (ti-
tik) memasukkan karakter newline.
� Beberapa kelas karakter pada Posix RE
umumnya ditulis lebih singkat pada versi
PCRE
preg_replaceFungsinya sama dengan ereg_replace, na-
mun menurut penulis, fungsi yang satu
ini lebih enak untuk digunakan. Kita akan
melihat contoh bagaimana mengganti tu-
lisan [date] di dalam string menjadi tang-
gal aktif.
Berikut ini adalah source code-nya:
<? $src = “Hari ini tanggal [date].”;
$dst = preg_replace(“/(\ [date\])/mis”, date(“d-m-Y”), $src); echo $dst . “\n”;
?>
preg_splitFungsi ini berguna untuk memecah string
ke dalam array berdasarkan pattern tertentu.
Fungsinya sama dengan split() atau spliti()
milik Posix RE. Berikut ini adalah penulisan
ulang contoh untuk membaca /etc/fstab:
<? $f_fstab = fopen(“/etc/ fstab”,”r”); while (!feof($f_fstab)) { $buff = fgets($f_fstab); if (strlen($buff) > 1) { $fs_arr = preg_split(“/\ s+/”, $buff); echo “device: {$fs_ arr[0]}, mount point: {$fs_arr[1]}\n”; }
INFOLINUX 09/2005 59
TUTORIALBerita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
PHP
} fclose($f_fstab);?>
Contoh kasus: DokumentatorSetelah melihat contoh-contoh penggu-
naan RE, kita akan membahas satu contoh
kasus sederhana, yaitu program dokumen-
tator yang akan mengambil source PHP
dan mengekstrak dokumentasi fungsi dan
memformatnya menjadi satu fi le HTML
yang berisi dokumentasi fungsi. Untuk itu,
kita akan membuat aturan baru dokumen-
tasi kita. Berikut ini adalah aturan doku-
mentasi:
� Diawali dengan /** dan diakhiri dengan
**/
� Tersedia deskripsi fungsi yang dimung-
kinkan dengan pemberian @desc:
<deskripsi fungsi>;
Dengan demikian, berikut ini adalah
contoh dokumentasi di dalam satu fungsi:
function a(){ /** @desc: - deskripsi pertama fungsi - deskripsi kedua fungsi ; **/
//isi fungsi}
Berikut ini adalah source code doku-
mentator kita:
<?$index_header = “<html><head><title>Documentator</title><!-- Auto generated on “ . date(“d/ m/Y h:i:s”).“--></head><body>“;
$index_footer = “</body><html>
“;
echo “dokumentator.php, (c) Nop 19 June 2005\n”;$f = $_SERVER[‘argv’][1];if ( !$f || !file_exists($f) ) die (“usage: dokumentator.php <script>\n”);
$f_out = $f . “.html”;$str = fread(fopen($f, “r”), filesize($f));$pat = ‘/(function)(.*?)(\{)(.*?)(\})/mis’;preg_match_all($pat,$str,$matches);
for ($i = 0; $i<count($matches[0]); $i++){ //get comments from file, parse comments and function body $pat_comm = ‘/(\/\*\*)(.*?)(\* \*\/)(.*)/mis’; preg_match_all($pat_comm, $matches[4][$i],$matches_ comm); (count($matches_comm[0])<1) ? $f_body = $matches[4][$i] : $f_body = $matches_comm[4][0];
//already got comments from file, parse specific comment //get desc $pat_desc = ‘/(.*?)(@desc) (:)(\s*?)(.*?)(;)/mis’; preg_match_all($pat_desc, $matches_comm[2][0],$matches_ desc);
$f_name = $matches[2][$i]; $f_desc = nl2br(trim($matches_ desc[5][0]));
//link creation $link_info .= “<a href=\”#$i\ ”>$f_name</a><br>”;
//detail information per function $detail_info .= “<br><br><br><br><br>”;
$detail_info .= “<a name=\ ”$i\”> $f_name </a>”; $detail_info .= “<table border=\”1\” width=\”100%\”>”; $detail_info .= “<tr><td width=\”15%\”>function</ td><td>” . $f_name . “</td></tr>”; $detail_info .= “<tr><td width=\”15%\”>description </td><td><code>” . $f_desc . “</code></td></tr>”; $detail_info .= “</table><br>”;
}$index_body = $index_header . $link_info . $detail_info . $index_footer;fwrite(fopen($f_out,”w”), $index_body);echo “DONE\n”;?>
Penjelasan kode:� Prinsip kerjanya, pertama-tama kita
akan memeriksa terlebih dahulu apakah
argumen pertama tersedia, dan apabila
tersedia, merupakan fi le yang valid atau
tidak. Setelah itu, apabila semuanya va-
lid, maka proses pun dilanjutkan.
� Setelah itu, kita akan mengambil semua
dokumentasi dari fungsi tersebut.
� Setelah itu, dari semua hasil yang berhasil
diambil, kita akan mengambil deskripsi
dari komentar tersebut, membuat link
dan detil informasi fungsi.
� Setelah itu, kita menggabungkan semua
yang didapat dan menuliskannya ke fi le
HTML.
Program ini tentunya masih bisa di-
sempurnakan, misal dengan menambah-
kan informasi lain seperti return type,
contoh penggunaan fungsi, dan lain seba-
gainya. Tentunya, tampilan HTML hasil
pembu atan juga bisa dimodifi kasi sesuai
keinginan.
Sampai di sini dulu pembahasan kita
tentang parsing sederhana menggunakan
RE. Untuk tugas parsing yang kompleks,
RE mungkin bukan solusi yang tepat. Tapi,
untuk parsing sederhana, RE jauh lebih dari
cukup. Selamat mencoba!
Noprianto (noprianto@infolinux.co.id)
INFOLINUX 09/200560
TUTORIAL Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
LDAP
� Artikel ini hanya menekankan penggu-
naan LDAP bagi Samba sebagai servis
autentikasi user. Pembaca diharapkan
telah menguasai kemampuan adminis-
trasi dasar Samba.
� Server LDAP di-setting sesuai artikel ke-
dua.
� Samba domain yang digunakan ialah
dynre. Nama domain ini dapat diganti
disesuaikan dengan nama domain pada
sistem komputer pembaca.
� Mesin bernama samba.dynre.com
dikonfi gurasi sebagai Primary Domain
Controller (PDC). Servis Samba ini
dapat diletakkan pada dua mesin yang
terpisah seperti yang dijelaskan dalam
artikel kedua pada bagian “Konfi gurasi
Jaringan” ataupun di dalam satu mesin
dengan LDAP server.
Kebutuhan softwareSeluruh kebutuhan paket RPM Samba ini
tersedia di dalam CD Fedora Core 2.
� samba-common-3.0.3-5.i386.rpm (terse-
dia dalam CD 1), berisi fi le-fi le Samba
umum yang harus diinstal terlebih da-
hulu sebelum paket RPM Samba yang
lainnya.
� samba-client-3.0.3-5.i386.rpm (tersedia
dalam CD 1), berisi fi le-fi le Samba client
saja. Untuk mesin yang akan digunakan
sebagai mesin samba client saja, cukup
menginstal paket RPM ini, tidak perlu
menginstal paket RPM berikutnya yaitu
paket RPM Samba server.
� samba-3.0.3-5.i386.rpm (tersedia dalam
CD 1), berisi fi le-fi le Samba daemon
server. Di dalam paket RPM ini terdapat
utility smbldap yang akan digunakan un-
tuk administrasi user-user Samba server
yang terkoneksi dengan LDAP server.
Selain paket RPM Samba di atas, di
dalam distribusi Fedora Core 2 ini terdapat
utility yang akan mempermudah adminis-
trasi Samba:
� system-config-samba-1.2.9-2.noarch.
rpm (tersedia dalam CD 1), berisi utility
administrasi Samba berbasis grafi s.
� samba-swat-3.0.3-5.i386.rpm (tersedia
dalam CD 4), berisi utility administrasi
berbasis web yang menggunakan proto-
kol HTTP dengan port 901.
Integrasi User Account dengan LDAPBagian 3 dari 3 Artikel
Fungsi utama komputer server di kantor ukuran kecil dan menengah biasanya sebagai file dan printer server. Samba sangat penting keberadaannya sebagai pengganti Windows Server yang populer dengan kemampuannya sebagai file dan printer server.
Perkantoran menggunakan fi le server
sebagai pusat tempat untuk me nyim-
pan fi le yang gunanya untuk men-
share fi le, memberikan keamanan/secu-
rity kepada fi le-fi le tersebut karena letaknya
tersentralisasi, dan membuat proses back-up
data lebih effi sien. Sedangkan sebagai print-
er server, ini akan menghemat printer yang
dibeli karena tidak perlu semua komputer
di kantor dibelikan printer satu-satu.
Bagian ketiga seri tulisan ini akan
menjelaskan cara men-setting Samba versi 3
dengan menggunakan LDAP sebagai servis
informasi direktori serta cara-cara adminis-
trasinya. Berikut adalah kebutuhan sebelum
kita memulai setting LDAP untuk Samba:
Gambar 1. Ssamba SWAT dan system-config-samba.
INFOLINUX 09/2005 61
TUTORIALBerita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
LDAP
Kedua utility administrasi Samba ini
berguna untuk mempersiapkan konfi gurasi
dasar Samba sebelum kita men-settingnya
menggunakan LDAP sebagai autentikasi
servis. Contoh kedua utility administrasi ini
dapat dilihat pada gambar 1.
Sangat dianjurkan untuk selalu men-up-
date Samba ini dengan versi yang terbaru
karena versi yang terbaru memperbaiki bug-
bug yang cukup penting bagi sistem kompu-
ter produksi. Untuk mempermudah proses
konfi gurasi, maka semua paket RPM diambil
dari CD Fedora Core 2. Pada saat artikel ini
dibuat Samba terbaru dapat di-download dari
www.samba.org. Perlu diingat, jika meng-
compile sendiri, harap memasukkan module
LDAP ke dalam module binari samba. Untuk
menge-cek apakah samba telah terkompilasi
dengan module LDAP di dalamnya ketikkan
perintah berikut:
# smbd -b | grep -i ldap
Hasilnya akan demikian:
HAVE_LDAP_H HAVE_LDAP HAVE_LDAP_DOMAIN2HOSTLIST HAVE_LDAP_INIT HAVE_LDAP_INITIALIZE HAVE_LDAP_SET_REBIND_PROC HAVE_LIBLDAP LDAP_SET_REBIND_PROC_ARGS pdb_ldap pdb_smbpasswd pdb_tdbsam pdb_guest rpc_lsa rpc_reg rpc_lsa_ds rpc_wks rpc_net rpc_dfs rpc_srv rpc_spoolss rpc_samr idmap_ldap idmap_tdb auth_rhosts auth_sam auth_unix auth_winbind auth_server auth_domain auth_builtin
Sedangkan utility smbldap dapat di-
download dari www.idealx.org/prj/samba/
index.en.html.
Proses konfigurasiDiasumsikan servis Samba telah terinstal
dan terkonfi gurasi secara dasar sebagai fi le
dan printer server. Dengan keadaan demiki-
an, berarti servis Samba tersebut secara
default menggunakan fi le tdb yang berada
pada local server sebagai autentifi kasi data.
Pada bagian ini, kita akan mulai untuk me-
ngonfi gurasi koneksi ke LDAP server seba-
gai autentikasi server.
1. Buka fi le /etc/samba/smb.conf, lalu tam-
bahkan lima baris berikut ini:
passdb backend = ldapsam:”ldap://ldap.dynre.com”
�Ini data autentifi kasi password yang
digunakan untuk menyimpan dan meng-
ubah password menggunakan LDAP
dengan LDAP server: ldap.dynre.com.
ldap suffix = dc=erlangtech,dc=com
�Ini data direktori LDAP kelompok
bersuffi ks dc=erlangtech,dc=com yang
akan digunakan sebagai data direktori.
ldap admin dn = uid=root,ou=people,dc=erlangtech,dc=com
�Account DN koneksi ke server LDAP
untuk mengambil data password user.
ldap passwd sync = Yes �Password LDAP akan disinkronisa-
sikan dengan data password atribut NT
dan LM, kemudian di-update atribut
waktu pwdLastSet.
ldap delete dn = Yes �Operasi delete dalam LDAP akan
menghapus seluruh data untuk user ac-
count yang dipilih.
Berikut ini merupakan fi le konfi gurasi
/etc/samba/smb.conf dengan contoh
konfi gurasi dasar:
� Printer yang di-share menggunakan
Cups daemon printer.
� Direktori yang di-share adalah direk-
tori homes (/home/junusd) dan data
(/export/data).
[global] workgroup = DYNRE netbios aliases = samba server string = DynRe WinNT Server
passdb backend = ldapsam:”ldap://ldap.dynre.com”
ldap suffix = dc=dynre,dc=com ldap admin dn = uid=root,ou=people,dc=dynre,dc=com ldap passwd sync = Yes ldap delete dn = Yes
INFOLINUX 09/200562
TUTORIAL Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
LDAP
domain admin group = “ @”Domain Admins” “
printcap name = cups printing = cups
logon script = logon.bat logon drive = H: logon home = logon path =
domain logons = Yes os level = 33 preferred master = Yes domain master = Yes wins support = Yes log file = /var/log/samba/%m.log[printers] comment = All Printers path = /var/spool/samba browseable = No guest ok = Yes printable = Yes use client driver = Yes printer admin = root[print$] comment = Printer Driver Download Area path = /var/lib/samba write list = root guest ok = Yes[homes] comment = Home Directories writeable = yes browseable = No[data] comment = DFS Directories path = /export/data writeable = yes
2. Edit konfi gurasi LDAP server.
Copy samba.schema ke direktori /etc/
openldap/schema
# cp /usr/share/doc/samba-3.0.3/LDAP/samba.schema /etc/openldap/schema
Edit fi le /etc/openldap/slapd.conf
� Tambahkan samba.schema di bawah
autofs.schema
include /etc/openldap/schema/redhat/autofs.schema
include /etc/openldap/schema/samba.schema
� Ubah ACL, setiap ada perintah untuk
membaca dan menulis attribut sam-
baLMPassword dan sambaNTPass-
word, diharuskan untuk autentifi kasi
lebih dahulu, sama seperti mengakses
atribut userPassword.
access to attr=userPassword,sambaLMPassword,sambaNTPassword by dn=”uid=root,ou=people, dc=dynre,dc=com” write by self write by anonymous authaccess to * by dn=”uid=root,ou=people, dc=dynre,dc=com” write by self write by users read by anonymous read
3. Masukkan password DN admin yang di-
gunakan untuk mengambil data user ac-
count dari LDAP server.
# smbpasswd -w ldappassword(uid=root,ou=people,dc=dynre,dc=com)
4. Restart daemon servis LDAP dan Samba.
# service ldap start# service smb start
Administrasi user dengan smbldapBagian ini menjelaskan secara praktis cara
penggunaaan utility smbldap yang siap
digunakan untuk keperluan administrasi
user samba sehari-hari. Sebagai referensi
smbldap lebih detail dapat dibaca dari www.
idealx.org/prj/samba/samba-ldap-howto.pdf.
Konfiguasi awal� Edit /usr/share/doc/samba-3.0.3/LDAP/
smbldap-tools/smbldap_conf.pm, de-
ngan mengubah variabel berikut:
$slaveLDAP = “ldap.dynre.com”;$slavePort = “389”;$masterLDAP = “ldap.dynre.com”;$masterPort = “389”;$ldapSSL = “0”;$suffix = “dc=DYNRE,dc=COM”;$usersou = q(People);$computersou = q(Computers);
$groupsou = q(Group);$bindpasswd = “ldappassword(uid=root,ou=people,dc=dynre,dc=com)”;$mk_ntpasswd = “/usr/sbin/mkntpwd”;
� Copy skrip smbldap ke direktori /usr/sbin:
cd /usr/share/doc/samba-3.0.3/LDAP/smbldap-toolscp smbldap*.p? /usr/sbinchmod 753 /usr/sbin/smbldap_conf.pmchmod 750 /usr/sbin/smbldap*.plchgrp 512 /usr/sbin/smbldap*.p?
� Compile utility pembuat password yang
compatible dengan WinNT password
mkntpwd:
# cd /usr/share/doc/samba-3.0.3/LDAP/smbldap-tools/mkntpwd# make# cp mkntpwd /usr/sbin
� Jalankan smbldap-populate.pl, untuk
inisialisasi LDAP database dengan user
dan group account yang diperlukan un-
tuk administrasi sesuai Windows NT:
# smbldap-populate.pl
Hasil output-nya akan terlihat seperti di
bawah. Ada beberapa pesan kesalahan teta-
pi itu tidak menjadi masalah karena struk-
tur data kelompok LDAP tersebut telah
dibuat pada pembahasan artikel kedua:
Using builtin directory structureadding new entry: dc=DYNRE,dc=COMfailed to add entry: Already exists at ./smbldap-populate.pl line 323, <GEN1> line 2.adding new entry: ou=People,dc=DYNRE,dc=COMfailed to add entry: Already exists at ./smbldap-populate.pl line 323, <GEN1> line 3.adding new entry: ou=Group,dc=DYNRE,dc=COMfailed to add entry: Already exists at ./smbldap-populate.
INFOLINUX 09/2005 63
TUTORIALBerita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
LDAP
pl line 323, <GEN1> line 4.adding new entry: ou=Computers,dc=DYNRE,dc=COMadding new entry: uid=Administrator,ou=People,dc=DYNRE,dc=COMadding new entry: uid=nobody,ou=People,dc=DYNRE,dc=COMfailed to add entry: Already exists at ./smbldap-populate.pl line 323, <GEN1> line 7.adding new entry: cn=Domain Admins,ou=Group,dc=DYNRE,dc=COMadding new entry: cn=Domain Users,ou=Group,dc=DYNRE,dc=COMadding new entry: cn=Domain Guests,ou=Group,dc=DYNRE,dc=COMadding new entry: cn=Administrators,ou=Group,dc=DYNRE,dc=COMadding new entry: cn=Users,ou=Group,dc=DYNRE,dc=COMfailed to add entry: Already exists at ./smbldap-populate.pl line 323, <GEN1> line 12.
adding new entry: cn=Guests,ou=Group,dc=DYNRE,dc=COMadding new entry: cn=Power Users,ou=Group,dc=DYNRE,dc=COMadding new entry: cn=Account Operators,ou=Group,dc=DYNRE,dc=COMadding new entry: cn=Server Operators,ou=Group,dc=DYNRE,dc=COMadding new entry: cn=Print Operators,ou=Group,dc=DYNRE,dc=COMadding new entry: cn=Backup Operators,ou=Group,dc=DYNRE,dc=COMadding new entry: cn=Replicator,ou=Group,dc=DYNRE,dc=COMadding new entry: cn=Domain Computers,ou=Group,dc=DYNRE,dc=COM
Administrasi userPerintah-perintah untuk administrasi user
dan group ini sintaksnya sangat mirip de-
ngan perintah standar untuk administrasi
user dalam Linux, seperti userdel, useradd,
dan usermod. Hanya di sini ditambah bebe-
rapa parameter yang khusus untuk samba.
� smbldap-usermod.pl: memodifi kasi user
account yang ada.
User account Linux dalam LDAP server
yang dibuat tanpa menggunakan utili ty
smbldap ini tidak akan mempunyai ob-
jectclass sambaSamAccount. Dalam ar-
tikel kedua telah terdapat user account
junusd, tetapi user account ini tidak dapat
digunakan untuk login ke Samba server
sebelum ditambahkan objectclass sam-
baSamAccount, lalu masukkan password:
# smbldap-usermod.pl -a junusd# smbldap-passwd.pl junusd
� smbldap-useradd.pl: menambah user dan
komputer account.
Pada Samba, jika di-setting konfi gurasi nya
menyerupai Windows NT, nama worksta-
tion terlebih dahulu harus ditam bahkan
ke server melalui smbldap-useradd.pl -w
ini. Jadi utility smbldap ini ber guna untuk
INFOLINUX 09/200564
TUTORIAL Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
LDAP
administrasi user account dan komputer
account. Itu berlaku untuk setiap mesin
workstation yang terkoneksi ke server.
� smbldap-userdel.pl: menghapus user dan
komputer account.
Selain bertujuan utama menghapus user
account, komputer account dapat diha-
pus dengan menyebutkan nama kom-
puter account tersebut.
� smbldap-usershow.pl: menampilkan user
account tertentu.
Administrasi group� smbldap-groupmod.pl: memodifi kasi group
yang ada.
Group Linux dalam LDAP server yang
dibuat tanpa menggunakan utility
smbldap ini tidak akan mempunyai ob-
jectclass sambaGroupMapping. Dalam
artikel kedua, telah terdapat group users,
tetapi group ini tidak dapat digunakan
sebagai group Samba sebelum ditambah-
kan objectclass sambaGroupMapping:
# smbldap-groupmod.pl -a users
� smbldap-groupadd.pl: menambah group.
� smbldap-groupdel.pl: menghapus group.
� smbldap-usershow.pl: menampilkan group
tertentu.
Migrasi dari Windows NTMigrasi Windows NT server yang telah ber-
tahun-tahun ada dalam kantor dapat di-
lakukan menjadi Samba server, dengan tetap
mempertahankan user, group, dan kompu-
ter account yang ada di Windows NT. Setelah
proses migrasi selesai, tidak terjadi peruba-
han sama sekali di sisi mesin-mesin worksta-
tion client, atau transparant. Hal ini sangat
penting untuk meminimalkan komplain dari
user. Jika berhasil dengan baik, kemudian
pemindahan fi le-fi le data yang ada, printer
driver, dan ACL atribut sekuriti yang ada juga
berlangsung dengan lancar, akan membuat
user tanpa sadar telah menggunakan Samba
sebagai pengganti Windows NT server.
Di sini tidak diberikan secara detail cara-
nya, hanya diberikan garis besarnya untuk
menghindarkan kompleksitas artikel ini.
� Pada Windows NT server, login seba-
gai Administrator, lalu jalankan utility
pwdump yang bisa didownload dari ftp://
ftp.samba.org/pub/samba/pwdump/.
� Kemudian fi le teks hasil pwdump ini
di-copy ke mesin Samba, lalu jalan-
kan smbldap-migrate-accounts.pl dan
smbldap-migrate-groups.pl.
� Terakhir, dengan teliti dan hati-hati se-
suaikan uid dan gid dari tiap-tiap user
dan group account yang telah ada di
Linux dengan user dan group account
yang ada pada Windows NT.
Administrasi user dengan JXplorerJXplorer merupakan utility LDAP browser
berbasis Java. Sebelum menjalankan utili-
ty ini, terlebih dahulu download JRE (Java
Runtime Environment) dari www.javasoft.
Gambar 3. Modifikasi atribut alamat email dengan JXplorer.
com. Sedangkan JXplorer dapat di-down-
load dari www.pegacat.com/jxplorer. Melalui
utility ini atribut tiap item dalam direktori
dapat ditambah, dihapus, maupun dimodi-
fi kasi langsung secara manual.
Berikut ini contoh untuk mengedit ala-
mat email dari user junusd. Melalui contoh
ini, pembaca dapat mengubah atribut-atribut
lainnya sesuai dengan yang dikehendaki.
� Jalankan jxplorer.sh, kemudian ke menu
“File”-> “Connect”
� Ketikan account untuk koneksi ke LDAP
server seperti tampak dalam gambar 2.
� Host: ldap.dynre.com
� Base DN: dc=dynre,dc=com
� Level: User + Password
� User DN: uid=root,ou=people,dc=dy
nre,dc=com
� Password: “ldappassword(uid=root,o
u=people,dc=dynre,dc=com)”
Tekan tombol “OK”. Hasilnya seperti
gambar 3.
� Pada pohon (tree), klik kelompok “Peo-
ple”, lalu klik “junusd”, lalu klik Tab
“Table Editor” pada bagian kanan atas.
� Pada atribut “mail” ketik alamat e-mail.
� Tekan tombol “Submit”.
Dalam ketiga artikel telah dijelaskan cara
penggunaan servis direktori LDAP sebagai
pusat autentifi kasi user account, sehingga
seluruh data user account pada sistem kom-
puter pada perkantoran terintegrasi secara
penuh. Namun, manfaat LDAP ini tidak
hanya tertutup sebagai pusat autentifi kasi
user account saja. Masih ada manfaat lain
dari LDAP yang pada pokoknya merupakan
servis yang berfungsi memberikan informa-
si direktori. Misalnya, sebagai informasi di-
rektori karyawan, address book dari aplikasi
e-mail, dan sebagainya.
Junus Djunawidjaja (junusd@dynre.com)
Gambar 2. JXplorer dialog koneksi.
IKLAN
INFOLINUX 09/200566
TUTORIAL Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
LIDS
Ketika kali pertama mendengar nama
LIDS (Linux Intrusion Detection
System) yang langsung terbayang
di benak saya adalah sebuah aplikasi yang
berfungsi sebagai sistem pendeteksi penyu-
sup pada network semacam SNORT. Na-
mun saya keliru besar, karena ternyata yang
dimaksud itu adalah NIDS (Network Intru-
sion Detection System). LIDS adalah sebuah
patch dan tool admin untuk mengoptimal-
kan fungsi keamanan pada kernel Linux.
LIDS merupakan sebuah implementasi dari
referensi monitor pada kernel. LIDS juga
merupakan sebuah Mandatory Access con-
trol pada kernel.
Mengapa menggunakan LIDS?Mungkin pertanyaan ini akan kerap kali
mun cul. Mengapa menggunakan LIDS, se-
mentara banyak security patch yang dibuat
oleh berbagai pihak? Jawabannya cukup
sederhana, “Sesuai dengan kebutuhan”,
atau lebih cocok dengan istilah “Use the
right tools for the right jobs”. Masing-masing
patch yang dikeluarkan tentunya memiliki
kelebihan ter sendiri, dan itu semua kembali
kepada anda, patch mana yang paling cocok
untuk keperluan Anda.
Namun yang perlu diperhatikan adalah
beberapa permasalahan yang ada pada
sistem operasi Linux secara umum, yaitu:
� File system tidak memiliki proteksi atau
pengamanan.
� Proses yang berjalan tidak memiliki pro-
teksi atau pengamanan.
� Administrasi terhadap system tidak ter-
lindungi.
� Super User (root) memiliki kekuasaan
penuh yang dapat melanggar hak.
� Model dari Access Control List (DAC)
pada Linux belum lah cukup.
Begitulah beberapa permasalahan umum
yang terdapat pada sistem operasi Linux.
Tapi isu yang paling besar dari permasalahan
di atas adalah account “Maha Dewa” root.
Per ma sa lahan ini pun mungkin terdapat
pula pada system *NIX lainnya. Jika sebuah
proses atau user memiliki privileges root,
maka tidak ada sedikit pun alasan yang dapat
mencegah pro ses atau user tersebut untuk
meng hancurkan sistem. Tidak heran jika ac-
count atau privileges root sangat diminati oleh
para intruder. Hal ini sangat membuat me-
reka yang bertugas sebagai sysadmin harus
menderita sakit kepala, pusing tujuh keliling.
Permasalahan inilah yang ingin ditangani
oleh LIDS dengan mengimplementasikan
Access Control Lists (ACLs) untuk mencegah
mereka yang ingin merusak sistem, meski
mereka memiliki privi leges root sekali pun.
Dengan ACLs, LIDS ini mampu melakukan
proteksi terhadap fi le dan proses.
Fitur-fitur pada LIDSFitur yang ditawarkan oleh LIDS cukup
banyak dan cukup untuk melindungi mesin
Linux anda dari tangan-tangan jahil para in-
truder. Fitur-fi tur tersebut adalah:
� Perlindungan atau proteksi terhadap fi le
dan direktori dari apa pun termasuk root
pun tidak dapat melakukan perubahan
dari fi le atau direktori yang diproteksi.
Bahkan sebuah fi le pun dapat disembu-
nyikan (hidden).
� Perlindungan atau proteksi terhadap
proses dari apa saja, termasuk root, tidak
dapat mematikan proses yang diproteksi.
Bahkan sebuah proses dapat disembu-
nyikan (hidden).
� Access Control Lists yang lebih baik.
� Dapat menggunakan dan menambahkan
kapabilitas untuk mengontrol seluruh
sistem.
� Peringatan terhadap keamanan langsung
dari kernel.
� Pendeteksi port scanner pada kernel.
� Mendukung framework LSM (Linux Se-
curity Model) pada kernel 2.5.x dan 2.6.x.
� Pembatasan (restriction) terhadap akses
proses jaringan.
Kekurangan LIDSJika sebuah sistem memiliki kelebihan tentu
ia juga akan memiliki kekurangan, demiki-
an juga dengan LIDS. Beberapa kekurangan
LIDS yang saya amati di antaranya:
� Setiap fi le dan proses yang berada pada
system linux harus memiliki ACLs, hal ini
tentu akan cukup merepotkan. Namun,
hal ini dapat dimaklumi karena keamanan
berbanding terbalik dengan kenyamanan.
� Kesalahan dalam mendefi nisikan ACLs
akan mengunci sistem, sehingga kita ti-
dak dapat berbuat apapun.
Mengamankan Server Linux dengan LIDSBagian 1 dari 2 Artikel
Di satu sisi, banyak hacker yang selalu mencari tahu kelemahan sistem untuk diperbaiki. Di sisi lain, banyak hacker yang berusaha mencari tahu dan mengembangkan berbagai cara untuk melindungi sistem dari serangan-serangan yang sangat tidak diinginkan. Beri-kut ini kita membahas salah satu karya hacker, LIDS.
INFOLINUX 09/2005 67
TUTORIALBerita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
LIDS
� Setiap fi le harus memiliki ACLs yang
jelas, tak terkecuali untuk fi le yang berisi
scripting. Untuk hal ini ACLs juga harus
diturunkan terhadap fi le lain yang akan
dipanggil oleh skrip tersebut.
� LIDS belum mampu untuk mendeteksi
keanehan-keanehan atau penyerangan
pada level aplikasi, contohnya seperti pe-
nyerangan terhadap web melalui proto-
kol http, sql injection.
Implementasi LIDSDi atas telah dibahas mengenai kelebihan,
kekurangan serta fi tur-fi tur yang ditawarkan
oleh LIDS, namun bagaimana implemen-
tasinya pada dunia nyata? Bagaimana LIDS
dapat membantu Anda mengamankan me-
sin Linux anda? Berikut implementasi LIDS
dalam dunia nyata untuk mengamankan me-
sin Linux Anda.
Berikut ini beberapa metode penyera-
ngan secara remote (jarak jauh) yang umum
dilakukan oleh para intruder, dan bagaima-
na LIDS mencegahnya:
1. Intruder melakukan port scanning Gambar 1 menunjukkan proses port
scanning dan dua tindakan LIDS, yaitu
memberi tahu ke system administrator
dan menutup semua port.
2. Remote exploit untuk mendapatkan privilege root
Gambar 2 menunjukkan proses intruder
berusaha mengakses root dan cara LIDS
mencegahnya.
3. Remote exploit untuk melakukan port binding/connect back
Gambar 3 menjelaskan proses intruder
mengakses root, menjelajahi sistem dan
membuat back door, serta tindakan LIDS
mengatasi remote exploit ini.
4. Expolit lokal terhadap sebuah daemon yang berjalan
Gambar 4 menunjukkan salah satu dari
metode penyerangan secara lokal yang
umum dilakukan oleh para intruder, dan
bagaimana LIDS mencegahnya.
Cerita di atas hanya sebagian kecil dari
berbagai teknik yang dilakukan oleh para
intruder untuk mendapatkan akses root
terhadap sistem, serta bagaimana LIDS
mempersulit intruder dalam mendapat-
kan akses ter hadap root atau bahkan akses
penuh ter hadap sistem. Masih banyak teknik
yang digunakan oleh para intruder untuk
me nguasai sistem, di sini lah LIDS ber-
tugas untuk mempersulit mereka agar
tidak menguasai bahkan merusak sistem.
Namun, sekali pun Anda menggunakan
patch pengamanan berlapis tujuh seke-
las LIDS, tapi jika Anda malas mengikuti
perkembangan dan memperbarui sistem
Anda, semua ini akan sia-sia.
Prasyarat instalasi LIDSDalam tulisan ini penulis berasumsi bah-
wa pembaca telah memiliki pengetahuan
dasar tentang kernel serta cara melakukan
kompilasi kernel. Distribusi Linux yang
digunakan pada tulisan ini adalah Red Hat
Linux 9.0, terinstalasi lengkap dengan paket
development.
Kebutuhan awal:
1. Kernel versi 2.4.29 dapat diambil dari
situs resmi kernel http://www.kernel.
org atau mirror terdekat http://kambing.
vlsm.org/kernel-linux.
2. LIDS versi 1.2.2 untuk kernel 2.4.29 ber-
nama linux-2.4.29-lids1.2.2-ow1.diff.
bz2, dapat diambil dari http://www.lids.
org atau http://irvan.or.id/download.php.
3. LIDS Tool versi 0.5.6 dapat diambil dari
http://lids.planetmirror.com/download/
lidstools/lidstools-0.5.6.tar.gz , atau dari
mirror terdekat http://irvan.or.id/down-
load.php.
4. Paket development pada linux sperti gcc,
gnumake, ncurses, dan lain-lain.
Tahapan instalasi dan konfigurasi LIDSKini kita akan masuk kepada tahapan insta-
lasi dan konfi gurasi LIDS untuk melindungi
mesin dari tangan intruder, dengan paket-
paket yang telah dikumpulkan. Tahapan ini
dibagi lagi menjadi beberapa langkah, yaitu:
� Patching dan kompilasi kernel Linux
dengan LIDS.
� Instalasi lidstool.
� Konfi gurasi ACLs pada LIDS.
Mari kita mulai tahapan-tahapan tersebut.
1. Patching dan kompilasi kernel Linux dengan LIDS
Pertama-tama agar semua paket tersusun
rapih, buat direktori yang bernama lids di
Gambar 3. Remote exploit dan port binding.
Gambar 4. Penyerangan lokal.
Gambar 1. Proses port scanning.
Gambar 2. Akses privilege root dan cara mengatasinya.
INFOLINUX 09/200568
TUTORIAL Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
LIDS
bawah direktori /var/tmp.
# mkdir -p /var/tmp/lids
Lalu salin semua paket yang dibutuhkan
ke dalam direktori /var/tmp/lids kemudian
pindah ke direktori /usr/src.
# cd /usr/src
Ekstrak paket kernel linux-2.4.29.tar.bz2.
# tar -jxvf /var/tmp/lids/linux-2.4.29.tar.bz2
Buat symbolic link /usr/src/linux yang
mengarah ke /usr/src/linux-2.4.29.
# ln -s linux-2.4.29 linux
Salin dan ekstrak linux-2.4.29-lids1.2.2-
ow1.diff.bz2.
# cp /var/tmp/lids/linux-2.4.29-lids1.2.2-ow1.diff.bz2# bunzip2 linux-2.4.29-lids1.2.2-ow1.diff.bz2
Patch kernel Linux dengan LIDS.
# cd linux# patch -p1 < ../linux-2.4.29-lids1.2.2-ow1.diff
Konfi gurasikan kernel.
# make mrproper# make menuconfig
Dari perintah make menuconfi g akan
menghasilkan tampilan konfi gurasi seperti
gambar 5.
Pada menu pertama terdapat pilihan
Code maturity level options. Masuk pada
menu tersebut dan aktifkan pilihan Prompt
for incomplete driver. Hal ini sangat dianjur-
kan pada HOWTO dari situs yang bersang-
kutan sebelum kita mengaktifkan LIDS.
Ketika kernel telah di-patch, maka akan
tampil satu menu yaitu menu Linux Intru-
sion Detection System.
Untuk dapat menggunakan LIDS seperti
yang ditunjukan pada HOWTO dari situs
yang terkait, Anda harus mengaktifkan be-
berapa pilihan pada menu Linux Intrusion
Detection System. Untuk kebutuhan awal
hanya dengan konfi gurasi dasar, sudah sa-
ngat cukup untuk melindungi system anda
dari tangan-tangan intruder.
Masuk ke menu Linux Intrusion Detec-
tion System dan aktifkan pilihan yang ada
seperti berikut:
[*] Linux Intrusion Detection System support (EXPERIMENTAL) --- LIDS features(512) Maximum protected objects to manage (512) Maximum ACL subjects to manage(512) Maximum ACL objects to manage[ ] Hang up console when raising a security alert [*] Security alert when execing unprotected programs before sealing LIDS [ ] Do not execute unprotected programs before sealing LIDS [*] Attempt not to flood logs (60) Authorised time between two identic logs (seconds) [*] Allow switching LIDS protections/features [*] Allow switching LIDS/LIDS_GLOBAL [*] Implicitly protect LIDS admin passwd [ ] Restrict mode switching to specified terminals (3) Number of attempts to submit password (3) Time to wait after a fail (seconds) [ ] Allow any program to switch LIDS protections [*] Allow reloading config.
Gambar 6. Menuconfi g LIDS.
Gambar 5. Konfigurasi kernel dengan make menuconfig.
INFOLINUX 09/2005 69
TUTORIALBerita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
LIDS
file [*] Port Scanner Detector in kernel [*] Send security alerts through network [*] Hide klids kernel thread(3) Number of connection tries before giving up[*] Attempt not to flood logs(60) Authorised time between two identic logs (seconds) [*] Allow switching LIDS protections/features [*] Allow switching LIDS/LIDS_GLOBAL [*] Implicitly protect LIDS admin passwd [ ] Restrict mode switching to specified terminals (3) Number of attempts to submit password (3) Time to wait after a fail (seconds) [ ] Allow any program to switch LIDS protections [*] Allow reloading config. file [*] Port Scanner Detector in kernel [*] Send security alerts through network [*] Hide klids kernel thread(3) Number of connection tries before giving up (30) Sleep time after a failed connection (16) Message queue size [*] Enable security network [*] Enable NETFILTER MARK[*] Enable Trusted Path Execution (TPE) mode feature [ ] Enable Trusted Domain Enforcement (TDE) feature [ ] Enable CAP_LIDS_SANDBOX_EFF_SET [ ] LIDS Debug
Keluar dan simpan konfi gurasi tersebut
serta lakukan kompilasi kernel Linux.
# make dep clean module module_install bzImage
Salin kernel dan System.map yang baru
ke direktori /boot.
# cp /usr/src/linux/arch/i368/boot/bzImage /boot/vmlinuz-2.4.29# cp /usr/src/linux/System.map /boot/System.map-2.4.29
Edit fi le konfi gurasi boot loader Anda,
sesuaikan partisi harddisk Anda. Untuk lilo,
pada /etc/lilo.conf tambahkan baris kernel
baru sebagai berikut:
image=/boot/vmlinuz-2.4.27 label=linux read-only root=/dev/hda5
Simpan konfi gurasi tersebut lalu keluar
dari editor dan ketik:
# lilo
Untuk grub, tambahkan baris berikut
pada /etc/grub.conf (jika tidak ada grub.
conf, edit fi le /boot/grub/menu.lst):
title Red Hat Linux, LIDS Kernel root (hd0,4) kernel /boot/vmlinuz-2.4.29 root=/dev/hda5 ro
Sekali lagi, sesuaikan posisi partisi root
dalam yang ditunjuk Lilo atau Grub di atas
dengan posisi root yang ada di partisi hard-
disk Anda.
2. Instalasi lidstoolsSelanjutnya kita akan melakukan instalasi
paket lidstools. Lidstools adalah paket yang
berisi tools administrasi LIDS digunakan
untuk membuat ACLs. Berikut langkah-
langkah dalam menginstal lidstools.
Pindah direktori ke /usr/src dan ekstrak
paket source lidstools.
# cd /usr/src# tar -zxvf /var/tmp/lids/lidstools-0.5.6.tar.gz
Pindah ke direktori source code lidstools.
# cd lidstools-0.5.6
Konfi gurasi, compile dan instal lidstools
dengan langkah berikut:
# ./configure KERNEL_DIR=/usr/src/linux# make# make install
Isikan password jika ditanyakan. Selan-
jutnya edit fi le /etc/lids/lids.ini, dan ubah
paramater ACL_DISCOVERY=0 menjadi
ACL_DISCOVERY=1. Hal ini dimaksud-
kan untuk membantu anda dalam mem-
buat ACLs. Selanjutnya simpan konfi gurasi
dan restart mesin anda dengan kernel yang
baru.
Jika tidak menemui kendala pada lang-
kah pertama dan kedua, Anda akan berada
pada shell dengan kernel yang baru. Lang-
kah berikutnya adalah langkah yang sangat
penting, yaitu mengonfi gurasikan ACLs
LIDS pada sistem. Bagian yang akan dibahas
pada edisi berikut itulah yang menentukan
dalam melindungi sistem Anda.
Irvan (irv@irvan.or.id)
Gambar 7. Menuconfig LIDS lebih detail.
INFOLINUX 09/200570
TUTORIAL Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
Squid
Proxy server adalah server yang ber-
guna sebagai perantara antara cli-
ent dengan server gateway sebelum
berhubungan ke Internet. Dengan adanya
proxy server ini, maka url / situs yang sering
di-browse akan semakin terasa semakin cepat
terakses oleh user, karena telah disimpan di
dalam squid cache. Selain itu, proxy server
juga memiliki fungsi lainnya, di antaranya
autentifi kasi user, memblok situs, memblok
banner, dan lain-lain.
Pada edisi sebelumnya, saya sudah
menjelaskan tentang cara pengonfi gurasian
Squid dengan membahas studi kasus per-
tama sampai dengan ketiga. Sesuai dengan
janji penulis sebelumnya, sekarang akan
melanjutkannya dengan studi kasus keem-
pat sampai dengan ketujuh. Dan studi kasus
yang akan dibahas kali ini, yaitu:
4. Memblok banner menggunakan redirec-
tor adzap.
5. Membatasi ukuran fi le (kuota) yang
bisa di-download oleh user pada interval
waktu tertentu.
6. Autentifi kasi user.
7. Transparant Proxy.
Untuk mempersingkat waktu, Anda
dapat dapat langsung membaca tutorial di
bawah ini:
4. Memblok banner situs menggunakan redirector adzap.
Pernahkah Anda membuka situs terkenal
seperti yahoo mail, detik.com, ataupun situs
terkenal yang lainnya? Kalau Anda pernah
membuka situs tersebut, pasti akan meli-
hat banyaknya banner yang menempel di
situs tersebut. Dengan terbukanya banner,
sebetulnya kita telah membuang bandwidth
dengan sia-sia hanya untuk menampilkan
banner itu.
Lalu, adakah program redirector squid
yang dapat digunakan untuk memblok
banner? Tentu ada, untuk melakukan hal
tersebut Anda dapat menggunakan salah
satu program redirector squid yang ber-
nama adzap. Dengan adzap gambar ban-
ner yang ada akan diubah menjadi tulisan
adzap.
Untuk pembahasan lebih lanjut
bagaimana setting redirector adzap dan
squidguard dapat berjalan bersamaan atau
dengan kata lain bagaimana menggunakan
multiple redirector, ikuti langkah-langkah
di bawah ini:
1. Download program adzap dari internet.
http://adzapper.sourceforge.net/adzap-
20050605.tar.gz
2. Pastikan perl, apache dan segala yang
berkenaan dengan program ini sudah
terinstalasi dengan baik di sistem Anda.
# perl -v
3. Berikutnya, extract source adzap yang
telah Anda download tersebut, ke direc-
tory /usr/local.
# tar -xzvf adzap-20050605.tar.gz -C /usr/local# cd /usr/local/adzap
Copy fi le-fi le berikut ke Document Root
Apache anda, misal di Fedora Core 3 ter-
letak di /var/www/html
# cd /var/www/html# mkdir adzap# cd adzap# cp /usr/local/adzap/zaps/*.gif /var/www/html/adzap# cp /usr/local/adzap/zaps/*.html /var/www/html/adzap# cp /usr/local/adzap/zaps/*.js /var/www/html/adzap
4. Edit fi le wrapzap yang ada di /usr/local/
adzap/scripts, pada bagian:
zapper=/usr/local/adzap/scripts/squid_redirectZAB_BASE=http://localhost/adzap.............................
Step By Step Konfigurasi Squid Proxy Server dengan Berbagai Studi KasusBagian 2 dari 2 Artikel
Proxy server adalah server yang berguna sebagai perantara antara client dengan server gateway sebelum berhubungan ke Internet. Dengan adanya proxy server ini, maka url / situs yang sering di-browsing akan semakin terasa semakin cepat terakses oleh user, karena telah disimpan di dalam cache proxy. Selain itu, proxy server juga memiliki fungsi lainnya, di antaranya autentifikasi user, memblok situs, memblok banner, dan lain-lain.
INFOLINUX 09/2005 71
TUTORIALBerita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
Squid
.............................#exec “$zapper”# exec /path/to/zapchain “$zapper” /path/to/another/eg/squirmexec /usr/local/adzap/scripts/zapchain “$zapper” /usr/bin/squidguard
5. Edit squid.conf, tambahkan baris berikut:
.............................
.............................
#----------------------------# redirect program (bagian ini berisikan program tambahan yang akan digunakan # untuk meningkatkan kinerja squid).#Disini squid memanggil program wrapzap yang akan menjalankan dua buah #program redirector yang dipanggil oleh wrapzap yaitu redirector squid_re dan #redirector squidguard
redirect_program /usr/local/adzap/scripts/wrapzapredirect_children 5#----------------------------
#refresh patternrefresh_pattern ^ftp: 1440 20% 10080refresh_pattern ^gopher: 1440
0% 1440refresh_pattern . 0 20% 4320..........................................................
6. Setelah selesai, restart service squid Anda
# service squid restart
7. Jalankan juga service apache Anda.
# service httpd start
8. Check apakah redirector adzap dan re-
director squid guard sudah berjalan de-
ngan baik.
# ps ax | grep squid_re..........................................................9153 ? Ss 0:00 /usr/bin/perl /usr/local/adzap/scripts/zapchain /usr/local/adzap/scripts/squid_redirect /usr/bin/squidguard9156 ? Ss 0:00 /usr/bin/perl /usr/local/adzap/scripts/zapchain /usr/local/adzap/scripts/squid_redirect /usr/bin/squidguard/usr/bin/perl -w /usr/local/adzap/scripts/squid_redirect9164 ? S 0:00 /usr/bin/squidguard9168 ? S 0:01 /usr/bin/perl -w /usr/local/adzap/scripts/squid_redirect..........................................................
9. Test ke browser, dengan mengetikkan si-
tus yang terdapat banyak banner, misal:
www.detik.com, jika Anda melihat banner
yang terdapat pada situs detik.com telah
berubah menjadi tulisan This AdZaped,
berarti Anda telah berhasil mengonfi -
gurasikan squid untuk memblok banner
iklan.
10. Test juga dengan mengetikkan salah
satu situs yang termasuk ke dalam daf-
tar blacklist squidguard (ex:// http://20-
asian-pics.com). Jika situs tersebut te-
redirect ke situs http://www.eramuslim.
com, artinya Anda telah dapat men-
jalankan multiple redirector squid secara
bersamaan.
Bahkan jika ingin menambahkan pro-
gram redirector squid yang lain, Anda
hanya perlu menambahkan path pro-
gramnya di fi le wrapzap.
11. Untuk melihat log fi le, url yang berhasil
di blok banner-nya, Anda dapat menge-
tikkan perintah berikut :
# tail -f /var/log/httpd/access_log
5. Membatasi ukuran file (kuota) yang bisa di-download oleh user pada interval waktu tertentu.
Setelah melihat beberapa studi kasus di atas,
mungkin ada peningkatan kecepatan pada
waktu akses suatu sites yang dibuka oleh
user. Apalagi kalau situs tersebut sudah ter-
daftar kedalam cache squid.
Selain itu, kecepatan akses juga bergan-
tung pada jalur bandwidth yang anda sewa
Banner situs yang belum diblok sebelum menggunakan adzap. Banner situs yang telah diblok setelah menggunakan adzap.
INFOLINUX 09/200572
TUTORIAL Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
Squid
dari ISP. Lalu ada juga faktor yang pa ling
penting yang paling berpengaruh pada
waktu akses suatu situs, yaitu kebiasaan
beberapa user yang suka men-download di
Internet. Mengambil suatu fi le (download)
dari Internet memang menyenangkan bagi
beberapa user, akan tetapi kalau tidak disia-
sati dengan baik hal ini justru menimbulkan
masalah bagi user lainnya. Saat men-down-
load suatu fi le yang besar (ex:/ fi le iso cd
linux), biasanya bandwidth yang ada akan
berkurang secara drastis, sehingga user biasa
yang ingin sekadar browsing merasa begitu
lambat waktu akses Internetnya. Dan kalau
sudah begini, hal ini tentunya akan menu-
runkan produktivitas kerja.
Agar tidak terjadi hal yang demikian,
maka seorang administrator harus dapat me-
nentukan kebijakan yang berlaku pada saat
user men-download suatu fi le dari Internet.
Sebagai contoh, penulis akan menjelas-
kan dengan studi kasus agar dapat lebih
mudah dipahami.
Persyaratannya :
1. PT XYZ ingin agar semua komputer yang
terhubung ke Internet dibatasi jumlah
download-nya, yaitu ukuran fi le yang dapat
ter-download maksimal hanya 2 MB.
2. Ketentuan No. 1, hanya berlaku selama
jam kerja, yaitu dari jam 08.00–17.30,
setelah lewat dari jam tersebut, user be-
bas men-download fi le dengan ukuran
fi le tak terbatas.
Untuk menerapkan hal di atas, yang per-
lu Anda lakukan hanyalah menambahkan
beberapa setting-an di fi le squid.conf. Baca
langkah-langkah di bawah ini:
1. Buka fi le squid.conf
# vi /etc/squid.conf
2. Lalu edit pada bagian berikut:
.............................
.............................# Note : Untuk Settingan Lengkapnya, dapat anda temukandi CD InfoLINUX kali ini.
# acl definisi (bagian ini berisikan batasan-batasan yang akan dilakukan oleh # server squid). acl lan src 192.168.0.0/255.255.255.0 acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl SSL_ports port 443 563 acl Safe_ports port 80 21 443 563 70 210 1025-65535 acl Safe_ports port 280 acl Safe_ports port 488 acl Safe_ports port 591 acl Safe_ports port 777 acl CONNECT method CONNECT acl tdkbebasdownload time 08:00-17:30 # rule (bagian ini berisikan keterangan untuk membiarkan
atau menolak bagian acl # yang telah dibuat). http_access allow lan http_access deny manager http_access allow localhost http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access deny all acl magic_words2 url_regex -i ftp .exe .mp3 .vqf .tar.gz .gz .tar.bz2 .bz2 .rpm .zip .rar .avi .mpeg .mpe .mpg .qt .ram .rm .raw .wav .iso # Cancel download if file is bigger than 2MB = 2000 X 1024 byte = 2048000 byte reply_body_max_size 2048000 allow magic_words2 tdkbebasdownload # icp access icp_access allow lan
.............................
.............................
3. Restart service squid Anda, untuk meli-
hat perubahan:
# service squid restart
4. Pada saat jam kerja, coba Anda test
download suatu fi le dari Internet yang
besar fi lenya lebih dari 2 MB. Jika hasil-
Metode authentifikasi Squid dengan menggunakan mysql-auth.Peringatan file yang tidak bisa didownload karena melebihi kuota.
INFOLINUX 09/2005 73
TUTORIALBerita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
Squid
nya adalah peringatan ERROR, maka
settingan yang Anda lakukan sudah ber-
hasil. Test juga men-download suatu fi le
dengan ukuran kurang dari 2MB, jika
dapat ter-download berarti sudah tidak
ada masalah untuk pembatasan ukuran
fi le download ini.
5. Ketika waktu jam kerja telah lewat, Test
juga men-download fi le dengan ukuran
fi le lebih dari 2 MB, jika hasilnya fi le
tersebut dapat ter-download, berarti ke-
bijakan yang telah ditentukan telah ber-
jalan dengan baik.
6. Autentifikasi user menggunakan mysql_auth
Pada studi kasus kali ini, tidak ada hubu-
ngannya dengan studi kasus sebelumnya.
Kali ini penulis akan menjelaskan metode
autentifi kasi user dengan menggunakan
username dan password yang terdaftar di
server.
Program autentifi kasi yang akan penu-
lis jelaskan bernama mysql_auth. Dengan
mysql_auth ini, Anda akan lebih mudah
memanajemen username dan password,
karena dapat dihubungkan dengan interface
yang dibuat dengan PHP maupun bahasa
lainnya.
Logika program ini berjalan sebagai
berikut, jika username dan password yang
dimasukkan sesuai, maka program akan
menghasilkan output OK, dan autentifi -
kasi berhasil. Dan bila username maupun
password tidak sesuai, maka program akan
menghasilkan output ERR, dan autentifi kasi
akan gagal.
Kalau autentifi kasi berhasil, maka user
akan dapat browsing ke Internet. Tetapi jika
autentifi kasi gagal, user tersebut tidak dapat
browsing ke Internet.
Untuk mempersingkat waktu, coba Anda
ikuti penjelasan di bawah ini:
1. Download dahulu program mysql_auth-
0.8.tar.gz dari situs http://people.arxnet.
hu/airween/mysql_auth/, atau Anda
dapat mencarinya pada CD majalah In-
foLINUX edisi ini.
2. Setelah itu extract, fi le tersebut :
$ tar -xzvf mysql_auth-0.8.tar.gz
3. Pastikan program mysql-devel sudah
terinstal di sistem Anda, dan jangan lupa
untuk menjalankan service mysql.
# rpm -qa | grep mysql-develmysql-devel-3.23.58-13
# service mysqld start
4. Cari dan catat lokasi fi le mysql.h dan lib-
mysqlclient.a
$ locate mysql.h/usr/include/mysql/mysql.h
$ locate libmysqlclient.a/usr/lib/mysql/libmysqlclient.a
5. Berikutnya adalah Anda harus mengedit
terlebih dahulu fi le Makefi le program
mysql_auth.
$ cd mysql_auth-0.8/ $ vi Makefile
Edit pada bagian-bagian berikut :
a. CFLAGS = -I/usr/local/include -L/usr/local/lib
menjadi
CFLAGS = -I/usr/include/mysql -L/usr/lib/mysql
b. $(INSTALL) -o nobody -g nogroup -m 755 mysql_auth /usr/local/squid/libexec/mysql_auth
menjadi
$(INSTALL) -o squid -g squid -m 755 mysql_auth /usr/bin/mysql_auth
c. $(INSTALL) -o root -g root -m 700 mypasswd /usr/local/bin/mypasswd
menjadi
$(INSTALL) -o squid -g squid -m 755 mypasswd /usr/bin/mypasswd
d. $(INSTALL) -o nobody -g nogroup -m 600 $(CONF) /usr/local/squid/etc/mysql_auth.conf
menjadi
$(INSTALL) -o squid -g squid -m 600 $(CONF) /etc/mysql_auth.conf
e. dan beri tanda remark (#) pada
$(INSTALL) -o nobody -g nogroup -m 600 $(CONF) /usr/local/squid/etc/mysql_auth.conf.default
menjadi
#$(INSTALL) -o nobody -g nogroup -m 600 $(CONF) /usr/local/squid/etc/mysql_auth.conf.default
6. Pindah ke directory src, dan edit fi le de-
fi ne.h
$ cd src/ $ vi define.h
Edit pada bagian-bagian berikut:
#define CONFIG_FILE “/usr/local/squid/etc/mysql_auth.conf”
menjadi
#define CONFIG_FILE “/etc/mysql_auth.conf”
7. Edit juga fi le mysql_auth.conf
$ vi mysql_auth.conf
Ubah pada bagian berikut :
a. mysqld_socket /tmp/mysqld.sock
menjadi
mysqld_socket /var/lib/mysql/mysql.sock
b. encrypt_password_form NO
menjadi
encrypt_password_form YES
8. Selanjutnya compile dan instal
$ cd mysql_auth-0.8/ $ make $ su –c “make install”
INFOLINUX 09/200574
TUTORIAL Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
Squid
9. Tambahkan database untuk autentifi kasi
user
# cd scripts/ # mysql -u root -p < create_scripts
10. Sekarang coba Anda tes dengan menam-
bahkan user ke tabel data yang ada di
database mysql_auth dengan menggu-
nakan program mypasswd.
# mypasswd supri sup234 Password record ADDED succesfully.
Anda dapat mengeceknya ke dalam tabel
data yang ada di database mysql_auth,
apakah record yang baru dimasukkan
oleh program nypasswd, sudah ada.
# mysql -u root -p mysql_authmysql> select *from data;+-------+------------------+| user | password |+-------+------------------+| supri | 79d544277322393c |+-------+------------------+1 rows in set (0.21 sec)
Dapat Anda lihat hasilnya di atas, kalau
password yang kita masukkan untuk u ser
supri sudah langsung terenkripsi. Hal ini
karena setting-an yang terdapat di fi le
mysql_auth.conf, di mana nilai variabel
encrypt_password_form di set menjadi
YES.
11. Tes validasi user dan password yang telah
anda buat dengan menggunakan pro-
gram mysql_auth
ERR
# mysql_auth supri cobasupri sup234OK
12. Setelah hasil validasi sudah benar, lang-
kah berikutnya adalah menghubungkan
program mysql_auth dengan squid. Un-
tuk itu Anda dapat mengedit fi le squid.
conf.
# vi /etc/squid.conf..........................................................# Tambahan untuk authentifikasiauth_param basic program
/usr/bin/mysql_authauth_param basic realm Squid proxy-caching web serverauth_param basic children 5auth_param basic credentialsttl 2 hours..........................................................# acl definisi (bagian ini berisikan batasan-batasan yang akan dilakukan oleh server # squid).# Dan bagian ini adalah inti dari penerapan kebijakan yang ada di proxy server ..........................................................acl butuhpasswd proxy_auth REQUIREDacl myNet src 192.168.0.0/255.255.255.0acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_objectacl localhost src 127.0.0.1/255.255.255.255..........................................................
# rule (bagian ini berisikan keterangan untuk membiarkan atau menolak bagian acl # yang telah dibuat)...........................................................# Baris ini juga http_access allow butuhpasswdhttp_access allow myNethttp_access allow managerhttp_access allow localhosthttp_access deny !Safe_portshttp_access deny CONNECT !SSL_ports
# Baris ini juga authenticate_ip_ttl 2 hourshttp_access deny all
.............................
.............................
13. Test di browser, dengan mengetikkan ala-
mat suatu situs, kemudian tekan Enter.
Jika muncul layar autentifi kasi setelah
anda menekan tombol Enter, coba Anda
masukkan username dan password yang
telah dibuat, sebagai contoh : username
: supri, password: sup234.
Jika masuk dan tidak mengalami ma-
salah, berarti metode autentifi kasinya
sudah berjalan dengan baik.
7. Transparant proxySetelah menjelaskan keenam cara di atas,
akhirnya sampai juga pada cara terakhir yang
akan penulis jelaskan. Pada semua kasus se-
belumnya, Anda harus men-setting secara
manual setting-an proxy di web browser cli-
ent agar dapat ber-Internet. Mungkin kalau
hanya sepuluh client, hal itu tidak menjadi
masalah. Tetapi bagaimana jika komputer
yang harus disetting berjumlah ratusan,
tentu hal ini akan merepotkan Anda sebagai
administrator. Belum lagi jika suatu saat,
terdapat lagi perubahan IP dan port proxy
server yang digunakan.
Untuk menyiasati hal tersebut, diperlu-
kan suatu cara agar Anda tidak perlu me-
masukkan secara manual setting-an proxy
server yang berlaku. Caranya adalah Anda
dapat menggunakan transparant proxy.
Prinsip kerja transparant proxy adalah se-
buah fi rewall atau redirector lainnya akan
menangkap koneksi TCP yang ditujukan
ke port tertentu pada remote host, dan
kemudian akan mengarahkan koneksi
TCP tersebut ke proxy server lokal. Proxy
server menggunakan header HTTP untuk
menentukan ke mana proxy akan melaku-
kan koneksi dan request dari mana yang
akan di-proxy. Untuk mengaplikasikan
transparant proxy, Anda dapat memerlu-
kan aplikasi Iptables. Dengan Iptables, an-
da cukup membuat rule untuk menangkap
trafi k yang ditujukan untuk port 80, dan
mengarahkan trafi k ini ke port dari proxy
server (biasanya 3128 atau 8080).
Untuk lebih jelasnya, Anda dapat mengi-
kuti petunjuk yang diberikan ada di bawah
ini:
1. Dimisalkan kali ini Anda sudah dapat
menjalankan proxy server secara manual
dengan baik, sekarang tinggal bagaima-
na caranya agar dapat berjalan secara
transparant proxy.
2. Pastikan paket dan service iptables sudah
terinstal dengan baik di sistem Anda.
3. Squid terkonfi gurasi dengan menggu-
nakan port 3128.
INFOLINUX 09/2005 75
TUTORIALBerita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
4. Alamat network yang digunakan adalah
192.168.0.0/24.
Cara mengatur konfi gurasi transparant
proxy:
1. Pastikan kalau sistem telah mendukung
IP Forwarding. Caranya ubah parameter
yang ada di /etc/sysctl.conf pada bagian
ip_forward.
net.ipv4.ip_forward = 0
menjadi:
net.ipv4.ip_forward = 1
Setelah itu, restart service network Anda:
# service network restart
2. Berikutnya edit fi le squid.conf Anda, ke-
mudian tambahkan baris di bawah ini
pada bagian paling bawah dari fi le itu.
# transparent proxyhttpd_accel_host virtualhttpd_accel_port 80httpd_accel_with_proxy onhttpd_accel_uses_host_header on
3. Lakukan masquerading dengan menggu-
nakan iptables. IP masquerading berguna
untuk menghubungkan bebe rapa kom-
puter yang terkoneksi ke sebuah kom-
puter yang sudah terkoneksi ke Internet
agar dapat mengakses ke Internet, atau
istilahnya Internet Connection Sharing.
iptables -A POSTROUTING -j MASQUERADE -t nat -s 192.168.0.0/24 -o eth0
Option -o tersebut tolong anda sesuai-
kan dengan interface yang terdekat de-
ngan jaringan luar.
4. Selanjutnya arahkan semua permintaan
web pada port 80 ke port squid. Untuk
kondisi ini, terdapat dua buah opsi.
Jika squid dan fi rewall yang mengarah-
kan berada pada satu komputer, guna-
kan perintah ini:
iptables -t nat -p tcp -A PREROUTING -s 192.168.0.0/24 -d 0/0 –dport 80 -j REDIRECT –to-ports 3128
Jika Squid dan fi rewall yang mengarah-
kan tidak berada pada satu komputer.
Misal Squid berada pada komputer
yang ber-IP 192.168.0.4 dan port yang
digunakan adalah 3128 atau kita sebut
saja komputer ini dengan nama squid-
box. Dan satunya lagi komputer yang
terhubung ke Internet langsung sebagai
fi rewall mempunyai IP 192.168.0.1 kita
sebut saja komputer ini dengan nama
iptables-box. Dari komputer iptables-
box, coba Anda ketikkan perintah beri-
kut untuk mengaktifkan transparant
proxy di mesin squid-box.
iptables -t nat -A PREROUTING -i eth0 -s ! 192.168.0.4 -p tcp --dport 80 -j DNAT --to 192.168.0.4:3128
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -d 192.168.0.4 -j SNAT –to 192.168.0.1
iptables -A FORWARD -s 192.168.0.0/24 -d 192.168.0.4 -i eth0 -o eth0 -p tcp --dport 3128 -j ACCEPT
Setelah itu, coba amati fi le access.log di
mesin proxy Anda. Jika semuanya sudah
benar, seharusnya jika ada user yang se-
dang mengakses web, Anda sudah dapat
mengamati prosesnya dari mesin proxy
tersebut.
Demikian artikel tentang step by step
konfi gurasi Squid. Sebenarnya masih ba-
nyak lagi fungsi Squid lainnya yang dapat
anda telusuri lebih lanjut di fi le konfi gurasi
Squid.conf. Pada artikel ini, penulis sudah
menjelaskan secara garis besar konfi gurasi
Squid yang sering digunakan oleh sebagian
besar administrator.
Namun pada intinya, sesuaikan saja
de ngan kebijakan yang benar-benar dibu-
tuhkan oleh Anda. Terkadang tidak semua
fungsi yang ada benar-benar dibutuhkan di
dalam suatu jaringan.
Akhir kata, semoga dengan artikel sing-
kat ini, Anda dapat membuat proxy server
yang andal tanpa terbentur masalah harga
lisensi software proxy komersial yang ma-
hal. Indahnya dunia open source!
Supriyanto (supriyanto@infolinux.co.id)
Squid
INFOLINUX 09/200576
TUTORIAL Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
Mandriva Linux
Mengakali permasalahan instalasi,
itulah yang kita coba selesaikan
di sini. Linux memang menawar-
kan banyak kelebihan, tetapi untuk masalah
instalasi sepertinya Linux belum bisa me-
nenangkan para penggunanya.
Akan tetapi, Linux selalu memberikan
solusi untuk permasalahan yang selalu men-
jadi momok bagi pengguna Linux terutama
yang masih pemula. Memang tema yang di-
angkat di sini adalah menginstalasi melalui
jaringan, tapi tips ini juga bisa diimplemen-
tasikan pada komputer standalone.
Pada instalasi paket melalui jaringan
ini, kita pertama akan membangun sebuah
ser ver repositori. Pada server repositori
ini, ditempatkan semua paket Linux yang
akan diinstalasi ke komputer-komputer
client. Untuk komputer standalone, maka
komputer bertindak sebagai server reposi-
tori sekaligus sebagai komputer client. Pa-
ket-paket Linux di sini berupa paket-paket
RPM khusus distro Mandriva Linux. Se-
dangkan, paket-paket tarbal (tar.gz atau tar.
bz2) harus diubah terlebih dahulu menjadi
paket RPM. Untuk mengubah paket tarbal
menjadi paket RPM pernah dibahas pada
InfoLINUX terdahulu.
Distro yang digunakan kali ini adalah
Mandriva Linux, tetapi tips ini juga berlaku
bagi pengguna Mandrakelinux. Sedangkan,
tips instalasi paket melalui jaringan pada
distro-distro Linux lainnya akan kita bahas
pada InfoLINUX edisi-edisi mendatang.
Pertama, kita akan membangun server
repositori. Ingat, jalankan perintah-perin-
tah dibawah ini sebagai ‘root’, kecuali ben-
tuk prompt yang diperlihatkan adalah ‘$’.
Sebelumnya, periksalah server repositori
Anda, apakah instalasi Mandriva Linux su-
dah dilengkapi dengan paket Apache web
server, dengan perintah:
$ rpm -qa | grep apache
Jika terdapat keluaran, maka paket
Apache sudah terinstalasi. Jika belum, Anda
dapat menginstalasinya dengan:
# urpmi apache2
Bagi komputer standalone, Anda tidak
perlu menginstalasi paket Apache. Selain
itu, di sini diasumsikan bahwa server reposi-
tori menggunakan nomor IP 192.168.0.33.
Siapkan direktori utama untuk meletak-
kan paket-paket RPM Mandriva Linux. Pa-
da tutorial ini kita menggunakan contoh di-
rektori /home/repositori. Direktori ini bisa
Anda tentukan di mana saja. kemudian atur
permission direktori tersebut agar dapat
diakses oleh siapa saja:
# mkdir /home/repositori# chmod 755 /home/repositori
Kemudian, buatlah direktori di dalam-
nya untuk meletakkan paket-paket RPM
Mandriva Linux. Misalnya, paket-paket
RPM dari CD-CD instalasi Mandriva Linux
yang terdapat di dalam direktori media/
main pada setiap CD-CDnya dicopy ke di-
rektori /home/repositori/pakets. Kemudian,
masuklah ke dalam direktori tersebut dan
jalankan perintah ‘genhdlist’:
# mkdir /home/repositori/pakets
Tips Instalasi Paket Mandriva Linux Melalui JaringanMenginstalasi paket di Linux memang selalu dihadapkan dengan masalah dependensi. Tapi, hal tersebut bukanlah masalah lagi.
Gambar 1. Mempersiapkan direktori repositori. Gambar 2. Menambahkan baris Alias pada commonhttpd.conf.
INFOLINUX 09/2005 77
TUTORIALBerita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
www.infolinux.web.id
Mandriva Linux
# chmod 755 /home/repositori/pakets# cd /home/repositori/pakets# genhdlistparsing .
Apabila tidak terdapat keluaran pesan
error, berarti tidak terdapat masalah pada
paket-paket RPM didalam direktori ini.
Jika Anda ingin menambahkan direkto-
ri-direktori lain, misalnya direktori /home/
repositori/updates untuk menaruh paket-
paket RPM update Mandriva Linux resmi
yang diperoleh dari Internet, atau direktori
/home/repositori/penting untuk menaruh
paket-paket RPM yang harus terinstalasi
pada setiap komputer client jaringan.
Tapi, jangan lupa untuk mengatur per-
mission direktorinya agar dapat diakses oleh
siapa saja, jalankan perintah ‘genhdlist’.
Sekarang direktori untuk repositori pa-
ket-paket RPM Mandriva Linux sudah siap.
Kemudian, kita akan melakukan penga-
turan pada Apache web server agar dapat
diakses oleh komputer-komputer client.
Sebagai root, editlah fi le commonhttpd.
conf yang terdapat di direktori /etc/httpd/
conf dengan menggunakan tool editor (di
sini kami menggunakan vim).
# vim /etc/httpd/conf/commonhttpd.conf
Carilah di dalam fi le commonhttpd.conf
tersebut bagian Aliases, seperti pada gambar
2, kemudian tambahkan baris:
Alias /repositori /home/repositori
Sehingga menjadi seperti yang terlihat
pada gambar 2. Kemudian pada bagian ak-
hir dari fi le commonhttpd.conf tambahkan:
...<Directory /home/repositori> Options Indexes MultiViews AllowOverride None <IfModule mod_access.c> Order allow,deny Allow from all </IfModule></Directory>...
Sehingga menjadi seperti yang terlihat
pada gambar 3.
Sekarang, restart service Apache agar
perubahan-perubahan yang baru saja kita
lakukan terupdate pada service Apache:
# /etc/init.d/httpd restart
Periksalah apakah perubahan yang kita
lakukan barusan sudah benar dengan brow-
ser Firefox, dan coba kunjungi “http://local-
host/repositori/” atau “http://192.168.0.33/
repositori/”, maka seharusnya akan me-
nampilkan seperti pada gambar 4. Nah, se-
karang server repositori siap digunakan.
Lalu, untuk pengaturan pada komputer-
komputer client, jalankan perintah:
# urpmi.addmedia <nama repositori> http://<nomor IP server repositori/direktori
misalnya:
# urpmi.addmedia pakets http://192.168.0.33/repositori/pakets
Atau, gunakan cara yang lebih mu-
dah, yaitu dengan Mandrakelinux Control
Center. Pada komputer client, masuk ke
Menu->System->Confi guration->Confi gure
Your Computer. Kemudian, pilih tabulasi
Software Management, dan pilih icon “Se-
lect from where software packages are down-
loaded when updating the system”. Klik pada
tombol Add Custom, pilih medium “HTTP
server”, masukkan nama repositori pada
kolom “Name:” (misalnya: “pakets”), dan
masukkan situs tujuan pada kolom “URL:”
(misalnya: “http://192.168.0.33/repositori/
pakets”), lalu klik Ok. Maka, repositori pa-kets akan muncul pada tampilan jendela
“Media Manager”, klik Ok.
Anda bisa menambahkan repositori-re-
positori lainnya dengan melakukan lang-
kah-langkah yang sama seperti di atas.
Sekarang Anda dapat melakukan ins-
talasi paket dari komputer client melalui
Mandrakelinux Control Center tadi, dengan
mengklik icon “Look at installable software
and install software packages”. Di sana Anda
akan melihat paket-paket Mandriva Linux
yang tersedia.
Jika lebih menyukai melalui command
line, Anda bisa menggunakan perintah:
# urpmi <nama paket>
misalnya menginstalasi xmms dengan:
# urpmi xmms
Maka, urpmi akan menginstalasi seka-
ligus paket-paket dependensinya, Jadi Anda
tidak perlu bersusah-susah payah lagi.
E. Wiryadi Salim (wiryadi@infolinux.co.id)
Gambar 3. Menambahkan baris Direktori pada file commonhttpd.conf. Gambar 4. Mengetes perubahan pada commonhttpd.conf.
top related