Showing posts with label ubuntu server. Show all posts
Showing posts with label ubuntu server. Show all posts

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




Thursday, June 4, 2015

ModSecurity


Apa itu ModSecurity ?, ModSecurity adalah Web Application Firewall (WAF) yang bekerja untuk Apache, Nginx dan IIS. Dengan manambahkan WAF pada web server kita, tentu akan meningkatkan keamanan web server dari serangan cracker yang tidak bertanggung jawab. Di sini saya menggunakan sitem operasi ubuntu server 14.04 LTS 64 bit dan menggunakan apache2 untuk web server nya.

Install apache webserver dan paket pendukung :

sudo apt-get install apache2 php5 php5-xmlrpc php5-mysql php5-gd php5-cli \
php5-curl mysql-client mysql-server

Install dependensi yang dibutuhkan ModSecurity :

sudo apt-get install libxml2 libxml2-dev libxml2-utils \
libaprutil1 libaprutil1-dev

Untuk mengguna 64bit, perlu menambahkan link berikut :

ln -s /usr/lib/x86_64-linux-gnu/libxml2.so /usr/lib/libxml2.so
ln -s /usr/lib/x86_64-linux-gnu/libxml2.so.2 /usr/lib/libxml2.so.2
ln -s /usr/lib/x86_64-linux-gnu/libxml2.so.2.9.1 /usr/lib/libxml2.so.2.9.1

Tes webserver dengan php script yang sudah saya buat (tugas kampus gan hehe), teman" bisa mendownload nya di :


Taruh di /var/www/html/ :

cp rizal.zip /var/www/html

ektrack file zip :

cd /var/www/html/
unzip rizal.zip --> lakukan apt-get install unzip, jika unzip belum terinstall
mv rizal chat --> rename file

Rubah kepemilikan folder :

chown www-data.www-data chat/*

Siapkan database :

mysql -u root -proot mysql < chat/DATABASE/SQL_SCRIPT.sql

Tampilan webserver apache2 :

 Tampilan Login form :


Tampilan login menggunakan user 'rizal' :


Login dengan sql-injection : ' or true --


Install ModSecurity :

apt-get install libapache2-modsecurity

Periksa modul ModSecurity :

apachectl -M | grep --color security

Rename modsecurity.conf :

mv /etc/modsecurity/modsecurity.conf{-recommended,}

restart apache2 :

/etc/init.d/apache2 restart

cek direktorik log apache :

ls -l /var/log/apache2/modsec_audit.log

konfigurasi modsecurity.conf :

vim /etc/modsecurity/modsecurity.conf
temukan SecRuleEngine DetectionOnly menjadi SecRuleEngine On.

Pada SecRuleEngine DetectionOnly ModSecurity hanya mencatat permintaan yang sesuai dengan aturan yang cocok tapi tidak memblokir apa-apa.

Hapus folder /usr/share/modsecurity-crs/ : rm -rf /usr/share/modesecurity-src/

Install OWASP Rule terbaru :

cd /tmp
tar zxvf modsecurity-crs_2.2.5.tar.gz -C /usr/share/modsecurity-crs/
cd /usr/share/modsecurity-crs/
mv modsecurity-crs_2.2.5 modsecurity-crs

Membuat symlinks di dalam directory activated_rules untuk mengaktifkan aturan :

cd /usr/share/modsecurity-crs/activated_rules/
ln -s /usr/share/modsecurity-crs/base_rules/* . --> mengaktifkan semua aturan di base_rules

Load aturan yang berada di activated_rules :

vim /etc/apache2/mods-enabled/security2.conf

Tambahkan aturan berikut di dalam <IfModule security2_module> </IfModule> :

Include "/usr/share/modsecurity-crs/*.conf"
Include "/usr/share/modsecurity-crs/activated_rules/*.conf"

Restart apache2 :

/etc/init.d/apache2 restart

Tes web server : http://192.168.56.1/chat :

Tampilan di atas terjadi karena ada rules/aturan ModSecurity yang aktif, lihat di log :

more /var/log/apache2/modsec_audit.log

hasil :

--c71a265e-H--
Message: Access denied with code 403 (phase 2). Pattern match "^[\\d.:]+$" at REQUEST_HEADERS:Host. [file "/usr/share/modsecurity-crs/activated_rules/m
odsecurity_crs_21_protocol_anomalies.conf"] [line "98"] [id "960017"] [rev "2.2.5"] [msg "Host header is a numeric IP address"] [severity "CRITICAL"] [
tag "PROTOCOL_VIOLATION/IP_HOST"] [tag "WASCTC/WASC-21"] [tag "OWASP_TOP_10/A7"] [tag "PCI/6.5.10"] [tag "http://technet.microsoft.com/en-us/magazine/2
005.01.hackerbasher.aspx"]
Action: Intercepted (phase 2)
Apache-Handler: application/x-httpd-php
Stopwatch: 1433394271606134 4710 (- - -)
Stopwatch2: 1433394271606134 4710; combined=1353, p1=812, p2=389, p3=0, p4=0, p5=151, sr=120, sw=1, l=0, gc=0
Response-Body-Transformed: Dechunked
Producer: ModSecurity for Apache/2.7.7 (http://www.modsecurity.org/); OWASP_CRS/2.2.5.
Server: Apache/2.4.7 (Ubuntu)
Engine-Mode: "ENABLED"

usr/share/modsecurity-crs/activated_rules/modsecurity_crs_21_protocol_anomalies.conf --> adalah rules yang sedang aktif karena kita langsung mengakses host header dengan IP address

Hapus rules :

rm usr/share/modsecurity-crs/activated_rules/modsecurity_crs_21_protocol_anomalies.conf

Restart apache :

/etc/init.d/apache2 restart

Tes webserver :


ModSecurity log : vim /var/log/apache2/modsec_audit.log 


Selesai, mohon maaf jika ada kekurangan pada tutorial kali ini ...
referensi :
http://www.root25.com/2012/11/how-to-install-modsecurity-on-apache-ubuntu12-stepbystep-tutorial.html

http://cyberlearning.web.id/wiki/index.php/ModSecurity:_Instalasi