instalasi php dan apache di linux 64 bit
Jika mengalami error ketika mencoba compile apache dan php di linux 64 bit cobalah untuk menambah opsi yang secara spesifik menyatakan 64 bit di baris configure.
Untuk apache tambahkan
--enable-lib64 --libdir=/usr/lib64 Untuk php tambahkan --with-libdir=lib64 --libdir=/usr/lib64 perlu dicatat bahwa lokasi php.ini akan berada di /usr/lib64
melindungi ssh dan apache dari serangan DOS dengan fail2ban
1. pada debian instalasi fail2ban yang paling cepat dan mudah adalah dengan
$ apt-get install fail2ban
jika ingin mengkompilasi sendiri downlod source dari website fail2ban.
2. semua file konfigurasi fail2ban ada di folder /etc/fail2ban. file utama yang mengatur bagaimana fail2ban bekerja secara default ada di file /etc/fail2ban/jail.conf . sebaiknya file tersebut tidak diubah. untuk mengabaikan seting default dan mengatur fail2ban agar sesuai dengan kebutuhan kita, dapat dibuat file /etc/fail2ban/jail.local . fail2ban akan mengutamakan seting yang ada di file jail.local daripada jail.conf .
dalam tulisan ini yang akan dilindungi dari serangan denial of service (DOS) adalah ssh dan apache, untuk itu konfiurasi jail.local adalah sebagai berikut :
$ vi /etc/fail2ban/jail.local
tulis baris-baris berikut :
[DEFAULT]
#ignoreip adalah ip yang tak akan diblokir. misalnya localhost & ip kita sendiri.
#jika lebih dari satu maka masing-masing ip dipisahkan dengan spasi
ignoreip = 127.0.0.1 172.16.9.1
bantime = 86400
maxretry = 5
backend = polling
destemail = root@localhost
action = iptables[name=%(__name__)s, port=%(port)s]
# JAILS
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
[http-get-dos]
enabled = true
port = http
filter = http-get-dos
logpath = /var/log/apache/access.log
maxretry = 300
findtime = 300
simpan dan keluar dari editor vi. namun sebelumnya, pastikan bahwa logpath sesuai dengan log ssh dan apache yang ada di komputer kita. log ssh pada redhat biasanya /var/log/secure . selanjutnya :
$ vi /etc/fail2ban/filter.d/http-get-dos.conf
tuliskan baris-baris berikut :
[Definition]
failregex = ^<HOST> - - \[.*\] “GET
ignoreregex =
simpan lalu keluar dari editor vi. dengan konfigurasi seperti diatas, untuk melindungi ssh fail2ban akan memblokir ip yang gagal login lebih dari 5 kali dalam satu sesi. untuk melindungi apache fail2ban akan memblokir ip yang melakukan GET sebanyak lebih dari 300 kali dalam 300 detik. aktivitas fail2ban dapat kita monitor dari log file di /var/log/fail2ban.log . untuk melihat rules iptables yang dibuat oleh fail2ban gunakan perintah
$ iptables -L
fail2ban dapat melindungi server dari serangan DOS namun kelemahan fail2ban adalah tidak dapat melindungi dari serangan distributed denial of service (DDOS). sebagai tambahan info, failregex untuk http-get-dos.conf diatas hanya akan berhasil jika format access.log adalah sebagai berikut :
xxx.xxx.xxx.xxx - - [23/Aug/2011:13:52:54 +0700] “GET …… dan seterusnya…..
untuk memastikan bahwa format access.log sesuai dengan failregex lakukan sebagai berikut :
$ tail -n 100 /var/log/apache/access.log > cuil.txt
$ fail2ban-regex /var/log/apache2/log23aug11-100baris /etc/fail2ban/filter.d/http-get-dos.conf
jika sesuai hasilnya kurang lebih sebagai berikut :
…
…
Date template hits:
0 hit(s): Month Day Hour:Minute:Second
0 hit(s): Weekday Month Day Hour:Minute:Second Year
0 hit(s): Weekday Month Day Hour:Minute:Second
0 hit(s): Year/Month/Day Hour:Minute:Second
0 hit(s): Day/Month/Year Hour:Minute:Second
200 hit(s): Day/Month/Year:Hour:Minute:Second
0 hit(s): Year-Month-Day Hour:Minute:Second
0 hit(s): Day-Month-Year Hour:Minute:Second[.Millisecond]
0 hit(s): TAI64N
0 hit(s): Epoch
0 hit(s): ISO 8601
Success, the total number of match is 100
However, look at the above section ‘Running tests’ which could contain important
information.
fail2ban dapat diaktifkan atau dinonaktifkan dengan perintah start atau stop, misalnya:
$ /etc/init.d/fail2ban stop
folder tmp di linux penuh 100% tapi tak ada filenya
Baru-baru ini saya mengalami hal yang aneh di linux. jika dilihat dengan :
$ df -h
terlihat bahwa pemakaian folder /tmp mencapai 100%
padahal jika masuk ke dalam folder tersebut, file nya tidak banyak. cuma ada 2 folder. jika dilihat dengan :
$ du -sch /tmp
ukurannya tidak sampai 1 Mb. Tapi kok pemakaian 100%. Tidak logis. Hasil pencarian di google menginformasikan bahwa kondisi tersebut bisa terjadi karena ada proses yang pernah menulis dan menghapus file di folder tersebut, namun inode-nya masih terkunci karena proses tersebut masih aktif. sehingga linux menganggap bahwa file masih menggunakan space hardisk. solusinya adalah dengan membunuh (kill) proses tersebut atau restart komputer.
setelah saya restart, ternyata pemakaian tidak 100% lagi. namun karena masih penasaran proses apa yang menjadi biangnya, saya pun bertanya lagi pada mbah google. si mbah bilang, kalo mau tau biangnya gunakan :
$ lsof | grep /tmp
benar saja. ternyata biangnya adalah modsecurity pada apache. terima kasih mbah google.
instalasi web server di linux
Tutorial ini menggunakan sistem operasi linux fedora core 12 dan versi terbaru dari apache: httpd-2.2.15.tar.bz2, php: php-5.3.2.tar.bz2, modsecurity: modsecurity-apache_2.5.12.tar.gz, modsecurity core rules: modsecurity-crs_2.0.6.tar.gz . Jika akan melakukan instalasi di linux 64 bit tolong lihat sejenak disini.
instalasi apache:
hapus apache bawaan fedora core 12
$ rpm -qa |grep httpd
httpd-tools-2.2.13-4.fc12.i686
httpd-2.2.13-4.fc12.i686
$ rpm -e gnome-user-share httpd httpd-tools
download apache terbaru
$ wget http://apache.the.net.id/httpd/httpd-2.2.15.tar.bz2
$ tar xjfv httpd-2.2.15.tar.bz2
$ cd httpd-2.2.15
Untuk menyamarkan web server yang dipakai (security in obscurity):
$ cd httpd-2.2.15/include
$ vi ap_release.h
#define AP_SERVER_BASEVENDOR “Apache Software Foundation” -> #define AP_SERVER_BASEVENDOR “software inc.”
#define AP_SERVER_BASEPRODUCT “Apache” -> #define AP_SERVER_BASEPRODUCT “webserv”
save and exit vi dengan perintah :wq
$ cd ..
$ ./configure –-prefix=/usr/local/apache2 –enable-so –enable-ssl –with-ldap –enable-ldap –enable-auth-ldap –disable-info –disable-status –disable-autoindex –disable-imap –disable-include –disable-userdir –enable-rewrite –enable-unique-id
$ make
$ make install
$ cat /etc/passwd |grep apache
jika ditemukan apache:
$vi /usr/local/apache2/conf/httpd.conf
ganti User dan Group daemon menjadi:
User apache
Group apache
save and exit vi
instalasi modsecurity:
$ wget http://nchc.dl.sourceforge.net/project/mod-security/modsecurity-apache/2.5.12/modsecurity-apache_2.5.12.tar.gz
$ tar xzfv modsecurity-apache_2.5.12.tar.gz
$ cd modsecurity-apache_2.5.12/apache2
$ ./configure –with-apxs=/usr/local/apache2/bin/apxs
terjadi error sebagai berikut :
…
…
configure: looking for Apache module support via DSO through APXS
configure: found apxs at /usr/local/apache2/bin/apxs
configure: checking httpd version
configure: httpd is recent enough
checking for libpcre config script… no
configure: *** pcre library not found.
configure: error: pcre library is required
$ wget ftp://fr2.rpmfind.net/linux/fedora/releases/12/Everything/i386/os/Packages/pcre-devel-7.8-3.fc12.i686.rpm
$ rpm -ivh pcre-devel-7.8-3.fc12.i686.rpm
$ ./configure –with-apxs=/usr/local/apache2/bin/apxs
terjadi error lagi sebagai berikut :
…
…
configure: using ‘-lpcre’ for pcre Library
checking for libapr config script… no
configure: *** apr library not found.
configure: error: apr library is required
$ ./configure –with-apxs=/usr/local/apache2/bin/apxs –with-apr=/usr/local/apache2/bin/apr-1-config –with-apu=/usr/local/apache2/bin/apu-1-config
$ make
$ make install
$ vi httpd.conf
tambahkan baris-baris berikut :
LoadFile /usr/lib/libxml2.so
LoadFile /usr/lib/liblua-5.1.so
LoadModule security2_module modules/mod_security2.so
save and exit vi
instalasi modsecurity core rules :
$ cd /usr/local/apache2
$ wget http://nchc.dl.sourceforge.net/project/mod-security/modsecurity-crs/0-CURRENT/modsecurity-crs_2.0.6.tar.gz
$ tar xzfv modsecurity-crs_2.0.6.tar.gz
$ mv modsecurity-crs_2.0.6 modsecurity-crs
$ vi httpd.conf
tambahkan baris-baris berikut :
Include conf/modsecurity-crs/*.conf
Include conf/modsecurity-crs/base_rules/*.conf
save and exit vi
membuat startup script untuk apache :
$ vi /etc/rc.d/init.d/httpd2
tambahkan baris-baris berikut :
#!/bin/sh
#
# Startup script for the Apache Web Server
# chkconfig: 345 85 15
# description: Apache is a World Wide Web server. It is used to serve \
# HTML files and CGI.
# processname: httpd
# pidfile: /var/run/httpd.pid
# config: /usr/local/apache2/conf/access.conf
# config: /usr/local/apache2/conf/httpd.conf
# config: /usr/local/apache2/conf/srm.conf
# Source function library.
. /etc/rc.d/init.d/functions
case “$1″ in
’start’)
/usr/local/apache2/bin/apachectl start
;;
’stop’)
/usr/local/apache2/bin/apachectl stop
;;
‘restart’)
/usr/local/apache2/bin/apachectl restart
;;
*)
echo “Usage: $0 {start|stop|restart}”
exit 1
esac
exit 0
save and exit vi
$ chkconfig –add httpd2
$ service httpd2 start
httpd: Syntax error on line 55 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/lib/liblua5.1.s into server: /usr/lib/liblua5.1.s: cannot open shared object file: No such file or directory
$ wget ftp://fr2.rpmfind.net/linux/fedora/releases/12/Everything/i386/os/Packages/lua-devel-5.1.4-4.fc12.i686.rpm
$ rpm -Uvh lua-devel-5.1.4-4.fc12.i686.rpm
$ service httpd2 start
instalasi PHP :
$ wget http://id.php.net/distributions/php-5.3.2.tar.bz2
$ tar xjfv php-5.3.2.tar.bz2
$ cd php-5.3.2
$ ./configure –with-apxs2=/usr/local/apache2/bin/apxs –enable-magic-quotes –with-openssl –with-zlib –with-bz2 –enable-ftp –with-gd –enable-mbstring –with-freetype-dir –with-jpeg-dir
terjadi error sebagai berikut :
….
checking for fabsf… yes
checking for floorf… yes
configure: error: libjpeg.(a|so) not found.
insert fedora DVD and mount
$ cd /mnt/Packages
$ ls *jpeg*
$ rpm -Uvh libjpeg-6b-46.fc12.i686.rpm libjpeg-devel-6b-46.fc12.i686.rpm
lakukan configure lagi
$ make
$ make test
$ make install
$ cp php.ini-development /usr/local/lib/php.ini
$ vi /usr/local/lib/php.ini
sesuaikan beberapa opsi sebagai berikut :
expose_php = Off
display_erros = Off
short_open_tag = On
date.timezone = Asia/Jakarta
save and exit vi
$ mkdir /var/log/httpd
$ vi /usr/local/apache2/conf/httpd.conf
tambahkan baris-baris berikut :
LoadModule php5_module modules/libphp5.so
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
ErrorLog “/var/log/httpd/error_log”
CustomLog “/var/log/httpd/access_log” combined
DirectoryIndex index.php index.html
save and exit vi
$ service apache2 restart
$ cd /usr/local/apache2/conf/modsecurity-crs/base_rules
$ vi modsecurity_crs_50_outbound.conf
untuk menampilkan nomor baris pada vi berikan perintah :set number lalu cari baris 85 seperti berikut:
SecRule RESPONSE_BODY “!@pmFromFile modsecurity_50_outbound.data” \
“phase:4,rev:’2.0.6′,t:none,capture,t:urlDecodeUni,t:htmlEntityDecode,nolog,skipAfter:END_OUTBOUND_CHECK”
lalu edit menjadi :
SecRule RESPONSE_BODY “!@pmFromFile modsecurity_50_outbound.data” \
“phase:4,rev:’2.0.6′,t:none,capture,t:urlDecodeUni,t:htmlEntityDecode,pass,nolog,skipAfter:END_OUTBOUND_CHECK”
save and exit vi
$ cd /usr/local/apache2/conf/modsecurity-crs/
$ vi modsecurity_crs_10_config.conf
SecDefaultAction “phase:2,deny”
SecRuleEngine On
SecAuditEngine RelevantOnly
SecUploadDir /var/log/modsecurity/SecUploadDir
SecAuditLog /var/log/modsecurity/modsec_audit.log
SecAuditLogParts ABIFHZ
SecAuditLogStorageDir /var/log/modsecurity/SecAuditLogStorageDir
SecDebugLog /var/log/modsecurity/modsec_debug.log
SecDataDir /var/log/modsecurity/SecDataDir
SecTmpDir /var/log/modsecurity/SecTmpDir
SecDebugLogLevel 3
save and exit vi
$ mkdir /var/log/modsecurity
$ mkdir /var/log/modsecurity/SecTmpDir
$ mkdir /var/log/modsecurity/SecDataDir
$ mkdir /var/log/modsecurity/SecUploadDir
$ chown -R apache.apache /var/log/modsecurity
$ service apache2 restart
test instalasi dengan :
$ vi ls /usr/local/apache2/htdocs/test.php
<?php
echo “testing”;
?>
save and exit vi
dari browser panggil http://192.168.5.18/test.php. jika instalasi berhasil maka akan muncul testing
Firefox Indonesia 501 (Not Implemented) akses ke apache+modsecurity
Seorang bernama Romi Hardiyanto yang mengaku sebagai anggota pelokalan Mozilla Firefox Bahasa Indonesia mengirimkan email yang memberitahukan bahwa web server kami menjawab 501 (Not Implemented) jika diakses dari Firefox Bahasa Indonesia. Menurut beliau ada yang harus dihapus sedikit pada rules modsecurity. Lakukan back up sebelum melakukan perubahan.
Rules yang dimaksud adalah nomer 950006 pada file modsecurity_crs_40_generic_attacks.conf sebagai berikut:
# Command injection
SecRule ARGS|ARGS_NAMES|REQUEST_HEADERS|XML:/*|!REQUEST_HEADERS:’/(Cookie|Referer|X-OS-Prefs)/’|REQUEST_COOKIES|REQUEST_COOKIES_NAMES “(?:\b(?:(?:n(?:et(?:\b\W+?\blocalgroup|\.exe)|(?:map|c)\.exe)|t(?:racer(?:oute|t)|elnet\.exe|clsh8?|ftp)|(?:w(?:guest|sh)|rcmd|ftp)\.exe|echo\b\W*?\by+)\b|c(?:md(?:(?:32)?\.exe\b|\b\W*?\/c)|d(?:\b\W*?[\\\/]|\W*?\.\.)|hmod.{0,40}?\+.{0,3}x))|[\;\|\`]\W*?\b(?:(?:c(?:h(?:grp|mod|own|sh)|md|pp|c)|p(?:asswd|ython|erl|ing|s)|n(?:asm|map|c)|f(?:inger|tp)|(?:kil|mai)l|(?:xte)?rm|ls(?:of)?|telnet|uname|echo|id)\b|g(?:\+\+|cc\b))|\/(?:c(?:h(?:grp|mod|own|sh)|pp|c)|p(?:asswd|ython|erl|ing|s)|n(?:asm|map|c)|f(?:inger|tp)|(?:kil|mai)l|g(?:\+\+|cc)|(?:xte)?rm|ls(?:of)?|telnet|uname|echo|id)(?:[\'\"\|\;\`\-\s]|$))” \
“capture,ctl:auditLogParts=+E,deny,log,auditlog,status:501,msg:’System Command Injection. Matched signature <%{TX.0}>’,,id:’950006′,severity:’2′”
Ada 2 bagian yang harus dihapus, yang saya beri cetak tebal dan dicoret (|id) sehingga menjadi :
# Command injection
SecRule ARGS|ARGS_NAMES|REQUEST_HEADERS|XML:/*|!REQUEST_HEADERS:’/(Cookie|Referer|X-OS-Prefs)/’|REQUEST_COOKIES|REQUEST_COOKIES_NAMES “(?:\b(?:(?:n(?:et(?:\b\W+?\blocalgroup|\.exe)|(?:map|c)\.exe)|t(?:racer(?:oute|t)|elnet\.exe|clsh8?|ftp)|(?:w(?:guest|sh)|rcmd|ftp)\.exe|echo\b\W*?\by+)\b|c(?:md(?:(?:32)?\.exe\b|\b\W*?\/c)|d(?:\b\W*?[\\\/]|\W*?\.\.)|hmod.{0,40}?\+.{0,3}x))|[\;\|\`]\W*?\b(?:(?:c(?:h(?:grp|mod|own|sh)|md|pp|c)|p(?:asswd|ython|erl|ing|s)|n(?:asm|map|c)|f(?:inger|tp)|(?:kil|mai)l|(?:xte)?rm|ls(?:of)?|telnet|uname|echo)\b|g(?:\+\+|cc\b))|\/(?:c(?:h(?:grp|mod|own|sh)|pp|c)|p(?:asswd|ython|erl|ing|s)|n(?:asm|map|c)|f(?:inger|tp)|(?:kil|mai)l|g(?:\+\+|cc)|(?:xte)?rm|ls(?:of)?|telnet|uname|echo)(?:[\'\"\|\;\`\-\s]|$))” \
“capture,ctl:auditLogParts=+E,deny,log,auditlog,status:501,msg:’System Command Injection. Matched signature <%{TX.0}>’,,id:’950006′,severity:’2′”
Simpan perubahan tersebut dan restart apache. Terima kasih mas Romi.







