Friday, December 25, 2015

BIND DNS Server

Assalammualaikum, kali ini saya akan membahas mengenai BIND. BIND adalah singkatan dari Barkeley Internet Name Daemon, yang biasa digunakan untuk DNS server. DNS server adalah, server yang berfungsi untuk mentraslate ip address menjadi domain. Dengan adanya domain ini, ketika kita ingin mengakses suatu webiste, kita tidak perlu mengingat ip address nya, cukup dengan memngingat nama domain nya saja yang tentunya lebih mudah diingat untuk manusia. contoh ketika kita ingin mendakses facebook, kita cukup mengetikan www.facebook.com saja pada browser, kita tidak perlu mengetik ip address facebook tersebut.

DNS juga terdiri dari 3 level yaitu :
1. root "."
2. top level domain server contoh "org"
3. nameserver, contoh server1.rizal.org

contoh cara kerja dns :
1. kita ingin mengakses www.google.com dari browser
2. browser menanyakan kepada dns lokal kita
3. jika tidak ketemu, dns server akan menayakan kepada root server
4. jika tidak ketemu, root server akan melanjutkan pertanyaan kepada
   top level domain untuk .com
5. top level domain tidak tau domain "www.google.com" tapi dia tau name
   server yang tau domain tersebut ip address nya 64.233.167.99 dan bernama
   ns1.google.com
6. setelah itu dns lokal kita proses the address 64.233.167.99, membaca
   direktori informasi mengenai ns1.google.com kemudia memberitau browser
   bahwa ip 64.233.167.99 adalah www.google.com
7. dns server lokal kita akan menyimpan informasi tersebut, sehingga
   dns server tidak perlu melakukan tahap" seperti diatas

ada 3 konfigurasi yang akan kita lakukan pada artikel kali ini, yaitu :
1. menjalankan bind9 di chroot
2. konfigurasi dns master slave menggunakan bind9
3. dnssec menggunakan bind9

disini saya menggunakan 2 buah server(master dan slave) dengan OS Debian 8
hostname : master
ip : 192.168.0.1
hostname : slave
ip : 192.168.0.2

sebelum mulai ada baiknya kita mengetahui komponen" dari bind9 ini :
1. named (namee-dee) -> menjawab panggilan
2. resolver library -> berkerja ketika web browser, email atau aplikasi lain
mencari keterangan server berdasarkan DNS,
3. dig

setelah kita mengetahui komponen" yang ada bind, saat kita melakukan konfigurasi yang pertama, yaitu membuat bind9 berjalan di lingkungan chroot.

apa itu chroot ? chroot adalah sebuah direktori untuk meng isolasi sistem (disini kita akan meng isolasi bind9), tujuannya adalah melindungi attacker yang mungkin memnemukan celah keamanan pada bind dan memungkinkan menyerang named daemon untuk mendapatakan akses ke sistem. dengan menjalankan bind9 pada chroot bahkan ketika named di exploitasi, chroot membatasi kerusakan pada name service saja, tidak merambat ke sistem yang lain.

berikut adalah konfigurasi menjalankan bind9 pada lingkungan chroot(cara nya sama, baik untuk master maupun slave) :
install bind9 :
# apt-get install bind9

stop service bind9
# /etc/init.d/bind9 stop

configure agar bind menjalan kan file chroot (/var/lib/named)
# vim /etc/default/bind9

ubah OPTS="-u bind" menjadi OPTIONS="-u bind -t /var/lib/named"

siapkan direktori untuk chroot :
# mkdir -p /var/lib/named/etc
# mkdir /var/lib/named/dev
# mkdir -p /var/lib/named/var/cache/bind
# mkdir -p /var/lib/named/var/run/bind/run

pindahkan konfigurasi dari /etc/bind ke /var/lib/named/etc
# mv /etc/bind /var/lib/named/etc

buat symbolic link dari direktori konfigurasi yang baru ke direktori yang lama, untuk menghindari kesalahan ketika BIND di upgrade/dikonfigurasi
#ln -s /var/lib/named/etc/bind /etc/bind

buat null dan random device untuk digunakan oleh bind
# mknod /var/lib/named/dev/null c 1 3
# mknod /var/lib/named/dev/random c 1 8

ganti user persmission dan owner
# chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random
# chown -R bind:bind /var/lib/named/var/*
# chown -R bind:bind /var/lib/named/etc/bind

start bind9
# /etc/init.d/bind9 start

contoh output :
[ ok ] Starting bind9 (via systemctl): bind9.service.

cek juga menggunakan netstat -ntulp | grep named
root@master:~# netstat -ntulp | grep named
tcp        0      0 192.168.0.1:53          0.0.0.0:*               LISTEN      428/named      
tcp        0      0 10.0.2.15:53            0.0.0.0:*               LISTEN      428/named      
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      428/named      
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      428/named      
tcp6       0      0 :::53                   :::*                    LISTEN      428/named      
tcp6       0      0 ::1:953                 :::*                    LISTEN      428/named      
udp        0      0 192.168.0.1:53          0.0.0.0:*                           428/named      
udp        0      0 10.0.2.15:53            0.0.0.0:*                           428/named      
udp        0      0 127.0.0.1:53            0.0.0.0:*                           428/named      
udp6       0      0 :::53                   :::*                                428/named      

check menggunakan rndc status
root@master:~# rndc status
version: 9.9.5-9+deb8u4-Debian <id:f9b8a50e>
CPUs found: 1
worker threads: 1
UDP listeners per interface: 1
number of zones: 100
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running

pada tahapan ini, bind9 ada sudah berjalan pada lingkungan chroot

Konfigurasi BIND DNS master slave
master.rizal.org    : 192.168.0.1
slave.rizal.org     : 192.168.0.2

karna kita sudah membuat symbolic link dari /var/lib/named/etc/bind/ ke /etc/bind maka, setiap kita mengedit file di /etc/bind, file yang ada di /var/lib/named/etc/bind juga akan teredit/terupdate.

KONFIGURASI DI MASTER :
buat zone
# vim /etc/bind/named.conf.local

tambahkan baris berikut :
zone "rizal.org" {
        type master;
        file "/etc/bind/db.rizal.org"; 

        allow-transfer {
                192.168.0.2;            
        };

        also-notify {
                192.168.0.2;
        };
};

zone "0.168.192.in-addr.arpa" {
        type master;
        file "/etc/bind/rev.rizal.org";

        allow-transfer {
                192.168.0.2;
        };

        also-notify {
                192.168.0.2;
        };
};

copy db.local ke db.rizal.org
# cp db.local db.rizal.org

edit db.rizal.org menjadi seperti berikut

;
; BIND data file for local loopback interface
;
$TTL    604800
@       IN      SOA     master.rizal.org. root.rizal.org. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      master.rizal.org.
@       IN      NS      slave.rizal.org.
@       IN      A       192.168.0.1
@       IN      A       192.168.0.2
@       IN      AAAA    ::1
master  IN      A       192.168.0.1
slave   IN      A       192.168.0.2

copy db.127 ke rev.rizal.org
# cp db.127 rev.rizal.org

edit rev.rizal.org menjadi seperti berikut

;
; BIND reverse data file for local loopback interface
;
$TTL    604800
@       IN      SOA     master.rizal.org. root.rizal.org. (
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      master.
@       IN      NS      slave.
@       IN      A       192.168.0.1
@       IN      A       192.168.0.2
1       IN      PTR     master.rizal.org.
2       IN      PTR     slave.rizal.org.

jika sudah, restart bind9
# /etc/init.d/bind9 restart

tes dengan nslookup rizal.org

root@master:~# nslookup rizal.org
Server:     192.168.0.1
Address:    192.168.0.1#53

Name:   rizal.org
Address: 192.168.0.1
Name:   rizal.org
Address: 192.168.0.2

tes dengan dig rizal.org

root@master:~# dig rizal.org

; <<>> DiG 9.9.5-9+deb8u4-Debian <<>> rizal.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63875
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;rizal.org.         IN  A

;; ANSWER SECTION:
rizal.org.      604800  IN  A   192.168.0.1
rizal.org.      604800  IN  A   192.168.0.2

;; AUTHORITY SECTION:
rizal.org.      604800  IN  NS  slave.rizal.org.
rizal.org.      604800  IN  NS  master.rizal.org.

;; ADDITIONAL SECTION:
slave.rizal.org.    604800  IN  A   192.168.0.2
master.rizal.org.   604800  IN  A   192.168.0.1

;; Query time: 5 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Fri Dec 25 13:40:15 WIB 2015
;; MSG SIZE  rcvd: 143

KONFIGURASI DI SLAVE :
buat zone
# vim /etc/bind/named.conf.local

tambahkan baris berikut

zone "rizal.org" {
        type slave;
        file "/etc/bind/db.rizal.org";
        masters {
                192.168.0.1;
        };
};

zone "0.168.192.in-addr.arpa" {
        type slave;
        file "/etc/bind/rev.rizal.org";
        masters {
                192.168.0.1;
        };
};

restart bind9
# /etc/init.d/bind9 restart

untuk zone file dan revers zone file akan dikirim dari server master

KONFIGURASI DNSSEC DI BIND9

Lakukan ini pada kedua server (master dan slave)
Setup Additional Entropy, digunakan agar saat generate KSK dan ZSK menjadi lebih cepat
# apt-get install haveged rng-tools

tes, setelah penginstallan
# cat /dev/random | rngtest -c 100a

kurang lebih hasilnya seperti ini
root@master:~# cat /dev/random | rngtest -c 1000
rngtest 2-unofficial-mt.14
Copyright (c) 2004 by Henrique de Moraes Holschuh
This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

rngtest: starting FIPS tests...
rngtest: bits received from input: 20000032
rngtest: FIPS 140-2 successes: 1000
rngtest: FIPS 140-2 failures: 0
rngtest: FIPS 140-2(2001-10-10) Monobit: 0
rngtest: FIPS 140-2(2001-10-10) Poker: 0
rngtest: FIPS 140-2(2001-10-10) Runs: 0
rngtest: FIPS 140-2(2001-10-10) Long run: 0
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
rngtest: input channel speed: (min=606.052; avg=5214.173; max=8241.034)Kibits/s
rngtest: FIPS tests speed: (min=18.608; avg=62.077; max=110.251)Mibits/s
rngtest: Program run time: 4061195 microseconds

konfigurasi dnssec untuk master
# cd /etc/bind
# vim named.conf.options

edit isinya sehingga menjadi seperti ini

options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        // forwarders {
        //      0.0.0.0;
        // };

        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================
        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
};

buat ZSK key
# dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE rizal.org

buat KSK key
# dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE rizal.org

tambahkan ZSK dan KSK key ke zone file
# for key in `ls Krizal.org.*.key`
> do
> echo "\$INCLUDE $key" >> db.rizal.org
> done

tandai zone dengan perintah dnssec-signzone
# dnssec-signzone -t -g -o rizal.org db.rizal.org Krizal.org.*.private
Verifying the zone using the following algorithms: NSEC3RSASHA1.
Zone fully signed:
Algorithm: NSEC3RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked
                         ZSKs: 1 active, 0 stand-by, 0 revoked
db.rizal.org.signed
Signatures generated:                       11
Signatures retained:                         0
Signatures dropped:                          0
Signatures successfully verified:            0
Signatures unsuccessfully verified:          0
Signing time in seconds:                 0.080
Signatures per second:                 136.371
Runtime in seconds:                      0.118
root@master:/etc/bind#

cek dns key
# dig DNSKEY rizal.org. @localhost +multiline

; <<>> DiG 9.9.5-9+deb8u4-Debian <<>> DNSKEY rizal.org. @localhost +multiline
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62469
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;rizal.org.     IN DNSKEY

;; ANSWER SECTION:
rizal.org.      604800 IN DNSKEY 257 3 7 (
                AwEAAb9BZKZRv1QHmkcFRNpw72JkRQbwWZu4O4O3qN8v
                4t1J1aGEUP5MDQZoi2TuPs4/bIeQOR20mnN/Obr+I3xb
                90sY0nKEf6pTCiie15mWbJTZjPznAWREUiSVdxVMMVph
                uMS4LCIetRlqPApRy/BeZxe1tv/Wbi+0Pg/apoWlf2CP
                sea1PSbLtiPfzRyYUdvouoj9MmbBkRzerWp5VFBMl28w
                6tNvs8cO/A8+ycdBb/V87Ch3juRBlRLKjhCP0qLUXfcO
                oEb4LQ+i1Py4j9C4lQ95cYgYhe4Yq0nq5s+HDH6ygcsh
                dK7sERfHyWsYmM/RZLQrxojFsg+GEtCI85h8fpIBlUtD
                nf4LctD7qU0+3q82a0XqDvM5+Deh5kwShLyjgRyNSuzK
                Pnu0pseZ1VtO7N8Lo4ROypSHbYOtoHvrvA5XIHaxpGU8
                ckhPqdYloJ8ScKQXrrnQWRNG0mInR4SRYF8G+HO78t+u
                exPLJNN9AS1YAWzzHaiLbgzO7lT/DYTGXdOH3J8cUXmv
                lXhtxME2jTp1CeQTTgJa7fwFPcVIvoDF5HA8hT2rwsYA
                D0jZ5qDvNRAJXOwr4f1nzsnWI/Fbi9KK/2Os4OB2TtYT
                2bDF5yOsYWOoicAB6xVsC+Jo2bIRVkzTBQpSWzG1ZFP3
                JtNN51kDGqBq4qry1OWxK4yKb+f5
                ) ; KSK; alg = NSEC3RSASHA1; key id = 25128
rizal.org.      604800 IN DNSKEY 256 3 7 (
                AwEAAavjBFabWe3N4jcGftwgw6RyHwErMcy95ea870/N
                wQcSIr8dbQBBuf31QJ2gXnH0OKkV5OOycKlzE/ch2/9a
                +PaI8snBEKJTLFlB45ejVUwkqbYP6a1r/3p5G1PoFRt5
                uE/TaMTJHOsJQISs7u4xG6ME/KgLYKmz/GRfzXCIHMn6
                89PmZzVneFRnyg39oUSmFq6OPjj5cCKPZSYLP8a/tZ9P
                KB06jCUvb44cT8x6EX3sw+d5OiDmGvQpxz5ISR+KY86x
                qB6Ep9ZqxpxvzreXHQ0mZBukJaWfsUQZ3PSy2nyRqpxx
                tePrx5V8lLTpqGo9+ZzaRDzkKgJ6gEL+Ytw+Ny8=
                ) ; ZSK; alg = NSEC3RSASHA1; key id = 30959

;; Query time: 4 msec
;; SERVER: ::1#53(::1)
;; WHEN: Fri Dec 25 17:48:41 WIB 2015
;; MSG SIZE  rcvd: 846

untuk konfigurasi di server slave
edit named.conf.optiosn menjadi seperti ini
options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        // forwarders {
        //      0.0.0.0;
        // };

        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================
        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        auth-nxdomain no;    # conform to RFC1035
        listen-on-v6 { any; };
};

edit zone file menjadi seperti ini
//
// Do any local configuration here
//

// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";

zone "rizal.org" {
        type slave;
        file "/etc/bind/db.rizal.org.signed";
        masters {
                192.168.0.1;
        };
};

zone "0.168.192.in-addr.arpa" {
        type slave;
        file "/etc/bind/rev.rizal.org";
        masters {
                192.168.0.1;
        };
};

restart bind :
# /etc/init.d/bind9 restart

referensi : ebook linux system administrator O'REILLY
https://drive.google.com/folderview?id=0B8CJF0KOi9GPfk5jQUpJVEhSQ1ZGM2trLVhna1RtdlNYdEJyZ090enFEUlBzRlBOY2Z1YWs&usp=sharing
http://www.unixmen.com/setup-dns-server-debian-7-wheezy/
https://www.digitalocean.com/community/tutorials/how-to-setup-dnssec-on-an-authoritative-bind-dns-server--2

Sunday, November 1, 2015

DHCP Attack

Assalammualaikum, pada artikel kali ini kita akan membahas penyerangan yang terjadi pada protokol DHCP. DHCP sendiri adalah singkatan dari Dynamic Host Configuration Protokol), fungsinya adalah untuk memberikan alamat ip, dns, dan gateway kepada host/client secara otomatis. Terdapat 2 serangan yang biasa dilakukan terhadap DHCP ini, yaitu :
  • DHCP starvation attack, adalah serangan yang bertujuan untuk membuat DHCP server tidak bekerja dengan mengirim request DHCP dengan menggunakan MAC address palsu, dengan begitu DHCP server akan memberikan masing” 1 ip address kepada MAC address palsu tersebut sampai ip yang tersedia habis, dengan begitu client tidak akan mendapatkan ip address dari DHCP server tersebut. (termasuk DOS attack).
  • DHCP Rogue, adalah DHCP palsu yang ada di dalam jaringan. Biasanya digunakan untuk melakukan sniffing dengan cara mengganti gateway host/client yang harusnya ke Router menjadi ke DHCP Rogue.
Jadi pertama”, kita akan melakukan DHCP starvation attack agar client tidak mendapatkan ip address dari DHCP server yang asli, kemudian kita akan men setup dan menjalankan DHCP Rogue.
Berikut ini adalah bagaimana kita melakukan DHCP starvation attack. Topologi yang digunakan :
Disini saya menggunakan Ubuntu Linux 14.04 LTS dan yersinia sebagai tools nya  dan mikrotik sebagai DHCP server yang akan diserang :
  • install yersinia : sudo apt-get install yersinia
  • jalankan yersinia : sudo yersinia -I
  • ketik “i” untuk memilih interface mana yang akan digunakan 
  • ketik q untuk keluar dari menu pilih interface, kemudian ketik G untuk memilih protokol (pilih DHCP)

  • sebelum melakukan serangan, terlebih dahulur mari kita lihat dhcp lease pada mikrotik
  • kembali ke ubuntu, ketik q untuk keluar dari menu pilih protokol, kemudian ketik x untuk memilih serangan (pilih no 1 dengan  cara diketik)

  • berikut adalah tampilan ketika melakukan serangan
  • kita lihat kembali dhcp lease pada mikrotik

Selesai, DHCP starvation attack berhasil. Selanjutnya anda tinggal men setup DHCP Rogue, tidak akan saya jelaskan karena itu hanyalah membuat dhcp server biasa.


Terima kasih telah mengunjungi blog saya, mohon maaf apabila ada kesalahan dalam penulisan maupun penjelasan. Sampai ketemu pada artikel selanjutnya 

referensi :
http://itsecurity.telelink.com/dhcp-attacks/
http://www.fixedbyvonnie.com/2015/05/how-to-destroy-router-dhcp-starvation/


Monday, October 19, 2015

ARP SPOOFING (Layer 2 Security Threat)

          Address Resolution Protokol atau disingkat ARP. Protokol yang bekerja pada layer 2 ini bertanggung jawab mencari tau mac address dari suatu host yang terhubung ke dalam jaringan, jadi bisa dikatakan bahwa ARP ini bertugas sebagai penerjemah alamat logis berupa IP menjadi alamat fisik yaitu MAC address. Nanti nya dalam sebuah jaringan, komunikasi antar host akan berkomunikasi menggunakan MAC address dan tidak menggunakan alamat logis (IP Address). Untuk lebih jelasnya bagaimana cara kerja ARP silahkan baca pada link berikut ini: http://www.pintarkomputer.com/2014/10/apa-fungsi-dan-peran-protokol-arp-dalam-jaringan-komputer-networking-berikut-penjelasannya.html
          Sekarang kita tau bahwa nantinya komunikasi antar host pada sebuah jaringan akan menggunakan mac address. Apa yang terjadi jika komputer yang akan di tuju mac address nya kita rubah menjadi mac address komputer kita?, jawabannya adalah pesan atau paket data yang dikirim akan sampai ke komputer kita, kemudian barulah pesan atau paket data yang dikirim sampai ke tujuan.
          Jadi apa itu ARP SPOOFING?,  ARP SPOOFING adalah salah satu teknik sniffing atau penyadapan, ARP SPOOFING termasuk serangan Man in The Middle.  Seperti yang saya jelaskan di atas, ARP SPOOFING bekerja dengan mengganti mac address komputer target menjadi mac address komputer kita. Berikut langkah – langkah melakukan ARP SPOOFING. Disini saya menggunakan ubuntu 14.04 sebagai attacker, dan wireshark untuk melihat paket data yang lewat.
Topologi yang digunakan :

  • install arpspoof (dsniff) di ubuntu : sudo apt-get install dsniff
  • setelah itu kita lakukan ping ke target 1 dan 2 agar tau mac address dari kedua target tersebut gunakan perintah arp -a untuk melihat hasilnya. 
  • Arp dari client sebelum di lakukan ARP SPOOFING
  • pada artikel ini saya hanya akan memperlihatkan ping dari target 1 ke target 2 maupun sebaliknya yang seharusnya diterima oleh target 1 dan 2 malah akan diterima dulu oleh ubuntu (attacker).
  • Di ubuntu aktifkan ip forward  dengan perintah : sudo bash -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
  • Saatnya melakukan ARP SPOOFING menggunakan arpspoof dengan perintah : sudo arpspoof -i namaInterface -t ipTarget ipTarget. Contoh :
    • sudo arpspoof -i tap1 -t 192.168.1.2 192.168.1.3
    • sudo arpspoof -i tap1 -t 192.168.1.3 192.168.1.2

  • untuk melihat hasilnya, cek dengan perintah arp di masing” target
  • terlihat pada gambar di atas bahwa mac address untuk masing” target sudah berubah. Nantinya ketika target 1 melakukan ping ke target 2, ping tersebut akan mampir dulu ke komputer ubuntu (attacker) kemudian dari komputer attacker dilanjutkan ke tujuan yang sebenarnya. Berikut penampakannya dengan bantuan wireshark



Terima kasih telah mengunjungi blog saya. Mohon maaf apabila ada kesalahan pada tulisan kali ini, sampai ketemu pada tulisan berikutnya ....

REFERENSI :
  • http://www.pintarkomputer.com/2014/10/apa-fungsi-dan-peran-protokol-arp-dalam-jaringan-komputer-networking-berikut-penjelasannya.html
  • http://solutionsatexperts.com/arp-spoofing-attack-kali-linux/
  • http://www.hacking-tutorial.com/hacking-tutorial/kali-linux-man-middle-attack/#sthash.ohsZakDK.osb8V4Xj.dpbs




Saturday, October 17, 2015

WIFI Jamming


      Wifi jamming adalah salah satu teknik penyerangan pada radio wireless yang menurut buku “Linux Firewalls and Qos” termasuk dalam penyerangan pada layer 1 di osi layer (cable and connector) dikarenakan kita langsung menyerang fisik yang dalam hal ini adalah radio wireless. Wifi jamming juga termasuk kedalam serangan DOS (Denial Of Service), artinya tujuan dari serangan ini adalah menghentikan service, dalam hal ini memutukan koneksi antara client dengan akses poin / radio wireless yang dijadikan target.
      Wifi jamming bekerja dengan cara membanjiri Radio Wireless dengan packet data dan dengan jumlah koneksi yang berlebihan, serangan langsung tertuju pada Radio Wireless (Akses Point) dengan identitas MAC Address, sehingga semua user yang terkoneksi pada Radio Wireless tersebut menjadi terputus (diassosiated). Berikut ini adalah cara melakukan wifi jamming dengan OS Linux. Saya menggunakan linux ubuntu 14.04 :
  • install aircrack-ng : sudo apt-get install aircrak-ng
  • setelah terinstall, kita harus membuat interface wlan kita menjadi mode monitoring ( saya menggunakan interface wlan0) dengan cara : sudo airmon-ng start wlan0
  • terlihat bahwa monitoring mode sudah aktif pada ethernet mon0, untuk mematikan monitoring mode gunakan perintah : sudo airmon-ng stop mon0
  • setalah itu, untuk melakukan wifi jamming kita harus tau mac address akses point tersebut. Untuk melihatnya  gunakan perintah : sudo airodump-ng mon0 atau sudo airodump-ng mon0 -c 2 (untuk channel lain, -c 2 artinya channel 2)
  • terlihat BSSID disana yang artinya itu adalah mac address dari akses point. STATION adalah mac address dari setiap station yang mencari sebuah AP untuk terkoneksi.
  • Setelah kita mengetaui mac address dari AP tersebut saatnya melakukan wifi jamming. Berikut perintahnya : sudo aireplay-ng -0 0 -a BSSID -c STATION mon0 - -ignore-negative-one. Ganti BSSID dengan mac address akses point yang akan dijadikan target, ganti STATION menjadi mac address dari mana station mana paket data akan dikirim, mon0 adalah interface yang sedang dalam mode monitoring. Jadi nantinya paket data yang dirkim dalam jumlah banyak tersebut seolah olah dirikim dari STATION dan bukan dari kita (meniru mac address).  Berikut screen shoot yang saya ambil dari https://medium.com/@jackmahoney/hacking-and-jamming-wifi-networks-d2a6ec51f0c2
CATATAN : KITA TIDAK HARUS TERHUBUNG DENGAN AKSES POINT YANG AKAN DIJADIKAN TARGET

Terimakasih telah mengunjungi blog saya. Mohon maaf apabila ada kesalahan, sampai ketemu pada artikel selanjutnya 

referensi : 
https://medium.com/@jackmahoney/hacking-and-jamming-wifi-networks-d2a6ec51f0c2
http://www.aircrack-ng.org/documentation.html
http://ezine.echo.or.id/issue25/010.txt









Sunday, August 9, 2015

DNS Server menggunakan powerDNS

DNS singkatan dari  Domain Name System, intinya DNS ini digunakan untuk mentranslate/menterjemahkan ip address ke nama domain, baik IPv4 maupun IPv6. Contoh ip 31.13.79.246 di translatekan oleh dns menjadi www.facebook.com.

Pada tutorial ini kita akan membuat DNS server menggunakan powerDNS dengan mysql sebagai back end nya. Disini kita akan mentraslatekan ip 192.168.1.1 menjadi www.rizal.org

Yang dibutuhkan :
  • server ubuntu, saya menggunakan versi 12.04 32 bit dengan ip 192.168.1.1
Install mysql-server dan mysql-client
apt-get install mysql-server mysql-client
saya menggunakan password root untuk user root

Konfigure mysql 
vi /etc/mysql/my.cnf
beri tanda pagar di depan bind-address=127.0.0.1

Install powerdns 
apt-get install pdns-server pnds-backend-mysql

Configure Database yang akan digunakan oleh powerdns
mysql -u root -proot
masukan sql script berikut :

CREATE DATABASE powerdns;
GRANT ALL ON powerdns.* TO 'poweruser'@'%' IDENTIFIED BY 'ubuntu';
FLUSH PRIVILEGES;
USE powerdns;

CREATE TABLE domains (
  id                    INT AUTO_INCREMENT,
  name                  VARCHAR(255) NOT NULL,
  master                VARCHAR(128) DEFAULT NULL,
  last_check            INT DEFAULT NULL,
  type                  VARCHAR(6) NOT NULL,
  notified_serial       INT DEFAULT NULL,
  account               VARCHAR(40) DEFAULT NULL,
  PRIMARY KEY (id)
) Engine=InnoDB;

CREATE UNIQUE INDEX name_index ON domains(name);


CREATE TABLE records (
  id                    INT AUTO_INCREMENT,
  domain_id             INT DEFAULT NULL,
  name                  VARCHAR(255) DEFAULT NULL,
  type                  VARCHAR(10) DEFAULT NULL,
  content               VARCHAR(64000) DEFAULT NULL,
  ttl                   INT DEFAULT NULL,
  prio                  INT DEFAULT NULL,
  change_date           INT DEFAULT NULL,
  disabled              TINYINT(1) DEFAULT 0,
  ordername             VARCHAR(255) BINARY DEFAULT NULL,
  auth                  TINYINT(1) DEFAULT 1,
  PRIMARY KEY (id)
);

CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX recordorder ON records (domain_id, ordername); 


CREATE TABLE supermasters (
  ip                    VARCHAR(64) NOT NULL,
  nameserver            VARCHAR(255) NOT NULL,
  account               VARCHAR(40) NOT NULL,
  PRIMARY KEY (ip, nameserver)
);


CREATE TABLE comments (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  name                  VARCHAR(255) NOT NULL,
  type                  VARCHAR(10) NOT NULL,
  modified_at           INT NOT NULL,
  account               VARCHAR(40) NOT NULL,
  comment               VARCHAR(64000) NOT NULL,
  PRIMARY KEY (id)
);

CREATE INDEX comments_domain_id_idx ON comments (domain_id);
CREATE INDEX comments_name_type_idx ON comments (name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
 

CREATE TABLE domainmetadata (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  kind                  VARCHAR(32),
  content               TEXT,
  PRIMARY KEY (id)
);

CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
 

CREATE TABLE cryptokeys (
  id                    INT AUTO_INCREMENT,
  domain_id             INT NOT NULL,
  flags                 INT NOT NULL,
  active                BOOL,
  content               TEXT,
  PRIMARY KEY(id)
);

CREATE INDEX domainidindex ON cryptokeys(domain_id);
 

CREATE TABLE tsigkeys (
  id                    INT AUTO_INCREMENT,
  name                  VARCHAR(255),
  algorithm             VARCHAR(50),
  secret                VARCHAR(255),
  PRIMARY KEY (id)
);

CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

quit;

dapat dilihat bahwa untuk database powerdns user yang digunakan adalah 'poweruser' dengan password 'ubuntu'


Konfigurasi powerDNS
rm /etc/powerdns/pdns.d/*
vi /etc/powerdns/pdns.d/pdns.local.gmysql.conf
isi

# MySQL Configuration
#
# Launch gmysql backend
launch=gmysql

# gmysql parameters
gmysql-host=localhost
gmysql-dbname=powerdns
gmysql-user=poweruser
gmysql-password=ubuntu


vi /etc/powerdns/pdns.conf, pastika configurasi nya seperti ini. Jika tidak ada, tambahkan ...

allow-recursion=0.0.0.0/0
config-dir=/etc/powerdns
daemon=yes
guardian=yes
include=/etc/powerdns/pdns.d
launch=
setgid=pdns
setuid=pdns
version-string=powerdns
local-address=192.168.0.100
local-port=53

log-dns-details=yes
log-dns-queries=yes
logging-facility=0
loglevel=6

recursor=8.8.8.8

bisa dilihat pada konfigurasi di atas, bahwa "recursor=8.8.8.8". Seperti yang kita ketahui bahwa 8.8.8.8 adalah ip dns nya google, artinya apa? artinya saya mememinta bantuan dns google jika ada user yang mengakses domain yang tidak diketahui oleh dns server yang saya buat. contoh :
dns server milik saya hanya bisa mentranslate ip 192.168.1.1 menjadi www.rizal.org, jika user ingin mengakses www.facebook.com ip dns saya akan meminta bantuan dns google untuk mencari ip www.facebook.com tersebut.

dns google tersebut bisa dibilang dns recursor yang fungsinya melakukan pencarian melalui DNS sebagai tanggapan permintaan dari resolver yaitu client.

Restart powerDNS
/etc/init.d/pdns restart

untuk cek apakah powerDNS sudah berfungsi dapat menggunakan perintah :
netstat -tap | grep pdns



Cek dns server
dig www.facebook.com @192.168.1.1



Install poweradmin, yang berfungsi untuk memenej powerdns :
apt-get install apache2-mpm-prefork php5-mysql libapache2-mod-php5 php-pear php-mdb2 php-mdb2-driver-mysql
cd /var/www
wget http://nchc.dl.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz
tar zxvf poweradmin-2.1.7.tgz
mv poweradmin-2.1.7 poweradmin
chown www-data.www-data -R poweradmin
cp /var/www/poweradmin/inc/config-me.inc.php /var/www/poweradmin/inc/config.inc.php

selanjutnya install poweradmin dari browser : 192.168.1.1/poweradmin/install
password nya = ubuntu


setelah itu delete/rename folder install agar tidak kembali pada proses install :
rm -rf /var/www/poweradmin/install

buka kembali di browser : 192.168.1.1/poweradmin, jika mengalami error seperti berikut, install php5-mycrypt : apt-get install php5-mcrypt

restart apache : /etc/init.d/apache2 restart, akses kembali poweradmin
jika mengalami error seperti ini :


configurasi file /var/www/poweradmin/inc/config.inc.php

session key didapat dengan cara :
ketik di terminal echo -n poweradmin | md5sum

jika sudah akses kembali poweradmin, username root password ubuntu :
jika sudah, sekarang kita akan membuat ip 192.168.1.1 dikenal sebagai www.rizal.org,
klik add master zone, isikan seperti berikut kemudia add zone :
setalah itu untuk melihat, klik list zone :
klik gambar "note", isikan sebagai berikut. Option A artinya memperkenalkan kan www.rizal.org menjadi ip 192.168.1.1 :


tes dengan cara : dig www.rizal.org @192.168.1.1


sekian tutorial kali ini, semoga bermanfaat. Mohon maaf apabila ada yang salah/kurang tepat dalam tutorial kali ini ...

referensi :
http://cyberlearning.web.id/wiki/index.php/PowerDNS:_Instalasi_Server_%26_Recursor_di_satu_mesin




Wednesday, July 22, 2015

Load Balancing Web Server dengan Haproxy Layer 4

Load Balance dalam jaringan komputer adalah teknik untuk membagi beban (load) ke dalam beberapa jalur atau link. Tujuan dari load balance ini agar tidak ada link yang mendapat beban yang lebih besar dari pada link lainnya. Diharapkan dengan membagi beban ke dalam beberapa link tersebut, maka akan tercapai keseimbangan (balance) pada link-link tersebut.
Ada beberapa macam implmentasi load balance yang sering dijumpai di lampangan. Pada artikel ini, saya akan menjelaskan load balance pada web server yang dimana haproxy sebagai load balancer nya (yang membagi jalur). Ada 2 macam load balance pada web server, yaitu Layer 4 (transport layer) dan Layer 7 (application layer). Disini kita hanya akan membahas load balancer pada layer 4 saja.
Disebut load balancing layer 4 (transport layer) dikarenakan pembagian traffic nya berdasarkan ip address dan port. Berikut adalah topologinya :
Bisa dilihat bahwa user mengakses load balancer nya yang dalam hal ini kita menggunakan haproxy kemudian load balancer akan melanjutkannya ke web server berdasarkan ip address dan port menggunakan algoritma tertentu. Pada artikel ini saya menggunakan ALGORITMA ROUND ROBIN. Algoritma round robin termasuk algoritma pre-emptive, round robin memilih server secara bergilir. Yang kita butuhkan pada artikel ini adalah sebagai berikut (saya menggunakan ubuntu server) 12.04 32 bit :
  • 1 Load Balancer = ubuntu server 12.04 dengan haproxy (192.168.56.1)
  • 2 web server = apache/nginx
    • web sever1 = 192.168.56.2
    • web server2 =192.168.56.3
  • 1 database server = percona server/mysql/mariaDB (192.168.56.4)
  • client = saya menggunakan linux ubuntu 14.04 (192.168.56.11)
Konfigurasi ubuntu server sebagai load balancer :

Install haproxy :
apt-get install haproxy

Enable haproxy :
rubah option ENABLE menjadi 1 di  /etc/default/haproxy

Konfigurai haproxy :
letak file konfigurasi haproxy /etc/haproxy/haproxy.cfg. Isikan konfigurasi berikut

global
        log /dev/log   local0 #lelak log akan ditulis
        log 127.0.0.1   local1 notice
        maxconn 4096 #jumlah koneksi yang diijinkan pada front-end (load balancer)
        user haproxy
        group haproxy
        daemon

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3 #menetapkan jumlah retries
        option redispatch #memungkinkan redistribusi jika terjadi kegagalan koneksi
        maxconn 2000
        contimeout     5000
        clitimeout     50000
        srvtimeout     50000

listen webfarm 0.0.0.0:80
    mode http
    stats enable
    stats uri /haproxy?stats
    balance roundrobin #algoritma yang digunakan
    option httpclose #jika layer option ini akan menjadi mode http
    option forwardfor
    server webserver01 192.168.56.2:80 check #webServer1
    server webserver02 192.168.56.3:80 check #webServer2

Konfigurasi ubuntu server untuk web server dengan NGINX

Install nginx :
apt-get install nginx

Install php5
apt-get install php5-fpm php5-mysql

Install mysql/percona client

untuk mysql client :
apt-get install mysql-client

untuk percona client (secara default tidak tersedia pada repository ubuntu) :
apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A

repository percona server (replace VERSION dengan versi ubuntu) :
deb http://repo.percona.com/apt VERSION main
deb-src http://repo.percona.com/apt VERSION main

install percona client :
apt-get update
apt-get install percona-server-client-5.5

Pada tahap ini kita sudah bisa mengetest apakah haproxy sudah dapat bekerja atau belum dengan cara mengakses haproxy dari client. Berikut adalah screen shoot nya :


Perhatikan ip yang di akses adalah ip load balancer (192.168.56.1), bukan ip web server.

Konfigurasi nginx 

konfigurasi ini dilakukan agar nginx mengeksekusi file .php, jika tidak dilakukan maka nginx akan mendownload file .php ketika dibuka.

Edit file /etc/nginx/sites-enable/default
uncoment bagian ini 

server {
        listen   80; ## listen for ipv4; this line is default and implied
        listen   [::]:80 default ipv6only=on; ## listen for ipv6
}

tambahkan index.php pada bagian ini 
root /usr/share/nginx/www;
index index.html index.htm index.php;

selanjutnya nya pass the PHP scripts to FastCGI server
location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass 127.0.0.1:9000; 
                fastcgi_index index.php;
                include fastcgi_params;
        }
Edit file /etc/php5/fpm/php.ini
cari tulisan cgi.fix_pathinfo, rubah menjadi cgi.fix_pathinfo=0

Edit file /etc/php5/fpm/pool.d/www.conf
kata listen=, harus berisi listen = 127.0.0.1:9000

Restart nginx dan php5-fpm 
/etc/init.d/nginx restart
/etc/init.d/php5-fpm restart

UNTUK UBUNTU 12.10 KE ATAS :
REPLACE  127.0.0.1:9000  MENJADI  unix:/var/run/php5-fpm.sock

Upload script php ke folder /usr/share/nginx/www/
saya sudah buat contoh script php nya, bisa download di sini

Konfigurasi ubuntu server menjadi database server dengan PERCONA SERVER

Install percona server 

add key 
apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A

add repository di /etc/apt/sources.list (replace VERSION dengan versi ubuntu)
deb http://repo.percona.com/apt VERSION main
deb-src http://repo.percona.com/apt VERSION main

apt-get update
apt-get install percona-server-server-5.5 percona-server-client-5.5


Konfigurasi percona database agar bisa diakses dari luar

Buat user untuk webServer1 dan webServer2

create user 'webServer1'@'192.168.56.2' identified by 'root';
grant all privileges on *.* to 'webServer1'@'192.168.56.2';

create user 'webServer2'@'192.168.56.3' identified by 'root';
grant all privileges on *.* to 'webServer2'@'192.168.56.3';

Jika kalian menggunakan contoh script yang saya kasih, lakukan perintah sql ini

Buat database
create database webserver;

Buat table
use webserver;
create table mahasiswa(
NPM int(10) not null primary key,
Nama varchar(20) not null,
Alamat varchar(30) not null);

NOTE : LIHAT SCRIPT, JIKA ADA SESUAIKAN HOSTNAME, DBNAME, USERNAME, PASSWORD YANG DIGUNAKAN

Tes Load Balancing, berikut adalah screen shoot nya. Konten dari web server akan sama karna keduanya mengakses database server yang sama.






Selesai, terima kasih sudah membaca artikel saya. Mohon maaf apabila ada kesalahan, mohon dikoreksi jika berkenan.

referensi :

  • mikrotik kungfu kitab 2
  • https://www.howtoforge.com/tutorial/ubuntu-load-balancer-haproxy/
  • https://www.digitalocean.com/community/tutorials/an-introduction-to-haproxy-and-load-balancing-concepts
  • http://stackoverflow.com/questions/25591040/nginx-serves-php-files-as-downloads-instead-of-executing-them
  • https://www.percona.com/doc/percona-server/5.5/installation/apt_repo.html
                                            






Wednesday, June 17, 2015

STREAMING DENGAN FFMPEG DAN NGINX

Oke gan, sebelum mulai membuat streaming server dengan ffmpeg dan nginx ada yang harus dijelaskan terlebih dahulu, diantaranya :
  • Bit rate : besar data sebuah file video, audio atau integrasi audio dan video dalam satu detik.
  • Frame rate : jumlah gambar (frame) sebuah video dalam satu detik.
  • Bitrate berpengaruh pada kualitas gambar, yang berbanding luru dengan jenis codecnya.
  • Codec adalah sebuah coding (bahasa pemrograman) yang membentuk sebuah file video
  • misalnya, pada sebuah video DV PAL, dengan codec Microsoft DV, bit rate nya 25Mbps. Saat video tersebut di convert ke codec MPEG 2, hanya membutuhkan 6Mbps untuk kualitas yang menyerupai (tidak sama persis) dengan kualitas DV. Karena setiap codec memiliki karakteristik kualitas gambar sendiri" (tergantung cara codingnya), maka kita tidak bisa bilang sama persis kualitasnya.
  • Sementara frame rate pada awalnya tergantung media dan lokasinya, dimana :
  • Film : 24 fps 
  • PAL : 25 fps, sistem televisi yang digunakan di Eropa dan daerah bekas jajahanya(Indonesia, Australia, dsb)
  • NTSC : 29,978 fps, sistem televisi yang digunakan oleh Amerika dan negara konsianya (Jepang, dsb)

Selanjutnya kita akan menginstall ffmpeg dan paket" yang dibutuhkan.


Update paket compiler :

sudo apt-get install autoconf automake build-essential libass-dev libfreetype6-dev libgpac-dev libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libx11-dev libxext-dev libxfixes-dev pkg-config texi2html zlib1g-dev

Buat direktori agar mempermudah proses penginstallan :
sudo mkdir ~/souceffmpeg

Compile library video dan audio yang dibutuhkan :

YASM library :
cd ~/sourceffmpeg
wget http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
tar xzvf yasm-1.2.0.tar.gz
cd yasm-1.2.0
./configure
make
sudo make install
sudo make distclean

LIBX264 UNTUK VIDEO CODEC H264
cd ~/sourceffmpeg
wget http://download.videolan.org/pub/x264/snapshots/last_x264.tar.bz2
tar xjvf last_x264.tar.bz2
cd x264-snapshot*
./configure --enable-static
make
sudo make install
sudo make distclean

LIBFDK-AAC UNTUK CODEC AUDIO AAC
cd ~/sourceffmpeg
wget -O fdk-aac.zip https://github.com/mstorsjo/fdk-aac/zipball/master unzip fdk-aac.zip
cd mstorsjo-fdk-aac*
autoreconf -fiv
./configure --disable-shared
make
sudo make install
sudo make distclean

LIBMP3LAME UNTUK CODEC AUDIO MP3
Install terlebih dahulu aplikasi nasm
sudo apt-get install nasm
cd ~/sourceffmpeg
wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
tar xzvf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure --enable-nasm --disable-shared
make
sudo make install
sudo make distclean

LIBOPUS UNTUK CODEC AUDIO OPUS
cd ~/sourceffmpeg
wget http://downloads.xiph.org/releases/opus/opus-1.1.tar.gz
tar xzvf opus-1.1.tar.gz
cd opus-1.1
./configure --disable-shared
make
sudo make install
sudo make distclean

LIBVPX UNTUK CODEC VIDEO WEBM (VP8/VP9)
cd ~/sourceffmpeg
wget http://webm.googlecode.com/files/libvpx-v1.3.0.tar.bz2
tar xjvf libvpx-v1.3.0.tar.bz2
cd libvpx-v1.3.0
./configure --disable-examples
make
sudo make install
sudo make clean

COMPILE FFMPEG
cd ~/sourceffmpeg
wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xjvf ffmpeg-snapshot.tar.bz2
cd ffmpeg
./configure --extra-libs="-ldl" --enable-gpl --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-nonfree --enable-x11grab
make
sudo make install
sudo make distclean
hash -r 

Jika sudah, ketik ffmpeg di terminal. Hasilnya akan seperti ini jika berhasil :

Selanjutnya install nginx dan paket pendukung  :

Install paket pendukung :
sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev

Download dan ekstrak Source nginx :
wget http://nginx.org/download/nginx-1.4.2.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
tar -zxvf nginx-1.4.2.tar.gzunzip master.zip

Masuk direktorik nginx :
cd nginx-1.4.2

Compile nginx :
./configure --add-module=../nginx-rtmp-module-master

$ make
$ sudo make install

Konfiguras nginx :

Edit file /etc/usr/local/nginx/conf/nginx.conf menjadi seperti ini :
worker_processes  1;
events {
    worker_connections  1024;
}
#Konfigurasi Untuk Live Streaming HLS dan Ondemand File pergunakan video format mp4
http {
    server {
        listen      8080;
        location /hls {
            # HLS Live Streaming sumber dari RTMP
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /var/live;
            add_header Cache-Control no-cache;
        }
    location /ond {
            # HLS untuk ondemand Streaming
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp4 ts;
            }
            alias /var/video;
            add_header Cache-Control no-cache;
        }
    }
}
#Streaming Live  RTMP
rtmp {
    server {
        listen 1935;
        chunk_size 4000;
     #Untuk Live Streaming RTMP
      application hls {
            live on;
            hls on;
            hls_path /var/live/hls;
        }
      #Untuk Ondemand Live Streaming RTMP
       application ond {
            play /var/www;
        }
    }
}

Jalankan nginx :
sudo /usr/local/nginx/sbin/nginx
untuk memastikan apakah port 1935 pada nginx berfungsi , ketik
netstat -nltp

Berikut ini sedikit option dari perintah ffmpeg :
  • -acodec aac sets the audio codec (internal AAC encoder)
  • -strict experimental allows use of some experimental codecs (the internal AAC encoder is experimental)
  • -ar 44100 set the audio sample rate
  • -ac 2 specifies two channels of audio
  • -b:a 96k sets the audio bit rate
  • -vcodec libx264 sets the video codec
  • -r 25 set the frame rate
  • -b:v 500k set the video bit rate
  • -f flv says to deliver the output stream in an flv wrapper
Sekarang saatnya kita tes ffmpeg heheheheh 

Pertama saya akan menampilkan sebuah film yaitu "Hello Ghost", dengan format mkv menjadi mp4 :

ffmpeg -i HELLO_GHOST.mkv -vcodec libx264 -s 600x480 -b:v 200k -acodec libfdk_aac -ar 22050 -ac 1 -b:a 16k -f flv rtmp://localhost/hls/testing.mp4

Tampilkan dengan ffplay :
ffplay rtmp://localhost:1935/hls/testing.mp4



Selanjutnya saya akan mencoba input video dari android menggunakan aplikasi "arutcam"


Berikut ini adalah settingan yang saya gunakan di arutcam. Pastikan server dan hp android terubung, 192.168.43.45 adalah ip server, tes adalah nama video/file yang akan di kirim






Tampilkan dengan ffplay :
ffplay rtmp://localhost/hls/tes -> saya mencoba di server jadi localhost



gunakan perintah berikut untuk mengurangi delay :
ffplay rtmp://localhost/hls/tes -analyzeduration 1000

Selanjutnya saya akan mencoba untuk menambahkan logo, logo.png adalah nama logo yg saya gunakan.

input dari android --> ffmpeg --> output. 

rtmp://localhost/hls/tes adalah input
rtmp://localhost/hls/tes1 adalah output yang sudah ditambahkan logo.png

ffmpeg -i rtmp://localhost/hls/tes -i logo.png -vcodec libx264 -acodec libfdk_aac -filter_complex overlay -f flv rtmp://localhost/hls/tes1



Tampilkan dengan ffplay :
ffplay rtmp://localhost/hls/tes1


selesai, mohon maaf apabila ada kesalahan dalam penulisan maupun penjelasan pada postingan saya kali ini

referensi :
http://andrijohandri.blogspot.com/2014/08/konfigurasi-live-streaming-mobile-hls.html
http://andrijohandri.blogspot.com/2014/05/encoder-live-rtmp-dengan-ffmpeg-di.html
http://andrijohandri.blogspot.com/2014/05/streaming-server-rtmp-dengan-nginx.html
https://trac.ffmpeg.org/wiki/StreamingGuide#Latency