Go to:
Gentoo Home
Documentation
Forums
Lists
Bugs
Planet
Store
Wiki
Get Gentoo!
Gentoo's Bugzilla – Attachment 27073 Details for
Bug 27387
[id] gentoo-security.xml
Home
|
New
–
[Ex]
|
Browse
|
Search
|
Privacy Policy
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
Gentoo-security versi Indonesian
gentoo-security.xml (text/xml), 110.11 KB, created by
Siauw Nam Khong
on 2004-03-08 22:47:00 UTC
(
hide
)
Description:
Gentoo-security versi Indonesian
Filename:
MIME Type:
Creator:
Siauw Nam Khong
Created:
2004-03-08 22:47:00 UTC
Size:
110.11 KB
patch
obsolete
><?xml version='1.0' encoding='UTF-8'?> ><!-- English doc rev. 1.46 --> > > ><!DOCTYPE guide SYSTEM "/dtd/guide.dtd"> ><guide link = "/doc/en/gentoo-security.xml"> ><title>Panduan Keamanan Gentoo Linux</title> ><author title="Author"> > <mail link="kn@insecurity.dk">Kim Nielsen</mail> ></author> ><author title="Editor"><!-- zhen@gentoo.org --> > John P. Davis ></author> ><author title="Editor"> > <mail link="stocke2@gentoo.org">Eric R. Stockbridge</mail> ></author> ><author title="Editor"> > <mail link="carl@gentoo.org">Carl Anderson</mail> ></author> ><author title="Editor"> > <mail link="peesh@gentoo.org">Jorge Paulo</mail> ></author> ><author title="Editor"> > <mail link="swift@gentoo.org">Sven Vermeulen</mail> ></author> ><author title="Editor"> > <mail link="bennyc@gentoo.org">Benny Chuang</mail> ></author> ><author title="Editor"> > <mail link="jaervosz@itu.dk">Sune Jeppesen</mail> ></author> ><author title="Editor"> > <mail link="blubber@gentoo.org">Tiemo Kieft</mail> ></author> ><author title="Editor"> > <mail link="klasikahl@gentoo.org">Zack Gilburd</mail> ></author> > ><abstract> >Panduan ini adalah panduan langkah demi langkah untuk meningkatkan keamanan sistem Gentoo Linux. ></abstract> > ><license/> > ><version>0.4.20</version> ><date>March 6, 2004</date> > ><chapter> ><title>Pendahuluan</title> ><section> ><body> > ><p> >Panduan ini ditujukan kepada mereka yang menggunakan Gentoo Linux dalam lingkungan server atau mereka yang merasa butuh keamanan sistem yang lebih baik. ></p> > ><note> >Catatan : Jika Anda tertarik lebih jauh pada hal-hal mengenai keamanan Gentoo setelah membaca panduan ini, maka Anda dipersilakan untuk mengunjungi <uri link="http://www.gentoo.org/proj/en/hardened/">Proyek Hardened Gentoo</uri> ></note> > ></body> ></section> > ><!-- ><section> ><title>Enhancements for future releases of this Guide:</title> ><body> > ><p> >In version 0.6 (Backup) ></p> ><ul> ><li>Arpwatch</li> ><li>Full system backup using Systemimager</li> ><li>Partial backup using tar</li> ><li>Backing up postgres</li> ></ul> > > ><p> >In version 0.8 (Penetration testing) ></p> ><ul> ><li>Remote audits</li> ><li>Network audits</li> ><li>Host audits</li> ><li>Software audits</li> ></ul> > ><p> >In version 1.0 (After a compromise) ></p> ><ul> ><li>How to report an incident</li> ><li>Forensics analysis</li> ><li>Creating an image of the system without destroying evidence (Using dd)</li> ><li>Trap and trace (Using tcpdump)</li> ><li>.. More to come ..</li> ><li>Restoring system</li> ></ul> > ><note> >Please note that each version concentrates on one subject at a time. This is for >quality assurance purposes. ></note> > ></body> ></section> >--> ></chapter> > ><chapter> ><title>Pertimbangan Pra-Instalasi</title> ><section> ><title>Keamanan Fisik</title> ><body> > ><p> >Tidak peduli berapa banyak cara perlindungan yang Anda implementasikan, semuanya akan sia-sia jika seorang penyerang bisa menjangkau fisik perangkat Anda. Pastikan bahwa perangkat keras Anda tidak mudah dijangkau. Contohnya, Anda mungkin akan menempatkan perangkat Anda pada suatu lemari yang terkunci. Kunci pada perangkat juga merupakan ide yang bagus. Untuk tingkat keamanan tertinggi, lakukan setting pada BIOS supaya hanya bisa melakukan boot dari harddisk saja. Matikan boot dari drive floppy dan CDROM. Untuk mereka yang paranoid, silakan mengaktifkan password BIOS. Password BIOS juga merupakan ide bagus untuk user laptop. ></p> > ></body> ></section> ><section> ><title>Perencanaan Daemon/Layanan</title> ><body> > ><p> >Dokumentasikan layanan-layanan (services) yang harus atau seharusnya dijalankan oleh server. Hal ini akan membantu Anda untuk menentukan komposisi partisi yang lebih baik bagi sistem. Dan juga akan memudahkan Anda dalam strategi deteksi dini penyusupan. Tentu saja Anda tidak perlu mendokumentasikan hal ini jika Anda hanya memiliki satu atau beberapa komputer saja dan hanya Anda satu-satunya penggunanya, contohnya jika suatu komputer akan berfungsi sebagai firewall maka komputer ini tidak boleh menjalankan <e>satupun</e> layanan, kecuali mungkin sshd. ></p> > ><p> >Dokumentasikan hal ini dan versi terkini dari sshd - ini akan membantu Anda memantau sistem mana yang perlu diperbarui (diupgrade) jika seseorang menemukan lubang keamanan baru pada sshd. Hal ini juga membantu penentuan orang yang punya hak akses ke sistem. ></p> > ></body> ></section> ><section> ><title>Skema Partisi</title> ><body> > ><p> >Aturan emas : ></p> > ><ul> ><li> >Setiap cabang direktori dimana user mempunyai hak untuk menulis (<path>/home</path> dan <path>/tmp</path> <path>/var</path>), harus berada pada partisi terpisah dan diterapkan kuota disk. Portage menggunakan <path>/var/tmp</path> untuk mengkompilasi file-file, sehingga partisinya harus besar. Hal ini akan mengurangi resiko pemenuhan direktori <path>/</path> oleh user. ></li> ><li> >Setiap cabang direktori yang akan Anda gunakan untuk menginstalasi perangkat lunak non distribusi harus berada di partisi yang berbeda. Menurut <uri link="http://www.pathname.com/fhs/">Standard Hirarki File</uri>, direktori ini adalah <path>/opt</path> atau <path>/usr/local</path>. Kalau dua direktori ini berada pada partisi yang berbeda, maka kedua direktori ini tidak akan terhapus ketika melakukan instalasi ulang sistem. ></li> ><li> >Usahakan untuk memindahkan data statis ke partisinya sendiri, dan muat partisi tersebut pada moda baca-saja (read-only). Kalau Anda benar-benar paranoid, Anda bisa mencoba menyimpan data statis pada media baca-saja, seperti CDROM. ></li> ></ul> > ></body> ></section> ><section> ><title>User root</title> ><body> > ><p> >User 'root' adalah user yang paling vital dalam sistem dan tidak boleh digunakan sembarangan. Bila seorang penyerang mendapatkan akses root, maka Anda tidak bisa lagi mempercayai sistem Anda, jadi harus diinstalasi ulang. ></p> > ><p> >Aturan emas untuk 'root' ></p> > ><ul> ><li> >Selalu membuat user biasa untuk operasi sehari-hari dan jika user ini memerlukan akses sebagai root, tambahkan user tersebut dalam grup wheel. Hal ini memungkinkan user tersebut untuk su ke root. ></li> ><li> >Jangan pernah menjalankan X atau aplikasi user lainnya dengan akses root. ></li> ><li> >Selalu menggunakan alur mutlak (absolute path) ketika beroperasi sebagai root. Root bisa tertipu dengan menjalankan aplikasi yang lain daripada yang dikira dilakukannya. Sebagai contoh, jika seseorang mencampuradukkan ALUR(PATH) dan su ke root tanpa menggunakan <c>su -</c>. Maka root akan menggunakan alur dari user. ></li> ><li> >Jika user hanya memerlukan beberapa perintah dari seluruh perintah yang bisa dilakukan oleh root, pertimbangkan untuk menggunakan <c>sudo</c>, tetapi harap berhati-hati dengan sudo ini ! ></li> ><li> >Jangan pernah meninggalkan terminal Anda, pada saat Anda mengakses sebagai root. ></li> ></ul> > ><p> >Gentoo memiliki pencegahan untuk user biasa yang mencoba su. Setting dasar PAM menyatakan bahwa user harus menjadi anggota dari grup wheel untuk memungkinkannya melakukan su. ></p> > ></body> ></section> ><section> ><title>Kebijaksanaan Keamanan</title> ><body> > ><p> >Ada beberapa alasan mengapa kebijaksanaan keamanan diperlukan. ></p> > ><ul> ><li> >Anda tidak bisa klaim bahwa Anda mempunyai jaringan yang aman tanpa suatu definisi apa yang aman menurut Anda. ></li> ><li> >Hampir mustahil untuk menangkap penyerang yang potensial, membenahi permasalahan jaringan, atau melakukan audit, tanpa memata-matai lalu lintas jaringan atau melihat direktori home pribadi. Dan memata-matai tanpa ijin dari user adalah ilegal di sebagian besar negara-negara di dunia. Dan karena sekitar 60% dari penyerangan yang ada sekarang ini berasal dari dalam organisasi, maka penting bagi Anda untuk tetap membuka mata. ></li> ><li> >Anda tidak bisa mengharapkan user memikirkan keamanan sistemnya sendiri, jika Anda tidak pernah menjelaskan betapa pentingnya atau bagaimana mereka harus melindungi diri mereka sendiri dan rekan-rekannya. ></li> ><li> >Petunjuk dan dokumentasi yang baik selalu membuahkan hasilnya. ></li> ><li> >Polisi atau penegak hukum federal tidak bisa membantu Anda menangkap penyerang, jika mereka tidak tahu konfigurasi network Anda atau layanan dari Anda. ></li> ><li> >Apa yang akan Anda lakukan kalau terjadi suatu serangan ? Anda perlu mendefinisikan tindakan Anda dan kepada siapa Anda harus melapor. Apakah Anda hanya menelepon polisi atau tim CERT pada setiap kejadian ? Mereka tidak akan menanggapi Anda secara serius! ></li> ></ul> > ><p> >Jadi jelas bahwa penting untuk membuat kebijaksanaan pada sistem dengan jumlah user lebih dari satu dan juga penting untuk mendidik user. ></p> > ><p> >Suatu kebijaksaan adalah suatu dokumen (atau beberapa dokumen) yang berisi jawaban atas pertanyaan seperti siapa, di mana, mengapa dan apa. Setiap user pada sistem/jaringan Anda harus membaca, mengerti dan menandatanganinya. Penting bagi Anda untuk meluangkan waktu membantu user dalam memahami kebijaksanaan dan mengapa kebijaksanaan tersebut perlu ditandatangani atau apa yang akan terjadi jika mereka melakukan hal yang berlawanan dengan kebijaksanaan (dalam kebijaksanaan harus disebutkan hal ini juga). Hal ini harus diulang sekurang-kurangnya sekali dalam setahun sebab kebijaksanaan bisa berubah dan juga untuk mengingatkan user. ></p> > ><note> >Buatlah kebijaksanaan yang mudah dibaca dan sangat akurat pada setiap subyek. ></note> > ><p> >Sebagian besar kebijaksanaan bisa diterapkan langsung pada sistem operasi atau melalui firewall dan sebagian lainnya tidak. ></p> > ><p> >Suatu kebijaksanaan keamanan harus berisi sedikitnya subyek berikut ini : ></p> > ><ul> ><li>Penggunaan yang bisa diterima</li> ><li> > <ul> > <li>Screen saver</li> > <li>Penanganan password</li> > <li>Download software dan instalasinya</li> > <li>Informasi yang menyatakan bahwa user selalu diawasi</li> > <li>Penggunaan software anti virus</li> > </ul> ></li> ><li>Penanganan informasi sensitif (segala bentuk form tertulis, kertas atau digital)</li> ><li> > <ul> > <li>Bersihkan meja dan amankan informasi yang terklasifikasi</li> > <li>Matikan komputer sebelum meninggalkannya</li> > <li>Penggunaan enkripsi</li> > <li>Serah terima kunci kepada rekan kerja yang bisa dipercaya</li> > <li>Penanganan materi terklasifikasi pada saat tugas keluar kantor</li> > </ul> ></li> ><li>Penanganan perangkat komputer pada saat tugas keluar kantor</li> ><li> > <ul> > <li>Penanganan laptop pada saat berada di perjalanan dan tinggal di hotel</li> > </ul> ></li> ></ul> > ><p> >Kebijaksanaan untuk staf IT mungkin agak sedikit berbeda dari pada user biasa. ></p> > ><p> >Kebijaksanaan keamanan bisa berubah menjadi banyak sekali, dan informasi vital dapat dengan mudah dilupakan. Kebijaksanaan untuk staf IT bisa juga mengandung kebijaksanaan yang diklasifikasikan untuk user biasa, jadi lebih bijaksana untuk membaginya menjadi beberapa kebijaksanaan kecil; seperti Kebijaksanaan Pemakaian Yang Bisa Diterima, Kebijaksanaan Password, Kebijaksanaan Email dan Kebijaksanaan Akses dari Seberang (Remote Access). ></p> > ><p> >Contoh kebijaksanaan dapat ditemukan pada <uri >link="http://www.sans.org/resources/policies/">The SANS Security Policy >Project</uri>. Jika Anda hanya mempunyai jaringan yang kecil dan mengira bahwa kebijaksanaan ini terlalu banyak, Anda perlu melihat ke <uri >link="http://www.cis.ohio-state.edu/cgi-bin/rfc/rfc2196.html">Site Security >Handbook</uri>. ></p> > ></body> ></section> ></chapter> > ><chapter> ><title>Memperketat keamanan setelah/selama instalasi</title> ><section> ><title>Rambu-rambu USE</title> ><body> > ><p> >File <path>make.conf</path> berisi rambu-rambu USE yang didefinisikan oleh user dan file ><path>/etc/make.profile/make.defaults</path> berisi rambu-rambu USE default untuk >Gentoo Linux. Untuk panduan ini, rambu-rambu yang penting adalah <c>pam</c> (Pluggable >Authentication Modules), <c>tcpd</c> (TCP wrappers) dan <c>ssl</c> (Secure >Socket Layer). Semuanya ada dalam rambu-rambu USE default. ></p> > ></body> ></section> ><section> ><title>Password GRUB</title> ><body> > ><p> >Grub mendukung 2 cara yang berbeda dalam penambahan password pada file konfigurasi (<path>/boot/grub/grub.conf</path>). Salah satu cara adalah dengan menggunakan password teks murni dan cara lain adalah dengan enkripsi md5+salt. ></p> > ><pre caption="/boot/grub/grub.conf"> >timeout 5 >password changeme ></pre> > ><p> >Ditambahkan password <c>changeme</c> dan jika tidak ada password yang dimasukkan maka setting >boot default yang akan digunakan. ></p> > ><p> >Ketika menambahkan suatu password md5, Anda perlu mengubah password ke dalam bentuk crypt format >(<c>man crypt</c>) yang sama formatnya dengan <path>/etc/shadow</path>. Informasi lebih lanjut silakan lihat <c>man crypt</c>. Password <e>changeme</e> yang terenkripsi akan terlihat seperti ini $1$T7/dgdIJ$dJM.n2wZ8RG.oEiIOwJUs. ></p> > ><p> >Atau hal ini bisa Anda lakukan langsung dalam shell grub: ></p> > ><pre caption="md5crypt pada shell grub"> >#<i>/sbin/grub</i> > > GRUB version 0.92 (640K lower / 3072K upper memory) > > [ Minimal BASH-like line editing is supported. For the first word, TAB > lists possible command completions. Anywhere else TAB lists the possible > completions of a device/filename. ] > >grub> <i>md5crypt</i> > >Password: <i>********</i> ><codenote>Typed changeme</codenote> >Encrypted: $1$T7/dgdIJ$dJM.n2wZ8RG.oEiIOwJUs. > >grub> <i>quit</i> ></pre> > ><p> >Kemudian, potong dan tempelkan password Anda pada <path>/boot/grub/grub.conf</path>. ></p> > ><pre caption="/boot/grub/grub.conf"> >timeout 5 >password --md5 $1$T7/dgdIJ$dJM.n2wZ8RG.oEiIOwJUs. ></pre> > ><p> >Timeout 5 detik akan menjadi bermanfaat jika sistemnya terletak di remote dan harus bisa diboot-ulang tanpa interaksi keyboard. Pelajari lebih lanjut mengenai password grub dengan menjalankan <c>info grub</c>. ></p> > ></body> ></section> ><section> ><title>Password LILO</title> ><body> > ><p> >LILO juga mendukung dua cara untuk menangani password: global dan per-image, keduanya dalam bentuk teks murni. ></p> > ><p> >Yang global diset pada permulaan file konfigurasi : ></p> > ><pre caption="/etc/lilo.conf"> >password=changeme >restricted >delay=3 ></pre> > ><p> >Atau bisa juga ditambahkan pada suatu image. ></p> > ><pre caption="/etc/lilo.conf"> >image=/boot/bzImage > read-only > password=changeme > restricted ></pre> > ><p> >Jika opsi <c>restricted</c> tidak dimasukkan, maka prompt password akan muncul setiap kali menjalankannya. ></p> > ><p> >Untuk menyimpan informasi baru dalam <path>lilo.conf</path> Anda perlu menjalankan <c>/sbin/lilo</c>. ></p> > ></body> ></section> ><section> ><title>Pengetatan penggunaan konsol</title> ><body> > ><p> >Dengan file <path>/etc/securetty</path>, Anda bisa menentukan perangkat <c>tty</c> >(terminal) mana untuk login sebagai root. ></p> > ><p> >Kami menganjurkan Anda mengubah semua baris menjadi komentar selain <c>vc/1</c>. Hal ini menyebabkan root hanya dapat login sekali dan hanya pada satu terminal. ></p> > ><note> >Pengguna dalam grup wheel masih dapat melakukan <c>su -</c> untuk menjadi root pada TTY yang lain. ></note> > ><pre caption="/etc/securetty"> >vc/1 ></pre> > ></body> ></section> ></chapter> > ><chapter> ><title>Logging Lebih Lanjut</title> ><section> ><body> > ><p> >Logging ekstra harus ditambahkan untuk menangkap peringatan-peringatan atau kesalahan-kesalahan yang akan mengingatkan adanya serangan yang sedang berlangsung atau terjadinya kompromi (pendudukan). Penyerang sering melakukan pemindai (scan) atau probe pada network sebelum menyerang. ></p> > ><p> >Memiliki file log yang mudah dibaca dan dimanage adalah vital. Gentoo Linux mengijinkan Anda untuk memilih salah satu dari 3 logger pada saat instalasi. ></p> > ></body> ></section> ><section> ><title>Logging: Syslogd</title> ><body> > ><p> >Syslogd adalah logger yang paling banyak digunakan pada Linux dan Unix. Tidak memiliki fasilitas rotasi log. Karena itu perlu dibantu dengan menjalankan <path>/usr/sbin/logrotate</path> dalam suatu cron job dan dikonfigurasikan dalam <path>/etc/logrotate.conf</path>. Sesering apa rotasi log dilakukan bergantung pada beban sistem. ></p> > ><p> >Berikut ini adalah <path>syslog.conf</path> standar dengan beberapa fitur tambahan. Kami sudah membuang tanda komentar pada baris <c>cron</c> dan <c>tty</c> dan menambahkan suatu server untuk logging secara remote. Untuk meningkatkan keamanan, Anda bisa menambahkan log di dua tempat yang berbeda. ></p> > ><pre caption="/etc/syslog.conf"> ># /etc/syslog.conf Configuration file for syslogd. ># ># For more information see syslog.conf(5) ># manpage. ># This is from Debian, we are using it for now ># Daniel Robbins, 5/15/99 > ># ># First some standard logfiles. Log by facility. ># > >auth,authpriv.* /var/log/auth.log >*.*;auth,authpriv.none -/var/log/syslog >cron.* /var/log/cron.log >daemon.* -/var/log/daemon.log >kern.* -/var/log/kern.log >lpr.* -/var/log/lpr.log >mail.* /var/log/mail.log >user.* -/var/log/user.log >uucp.* -/var/log/uucp.log >local6.debug /var/log/imapd.log > ># ># Logging for the mail system. Split it up so that ># it is easy to write scripts to parse these files. ># >mail.info -/var/log/mail.info >mail.warn -/var/log/mail.warn >mail.err /var/log/mail.err > ># Logging for INN news system ># >news.crit /var/log/news/news.crit >news.err /var/log/news/news.err >news.notice -/var/log/news/news.notice > ># ># Some `catch-all' logfiles. ># >*.=debug;\ > auth,authpriv.none;\ > news.none;mail.none -/var/log/debug >*.=info;*.=notice;*.=warn;\ > auth,authpriv.none;\ > cron,daemon.none;\ > mail,news.none -/var/log/messages > ># ># Emergencies and alerts are sent to everybody logged in. ># >*.emerg * >*.=alert * > ># ># I like to have messages displayed on the console, but only on a virtual ># console I usually leave idle. ># >daemon,mail.*;\ > news.=crit;news.=err;news.=notice;\ > *.=debug;*.=info;\ > *.=notice;*.=warn /dev/tty8 > >#Setup a remote logging server >*.* @logserver > ># The named pipe /dev/xconsole is for the `xconsole' utility. To use it, ># you must invoke `xconsole' with the `-file' option: ># ># $ xconsole -file /dev/xconsole [...] ># ># NOTE: adjust the list below, or you'll go crazy if you have a reasonably ># busy site.. ># >#daemon.*,mail.*;\ ># news.crit;news.err;news.notice;\ ># *.=debug;*.=info;\ ># *.=notice;*.=warn |/dev/xconsole > >local2.* -/var/log/ppp.log ></pre> > ><p> >Penyerang kebanyakan akan berusaha menghapus jejaknya dengan mengedit atau menghapus file log. Anda dapat mempersulit penyerang dengan mengirim log pada satu atau lebih server logging pada mesin yang berbeda. Dapatkan informasi lebih lanjut mengenai syslogd dengan menjalankan <c>man syslog</c>. ></p> > ></body> ></section> ><section> ><title>Metalog</title> ><body> > ><p> ><uri link="http://metalog.sourceforge.net">Metalog</uri> dari Frank Dennis tidak bisa log ke server remote, tetapi keuntungannya ada pada kinerja dan fleksibilitas logging. Metalog dapat melakukan log berdasarkan nama program, urgensi, fasilitas (seperti syslogd) dan memiliki kemampuan pencocokan ekspresi regular (regular expression matching) dan bisa menjalankan skrip eksternal jika suatu pola spesifik terjadi. Sangat bagus untuk mengambil tindakan bila diperlukan. ></p> > ><p> >Konfigurasi standar pada dasarnya sudah cukup. Jika Anda ingin diberi notifikasi melalui email ketika suatu kesalahan memasukkan password terjadi, gunakan salah satu dari skrip berikut ini. ></p> > ><p> >Untuk postfix: ></p> > ><pre caption = "/usr/local/sbin/mail_pwd_failures.sh for postfix"> >#! /bin/sh >echo "$3" | mail -s "Warning (program : $2)" root ></pre> > ><p> >Untuk qmail: ></p> > ><pre caption = "/usr/local/sbin/mail_pwd_failures.sh for qmail"> >#!/bin/sh >echo "To: root >Subject:Failure (Warning: $2) >$3 >" | /var/qmail/bin/qmail-inject -f root ></pre> > ><p> >Jangan lupa untuk mengubah skrip supaya bisa dieksekusi dengan <c>/bin/chmod +x >/usr/local/sbin/mail_pwd_failures.sh</c> ></p> > ><p> >Kemudian buanglah tanda komentar pada baris perintah di bawah Password failures dalam ><path>/etc/metalog/metalog.conf</path> sebagai berikut: ></p> > ><pre caption="/etc/metalog/metalog.conf"> >command = "/usr/local/sbin/mail_pwd_failures.sh" ></pre> > ></body> ></section> ><section> ><title>Syslog-ng</title> ><body> > ><p> >Syslog-ng memberikan beberapa fitur yang sama seperti syslog dan metalog dengan sedikit perbedaan. Syslog-ng bisa memfilter pesan-pesan berdasarkan tingkat dan isi (seperti metalog), memungkinkan remote logging seperti syslog, menangani log dari syslogd (bahkan aliran data-data dari Solaris), menulis ke TTY, menjalankan program dan dapat juga berfungsi sebagai server untuk logging. Pada dasarnya syslog-ng adalah logger terbaik, kombinasi syslog dan metalog dengan konfigurasi lebih canggih. ></p> > ><p> >Suatu file konfigurasi klasik yang sedikit dimodifikasi. ></p> > ><pre caption="/etc/syslog-ng/syslog-ng.conf"> >options { long_hostnames(off); sync(0); }; > >#source where to read log >source src { unix-stream("/dev/log"); internal(); }; >source kernsrc { file("/proc/kmsg"); }; > >#define destinations >destination authlog { file("/var/log/auth.log"); }; >destination syslog { file("/var/log/syslog"); }; >destination cron { file("/var/log/cron.log"); }; >destination daemon { file("/var/log/daemon.log"); }; >destination kern { file("/var/log/kern.log"); }; >destination lpr { file("/var/log/lpr.log"); }; >destination user { file("/var/log/user.log"); }; >destination mail { file("/var/log/mail.log"); }; > >destination mailinfo { file("/var/log/mail.info"); }; >destination mailwarn { file("/var/log/mail.warn"); }; >destination mailerr { file("/var/log/mail.err"); }; > >destination newscrit { file("/var/log/news/news.crit"); }; >destination newserr { file("/var/log/news/news.err"); }; >destination newsnotice { file("/var/log/news/news.notice"); }; > >destination debug { file("/var/log/debug"); }; >destination messages { file("/var/log/messages"); }; >destination console { usertty("root"); }; >destination console_all { file("/dev/tty12"); }; >destination xconsole { pipe("/dev/xconsole"); }; > >#create filters >filter f_auth { facility(auth); }; >filter f_authpriv { facility(auth, authpriv); }; >filter f_syslog { not facility(authpriv, mail); }; >filter f_cron { facility(cron); }; >filter f_daemon { facility(daemon); }; >filter f_kern { facility(kern); }; >filter f_lpr { facility(lpr); }; >filter f_mail { facility(mail); }; >filter f_user { facility(user); }; >filter f_debug { not facility(auth, authpriv, news, mail); }; >filter f_messages { level(info..warn) > and not facility(auth, authpriv, mail, news); }; >filter f_emergency { level(emerg); }; > >filter f_info { level(info); }; >filter f_notice { level(notice); }; >filter f_warn { level(warn); }; >filter f_crit { level(crit); }; >filter f_err { level(err); }; >filter f_failed { match("failed"); }; >filter f_denied { match("denied"); }; > >#connect filter and destination >log { source(src); filter(f_authpriv); destination(authlog); }; >log { source(src); filter(f_syslog); destination(syslog); }; >log { source(src); filter(f_cron); destination(cron); }; >log { source(src); filter(f_daemon); destination(daemon); }; >log { source(kernsrc); filter(f_kern); destination(kern); }; >log { source(src); filter(f_lpr); destination(lpr); }; >log { source(src); filter(f_mail); destination(mail); }; >log { source(src); filter(f_user); destination(user); }; >log { source(src); filter(f_mail); filter(f_info); destination(mailinfo); }; >log { source(src); filter(f_mail); filter(f_warn); destination(mailwarn); }; >log { source(src); filter(f_mail); filter(f_err); destination(mailerr); }; > >log { source(src); filter(f_debug); destination(debug); }; >log { source(src); filter(f_messages); destination(messages); }; >log { source(src); filter(f_emergency); destination(console); }; > >#default log >log { source(src); destination(console_all); }; ></pre> > ><p> >Sangat mudah untuk membuat konfigurasi, tetapi juga sangat mudah untuk melupakan sesuatu dalam file konfigurasi karena ukurannya yang raksasa. Pembuat program ini masih menjanjikan beberapa fitur tambahan seperti enkripsi, otentikasi, kompresi dan kontrol MAC (Mandatory Access Control). Dengan pilihan-pilihan ini, maka sempurnalah syslog-ng untuk memenuhi kebutuhan logging jaringan. Karena penyerang tidak bisa memata-matai log. ></p> > ><p> >Dan keuntungan syslog-ng lainnya. Tidak harus dijalankan oleh root!. ></p> > ></body> ></section> ></chapter> > ><chapter> ><title>Pemuatan Partisi</title> ><section> ><body> > ><p> >Ketika memuat partisi <c>ext2</c>, <c>ext3</c> atau <c>reiserfs</c>, Anda mempunyai beberapa pilihan yang bisa Anda aplikasikan pada <path>/etc/fstab</path>. Pilihan-pilihan tersebut adalah : ></p> > ><ul> ><li> > <c>nosuid</c> - Akan mengabaikan bit SUID dan membuatnya seperti file biasa ></li> ><li> > <c>noexec</c> - Akan mencegah eksekusi file dari partisi ini ></li> ><li> > <c>nodev</c> - Mengabaikan peralatan ></li> ></ul> > ><p> >Sayangnya setting-setting ini dapat dengan mudah dipatahkan dengan menjalankan alur tidak langsung. Bagaimanapun, setting <path>/tmp</path> ke noexec akan menghentikan sekitar 99% dari semua skrip kanak-kanak karena disain eksploitasi mereka adalah untuk dijalankan langsung dari <path>/tmp</path>. ></p> > ><pre caption="/etc/fstab"> >/dev/sda1 /boot ext2 noauto,noatime 1 1 >/dev/sda2 none swap sw 0 0 >/dev/sda3 / reiserfs notail,noatime 0 0 >/dev/sda4 /tmp reiserfs notail,noatime,nodev,nosuid,noexec 0 0 >/dev/sda5 /var reiserfs notail,noatime,nodev 0 0 >/dev/sda6 /home reiserfs notail,noatime,nodev,nosuid 0 0 >/dev/sda7 /usr reiserfs notail,noatime,nodev,ro 0 0 >/dev/cdroms /cdrom0 /mnt/cdrom iso9660 noauto,ro 0 0 >proc /proc proc defaults 0 0 ></pre> > ><warn> >Penempatan <path>/tmp</path> dalam moda <c>noexec</c> dapat mencegah eksekusi beberapa skrip tertentu. ></warn> > ><note> >Kuota disk lihatlah <uri link="#doc_chap6_sect3">Bagian Quota</uri>. ></note> > ><note> >Saya tidak melakukan setting <path>/var</path> ke <c>noexec</c> atau <c>nosuid</c> bahkan bila file-file tersebut secara normal tidak dijalankan dari titik pemuatan ini. Alasannya adalah >qmail diinstalasi dalam <path>/var/qmail</path> dan harus diijinkan untuk menjalankan dan mengakses suatu file SUID. Saya melakukan setup <path>/usr</path> dalam moda baca-saja karena saya tidak pernah menulis apapun di sana, kecuali kalau saya mau update Gentoo. Kemudian saya akan memuat ulang sistem file dalam moda baca-tulis, perbarui dan muat ulang kembali. ></note> > ><note> >Bahkan jika Anda tidak menggunakan qmail, Gentoo masih membutuhkan setting bit yang bisa dieksekusi pada <path>/var/tmp</path> karena ebuilds dibuat di sini. Tetapi suatu alur alternatif bisa dibuat jika Anda tetap bertahan untuk menempatkan <path>/var</path> dalam moda <c>noexec</c>. ></note> > ></body> ></section> ></chapter> > ><chapter> ><title>Pembatasan user/group</title> ><section> ><title>/etc/security/limits.conf</title> ><body> > ><p> >Mengatur pembatasan sumber daya bisa sangat efektif untuk pencegahan DoS lokal atau menangani jumlah maksimum login yang diijinkan untuk suatu grup atau user. ></p> > ><pre caption="/etc/security/limits.conf"> >* soft core 0 >* hard core 0 >* hard nproc 15 >* hard rss 10000 >* - maxlogins 2 >@dev hard core 100000 >@dev soft nproc 20 >@dev hard nproc 35 >@dev - maxlogins 10 ></pre> > ><p> >Jika Anda mendapatkan diri Anda sedang mencoba untuk set <c>nproc</c> atau <c>maxlogins</c> ke 0, mungkin sebaiknya Anda hapus saja user tersebut. Contoh di atas mengubah setting grup <c>dev</c> untuk proses, file inti dan <c>maxlogins</c>. Sisanya diset ke nilai defaultnya. ></p> > ><note> ><path>/etc/security/limits.conf</path> adalah bagian dari paket PAM dan hanya berlaku untuk aplikasi yang menggunakan PAM. ></note> > ></body> ></section> ><section> ><title>/etc/limits</title> ><body> > ><p> ><path>/etc/limits</path> sangat mirip dengan file limit <path>/etc/security/limits.conf</path>. Perbedaannya hanyalah terletak pada format dan hanya bekerja pada user atau wild card (bukan grup). Marilah kita melihat contoh konfigurasi berikut: ></p> > ><pre caption="/etc/limits"> >* L2 C0 U15 R10000 >kn L10 C100000 U35 ></pre> > ><p> >Di sini kita lakukan setting default dan setting spesifik untuk user kn. >Limits adalah bagian dari paket sys-apps/shadow. Tidak perlu melakukan setting pembatasan pada file ini jika Anda telah mematikan <c>pam</c> dalam <path>make.conf</path> atau PAM yang tidak dikonfigurasi secara benar. ></p> > ></body> ></section> ><section> ><title>Kuota</title> ><body> > ><warn> >Pastikan bahwa sistem file dimana Anda bekerja mendukung kuota. ReiserFS tidak termasuk di dalamnya! ></warn> > ><p> >Menerapkan kuota pada sistem file akan mencegah user menggunakan atau menulis pada seluruh kapasitas disk. Kuota diaktifkan di kernel dan ditambahkan pada suatu titik pemuatan. >Pilihan kernel diaktifkan dalam konfigurasi kernel di bawah <c>File systems->Quota support</c>. Terapkan setting berikut, kompilasi ulang kernel dan boot kembali menggunakan kernel baru. ></p> > ><p> >Mulai dengan instalasi kuota dengan <c>emerge quota</c>. Kemudian modifikasi <path>/etc/fstab</path> Anda dan tambahkan <c>usrquota</c> dan <c>grpquota</c> pada partisi yang akan Anda batasi penggunaan disknya seperti contoh di bawah ini. ></p> > ><pre caption="/etc/fstab"> >/dev/sda1 /boot ext2 noauto,noatime 1 1 >/dev/sda2 none swap sw 0 0 >/dev/sda3 / reiserfs notail,noatime 0 0 >/dev/sda4 /tmp ext3 notail,noatime,nodev,nosuid,noexec,usrquota,grpquota 0 0 >/dev/sda5 /var ext3 notail,noatime,nodev,usrquota,grpquota 0 0 >/dev/sda6 /home ext3 notail,noatime,nodev,nosuid,usrquota,grpquota 0 0 >/dev/sda7 /usr reiserfs notail,noatime,nodev,ro 0 0 >/dev/cdroms/cdrom0 /mnt/cdrom iso9660 noauto,ro 0 0 >proc /proc proc defaults 0 0 ></pre> > ><p> >Pada setiap partisi yang sudah Anda aktifkan kuotanya, buatlah file kuota >(<path>quota.user</path> dan <path>quota.group</path>) dan tempatkan dalam root dari partisi tersebut. ></p> > ><pre caption="Creating the quota files"> ># <i>touch /tmp/quota.user</i> ># <i>touch /tmp/quota.group</i> ># <i>chmod 600 /tmp/quota.user</i> ># <i>chmod 600 /tmp/quota.group</i> ></pre> > ><p> >Langkah ini harus dilakukan pada setiap partisi dimana kuota diaktifkan. Setelah menambahkan dan melakukan konfigurasi pada file kuota, kita perlu menambahkan skrip <c>quota</c> pada runlevel boot. ></p> > ><pre caption="Menambahkan kuota pada runlevel boot"> ># <i>rc-update add quota default</i> ></pre> > ><p> >Kita sekarang akan melakukan konfigurasi pada sistem untuk memeriksa kuota seminggu sekali dengan menambahkan baris berikut pada <path>/etc/crontab</path>: ></p> > ><pre caption="Adding quota check to crontab"> >0 3 * * 0 /sbin/quotacheck -avug. ></pre> > ><p> >Sesudah boot ulang mesinnya, maka sekarang waktunya untuk set kuota untuk user dan grup. ><c>edquota -u kn</c> akan memulai editor yang didefinisikan dalam $EDITOR (defaultnya adalah nano) dan Anda bisa edit kuota dari user kn. <c>edquota -g</c> akan melakukan hal yang sama untuk grup saja. ></p> > ><pre caption="Setting up quota's for user kn"> >Quotas for user kn: >/dev/sda4: blocks in use: 2594, limits (soft = 5000, hard = 6500) > inodes in use: 356, limits (soft = 1000, hard = 1500) ></pre> > ><p> >Untuk jelasnya silakan baca <c>man edquota</c> atau <uri link="http://www.tldp.org/HOWTO/mini/Quota.html">Quota mini howto</uri>. ></p> > ></body> ></section> ><section> ><title>/etc/login.defs</title> ><body> > ><p> >Jika kebijaksanaan menyatakan bahwa user harus mengubah password mereka setiap minggu, ubah nilai <c>PASS_MAX_DAYS</c> ke 14 dan <c>PASS_WARN_AGE</c> ke 7. Juga disarankan bahwa Anda menggunakan password aging, karena metoda brute force akan menemukan password apapun, hanya persoalan waktu saja. Kami juga menganjurkan Anda untuk set <c>LOG_OK_LOGINS</c> ke yes. ></p> > ></body> ></section> ><section> ><title>/etc/login.access</title> ><body> > ><p> >File <path>login.access</path> juga merupakan bagian dari paket sys-apps/shadow, yang memanfaatkan tabel kontrol akses untuk login. Tabel itu digunakan untuk mengatur mereka yang bisa dan tidak bisa login berdasarkan nama user, nama grup atau nama host. Secara default, semua user pada sistem diijinkan untuk login sehingga file itu hanya berisi komentar dan contoh saja. Apapun yang Anda amankan, server maupun workstation, kami menganjurkan Anda untuk set file ini sehingga tidak ada orang lain selain Anda (admin) yang punya hak akses ke konsol. ></p> > ><note> >Setting ini tidak berlaku untuk root. ></note> > ><pre caption="/etc/login.access"> >-:ALL EXCEPT wheel sync:console >-:wheel:ALL EXCEPT LOCAL .gentoo.org ></pre> > ><impo> >Hati-hati ketika melakukan konfigurasi pada pilihan ini, karena suatu kesalahan akan mengakibatkan Anda tidak bisa mengakses mesin itu jika Anda tidak mempunyai hak akses root. ></impo> > ><note> >Setting ini tidak berlaku untuk SSH, karena SSH tidak menjalankan <c>/bin/login</c> secara default. Setting ini bisa diaktifkan dengan menggunakan <c>UseLogin yes</c> pada <path>/etc/ssh/sshd_config</path>. SSH akan menggunakan login dan setting tersebut. ></note> > ><p> >Setup akses login akan dilakukan sehingga anggota dari grup wheel bisa login secara lokal atau dari domain gentoo.org. Mungkin ini terlalu paranoid, tetapi lebih baik aman dari pada menyesal. ></p> > ></body> ></section> ></chapter> > ><chapter> ><title>Perijinan file</title> ><section> ><title>Bisa dibaca oleh Dunia (World)</title> ><body> > > ><p> >User normal tidak boleh mempunyai akses ke file konfigurasi atau password. Seorang penyerang bisa mencuri password dari database atau website dan menggunakannya untuk mengganti atau bahkan lebih buruk, menghapus data. Karena itu penting sekali untuk menempatkan perijinan secara benar. Kalau Anda yakin bahwa suatu file hanya digunakan oleh root, ubah ijinnya dengan <c>0600</c> dan pastikan file itu adalah milik user yang tepat dengan menggunakan <c>chown</c>. ></p> > ></body> ></section> ><section> ><title>Bisa ditulisi oleh Dunia/Grup (World/Group)</title> ><body> > ><pre caption="Mencari file yang bisa ditulisi oleh dunia"> ># <i>/usr/bin/find / -type f \( -perm -2 -o -perm -20 \) \ > -exec ls -lg {} \; 2>/dev/null >writable.txt</i> ># <i>/usr/bin/find / -type d \( -perm -2 -o -perm -20 \) \ > -exec ls -ldg {} \; 2>/dev/null >>writable.txt</i> ></pre> > ><p> >Ini akan membuat suatu file raksasa dengan perijinan dari semua file dengan ijin bisa ditulisi oleh grup atau semua orang. Periksa perijinan dan hapuskan ijin bisa ditulisi oleh dunia pada file setiap orang, dengan menjalankan <c>/bin/chmod o-w</c> pada file-file tersebut. ></p> > ></body> ></section> ><section> ><title>File SUID/SGID</title> ><body> > ><p> >File dengan bit SUID or SGID yang diset memungkinkan file tersebut dijalankan dengan hak istimewa user atau grup <e>pemilik</e> dan bukan user yang mengeksekusi filenya. Biasanya bit-bit ini digunakan pada file-file yang harus dijalankan oleh root untuk melaksanakan apa yang harus dilakukan. File-file ini akan membawa ke kompromi root lokal (jika terdapat lubang keamanan). Hal ini sangat berbahaya dan file-file dengan bit SUID atau SGID yang diset harus dihindari sebisanya. Jika Anda tidak menggunakan file-file ini, terapkan <c>chmod 0</c> pada file-file tersebut atau unmerge paket pemilik mereka (cek paket mana yang memiliki mereka dengan menggunakan <c>qpkg -f</c>. Jika Anda belum memilikinya, silakan ketik <c>emerge gentoolkit</c>). Atau matikan bit SUID dengan <c>chmod -s</c>. ></p> > ><pre caption="Mencari file-file setuid"> ># <i>/usr/bin/find / -type f \( -perm -004000 -o -perm -002000 \) \ > -exec ls -lg {} \; 2>/dev/null >suidfiles.txt</i> ></pre> > ><p> >Akan dihasilkan file yang berisi daftar dari semua file SUID/SGID. ></p> > ><pre caption="Daftar dari binari setuid"> >/bin/su >/bin/ping >/bin/mount >/bin/umount >/var/qmail/bin/qmail-queue >/usr/bin/chfn >/usr/bin/chsh >/usr/bin/crontab >/usr/bin/chage >/usr/bin/expiry >/usr/bin/sperl5.6.1 >/usr/bin/newgrp >/usr/bin/passwd >/usr/bin/gpasswd >/usr/bin/procmail >/usr/bin/suidperl >/usr/lib/misc/pt_chown >/usr/sbin/unix_chkpwd >/usr/sbin/traceroute >/usr/sbin/pwdb_chkpwd ></pre> > ><p> >Secara default Gentoo Linux tidak memiliki banyak file SUID (bergantung pada apa yang Anda install), tetapi Anda mungkin mendapatkan suatu daftar seperti di atas. Kebanyakan perintah-perintah itu tidak boleh digunakan oleh user biasa, hanya root yang boleh. Matikan bit SUID pada <c>ping</c>, <c>mount</c>, <c>umount</c>, <c>chfn</c>, <c>chsh</c>, <c>newgrp</c>, <c>suidperl</c>, <c>pt_chown</c> dan <c>traceroute</c> dengan <c>chmod -s</c> pada setiap file. Jangan buang bit pada <c>su</c>, <c>qmail-queue</c> atau <c>unix_chkpwd</c>. Kalau dibuang, maka Anda tidak bisa melakukan su dan menerima mail. Dengan membuang bit ini, maka Anda menghilangkan kemungkinan dari user biasa (atau seorang penyerang) untuk mendapatkan akses root melalui file-file ini. ></p> > ><p> >File SUID yang saya miliki pada sistem saya hanyalah <c>su</c>, <c>passwd</c>, ><c>gpasswd</c>, <c>qmail-queue</c>, <c>unix_chkpwd</c> dan <c>pwdb_chkpwd</c>. >Tetapi jika Anda menjalankan X, maka Anda mungkin punya lebih banyak, karena X membutuhkan akses. ></p> > ></body> ></section> ></chapter> > ><chapter> ><title>PAM (Pluggable Authentication Modules)</title> ><section> ><body> > ><p> >PAM adalah bagian dari pustaka bersama (shared libraries) yang memberikan suatu alternatif untuk melakukan otentikasi dalam program. Rambu <c>pam</c> pada USE secara default adalah on. >Jadi setting PAM pada Gentoo Linux adalah cukup lumayan, tetapi selalu ada ruang untuk perbaikan. Pertama-tama lakukan instalasi cracklib. ></p> > ><pre caption="Instalasi cracklib"> ># <i>emerge cracklib</i> ></pre> > ><pre caption="/etc/pam.d/passwd"> >auth required pam_unix.so shadow nullok >account required pam_unix.so >password required pam_cracklib.so difok=3 retry=3 minlen=8 dcredit=2 ocredit=2 >password required pam_unix.so md5 use_authtok >session required pam_unix.so ></pre> > ><p> >Cracklib akan ditambahkan untuk memastikan user menggunakan password dengan minimum panjang 8 karakter dan berisi minimum 2 angka, 2 tanda lainnya dan setidaknya harus berbeda 3 karakter dari password sebelumnya. Sehingga user akan dipaksa untuk memilih password yang baik (kebijakan password). Periksa dokumen <uri link="http://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/pam-6.html#ss6.3">PAM</uri> untuk opsi yang lainnya. ></p> > ><pre caption="/etc/pam.d/sshd"> >auth required pam_pwdb.so nullok >auth required pam_shells.so >auth required pam_nologin.so >auth required pam_env.so >account required pam_pwdb.so >password required pam_cracklib.so difok=3 retry=3 minlen=8 dcredit=2 ocredit=2 use_authtok >password required pam_pwdb.so shadow md5 >session required pam_pwdb.so >session required pam_limits.so ></pre> > ><p> >Setiap layanan yang tidak dikonfigurasikan dengan file PAM pada <path>/etc/pam.d</path> akan menggunakan aturan-aturan dalam <path>/etc/pam.d/other</path>. Setting default adalah <c>deny</c> seperti yang seharusnya begitu. Tetapi sepertinya saya akan mempunyai log yang sangat banyak dan karena itu saya menambahkan <c>pam_warn.so</c>. Konfigurasi terakhir adalah <c>pam_limits</c> yang dikontrol oleh <path>/etc/security/limits.conf</path>. Lihat <uri >link="#doc_chap6_sect1">bagian /etc/security/limits.conf</uri> untuk setting mengenai ini. ></p> > ><pre caption="/etc/pam.d/other"> >auth required pam_deny.so >auth required pam_warn.so >account required pam_deny.so >account required pam_warn.so >password required pam_deny.so >password required pam_warn.so >session required pam_deny.so >session required pam_warn.so ></pre> > ></body> ></section> ></chapter> > ><chapter> ><title>TCP Wrappers</title> ><section> ><body> > ><p> >Adalah suatu cara untuk mengontrol akses ke layanan, biasanya dijalankan oleh inetd (yang tidak dimiliki oleh Gentoo) tetapi bisa juga digunakan oleh xinetd dan layanan-layanan lainnya. ></p> > ><note> >Layanan ini harus menjalankan tcpd pada argumen servernya (dalam xinetd). Lihat bab mengenai xinetd untuk informasi lebih lanjut. ></note> > ><pre caption="/etc/hosts.deny"> >ALL:PARANOID ></pre> > ><pre caption="/etc/hosts.allow"> >ALL: LOCAL @wheel >time: LOCAL, .gentoo.org ></pre> > ><p> >Seperti yang dapat Anda lihat, formatnya sangat mirip dengan <path>/etc/login.access</path>. Tcpd mendukung layanan khusus dan mereka tidak bekerja dalam area yang sama dengan keamanan. Setting ini hanya berlaku untuk layanan-layanan yang menggunakan tcp wrappers. ></p> > ><p> >Dimungkinkan juga untuk menjalankan suatu perintah ketika suatu layanan sedang diakses (dapat digunakan ketika mengaktifkan relaying untuk user dial in) tetapi tidak direkomendasikan karena orang-orang cenderung untuk membuat masalah lebih banyak daripada memecahkan masalah. Contoh, bisa jadi Anda mengkonfigurasikan suatu skrip untuk mengirimkan email pada saat seseorang melanggar aturan deny, tetapi kemudian seorang penyerang dapat menjalankan serangan DoS dengan terus menerus melanggar aturan deny. Sehingga dihasilkan banyak aktivitas I/O dan mail, jadi jangan lakukan itu! Baca <c>man 5 hosts_access</c> untuk informasi lebih lanjut. ></p> > ></body> ></section> ></chapter> > ><chapter> ><title>Keamanan Kernel</title> ><section> ><title>Membuang fungsi</title> ><body> > ><p> >Aturan dasar ketika mengkonfigurasikan kernel adalah membuang semua yang tidak Anda perlukan. Sehingga akan dihasilkan kernel yang kecil tetapi juga membuang kerentanan yang mungkin ada dalam driver dan fitur-fitur yang lain. ></p> > ><p> >Pertimbangkan juga untuk mematikan dukungan modul yang bisa dimuat (loadable). Meskipun masih tetap dimungkinkan untuk menambahkan modul-modul (root kits) tanpa fitur ini, tetapi hal ini akan mempersulit penyerang biasa untuk menginstalasi root kit melalui modul kernel. ></p> > ></body> ></section> ><section> ><title>/proc (kernel flags)</title> ><body> > ><p> >Banyak parameter kernel dapat diubah melalui file system <path>/proc</path> atau dengan menggunakan <c>sysctl</c>. ></p> > ><p> >Untuk mengubah parameter dan variabel kernel secara dinamis dan langsung, Anda harus mendefinisikan <c>CONFIG_SYSCTL</c> di kernel Anda. Setting ini default di kernel 2.4 standar. ></p> > ><pre caption="Drop paket ping"> ># <i>/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all</i> ></pre> > ><p> >Setting ini akan membuat kernel mengabaikan semua pesan ping yang juga dikenal sebagai pesan ICMP tipe 0. Alasannya adalah suatu paket IP yang membawa pesan ICMP bisa berisi muatan lain dari pada yang Anda kira. Administrator menggunakan ping sebagai alat diagnostik dan sering mengeluh bahwa mereka tidak bisa melakukan ping. Tidak ada alasan bagi orang luar untuk bisa melakukan ping (ke dalam). Tetapi kadang-kadang berguna juga untuk orang dalam kalau bisa melakukan ping. Jadi solusinya adalah mematikan ICMP tipe 0 di firewall. ></p> > ><pre caption="Abaikan broadcast ping"> ># <i>/bin/echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts</i> ></pre> > ><p> >Setting ini akan mematikan tanggapan pada broadcast ICMP dan akan mencegah serangan Smurf. Serangan Smurf terjadi dengan mengirimkan pesan ICMP tipe 0 pada alamat broadcast network. Biasanya penyerang menggunakan alamat asal yang dispoof (ditumpangi/ditunggangi). Semua komputer pada network tersebut akan menjawab pesan ping dan membebani host yang ditunggangi. ></p> > ><pre caption="Matikan paket yang diubah jalur sumbernya"> ># <i>/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route</i> ></pre> > ><p> >Jangan menerima paket yang diubah jalur sumbernya (source routed). Penyerang dapat menggunakan pengubahan jalur sumber (source routing) untuk menghasilkan trafik yang seolah-olah dihasilkan dari dalam network Anda, tetapi sebenarnya dirouting balik ke arah darimana ia berasal, sehingga penyerang dapat memasuki network Anda. Source routing sangat jarang digunakan untuk tujuan-tujuan yang sah secara hukum, jadi matikan saja. ></p> > ><pre caption="Matikan penerimaan redirect"> ># <i>/bin/echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects</i> ></pre> > ><p> >Matikan penerimaan ICMP redirect. ICMP redirect bisa digunakan untuk mengubah tabel routing Anda, dan mungkin berakhir dengan buruk. ></p> > ><pre caption="Proteksi terhadap pesan kesalahan yang buruk"> ># <i>/bin/echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses</i> ></pre> > ><p> >Hidupkan perlindungan terhadap respons pesan kesalahan yang buruk. ></p> > ><pre caption="Hidupkan filtering untuk reverse path"> ># <i>for i in /proc/sys/net/ipv4/conf/*; do > /bin/echo "1" > $i/rp_filter >done</i> ></pre> > ><note> >Jika Anda menghidupkan IP forwarding, Anda akan mendapatkan hasil ini. ></note> > ><p> >Hidupkan filtering untuk reverse path. Ini akan membantu memastikan bahwa paket-paket akan menggunakan alamat sumber yang sah, dengan otomatis menolak paket yang masuk jika data table routing untuk alamat sumber mereka tidak cocok dengan interface network darimana mereka berasal. Jadi ada tambahan keamanan yaitu mencegah IP yang ditunggangi. ></p> > ><warn> >Tetapi menghidupkan filtering reverse path dapat menjadi masalah jika Anda menggunakan routing asimetris (paket dari Anda ke suatu host melalui jalur yang berbeda dengan paket dari host tersebut ke Anda) atau jika Anda mengoperasikan host yang tidak melakukan routing tetapi mempunyai beberapa alamat IP pada interface yang berbeda. ></warn> > ><pre caption="Log semua yang ditunggangi, yang source routed dan paket redirect"> ># <i>/bin/echo "1" > /proc/sys/net/ipv4/conf/all/log_martians</i> ></pre> > ><p> >Melakukan log pada paket-paket yang ditunggangi, paket yang source routed dan paket redirect. ></p> > ><pre caption="Menonaktifkan IP forwarding"> ># <i>/bin/echo "0" > /proc/sys/net/ipv4/ip_forward</i> ></pre> > ><p> >Pastikan bahwa IP forwarding dalam keadaan off. Kita hanya membutuhkannya pada host yang berfungsi sebagai multi-homed. ></p> > ><p> >Semua setting ini akan direset ketika mesin diboot ulang. Jadi saya menganjurkan Anda untuk memasukkannya pada <path>/etc/sysctl.conf</path> yang secara otomatis akan dipanggil oleh skrip init <path>/etc/init.d/bootmisc</path>. </p> > ><p> >Sintaks dari <path>/etc/sysctl.conf</path> cukup singkat. Buanglah <path>/proc/sys/</path> dari alur yang disebutkan sebelumnya dan gantikan <path>/</path> dengan <path>.</path>: ></p> > ><pre caption="Menerjemahkan ke sysctl.conf"> ><comment>(Manual dengan menggunakan echo):</comment> >/bin/echo "0" > /proc/sys/net/ipv4/ip_forward > ><comment>(Otomatis pada sysctl.conf):</comment> >net.ipv4.ip_forward = 0 ></pre> > ></body> ></section> ><section> ><title>Grsecurity</title> ><body> > ><p> >Patch dari <uri link="http://grsecurity.net">Grsecurity</uri> adalah standar di Gentoo kernel sources tetapi dimatikan secara default. Konfigurasikan kernel Anda sebagaimana biasanya Anda kerjakan dan kemudian konfigurasikan opsi Grsecurity. Penjelasan mendalam mengenai opsi Grsecurity (versi 1.9) dapat dilihat pada halaman proyek <uri link="/proj/en/hardened">Gentoo Hardened</uri>. ></p> > ><p> ><c>Grsec-sources</c> yang terbaru berisi dukungan untuk versi 2.* dari Grsecurity. Informasi lebih lanjut dari set patch Grsecurity yang diperbarui dapat dilihat pada dokumen yang ada di <uri link="http://www.grsecurity.net/">halaman Grsecurity</uri>. ></p> > ></body> ></section> ><section> ><title>Kerneli</title> ><body> > ><p> ><uri link="http://www.Kerneli.org">Kerneli</uri> adalah patch yang menambahkan enkripsi pada kernel yang ada. Dengan melakukan patch kernel Anda, Anda akan mendapatkan opsi-opsi baru seperti: Cryptographic ciphers, digest algorithms dan cryptographic loop >filters. ></p> > ><warn> >Patch kerneli untuk saat ini masih belum berada dalam versi stabil untuk kernel terbaru, jadi hati-hati menggunakannya. ></warn> > ></body> ></section> ><section> ><title>Patch-patch kernel yang lain</title> ><body> > ><ul> ><li> > <uri link="http://www.openwall.com">The OpenWall Project</uri> (not for 2.4 > kernels) ></li> ><li><uri link="http://www.lids.org">Linux Intrusion Detection System</uri></li> ><li><uri link="http://www.rsbac.org">Rule Set Based Access Control</uri></li> ><li> > <uri link="http://www.nsa.gov/selinux">NSA's security enhanced kernel</uri> ></li> ><li><uri link="http://sourceforge.net/projects/wolk/">Wolk</uri></li> ></ul> > ><p> >Dan mungkin masih banyak lagi. ></p> > ></body> ></section> ></chapter> > ><chapter> ><title>Layanan untuk Pengamanan</title> ><section> ><title>Menggunakan xinetd</title> ><body> > ><p> >xinetd adalah pengganti inetd (yang tidak dimiliki Gentoo), daemon untuk layanan internet. xinetd mendukung kontrol akses berdasarkan alamat dari host remote dan jam untuk akses. Juga mendukung kemampuan log yang lebih akurat, termasuk waktu start server, alamat host remote, nama user remote, waktu aktifnya server, dan tindakan-tindakan yang diminta. ></p> > ><p> >Seperti layanan yang lain, sebaiknya digunakan konfigurasi default yang baik. Tetapi karena <c>xinetd</c> berjalan sebagai root dan mendukung protokol-protokol yang mungkin tidak Anda ketahui benar cara kerjanya, maka kami tidak menganjurkan Anda menggunakannya. Tetapi jika Anda tetap ingin menggunakannya, berikut ini adalah cara untuk menambahkan keamanan padanya: ></p> > ><pre caption="Instalasi xinetd"> ># <i>emerge xinetd tcp-wrappers</i> ></pre> > ><p> >Dan edit file konfigurasi: ></p> > ><pre caption="/etc/xinetd.conf"> >defaults >{ > only_from = localhost > instances = 10 > log_type = SYSLOG authpriv info > log_on_success = HOST PID > log_on_failure = HOST > cps = 25 30 >} > ># This will setup pserver (cvs) via xinetd with the following settings: ># max 10 instances (10 connections at a time) ># limit the pserver to tcp only ># use the user cvs to run this service ># bind the interfaces to only 1 ip ># allow access from 10.0.0.* ># limit the time developers can use cvs from 8am to 5pm ># use tpcd wrappers (access control controlled in ># <path>/etc/hosts.allow</path> and <path>/etc/hosts.deny</path>) ># max_load on the machine set to 1.0 ># The disable flag is per default set to no but I like having ># it in case of it should be disabled >service cvspserver >{ > socket_type = stream > protocol = tcp > instances = 10 > protocol = tcp > wait = no > user = cvs > bind = 10.0.0.2 > only_from = 10.0.0.0 > access_times = 8:00-17:00 > server = /usr/sbin/tcpd > server_args = /usr/bin/cvs --allow-root=/mnt/cvsdisk/cvsroot pserver > max_load = 1.0 > log_on_failure += RECORD > disable = no >} ></pre> > ><p> >Untuk informasi lebih lanjut, bacalah <c>man 5 xinetd.conf</c>. ></p> > ></body> ></section> ><section> ><title>ssh</title> ><body> > ><p> >Satu-satunya cara pengamanan yang dibutuhkan oleh OpenSSH adalah menghidupkan otentikasi yang lebih kuat berdasarkan enkripsi pada kunci umum (public key). Terlalu banyak site (seperti <uri>http://www.sourceforge.net</uri>, <uri>http://www.php.net</uri> dan <uri>http://www.apache.org</uri>) menderita penyusupan ke sistem mereka disebabkan password yang lemah atau password yang jelek. ></p> > ><pre caption="/etc/ssh/sshd_config"> >#Only enable version 2 >Protocol 2 > >#No direct root access >PermitRootLogin no > >#Turn on Public key authentication >PubkeyAuthentication yes >AuthorizedKeysFile .ssh/authorized_keys > >#Disable .rhost files and normal password auth. >RhostsAuthentication no >PasswordAuthentication no >PermitEmptyPasswords no > >AllowHosts *.gentoo.org > >#Only people in the wheel or admin group can be given access >AllowGroups wheel admin > >#Of all the people in those groups, only kn and bs really have access >AllowUsers kn bs > >#add logging level >SyslogFacility AUTH >LogLevel INFO > >#bind >ListenAddress 127.0.0.1 ></pre> > ><p> >Sekarang yang harus dilakukan user adalah membuat suatu kunci (pada mesin dimana mereka akan melakukan login) dengan perintah berikut ini ></p> > ><pre caption="Membuat pasangan kunci DSA"> ># <i>/usr/bin/ssh-keygen -t dsa</i> ></pre> > ><p> >Dan ketikkan suatu frasa pass ></p> > ><pre caption="Keluaran dari ssh-keygen"> >Generating public/private dsa key pair. >Enter file in which to save the key (/home/kn/.ssh/id_dsa):<c>[Press enter]</c> >Created directory '/home/kn/.ssh'. >Enter passphrase (empty for no passphrase): <c>[Enter passphrase]</c> >Enter same passphrase again: <c>[Enter passphrase again]</c> >Your identification has been saved in /home/kn/.ssh/id_dsa. >Your public key has been saved in /home/kn/.ssh/id_dsa.pub. >The key fingerprint is: >07:24:a9:12:7f:83:7e:af:b8:1f:89:a3:48:29:e2:a4 kn@knielsen ></pre> > ><p> >Tambahan dua file pada direktori <path>~/.ssh/</path> Anda yaitu <path>id_dsa</path> dan <path>id_dsa.pub</path>. File <path>id_dsa</path> adalah kunci pribadi Anda dan harus Anda simpan. File lain <path>id_dsa.pub</path> adalah untuk didistribusikan ke setiap server yang bisa Anda akses. Tambahkan kunci pada direktori home user dalam <path>~/.ssh/authorized_keys</path> dan user seharusnya sudah bisa login. ></p> > ><p> >Sekarang user harus menjaga kunci pribadi ini secara baik. Simpanlah pada media yang selalu mereka bawa atau simpan pada workstation mereka (sebutkan hal ini pada kebijaksanaan <uri link="#doc_chap2_sect5">password</uri>). ></p> > ><p> >Informasi lebih lanjut, kunjungi website <uri link="http://www.openssh.org">OpenSSH</uri>. ></p> > ></body> ></section> ><section> ><title>X</title> ><body> > ><p> >Secara default XFree dikonfigurasikan untuk berlaku sebagai Xserver. Hal ini dapat menjadi berbahaya, karena X menggunakan koneksi TCP yang tidak dienkripsi dan selalu siap untuk melayani xclient. ></p> > ><impo> >Kalau Anda tidak memerlukan layanan ini, maka disable saja! ></impo> > ><p> >Tetapi kalau Anda bergantung pada penggunaan workstation Anda sebagai sebuah Xserver, maka gunakan perintah <c>/usr/X11R6/bin/xhost</c> dengan hati-hati. Perintah ini memungkinkan klien dari host lain untuk terhubung dan menggunakan tampilan Anda. Ini berguna bagi Anda yang membutuhkan aplikasi X yang berjalan pada mesin yang lain dan satu-satunya cara adalah melalui network. Sintaknya adalah <c>/usr/X11R6/bin/xhost +hostname</c> ></p> > ><warn> >Jangan pernah menggunakan fitur <c>xhost +</c>! Hal ini akan mengijinkan semua klien untuk berhubungan dan memegang kendali atas X Anda. Jika seorang penyerang dapat mengakses X Anda, maka dia dapat merekam dalam log semua ketikan Anda dan mengontrol desktop Anda. Jika Anda harus menggunakannya selalu ingatlah untuk memastikan satu host yang diijinkan. ></warn> > ><p> >Solusi lebih aman adalah mematikan fitur ini secara keseluruhan dengan menjalankan X secara <c>startx -- -nolisten tcp</c> atau mematikannya secara permanen pada konfigurasi. ></p> > ><pre caption="/usr/X11R6/bin/startx"> >defaultserverargs="-nolisten tcp" ></pre> > ><p> >Untuk memastikan bahwa <path>startx</path> tidak ditulis ulang ketika melakukan emerge versi baru dari XFree, Anda harus melindunginya. Tambahkan baris berikut pada <path>/etc/make.conf</path>: ></p> > ><pre caption = "/etc/make.conf"> >CONFIG_PROTECT_MASK="/usr/X11R6/bin/startx" ></pre> > ><p> >Jika Anda menggunakan manajer login grafis, Anda perlu melakukan pendekatan berbeda. ></p> > ><p> >For <c>gdm</c> (Gnome Display Manager) ></p> > ><pre caption="/etc/X11/gdm/gdm.conf"> >[server-Standard] >command=/usr/X11R6/bin/X -nolisten tcp ></pre> > ><p> >Untuk <c>xdm</c> (X Display Manager) dan <c>kdm</c> (Kde Display Manager) ></p> > ><pre caption="/etc/X11/xdm/Xservers"> >:0 local /usr/bin/X11/X -nolisten tcp ></pre> > ></body> ></section> > ><section> ><title>FTP</title> ><body> > ><p> >Umumnya, menggunakan FTP (File Transfer Protocol) adalah ide yang buruk. Karena data yang tidak terenkripsi, siap melayani pada 2 port (biasanya port 20 dan 21), dan login anonymous yang biasanya dicari-cari oleh penyerang (untuk memperdagangkan software ilegal). Karena protokol FTP mempunyai beberapa masalah keamanan, Anda sebaiknya menggunakan <c>sftp</c> atau HTTP sebagai penggantinya. Jika tidak, amankan layanan Anda sebaik-baiknya dan siapkan diri Anda. ></p> > ></body> ></section> ><section> ><title>Pure-ftpd</title> ><body> > ><p> >Pure-ftpd adalah cabang dari trollftpd yang asli. Dimodifikasi untuk alasan keamanan dan kegunaan oleh Frank Dennis. ></p> > ><p> >Gunakan user virtual (jangan pernah memakai account dari sistem) dengan menghidupkan opsi <c>AUTH</c>. Set menjadi <c>-lpuredb:/etc/pureftpd.pdb</c> dan membuat user Anda dengan menggunakan <c>/usr/bin/pure-pw</c>. ></p> > ><pre caption="/etc/conf.d/pure-ftpd"> >AUTH="-lpuredb:/etc/pureftpd.pdb" > >## Misc. Others ## >MISC_OTHER="-A -E -X -U 177:077 -d -4 -L100:5 -I 15" ></pre> > ><p> >Dan konfigurasikan setting <c>MISC_OTHER</c> Anda sehingga tidak mengijinkan anonymous (<c>-E</c>), chroot semua orang (<c>-A</c>), User tidak dapat membaca dan menulis ke file yang namanya dimulai dengan sebuah . (titik) (<c>-X</c>), maks waktu idle (<c>-I</c>), batasi rekursi (<c>-L</c>) dan <c>umask</c> yang masuk akal . ></p> > ><warn> ><e>Jangan</e> menggunakan opsi <c>-w</c> atau <c>-W</c>! Kalau Anda ingin mempunyai suatu site warez, berhentilah membaca panduan ini! ></warn> > ><p> >Dokumentasi bisa didapatkan di <uri>http://www.pureftpd.org</uri>. ></p> > ></body> ></section> ><section> ><title>Proftpd</title> ><body> > ><p> >Proftpd memiliki beberapa masalah keamanan, tetapi sepertinya sudah banyak diperbaiki. Tetap ada beberapa penambahan: ></p> > ><pre caption="/etc/proftpd/proftpd.conf"> >ServerName "My ftp daemon" >#Don't show the ident of the server >ServerIdent on "Go away" > >#Makes it easier to create virtual users >RequireValidShell off > >#Use alternative password and group file (passwd uses crypt format) >AuthUserFile "/etc/proftpd/passwd" >AuthGroupFile "/etc/proftpd/group" > ># Permissions >Umask 077 > ># Timeouts and limitations >MaxInstances 30 >MaxClients 10 "Only 10 connections allowed" >MaxClientsPerHost 1 "You have already logged on once" >MaxClientsPerUser 1 "You have already logged on once" >TimeoutStalled 10 >TimeoutNoTransfer 20 >TimeoutLogin 20 > >#Chroot everyone >DefaultRoot ~ > >#don't run as root >User nobody >Group nogroup > >#Log every transfer >TransferLog /var/log/transferlog > >#Problems with globbing >DenyFilter \*.*/ ></pre> > ><p> >Dokumentasi bisa didapatkan pada <uri>http://www.proftpd.org</uri>. ></p> > ></body> ></section> ><section> ><title>Vsftpd</title> ><body> > ><p> >Vsftpd (singkatan dari very secure ftp) adalah suatu daemon ftp kecil yang berjalan dengan konfigurasi default yang cukup masuk akal. Sederhana dan tidak mempunyai banyak fitur (seperti user virtual) sebagaimana pureftp dan proftp. ></p> > ><pre caption="/etc/vsftpd"> >anonymous_enable=NO >local_enable=YES > >#read only >write_enable=NO > >#enable logging of transfers >xferlog_std_format=YES > >idle_session_timeout=20 >data_connection_timeout=20 >nopriv_user=nobody > >chroot_list_enable=YES >chroot_list_file=/etc/vsftpd/chrootlist > >ls_recurse_enable=NO ></pre> > ><p> >Seperti yang Anda lihat, tidak ada jalan lain bagi layanan ini untuk memiliki ijin secara individual dan tidak ada aksi default chroot. Tetapi ketika sampai pada hal setting anonymous, layanan ini cukup bagus. Kadang-kadang menyenangkan kalau memiliki server ftp anonymous (untuk sharing open source) dan vsftpd melakukannya dengan baik pada hal ini. ></p> > ></body> ></section> ><section> ><title>Apache</title> ><body> > ><p> >Apache (1.3.26) dilengkapi dengan file konfigurasi yang cukup baik tetapi kita perlu memperbaiki beberapa hal, seperti binding ke satu alamat dan menjaganya dari kebocoran informasi. Hal-hal ini adalah opsi yang harus diaplikasikan pada file konfigurasi. ></p> > ><p> >Jika Anda tidak mematikan <c>ssl</c> pada <path>/etc/make.conf</path> Anda sebelum menginstalasi apache, Anda harus memiliki akses pada server yang mampu melakukan ssl. Tambahkan baris berikut ini untuk mengaktifkan kemampuan ini. ></p> > ><pre caption="/etc/conf.d/apache"> >HTTPD_OPTS="-D SSL" ></pre> > ><pre caption="/etc/apache/conf/apache.conf"> >#Make it listen on your ip >Listen 127.0.0.1 >BindAddress 127.0.0.1 >#It is not a good idea to use nobody or nogroup - >#for every service not running as root >#(just add the user apache with group apache) >User apache >Group apache >#Will keep apache from telling about the version >ServerSignature Off >ServerTokens Prod ></pre> > ><p> >Apache dikompilasi dengan <c>--enable-shared=max</c> dan <c>--enable-module=all</c>. Secara default semua modul akan diaktifkan, jadi Anda harus memberikan tanda komentar pada semua modul dalam bagian <c>LoadModule</c> (<c>LoadModule</c> dan <c>AddModule</c>) untuk modul yang tidak Anda gunakan. Jalankan ulang layanan dengan perintah <c>/etc/init.d/apache restart</c>. ></p> > ><p> >Dokumentasi bisa didapatkan pada <uri>http://www.apache.org</uri>. ></p> > ></body> ></section> > ><section> ><title>Qmail</title> ><body> > ><p> >Qmail dianggap sebagai server mail yang paling aman. Qmail ditulis dengan dasar pemikiran keamanan (dan paranoia). Qmail tidak mengijinkan relaying secara default dan belum pernah mendapatkan lubang keamanan sejak 1996. Lakukan <c>emerge qmail</c> dan lakukan konfigurasi! ></p> > ></body> ></section> ><section> ><title>Bind</title> ><body> > ><p> >Dokumentasi bisa didapatkan di <uri link="http://www.isc.org/products/BIND/bind9.html">Internet Software Consortium</uri>. Manual Referensi Administrasi BIND 9 juga berada pada <path>doc/arm</path>. ></p> > ><!-- ><p> >Per default Gentoo does not setup any configuration for this services so you >have to add your own DNS zones to <path>/etc/bind/named.conf</path>. But since >the security lies not only within the domain server daemon but also in the >protocol it should be properly configured. ></p> > ><p> >People often ask, why not use djbdns (very secure DNS server by D.J. Bernstein) >and the answer is: Bind does have features that djbdns does not, like support >for IPv6 (not without a patch anyway). ></p> > ><pre caption="/etc/bind/named.conf"> >#setup access control >acl "mynet" { 10.0.0.0/24; }; > >options { > directory "/var/bind"; > pid-file "/var/run/named/named.pid"; >#allow "mynet" to make queries > allow-query { "mynet"; }; >#don't allow zone transfers > allow-transfer { none; }; > forward only; > forwarders { 10.0.0.2; }; >#Only provide recursive service to "mynet" > recursion no; > allow-recursion { mynet; }; ># Bind to an interface > listen-on { 10.0.0.1; }; ># Don't show the version > version "Go away"; >}; > >key "rndc-key" { > algorithm hmac-md5; > secret "o1BYkYC+bXeZgHDsrVBwRQ=="; >}; > >#allow only control from localhost and with a key >controls { > inet 127.0.0.1 port 953 > allow { 127.0.0.1; } keys { "rndc-key"; }; >}; ></pre> > ><p> >This is a good default configuration. However, Bind version 9 has a special ><c>chroot</c> functionality that you should use. Here is how you create your >chrooted bind: ></p> > ><pre caption="Prepairing a chroot environment"> ># <i>mkdir -p /chroot</i> ># <i>mkdir /chroot/dns</i> ># <i>mkdir /chroot/dns/dev</i> ># <i>mkdir /chroot/dns/etc</i> ># <i>mkdir /chroot/dns/var</i> ># <i>mkdir /chroot/dns/var/run</i> ># <i>mkdir /chroot/dns/var/run/named</i> ># <i>chown -R named:named /chroot/dns/var/run/named</i> ># <i>cp -R /etc/bind /chroot/dns/etc/.</i> ># <i>cp /etc/localtime /chroot/dns/etc/localtime</i> ># <i>cp -R /var/bind /chroot/dns/var/.</i> ># <i>mknod /chroot/dns/dev/zero c 1 5</i> ># <i>chmod 666 /chroot/dns/dev/zero</i> ># <i>mknod /chroot/dns/dev/random c 1 8</i> ># <i>chmod 666 /chroot/dns/dev/random</i> ># <i>cp -a /dev/log /chroot/dns/dev/log</i> ># <i>cd /chroot/dns</i> ># <i>chattr +i etc etc/localtime var</i> ></pre> > ><p> >This will create a chrooted environment in <path>/chroot</path>. Now all we >have to do is modify the init script for supporting the new environment. Edit ><path>/etc/init.d/named</path> and add <c>-t /chroot/dns</c> to the start >function. You may also want to change the stop function to point to the correct >pid file in <path>/chroot/var/run/named/named.pid</path>. Restart your DNS >server. ></p> > ><note> >An attacker can escape a chrooted jail, if he is good enough (see how to >prevent this in the kernel patch section). ></note> >--> > ></body> ></section> ><section> ><title>Djbdns</title> ><body> > ><p> >Djbdns adalah implementasi DNS dimana pembuat software ini ingin mempertaruhkan > <uri link="http://cr.yp.to/djbdns/guarantee.html">uangnya</uri> untuk keamanan dari software ini. Djbdns sangat berbeda cara kerjanya dibandingkan Bind 9 tetapi boleh dicoba juga. Informasi lebih lanjut bisa didapatkan dari <uri>http://www.djbdns.org/</uri>. ></p> > ></body> ></section> ><section> ><title>Samba</title> ><body> > ><p> >Samba adalah protokol untuk share file dengan network Microsoft/Novell dan <e>tidak</e> boleh digunakan melalui Internet. Tetapi bagaimanapun tetap perlu diamankan. ></p> > ><pre caption="/etc/samba/smb.conf"> >[global] > #Bind to an interface > interfaces = eth0 10.0.0.1/32 > > #Make sure to use encrypted password > encrypt passwords = yes > directory security mask = 0700 > > #allow traffic from 10.0.0.* > hosts allow = 10.0.0. > > #Enables user authentication > #(don't use the share mode) > security = user > > #Disallow privileged accounts > invalid users = root @wheel > > #Maximum size smb shows for a share (not a limit) > max disk size = 102400 > > #Uphold the password policy > min password length = 8 > null passwords = no > > #Use PAM (if added support) > obey pam restrictions = yes > pam password change = yes ></pre> > ><p> >Pastikan bahwa perijinan diset secara benar pada setiap share dan ingatlah untuk membaca > <uri link="http://www.samba.org">documentation</uri>. ></p> > ><p> >Sekarang jalankan ulang server dan tambahkan user yang memiliki hak akses ke layanan ini. Hal ini dilakukan melalui <path>/usr/bin/smbpasswd</path> dengan parameter -a ></p> > ></body> ></section> ><section> ><title>Chroot atau server virtual</title> ><body> > ><p> >Layanan chroot adalah suatu cara untuk membatasi suatu lingkungan layanan (atau user) kepada hal-hal yang hanya boleh diakses dan tidak bisa mendapatkan akses (atau informasi) yang mengarah ke akses root. Dengan menjalankannya sebagai user yang lain dari root (nobody, apache, named) seorang penyerang hanya dapat mengakses file dengan ijin dari user ini. Jadi seorang penyerang tidak bisa mendapatkan akses root bahkan jika layanan tersebut mempunyai cacat dalam keamanannya. ></p> > ><p> >Beberapa layanan seperti pure-ftpd dan bind memiliki fitur untuk chroot, dan layanan lain tidak. Jika suatu layanan mendukung hal ini, gunakanlah, jika tidak maka Anda harus menemukan cara untuk membuatnya sendiri. Coba kita lihat bagaimana cara membuat suatu chroot, untuk pemahaman dasar dari cara kerja chroot, kita akan melakukan percobaan dengan <c>bash</c> (cara belajar yang mudah). ></p> > ><p> >Buatlah direktori <path>/chroot</path> (<c>mkdir chroot</c>). Dan temukan pustaka dinamis yang dikompilasi bersama dengan <c>bash</c> (jika bash dikompilasi dengan <c>-static</c> maka langkah ini tidaklah perlu): ></p> > ><p> >Perintah berikut akan menghasilkan daftar pustaka yang digunakan oleh bash. ></p> > ><pre caption="Mendapatkan daftar pustaka yang digunakan"> ># <i>ldd /bin/bash</i> > libncurses.so.5 => /lib/libncurses.so.5 (0x4001b000) > libdl.so.2 => /lib/libdl.so.2 (0x40060000) > libc.so.6 => /lib/libc.so.6 (0x40063000) > /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) ></pre> > ><p> >Sekarang buatlah lingkungan untuk bash. ></p> > ><pre caption="Membuat lingkungan chroot untuk bash"> ># <i>mkdir /chroot/bash</i> ># <i>mkdir /chroot/bash/bin</i> ># <i>mkdir /chroot/bash/lib</i> ></pre> > ><p> >Berikutnya, kopikan file yang digunakan oleh bash (<path>/lib</path>) ke lib yang dichroot dan kopi perintah bash ke direktori bin yang dichroot. Hal ini akan menghasilkan lingkungan yang tepat sama, tetapi dengan fungsi yang sedikit. Sesudah kopi, cobalah: > <c>chroot /chroot/bash</c>. Jika Anda mendapatkan prompt yang berbunyi <path>/</path> artinya berfungsi dengan baik! Kalau tidak, maka akan ada pesan file apa saja yang kurang. Beberapa pustaka bersama saling bergantungan satu sama lain. ></p> > ><p> >Anda akan menyadari bahwa di dalam chroot tidak ada yang berfungsi kecuali <c>echo</c>. Ini karena kita tidak memiliki perintah lain dalam lingkungan chroot tersebut selain bash dan <c>echo</c> sebagai fungsi bawaannya. ></p> > ><p> >Pada dasarnya cara ini adalah cara yang sama untuk membuat layanan yang dichroot. Perbedaannya adalah bahwa layanan-layanan kadang-kadang bergantung pada peralatan dan file konfigurasi pada <path>/etc</path>. >Kopikan saja mereka (peralatan bisa dikopikan dengan <c>cp -a</c>) ke dalam lingkungan yang dichroot, ubah skrip init untuk menggunakan chroot sebelum menjalankannya. Kadang cukup sukar untuk menemukan peralatan dan file konfigurasi yang diperlukan oleh suatu layanan. Di sini perintah <c>strace</c> menjadi berguna. Jalankan layanan dengan <c>/usr/bin/strace</c> bash dan carilah open, read, stat dan mungkin connect. Anda akan mendapatkan gambaran mengenai file apa yang harus dikopikan. Tetapi pada kebanyakan kasus, kopikan file passwd (edit kopinya dan buang user-user yang tidak berkaitan dengan layanan tersebut), <path>/dev/zero</path>, <path>/dev/log</path> dan <path>/dev/random</path>. ></p> > ><p> >Cara lain untuk membuat lingkungan yang lebih aman adalah dengan menggunakan lingkungan server virtual. Penerapannya dengan melakukan kopi dari Linux yang ada dan boot dalam mode virtual. Jika server dikompromikan, hanya bagian server virtual yang dikompromikan dan bukan instalasi yang sesungguhnya. ></p> > ><p> >Contoh server virtual: ></p> > ><ul> ><li> > <uri link="http://user-mode-linux.sourceforge.net">User-Mode Linux</uri> dan > howto mengenai <uri link="http://www.gentoo.org/doc/uml.html">User-Mode > Linux</uri>. ></li> ></ul> > ></body> ></section> ></chapter> > ><chapter> ><title>Firewall</title> ><section> ><title>Sebuah firewall</title> ><body> > ><p> >Orang-orang sering berpikir bahwa firewall akan memberikan keamanan yang paling tinggi, tetapi mereka salah. Dalam banyak kasus, suatu firewall yang dikonfigurasikan secara salah akan menghasilkan keamanan yang paling buruk daripada tidak ada firewallnya sama sekali. Suatu firewall juga merupakan bagian dari software dan harus diperlakukan sama seperti bagian software yang lain, karena ada kemungkinan juga berisi bug. ></p> > ><p> >Jadi pikirkan baik-baik sebelum mengimplementasikan! Apakah Anda memang memerlukannya ? Jika Anda kira Anda memerlukannya, tulislah satu kebijaksanaan bagaimana seharusnya firewall tersebut bekerja, apa tipe firewall dan siapa yang mengoperasikannya. Tetapi pertama-tama baca panduan ini dulu. ></p> > ><p> >Firewall digunakan untuk dua tujuan: ></p> > ><ul> ><li>Untuk menjaga user (worm/penyerang) tetap di luar</li> ><li>Untuk menjaga user (karyawan/anak-anak) tetap di dalam</li> ></ul> > ><p> >Secara dasar ada tiga macam firewall: ></p> > ><ul> ><li>Penyaringan paket</li> ><li>Relai sirkit</li> ><li>Gateway Aplikasi</li> ></ul> > ><p> >Suatu firewall harus merupakan mesin yang terdedikasi dan tidak menjalankan layanan apapun (atau <c>sshd</c> sebagai perkecualian satu-satunya) dan amankan dengan cara-cara yang direkomendasikan oleh panduan ini. ></p> > ></body> ></section> ><section> ><title>Penyaringan paket</title> ><body> > ><p> >Semua lalu lintas network adalah dalam bentuk paket. Sejumlah besar lalu lintas juga dipecah menjadi paket-paket kecil untuk kemudahan penanganan yang kemudian akan digabung kembali di tempat tujuan. Di dalam awalan (header) dari setiap paket terdapat keterangan mengenai bagaimana dan ke mana paket tersebut harus disampaikan. Dan keterangan-keterangan inilah yang digunakan oleh firewall penyaringan paket. Penyaringan dilakukan berdasarkan: ></p> > ><ul> ><li>Mengijinkan atau menolak paket berdasarkan alamat IP sumber/tujuan</li> ><li>Mengijinkan atau menolak paket berdasarkan port sumber/tujuan</li> ><li>Mengijinkan atau menolak paket berdasarkan protokol</li> ><li>Mengijinkan atau menolak paket berdasarkan pada rambu dari protokol khusus</li> ></ul> > ><p> >Pada dasarnya penyaringan didasarkan pada semua data yang ada pada awalan paket dan bukan isi paket. ></p> > ><p> >Kelemahannya: ></p> > ><ul> ><li> > Informasi alamat dalam paket dapat menjadi potensial alamat IP palsu atau istilah kami <e>ditunggangi</e> oleh pengirim ></li> ><li> > Data atau permintaan yang ada dalam paket yang diijinkan mungkin mengandung data yang tidak diinginkan yang digunakan oleh penyerang untuk mengeksploitasi bug yang diketahui berada pada layanan-layanan yang ada atau di balik firewall ></li> ><li>Biasanya ini merupakan suatu titik kelemahan</li> ></ul> > ><p> >Keuntungannya: ></p> > ><ul> ><li>Sederhana dan mudah untuk diimplementasikan</li> ><li> > Dapat memberikan peringatan atas kemungkinan serangan sebelum terjadi (contoh dengan mendeteksi adanya portscan) ></li> ><li>Bagus untuk menghentikan serangan SYN</li> ></ul> > ><p> >Contoh-contoh penyaring paket yang gratis pada Linux: ></p> > ><ul> ><li><uri link="http://www.iptables.org">Iptables</uri></li> ><li> > <uri link="http://www.linuxdocs.org/HOWTOs/IPCHAINS-HOWTO.html">Ipchains</uri> ></li> ><li><uri link="http://www.smoothwall.org">SmoothWall</uri></li> ></ul> > ></body> ></section> ><section> ><title>Relai Sirkit</title> ><body> > ><p> >Atau gateway tingkat sirkit adalah firewall yang melakukan validasi koneksi sebelum mengijinkan pertukaran data. Artinya firewall ini tidak secara langsung mengijinkan atau menolak paket berdasarkan pada awalan paket tetapi menentukan apakah koneksi antara kedua sisi sah sesuai dengan aturan yang dapat dikonfigurasi, sebelum memulai sesinya dan mengijinkan pertukaran data. Penyaringan didasarkan pada: ></p> > ><ul> ><li>Alamat IP sumber/tujuan</li> ><li>Port sumber/tujuan</li> ><li>Periode waktu</li> ><li>Protokol</li> ><li>User</li> ><li>Password</li> ></ul> > ><p> >Semua trafik divalidasi, dimonitor dan trafik yang tidak diinginkan bisa dihentikan. ></p> > ><p> >Kelemahan: ></p> > ><ul> ><li> > Beroperasi pada Lapis Transpor (Transport Layer) dan mungkin membutuhkan modifikasi yang cukup berarti pada program yang memberikan fungsi transpor ></li> ></ul> > ></body> ></section> ><section> ><title>Gateway Aplikasi</title> ><body> > ><p> >Gateway tingkat aplikasi adalah proxy untuk aplikasi, bertukar data dengan sistem remote atas nama klien. Aplikasi disembunyikan dari publik secara aman, di belakang DMZ (De-Militarized Zone: bagian dari jaringan internal yang bisa dilihat publik melalui firewall) atau di balik suatu firewall yang sama sekali tidak mengijinkan koneksi dari sisi luar. Penyaringan didasarkan pada: ></p> > ><ul> ><li>Mengijinkan atau menolak berdasarkan pada alamat IP sumber/tujuan</li> ><li>Berdasarkan isi paket</li> ><li>Membatasi akses file berdasarkan tipe atau ekstensi file</li> ></ul> > ><p> >Keuntungan: ></p> > ><ul> ><li>Bisa cache file, meningkatkan kinerja jaringan</li> ><li>Logging detil semua koneksi</li> ><li>Skala secara sempurna (beberapa server proxy bisa "membagi bersama" data yang di-cache)</li> ><li>Tidak ada koneksi langsung dari sisi luar</li> ><li>Bahkan bisa mengubah isi paket secara langsung</li> ></ul> > ><p> >Kelemahan: ></p> > ><ul> ><li>Konfigurasinya kompleks</li> ></ul> > ><p> >Gateway aplikasi dianggap sebagai solusi yang paling aman karena tidak harus dijalankan sebagai root dan host yang berada di belakangnya tidak dapat dijangkau dari Internet. ></p> > ><p> >Contoh gateway aplikasi yang gratis: ></p> > ><ul> ><li><uri link="http://www.squid-cache.org/">Squid</uri></li> ></ul> > ></body> ></section> ><section> ><title>Iptables</title> ><body> > ><p> >Untuk menjalankan iptables, bagian iptables pada kernel harus di-enable dulu. Saya sudah menambahkannya sebagai modul (perintah <c>iptables</c> akan menjalankannya pada saat dibutuhkan) dan kompilasi ulang kernel saya. Untuk informasi lebih lanjut bagaimana melakukan konfigurasi kernel Anda untuk iptables, kunjungilah <uri >link="http://iptables-tutorial.frozentux.net/chunkyhtml/kernelsetup.html">Tutorial Iptables Bab 2: Persiapan</uri>. Setelah Anda melakukan kompilasi kernel (atau sambil melakukan kompilasi kernel) Anda harus menambahkan perintah <c>iptables</c>. >Lakukan saja <c>emerge iptables</c> dan iptables bisa jalan. ></p> > ><p> >Sekarang lakukan percobaan dengan menjalankan <c>iptables -L</c>. Kalau gagal, berarti ada sesuatu yang salah dan Anda harus memeriksa ulang konfigurasi Anda. ></p> > ><p> >Iptables adalah penyaring paket tipe baru dan diperbaiki habis-habisan dalam kernel Linux 2.4.x. Iptables merupakan kelanjutan dari penyaring paket sebelumnya yaitu ipchains dalam kernel Linux 2.2.x. Salah satu perbaikan utama adalah iptables mampu melakukan penyaringan paket penuh-perhatian. Dengan penyaringan paket penuh-perhatian maka setiap koneksi TCP yang terbentuk bisa dipantau. ></p> > ><p> >Suatu koneksi TCP terdiri dari sekumpulan paket yang berisi informasi mengenai alamat IP sumber, alamat IP tujuan, nomor urutan sehingga paket dapat digabungkan dan tidak dihilangkan. TCP adalah protokol yang berorientasi koneksi, berlawanan dengan UDP yang tidak berorientasi koneksi. ></p> > ><p> >Dengan menguji awalan paket TCP, suatu penyaring paket penuh-perhatian dapat menentukan apakah suatu paket TCP yang diterima adalah bagian dari koneksi yang sudah terbentuk atau bukan dan memutuskan apakah akan menerima atau menolak paket tersebut. ></p> > ><p> >Pada penyaring paket yang tidak penuh-perhatian, dimungkinkan untuk menipu penyaring paket untuk menerima paket yang seharusnya ditolak, dengan cara memanipulasi awalan paket TCP. Ini dilakukan dengan cara memanipulasi rambu SYN atau rambu lain dalam awalan TCP. Penyaring paket penuh-perhatian akan menolak paket-paket tersebut, karena bukan merupakan bagian dari koneksi yang sudah terbentuk. Kemungkinan adanya pemindai siluman (stealth scan) juga akan dihentikan, karena paket-paket tersebut bukan merupakan bagian dari koneksi yang sudah terbentuk. ></p> > ><p> >Iptables memberikan beberapa fitur lain seperti NAT (Network Address Translation) dan pembatasan kecepatan. Pembatasan kecepatan sangat berguna untuk mencegah beberapa serangan DoS (Denial of Service) seperti banjir SYN. ></p> > ><p> >Koneksi TCP terbentuk dengan cara yang disebut jabat tangan tiga langkah. Ketika memulai suatu koneksi TCP, sisi klien mengirimkan suatu paket ke server dengan rambu SYN yang diset. Ketika sisi server menerima paket SYN, server akan menjawab dengan mengirimkan paket SYN+ACK kembali ke sisi klien. Ketika paket SYN+ACK diterima, sisi klien akan menjawab dengan paket ACK yang ketiga dengan efek mengakui koneksi tersebut. ></p> > ><p> >Serangan banjir SYN dilakukan dengan mengirimkan paket SYN tetapi sengaja tidak menjawab paket SYN+ACK. Sisi klien dapat membentuk paket dengan alamat IP sumber yang palsu karena tidak perlu memberikan jawaban. Sisi server akan menambahkan suatu entri pada antrian dari koneksi setengah jalan ketika menerima paket SYN dan kemudian menunggu paket akhir ACK sebelum menghapus entri itu dari antrian. Antrian memiliki jumlah slot yang terbatas dan kalau semua slot dipenuhi maka tidak akan ada koneksi yang baru lagi. Jika paket ACK tidak diterima sebelum suatu periode timeout yang ditentukan maka entri tersebut akan dihapus dari antrian secara otomatis. Setting dari timeout adalah bervariasi tetapi biasanya 30-60 detik atau bahkan lebih. Sisi klien menginisiasikan serangan dengan pembentukan paket SYN yang sangat banyak dengan alamat IP sumber yang berbeda-beda dan mengirimkannya ke alamat IP tujuan secepat-cepatnya dan karena itu memenuhi antrian koneksi setengah jalan dan menghalangi klien lainnya untuk membuat koneksi yang sah dengan server. ></p> > ><p> >Pada saat inilah pembatas kecepatan akan berguna. Pembatasan kecepatan penerimaan paket SYN bisa dilakukan dengan menggunakan <c>-m limit --limit 1/s</c>. Jumlah paket SYNC yang diterima akan diterima satu per detik dan karenanya membatasi banjir SYN pada sumber daya kita. ></p> > ><p> >Sekarang beberapa hal praktis! ></p> > ><p> >Ketika iptables dimuat dalam kernel, ada 5 hal di mana Anda bisa menempatkan aturan-aturan Anda. Kelima hal tersebut adalah <c>INPUT</c>, <c>OUTPUT</c>, <c>FORWARD</c>, <c>PREROUTING</c> dan <c>POSTROUTING</c>. Setiap hal ini disebut suatu rantai dan terdiri dari daftar aturan-aturan. Setiap aturan berbunyi sebagai berikut, jika suatu awalan paket sama dengan ini, maka hal-hal berikut ini yang harus dilakukan terhadap paket ini. Jika aturan tersebut tidak cocok dengan paket, maka paket akan disampaikan ke aturan berikutnya dalam rantai tersebut. ></p> > ><p> >Anda dapat menempatkan aturan-aturan secara langsung ke dalam 5 rantai utama atau membuat rantai baru dan menambahkannya sebagai suatu aturan ke rantai yang sudah ada. Iptables mendukung opsi-opsi berikut. ></p> > ><table> ><tr> > <th>Opsi:</th> > <th>Deskripsi:</th> ></tr> ><tr> > <ti>-A</ti> > <ti>Append (tambah)</ti> ></tr> ><tr> > <ti>-D</ti> > <ti>Delete (hapus)</ti> ></tr> ><tr> > <ti>-I</ti> > <ti>Insert (selip)</ti> ></tr> ><tr> > <ti>-R</ti> > <ti>Replace (ganti)</ti> ></tr> ><tr> > <ti>-L</ti> > <ti>List (tampilkan daftar)</ti> ></tr> ><tr> > <ti>-F</ti> > <ti>Hapus semua aturan dalam rantai atau semua rantai</ti> ></tr> ><tr> > <ti>-Z</ti> > <ti>Nolkan hitungan dalam rantai atau semua rantai</ti> ></tr> ><tr> > <ti>-C</ti> > <ti>Uji paket ini pada rantai</ti> ></tr> ><tr> > <ti>-N</ti> > <ti>Buat suatu rantai baru yang didefinisikan user</ti> ></tr> ><tr> > <ti>-X</ti> > <ti>Hapus suatu rantai yang didefinisikan user</ti> ></tr> ><tr> > <ti>-P</ti> > <ti>Ganti kebijaksanaan pada rantai untuk tujuan</ti> ></tr> ><tr> > <ti>-E</ti> > <ti>Ganti nama rantai</ti> ></tr> ><tr> > <ti>-p</ti> > <ti>Protokol</ti> ></tr> ><tr> > <ti>-s</ti> > <ti>Alamat sumber/mask</ti> ></tr> ><tr> > <ti>-d</ti> > <ti>Alamat tujuan/mask</ti> ></tr> ><tr> > <ti>-i</ti> > <ti>Nama input (nama ethernet)</ti> ></tr> ><tr> > <ti>-o</ti> > <ti>Nama output (nama ethernet)</ti> ></tr> ><tr> > <ti>-j</ti> > <ti>Lompat (tujuan dari aturan)</ti> ></tr> ><tr> > <ti>-m</ti> > <ti>Pencocokan Lanjutan (bisa menggunakan ekstensi)</ti> ></tr> ><tr> > <ti>-n</ti> > <ti>Keluaran numerik untuk alamat dan port</ti> ></tr> ><tr> > <ti>-t</ti> > <ti>Tabel untuk memanipulasi</ti> ></tr> ><tr> > <ti>-v</ti> > <ti>Mode Verbose</ti> ></tr> ><tr> > <ti>-x</ti> > <ti>Perluas angka (tampilkan nilai nyata)</ti> ></tr> ><tr> > <ti>-f</ti> > <ti>Hanya cocok dengan fragmen kedua atau lebih</ti> ></tr> ><tr> > <ti>-V</ti> > <ti>Versi Paket</ti> ></tr> ><tr> > <ti>--line-numbers</ti> > <ti>Cetak nomor baris ketika menampilkan daftar</ti> ></tr> ></table> > ><p> >Pertama-tama kita akan mencoba untuk menolak semua paket ICMP ke mesin kita, untuk membiasakan kita dengan iptables. ></p> > ><pre caption="Blok semua paket ICMP"> ># <i>iptables -A INPUT -p icmp -j DROP</i> ></pre> > ><p> >Pertama kita menentukan rantai yang akan ditambahkan setelah protokol dan kemudian tujuan. Tujuan bisa berupa nama dari rantai yang didefinisikan user atau satu dari tujuan khusus <c>ACCEPT</c>, <c>DROP</c>, <c>REJECT</c>, <c>LOG</c>, ><c>QUEUE</c>, <c>MASQUERADE</c>. Dalam kasus ini kita menggunakan <c>DROP</c> yang akan membuang paket tanpa memberitahukan klien. ></p> > ><p> >Sekarang coba <c>ping localhost</c>. Anda tidak akan mendapatkan jawaban karena iptables akan membuang semua pesan ICMP yang datang. Demikian pula, ia tidak dapat melakukan ping ke mesin lain, karena semua paket jawaban ICMP akan dibuang. Sekarang hapuskan rantai tersebut untuk memungkinkan ICMP kembali. ></p> > ><pre caption="Hapus semua aturan"> ># <i>iptables -F</i> ></pre> > ><p> >Sekarang perhatikan penyaringan paket penuh-perhatian pada iptables. Jika kita ingin memiliki inspeksi penuh-perhatian pada paket yang masuk pada eth0 kita bisa melakukannya dengan: ></p> > ><pre caption="Menerima paket yang berasal dari koneksi yang sudah terbentuk"> ># <i>iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT</i> ></pre> > ><p> >Perintah ini menyebabkan semua paket akan diterima dari suatu koneksi yang sudah terbentuk atau yang berkaitan dalam rantai INPUT. Dan Anda dapat membuang setiap paket yang tidak berada dalam tabel kondisi (state table) dengan melakukan <c>iptables -A INPUT -i eth0 -m state --state INVALID -j DROP</c> seperti sebelumnya. Hal ini memungkinkan penyaringan paket penuh-perhatian dalam iptables dengan memuat kondisi diperluas. Jika Anda ingin mengijinkan orang lain untuk berhubungan mesin Anda, Anda dapat menggunakan <c>--state NEW</c>. Iptables memiliki beberapa modul untuk tujuan yang berbeda. Beberapa di antaranya: ></p> > ><table> ><tr> > <th>Modul/Cocok untuk</th> > <th>Deskripsi</th> > <th>Opsi Lanjutan</th> ></tr> ><tr> > <ti>mac</ti> > <ti>Perluasan pencocokan alamat mac dari paket yang masuk.</ti> > <ti>--mac-source</ti> ></tr> ><tr> > <ti>state</ti> > <ti>Memungkinkan inspeksi penuh-perhatian</ti> > <ti>--state (pilihan state adalah ESTABLISHED,RELATED, INVALID, NEW)</ti> ></tr> ><tr> > <ti>limit</ti> > <ti>Pembatasan pencocokan kecepatan</ti> > <ti>--limit, --limit-burst</ti> ></tr> ><tr> > <ti>owner</ti> > <ti>Mencoba untuk mencocokkan bermacam-macam karakteristik dari pembuat paket</ti> > <ti> > --uid-owner userid --gid-owner groupid --pid-owner processid --sid-owner > sessionid > </ti> ></tr> ><tr> > <ti>unclean</ti> > <ti>Macam-macam pemeriksaan keabsahan paket</ti><ti></ti> ></tr> ></table> > ><p> >Marilah kita mencoba membuat rantai yang didefinisikan user dan mengaplikasikannya pada salah satu rantai yang sudah ada: ></p> > ><pre caption="Membuat rantai yang didefinisikan user"> ><codenote>Membuat suatu rantai baru dengan satu aturan</codenote> ># <i>iptables -X mychain</i> ># <i>iptables -N mychain</i> ># <i>iptables -A mychain -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT</i> ><codenote>Kebijaksanaan default adalah mengijinkan semua trafik keluar. Trafik ke dalam dibuang.</codenote> ># <i>iptables -P OUTPUT ACCEPT</i> ># <i>iptables -P INPUT DROP</i> ><codenote>Dan tambahkan pada rantai INPUT</codenote> ># <i>iptables -A INPUT -j mychain</i> ></pre> > ><p> >Dengan mengaplikasikan aturan pada rantai masukan, kita mendapatkan kebijaksanaan: Semua paket keluar diijinkan dan semua paket yang datang akan dibuang. ></p> > ><p> >Dokumentasi bisa didapatkan pada <uri >link="http://www.iptables.org/documentation/index.html#HOWTO">Dokumentasi netfilter/iptables</uri>. ></p> > ><p> >Marilah kita lihat contoh penuh. Dalam kasus ini kebijaksanaan firewall/gateway saya menyatakan: ></p> > ><ul> ><li>Koneksi ke firewall hanya diijinkan melalui SSH (port 22)</li> ><li> > Jaringan lokal harus memiliki akses ke HTTP, HTTPS dan SSH (DNS harus diijinkan juga) ></li> ><li> > Trafik ICMP bisa berisi muatan dan tidak boleh masuk. Tentu saja kita harus mengijinkan beberapa macam trafik ICMP. ></li> ><li>Pemindai port harus dideteksi dan dicatat log</li> ><li>Serangan SYN harus dihindari</li> ><li>Semua trafik yang lain harus dibuang dan dicatat log</li> ></ul> > ><pre caption="/etc/init.d/firewall"> >#!/sbin/runscript >IPTABLES=/sbin/iptables >IPTABLESSAVE=/sbin/iptables-save >IPTABLESRESTORE=/sbin/iptables-restore >FIREWALL=/etc/firewall.rules >DNS1=212.242.40.3 >DNS2=212.242.40.51 >#inside >IIP=10.0.0.2 >IINTERFACE=eth0 >LOCAL_NETWORK=10.0.0.0/24 >#outside >OIP=217.157.156.144 >OINTERFACE=eth1 > >opts="${opts} showstatus panic save restore showoptions rules" > >depend() { > need net >} > >rules() { > stop > ebegin "Setting internal rules" > > einfo "Setting default rule to drop" > $IPTABLES -P FORWARD DROP > $IPTABLES -P INPUT DROP > $IPTABLES -P OUTPUT DROP > > #default rule > einfo "Creating states chain" > $IPTABLES -N allowed-connection > $IPTABLES -F allowed-connection > $IPTABLES -A allowed-connection -m state --state ESTABLISHED,RELATED -j ACCEPT > $IPTABLES -A allowed-connection -i $IINTERFACE -m limit -j LOG --log-prefix \ > "Bad packet from ${IINTERFACE}:" > $IPTABLES -A allowed-connection -j DROP > > #ICMP traffic > einfo "Creating icmp chain" > $IPTABLES -N icmp_allowed > $IPTABLES -F icmp_allowed > $IPTABLES -A icmp_allowed -m state --state NEW -p icmp --icmp-type \ > time-exceeded -j ACCEPT > $IPTABLES -A icmp_allowed -m state --state NEW -p icmp --icmp-type \ > destination-unreachable -j ACCEPT > $IPTABLES -A icmp_allowed -p icmp -j LOG --log-prefix "Bad ICMP traffic:" > $IPTABLES -A icmp_allowed -p icmp -j DROP > > #Incoming traffic > einfo "Creating incoming ssh traffic chain" > $IPTABLES -N allow-ssh-traffic-in > $IPTABLES -F allow-ssh-traffic-in > #Flood protection > $IPTABLES -A allow-ssh-traffic-in -m limit --limit 1/second -p tcp --tcp-flags \ > ALL RST --dport ssh -j ACCEPT > $IPTABLES -A allow-ssh-traffic-in -m limit --limit 1/second -p tcp --tcp-flags \ > ALL FIN --dport ssh -j ACCEPT > $IPTABLES -A allow-ssh-traffic-in -m limit --limit 1/second -p tcp --tcp-flags \ > ALL SYN --dport ssh -j ACCEPT > $IPTABLES -A allow-ssh-traffic-in -m state --state RELATED,ESTABLISHED -p tcp --dport ssh -j ACCEPT > > #outgoing traffic > einfo "Creating outgoing ssh traffic chain" > $IPTABLES -N allow-ssh-traffic-out > $IPTABLES -F allow-ssh-traffic-out > $IPTABLES -A allow-ssh-traffic-out -p tcp --dport ssh -j ACCEPT > > einfo "Creating outgoing dns traffic chain" > $IPTABLES -N allow-dns-traffic-out > $IPTABLES -F allow-dns-traffic-out > $IPTABLES -A allow-dns-traffic-out -p udp -d $DNS1 --dport domain \ > -j ACCEPT > $IPTABLES -A allow-dns-traffic-out -p udp -d $DNS2 --dport domain \ > -j ACCEPT > > einfo "Creating outgoing http/https traffic chain" > $IPTABLES -N allow-www-traffic-out > $IPTABLES -F allow-www-traffic-out > $IPTABLES -A allow-www-traffic-out -p tcp --dport www -j ACCEPT > $IPTABLES -A allow-www-traffic-out -p tcp --dport https -j ACCEPT > > #Catch portscanners > einfo "Creating portscan detection chain" > $IPTABLES -N check-flags > $IPTABLES -F check-flags > $IPTABLES -A check-flags -p tcp --tcp-flags ALL FIN,URG,PSH -m limit \ > --limit 5/minute -j LOG --log-level alert --log-prefix "NMAP-XMAS:" > $IPTABLES -A check-flags -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP > $IPTABLES -A check-flags -p tcp --tcp-flags ALL ALL -m limit --limit \ > 5/minute -j LOG --log-level 1 --log-prefix "XMAS:" > $IPTABLES -A check-flags -p tcp --tcp-flags ALL ALL -j DROP > $IPTABLES -A check-flags -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG \ > -m limit --limit 5/minute -j LOG --log-level 1 --log-prefix "XMAS-PSH:" > $IPTABLES -A check-flags -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP > $IPTABLES -A check-flags -p tcp --tcp-flags ALL NONE -m limit \ > --limit 5/minute -j LOG --log-level 1 --log-prefix "NULL_SCAN:" > $IPTABLES -A check-flags -p tcp --tcp-flags ALL NONE -j DROP > $IPTABLES -A check-flags -p tcp --tcp-flags SYN,RST SYN,RST -m limit \ > --limit 5/minute -j LOG --log-level 5 --log-prefix "SYN/RST:" > $IPTABLES -A check-flags -p tcp --tcp-flags SYN,RST SYN,RST -j DROP > $IPTABLES -A check-flags -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit \ > --limit 5/minute -j LOG --log-level 5 --log-prefix "SYN/FIN:" > $IPTABLES -A check-flags -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP > > # Apply and add invalid states to the chains > einfo "Applying chains to INPUT" > $IPTABLES -A INPUT -m state --state INVALID -j DROP > $IPTABLES -A INPUT -j icmp_allowed > $IPTABLES -A INPUT -j check-flags > $IPTABLES -A INPUT -i lo -j ACCEPT > $IPTABLES -A INPUT -j allow-ssh-traffic-in > $IPTABLES -A INPUT -j allowed-connection > > einfo "Applying chains to FORWARD" > $IPTABLES -A FORWARD -m state --state INVALID -j DROP > $IPTABLES -A FORWARD -j icmp_allowed > $IPTABLES -A FORWARD -j check-flags > $IPTABLES -A FORWARD -o lo -j ACCEPT > $IPTABLES -A FORWARD -j allow-ssh-traffic-in > $IPTABLES -A FORWARD -j allow-www-traffic-out > $IPTABLES -A FORWARD -j allowed-connection > > einfo "Applying chains to OUTPUT" > $IPTABLES -A OUTPUT -m state --state INVALID -j DROP > $IPTABLES -A OUTPUT -j icmp_allowed > $IPTABLES -A OUTPUT -j check-flags > $IPTABLES -A OUTPUT -o lo -j ACCEPT > $IPTABLES -A OUTPUT -j allow-ssh-traffic-out > $IPTABLES -A OUTPUT -j allow-dns-traffic-out > $IPTABLES -A OUTPUT -j allow-www-traffic-out > $IPTABLES -A OUTPUT -j allowed-connection > > #Allow client to route through via NAT (Network Address Translation) > $IPTABLES -t nat -A POSTROUTING -o $IINTERFACE -j MASQUERADE > eend $? >} > >start() { > ebegin "Starting firewall" > if [ -e "${FIREWALL}" ]; then > restore > else > einfo "${FIREWALL} does not exists. Using default rules." > rules > fi > eend $? >} > >stop() { > ebegin "Stopping firewall" > $IPTABLES -F > $IPTABLES -t nat -F > $IPTABLES -X > $IPTABLES -P FORWARD ACCEPT > $IPTABLES -P INPUT ACCEPT > $IPTABLES -P OUTPUT ACCEPT > eend $? >} > >showstatus() { > ebegin "Status" > $IPTABLES -L -n -v --line-numbers > einfo "NAT status" > $IPTABLES -L -n -v --line-numbers -t nat > eend $? >} > >panic() { > ebegin "Setting panic rules" > $IPTABLES -F > $IPTABLES -X > $IPTABLES -t nat -F > $IPTABLES -P FORWARD DROP > $IPTABLES -P INPUT DROP > $IPTABLES -P OUTPUT DROP > $IPTABLES -A INPUT -i lo -j ACCEPT > $IPTABLES -A OUTPUT -o lo -j ACCEPT > eend $? >} > >save() { > ebegin "Saving Firewall rules" > $IPTABLESSAVE > $FIREWALL > eend $? >} > >restore() { > ebegin "Restoring Firewall rules" > $IPTABLESRESTORE < $FIREWALL > eend $? >} > >restart() { > svc_stop; svc_start >} > >showoptions() { > echo "Usage: $0 {start|save|restore|panic|stop|restart|showstatus}" > echo "start) will restore setting if exists else force rules" > echo "stop) delete all rules and set all to accept" > echo "rules) force settings of new rules" > echo "save) will store settings in ${FIREWALL}" > echo "restore) will restore settings from ${FIREWALL}" > echo "showstatus) Shows the status" >} ></pre> > ><p> >Anjuran tambahan ketika membuat firewall: ></p> > ><ol> ><li>Buatlah kebijaksanaan firewall Anda sebelum mengimplementasikannya</li> ><li>Jagalah supaya tetap sederhana</li> ><li> > Ketahui cara kerja protokol (baca <uri link="http://www.ietf.org/">RFC</uri> (Request For Comments)) ></li> ><li> > Ingatlah bahwa suatu firewall hanyalah suatu software yang berjalan sebagai root ></li> ><li>Ujilah firewall Anda</li> ></ol> > ><p> >Jika Anda menganggap bahwa iptables itu sulit dimengerti atau membutuhkan waktu lama untuk menghasilkan suatu firewall yang memadai, Anda dapat menggunakan <uri >link="http://www.shorewall.net">Shorewall</uri>. Sebenarnya yang digunakan adalah iptables juga untuk menghasilkan aturan-aturan firewall, tetapi konsentrasinya adalah pada aturan-aturan dan bukan pada protokol khusus. ></p> > ></body> ></section> ><section> ><title>Squid</title> ><body> > ><p> >Squid adalah server proxy yang sangat handal dan dapat menyaring trafik berdasarkan: waktu, ekspresi regular (regex) pada alur/URI, alamat IP sumber dan tujuan, domain, browser, nama user yang diotentikasi, tipe MIME dan nomor port (protokol). Saya mungkin lupa beberapa fitur, tetapi cukup sulit untuk meliputi semua daftar fitur. ></p> > ><p> >Dalam contoh berikut, saya menambahkan penyaringan banner sebagai pengganti penyaringan site porno. Alasannya adalah Gentoo.org <e>tidak</e> boleh didaftar bersama dengan beberapa site porno. Dan saya tidak mau menghabiskan waktu untuk mencoba mencari beberapa site yang bagus untuk Anda. ></p> > ><p> >Dalam kasus ini, kebijaksanaan saya berbunyi: ></p> > ><ul> ><li> > Surfing (HTTP/HTTPS) diijinkan selama jam kerja (senin-jumat 8-17 dan sabtu 8-13) > jika mereka masuk terlambat mereka harus bekerja, bukan surfing ></li> ><li> > Download dilarang (.exe, .com, .arj, .zip, .asf, .avi, .mpg, .mpeg etc) ></li> ><li> > Kami tidak menyenangi banner, jadi disaring dan diganti dengan gif transparan (di sini Anda bisa menjadi kreatif!) ></li> ><li>Semua koneksi yang lain dari dan ke Internet dilarang</li> ></ul> > ><p> >Implementasikan dalam 4 langkah <e>mudah</e>. ></p> > ><pre caption="/etc/squid/squid.conf"> ># Bind to a ip and port >http_port 10.0.2.1:3128 > ># Standard configuration >hierarchy_stoplist cgi-bin ? >acl QUERY urlpath_regex cgi-bin \? >no_cache deny QUERY > ># Add basic access control lists >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 > ># Add who can access this proxy server >acl localnet src 10.0.0.0/255.255.0.0 > ># And ports >acl SSL_ports port 443 >acl Safe_ports port 80 >acl Safe_ports port 443 >acl purge method PURGE > ># Add access control list based on regular ># expressions within urls >acl archives urlpath_regex "/etc/squid/files.acl" >acl url_ads url_regex "/etc/squid/banner-ads.acl" > ># Add access control list based on time and day >acl restricted_weekdays time MTWHF 8:00-17:00 >acl restricted_weekends time A 8:00-13:00 > >acl CONNECT method CONNECT > >#allow manager access from localhost >http_access allow manager localhost >http_access deny manager > ># Only allow purge requests from localhost >http_access allow purge localhost >http_access deny purge > ># Deny requests to unknown ports >http_access deny !Safe_ports > ># Deny CONNECT to other than SSL ports >http_access deny CONNECT !SSL_ports > ># My own rules > ># Add a page do be displayed when ># a banner is removed >deny_info NOTE_ADS_FILTERED url_ads > ># Then deny them >http_access deny url_ads > ># Deny all archives >http_access deny archives > ># Restrict access to work hours >http_access allow localnet restricted_weekdays >http_access allow localnet restricted_weekends > ># Deny the rest >http_access deny all ></pre> > ><p> >Berikutnya masukkan file-file yang akan Anda batasi. Saya telah menambahkan file zip, viv, exe, mp3, rar, ace, avi, mov, mpg, mpeg, au, ra, arj, tar, gz dan z. ></p> > ><pre caption="/etc/squid/files.acl"> >\.[Zz][Ii][pP]$ >\.[Vv][Ii][Vv].* >\.[Ee][Xx][Ee]$ >\.[Mm][Pp]3$ >\.[Rr][Aa][Rr]$ >\.[Aa][Cc][Ee]$ >\.[Aa][Ss][Ff]$ >\.[Aa][Vv][Ii]$ >\.[Mm][Oo][Vv]$ >\.[Mm][Pp][Gg]$ >\.[Mm][Pp][Ee][Gg]$ >\.[Aa][Uu]$ >\.[Rr][Aa]$ >\.[Aa][Rr][Jj]$ >\.[Tt][Aa][Rr]$ >\.[GgZz]$ >\.[Zz]$ ></pre> > ><note> >Catatan, [] dengan huruf besar dan huruf kecil untuk setiap karakter. Ini dimaksudkan supaya tidak seorangpun bisa melakukan tipuan dengan mengakses file AvI sebagai pengganti avi ></note> > ><p> >Kemudian kita menambahkan ekspresi regular untuk mengidentifikasikan banner. Anda mungkin akan sangat lebih kreatif dari saya: ></p> > ><pre caption="/etc/squid/banner-ads.acl"> >/adv/.*\.gif$ >/[Aa]ds/.*\.gif$ >/[Aa]d[Pp]ix/ >/[Aa]d[Ss]erver >/[Aa][Dd]/.*\.[GgJj][IiPp][FfGg]$ >/[Bb]annerads/ >/adbanner.*\.[GgJj][IiPp][FfGg]$ >/images/ad/ >/reklame/ >/RealMedia/ads/.* >^http://www\.submit-it.* >^http://www\.eads.* >^http://ads\. >^http://ad\. >^http://ads02\. >^http://adaver.*\. >^http://adforce\. >adbot\.com >/ads/.*\.gif.* >_ad\..*cgi >/Banners/ >/SmartBanner/ >/Ads/Media/Images/ >^http://static\.wired\.com/advertising/ >^http://*\.dejanews\.com/ads/ >^http://adfu\.blockstackers\.com/ >^http://ads2\.zdnet\.com/adverts >^http://www2\.burstnet\.com/gifs/ >^http://www.\.valueclick\.com/cgi-bin/cycle >^http://www\.altavista\.com/av/gifs/ie_horiz\.gif ></pre> > ><p> >Dan pada bagian akhir kita ingin file ini ditampilkan ketika banner dibuang. >Pada dasarnya ini adalah file setengah html dengan gambar gif transparan 4x4. ></p> > ><pre caption="/etc/squid/errors/NOTE_ADS_FILTERED"> ><HTML> ><HEAD> ><META HTTP-EQUIV="REFRESH" CONTENT="0; URL=http://localhost/images/4x4.gif"> ><TITLE>ERROR: The requested URL could not be retrieved</TITLE> ></HEAD> ><BODY> ><H1>Add filtered!</H1> ></pre> > ><note> >Jangan tutup tag <HTML> <BODY>. Semuanya akan dilakukan oleh squid. ></note> > ><p> >Seperti yang Anda lihat di sini, squid memiliki banyak kebisaan dan sangat efektif untuk keperluan filter dan proxy. Bahkan bisa juga menggunakan proxy squid alternatif untuk skala pada network yang sangat besar. Konfigurasi yang saya sertakan di sini umumnya sesuai untuk network kecil dengan jumlah user 1-20. ></p> > ><p> >Tetapi mengkombinasikan saringan paket (iptable) dan gateway aplikasi (squid) adalah mungkin solusi yang terbaik, bahkan jika squid terletak di suatu tempat yang aman dan tidak seorangpun dapat mengaksesnya dari luar. Kita masih perlu memperhitungkan serangan dari dalam. ></p> > ><p> >Sekarang Anda telah mengkonfigurasikan browser klien Anda untuk menggunakan server proxy. Gateway akan mencegah user berhubungan langsung keluar jika mereka tidak menggunakan proxy. ></p> > ><note> >Di Mozilla, lakukan setting di Edit->Preferences->Advanced->Proxies. ></note> > ><p> >Dapat juga melakukannya secara transparan dengan memanfaatkan iptables untuk melewatkan semua koneksi keluar melalui proxy squid. Ini dilakukan dengan menambahkan aturan forwarding/prerouting pada gateway: ></p> > ><pre caption="Menghidupkan portforwarding ke server proxy kita"> ># <i>iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to proxyhost:3128</i> ># <i>iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to proxyhost:3128</i> ></pre> > ></body> ></section> ><section> ><title>Sekarang, apa yang telah kita pelajari?</title> ><body> > ><p> >Kita sudah belajar bahwa: ></p> > ><ol> ><li> > Suatu firewall dapat menjadi suatu resiko tersendiri. Firewall yang dikonfigurasikan secara buruk adalah lebih jelek daripada tidak memiliki firewall sama sekali. ></li> ><li>Bagaimana melakukan setting gateway dasar dan proxy transparan.</li> ><li>Kunci firewall bagus adalah mengetahui protokol mana yang akan Anda ijinkan untuk lewat.</li> ><li> > Trafik IP tidak selalu berisi data yang sah / benar, contoh paket ICMP bisa berisi muatan tertentu. ></li> ><li>Bagaimana mencegah serangan SYN.</li> ><li> > Penyaringan trafik HTTP dengan membuang gambar-gambar dan download yang mengandung virus. ></li> ><li> > Mengkombinasikan penyaringan paket dan gateway aplikasi memberikan kendali yang lebih baik. ></li> ></ol> > ><p> >Sekarang, jika Anda <e>benar-benar</e> menginginkannya, buatlah suatu firewall yang cocok dengan kebutuhan Anda. ></p> > ></body> ></section> ></chapter> > ><chapter> ><title>Deteksi Penyusupan</title> ><section> ><title>AIDE (Advanced Intrusion Detection Environment)</title> ><body> > ><p> >AIDE adalah sistem deteksi penyusupan berdasarkan host (alternatif gratis selain Tripwire). >Dan jika Anda sudah mengenal Tripwire, Anda seharusnya tidak mengalami kesulitan untuk mempelajari file konfigurasi AIDE. ></p> > ><p> >File konfigurasi ini berdasarkan ekspresi regular, makro dan aturan-aturan untuk file dan direktori. Kita memiliki makro-makro sebagai berikut: ></p> > ><table> ><tr> > <th>Makro</th> > <th>Penjelasan</th> > <th>Sintaks</th> ></tr> ><tr> > <ti>ifdef</ti> > <ti>Jika didefinisikan</ti> > <ti>@@ifdef "name"</ti> ></tr> ><tr> > <ti>ifndef</ti> > <ti>Jika tidak didefinisikan</ti> > <ti>@@ifndef "name"</ti> ></tr> ><tr> > <ti>define</ti> > <ti>Definisi suatu variabel</ti> > <ti>@@define "name" "value"</ti> ></tr> ><tr> > <ti>undef</ti> > <ti>Buang definisi suatu variabel</ti> > <ti>@@undef "name"</ti> ></tr> ><tr> > <ti>ifhost</ti> > <ti>Jika "hostname"</ti> > <ti>@@ifhost "hostname"</ti> ></tr> ><tr> > <ti>ifnhost</ti> > <ti>Jika bukan "hostname"</ti> > <ti>@@ifnhost "hostname"</ti> ></tr> ><tr> > <ti>endif</ti> > <ti> > Endif harus digunakan setelah semua makro di atas kecuali define dan undef > </ti> > <ti>@@endif</ti> ></tr> ></table> > ><p> >Makro-makro ini akan sangat berguna jika Anda memiliki lebih dari satu kotak Gentoo dan ingin menggunakan AIDE di semua kotak tersebut. Tetapi tidak semua mesin menjalankan layanan yang sama atau bahkan usernya berbeda. ></p> > ><p> >Berikutnya, kita memiliki sekumpulan rambu untuk memeriksa pada file dan direktori. Rambu ini merupakan kombinasi perijinan, properti file dan hash/checksum kriptografi. ></p> > ><table> ><tr> > <th>Rambu</th> > <th>Penjelasan</th> ></tr> ><tr> > <ti>p</ti> > <ti>perijinan</ti> ></tr> ><tr> > <ti>i</ti> > <ti>inode</ti> ></tr> ><tr> > <ti>n</ti> > <ti>jumlah link</ti> ></tr> ><tr> > <ti>u</ti> > <ti>user</ti> ></tr> ><tr> > <ti>g</ti> > <ti>group</ti> ></tr> ><tr> > <ti>s</ti> > <ti>size</ti> ></tr> ><tr> > <ti>b</ti> > <ti>block count</ti> ></tr> ><tr> > <ti>m</ti> > <ti>mtime</ti> ></tr> ><tr> > <ti>a</ti> > <ti>atime</ti> ></tr> ><tr> > <ti>c</ti> > <ti>ctime</ti> ></tr> ><tr> > <ti>S</ti> > <ti>periksa pertambahan ukuran</ti> ></tr> ><tr> > <ti>md5</ti> > <ti>md5 checksum</ti> ></tr> ><tr> > <ti>sha1</ti> > <ti>sha1 checksum</ti> ></tr> ><tr> > <ti>rmd160</ti> > <ti>rmd160 checksum</ti> ></tr> ><tr> > <ti>tiger</ti> > <ti>tiger checksum</ti> ></tr> ><tr> > <ti>R</ti> > <ti>p+i+n+u+g+s+m+c+md5</ti> ></tr> ><tr> > <ti>L</ti> > <ti>p+i+n+u+g</ti> ></tr> ><tr> > <ti>E</ti> > <ti>Empty group</ti> ></tr> ><tr> > <ti>></ti> > <ti>Growing logfile p+u+g+i+n+S</ti> ></tr> ></table> > ><p> >Dan jika AIDE dikompilasi dengan dukungan mhash, maka terdapat beberapa fitur yang lain: ></p> > ><table> ><tr> > <th>Rambu</th> > <th>Penjelasan</th> ></tr> ><tr> > <ti>haval</ti> > <ti>haval checksum</ti> ></tr> ><tr> > <ti>gost</ti> > <ti>gost checksum</ti> ></tr> ><tr> > <ti>crc32</ti> > <ti>crc32 checksum</ti> ></tr> ></table> > ><p> >Sekarang Anda dapat membuat aturan-aturan Anda sendiri berdasarkan rambu-rambu di atas dengan cara mengkombinasikannya seperti : ></p> > ><pre caption="Membuat aturan untuk AIDE"> >All=R+a+sha1+rmd160 >Norm=s+n+b+md5+sha1+rmd160 ></pre> > ><p> >Hal terakhir yang perlu kita buat untuk file konfigurasi kita adalah untuk melihat bagaimana menambahkan suatu aturan pada suatu file atau direktori. Pada dasarnya Anda hanya tinggal mengetik nama file atau dir dan aturannya. AIDE akan menambahkan semua file secara rekursif jika Anda tidak menyebutkan sesuatu yang lain secara khusus. ></p> > ><table> ><tr> > <th>Rambu</th> > <th>Penjelasan</th> ></tr> ><tr> > <ti>!</ti> > <ti>Jangan tambahkan ini pada file atau direktori.</ti> ></tr> ><tr> > <ti>=</ti> > <ti>Tambahkan direktori ini, tetapi jangan rekursif.</ti> ></tr> ></table> > ><p> >Marilah kita perhatikan contoh yang lengkap ></p> > ><pre caption="/etc/aide/aide.conf"> >@@ifndef TOPDIR >@@define TOPDIR / >@@endif > >@@ifndef AIDEDIR >@@define AIDEDIR /etc/aide >@@endif > >@@ifhost smbserv >@@define smbactive >@@endif > ># The location of the database to be read. >database=file:@@{AIDEDIR}/aide.db > ># The location of the database to be written. >database_out=file:aide.db.new > >verbose=20 >report_url=stdout > ># Rule definition >All=R+a+sha1+rmd160 >Norm=s+n+b+md5+sha1+rmd160 > >@@{TOPDIR} Norm >!@@{TOPDIR}etc/aide >!@@{TOPDIR}dev >!@@{TOPDIR}proc >!@@{TOPDIR}root >!@@{TOPDIR}tmp >!@@{TOPDIR}var/log >!@@{TOPDIR}var/run >!@@{TOPDIR}usr/portage >@@ifdef smbactive >!@@{TOPDIR}etc/smb/private/secrets.tdb >@@endif >=@@{TOPDIR}home Norm ></pre> > ><p> >Pada contoh di atas, dengan beberapa makro kita menetapkan di mana topdir untuk mulai dan di mana direktori AIDE berada. AIDE memeriksa file <path>/etc/aide/aide.db</path> ketika melakukan pemeriksaan integritas file. Tetapi ketika memperbarui atau membuat file baru, AIDE menyimpan informasi pada <path>/etc/aide/aide.db.new</path>. Hal ini dilakukan supaya file db baru tidak menimpa file db yang lama. Pilihan <c>report_URL</c> belum diimplementasikan. Tetapi keinginan pembuat software ini adalah setidaknya AIDE sanggup untuk mengirimkan email atau mungkin menjalankan suatu skrip. ></p> > ><p> >Sesudah melakukan perubahan pada konfigurasi, Anda harus membuat file db Anda dengan menjalankan ><c>aide -i</c> dan kemudian kopi file <path>/etc/aide/aide.db.new</path> ke <path>/etc/aide/aide.db</path> dan menambahkan cek ke cron dengan menjalankan <c>crontab -e</c> sebagai root. ></p> > ><note> >Bergantung pada cpu Anda, akses disk dan rambu yang Anda pergunakan pada file, mungkin diperlukan beberapa saat untuk menjalankannya. ></note> > ><pre caption="Shedule aide as a cronjob"> >0 3 * * * /usr/bin/aide -u ></pre> > ><note> >Ingatlah untuk melakukan setup sehingga Anda mendapatkan mail root. Jika tidak maka Anda tidak akan tahu apa yang dilaporkan aide. ></note> > ><p> >Dalam kasus ini, AIDE berjalan sekali pada pukul 3 pagi. Saya memilih jam ini karena saya tidak ingin mengganggu user ketika mereka bekerja. Sebagai catatan, saya menggunakan opsi <c>-u</c> (Update) daripada <c>-C</c> (Check). Karena <c>-u</c> juga melakukan pemeriksaan pada file dan tidak menimpa ulang file db asli, maka terjadi penghematan waktu karena yang Anda perlukan hanyalah melakukan kopi suatu file ketika dideteksi adanya perubahan. Jadi hanya memeriksa perubahan untuk melihat apakah itu dilakukan Anda atau oleh seorang penyerang sebelum Anda mengkopikannya! ></p> > ><p> >Sekarang ada beberapa masalah dengan menyimpan file db secara lokal karena penyerang akan (bila dia tahu kalau aide dipasang) berusaha mengubah file db, memperbarui file db atau memodifikasi <path>/usr/bin/aide</path>. Maka Anda harus membuat suatu CD atau media lain dan meletakkan kopi dari file .db dan binari aide. ></p> > ><p> > >Informasi bisa didapatkan pada halaman proyek <uri >link="http://www.cs.tut.fi/~rammer/aide.html">AIDE</uri>. ></p> > ></body> ></section> ><section> ><title>Snort</title> ><body> > ><p> >Snort adalah suatu Network Intrusion Detection System (NIDS). Untuk menginstalasi dan mengkonfigurasikannya, gunakan contoh berikut. ></p> > ><pre caption="Add a user snort to the system"> ># useradd snort -d /var/log/snort -s /dev/null ># chown -R snort /var/log/snort ></pre> > ><pre caption="/etc/conf.d/snort"> >PIDFILE=/var/run/snort_eth0.pid >MODE="full" >NETWORK="10.0.0.0/24" >LOGDIR="/var/log/snort" >CONF=/etc/snort/snort.conf >SNORT_OPTS="-D -s -u snort -dev -l $LOGDIR -h $NETWORK -c $CONF" ></pre> > ><pre caption="/etc/snort/snort.conf"> ><codenote>Step 1</codenote> >var HOME_NET 10.0.0.0/24 >var EXTERNAL_NET any >var SMTP $HOME_NET >var HTTP_SERVERS $HOME_NET >var SQL_SERVERS $HOME_NET >var DNS_SERVERS [10.0.0.2/32,212.242.40.51/32] >var RULE_PATH ./ > ><codenote>Step 2</codenote> >preprocessor frag2 >preprocessor stream4: detect_scans detect_state_problems detect_scans disable_evasion_alerts >preprocessor stream4_reassemble: ports all >preprocessor http_decode: 80 8080 unicode iis_alt_unicode double_encode iis_flip_slash full_whitespace >preprocessor rpc_decode: 111 32771 >preprocessor bo: -nobrute >preprocessor telnet_decode > ><codenote>Step 3</codenote> >include classification.config > ><codenote>Step 4</codenote> >include $RULE_PATH/bad-traffic.rules >include $RULE_PATH/exploit.rules >include $RULE_PATH/scan.rules >include $RULE_PATH/finger.rules >include $RULE_PATH/ftp.rules >include $RULE_PATH/telnet.rules >include $RULE_PATH/smtp.rules >include $RULE_PATH/rpc.rules >include $RULE_PATH/rservices.rules >include $RULE_PATH/dos.rules >include $RULE_PATH/ddos.rules >include $RULE_PATH/dns.rules >include $RULE_PATH/tftp.rules >include $RULE_PATH/web-cgi.rules >include $RULE_PATH/web-coldfusion.rules >include $RULE_PATH/web-iis.rules >include $RULE_PATH/web-frontpage.rules >include $RULE_PATH/web-misc.rules >include $RULE_PATH/web-attacks.rules >include $RULE_PATH/sql.rules >include $RULE_PATH/x11.rules >include $RULE_PATH/icmp.rules >include $RULE_PATH/netbios.rules >include $RULE_PATH/misc.rules >include $RULE_PATH/attack-responses.rules >include $RULE_PATH/backdoor.rules >include $RULE_PATH/shellcode.rules >include $RULE_PATH/policy.rules >include $RULE_PATH/porn.rules >include $RULE_PATH/info.rules >include $RULE_PATH/icmp-info.rules >include $RULE_PATH/virus.rules ># include $RULE_PATH/experimental.rules >include $RULE_PATH/local.rules ></pre> > ><pre caption="/etc/snort/classification.config"> >config classification: not-suspicious,Not Suspicious Traffic,3 >config classification: unknown,Unknown Traffic,3 >config classification: bad-unknown,Potentially Bad Traffic, 2 >config classification: attempted-recon,Attempted Information Leak,2 >config classification: successful-recon-limited,Information Leak,2 >config classification: successful-recon-largescale,Large Scale Information Leak,2 >config classification: attempted-dos,Attempted Denial of Service,2 >config classification: successful-dos,Denial of Service,2 >config classification: attempted-user,Attempted User Privilege Gain,1 >config classification: unsuccessful-user,Unsuccessful User Privilege Gain,1 >config classification: successful-user,Successful User Privilege Gain,1 >config classification: attempted-admin,Attempted Administrator Privilege Gain,1 >config classification: successful-admin,Successful Administrator Privilege Gain,1 > ># NEW CLASSIFICATIONS >config classification: rpc-portmap-decode,Decode of an RPC Query,2 >config classification: shellcode-detect,Executable code was detected,1 >config classification: string-detect,A suspicious string was detected,3 >config classification: suspicious-filename-detect,A suspicious filename was detected,2 >config classification: suspicious-login,An attempted login using a suspicious username was detected,2 >config classification: system-call-detect,A system call was detected,2 >config classification: tcp-connection,A TCP connection was detected,4 >config classification: trojan-activity,A Network Trojan was detected, 1 >config classification: unusual-client-port-connection,A client was using an unusual port,2 >config classification: network-scan,Detection of a Network Scan,3 >config classification: denial-of-service,Detection of a Denial of Service Attack,2 >config classification: non-standard-protocol,Detection of a non-standard protocol or event,2 >config classification: protocol-command-decode,Generic Protocol Command Decode,3 >config classification: web-application-activity,access to a potentially vulnerable web application,2 >config classification: web-application-attack,Web Application Attack,1 >config classification: misc-activity,Misc activity,3 >config classification: misc-attack,Misc Attack,2 >config classification: icmp-event,Generic ICMP event,3 >config classification: kickass-porn,SCORE! Get the lotion!,1 ></pre> > ><p> >Informasi lebih lanjut bisa didapatkan pada website <uri link="http://www.snort.org">Snort</uri>. ></p> > ></body> ></section> > ></chapter> ></guide>
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 27387
:
27073
|
27140
|
27142
|
27145