Instalasi Secure WordPress pada Sistem Operasi Ubuntu

Abstrak

Blog merupakan sebuah situs yang terdiri dari halaman-halaman yang memuat berbagai tulisan dalam format teks yang dapat disisipi gambar dan konten lainnya. Manajemen sistem konten / artikel secara gratis ini tersedia cukup banyak, beberapa diantaranya yang paling populer adalah blogger dan wordpress. Blog digemari banyak orang karena gartis dan kemudahan untuk melakukan konfigurasinya. Namun, seiring perkembangan zaman, sekarang blog menjadi incaran serangan para hacker karena biasanya blog tidak diamankan oleh adminnya. Beberapa contoh serangan terhadap keamanan blog adalah pembobolan akun, SQL injection, Cross-site Scripting, Spaming komentar, Deface, DoS attack, dan masih banyak lagi. Oleh sebab itu pada artikel kali ini akan dibahas mengenai beberapa langkah instalasi wordpress dengan aman pada sistem operasi Ubuntu. Tujuan dari artikel ini adalah agar wordpress yang dibuat dapat terhindar dari serangan-serangan para hacker, walaupun tidak terjamin 100 %.

Secara umum, artikel ini terbagi dalam dua bagian, yaitu bagian 1 menjelaskan instalasi server wordpress dan bagian 2 menjelaskan cara menguatkan pertahanan wordpress (hardening). Bagian 1 diawali dengan proses instalasi Apache, php5, serta Mysql sacara aman dengan membandingkan hash MD5-nya. Berikutnya dijelaskan mengenai proses instalasi wordpress secara aman juga.

Bagian 2 diawali dengan cara mengamankan phpmyadmin. Lalu dijelaskan mengenai cara mengamankan dengan mematikan service yang tidak diperlukan. Selanjutnya akan dijelaskan cara mengecek file log apache. Berikutnya diabahas cara melakukan hashing password. Lalu dijelaskan cara mengaktifkan SSL agar pertukaran data antara server dan client terenkripsi. Selanjutnya akan dijelaskan cara mengaktifkan firewall. Pada kesempatan kali ini, firewall yang digunakan adalah iptables. Berikutnya diabahas cara instalasi SSH dan cara konfigurasinya untuk memberikan akses hanya kepada user tertentu saja.

Pada dasarnya tidak ada standar baku cara mengamankan web server. Pengamanan yang dilakukan akan bergantung dari jenis serangan apa yang ingin diredam. Oleh sebab itu dengan artikel ini diharapkan dapat membantu orang-orang yang ingin mengamankan wordpressnya.

Bagian 1: Instalasi Server WordPress

Proses instalasi merupakan suatu proses yang penting dalam awal pembuatan suatu sistem, oleh karena itu diperlukan suatu keamanan yang dilakukan dari awal instalasi. Untuk mengamankan segala aplikasi desktop yang tidak diperlukan, maka proses instalasi dan download menggunakan Ubuntu server 13.04 yang hanya terdiri dari terminal saja.

Dalam menjaga integritas isi file, download software wordpress dari situs yang terpecaya, dalam hal ini ialah https://wordpress.org. Kemudian, untuk melakukan pengecekan terhadap file wordpress yang telah berhasil di download, dapat digunakan metode menggunakan hash MD5, dimana nilai hash file yang berhasil di download nantinya harus sama dengan hash yang ada pada referensi.

Berikut nilai dari hash yang berasal dari website wordpress.

Gambar a

Gambar 1

Gambar b

Gambar 2

Berikutnya, buka folder dimana terdapat file wordpress-3.7.1.tar.gz, lalu kemudian ketikkan perintah berikut.

md5sum wordpress-3.7.1.tar.gz

Gambar c

Gambar 3

Setelah itu, bandingkan hasil nilai hash5 antara referensi dengan hasil yang berhasil di download pada Ubuntu.  Pada gambar diatas, dapat dilihat bahwa hasil MD5 yang dihasilkan nilainya sama, hal ini menunjukkan bahwa file yang di download sesuai.

Berikutnya dalam membuat webserver perlu dilakukan penginstallan Apache, php5, dan Mysql. Penginstallan dilakukan dengan menggunakan apt-get install. Setelah melakukan apt-get, setiap hasil installan dengan menggunakan cara ini akan masuk ke dalam temporary folder:

/var/cache/apt/archives

Setelah berjalan proses instalasi tersebut, maka setiap file yang masuk ke dalam folder archives diatas akan mempunyai ekstensi file .deb. Deb merupakan ekstensi dari debian software pack age. Kemudian sama seperti cara yang sebelumnya, lakukan pengecekan setiap file Apache, php5, serta Mysql yang telah terinstall tersebut. Pengecekan juga dilakukan dengan menggunakan hash MD5.

Berikut ini, untuk melakukan pengecekan terhadap file Apache, ketikkan perintah berikut.

md5sum apache2_2.2.22-6ubuntu5.1_i386.deb

Gambar d

Gambar 4

Gambar e

Gambar 5

Gambar fGambar 6

Setelah itu, bandingkan hasil nilai hash5 antara referensi dengan hasil yang berhasil di install pada Ubuntu.  Pada gambar diatas, dapat dilihat bahwa hasil MD5 yang dihasilkan nilainya sama, hal ini menunjukkan bahwa file yang di download sesuai.

Berikut ini, untuk melakukan pengecekan terhadap file php5, ketikkan perintah berikut.

md5sum php5_5.4.9-4ubuntu2.3_all.deb

Gambar g

Gambar 7

Gambar h

Gambar 8

Gambar i

Gambar 9

Setelah itu, bandingkan hasil nilai hash5 antara referensi dengan hasil yang berhasil di install pada Ubuntu.  Pada gambar diatas, dapat dilihat bahwa hasil MD5 yang dihasilkan nilainya sama, hal ini menunjukkan bahwa file yang di download sesuai.

Berikut ini, untuk melakukan pengecekan terhadap file Mysql, ketikkan perintah berikut.

md5sum mysql-server_5.5.34-0ubuntu0.13.04.1_all.deb

Gambar j

Gambar 10

Gambar k

Gambar 11

Gambar l

Gambar 12

Setelah itu, bandingkan hasil nilai hash5 antara referensi dengan hasil yang berhasil di install pada Ubuntu.  Pada gambar diatas, dapat dilihat bahwa hasil MD5 yang dihasilkan nilainya sama, hal ini menunjukkan bahwa file yang di download sesuai.

Untuk memeriksa integritas dari file ISO Ubuntu yang diunduh dari internet, nilai MD5 Hash dari file ISO yang diunduh dapat dicocokkan dengan nilai MD5 Hash dari file tersebut pada website resmi Ubuntu. Pada contoh kali ini, digunakan file ISO dari Ubuntu 12.04.1. Cara untuk melakukan penghitungan nilai MD5 Hash adalah dengan mengetikkan perintah sebagai berikut.

 md5sum ubuntu-12.04.1-desktop-i386.iso

Sehingga pada terminal akan muncul nilai MD5 Hash dari file tersebut.

Gambar m

Gambar 13

Selanjutnya, nilai tersebut dicocokkan dengan nilai MD5 Hash file tersebut pada website resmi Ubuntu. Apabila nilainya sama, maka dapat dipastikan bahwa file ISO tersebut terjamin integritasnya.

Gambar n

Gambar 14

Install and Setup Apache2, Php5, Mysql on Ubuntu Server (LAMP)

1. Login sebagai root.

sudo su

Gambar o

Gambar 15

2. Install Mysql 5

apt-get install mysql-server mysql-client

Pada tahap ini akan ditanyakan password untuk root user pada Mysql

Gambar p

 Gambar 16

3. Install Apache2

apt-get install apache2

Gambar q

 Gambar 17

Gambar r

Gambar 18

4. Install PHP5

apt-get install php5 libapache2-mod-php5

Gambar s

Gambar 19

Berikutnya restart Apache2 untuk dapat bekerja dengan PHP5.

Gambar t

Gambar 20

5. Untuk mengetes apakah PHP 5 berjalan dengan baik, buat info.php dalam direktori root “/var/www/”.

nano /var/www/info.php

Didalam info.php, masukkan kode sebagai berikut:

Gambar u

Gambar 21

Kemudian masuk kedalam browser kembali, lalu ketikkan IP server/info.php.

Gambar v

Gambar 22

6. Untuk mendapatkan support Mysql dalam PHP 5, install packages berikut:

apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

Gambar w

Gambar 23

Kemudian restart Apache2 servis:

/etc/init.d/apache2 restart

Gambar x

 Gambar 24

7. (Opsional) Install phpMyAdmin sebagai web interface database Mysql.

Gambar y

Gambar 25

Install WordPress on Ubuntu 13.04 Server

Untuk melakukan instalasi WordPress, pertama kali lakukan login Ubuntu server sebagai root, kemudian lakukan langkah-langkah berikut ini:

1. Login Mysql sebagai root user.

Mysql –u root –p

Gambar z

Gambar 26

2. Membuat database. Ubah database-name menjadi nama database yang diinginkan.

CREATE DATABASE database-name;

3. Membuat user. Ubah database-user menjadi nama user yang diinginkan.

CREATE USER database-user@localhost;

4. Membuat password. Ubah password-here menjadi password yang diinginkan.

SET PASSWORD FOR database-user@localhost= PASSWORD(“password-here”);

Gambar aa

Gambar 27

5. Memberikan privileges kepada user baru.

GRANT ALL PRIVILEGES ON database-name.* TO database-user@localhost IDENTIFIED BY ‘password-here’;

Gambar ab

Gambar 28

6. Kemudian refresh dan exit Mysql.

Normal
0

false
false
false

EN-US
X-NONE
X-NONE

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:”Table Normal”;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:””;
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin-top:0in;
mso-para-margin-right:0in;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0in;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:”Calibri”,”sans-serif”;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:”Times New Roman”;
mso-bidi-theme-font:minor-bidi;}
FLUSH PRIVILEGES;

exit

7. Download dan ekstrak software wordpress terbaru.

Normal
0

false
false
false

EN-US
X-NONE
X-NONE

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:”Table Normal”;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:””;
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin-top:0in;
mso-para-margin-right:0in;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0in;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:”Calibri”,”sans-serif”;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:”Times New Roman”;
mso-bidi-theme-font:minor-bidi;}
wget http://wordpress.org/latest.tar.gz

Normal
0

false
false
false

EN-US
X-NONE
X-NONE

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:”Table Normal”;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:””;
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin-top:0in;
mso-para-margin-right:0in;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0in;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:”Calibri”,”sans-serif”;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:”Times New Roman”;
mso-bidi-theme-font:minor-bidi;}
tar -xzvf latest.tar.gz

Gambar ac

Gambar 29

8. Berikutnya copy konfigurasi sample file untuk membuat backup dengan cara sebagai berikut:

 cd wordpress && cp wp-config-sample.php wp-config.php

9. Kemudian lakukan edit pada konfigurasi file dengan cara mengetikkan perintah berikut ini:

nano wp-config.php

10. Kemudian lakukan edit pada file konfigurasi, dimana dilakukan perubahan terhadap database-name, database-user, dan password-here yang telah dibuat sebelumnya.

Gambar ad

Gambar 30

11. Berikutnya untuk mengecek database apa saja yang telah dibuat, dapat dilakukan dengan mengetikkan perintah berikut:

show databases

Gambar aeGambar 31

Selanjutnya dilakukan restart apache dengan memberikan perintah “service apache2 restart”.

12. Pada web browser, buka “localhost/wordpress” sehingga muncul halaman muka dari WordPress.

Selanjutnya dilakukan pembuatan web serta akun admin blog dengan mengisi form yang tersedia.

Gambar af

Gambar 32

(https://assets.digitalocean.com/articles/community/Wordpress-FinishInstall.png)

13. Agar blog dapat diakses oleh orang lain, URL web diubah dengan suatu IP statik yaitu dengan memilih menu Dashboard, klik Settings, klik General, kemudian mengubah WordPress Address (URL) dan Site Address (URL) dengan “[IP address]/wordpress”.

Gambar agGambar 33

14. Untuk menambahkan user baru pada wordpress yang berasal dari client, pertama-tama server perlu melakukan setting terlebih dahulu pada bagian dashboard dari wordpress.

Gambar ahGambar 34

15. Berikut merupakan tampilan wordpress yang telah dibuat Rizka Widyarini dan Mukti Winanda dari dua server yang berbeda.

Gambar ai

 Gambar 35

Gambar aj

Gambar 36

16. Apabila pada web browser dimasukkan alamat http://167.205.67.188/wp-login.php?action=register, akan muncul tampilan sebagai berikut untuk melakukan log in dan sign up akun baru.

Gambar akGambar 37

Bagian 2: Keamanan

Tujuan dari mengamankan adalah agar menghindari server dari akses orang yang tidak berkepentingan dan vulnerabilites dari server tidak dapat dimanfaatkan orang yang tidak berkepentingan.

2.1 Mengamankan PHPMYADMIN

Alamat “localhost/phpmyadmin” pada awalnya dapat diakses oleh semua alamat ip dimana seharusnya database MYSQL tidak boleh diakses oleh user maka diperlukan cara untuk mengamankan agar tidak dapat dimanfaatkan oleh orang yang tidak berkepentingan. Cara untuk mengamankannya adalah sebagai berikut ini.

2.1.1 Kondisi Sebelum Diamankan

 15a

Gambar 38

Dari gambar diatas dapat dilihat bahwa sebelum diamankan user dapat mengakses phpmyadmin dengan membuka alamat “192.168.1.19/phpmyadmin”.

2.1.2 Proses Mengamankan

Untuk melakukan mengamankan “localhost/phpmyadmin” agar hanya dapat diakses di localhost adalah sebagai berikut:

1. Masuk ke direktori “/opt/lampp/etc/extra/httpd-xampp.conf”

2. Edit file httpd-xampp.conf dengan command “sudo gedit httpd-xampp.conf” dan ubah file tersebut menjadi :

#<IfDefine PHP4>

#LoadModule php4_module        modules/libphp4.so

#</IfDefine>

#<IfDefine PHP5>

#LoadModule php5_module        modules/libphp5.so

#</IfDefine>

# We will enable it by default

#<IfDefine PHP>

LoadModule php5_module        modules/libphp5.so

#</IfDefine>

LoadModule perl_module        modules/mod_perl.so

Alias /phpmyadmin “/opt/lampp/phpmyadmin”

Alias /phpsqliteadmin “/opt/lampp/phpsqliteadmin”

# since XAMPP 1.4.3

<Directory “/opt/lampp/phpmyadmin”>

AllowOverride AuthConfig Limit

Require all granted

Allow from 127.0.0.1/8

</Directory>

<Directory “/opt/lampp/phpsqliteadmin”>

AllowOverride AuthConfig Limit

Order allow,deny

#Allow from all

Allow from 127.0.0.1/8

</Directory>

# since LAMPP 1.0RC1

AddType application/x-httpd-php .php .php3 .php4

XBitHack on

# since 0.9.8 we’ve mod_perl

<IfModule mod_perl.c>

AddHandler perl-script .pl

PerlHandler ModPerl::PerlRunPrefork

PerlOptions +ParseHeaders

PerlSendHeader On

</IfModule>

# demo for mod_perl responsehandler

#PerlModule Apache::CurrentTime

#<Location /time>

#      SetHandler modperl

#      PerlResponseHandler Apache::CurrentTime

#</Location>

# AcceptMutex sysvsem is default but on some systems we need this

# thanks to jeff ort for this hint

#AcceptMutex flock

#LockFile /opt/lampp/logs/accept.lock

# this makes mod_dbd happy – oswald, 02aug06

# mod_dbd doesn’t work in Apache 2.2.3: getting always heaps of “glibc detected *** corrupted double-linked list” on shutdown – oswald, 10sep06

#DBDriver sqlite3

#

# New XAMPP security concept

#

<LocationMatch “^/(?i:(?:xampp|security|licenses|phpmyadmin|webalizer|server-status|server-info))”>

Order deny,allow

Deny from all

Allow from 127.0.0.1/8

#Allow from ::1 127.0.0.0/8

#fc00::/7 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16

#fe80::/10 169.254.0.0/16

ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var

</LocationMatch>

3. Restart service lamppnya. Nanti yang akan terjadi adalah phpmyadmin hanya bisa dibuka di “localhost”.

 2.1.3 Sesudah Mengamankan

Hasil yang didapatkan setelah mengamankan adalah sebagai berikut :

16a

Gambar 39

Dari gambar diatas dapat kita lihat bahwa user yang ingin mengakses alamat “192.168.1.19/phpmyadmin” tidak diperbolehkan karena hak akses phpmyadmin telah kita batasi.

17a

Gambar 40

Dari gambar diatas dapat kita lihat bahwa “localhost/phpmyadmin” hanya dapat diakses pada server.

 2.2 Mengamankan Port Server dengan  Mematikan Service yang tidak diperlukan

Pengamanan port server diperlukan agar port yang tidak dipakai service tidak digunakan oleh orang yang tidak berkepentingan untuk melakukan tindakan yang tidak diharapkan dengan memanfaatkan vulnerabilities server. Cara untuk mengamankannya adalah sebagai berikut.

2.2.1 Sebelum Diamankan

2.2.1.1 Server

Untuk mengecek port yang terbuka, kita gunakan perintah:

netstat -ntl

  18a

Gambar 41

Dari gambar di atas dapat dilihat bahwa:

  • Port 80 (http) dapat diakses oleh semua ip address.
  • Port 443 (https) dapat diakses oleh semua IP.
  • Port 631 memang harus dibuka karena protocol UDP/TCP memerlukan akses terhadap port tersebut.
  • Port 21(ftp) dapat diakses oleh semua ip.

2.2.1.2 User

Sebelum Diamankan dapat dilihat dari sisi user bahwa port yang terbuka adalah 21, 80, 443. Port yang kita butuhkan untuk aktif hanya 80 dan 443. Jadi kita harus mematikan service yang menyebabkan port 21 terbuka.

 19a

Gambar 42

2.2.2 Proses Mengamankan

1. Ubah file autoboot service LAMPP yang telah dibuat dengan perintah “sudo gedit /etc/init.d/lampp” menjadi :

#!/bin/bash

/opt/lampp/lampp startapache

/opt/lampp/lampp startmysql

2.   Kemudian setiap kali reboot maka yang hanya dijalankan hanya service apache dan MYSQLnya saja.

 2.2.3 Sesudah Diamankan

2.2.3.1 Server

20a

Gambar 42

 2.2.3.2 User

 21a

Gambar 43

Dari kedua gambar pada bagian 2.2.3 kita dapat melihat bahwa port yang aktif hanya port 80 dan 443 dan dapat dikatakan bahwa port 21 (ftp) yang tidak digunakan telah diamankan untuk mengurangi vulnerabilities server (prinsip “Least Privilege”).

2.4 Checking Logfile pada Apache

Secara default log pada LAMPP sudah aktif jadi tidak diperlukan lagi pengaturan untuk mengaktifkan log. Log merupakan bagian yang penting untuk dicek berfungsi atau tidaknya karena dari log kita dapat mendeteksi jenis-jenis error atau siapa saja yang masuk ke dalam server. Log terdapat pada bagian “/opt/lampp/logs”.

 22a

Gambar 43

Gambar diatas merupakan contoh dari access log pada server apache. Access log memberikan informasi tentang user dengan ip berapa saja yang melakukan koneksi dan mencatat kegiatan apa saja yang dilakukan.

24a

Gambar 44

Gambar diatas merupakan contoh dari error log pada service LAMPP. Error_log membantu dalam mendebugging service yang tidak jalan.

2.5 Hashing Password

Password merupakan salah satu hal yang penting dalam keamanan informasi. Oleh karena itu agar password menjadi rahasia dan hanya diketahui oleh pemilik id tersebut saja maka diperlukan hashing agar administrator juga tidak tahu isi dari password aslinya. Secara default aplikasi wordpress telah melakukan hashing password pada database MYSQL seperti gambar dibawah ini.

24a

Gambar 45

 2.6 Enabling SSL

Fungsi dari mengaktifkan SSL adalah agar tidak pertukaran data antara server dan client terenkripsi. Berikut ini adalah cara-cara untuk menghidupkan protokol SSL server.

2.6.1 Sebelum Diamankan

25a

Gambar 46

Dapat dilihat pada gambar diatas bahwa protokol yang digunakan masih http biasa.

2.6.2 Proses Mengamankan

1. Download Plugin SSL dari website http://wordpress.org/plugins/wordpress-https/installation/

2. Kemudian extract file yang didownload tersebut

3.  Pindahkan file tersebut ke direktori “/opt/lampp/htdocs/wordpress/wp-content/plugins” dengan perintah “mv direktori_file /opt/lampp/htdocs/wordpress/wp-content/plugins“.

4. Kemudian buka “localhost” kemudian masukkan password admin anda.

5. Klik “Installed Plugins” pada menu seperti gambar dibawah ini.

 26a

Gambar 47

 6. Enable “Wordpress HTTPS” seperti gambar dibawah ini.

27a

Gambar 48

7. Lalu klik “Apply”.

8. Kemudian klik gambar gembok seperti gambar di bawah ini untuk melakukan konfigurasi SSLnya.

28a

Gambar 49

9. Check semua pilihan dan “Save Changes”.

10. Edit file httpd-ssl.conf dengan cara “gedit /opt/lampp/httpd-ssl.conf” kemudian file tersebut ubah menjadi :

# This is the Apache server configuration file providing SSL support.

# It contains the configuration directives to instruct the server how to

# serve pages over an https connection. For detailed information about these

# directives see <URL:http://httpd.apache.org/docs/trunk/mod/mod_ssl.html>

#

# Do NOT simply read the instructions in here without understanding

# what they do.  They’re here only as hints or reminders.  If you are unsure

# consult the online docs. You have been warned.

#

# Required modules: mod_log_config, mod_setenvif, mod_ssl,

#          socache_shmcb_module (for default value of SSLSessionCache)

#

# Pseudo Random Number Generator (PRNG):

# Configure one or more sources to seed the PRNG of the SSL library.

# The seed data should be of good random quality.

# WARNING! On some platforms /dev/random blocks if not enough entropy

# is available. This means you then cannot use the /dev/random device

# because it would lead to very long connection times (as long as

# it requires to make more entropy available). But usually those

# platforms additionally provide a /dev/urandom device which doesn’t

# block. So, if available, use this one instead. Read the mod_ssl User

# Manual for more details.

#

#SSLRandomSeed startup file:/dev/random  512

#SSLRandomSeed startup file:/dev/urandom 512

#SSLRandomSeed connect file:/dev/random  512

#SSLRandomSeed connect file:/dev/urandom 512

#

# When we also provide SSL we have to listen to the

# standard HTTP port (see above) and to the HTTPS port

#

# Note: Configurations that use IPv6 but not IPv4-mapped addresses need two

#       Listen directives: “Listen [::]:443” and “Listen 0.0.0.0:443”

#

Listen 443

##

##  SSL Global Context

##

##  All SSL configuration in this context applies both to

##  the main server and all SSL-enabled virtual hosts.

##

#   SSL Cipher Suite:

#   List the ciphers that the client is permitted to negotiate.

#   See the mod_ssl documentation for a complete list.

SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5

#   Speed-optimized SSL Cipher configuration:

#   If speed is your main concern (on busy HTTPS servers e.g.),

#   you might want to force clients to specific, performance

#   optimized ciphers. In this case, prepend those ciphers

#   to the SSLCipherSuite list, and enable SSLHonorCipherOrder.

#   Caveat: by giving precedence to RC4-SHA and AES128-SHA

#   (as in the example below), most connections will no longer

#   have perfect forward secrecy – if the server’s key is

#   compromised, captures of past or future traffic must be

#   considered compromised, too.

#SSLCipherSuite RC4-SHA:AES128-SHA:HIGH:MEDIUM:!aNULL:!MD5

#SSLHonorCipherOrder on

#   Pass Phrase Dialog:

#   Configure the pass phrase gathering process.

#   The filtering dialog program (`builtin’ is an internal

#   terminal dialog) has to provide the pass phrase on stdout.

SSLPassPhraseDialog  builtin

 

#   Inter-Process Session Cache:

#   Configure the SSL Session Cache: First the mechanism

#   to use and second the expiring timeout (in seconds).

#SSLSessionCache         “dbm:/opt/lampp/logs/ssl_scache”

SSLSessionCache        “shmcb:/opt/lampp/logs/ssl_scache(512000)”

SSLSessionCacheTimeout  300

##

## SSL Virtual Host Context

##

<VirtualHost _default_:443>

#   General setup for the virtual host

#DocumentRoot “/opt/lampp/htdocs”

DocumentRoot “/opt/lampp/htdocs/wordpress”

ServerName 192.168.1.19:443

ServerAdmin you@example.com

ErrorLog “/opt/lampp/logs/error_log”

TransferLog “/opt/lampp/logs/access_log”

#   SSL Engine Switch:

#   Enable/Disable SSL for this virtual host.

SSLEngine on

#   Server Certificate:

#   Point SSLCertificateFile at a PEM encoded certificate.  If

#   the certificate is encrypted, then you will be prompted for a

#   pass phrase.  Note that a kill -HUP will prompt again.  Keep

#   in mind that if you have both an RSA and a DSA certificate you

#   can configure both in parallel (to also allow the use of DSA

#   ciphers, etc.)

#   Some ECC cipher suites (http://www.ietf.org/rfc/rfc4492.txt)

#   require an ECC certificate which can also be configured in

#   parallel.

SSLCertificateFile “/opt/lampp/etc/ssl.crt/server.crt”

#SSLCertificateFile “/opt/lampp/etc/server-dsa.crt”

#SSLCertificateFile “/opt/lampp/etc/server-ecc.crt”

#   Server Private Key:

#   If the key is not combined with the certificate, use this

#   directive to point at the key file.  Keep in mind that if

#   you’ve both a RSA and a DSA private key you can configure

#   both in parallel (to also allow the use of DSA ciphers, etc.)

#   ECC keys, when in use, can also be configured in parallel

SSLCertificateKeyFile “/opt/lampp/etc/ssl.key/server.key”

#SSLCertificateKeyFile “/opt/lampp/etc/server-dsa.key”

#SSLC

#   Server Certificate Chain:

#   Point SSLCertificateChainFile at a file containing the

#   concatenation of PEM encoded CA certificates which form the

#   certificate chain for the server certificate. Alternatively

#   the referenced file can be the same as SSLCertificateFile

#   when the CA certificates are directly appended to the server

#   certificate for convenience.

#SSLCertificateChainFile “/opt/lampp/etc/server-ca.crt”

#   Certificate Authority (CA):

#   Set the CA certificate verification path where to find CA

#   certificates for client authentication or alternatively one

#   huge file containing all of them (file must be PEM encoded)

#   Note: Inside SSLCACertificatePath you need hash symlinks

#         to point to the certificate files. Use the provided

#         Makefile to update the hash symlinks after changes.

#SSLCACertificatePath “/opt/lampp/etc/ssl.crt”

#SSLCACertificateFile “/opt/lampp/etc/ssl.crt/ca-bundle.crt”

#   Certificate Revocation Lists (CRL):

#   Set the CA revocation path where to find CA CRLs for client

#   authentication or alternatively one huge file containing all

#   of them (file must be PEM encoded).

#   The CRL checking mode needs to be configured explicitly

#   through SSLCARevocationCheck (defaults to “none” otherwise).

#   Note: Inside SSLCARevocationPath you need hash symlinks

#         to point to the certificate files. Use the provided

#         Makefile to update the hash symlinks after changes.

#SSLCARevocationPath “/opt/lampp/etc/ssl.crl”

#SSLCARevocationFile “/opt/lampp/etc/ssl.crl/ca-bundle.crl”

#SSLCARevocationCheck chain

#   Client Authentication (Type):

#   Client certificate verification type and depth.  Types are

#   none, optional, require and optional_no_ca.  Depth is a

#   number which specifies how deeply to verify the certificate

#   issuer chain before deciding the certificate is not valid.

#SSLVerifyClient require

#SSLVerifyDepth  10

#   Access Control:

#   With SSLRequire you can do per-directory access control based

#   on arbitrary complex boolean expressions containing server

#   variable checks and other lookup directives.  The syntax is a

#   mixture between C and Perl.  See the mod_ssl documentation

#   for more details.

#<Location />

#SSLRequire (    %{SSL_CIPHER} !~ m/^(EXP|NULL)/

#            and %{SSL_CLIENT_S_DN_O} eq “Snake Oil, Ltd.”

#            and %{SSL_CLIENT_S_DN_OU} in {“Staff”, “CA”, “Dev”}

#            and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5

#            and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20       )

#           or %{REMOTE_ADDR} =~ m/^192.76.162.[0-9]+$/

#</Location>

#   SSL Engine Options:

#   Set various options for the SSL engine.

#   o FakeBasicAuth:

#     Translate the client X.509 into a Basic Authorisation.  This means that

#     the standard Auth/DBMAuth methods can be used for access control.  The

#     user name is the `one line’ version of the client’s X.509 certificate.

#     Note that no password is obtained from the user. Every entry in the user

#     file needs this password: `xxj31ZMTZzkVA’.

#   o ExportCertData:

#     This exports two additional environment variables: SSL_CLIENT_CERT and

#     SSL_SERVER_CERT. These contain the PEM-encoded certificates of the

#     server (always existing) and the client (only existing when client

#     authentication is used). This can be used to import the certificates

#     into CGI scripts.

#   o StdEnvVars:

#     This exports the standard SSL/TLS related `SSL_*’ environment variables.

#     Per default this exportation is switched off for performance reasons,

#     because the extraction step is an expensive operation and is usually

#     useless for serving static content. So one usually enables the

#     exportation for CGI and SSI requests only.

#   o StrictRequire:

#     This denies access when “SSLRequireSSL” or “SSLRequire” applied even

#     under a “Satisfy any” situation, i.e. when it applies access is denied

#     and no other module can change it.

#   o OptRenegotiate:

#     This enables optimized SSL connection renegotiation handling when SSL

#     directives are used in per-directory context.

#SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire

<FilesMatch “.(cgi|shtml|phtml|php)$”>

SSLOptions +StdEnvVars

</FilesMatch>

<Directory “/opt/lampp/cgi-bin”>

SSLOptions +StdEnvVars

</Directory>

#   SSL Protocol Adjustments:

#   The safe and default but still SSL/TLS standard compliant shutdown

#   approach is that mod_ssl sends the close notify alert but doesn’t wait for

#   the close notify alert from client. When you need a different shutdown

#   approach you can use one of the following variables:

#   o ssl-unclean-shutdown:

#     This forces an unclean shutdown when the connection is closed, i.e. no

#     SSL close notify alert is sent or allowed to be received.  This violates

#     the SSL/TLS standard but is needed for some brain-dead browsers. Use

#     this when you receive I/O errors because of the standard approach where

#     mod_ssl sends the close notify alert.

#   o ssl-accurate-shutdown:

#     This forces an accurate shutdown when the connection is closed, i.e. a

#     SSL close notify alert is send and mod_ssl waits for the close notify

#     alert of the client. This is 100% SSL/TLS standard compliant, but in

#     practice often causes hanging connections with brain-dead browsers. Use

#     this only for browsers where you know that their SSL implementation

#     works correctly.

#   Notice: Most problems of broken clients are also related to the HTTP

#   keep-alive facility, so you usually additionally want to disable

#   keep-alive for those clients, too. Use variable “nokeepalive” for this.

#   Similarly, one has to force some clients to use HTTP/1.0 to workaround

#   their broken HTTP/1.1 implementation. Use variables “downgrade-1.0” and

#   “force-response-1.0” for this.

BrowserMatch “MSIE [2-5]”

nokeepalive ssl-unclean-shutdown

downgrade-1.0 force-response-1.0

#   Per-Server Logging:

#   The home of a custom SSL log file. Use this when you want a

#   compact non-error SSL logfile on a virtual host basis.

CustomLog “/opt/lampp/logs/ssl_request_log”

“%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x “%r” %b”

</VirtualHost>

 

10. Kemudian untuk menguji SSL yang dibuat dengan menggunakan alamat https://192.168.1.19/wp-login.php?redirect_to=https%3A%2F%2F192.168.1.19%2Fwp-admin%2F&reauth=1”.

11. Akan keluar gambar seperti dibawah ini dan pilih “Proceed anyway”.

29a

Gambar 50

 2.6.3 Sesudah Diamankan

30a

Gambar 51

Dari gambar diatas dapat dilihat bahwa pada saat login pada user telah terkonfigurasi dengan protokol SSL.

2.7 Firewall

Firewall merupakan bagian penting untuk pengamanan jaringan sehingga server harus diinstall firewall agar dapat memfilter yang tidak diijinkan untuk dilewati agar tidak terjadi insiden yang tidak diharapkan. Firewall yang saya gunakan untuk server ubuntu ini adalah iptables. Cara untuk melakukan setting firewall adalah sebagai berikut ini.

2.7.1 Sebelum Pemasangan Firewall

ICMP Protocol Active

 31a

Gambar 52

Dari gambar diatas dapat dilihat bahwa paket ICMP masih aktif sehingga ada kemungkinan server dapat di DOS attack.

 Null Scanning Scanning Active 32a

Gambar 53

Dari gambar diatas dapat kita lihat bahwa port scanning yang dilakukan dengan nmap berhasil yaitu port yang active pada saat ini adalah port 80 (HTTP), 443 (SSL), dan port 22 (SSH).

2.7.2 Proses Pemasangan Firewall

1. Edit file “/etc/rc.local” dengan perintah “gedit /etc/rc.local

2. Kemudian masukkan rules dibawah ini di dalam filenya.

#!/bin/sh -e

#

# rc.local

#

# This script is executed at the end of each multiuser runlevel.

# Make sure that the script will “exit 0” on success or any other

# value on error.

#

# In order to enable or disable this script just change the execution

# bits.

#

# By default this script does nothing.

#Allow HTTP,HTTPS,SSH Packet

iptables -A INPUT -i eth0 -p tcp -m state –state NEW -m multiport –sports ssh,http,https -j ACCEPT

 

#Drop ICMP Packet

iptables -A INPUT -p icmp -j DROP

iptables -A OUTPUT -p icmp -j DROP

 

#Block Port Scan

#iptables -A port-scan -p tcp –tcp-flags SYN,ACK,FIN,RST RST -m limit –limit 1/s -j RETURN

#iptables -A port-scan -p tcp –tcp-flags SYN,ACK,FIN,RST RST -m limit –limit 1/s -j RETURN

 

#Get log file

#iptables -N LOGGING

#iptables -A INPUT -j LOGGING

#iptables -A LOGGING -m limit –limit 2/min -j LOG –log-prefix “IPTables Packet Dropped: ” –log-level 7

 

#Block SYN packet CHeck

iptables -A INPUT -p tcp ! –syn -m state –state NEW -j DROP

 

#Block Force Fragments Packets Check

iptables -A INPUT -f -j DROP

 

#Block Malformed XMAS Packet

iptables -A INPUT -p tcp –tcp-flags ALL ALL -j DROP

 

#Drop all Null packets

iptables -A INPUT -p tcp –tcp-flags ALL NONE -j DROP

 

exit 0

 

3. Gunakan perintah “sudo iptables -F” untuk menghapus rule dari iptables.

4. Gunakan perintah “/etc/rc.local restart” untuk merestart rule yang telah diubah.

5. Untuk melihat rules dari iptables yang telah dibuat gunakan perintah “iptables –L –n”.

6. Kemudian start service iptables dengan perintah “sudo service iptables-persistent start”. Service akan automatically di load pada saat awal booting dari sistem operasi.

2.7.3 Sesudah Pemasangan Firewall

ICMP Packet Filtering

33a

Gambar 54

Gambar diatas menunjukan bahwa paket ICMP telah didenied oleh filtering firewall.

Null Scanning Filtering

Perintah untuk melakukan Null scanning adalah “nmap –v SN 192.168.1.1934a

Gambar 55

Dari gambar diatas dapat dilihat bahwa scanning Null telah tidak dapat dilakukan lagi karena telah difiltering oleh firewall.

2.8 Install SSH dan Pengaturan SSH

SSH merupakan digunakan untuk melakukan remote login ke dalam suatu server. Pengamanan yang dilakukan adalah dengan memberikan user tertentu yang dapat mengakses servernya. Cara install ssh adalah sebagai berikut ini.

1. Install SSH Server di Ubuntu Desktop dengan menggunakan perintah “sudo apt-get install “openssh-server”.

2. Konfigurasi file sshnya dengan perintah “sudo nano /etc/ssh/sshd_config”.

3. Kemudian lakukan konfigurasi seperti tabel dibawah ini.

# Package generated configuration file

# See the sshd_config(5) manpage for details

# What ports, IPs and protocols we listen for

Port 22

AllowUsers chandra

# Use these options to restrict which interfaces/protocols sshd will bind to

#ListenAddress ::

#ListenAddress 0.0.0.0

Protocol 2

# HostKeys for protocol version 2

HostKey /etc/ssh/ssh_host_rsa_key

HostKey /etc/ssh/ssh_host_dsa_key

HostKey /etc/ssh/ssh_host_ecdsa_key

#Privilege Separation is turned on for security

UsePrivilegeSeparation yes

# Lifetime and size of ephemeral version 1 server key

KeyRegenerationInterval 3600

ServerKeyBits 768

# Logging

SyslogFacility AUTH

LogLevel INFO

# Authentication:

LoginGraceTime 120

PermitRootLogin yes

StrictModes yes

RSAAuthentication yes

PubkeyAuthentication yes

#AuthorizedKeysFile  %h/.ssh/authorized_keys

# Don’t read the user’s ~/.rhosts and ~/.shosts files

IgnoreRhosts yes

# For this to work you will also need host keys in /etc/ssh_known_hosts

RhostsRSAAuthentication no

# similar for protocol version 2

HostbasedAuthentication no

# Uncomment if you don’t trust ~/.ssh/known_hosts for RhostsRSAAuthentication

#IgnoreUserKnownHosts yes

 

# To enable empty passwords, change to yes (NOT RECOMMENDED)

PermitEmptyPasswords no

 

# Change to yes to enable challenge-response passwords (beware issues with

# some PAM modules and threads)

ChallengeResponseAuthentication no

# Change to no to disable tunnelled clear text passwords

#PasswordAuthentication yes

# Kerberos options

#KerberosAuthentication no

#KerberosGetAFSToken no

#KerberosOrLocalPasswd yes

#KerberosTicketCleanup yes

# GSSAPI options

#GSSAPIAuthentication no

#GSSAPICleanupCredentials yes

X11Forwarding yes

X11DisplayOffset 10

PrintMotd no

PrintLastLog yes

TCPKeepAlive yes

#UseLogin no

#MaxStartups 10:30:60

#Banner /etc/issue.net

# Allow client to pass locale environment variables

AcceptEnv LANG LC_*

Subsystem sftp /usr/lib/openssh/sftp-server

# Set this to ‘yes’ to enable PAM authentication, account processing,

# and session processing. If this is enabled, PAM authentication will

# be allowed through the ChallengeResponseAuthentication and

# PasswordAuthentication.  Depending on your PAM configuration,

# PAM authentication via ChallengeResponseAuthentication may bypass

# the setting of “PermitRootLogin without-password”.

# If you just want the PAM account and session checks to run without

# PAM authentication, then enable this but set PasswordAuthentication

# and ChallengeResponseAuthentication to ‘no’.

UsePAM yes

4. Buatlah user dengan nama “chandra” seperti gambar dibawah ini dengan mengetikkan perintah “adduser chandra”. 35a

Gambar 56

 5. Ikutin langkah-langkah seperti mengisi password dan lainnya.

6. Kemudian berikan perintah “service ssh start”. Service ssh akan selalu diload pada awal booting dari sistem operasinya. Kemudian buka putty untuk melakukan remote access.

7. Masukkan ip address server “192.168.1.19” dan buat nama saved sessions apa saja. Lalu tekan “Open” pada bagian bawah.

 36a

Gambar 57

8. Tekan “Yes” untuk melakukan instalasi RSA key pada client.

37a

Gambar 58

9. Kemudian masukkan username dan password dengan username chandra yang telah buat seperti gambar dibawah ini.

38a

Gambar 59

10. Username yang dapat dimasukan hanyalah username “chandra” karena di dalam file “/etc/ssh/sshd_config” kita telah melakukan pengaturan “AllowUsers chandra” sehingga hanya user dengan nama chandra yang diperbolehkan untuk login pada SSH. Berikut ini adalah jika login dengan username milik ardy maka tidak akan dapat melakukan remote login.

39a

Gambar 60

Dimana jika tidak dilakukan pengaturan tersebut hasilnya adalah sebagai berikut ini.

40a

Gambar 61

11. Dengan begitu berarti kita telah mengamankan server karena hanya user biasa yang dapat melakukan login dengan SSH.

 

Referensi:

  1. https://help.ubuntu.com/community/HowToMD5SUM
  2. http://serverfault.com/questions/136458/why-am-i-getting-403-forbidden-after-enabling-https-for-apache-on-mac-os-x
  3. http://wordpress.org/plugins/wordpress-https/installation/
  4. http://www.howtogeek.com/howto/ubuntu/change-ubuntu-server-from-dhcp-to-a-static-ip-address/
  5. http://ubuntuforums.org/showthread.php?t=1933974
  6. https://bbs.archlinux.org/viewtopic.php?pid=645922
  7. https://www.digitalocean.com/community/articles/how-to-set-up-a-firewall-using-ip-tables-on-ubuntu-12-04
  8. http://www.liberiangeek.net/2012/03/enable-ssh-secure-shell-in-ubuntu-12-04-precise-pangolin/
  9. http://ubuntuforums.org/showthread.php?t=159661
  10. http://www.techrepublic.com/blog/10-things/10-iptables-rules-to-help-secure-your-linux-box/

Artikel ini dibuat oleh:

  1. Rizka Widyarini-23213018
  2. Ardy Pratama-23213056
  3. Muhammad Erza Aminanto-23213058
  4. Harry Chandra-23213066
  5. Sundari Mega-23213069
  6. Dea Rahmatia-23213084
  7. Mukti Winanda-23213094
  8. Pertiwi Sapta Rini-23213095
  9. Alissa Ully Ashar-23213129

Normal
0

false
false
false

EN-US
X-NONE
X-NONE

/* Style Definitions */
table.MsoNormalTable
{mso-style-name:”Table Normal”;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:””;
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin-top:0in;
mso-para-margin-right:0in;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0in;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:”Calibri”,”sans-serif”;
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:”Times New Roman”;
mso-bidi-theme-font:minor-bidi;}