TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Linux Admin
Mengamati Log Sistem Hampir 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.
T
ugas sistem operasi sangatlah berat. Selain bertugas dari sisi low level untuk berbicara dengan hardware dan mengatur proses sistem, sistem operasi juga harus bertindak layaknya seorang mata-mata 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 tidak 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 diembannya. Dengan demikian, log untuk hampir keseluruhan sistem pun dapat dicapai. Sebenarnya, apa saja yang bisa kita lakukan dengan log-log tersebut? Berikut ini adalah beberapa di antaranya: Troubleshooting. Tidaklah mudah untuk melakukan troubleshooting. Apalagi pada sistem yang kompleks. Namun setidaknya, dengan adanya log file, kita bisa mendapatkan sedikit catatan tentang apa yang terjadi sebelumnya. Ini diharapkan bisa membantu kita untuk memecahkan masalah. Audit keamanan. Umumnya, bicara masalah keamanan, sistem operasi multiuser seperti halnya Linux akan sangat peduli. Segala yang berhubungan dengan tindakan mengganggu hardware, mengganggu user lain, mengganggu sistem, mengganggu jaringan umumnya akan dicatat. Administrator dapat membuat script sederhana untuk melihat percobaan gangguan
50
INFOLINUX 09/2005
pada sistem. Hanya, tentu saja kita tidak bisa selalu mengandalkan log file 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, bantuan log file akan terasa sangat berguna. Umumnya, apa yang dilakukan oleh user untuk meminta service memang tidak akan dapat dicatat oleh server. Namun, penyedia service semacam SAMBA, SQUID dan HTTPD akan membantu sistem dengan menyediakan catatan yang lebih detail, sekaligus melengkapi log sistem (tidak semua service menyediakan fitur ini). Umumnya, satu masalah besar yang menghambat log adalah tidak terintegrasinya log file. Di Linux, log general untuk sistem memang tersedia (syslog), namun, tidak semua proses lantas memiliki hak untuk mengubah file tersebut begitu saja. Dengan demikian, beberapa aplikasi akan memilih untuk membuat log file sendiri di lokasi yang bervariasi: mulai dari home directory 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 memanfaatkan log file semaksimal mungkin untuk menjaga sistem. Setelah ini, kita akan mulai membahas beberapa log file yang dapat membantu kita untuk melakukan troubleshooting, audit keamanan dan audit service. Hampir semua file
www.infolinux.web.id
log akan disimpan di direktori /var/log. Anda akan membutuhkan hak akses root untuk dapat membaca semua log yang dibahas di artikel ini. Sebagai catatan, beberapa log file 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 file tertentu. Tulisan ini dibuat pada distro SUSE 9.3 Pro, namun seharusnya bisa diterapkan pada distro-distro lain.
/var/log/messages Ini adalah file log yang sangat sangat berguna. Hampir semua kejadian sistem akan didokumentasikan di sini. Karena file ini merupakan catatan hampir semua aktivitas sistem, maka hanya user root dan group root yang bisa membacanya (namun beberapa distro mengubahnya menjadi lebih ketat atau lebih longgar). File ini akan mencatat mulai proses booting sampai service. Umumnya, beberapa service besar juga akan mencatat ke file log ini, jadi, boleh dikatakan, file log ini memiliki 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 loaded Jun 14 11:44:29 tbiserv0 kernel:
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
TUTORIAL Linux Admin
Linux agpgart interface v0.100 (c) Dave Jones Jun 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: 941M Jun 14 11:44:29 tbiserv0 kernel: agpgart: AGP aperture is 128M @ 0xe8000000 Jun 14 11:44:29 tbiserv0 kernel: usbcore: registered new driver usbfs Jun 14 11:44:29 tbiserv0 kernel: usbcore: registered new driver hub Jun 14 11:44:29 tbiserv0 kernel: ACPI: PCI interrupt 0000:00:1d.7[D] -> GSI 23 (level, low) -> IRQ 185 Jun 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 scanned Jun 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.1 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(295) Jun 14 17:32:05 tbiserv0 nmbd[5939]: become_domain_ master_browser_bcast: querying subnet 192.168.0.1 for domain master brow ser on workgroup TBI-CKG ... ... Jun 14 17:33:38 tbiserv0 dhcpd:
www.infolinux.web.id
DHCPREQUEST for 192.168.0.99 from 00:0f:ea:e5:6b:22 (tbi03) via eth0 Jun 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 tersebut, bisa kita lihat bahwa messages mencatat apa yang terjadi pada kernel (umumnya 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 contoh, ketika kita mencabut kabel dari kartu jaringan dan memasangnya kembali: Jun 14 17:34:00 tbiserv0 kernel: eth0: network connection down Jun 14 17:34:02 tbiserv0 kernel: eth0: network connection up using port A Jun 14 17:34:02 tbiserv0 kernel: speed: 100 Jun 14 17:34:02 tbiserv0 kernel: autonegotiation: yes Jun 14 17:34:02 tbiserv0 kernel: duplex mode: full Jun 14 17:34:02 tbiserv0 kernel: flowctrl: symmetric Jun 14 17:34:02 tbiserv0 kernel: irq moderation: disabled Jun 14 17:34:02 tbiserv0 kernel: scatter-gather: enabled Jun 14 17:34:02 tbiserv0 kernel: tx-checksum: enabled Jun 14 17:34:02 tbiserv0 kernel: rx-checksum: enabled
Dengan banyaknya kejadian yang dicatat oleh file ini, ukuran file 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 mengetahui apa yang diinginkan dengan bantuan program grep dan menyaringnya dengan kata kunci yang telah didefinisikan (grep bertingkat bisa diterapkan untuk pencarian yang lebih akurat). Atau, Anda dapat lang-
INFOLINUX 09/2005
51
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Linux Admin
sung membuka file log ini dan mencari dengan 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 dilakukan selama melayani koneksi. Log yang dicatat mencakup kegiatan selama melayani ataupun ketika terjadi kegagalan. Lokasi file log akan sangat tergantung pada distro yang Anda gunakan (cobalah /var/log/httpd apabila apache2 tidak ditemukan). Yang menarik dari web server ini adalah level log yang jelas dan sangat mudah untuk diatur di file konfigurasi 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 - “-” “MicrosoftWebDAV-MiniRedir/5.1.2600” 192.168.0.99 - - [21/Jun/2005: 12:39:27 +0700] “PROPFIND / NETLOGON HTTP/1.1” 405 972 “-” “Microsoft-WebDAVMiniRedir/5.1.2600” 192.168.0.99 - - [21/Jun/2005: 12:40:13 +0700] “OPTIONS / HTTP/1.1” 200 - “-” “MicrosoftWebDAV-MiniRedir/5.1.2600” 192.168.0.99 - - [21/Jun/2005: 12:40:13 +0700] “PROPFIND / dos HTTP/1.1” 405 972 “-” “Microsoft-WebDAVMiniRedir/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:
52
INFOLINUX 09/2005
[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 dituliskan dengan sangat mudah dibaca. Mulai dari notice, warn, dan error.
/var/log/samba/log.* Bagi Anda yang menyalakan service SAMBA, Anda juga patut berbahagia. SAMBA termasuk salah satu proyek open source terbaik dari sisi dokumentasi dan pencatatan. Di dalam direktori /var/log/samba lah terdapat catatan dari segala aktivitas yang terjadi selama melayani. Umumnya, Anda akan memiliki dua file yaitu log.smbd dan log.nmbd. Apabila Anda menggunakan winbind, maka sebuah log tambahan, log.winbindd akan dapat Anda temukan. Di file-file log tersebut, dengan mudah Anda bisa melihat apa yang sedang terjadi, termasuk catatan berguna untuk menyelesaikan 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)
www.infolinux.web.id
[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 file log.smbd tersebut, Anda bisa melihat setiap detil koneksi SAMBA. Dalam contoh tersebut, kita bisa melihat bagaimana proses logout sedang dilakukan (closed connection). Contoh file 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 TBICKG 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)
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Linux Admin
***** Samba name server TBISERV0 is now a local master browser for workgroup TBI-CKG on subnet 192.168.0.1
melayani: 2005/06/21 Validation 2005/06/21 Validation 2005/06/21 44 Entries
11:50:18| Beginning Procedure 11:50:18| Completed Procedure 11:50:18| Validated
*****
Di file log.nmbd tersebut, Anda bisa melihat setiap detil SAMBA yang berhubungan dengan kegiatan name resolution. Pada contoh tersebut, terlihat proses bagaiman SAMBA server bernegosiasi menjadi LMB.
/var/log/squid/*.log Squid juga merupakan salah satu service yang sangat menyenangkan penggunanya. Di log yang dimiliki, squid mencatat hampir segalanya, mulai dari kegiatan melayani sebagai proxy sampai detail akses per komputer dan tujuan yang diakses. Berikut ini adalah beberapa baris dari cache.log, yang mencatat kegiatan selama
Sementara, berikut ini adalah catatan detil akses dari komputer client dan alamat yang dituju. Contoh berikut ini juga mempertunjukkan porn filter yang menolak user ketika mengunjungi 17tahun.com. 1119334601.378 785 192.168.0.98 TCP_DENIED/403 1285 GET http://17tahun.com/ - NONE/- text/html 1119334601.471 92 192.168.0.98 TCP_DENIED/403 1307 GET http://17tahun.com/favicon. ico - NONE/- text/html 1119334681.184 19 192.168.0.98 TCP_IMS_HIT/304 274 GET http://192.168.0.1/
www.infolinux.web.id
- NONE/- text/html 1119334685.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 file log ini, Anda bisa mengamati beberapa 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, kerjasamanya cukup baik dengan menuliskan informasi yang sangat detil di messages. Melihat log DCHCP di messages akan sangat membantu. Dengan tetap memperhatikan file 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 file log. Tetaplah mengawasi! Noprianto (
[email protected])
INFOLINUX 09/2005
53
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
PHP
Parsing Sederhana dengan Regular Expression Bagi Anda yang terbiasa bekerja dengan pemrograman atau SQL, tentunya bekerja dengan 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. Dengan 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.
B
ekerja dengan teks sebenarnya menyenangkan. Apabila Anda banyak bekerja dengan pemrograman atau SQL seperti disebutkan, banyak sekali pemrosesan teks yang terjadi pada bidang-bidang tersebut. Barangkali yang paling umum adalah bagaimana interpreter atau kompiler memeriksa apakah kode Anda benar atau tidak. Setelah itu, bagaimana interpreter atau kompiler mengenali maksud Anda mengetikkan 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 tidak akan tahu persis bagaimana seseorang menuliskan kode program atau sintaks SQL misalnya. Ada yang menuliskan dalam beberapa 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 contoh, berikut ini adalah aturan sintaks SELECT dalam PostgreSQL: SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
54
INFOLINUX 09/2005
* | 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 definisikan, 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 dimanfaatkan apabila Anda berniat untuk membangun aturan bahasa sendiri. Umumnya, 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 dipergunakan adalah bahasa PHP. Dan, tentu saja, karena regular expression bekerja dengan
www.infolinux.web.id
sangat lambat, maka kecepatan parsing akan jauh kalah dibandingkan kalau parsing dilakukan 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 lebih lanjut. Contoh yang paling nyata adalah ketika kita ingin membangun sendiri dokumentator dari source code kita. Regular expression yang akan kita bahas mencakup posix extended RE dan Perl Compatible RE, sebagaimana yang didukung oleh PHP. Versi PHP yang digunakan adalah 4.x.
Posix Extended Regular expression Posix extended RE adalah implementasi PHP untuk regular expression POSIX yang diatur dalam POSIX 1003.2. Umumnya, program-program di Linux yang kompatibel dengan standar POSIX juga menerapkan regular expression yang mengacu kepada standar POSIX tersebut. Contoh yang paling 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.
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
PHP
Umumnya, PHP yang terinstal pada sistem Anda telah dilengkapi dengan dukungan untuk regular expression ini, sehingga instalasi tambahan tidak diperlukan. Implementasi Posix RE di PHP dilakukan melalui fungsi-fungsi berikut ini: ereg_replace (untuk mengganti teks berdasarkan 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 berdasarkan pattern RE). spliti (sama seperti split, namun bekerja secara case insensitive). sql_regcase (pembuatan RE untuk pencarian case insensitive). Dengan fungsi-fungsi tersebut (yang sebenarnya sangat sedikit, hanya ada tiga sampai empat fungsi kalau tidak memperhatikan variannya), Anda sudah bisa membangun pemrosesan teks yang luar biasa menggunakan RE. Berikut ini adalah beberapa contoh sederhana.
ereg dan eregi Andai kata Anda memiliki sejumlah teks, di mana Anda ingin mengetahui apakah terdapat teks tertentu di dalam teks tersebut yang memiliki aturan tertentu, bisa mempergunakan fungsi ini. Secara umum, apabila terdapat kemungkinan bahwa teks dituliskan tanpa memperhatikan case (dan ini sangat umum terjadi), maka penggunaan eregi() akan lebih aman dan akurat. Contoh sederhana adalah bagaimana eregi() digunakan untuk mengetahui apakah tanggal yang dimasukkan oleh user telah memenuhi aturan tanggal YYYYMM-DD atau tidak. Berikut ini adalah kodenya: source code:
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”; ?>
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 dipisahkan dengan white space. Namun, kita tidak akan memeriksa apakah sintaks dalam variable list dan isi fungsi adalah sintaks yang benar atau tidak. source code:
Penjelasan kode: Kita memiliki tiga variabel, masing-masing adalah $Input1, $input2 dan $input3. Ketiga variabel tersebut akan diuji dengan pattern $pat. Fungsi ereg() akan mengembalikan nilai true atau false sesuai dengan hasil pemeriksaan RE berdasarkan $pat kepada $input1, $input2, atau $input3.
$input1 = “function a() { echo ‘a’; }”;
Berikut ini adalah keluaran dari kode tersebut:
$input3 = “function 1a() { echo ‘ini function yang salah karena nama fungsi diawali bilangan’;}”;
$ 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 dikembangkan lebih lanjut menjadi contoh pemeriksaan sintaks sederhana. Contoh
www.infolinux.web.id
$input2 = “function _b($a, $b, $c) { print_r($a); print_ r($b); print_r($c); }”;
$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/2005
55
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
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 sederhana dan tidak mengecek kebenaran sintaks 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. Sementara, $input4 tidak valid karena deklarasi fungsi belum memasukkan penanda isi fungsi. Khusus untuk $pat, kita memecah token-token yang ingin diuji ke dalam group-group, yang ditandai dengan kurang buka dan kurung tutup. Adanya [[:space:]] diantara beberapa token menandai bahwa white space diijinkan diantara token-token tersebut. repetition operator * berarti nol atau lebih, repetion operator + berarti satu atau lebih. Karakter . (titik) mewakili setiap karakter. Beberapa karakter seperti ( dan { perlu diescape menjadi \( dan \{ karena merupakan karakter spesial yang memiliki arti tertentu di dalam RE. Berikut ini adalah keluaran dari kode tersebut:
56
INFOLINUX 09/2005
$ php b.php Syntax OK Syntax OK Syntax Error Syntax Error
Fungsi ereg() dan eregi() merupakan fungsi yang sangat berguna, seperti dalam kedua contoh tersebut. Anda bisa membangun rutin untuk memeriksa pattern yang definisikan sebagai aturan Anda sendiri. Untuk membantu, POSIX RE telah menyediakan 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 dicetak, 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_replace Fungsi 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 eregi(), maka hanya dilakukan pencocokan terhadap pattern tertentu. Sementara, apabila Anda ingin langsung melakukan pengubahan, 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:
www.infolinux.web.id
echo “dst:\n$dst\n”;
?>
Penjelasan kode: Dengan menggunakan eregi_replace(), kita mengganti semua a ke A. Fungsi eregi_replace() akan menerima tiga parameter, yaitu pattern, replacement dan string asal, serta akan mengembalikan string hasil penggantian. Satu hal yang harus diperhatikan dalam penggunaan ereg_replace() ataupun eregi_replace() adalah masalah penggantian teks dengan bilangan. Sebagai contoh, Anda ingin mengganti tulisan satu menjadi angka 1. Apabila Anda memberikan 1 sebagai replacement, maka hasil penggantian mungkin tidak akan berjalan sesuai yang diinginkan. Agar hasil penggantian benar, Anda harus menggantinya dengan karakter ‘1’.
split dan spliti Terkadang, dalam beberapa kasus pemrograman, ada kalanya kita perlu memisahkan elemen teks berdasarkan pemisah tertentu ke dalam array. Tentunya, memproses array akan jauh lebih mudah daripada kita memroses teks begitu saja. Contoh kasus yang umum adalah ketika kita ingin memproses entri di /etc/passwd. Berikut ini adalah contoh untuk mendapatkan username dan home directory semua user di /etc/passwd: 1) { $user_arr = split(“:”, $buff); echo “user: {$user_ arr[0]}, homedir: {$user_ arr[5]}\n”; } } fclose($f_passwd); ?>
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
PHP
HTML hasil dokumentator.php.
Berikut ini adalah keluaran program tersebut di komputer penulis: $ php d.php user: root, homedir: /root user: bin, homedir: /bin user: daemon, homedir: /sbin user: lp, homedir: /var/spool/ lpd user: mail, homedir: /var/spool/ clientmqueue user: news, homedir: /etc/news user: uucp, homedir: /etc/uucp user: games, homedir: /var/games user: man, homedir: /var/cache/ man user: at, homedir: /var/spool/ atjobs user: wwwrun, homedir: /var/lib/ wwwrun user: ftp, homedir: /srv/ftp user: postfix, homedir: /var/ spool/postfix user: sshd, homedir: /var/lib/ sshd user: messagebus, homedir: /var/ run/dbus user: haldaemon, homedir: /var/ run/hal user: nobody, homedir: /var/lib/ nobody user: nop, homedir: /home/nop user: postgres, homedir: /var/ lib/pgsql
Karena split() menerima pattern RE sebagai pemisah, maka pemisah tidak harus
Source code HTML hasil dokumentator.php.
selalu berupa karakter pasti. Contoh yang umum terjadi adalah ketika pemisahan ingin dilakukan berdasarkan white space. Dalam kasus tersebut, kita tidak bisa hanya menentukan berdasarkan spasi, atau tab, ataupun kombinasi keduanya. Memecah entri pada /etc/fstab adalah contoh yang baik. Berikut ini adalah contohnya: 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 untuk menambahkan + agar white space dikelompokkan (bukannya satu per satu spasi misalnya). Dengan beberapa fungsi saja yang datang dengan Posix RE, kita bisa membangun
www.infolinux.web.id
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, implementasi PCRE PHP telah binary safe. Dalam beberapa kasus yang lebih berat, umumnya PCRE lebih disukai daripada Posix RE. Implementasi PCRE di PHP datang dengan 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 pencarian RE dan melakukan penggantian dengan fungsi callback. preg_replace, mencari dan mengganti teks. preg_split, memecah teks dan menyimpannya ke dalam array. Berbeda dengan Posix RE, PCRE mengenal Pattern Modifier, modifier untuk pattern RE. Di sini, kita bisa menentukan apakah 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-
INFOLINUX 09/2005
57
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
PHP
kumentasi PHP pada bagian Regular Expression Functions (Perl-Compatible), subbagian Pattern syntax.
Pattern modifier yang kita gunakan adalah i, yang artinya pencarian akan dilakukan case insensitive (sama seperti penggunaan fungsi eregi()).
preg_match dan preg_match_all Fungsi ini berguna untuk melakukan matching pattern RE pada teks. Kita akan membuat ulang contoh yang kita bahas pada pembahasan fungsi ereg() dan eregi() sebelumnya. Yang pertama adalah bagaimana memeriksa apakah input tanggal telah memenuhi 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”;
$input1 = “function a() { echo ‘a’; }”;
if (preg_match($pat, $input1)) echo “$input1 sesuai dengan aturan $pat”; else echo “$input1 TIDAK sesuai dengan aturan $pat”; echo “\n”;
$input2 = “function _b($a, $b, $c) { print_r($a); print_ r($b); print_r($c); }”;
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 pada contoh versi Posix RE adalah pattern dan penggunaan fungsi preg_match()
58
Selanjutnya, kita akan membuat ulang kode untuk memeriksa keabsahan definisi fungsi PHP:
INFOLINUX 09/2005
$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”;
www.infolinux.web.id
echo “\n”; ?>
Penjelasan kode: Kita menggunakan pattern modifier mis, yang artinya adalah: m untuk multiline. i untuk case insensitive. s untuk membuat metakarakter . (titik) memasukkan karakter newline. Beberapa kelas karakter pada Posix RE umumnya ditulis lebih singkat pada versi PCRE
preg_replace Fungsinya sama dengan ereg_replace, namun menurut penulis, fungsi yang satu ini lebih enak untuk digunakan. Kita akan melihat contoh bagaimana mengganti tulisan [date] di dalam string menjadi tanggal aktif. Berikut ini adalah source code-nya:
preg_split Fungsi 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: 1) { $fs_arr = preg_split(“/\ s+/”, $buff); echo “device: {$fs_ arr[0]}, mount point: {$fs_arr[1]}\n”; }
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
TUTORIAL PHP
} fclose($f_fstab); ?>
Contoh kasus: Dokumentator Setelah melihat contoh-contoh penggunaan RE, kita akan membahas satu contoh kasus sederhana, yaitu program dokumentator yang akan mengambil source PHP dan mengekstrak dokumentasi fungsi dan memformatnya menjadi satu file HTML yang berisi dokumentasi fungsi. Untuk itu, kita akan membuat aturan baru dokumentasi kita. Berikut ini adalah aturan dokumentasi: Diawali dengan /** dan diakhiri dengan **/ Tersedia deskripsi fungsi yang dimungkinkan 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 ; **/
“; 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
//isi fungsi }
Berikut ini adalah source code dokumentator kita:
Documentator “; $index_footer = “
//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 .= “
$f_name”; //detail information per function $detail_info .= “
”;
www.infolinux.web.id
$detail_info .= “
$f_name ”; $detail_info .= “
”; $detail_info .= “function | ” . $f_name . “ |
”; $detail_info .= “description | ” . $f_desc . “ |
”; $detail_info .= “
”; } $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 file yang valid atau tidak. Setelah itu, apabila semuanya valid, 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 file HTML. Program ini tentunya masih bisa disempurnakan, misal dengan menambahkan informasi lain seperti return type, contoh penggunaan fungsi, dan lain sebagainya. Tentunya, tampilan HTML hasil pembuatan juga bisa dimodifikasi 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 (
[email protected])
INFOLINUX 09/2005
59
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
LDAP
Integrasi User Account dengan LDAP Bagian 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.
P
erkantoran menggunakan file server sebagai pusat tempat untuk menyimpan file yang gunanya untuk menshare file, memberikan keamanan/security kepada file-file tersebut karena letaknya tersentralisasi, dan membuat proses back-up data lebih effisien. Sedangkan sebagai printer 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 administrasinya. Berikut adalah kebutuhan sebelum kita memulai setting LDAP untuk Samba:
Artikel ini hanya menekankan penggunaan LDAP bagi Samba sebagai servis autentikasi user. Pembaca diharapkan telah menguasai kemampuan administrasi dasar Samba. Server LDAP di-setting sesuai artikel kedua. Samba domain yang digunakan ialah dynre. Nama domain ini dapat diganti disesuaikan dengan nama domain pada sistem komputer pembaca. Mesin bernama samba.dynre.com dikonfigurasi sebagai Primary Domain Controller (PDC). Servis Samba ini dapat diletakkan pada dua mesin yang terpisah seperti yang dijelaskan dalam
INFOLINUX 09/2005
Kebutuhan software Seluruh kebutuhan paket RPM Samba ini tersedia di dalam CD Fedora Core 2. samba-common-3.0.3-5.i386.rpm (tersedia dalam CD 1), berisi file-file Samba umum yang harus diinstal terlebih dahulu sebelum paket RPM Samba yang lainnya. samba-client-3.0.3-5.i386.rpm (tersedia dalam CD 1), berisi file-file 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 file-file Samba daemon server. Di dalam paket RPM ini terdapat utility smbldap yang akan digunakan untuk 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 administrasi Samba: system-config-samba-1.2.9-2.noarch. rpm (tersedia dalam CD 1), berisi utility administrasi Samba berbasis grafis. samba-swat-3.0.3-5.i386.rpm (tersedia dalam CD 4), berisi utility administrasi berbasis web yang menggunakan protokol HTTP dengan port 901.
Gambar 1. Ssamba SWAT dan system-config-samba.
60
artikel kedua pada bagian “Konfigurasi Jaringan” ataupun di dalam satu mesin dengan LDAP server.
www.infolinux.web.id
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
TUTORIAL LDAP
Kedua utility administrasi Samba ini berguna untuk mempersiapkan konfigurasi 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-update Samba ini dengan versi yang terbaru karena versi yang terbaru memperbaiki bugbug yang cukup penting bagi sistem komputer produksi. Untuk mempermudah proses konfigurasi, 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 mengcompile 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 didownload dari www.idealx.org/prj/samba/ index.en.html.
1. Buka file /etc/samba/smb.conf, lalu tambahkan lima baris berikut ini: passdb backend = ldapsam: ”ldap://ldap.dynre.com”
Ini data autentifikasi password yang digunakan untuk menyimpan dan mengubah password menggunakan LDAP dengan LDAP server: ldap.dynre.com. ldap suffix = dc=erlangtech, dc=com
Ini data direktori LDAP kelompok bersuffiks 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 disinkronisasikan 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 account yang dipilih. Berikut ini merupakan file konfigurasi /etc/samba/smb.conf dengan contoh konfigurasi dasar: Printer yang di-share menggunakan Cups daemon printer. Direktori yang di-share adalah direktori homes (/home/junusd) dan data (/export/data). [global] workgroup = DYNRE netbios aliases = samba server string = DynRe WinNT Server
Proses konfigurasi Diasumsikan servis Samba telah terinstal dan terkonfigurasi secara dasar sebagai file dan printer server. Dengan keadaan demikian, berarti servis Samba tersebut secara default menggunakan file tdb yang berada pada local server sebagai autentifikasi data. Pada bagian ini, kita akan mulai untuk mengonfigurasi koneksi ke LDAP server sebagai autentikasi 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
www.infolinux.web.id
INFOLINUX 09/2005
61
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
LDAP
domain admin group = “ @”Domain Admins” “ printcap name = cups printing = cups logon logon logon logon
script = logon.bat drive = H: home = 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 konfigurasi LDAP server. Copy samba.schema ke direktori /etc/ openldap/schema # cp /usr/share/doc/samba3.0.3/LDAP/samba.schema /etc/ openldap/schema
Edit file /etc/openldap/slapd.conf Tambahkan samba.schema di bawah autofs.schema include /etc/openldap/ schema/redhat/autofs.schema
62
INFOLINUX 09/2005
include /etc/openldap/ schema/samba.schema
Ubah ACL, setiap ada perintah untuk membaca dan menulis attribut sambaLMPassword dan sambaNTPassword, diharuskan untuk autentifikasi 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 auth access 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 digunakan untuk mengambil data user account 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 smbldap Bagian 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, dengan 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);
www.infolinux.web.id
$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/samba3.0.3/LDAP/smbldap-tools cp smbldap*.p? /usr/sbin chmod 753 /usr/sbin/smbldap_ conf.pm chmod 750 /usr/sbin/smbldap*. pl chgrp 512 /usr/sbin/smbldap*. p?
Compile utility pembuat password yang compatible dengan WinNT password mkntpwd: # cd /usr/share/doc/samba3.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 untuk administrasi sesuai Windows NT: # smbldap-populate.pl
Hasil output-nya akan terlihat seperti di bawah. Ada beberapa pesan kesalahan tetapi itu tidak menjadi masalah karena struktur data kelompok LDAP tersebut telah dibuat pada pembahasan artikel kedua: Using builtin directory structure adding new entry: dc=DYNRE,dc=COM failed to add entry: Already exists at ./smbldap-populate. pl line 323,
line 2. adding new entry: ou=People, dc=DYNRE,dc=COM failed to add entry: Already exists at ./smbldap-populate. pl line 323, line 3. adding new entry: ou=Group,dc=DYNRE,dc=COM failed to add entry: Already exists at ./smbldap-populate.
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
TUTORIAL LDAP
pl line 323, line 4. adding new entry: ou=Computers,dc=DYNRE,dc=COM adding new entry: uid=Administrator,ou=People, dc=DYNRE,dc=COM adding new entry: uid=nobody, ou=People,dc=DYNRE,dc=COM failed to add entry: Already exists at ./smbldap-populate. pl line 323, line 7. adding new entry: cn=Domain Admins,ou=Group,dc=DYNRE,dc=COM adding new entry: cn=Domain Users,ou=Group,dc=DYNRE,dc=COM adding new entry: cn=Domain Guests,ou=Group,dc=DYNRE,dc=COM adding new entry: cn=Administrators,ou=Group, dc=DYNRE,dc=COM adding new entry: cn=Users, ou=Group,dc=DYNRE,dc=COM failed to add entry: Already exists at ./smbldap-populate. pl line 323, line 12.
adding new entry: cn=Guests, ou=Group,dc=DYNRE,dc=COM adding new entry: cn=Power Users,ou=Group,dc=DYNRE,dc=COM adding new entry: cn=Account Operators,ou=Group,dc=DYNRE, dc=COM adding new entry: cn=Server Operators,ou=Group,dc=DYNRE, dc=COM adding new entry: cn=Print Operators,ou=Group,dc=DYNRE, dc=COM adding new entry: cn=Backup Operators,ou=Group,dc=DYNRE, dc=COM adding new entry: cn=Replicat or,ou=Group,dc=DYNRE,dc=COM adding new entry: cn=Domain Computers,ou=Group,dc=DYNRE, dc=COM
Administrasi user Perintah-perintah untuk administrasi user dan group ini sintaksnya sangat mirip de-
www.infolinux.web.id
ngan perintah standar untuk administrasi user dalam Linux, seperti userdel, useradd, dan usermod. Hanya di sini ditambah beberapa parameter yang khusus untuk samba. smbldap-usermod.pl: memodifikasi user account yang ada. User account Linux dalam LDAP server yang dibuat tanpa menggunakan utility smbldap ini tidak akan mempunyai objectclass sambaSamAccount. Dalam artikel kedua telah terdapat user account junusd, tetapi user account ini tidak dapat digunakan untuk login ke Samba server sebelum ditambahkan objectclass sambaSamAccount, 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 konfigurasinya menyerupai Windows NT, nama workstation terlebih dahulu harus ditambahkan ke server melalui smbldap-useradd.pl -w ini. Jadi utility smbldap ini berguna untuk
INFOLINUX 09/2005
63
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
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 dihapus dengan menyebutkan nama komputer account tersebut. smbldap-usershow.pl: menampilkan user account tertentu.
Administrasi group smbldap-groupmod.pl: memodifikasi group yang ada. Group Linux dalam LDAP server yang dibuat tanpa menggunakan utility smbldap ini tidak akan mempunyai objectclass sambaGroupMapping. Dalam artikel kedua, telah terdapat group users, tetapi group ini tidak dapat digunakan sebagai group Samba sebelum ditambahkan objectclass sambaGroupMapping: # smbldap-groupmod.pl -a users
smbldap-groupadd.pl: menambah group. smbldap-groupdel.pl: menghapus group. smbldap-usershow.pl: menampilkan group tertentu.
mempertahankan user, group, dan komputer account yang ada di Windows NT. Setelah proses migrasi selesai, tidak terjadi perubahan sama sekali di sisi mesin-mesin workstation client, atau transparant. Hal ini sangat penting untuk meminimalkan komplain dari user. Jika berhasil dengan baik, kemudian pemindahan file-file 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 caranya, hanya diberikan garis besarnya untuk menghindarkan kompleksitas artikel ini. Pada Windows NT server, login sebagai Administrator, lalu jalankan utility pwdump yang bisa didownload dari ftp:// ftp.samba.org/pub/samba/pwdump/. Kemudian file teks hasil pwdump ini di-copy ke mesin Samba, lalu jalankan smbldap-migrate-accounts.pl dan smbldap-migrate-groups.pl. Terakhir, dengan teliti dan hati-hati sesuaikan 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 JXplorer Migrasi dari Windows NT Migrasi Windows NT server yang telah bertahun-tahun ada dalam kantor dapat dilakukan menjadi Samba server, dengan tetap
JXplorer merupakan utility LDAP browser berbasis Java. Sebelum menjalankan utility ini, terlebih dahulu download JRE (Java Runtime Environment) dari www.javasoft.
INFOLINUX 09/2005
com. Sedangkan JXplorer dapat di-download dari www.pegacat.com/jxplorer. Melalui utility ini atribut tiap item dalam direktori dapat ditambah, dihapus, maupun dimodifikasi langsung secara manual. Berikut ini contoh untuk mengedit alamat 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 “People”, 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 autentifikasi user account, sehingga seluruh data user account pada sistem komputer pada perkantoran terintegrasi secara penuh. Namun, manfaat LDAP ini tidak hanya tertutup sebagai pusat autentifikasi user account saja. Masih ada manfaat lain dari LDAP yang pada pokoknya merupakan servis yang berfungsi memberikan informasi direktori. Misalnya, sebagai informasi direktori karyawan, address book dari aplikasi e-mail, dan sebagainya. Junus Djunawidjaja ([email protected])
Gambar 3. Modifikasi atribut alamat email dengan JXplorer.
64
Gambar 2. JXplorer dialog koneksi.
www.infolinux.web.id
IKLAN
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
LIDS
Mengamankan Server Linux dengan LIDS Bagian 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. Berikut ini kita membahas salah satu karya hacker, LIDS.
K
etika kali pertama mendengar nama LIDS (Linux Intrusion Detection System) yang langsung terbayang di benak saya adalah sebuah aplikasi yang berfungsi sebagai sistem pendeteksi penyusup pada network semacam SNORT. Namun saya keliru besar, karena ternyata yang dimaksud itu adalah NIDS (Network Intrusion Detection System). LIDS adalah sebuah patch dan tool admin untuk mengoptimalkan fungsi keamanan pada kernel Linux. LIDS merupakan sebuah implementasi dari referensi monitor pada kernel. LIDS juga merupakan sebuah Mandatory Access control pada kernel.
Mengapa menggunakan LIDS? Mungkin pertanyaan ini akan kerap kali muncul. Mengapa menggunakan LIDS, sementara 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 tersendiri, 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 proteksi atau pengamanan.
66
INFOLINUX 09/2005
Administrasi terhadap system tidak terlindungi. 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. Permasalahan 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 proses atau user tersebut untuk menghancurkan sistem. Tidak heran jika account atau privileges root sangat diminati oleh para intruder. Hal ini sangat membuat mereka 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 privileges root sekali pun. Dengan ACLs, LIDS ini mampu melakukan proteksi terhadap file dan proses.
Fitur-fitur pada LIDS Fitur yang ditawarkan oleh LIDS cukup banyak dan cukup untuk melindungi mesin Linux anda dari tangan-tangan jahil para intruder. Fitur-fitur tersebut adalah: Perlindungan atau proteksi terhadap file
www.infolinux.web.id
dan direktori dari apa pun termasuk root pun tidak dapat melakukan perubahan dari file atau direktori yang diproteksi. Bahkan sebuah file pun dapat disembunyikan (hidden). Perlindungan atau proteksi terhadap proses dari apa saja, termasuk root, tidak dapat mematikan proses yang diproteksi. Bahkan sebuah proses dapat disembunyikan (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 Security Model) pada kernel 2.5.x dan 2.6.x. Pembatasan (restriction) terhadap akses proses jaringan.
Kekurangan LIDS Jika sebuah sistem memiliki kelebihan tentu ia juga akan memiliki kekurangan, demikian juga dengan LIDS. Beberapa kekurangan LIDS yang saya amati di antaranya: Setiap file 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 mendefinisikan ACLs akan mengunci sistem, sehingga kita tidak dapat berbuat apapun.
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
LIDS
Setiap file harus memiliki ACLs yang jelas, tak terkecuali untuk file yang berisi scripting. Untuk hal ini ACLs juga harus diturunkan terhadap file lain yang akan dipanggil oleh skrip tersebut. LIDS belum mampu untuk mendeteksi keanehan-keanehan atau penyerangan pada level aplikasi, contohnya seperti penyerangan terhadap web melalui protokol http, sql injection.
Implementasi LIDS Di atas telah dibahas mengenai kelebihan, kekurangan serta fitur-fitur yang ditawarkan oleh LIDS, namun bagaimana implementasinya pada dunia nyata? Bagaimana LIDS dapat membantu Anda mengamankan mesin Linux anda? Berikut implementasi LIDS dalam dunia nyata untuk mengamankan mesin Linux Anda. Berikut ini beberapa metode penyerangan secara remote (jarak jauh) yang umum dilakukan oleh para intruder, dan bagaimana 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.
Gambar 1. Proses port scanning.
Gambar 2. Akses privilege root dan cara mengatasinya.
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 mendapatkan akses terhadap root atau bahkan akses penuh terhadap sistem. Masih banyak teknik yang digunakan oleh para intruder untuk menguasai sistem, di sini lah LIDS bertugas untuk mempersulit mereka agar tidak menguasai bahkan merusak sistem. Namun, sekali pun Anda menggunakan patch pengamanan berlapis tujuh sekelas LIDS, tapi jika Anda malas mengikuti perkembangan dan memperbarui sistem Anda, semua ini akan sia-sia.
Gambar 3. Remote exploit dan port binding.
Tahapan instalasi dan konfigurasi LIDS Kini kita akan masuk kepada tahapan instalasi dan konfigurasi LIDS untuk melindungi mesin dari tangan intruder, dengan paketpaket yang telah dikumpulkan. Tahapan ini dibagi lagi menjadi beberapa langkah, yaitu: Patching dan kompilasi kernel Linux dengan LIDS. Instalasi lidstool. Konfigurasi ACLs pada LIDS.
Prasyarat instalasi LIDS Dalam tulisan ini penulis berasumsi bahwa 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 bernama 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/download.php. 4. Paket development pada linux sperti gcc, gnumake, ncurses, dan lain-lain.
www.infolinux.web.id
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 4. Penyerangan lokal.
INFOLINUX 09/2005
67
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
LIDS
seperti berikut:
Gambar 5. Konfigurasi kernel dengan make menuconfig.
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/linux2.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.2ow1.diff.bz2.
Code maturity level options. Masuk pada menu tersebut dan aktifkan pilihan Prompt for incomplete driver. Hal ini sangat dianjurkan pada HOWTO dari situs yang bersangkutan sebelum kita mengaktifkan LIDS. Ketika kernel telah di-patch, maka akan tampil satu menu yaitu menu Linux Intrusion Detection System. Untuk dapat menggunakan LIDS seperti yang ditunjukan pada HOWTO dari situs yang terkait, Anda harus mengaktifkan beberapa pilihan pada menu Linux Intrusion Detection System. Untuk kebutuhan awal hanya dengan konfigurasi dasar, sudah sangat cukup untuk melindungi system anda dari tangan-tangan intruder. Masuk ke menu Linux Intrusion Detection System dan aktifkan pilihan yang ada
# cp /var/tmp/lids/linux-2.4.29lids1.2.2-ow1.diff.bz2 # bunzip2 linux-2.4.29lids1.2.2-ow1.diff.bz2
Patch kernel Linux dengan LIDS. # cd linux # patch -p1 < ../linux-2.4.29lids1.2.2-ow1.diff
Konfigurasikan kernel. # make mrproper # make menuconfig
Dari perintah make menuconfig akan menghasilkan tampilan konfigurasi seperti gambar 5. Pada menu pertama terdapat pilihan
68
INFOLINUX 09/2005
Gambar 6. Menuconfig LIDS.
www.infolinux.web.id
[*] 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.
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
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 konfigurasi tersebut serta lakukan kompilasi kernel Linux. # make dep clean module module_ install bzImage
Salin kernel dan System.map yang baru ke direktori /boot.
Gambar 7. Menuconfig LIDS lebih detail.
# cp /usr/src/linux/arch/i368/ boot/bzImage /boot/vmlinuz2.4.29 # cp /usr/src/linux/System.map /boot/System.map-2.4.29
Edit file konfigurasi 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 konfigurasi tersebut lalu keluar dari editor dan ketik:
untuk membuat ACLs. Berikut langkahlangkah 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
Konfigurasi, compile dan instal lidstools dengan langkah berikut: # ./configure KERNEL_DIR=/usr/ src/linux # make # make install
# lilo
Untuk grub, tambahkan baris berikut pada /etc/grub.conf (jika tidak ada grub. conf, edit file /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 harddisk Anda.
2. Instalasi lidstools Selanjutnya kita akan melakukan instalasi paket lidstools. Lidstools adalah paket yang berisi tools administrasi LIDS digunakan
www.infolinux.web.id
Isikan password jika ditanyakan. Selanjutnya edit file /etc/lids/lids.ini, dan ubah paramater ACL_DISCOVERY=0 menjadi ACL_DISCOVERY=1. Hal ini dimaksudkan untuk membantu anda dalam membuat ACLs. Selanjutnya simpan konfigurasi dan restart mesin anda dengan kernel yang baru. Jika tidak menemui kendala pada langkah pertama dan kedua, Anda akan berada pada shell dengan kernel yang baru. Langkah berikutnya adalah langkah yang sangat penting, yaitu mengonfigurasikan ACLs LIDS pada sistem. Bagian yang akan dibahas pada edisi berikut itulah yang menentukan dalam melindungi sistem Anda. Irvan ([email protected])
INFOLINUX 09/2005
69
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Squid
Step By Step Konfigurasi Squid Proxy Server dengan Berbagai Studi Kasus Bagian 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.
P
roxy 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-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 autentifikasi user, memblok situs, memblok banner, dan lain-lain. Pada edisi sebelumnya, saya sudah menjelaskan tentang cara pengonfigurasian Squid dengan membahas studi kasus pertama sampai dengan ketiga. Sesuai dengan janji penulis sebelumnya, sekarang akan melanjutkannya dengan studi kasus keempat sampai dengan ketujuh. Dan studi kasus yang akan dibahas kali ini, yaitu: 4. Memblok banner menggunakan redirector adzap. 5. Membatasi ukuran file (kuota) yang bisa di-download oleh user pada interval waktu tertentu. 6. Autentifikasi user. 7. Transparant Proxy. Untuk mempersingkat waktu, Anda dapat dapat langsung membaca tutorial di bawah ini:
70
INFOLINUX 09/2005
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 melihat 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 bernama adzap. Dengan adzap gambar banner 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/adzap20050605.tar.gz 2. Pastikan perl, apache dan segala yang berkenaan dengan program ini sudah
www.infolinux.web.id
terinstalasi dengan baik di sistem Anda. # perl -v
3. Berikutnya, extract source adzap yang telah Anda download tersebut, ke directory /usr/local. # tar -xzvf adzap-20050605. tar.gz -C /usr/local # cd /usr/local/adzap
Copy file-file berikut ke Document Root Apache anda, misal di Fedora Core 3 terletak 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 file wrapzap yang ada di /usr/local/ adzap/scripts, pada bagian: zapper=/usr/local/adzap/ scripts/squid_redirect ZAB_BASE=http://localhost/ adzap .............................
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Squid
............................. #exec “$zapper” # exec /path/to/zapchain “$zapper” /path/to/another/ eg/squirm exec /usr/local/adzap/scripts/ zapchain “$zapper” /usr/bin/ squidguard
0% 1440 refresh_pattern . 0 20% 4320 ............................. .............................
6. Setelah selesai, restart service squid Anda # service squid restart
7. Jalankan juga service apache Anda. 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/wrapzap redirect_children 5 #---------------------------#refresh pattern refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440
Banner situs yang belum diblok sebelum menggunakan adzap.
# service httpd start
8. Check apakah redirector adzap dan redirector squid guard sudah berjalan dengan 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/squidguard 9156 ? 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_redirect 9164 ? S 0:00 /usr/bin/squidguard 9168 ? S 0:01 /usr/bin/perl -w /usr/local/ adzap/scripts/squid_redirect ............................. .............................
9. Test ke browser, dengan mengetikkan situs 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 mengonfigurasikan squid untuk memblok banner iklan. 10. Test juga dengan mengetikkan salah satu situs yang termasuk ke dalam daftar blacklist squidguard (ex:// http://20asian-pics.com). Jika situs tersebut teredirect ke situs http://www.eramuslim. com, artinya Anda telah dapat menjalankan multiple redirector squid secara bersamaan. Bahkan jika ingin menambahkan program redirector squid yang lain, Anda hanya perlu menambahkan path programnya di file wrapzap. 11. Untuk melihat log file, url yang berhasil di blok banner-nya, Anda dapat mengetikkan 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 terdaftar kedalam cache squid. Selain itu, kecepatan akses juga bergantung pada jalur bandwidth yang anda sewa
Banner situs yang telah diblok setelah menggunakan adzap.
www.infolinux.web.id
INFOLINUX 09/2005
71
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Squid
dari ISP. Lalu ada juga faktor yang paling penting yang paling berpengaruh pada waktu akses suatu situs, yaitu kebiasaan beberapa user yang suka men-download di Internet. Mengambil suatu file (download) dari Internet memang menyenangkan bagi beberapa user, akan tetapi kalau tidak disiasati dengan baik hal ini justru menimbulkan masalah bagi user lainnya. Saat men-download suatu file yang besar (ex:/ file 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 menurunkan produktivitas kerja. Agar tidak terjadi hal yang demikian, maka seorang administrator harus dapat menentukan kebijakan yang berlaku pada saat user men-download suatu file dari Internet. Sebagai contoh, penulis akan menjelaskan 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 file 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 bebas men-download file dengan ukuran file tak terbatas. Untuk menerapkan hal di atas, yang perlu Anda lakukan hanyalah menambahkan
Peringatan file yang tidak bisa didownload karena melebihi kuota.
72
INFOLINUX 09/2005
beberapa setting-an di file squid.conf. Baca langkah-langkah di bawah ini: 1. Buka file squid.conf # vi /etc/squid.conf
2. Lalu edit pada bagian berikut: ............................. ............................. # Note : Untuk Settingan Lengkapnya, dapat anda temukan di 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 melihat perubahan: # service squid restart
4. Pada saat jam kerja, coba Anda test download suatu file dari Internet yang besar filenya lebih dari 2 MB. Jika hasil-
Metode authentifikasi Squid dengan menggunakan mysql-auth.
www.infolinux.web.id
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Squid
nya adalah peringatan ERROR, maka settingan yang Anda lakukan sudah berhasil. Test juga men-download suatu file dengan ukuran kurang dari 2MB, jika dapat ter-download berarti sudah tidak ada masalah untuk pembatasan ukuran file download ini. 5. Ketika waktu jam kerja telah lewat, Test juga men-download file dengan ukuran file lebih dari 2 MB, jika hasilnya file tersebut dapat ter-download, berarti kebijakan yang telah ditentukan telah berjalan dengan baik.
6. Autentifikasi user menggunakan mysql_auth Pada studi kasus kali ini, tidak ada hubungannya dengan studi kasus sebelumnya. Kali ini penulis akan menjelaskan metode autentifikasi user dengan menggunakan username dan password yang terdaftar di server. Program autentifikasi yang akan penulis 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 autentifikasi berhasil. Dan bila username maupun password tidak sesuai, maka program akan menghasilkan output ERR, dan autentifikasi akan gagal. Kalau autentifikasi berhasil, maka user akan dapat browsing ke Internet. Tetapi jika autentifikasi gagal, user tersebut tidak dapat browsing ke Internet. Untuk mempersingkat waktu, coba Anda ikuti penjelasan di bawah ini: 1. Download dahulu program mysql_auth0.8.tar.gz dari situs http://people.arxnet. hu/airween/mysql_auth/, atau Anda dapat mencarinya pada CD majalah InfoLINUX edisi ini. 2. Setelah itu extract, file 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-devel mysql-devel-3.23.58-13
menjadi $(INSTALL) -o squid -g squid -m 600 $(CONF) /etc/ mysql_auth.conf
# service mysqld start
e. dan beri tanda remark (#) pada 4. Cari dan catat lokasi file mysql.h dan libmysqlclient.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 file Makefile program mysql_auth. $ cd mysql_auth-0.8/
$(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 file define.h $ cd src/
$ vi Makefile
Edit pada bagian-bagian berikut : a. CFLAGS = -I/usr/local/ include -L/usr/local/lib
$ vi define.h
Edit pada bagian-bagian berikut: #define CONFIG_FILE “/usr/ local/squid/etc/mysql_auth. conf”
menjadi CFLAGS = -I/usr/include/ mysql -L/usr/lib/mysql
menjadi #define CONFIG_FILE “/etc/ mysql_auth.conf”
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
7. Edit juga file 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/
d. $(INSTALL) -o nobody -g nogroup -m 600 $(CONF) /usr/local/squid/etc/mysql_ auth.conf
www.infolinux.web.id
$ make $ su –c “make install”
INFOLINUX 09/2005
73
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Squid
9. Tambahkan database untuk autentifikasi user # cd scripts/ # mysql -u root -p < create_ scripts
10. Sekarang coba Anda tes dengan menambahkan user ke tabel data yang ada di database mysql_auth dengan menggunakan 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_auth mysql> 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 user supri sudah langsung terenkripsi. Hal ini karena setting-an yang terdapat di file 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 program mysql_auth ERR # mysql_auth supri coba supri sup234 OK
12. Setelah hasil validasi sudah benar, langkah berikutnya adalah menghubungkan program mysql_auth dengan squid. Untuk itu Anda dapat mengedit file squid. conf. # vi /etc/squid.conf ............................. ............................. # Tambahan untuk authentifikasi auth_param basic program
74
INFOLINUX 09/2005
/usr/bin/mysql_auth auth_param basic realm Squid proxy-caching web server auth_param basic children 5 auth_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 REQUIRED acl myNet 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 ............................. ............................. # rule (bagian ini berisikan keterangan untuk membiarkan atau menolak bagian acl # yang telah dibuat). ............................. ............................. # Baris ini juga http_access allow butuhpasswd http_access allow myNet http_access allow manager http_access allow localhost http_access deny !Safe_ports http_access deny CONNECT !SSL_ports # Baris ini juga authenticate_ip_ttl 2 hours http_access deny all ............................. .............................
13. Test di browser, dengan mengetikkan alamat suatu situs, kemudian tekan Enter. Jika muncul layar autentifikasi setelah anda menekan tombol Enter, coba Anda
www.infolinux.web.id
masukkan username dan password yang telah dibuat, sebagai contoh : username : supri, password: sup234. Jika masuk dan tidak mengalami masalah, berarti metode autentifikasinya sudah berjalan dengan baik.
7. Transparant proxy Setelah menjelaskan keenam cara di atas, akhirnya sampai juga pada cara terakhir yang akan penulis jelaskan. Pada semua kasus sebelumnya, Anda harus men-setting secara manual setting-an proxy di web browser client 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, diperlukan suatu cara agar Anda tidak perlu memasukkan secara manual setting-an proxy server yang berlaku. Caranya adalah Anda dapat menggunakan transparant proxy. Prinsip kerja transparant proxy adalah sebuah firewall 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 melakukan koneksi dan request dari mana yang akan di-proxy. Untuk mengaplikasikan transparant proxy, Anda dapat memerlukan aplikasi Iptables. Dengan Iptables, anda cukup membuat rule untuk menangkap trafik yang ditujukan untuk port 80, dan mengarahkan trafik ini ke port dari proxy server (biasanya 3128 atau 8080). Untuk lebih jelasnya, Anda dapat mengikuti petunjuk yang diberikan ada di bawah ini: 1. Dimisalkan kali ini Anda sudah dapat menjalankan proxy server secara manual dengan baik, sekarang tinggal bagaimana caranya agar dapat berjalan secara transparant proxy. 2. Pastikan paket dan service iptables sudah terinstal dengan baik di sistem Anda. 3. Squid terkonfigurasi dengan menggunakan port 3128.
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
TUTORIAL Squid
4. Alamat network yang digunakan adalah 192.168.0.0/24. Cara mengatur konfigurasi 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 file squid.conf Anda, kemudian tambahkan baris di bawah ini pada bagian paling bawah dari file itu. # transparent proxy httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_ header on
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 squidbox. Dan satunya lagi komputer yang terhubung ke Internet langsung sebagai firewall mempunyai IP 192.168.0.1 kita sebut saja komputer ini dengan nama iptables-box. Dari komputer iptablesbox, coba Anda ketikkan perintah berikut 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 file access.log di mesin proxy Anda. Jika semuanya sudah benar, seharusnya jika ada user yang sedang mengakses web, Anda sudah dapat mengamati prosesnya dari mesin proxy tersebut. Demikian artikel tentang step by step konfigurasi Squid. Sebenarnya masih banyak lagi fungsi Squid lainnya yang dapat anda telusuri lebih lanjut di file konfigurasi Squid.conf. Pada artikel ini, penulis sudah menjelaskan secara garis besar konfigurasi Squid yang sering digunakan oleh sebagian besar administrator. Namun pada intinya, sesuaikan saja dengan kebijakan yang benar-benar dibutuhkan oleh Anda. Terkadang tidak semua fungsi yang ada benar-benar dibutuhkan di dalam suatu jaringan. Akhir kata, semoga dengan artikel singkat ini, Anda dapat membuat proxy server yang andal tanpa terbentur masalah harga lisensi software proxy komersial yang mahal. Indahnya dunia open source! Supriyanto ([email protected])
3. Lakukan masquerading dengan menggunakan iptables. IP masquerading berguna untuk menghubungkan beberapa komputer yang terkoneksi ke sebuah komputer 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 sesuaikan dengan interface yang terdekat dengan jaringan luar. 4. Selanjutnya arahkan semua permintaan web pada port 80 ke port squid. Untuk kondisi ini, terdapat dua buah opsi. Jika squid dan firewall yang mengarahkan berada pada satu komputer, gunakan 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 firewall yang mengarahkan tidak berada pada satu komputer.
www.infolinux.web.id
INFOLINUX 09/2005
75
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Mandriva Linux
Tips Instalasi Paket Mandriva Linux Melalui Jaringan Menginstalasi paket di Linux memang selalu dihadapkan dengan masalah dependensi. Tapi, hal tersebut bukanlah masalah lagi.
M
engakali permasalahan instalasi, itulah yang kita coba selesaikan di sini. Linux memang menawarkan banyak kelebihan, tetapi untuk masalah instalasi sepertinya Linux belum bisa menenangkan para penggunanya. Akan tetapi, Linux selalu memberikan solusi untuk permasalahan yang selalu menjadi momok bagi pengguna Linux terutama yang masih pemula. Memang tema yang diangkat di sini adalah menginstalasi melalui jaringan, tapi tips ini juga bisa diimplementasikan pada komputer standalone. Pada instalasi paket melalui jaringan ini, kita pertama akan membangun sebuah server repositori. Pada server repositori ini, ditempatkan semua paket Linux yang akan diinstalasi ke komputer-komputer client. Untuk komputer standalone, maka komputer bertindak sebagai server repositori sekaligus sebagai komputer client. Paket-paket Linux di sini berupa paket-paket RPM khusus distro Mandriva Linux. Sedangkan, paket-paket tarbal (tar.gz atau tar.
Gambar 1. Mempersiapkan direktori repositori.
76
INFOLINUX 09/2005
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-perintah dibawah ini sebagai ‘root’, kecuali bentuk prompt yang diperlihatkan adalah ‘$’. Sebelumnya, periksalah server repositori Anda, apakah instalasi Mandriva Linux sudah 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 repositori menggunakan nomor IP 192.168.0.33. Siapkan direktori utama untuk meletakkan paket-paket RPM Mandriva Linux. Pada tutorial ini kita menggunakan contoh direktori /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 dalamnya 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 direktori /home/repositori/pakets. Kemudian, masuklah ke dalam direktori tersebut dan jalankan perintah ‘genhdlist’: # mkdir /home/repositori/pakets
Gambar 2. Menambahkan baris Alias pada commonhttpd.conf.
www.infolinux.web.id
TUTORIAL
Berita | Ulasan | Adu Software | Utama | Bisnis | Apa Sih Sebenarnya... | Tutorial
Mandriva Linux
Gambar 3. Menambahkan baris Direktori pada file commonhttpd.conf.
# chmod 755 /home/repositori/ pakets # cd /home/repositori/pakets # genhdlist parsing .
Apabila tidak terdapat keluaran pesan error, berarti tidak terdapat masalah pada paket-paket RPM didalam direktori ini. Jika Anda ingin menambahkan direktori-direktori lain, misalnya direktori /home/ repositori/updates untuk menaruh paketpaket 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 permission direktorinya agar dapat diakses oleh siapa saja, jalankan perintah ‘genhdlist’. Sekarang direktori untuk repositori paket-paket RPM Mandriva Linux sudah siap. Kemudian, kita akan melakukan pengaturan pada Apache web server agar dapat diakses oleh komputer-komputer client. Sebagai root, editlah file 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 file commonhttpd.conf tersebut bagian Aliases, seperti pada gambar 2, kemudian tambahkan baris: Alias /repositori /home/repositori
Gambar 4. Mengetes perubahan pada commonhttpd.conf.
Sehingga menjadi seperti yang terlihat pada gambar 2. Kemudian pada bagian akhir dari file commonhttpd.conf tambahkan: ... Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all ...
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 browser Firefox, dan coba kunjungi “http://localhost/repositori/” atau “http://192.168.0.33/ repositori/”, maka seharusnya akan menampilkan seperti pada gambar 4. Nah, sekarang server repositori siap digunakan. Lalu, untuk pengaturan pada komputerkomputer client, jalankan perintah: # urpmi.addmedia http://<nomor IP server repositori/direktori
misalnya: # urpmi.addmedia pakets http:// 192.168.0.33/repositori/pakets
www.infolinux.web.id
Atau, gunakan cara yang lebih mudah, yaitu dengan Mandrakelinux Control Center. Pada komputer client, masuk ke Menu->System->Configuration->Configure Your Computer. Kemudian, pilih tabulasi Software Management, dan pilih icon “Select from where software packages are downloaded 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 pakets akan muncul pada tampilan jendela “Media Manager”, klik Ok. Anda bisa menambahkan repositori-repositori lainnya dengan melakukan langkah-langkah yang sama seperti di atas. Sekarang Anda dapat melakukan instalasi 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
misalnya menginstalasi xmms dengan: # urpmi xmms
Maka, urpmi akan menginstalasi sekaligus paket-paket dependensinya, Jadi Anda tidak perlu bersusah-susah payah lagi. E. Wiryadi Salim ([email protected])
INFOLINUX 09/2005
77