Friday, October 21, 2016

GeoIP

GeoIP adalah singkatan dari Geolocation IP Adress. Sesuai dengan namanya, GeoIP merupakan suatu metode untuk mengetahui lokasi geografis suatu komputer berdasarkan ip address. Biasanya ip address yang terdaftar pada database dan dapat dilacak adalah ip publik baik ipv4 ataupun ipv6.

GeoIP biasanya digunakan pada sebuah situs untuk mengetahui darimana pengunjung web berasal(traffic analysis). GeoIP ini juga sangat membantu ketika ada orang yang iseng kepada web kita, dan kita ingin melacak darimana ip tersebut berasal.

Lalu bagaimana kita menggunakan/meng-aplikasikan GeoIP ke dalam source code kita?, untungnya maxmind yang menyediakan GeoIP ini menyediakan api client untuk beberapa beberapa bahasa pemrogram seperti :
  • .NET(C#)
  • Java
  • Javascript
  • Perl
  • PHP
  • Python
untuk bahasa pemrograman lain bisa langsung mengakses REST API maxmind sendiri yang hasilnya tentu saja dalam bentuk json. Untuk lebih jelasnya silahkan lihat disini maxmind documentation. Maxmind juga menyediakan user premium alias berbayar untuk fitur yang lebih banyak seperti deteksi anonymous ip, connection type, domain, isp dll.

Pada artikel ini, saya hanya akan memperlihatkan bagaimana menggunakan api client GeoIP ini dengan bahasa Python dan menggunakan internet modem usb dengan kartu 3. Berikut langkah – langkah nya :

  • download geolite free database dari link berikut ini (yang city dengan format Maxmind DB) : http://dev.maxmind.com/geoip/geoip2/geolite2/
  • install api client untuk python : pip install geoip2 (saya menggunakan python3)
  • setelah langkan pertama dan kedua selesai, anda bisa mencoba menggunakan script code python berikut ini :

import geoip2.database

# read mmdb database
reader = geoip2.database.Reader('GeoLite2-City.mmdb')

# assign ip address, example 124.153.33.3
ipAddress = '124.153.33.3'
response = reader.city(ipAddress)

print("IP : "+ipAddress)

# get country name
print("Country : "+response.country.name)

# get city name
print("City : "+response.city.name)

# get Lat and Long
print("Lat : "+str(response.location.latitude))
print("Long : "+str(response.location.longitude))

Ini adalah hasil dari program di atas


Mari kita cari dengan google map berdasarkan latitude dan longitude nya


Hasilnya seperti di atas, mengarah ke kota Bandung dan dekat dengan gedung sate. lalu, apakah itu lokasi komputer saya yang terhubung dengan internet?. Tentu saja bukan, kira" berajarak 3KM dari lokasi asli saya. Sebenarnya ini tergantung anda menggunakan ISP apa, disini saya menggunakan kartu "tri" dimana beberapa provider internet seperti tri contohnya, hanya memberikan ip private kepada client yang kemudian untuk ter koneksi dengan internet akan melalui router yang sudah dikonfigurasi NAT. Jadi ip address di atas yang berlokasi di Bandung dan dekat gedung sate tersebut adalah ip router dari provider tri yang saya gunakan untuk terhubung dengan internet.

untuk lebih jelasnya mengenai api client geoip khususnya yang menggunakan bahasa python, bisa mengujungi situs berikut ini : http://geoip2.readthedocs.io/en/latest/

sekian artikel kali ini, mohon maaf apabila ada kesalahan dari materi yang saya sampaikan. terima kasih sudah membaca.

referensi :
http://geoip2.readthedocs.io/en/latest/
https://docs.nexcess.net/article/what-is-geoip.html

Monday, August 15, 2016

Database Replication (Master to Slave) MySQL

Hallo gengs, sudah lama rasanya blog ini tidak diupdate. Pada tutorial kali ini saya akan membahas cara setup database replication (master to slave) di MySQL. 

Apa itu database replication ?, seperti nama nya database replication berarti membuat replika/copy an dari satu lebih database secara otomatis. Biasanya terdapat istilah database master(sebagai sumber data) dan database slave(sebagai tujuan data).

Terdapat pula beberapa jenis replikasi database yaitu :
  • Dilihat dari arah replikasinya:
    • master to slave -> replikasi ini bersifat 1 arah, hanya dari master menuju slave
    • master to master -> replikasi 2 arah, pada tipe replikasi ini suatu database bisa menjadi database master(sumber data) dan juga menjadi database slave yang berarti menerima data dari database lain.
  • Dari jenis komunikasinya:
    • synchronous -> biasanya digunakan ketika kita membutuhkan real time database database application
    • asynchronous
Kira - kira seperti inilah gambaran replikasi database master to slave maupun master to master

Untuk lebih jelas mengenai jenis komunikasi synchronous dan asynchronous silahkan googling :D

Karna pada tutorial kali ini kita hanya akan membuat "simple database replication" maka saya hanya menggunakan 2 buat database server, satu berperan sebagai master satu lagi berperan sebagai slave dan menggunakan jenis komunikasi asynchronous(default mysql). Kira" seperti ini ilustrasinya :
berikut ip address yang akan saya gunakan pada masing" server
master : 192.168.1.1
slave : 192.168.1.2

NOTE : JIKA TEMAN" MENGGUNAKAN VIRTUALBOX, JANGAN MENG CLONE UNTUK MEMBUAT 2 BUAH SERVER KARENA AKAN MEMILIKI UUID YANG SAMA.

Pertama kita akan mengsetting ip address dikedua server (saya menggunakan ubuntu server 16.04) :



Langkah selanjutnya adalah membuat database di database master dan slave (nama database harus sama) disini database yang saya buat adalah "test" :



Selanjutnya adalah konfigurasi database master letak file konfigurasi mysql di ubuntu 16.04 berada di direktori /etc/mysql/mysq.conf.d/mysqld.cnf edit menjadi seperti dibawah ini (binlog_do_db adalah nama database yang akan di replikasi)  :



restart mysql : /etc/init.d/mysql restart

Masuk kembali ke command line mysql, kali ini kita akan membuat user untuk database replication :


Pada tutorial kali ini replication bekerja berdasarkan log database dan position, setiap ada perubahan pada database "test" (pada kasus ini) nama file dan position akan berubah.

Langkah selanjutnya adalah konfigurasi database slave, letak konfigurasi nya sama seperti pada database master yakni di /etc/mysql/mysq.conf.d/mysqld.cnf, edit menjadi seperti dibawah ini (perhatikan server id harus berbeda dari database master) :


restart mysql : /etc/init.d/mysql restart

Hal terakhir yang harus kita lakukan adalah mengaktifkan database replication pada database slave :


Ketik show slave status; (di slave) untuk melihat apakah replikasi berhasil. coba juga untuk membuat table kemudian memasukan data ke table tersebut(di master) kemudian lihat kembali di database slave.

Demikian tutorial kali ini. Mohon maaf apabila ada kekurangan maupun kesalahan. Harap koreksi jika ada yang salah, terima kasih :)

note : jika terdapat error untuk mysql bisa dilihat di /var/log/mysql/error.log
untuk informasi lebih lanjut mengenai database replication bisa kunjungi link berikut ini :  
http://dev.mysql.com/doc/refman/5.7/en/replication.html

referensi :
http://dev.mysql.com/doc/refman/5.7/en/replication.html
https://www.digitalocean.com/community/tutorials/how-to-set-up-master-slave-replication-in-mysql







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