membangun firewall dengan PF (packet Filtering) di FREEBSD 6.0

February 3rd, 2007 by cipitunk

akhirnya setelah lama berjuang melawan kemalasan menulis blog, akhirnya gw tulis aja ini sedikit tutorial mengenai bagaimana cara membangun firewall menggunakan PF. PF merupakan firewall bawaan dari openBSD, namun sudah di porting ke FreeBSD. sintaksnya gampang, mudah untuk dipahami. dari pengalaman saya, ternyata PF lebih gampang ketimbang ipfw, (walaupun pada awalnnya saya merasa agak sukar menggunakan PF untuk pertama kalinya). tanpa basa basi langsung aja ke tutorialnya.

langkah pertama kali yang saya lakukan adalah melakukan kompile kernel. sebenarnya tanpa kompile kernel freebsd pun bisa, namun saya prefer untuk melakuukan kompile kernel. berikut ini adalah langkah kompile kernel :

  • cd /usr/src/sys/i364/conf
  • cp GENERIC firewall
  • ee firewall (di file tersebut terdapat banyak sekali modul modul kernel yang di load oleh mesin Freebsd. )
  • tambahkan baris berikut ini :
    • device pf
    • device pflog
    • device pfsync
    • options ALTQ
    • options ALTQ_RED
    • options ALTQ_CBQ
    • options ALTQ_RIO
    • options ALTQ_HFSC
    • options ALTQ_PRIQ
    • options ALTQ_NOPCC
  • abis itu save, dan kompile kernel kamu, caranya :
    • config firewall
    • cd ../compile/firewall
    • make cleandepend; make depend
    • make; make install
  • kalo ga ada error waktu kompile kernel, berarti semuanya berjalan normal.
  • trus tambahin  baris berikut di file /etc/rc.conf :
    • pf_enable="YES"
    • pf_rules="/etc/pf.conf"
    • pf_flags=""
    • pflog_enable="YES"
    • pflog_logfile="/var/log/pflog"
  • reboot komputermuuuu

setelah selesai langkah diatas, lalu buat file konfigurasi firewalll nya di file /etc/pf.conf. konfigurasinya adalah sebagai berikut :

if = "xl0" ###(interface pada mesin freebsd. di  linux  dikenali  sebagai  eth0)
dns="10.14.203.7" ###(ip address untuk dns server)

no_route="{192.168.0.0/16, 127.0.0.0/8, 0.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, 204.152.64.0/23, 224.0.0.0/3}"

netbios_sharing="{137,138,139,445,81}"
ob_state="flags S/SA keep state" ###paket yang keluar dari mesin FreeBSD
ib_state="flags S/SA keep state" ###paket yang masuk ke mesin FreeBSD

set block-policy drop ## rule status awal dari rule firewall adalah di drop untuk semua paket yang masuk maupun yang keluar.
set state-policy if-bound

set loginterface $if  #buat ngambil statistik pada interface xl0
set fingerprints "/etc/pf.os"

antispoof for $if

pass in quick on lo0 all 

#ijinkan akses keluar untuk dns server
pass out quick on $if proto tcp from any to any port 53 $ob_state
pass out quick on $if proto udp from any to any port 53 keep state

#ijinkan akses keluar untuk http https dan ssh juga ftp
pass out quick on $if proto tcp from any to any port 22 $ob_state
pass out quick on $if proto tcp from any to any port 80 $ob_state
pass out quick on $if proto tcp from any to any port 443 $ob_state
pass out quick on $if proto tcp from any to any port 21 $ob_state

#ijinkan keluar ping
pass out quick on $if inet proto icmp from any to any icmp-type 8 keep state

block out log on $if  #### selain rule yang diatas akan diblok oleh firewall

block in quick on $if from $no_route to any
##block inbound ping ke mesin freebsd
block in quick on $if inet proto icmp all icmp-type 8
block in quick on $If proto tcp from any to any port $netbios_sharing
block in log quick on $if inet proto all flags FUP/FUP
block in log quick on $if inet proto all flags SF/SFRA
block in log quick on $if inet proto all flags /SFRA

#ijinkan paket masuk ke web sever dan ssh server
pass in quick on $if proto tcp from any to any port 22 $in_state
pass in quick on $if proto tcp from any to any port 80 $in_state
pass in quick on $if proto tcp from any to any port 443 $in_state

block in log quick on $if all

cara menjalankan nya adalah sebagai berikut ini.

  • pfctl -F all (menghapus rule pf )
  • pfctl -f /etc/pf.conf (me load rule pf. biasanya kalo udah di tulis di /etc/rc.conf, maka akan otomatis di load saat booting)
  • untuk melihat statistik dari rule, pake ‘pfctl -s info’

firewall diatas masih sangat sederhana.
mungkin cukup segitu dulu tutorialnya dari sayyaaa. edisi mendatang akan di bahas lebih dalam bagaimana cara bandwith management dengan PF.

semoga dapat bermanfaat bagi teman teman semua. terimakasih dah mo baca tutorial ga berguna ini.

salam………………….

Mencegah Web Deface dengan Mod Security (khusus APACHE SERVER)

November 21st, 2006 by cipitunk

dua-tiga hari kemaren ada temen gw yg nanyain ‘eh ip 10.14.x.x, siapa sih tu. anak tele apa bukan?’. gw trus bertanya tanya, ada apa dengan ip address itu tadi? dia jawab, ‘kmaren itu ada yg nginputin ga jelas gitu ke web XXX (web LAB ………….. adaa deh ) ‘.ada lagi yang lebih parah, kmaren gw surfing surfing intranet, ngeliat web salah satu lab PPDU kena deface lagi, hal itu malah lebih parah lagi.Mengapa hal itu bisa terjadi? Menurut pendapat gw, web deface tuh berasal dari pengamanan aplikasi web server yang kurang. contohnya, inputan-inputan di web server itu tidak di filter, dari kasus kasus diatas, aplikasi web server mereka mengijinkan inputan bahasa html, javascript, php, (xss -> cross site scripting). Mungkin mereka semua merasa bahwa interface web tuh lebih penting ketimbang security dari aplikasi web tersebut. Oke, sekarang ambil contoh ada suatu web, dimana dia munya inputan buat buku tamu, dalam inputan tersebut, terdapat inputan nama dan salam. trus gw coba nginputin nama tadi dengan inputan sebagai berikut:

COBA DULU

dan inputan salam gw inputin dengan inputan sebagai berikut : alert(”XSS”);. apa yang akan terjadi jika di web tadi tidak di filter inputan inputan seperti diatas? maka yang akan terjadi adalah, web tersebut akan mengeksekusi bahasa html tadi. tampilannya akan berubah. apa yang akan terjadi jika attacker mencoba menginputkan image/gambar di web tersebut? pasti malu lah admin mereka………………………

untuk mencegah serangan web deface seperti diattas, ada cara gampang dan cara susah. cara susahnya adalah, bagi yang suka coding, mereka harus membuat filter-filter inputan untuk menangkal inputan, inputan diatas. bagi yang cara gampang, alias bagi yang enggak suka coding, cukup dengan pake mod security (gw biasa sebut mod_sec). Apa itu mod_sec?, mod_sec berdasarkan arti resmi dari penciptanya adalah “ModSecurity is an embeddable web application firewall. It provides protection from a range of attacks against web applications and allows for HTTP traffic monitoring and real-time analysis with no changes to existing infrastructure. It is also an open source project that aims to make the web application firewall technology available to everyone”. silakan anda mengartikan sendiri.menurut gw mod_sec adalah IDS khusus bwat APACHE. secara default mod_sec, bukan merupakan modul bawaan dari APACHE. jadi kita harus meninstall mod_sec agar dapat menambahkannya menjadi modul APACHE. cara installnya adalah sebagai berikut :
1. dapetin dulu source code mod_security
2. abis itu tar xzvf mod_security-x.x.x.tar.gz
3. masuk ke direktori mod_security-x.x.x/apache2 (gw pake apache 2.x)
4. untuk menambahkan modul mod_sec ke apache, jalankan perintah berikut :
apxs -cia mod_security.c (diasumsikan apxs sudah ada di /bin)
5. apachectl stop
6. apachectl start

mod_sec sudah terinstall sebagai modul apache….. gamppang kan? nah sekarang, kita tinggal menamabahkan konfigurasi mod_sec tersebut ke dalam file httpd.conf. caranya adalah sebagai berikut :
1. buka file httpd.conf
2. tambahkan baris berikut ini.

SecFilterEngine On
SecServerSignature “Microsoft-IIS/6.0″
ServerTokens Full
SecFilterCheckURLEncoding On
SecFilterCheckUnicodeEncoding Off
SecFilterForceByteRange 0 255
SecAuditEngine RelevantOnly
SecAuditLog /var/log/httpd/audit_log
SecFilterDebugLog /var/log/httpd/debug_log
SecFilterDebugLevel 1
SecFilterScanPOST On
SecFilterDefaultAction “deny,log,status:500″
SecFilter “<script”
SecFilter forum/
SecFilter /bin/sh
SecFilter /etc/passwd
SecFIlter “\.\./”
SecFilter “”
SecFilter “<[[:space:]]*script”
SecFilter “delete[[:space:]]+from”
SecFilter “insert[[:space:]]+into”
SecFilter “select[[:space:]]+from”
SecFilter “\.(conf|cf|ini|htpasswd|htaccess|htgroup|inc|history|bash|history|exe|pwd|cnf|dll)”
SecFilterSelective ARG_b2inc “!^$”
SecFilterSelective ARG_authorised “!^$”
SecFilterSelective COOKIE_authorised “!^$”
SecFilterSelective OUTPUT “Volume Serial Number”
SecFilterSelective OUTPUT “Command completed”
SecFilterSelective OUTPUT “Bad command or filename”
SecFilterSelective OUTPUT “file(s) copied”
SecFilterSelective OUTPUT “.*uid\=\(”

Penjelasan baris-per-baris :
SecFilterEngine On = enable filtering engine. jika Off maka mod_sec tidak aktif

SecServerSignature “Microsoft-IIS/6.0″ = mengubah default server signature menjadi Microsoft-IIS/6.0, bukan apache-x.x. untuk membuktikannya, coba nmap server kmu

ServerTokens Full =

SecFilterCheckURLEncoding On = Special character harus di encode sebelum ditransimisikan di URL. dengan SecFilterCheckURLEncoding On, kita dapat mengecek apakah encoding tersebut valid.

SecFilterCheckUnicodeEncoding Off = mendisable validasi unicode/decode.

SecFilterForceByteRange 0 255 = memaksa request hanya terdiri dari byte tertentu ddari rentan waktu byte tertentu, disini didefinisikan byte yang diterima adalah dari 0 hingga 255.

SecAuditEngine RelevantOnly = meng-enable-kan mod_sec logging.RelevantOnly berarti hanya akan me-log request request yang relevant. relevan request adalah request request yang disebabkan karena adanya filter filter dari mod_sec

SecAuditLog /var/log/httpd/audit_log = kemana mod_sec akan dilog?

SecFilterDebugLog /var/log/httpd/debug_log = path untuk mod_sec debug.

SecFilterDebugLevel 1 = mode debug log (default value 0-9)

SecFilterScanPOST On = jika di On, maka modsec tidak hanya akan memeriksa GET variable, tetapi juga POST variable (bisa berasal dari inputan (form) di web).

SecFilterDefaultAction “deny,log,status:500″ = action default dari mod_sec. jika ada suatu filter yang terpenuhi, maka mod_sec akan melakukan action deny, kemudian mod_sec akan me-log request tersebut dan menampilkan status kode html 500 (error request). agar apache dapat menampilkan kode 500, kamu dapat mengubah file httpd.conf, trus cari yg ada tulisan 500, ubah aja sesuai dengan nama filenya

tiba saat yg paling mengasyikkan:
SecFilter “<script” = jika dalam suatu inputan/url terdapat tulisan <script, maka mod_sec akan melakukan aksinya seperti yang telah didefinisikan di SecFilterDefaultAction “deny,log,status:500″.

SecFilter forum/ = mod_sec akan mencegah request masuk ke direktori forum/

SecFilter /bin/sh = mod_sec akan mencegah pengeksekusian perintah /bin/sh

SecFilter /etc/passwd = mod_sec akan mencegah pengaksesan /etc/passwd

SecFIlter “\.\./” = mencegah PATH transversal attack

SecFilter “” = jika ada suatu inputan yang diawali dengan karakter ”, maka akan di reject request tersebut.

SecFilter “<[[:space:]]*script” = hampir sama dengan yang diatas, jika ada karakter yang diawali dengan ‘<’ dan ada terdapat kata script, maka akan di reject request tsb

SecFilter “delete[[:space:]]+from” = mencegah sql Injection, yaitu dimana di dalam suatu url jika ada tulisan delete xxxxx from, maka request ditolak, atau di reject.

SecFilter “insert[[:space:]]+into” = sama dengan yg diatas……….

SecFilter “select[[:space:]]+from” = idem juga,

SecFilter “\.(conf|cf|ini|htpasswd|htaccess|htgroup|inc|history|bash|history|exe|pwd|cnf|dll)” = mencegah pengaksesan file yg berekstensi conf,cf,ini,htpasswd,htaccess,htgroup,inc,history,bash,history,exe,pwd,cnf,dll

mungkin cukup segitu dulu penjelasan tentang mod_security, kamu dapat juga menambahkan rule-rule yang lain. tergantung dari kamu juga untuk mengeksplorasi lebih jauh lagi tenang mod security..,

hampir lupa, rule diatas, masih belum relatif aman/ secure. kalo ada salah tolong dibenerin yee……………..

happy ngoprek…………………………….

Cara Mudah Install APACHE+PHP+MYSQL di FreeBSD 6.1(from source)- lanjutan

October 5th, 2006 by cipitunk

pada bagian yang pertama udah dijelasin gimana cara nginstall mysql ma apache, nah skarang seperti yg dijanjikan sebelumnya, skarang bagian bwat nginstall PHP+konfigurasi ssl bwat apache.
1. ngistall php dulu……..
sebelum php diinstall install dulu paket paket dependency berikut ini :

  • libmcrypt
  • mcrypt
  • curl
  • freetds
  • libxml2 (biasanya libxml2 udah keinstall default waktu pertama kali nginstall freebsd)
  • aspell
  • libxdiff

cara nginstall paket dependency diatas adalah sebagai berikut (gw nginstallnya dari ports, enggak kehubung ke internet):
a. libmcrypt :
    cd /usr/ports/security/libmcrypt 
    make install clean (karena gw ga connect ke internet, gw donlot dulu paket libmcrypt,     trus gw scp ke mesin freebsd maka si freebsd minta paket                 libmcrypt tadi di             taroh di /usr/ports/distfiles)
    mv /home/lala/libmcrypt-x.x.x /usr/ports/distfiles (libmcrypt-x-x ada di direktori         /home/lala)
   make install clean
   
untuk proses instalasi  paket dependency yang lain, sama dengan waktu nginstall libmcrypt, donlot paket , scp  ke mesin FreeBSD, trus pindahin ke /usr/ports/distfiles
b. mcrypt :
     cd /usr/ports/security/mcrypt
    mv /home/lala/mcrypt-x-x /usr/ports/distfiles
    make install clean

c.  curl (kalo ada paket ga bisa ke install gara-gara deppendency paket, make proses instalasi akan berhenti. freebsd akan nyari paket dependency tadi ke internet. karena gw ga connect internet,  caranya sama aja, donlot paket dari komp laen , trus scp, trus taroh di /usr/ports/distfiles)
    cd /usr/ports/ftp/curl
    mv /home/lala/curl-x-x /usr/ports/distfiles
    make install clean

d. freetds
     cd /usr/ports/databases/freetds   
    mv /home/lala/freetds-x-x /usr/ports/distfiles
    make install clean

e. aspell (waktu nginstall aspell ni, dependency-nya banyak jadi sabar aja, gw enggak ngejelasin paket-paket pendukung semuanya di sini, coz terlalu banyak)
     cd /usr/ports/textproc/aspell
    mv /home/lala/aspell-x-x /usr/ports/distfiles
    make install clean

f. libxdiff
    cd /usr/ports/textproc/libxdiff
    mv /home/lala/libxdiff-x-x /usr/ports/distfiles
    make install clean

paket paket pendukung udah selesai diinstall (capek deeeeeeehhhh), maka tibalah kita untuk menginstall php (yuuuuuuuuuuuukkkkkkk, halah……)

step-by-step nginstall php

  • cd /usr/web
  • tar xzvf php-5.1.4.tar.gz
  • cd php-5.1.4
  • ./configure –prefix=/usr/local/apache/php –with-apxs2=/usr/local/apache/bin/apxs –with-mysql=/usr/local/mysql –enable-calendar –enable-trans-id –with-curl=/usr/local –enable-ftp –with-mcrypt –with-pspell –with-xdiff (semuanya satu baris)
  • make
  • make install (ni ngistall lama juga, karena gw disuruh berhenti ngrokok ma someone, ya terpaksa gw tinggal chat dulu)
  • cp php.ini-dist /usr/local/apache/php/php.ini

setelah selesai itu semua, trus edit file httpd.conf tambahain baris berikut (cari dulu baris yg ada tulisannya AddType)
AddType application/x-httpd-php .php
hampir lupa, pada httpd.conf, edit juga baris yg ada tulisan listen menjadi

  • Listen x.x.x.x:80
  • Listen x.x.x.x:443 (ip komp freebsd kmu)

proses instalasi php mysql dan apache udah selesai. skarang tinggal dicobain tuh apachenya. caranya :
    /usr/local/apache/bin/apachectl start (waktu ngejalanin apache, biasanya ntar keluar tulisan ……………… (gw lupa bunyinya apa), hal itu wajar aja, soalnya modul accf_http blon di load. buat ngilangin tulisan ………………… (gw lupa lagi bunyinya apa) load aja modul accf_http, caranya kldload accf_http. trus jalanin apache servernya )

nah skarang konfigurasi apache biar bisa https, caranya :
cd /usr/local/apache
mkdir certs
cd certs
openssl genrsa -out server.key 2408
openssl req -new -key server.key -x509 -out server.crt
(isi aja info-info sesuka kamu, yang lengkap ngisinya)
abis itu edit file conf/extra/httpd-ssl.conf 
vi conf/extra/httpd-ssl.conf 

ganti baris yg ada tulisan SSLCertificateFile menjadi :
    SSLCertificateFile /usr/local/apache/certs/servert.crt
turun lagi ke bawah ada tulisan SSLCertificateKeyFile, ganti aja menjadi :
    SSLCertificateKeyFile /usr/local/apache/certs/server.crt
abis itu restart apache, trus cobain deh https://ip_kamu dari komp laen…
ampir lupa, klo pengen koneksi http di redirect langsung ke https://ip_kmu, tinggal bikin rule pake mod_rewrite (modul apache bwat ngredirect request dari client. misalkan si client ngetik http://ip_kmu, ntar otomatis si client akan masuk ke https://ip_kamu. ), ntar rule tsb taruh aja di httpd.conf. tentang rule bwat mod_rewrite blon bisa gw tulis disini, soalnya gw capek……….sabar yeeeeeee

sekian dulu yah tutorialnya, gw capek berat. karena gw masih newbie, ya tutoriallnya cuman gitu doang alias gampang, menerima saran dan kritik kok…………..

   

   

Cara Mudah Install APACHE+PHP+MYSQL di FreeBSD 6.1(from source)

October 4th, 2006 by cipitunk

Dalam tutorial kali ini minimal temen-temen udah nginstall FreeBSD. Kalo enggak ada FreeBSD-nya yah percuma aja. LAngkah persiapan sebelum nginstall AMP (Apache+MYSQL+PHP) di FreeBSD adalah sebagai berikut :

  1. Duduk manis depan komputer
  2. Siapin rokok satu bungkus + kopi
  3. Pasang Headphone di kuping bwat ngedengerin musik
  4. Satu buah komputer baru bwat ngremote si FreeBSD server (optional, klo betah pake konsole ya silakan……… kalo enggak betah yah tinggal diremote aja)

Diasumsikan bahwa SSH server di mesin FreeBSD nyala (waktu nginstall gw ngremote tuh FreeBSD), trus dapet akses root.
Sekarang mulai aja proses instalasinya.
1. Siapkan dulu AMP-nya. Apache gw pake httpd-2.2-3, trus klo Mysql-nya make mysql-4.1.14 dan php versi  php-5.1.4. (Kalo blon ada donlot aja, or tinggal dateng aja ke tele, ntar gw kasih).
2. biar nggak susah waktu proses instalasinya, source tadi ditaroh aja di direktori /usr/web(misalkan). bikin dulu direkroti tsb

  • mkdir /usr/web
  • mv httpd-2.2-3.tar.gz /usr/web
  • mv php-5.1.4.tar.gz /usr/web
  • mv mysql-4.1.14.tar.gz /usr/web

3. langkah pertama adalah nginstall mysql dulu. berikut ini adalah langkah-langkahnya

  • cd /usr/web
  • tar xzvf mysql-*
  • cd mysql-*
  • ./configure –prefix=/usr/local/mysql (ni bwat direktori tujuan) –without-debug –with-extra-charsets=none –enable-local-infile –enable-assembler
  • make
  • make install (proses ./configure ampe make install memakan waktu yang lama, jadi ditinggal ngrokok aja bisa)
  • setelah selesai semua jalanin perintah berikuut ./scripts/mysql_install_db
  • jalanin  mysql daemonnya :  /usr/local/mysql/bin/mysqld_safe –user=root &
  • kalo enggak ada pesan error berarti mysql udah jalan. klo pengen bikin mysql langsung jalan waktu pertama kali boot bikin script sederhana kaya’ gini –>
  • vi /usr/local/etc/rc.d/mysql.sh
  • echo -n "Starting MySQL Server";
  • /usr/local/mysql/bin/mysqld_safe –user=root &
  • chmod 700 /usr/local/etc/rc.d/mysql.sh
  • Mysql udah siap digunakan.

4. Abis itu install apache-nya, langkah-langkahnya sebagai berikut

  • cd /usr/web
  • tar xzvf httpd-*
  • cd httpd-*
  • ./configure –prefix/usr/local/apache –enable-ssl –with-mpm=worker –enable-so –disable-cgi –enable-info –enable-rewrite –enable-setenvif –enable-speling –enable-usertrack –enable-deflate
  • make
  • make install
  • karena waktu agak lama, ngrokok dulu ah…………….

Karena gw udah ccapek, cukup sekian dulu tutorialnya, pada edisi kedua akan dijelaskan cara install php, nambahin modul php ke apache + konfigurasi ssl bwat apache. harap maklum, penulis masih newbie bgt \\^o^//, maaf skali lagi maaf