Saya sama sekali masih awam tentang bagaimana membuat web server yang aman, ini hanya merupakan pengalaman yang pernah di praktek-kan berdasarkan trial-error. Membaca berulang2 pendapat serta postingan para master security untuk kemudian di jadikan sebagai referensi.
Di sini tidak akan dibahas tentang OS Freebsd itu sendiri, karena sebelumnya sudah pernah dibahas disini .
Saya akan coba langsung lompat ke level aplikasinya.
Keindahan Freebsd salah satunya adalah fasilitas management portnya, karena sudah terbiasa-kan dengan penggunaan port maka pembahasan instalasi aplikasi di sini tidak melalui tarball
Apache
# cd /usr/ports/www/apache*
silahkan pilih sendiri versi apachenya, muat module-module yang hanya diperlukan saja
# make config ( versi 2.2 saja )
# make install && make clean
edit httpd.conf
ServerTokens dan ServerSignature = Off
Matikan service yg tidak dibutuhkan
DirectoryBrowsing di set ke : -Indexing
Server Side Includes : -Includes
Symbolic Links : -FollowSymLinks
CGI Execution : -ExecCGI ( jika tidak pakai cgi )
Matikan module LoadModule userdir_module dengan # jikasudah terlanjur di load, karena akan menjadi target sasaran buat enumeration, misal : http://www.xxxxxxx.ac.id/~arif/ atau http://www.xxxxxxx.ac.id/~root/
pakai mode Suexec untuk vhost
PHP
# cd /usr/ports/lang/php5
# make config ( pastikan opsi Apache - Build Apache Module di centang )
edit php.ini
safe_mode = On
expose_php = Off
magic_quotes = On
register_globals = off
display errors = off
disable_functions = show_source, system, proc_terminate,
shell_exec, exec, passthru, proc_open, phpinfo, popen
Jika dalam 1 mesin memiliki banyak domain/sub-domain dan ada beberapa yang harus "di baut " lebih keras karena alasan keamanan, kita bisa gunakan metode suhosin dengan catatan php-nya sudah di support. Matikan (#) disable_functions, dari semua fungsi-fungsi yg ada dibawah pilah2 semua dengan kebutuhan anda.
(VirtualHost _default_:443)
ServerAlias www.xxxxx.com
ServerAdmin webmaster@xxxxx.com
DocumentRoot /var/www/html1
php_admin_value suhosin.executor.func.blacklist "passthru, show_source, shell_exec, system, pcntl_exec, popen, pclose, proc_open, proc_nice, proc_terminate, proc_get_status, proc_close, leak, apache_child_terminate, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, escapeshellcmd, escapeshellarg"
(/VirtualHost)
catatan : ( .. ) = < ... >, karena blogspot tidak bisa menerima tag < .. > untuk ditampilkan, teman blogger ada yang bisa kasih solusi ?
Phpsecinfo
# cd /usr/ports/security/phpsecinfo
# make install clean
# mv /usr/local/www/phpsecinfo to DocumenRoot
Fungsinya adalah untuk mengecek apakah settingan php.ini sudah sesuai dengan standard keamanan dari PHP. Warna Merah merupakan risiko tertinggi dan Hijau yang terendah.
Mod_security
# cd /usr/ports/www/mod_security21
# make install clean
install mod_security untuk mengurangi ketololan programmer. Sangat berguna untuk mengurangi resiko directory transversal, SQL injection, XSS, Remote code execution, Command Injection. Ketika ditemui pola URL yang aneh, mod_security bisa memberikan respons HTTP error ke client misal HTTP 404/500/403.
edit httpd.conf
LoadFile /usr/local/lib/libxml2.so
LoadModule security2_module libexec/apachexx/mod_security2.so
modsec akan membaca configurasi yg terletak di /usr/local/etc/apachexx/Includes/mod_security2
remove semua *.conf ke direktori khusus kecuali modsecurity_crs_10_config.conf
edit modsecurity_crs_10_config.conf
SecRuleEngine On
opsi DetectionOnly modsec hanya akan mencatat log setiap serangan tapi tidak akan men-denied, sedangkan opsi On akan mencatat sekaligus men-denied jika pola serangan cocok dengan pola rule-rule yang ada.
Tambah Rule
--------------
Perlu diperhatikan apa saja yg sudah di pasang di web server anda, misal phpnuke carilah rule2 yang berkaitan dengan phpnuke tersebut, download sesuai dengan versi mod_sec itu sendiri misal 2.0-2.1 ( linux/unix ) download rule disini
Dikarenakan panjangnya rule yang ada, silahkan anda ekstrak rule tersebut, untuk pola rule injection banyak terdapat pada rules.conf dan jitp.conf. Kemudian copy-paste ke modsecurity_crs_10_config.conf
Dari catatan log mod_sec yg selama ini saya perhatikan, paling banyak adalah log sql injection, , blind sql injection, xss-injection, php generic injection dan command injection
Biar si penyusup mendapat peringatan, kasih ini :
edit httpd.conf
ErrorDocument 400 http://politicalhumor.about.com/library/images/blbushchimpanzee.htm
ErrorDocument 403 http://politicalhumor.about.com/library/images/blbushchimpanzee.htm
ErrorDocument 501 http://politicalhumor.about.com/library/images/blbushchimpanzee.htm
hehehe .....
edit modsecurity_crs_10_config.conf
# ===================== SQL SECTION ================= #
# Blind SQL injection
SecRule REQUEST_FILENAME|ARGS|ARGS_NAMES "(?:\b(?:(?:s(?:ys\.(?:user_(?:(?:t(?:ab(?:_column|le)|rigger)|object|view)s|c(?:onstraints|atalog))|all_tables|tab)|elect\b.{0,40}\b(?:substring|ascii|user))|m(?:sys(?:(?:queri|ac)e|relationship|column|object)s|ysql\.user)|c(?:onstraint_type|harindex)|waitfor\b\W*?\bdelay|attnotnull)\b|(?:locate|instr)\W+\()|\@\@spid\b)" \
"capture,t:htmlEntityDecode,t:lowercase,t:replaceComments,ctl:auditLogParts=+E,log,auditlog,msg:'Blind SQL Injection
SecRule REQUEST_HEADERS|XML:/*|!REQUEST_HEADERS:Referer "(?:\b(?:(?:s(?:ys\.(?:user_(?:(?:t(?:ab(?:_column|le)|rigger)|object|view)s|c(?:onstraints|atalog))|all_tables|tab)|elect\b.{0,40}\b(?:substring|ascii|user))|m(?:sys(?:(?:queri|ac)e|relationship|column|object)s|ysql\.user)|c(?:onstraint_type|harindex)|waitfor\b\W*?\bdelay|attnotnull)\b|(?:locate|instr)\W+\()|\@\@spid\b)" \
"capture,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase,t:replaceComments,ctl:auditLogParts=+E,log,auditlog,msg:'Blind SQL Injection Attack. Matched signature <%{TX.0}>',id:'950007',severity:'2'"
Panjang sekali yah ? gak muat di sini , cukup 2 rule saja yg ditampilkan dari sekitar > 100an rule yg saya pasang.
Mod_evasive
# cd /usr/ports/www/mod_evasive
# make install clean
mod_evasive dulu dikenal sebagai mod_dosevasive adalah apache modul yang berfungsi sebagai pencegah HTTP DoS atau DDoS (Denial of Service) attack atau lazimnya brute force attack pada web server.
edit httpd.conf
LoadModule evasive20_module libexec/apache2/mod_evasive20.so
DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 30
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 6000 <-- deny IP dlm second jika tertangkap basah DOSEmailNotify arif@xxxxxxxxx.ac.id DOSLogDir "/var/log/blacklist"
touch /var/log/blacklist
Rootkit Hunter
berguna untuk mengecek jika ada rootkits, backdoors serta local exploits
# cd /usr/ports/security/rkhunter
# make install clean
update :
rkhunter --update
scanning :
rkhunter -c
Chkrootkit
# cd /usr/ports/security/chkrootkit
# make install clean
# rehash
black# chkrootkit
ROOTDIR is `/'
Checking `amd'... not infected
Checking `basename'... not infected
Checking `biff'... not infected
Checking `chfn'... not infected
Checking `chsh'... not infected
Checking `cron'... not infected
Checking `crontab'... not infected
Checking `date'... not infected
dstnya ..
perhatikan jika ada kata Infected !!!
Logcheck
# cd /usr/port/security/logcheck
# make install clean
detilnya lihat disini
Firewall
Di sini saya menggunakan PF sebagai pageran ( jawa )
ok langsung saja
# ee /etc/pf.conf
int_if ="xl0"
table (bruteforce) persist
set loginterface $int_if
scrub in all
antispoof quick for { lo $int_if }
set skip on lo
block quick from (bruteforce)
block log all ( blok semua port yg tidak diperlukan, hanya 80,443 saja yg aktif )
pass out on $int_if proto { tcp, udp } all keep state
pass out on $int_if proto icmp all
pass in on $int_if proto { tcp, udp } from any to $int_if port 80 flags S/SA keep state (max-src-conn 50, max-src-conn-rate 15/5, overload flush global)
pass in on $int_if proto { tcp, udp } from any to $int_if port 443 flags S/SA keep state (max-src-conn 50, max-src-conn-rate 15/5, overload flush global)
pass in log on $int_if proto icmp from any to $int_if
maksud angka 50 diatas adalah akses dari 1 host secara simultan yg di perbolehkan, sementara 15/5 artinya hanya di ijinkan 15 hit web maksimal dalam 5 detik.
CMIIW dan mohon masukkannya dari anda jika ada tambahan, kurang lebihnya mohon dimaklumi, dikarenakan pengetahuan saya yg masih terbatas ini.
Rgds
Referensi :
http://www.jasakom.com/forum/viewtopic.php?f=129&t=696
http://www.cyberciti.biz/faq/freebsd-install-configure-mod_security/
http://mild-info.com/2008/12/best-server-security-configuration.php
http://blogs.techrepublic.com.com/10things/?p=477
[get this widget]