Dalam menjamin keamanan paket data yang dikirimkan menggunakan jaringan internet berbagai usaha untuk melakukan penyaringan paket telah dilakukan. Untuk beberapa metode konvensional tersebut, router Internet membaca label pada paket tersebut untuk menentukan apa yang mereka, yang dari mereka, dan kemana mereka seharusnya pergi. Namun, seringkali terdapat paket data yang berisi konten yang berbahaya lolos dari policy metode-metode konvensional ini.
Untuk mencegah lebih banyak paket data yang tidak baik masuk digunakan sebuah metode bernama deep packet inspection. Metode ini merupakan metode penyaringan paket yang berfungsi pada Application layer pada pemodelan TCP/IP. Kegunaannya adalah untuk memungkinkan pencarian, pengidentifikasian, klasifikasi, routing ulang, dan pengeblokan dari paket-paket yang lolos tahap penyaringan konvensional.
Diluar keuntungan yang didapatkan dalam menggunakan DPI, terdapat beberapa batasan yang disebabkan penggunaan DPI tersebut:
1. Penjaminan keamanan terhadap beberapa jenis paket berbahaya, namun juga dapat dieksploitasi untuk memfasilitasi penyebaran paket berbahaya tersebut.
2. Peningkatan kompleksitas lingkungan firewall dan aplikasi keamanan lainnya, disebabkan kebutuhan DPI untuk melakukan pembaharuan secara berkala.
3. Penggunaan DPI membebani processor komputer sehingga melambatkan kerja komputer.
Referensi:
http://searchnetworking.techtarget.com/definition/deep-packet-inspection-DPI
http://www.yac.mx/id/pc-tech-tips/internet/What_Is_Deep_Packet_Inspection.html
Deep Packet Inspection
Server-Client Vs. Peer to Peer
Pada dasarnya terdapat dua macam struktur komunikasi antar mesin dalam Local Area Network (LAN).
Server-Client Network
Pada jaringan ini, baik client maupun server memiliki perannya masing-masing. Server berperan untuk membagikan file-file dan resource yang dimilikinya pada komputer client melalui suatu jaringan. Server biasanya diletakkan pada sebuah lokasi yang aman dalam bentuk storage locker atau data center. Komputer client pada umumnya hanya berinteraksi dengan server, tidak dengan client lain. Sistem client adalah sebuah PC standar yang menjalankan operating system seperti Windows. Melalui tempat kerja client, pengguna dapat mengakses sebagian besar file yang disimpan dalam server. Server akan menentukan file mana yang dapat diakses pengguna melalui jaringan.Peer to Peer
Jaringan Peer-to-Peer memiliki konsep untuk saling berbagi file dan printer dengan biaya sekecil mungkin. Jaringan ini tidak memiliki server utama dan tiap client memiliki fungsi sebagai client dan juga sebagai server. Tidak ada keamanan pusat yang dapat mengontrol file yang dibagikan. Pengguna bebas menggunakan kewenangan untuk membagi file mereka.(http://www.techrepublic.com/article/understanding-the-differences-between-client-server-and-peer-to-peer-networks/)
(http://withfriendship.com/images/b/8494/Peer-to-peer-picture.jpg)
Berikut tabel perbandingan kedua jaringan:
(http://www.buzzle.com/articles/peer-to-peer-vs-client-server-networks.html)
Label: jarkomputu
Source Code Socket Programming
1. C
Model server-client dapat diimplementasikan menggunakan 2 source code, souce code untuk server dan client.
Server Source Code:
#include<stdio.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netdb.h>
#include<stdlib.h>
#include<string.h>
#define MAX 80
#define PORT 43454
#define SA struct sockaddr
void func(int sockfd)
{
char buff[MAX];
int n;
for(;;)
{
bzero(buff,MAX);
read(sockfd,buff,sizeof(buff));
printf("From client: %s\t To client : ",buff);
bzero(buff,MAX);
n=0;
while((buff[n++]=getchar())!='\n');
write(sockfd,buff,sizeof(buff));
if(strncmp("exit",buff,4)==0)
{
printf("Server Exit...\n");
break;
}
}
}
int main()
{
int sockfd,connfd,len;
struct sockaddr_in servaddr,cli;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1)
{
printf("socket creation failed...\n");
exit(0);
}
else
printf("Socket successfully created..\n");
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(PORT);
if((bind(sockfd,(SA*)&servaddr, sizeof(servaddr)))!=0)
{
printf("socket bind failed...\n");
exit(0);
}
else
printf("Socket successfully binded..\n");
if((listen(sockfd,5))!=0)
{
printf("Listen failed...\n");
exit(0);
}
else
printf("Server listening..\n");
len=sizeof(cli);
connfd=accept(sockfd,(SA *)&cli,&len);
if(connfd<0)
{
printf("server acccept failed...\n");
exit(0);
}
else
printf("server acccept the client...\n");
func(connfd);
close(sockfd);
}
Client Source Code:
#include<stdio.h>
#include<netinet/in.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netdb.h>
#include<string.h>
#include<stdlib.h>
#define MAX 80
#define PORT 43454
#define SA struct sockaddr
void func(int sockfd)
{
char buff[MAX];
int n;
for(;;)
{
bzero(buff,sizeof(buff));
printf("Enter the string : ");
n=0;
while((buff[n++]=getchar())!='\n');
write(sockfd,buff,sizeof(buff));
bzero(buff,sizeof(buff));
read(sockfd,buff,sizeof(buff));
printf("From Server : %s",buff);
if((strncmp(buff,"exit",4))==0)
{
printf("Client Exit...\n");
break;
}
}
}
int main()
{
int sockfd,connfd;
struct sockaddr_in servaddr,cli;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd==-1)
{
printf("socket creation failed...\n");
exit(0);
}
else
printf("Socket successfully created..\n");
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
servaddr.sin_port=htons(PORT);
if(connect(sockfd,(SA *)&servaddr,sizeof(servaddr))!=0)
{
printf("connection with the server failed...\n");
exit(0);
}
else
printf("connected to the server..\n");
func(sockfd);
close(sockfd);
}
Setelah melakukan compile kedua source code pada terminal yang berbeda maka akan dibuat sebuah socket sehingga terminal server dan terminal client menjadi terhubung. Berikut tampilan pada kedua terminal ketika dua program dijalankan:
Program client akan meminta masukkan string, ketika dienter string akan dikirim ke terminal server, server juga dapat mengirimkan pesan untuk terminal client. Hal ini membukitkan bahwa kedua terminal terhubung.
(http://mcalabprogram.blogspot.com/2012/01/tcp-sockets-chat-applicationserver.html)
2. Java
Server Source Code:
// File Name GreetingServer.java
import java.net.*;
import java.io.*;
public class GreetingServer extends Thread
{
private ServerSocket serverSocket;
public GreetingServer(int port) throws IOException
{
serverSocket = new ServerSocket(port);
serverSocket.setSoTimeout(99999);
}
public void run()
{
while(true)
{
try
{
System.out.println("Waiting for client on port " + serverSocket.getLocalPort() + "...");
Socket server = serverSocket.accept();
System.out.println("Just connected to "+ server.getRemoteSocketAddress());
DataInputStream in = new DataInputStream(server.getInputStream());
System.out.println(in.readUTF());
DataOutputStream out = new DataOutputStream(server.getOutputStream());
out.writeUTF("Thank you for connecting to " + server.getLocalSocketAddress() + "\nGoodbye!");
server.close();
}catch(SocketTimeoutException s)
{
System.out.println("Socket timed out!");
break;
}catch(IOException e)
{
e.printStackTrace();
break;
}
}
}
public static void main(String [] args)
{
int port = Integer.parseInt(args[0]);
try
{
Thread t = new GreetingServer(port);
t.start();
}catch(IOException e)
{
e.printStackTrace();
}
}
}
Client Source Code:
// File Name GreetingClient.java
import java.net.*;
import java.io.*;
public class GreetingClient
{
public static void main(String [] args)
{
String serverName = args[0];
int port = Integer.parseInt(args[1]);
try
{
System.out.println("Connecting to " + serverName + " on port " + port);
Socket client = new Socket(serverName, port);
System.out.println("Just connected to " + client.getRemoteSocketAddress());
OutputStream outToServer = client.getOutputStream();
DataOutputStream out = new DataOutputStream(outToServer);
out.writeUTF("Hello from " + client.getLocalSocketAddress());
InputStream inFromServer = client.getInputStream();
DataInputStream in = new DataInputStream(inFromServer);
System.out.println("Server says " + in.readUTF());
client.close();
}catch(IOException e)
{
e.printStackTrace();
}
}
}
Jalankan kedua program kembali pada terminal yang berbeda, maka akan muncul tampilan seperti berikut:
Dengan memasukkan command : java GreetingServer <port yang ingin digunakan> pada terminal pertama, program akan membuat socket pada port yang telah dimasukkan pengguna.
Pada terminal kedua, masukkan command java GreetingClient localhost <port yang dimasukkan pada terminal server>.
Terminal Client akan meminta pada server untuk memberikan sambungan. Setelah disambungkan, baik client maupun server akan diberi pesan bahwa koneksi telah terhubung sebelumnya.
(http://www.tutorialspoint.com/java/java_networking.htm)
3. Python
Source Code Server:
#!/usr/bin/env python
# server.py
import
socket
import
select
import
config as cfg
import
Queue
from
threading
import
Thread
from
time
import
sleep
from
random
import
randint
import
sys
class
ProcessThread(Thread):
def
__init__(
self
):
super
(ProcessThread,
self
).__init__()
self
.running
=
True
self
.q
=
Queue.Queue()
def
add(
self
, data):
self
.q.put(data)
def
stop(
self
):
self
.running
=
False
def
run(
self
):
q
=
self
.q
while
self
.running:
try
:
# block for 1 second only:
value
=
q.get(block
=
True
, timeout
=
1
)
process(value)
except
Queue.Empty:
sys.stdout.write(
'.'
)
sys.stdout.flush()
#
if
not
q.empty():
print
"Elements left in the queue:"
while
not
q.empty():
print
q.get()
t
=
ProcessThread()
t.start()
def
process(value):
"""
Implement this. Do something useful with the received data.
"""
print
value
sleep(randint(
1
,
9
))
# emulating processing time
def
main():
s
=
socket.socket()
# Create a socket object
host
=
socket.gethostname()
# Get local machine name
port
=
cfg.PORT
# Reserve a port for your service.
s.bind((host, port))
# Bind to the port
print
"Listening on port {p}..."
.
format
(p
=
port)
s.listen(
5
)
# Now wait for client connection.
while
True
:
try
:
client, addr
=
s.accept()
ready
=
select.select([client,],[], [],
2
)
if
ready[
0
]:
data
=
client.recv(
4096
)
#print data
t.add(data)
except
KeyboardInterrupt:
print
print
"Stop."
break
except
socket.error, msg:
print
"Socket error! %s"
%
msg
break
#
cleanup()
def
cleanup():
t.stop()
t.join()
#########################################################
if
__name__
=
=
"__main__"
:
main()
Source Code Client:
#!/usr/bin/env python
# client.py
import
config as cfg
import
sys
import
socket
def
main(elems):
try
:
for
e
in
elems:
client
=
socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host
=
socket.gethostname()
client.connect((host, cfg.PORT))
clientfff.send(e)
client.shutdown(socket.SHUT_RDWR)
client.close()
except
Exception as msg:
print
msg
#########################################################
if
__name__
=
=
"__main__"
:
main(sys.argv[
1
:])
Siapkan satu file lagi yang akan digunakan untuk mengkonfigurasi port. File tersebut mengandung source code sbb:
# config.py
PORT=3030
Letakkan file tersebut pada directory yang sama dengan server.py. Lakukan compile pada file server.py pada terminal maka akan muncul tampilan sebagai berikut:
Tampilan diatas menunjukkan bahwa server sedang menunggu pesan yang akan dikirimkan client.
Langkah selanjutnya adalah mengcompile file client.py pada terminal lain menggunakan command : python client.py <pesan yang ingin dikirimkan>. Program client.py akan tersambung dengan server lalu mengirimkan pesannya. Berikut tampilan eksekusinya:
Label: jarkomputu
Socket Programming
Label: jarkomputu
Secure Shell
Secure Shell atau SSH adalah protokol jaringan yang banyak digunakan pada sistem berbasis Linux dan Unix. SSH memungkinkan pertukaran data melalui saluran yang aman antara dua perangkat jaringan. Enkripsi yang digunakan SSH menyediakan kerahasiaan dan integritas data melalui jaringan yang tidak aman seperti internet.
Jika diibaratkan pada dunia nyata, menggunakan internet dengan SSH adalah seperti halnya mengendarai mobil di terowongan pribadi dengan kecepatan tinggi, selain cepat perjalanan kita akan aman karena tidak ada kendaraan lain.
Kita tidak
merugikan operator seluler manapun karena kita tidak memakai bandwidth
dari operator, tapi koneksi
internet yang dipakai berasal dari server SSH.
(http://id.wikipedia.org/wiki/SSH, http://mblembetozvpn.blogspot.com/2013/10/mengapa-ssh-cepat.html)
Untuk memasang protokol jaringan SSH pada linux dapat menggunakan aplikasi OpenSSH yang disediakan oleh Ubuntu's Advanced Packaging Tool (apt-get) dengan mengetikkan apt-get install openssh-server openssh-client setelah masuk dalam terminal sebagai root.
Sistem kemudian akan mengidentifikasi aplikasi-aplikasi yang dianggap sesuai. Sistem akan meminta masukkan user untuk menyetujui untuk melanjutkan instalasi, setelah kita menyetujui instalasi akan diselesaikan secara otomatis.
Label: jarkomputu
Secure Socket Layer dan Aplikasi OpenSSL
SSL atau secure socket layer adalah protokol yang digunakan untuk keamanan, teknologi ini membangun suatu tautan enkripsi antara server dan client sehingga tidak bisa dibaca oleh pihak lain. Fungsinya adalah untuk menjaga keamanan informasi yang tersebar dalam internet. (http://www.digicert.com/ssl.html)
Pada sistem operasi berbasis Linux terdapat aplikasi opensource bernama openSLL yang mengembangkan SSL dan TLS (Transport Layer Security). Aplikasi ini melakukan fungsi kriptografi dasar yang menyediakan berbagai kegunaan, diantaranya:
- Penciptaan RSA, DH dan DSA parameter kunci
- Penciptaan sertifikat X.509, CSRs dan CRLs
- Perhitungan Pesan Digests
- Enkripsi dan Dekripsi dengan Ciphers
- Pengujian SSL / TLS Client dan Server
- Penanganan S/MIME signed or encrypted mail
Memasang perangkat OpenSSL pada Linux (ubuntu) dapat menggunakan perintah apt-get install.
Pada langkah awal, pastikan komputer terhubung dengan jaringan komputer. Kemudian masuklah sebagai root pada terminal dengan perintah sudo su. Untuk memulai mengunduh aplikasi dan memulai instalasi gunakan perintah apt-get install openssl openssl-devel mod_ssl. Berikut tampilan setelah instalasi selesai dilakukan :
Langkah berikutnya adalah menyalakan ulang XAMPP dengan perintah opt/lampp/lampp restart agar web server yang sudah diupdate dengan openSSL dapat bekerja dengan semestinya.
Label: jarkomputu
Setting Jaringan Komputer Pada Linux
Dalam jaringan komputer dikenali beberapa istilah seperti IP address, subnet mask, gateway, dan DNS server address. Masing-masing memiliki peran-perannya sendiri.
IP Address berperan untuk mengidentifikasi host jaringan dan sebagai alamat lokasi jaringan (http://fadhilgalery.blogspot.com/2011/11/mari-mengenal-pengertian-dan-fungsi-ip.html)
Subnet Mask berperan untuk membedakan antara network ID dengan Host ID dan untuk menentukan alamat tujuan data. (http://como-ank3rs.blogspot.com/2008/12/fungsi-subnet-mask.html)
Gateway berperan untuk menghubungan satu jaringan komputer dengan lainnya menggunakan protokol komunikasi yang berbeda sehingga informasi dari satu jaringan komputer dapat diberikan kepada jaringan komputer lain dengan protokol yang berbeda. (http://yunibrave.wordpress.com/2011/07/20/fungsi-gateway/)
Alamat DNS server berperan untuk melakukan pencarian nama komputer yang memiliki TCP/IP. DNS merupakan sebuah aplikasi service yang digunakan di internet seperti web browser untuk memudahkan pengguna mengakses "nama" alamat yang kemudian diterjemahkan menjadi alamat IP. (http://defas56.blogspot.com/2012/10/pengertian-dan-fungsi-dns-server.html)
Pengaturan LAN atau Local Area Network pada Linux dapat dilakukan melalui terminal menggunakan beberapa perintah. Beberapa perintah yang akan digunakan pada pengaturan LAN yang saya gunakan adalah : ifconfig, cat, route add default gw, dan echo.
Perintah ifconfig digunakan untuk menampilkan atapun merubah setting TCP/IP pada interface jaringan yang kita miliki. (http://bocahperantau.blogspot.com/2010/10/comment-comment-dalam-linux.html)
Berikut tampilan terminal saat dimasukkan perintah ifconfig:
Kemudian dengan menggunakan perintah cat /etc/resolv.conf dapat menampilkan alamat DNS server, berikut tampilannya :
Pada gambar diatas nameserver yang tertera adalah 127.0.1.1
Dengan mengetikkan perintah ifconfig eth0 192.168.1.x (isi x sesuai yang diinginkan(contoh saya menggunakan angka 18)) netmask 255.255.255.0 lalu dilanjutkan dengan perintah route add default gw 192.168.1.1 kita dapat melakukan pengaturan terhadap IP ethernet card client.
Berikut keluaran ifconfig setelah dilakukan pengaturan :
Dapat dilihat pada data eth0, setelah dilakukan pengaturan, internet address sesuai dengan nilai yang dimasukkan pada perintah, yaitu 192.168.1.18.
Kemudian untuk melakukan pengaturan nama DNS server (misal nama server diganti menjadi 8.8.8.8) dapat menggunakan perintah echo "nameserver 8.8.8.8" > /etc/resolv.conf. Setelah itu nama DNS server bisa kembali dicek menggunakan perintah cat /etc/resolv.conf seperti tampilan dibawah:
Label: jarkomputu
File Transfer Protocol Server
File Transfer Protocol atau FTP adalah sebuah network protocol yang mentransfer file dari satu host kepada host lainnya melalui Transmission Control Protocol (TCP)-based network, seperti internet. Salah satu FTP server yang disediakan untuk Linux adalah vsftpd (Very Secure FTP Daemon). Server ini menyokong IPv6 dan SSL. Melakukan instalasi FTP pada server dapat menggunakan perintah 'apt-get install vsftpd' melalui terminal. (http://en.wikipedia.org/wiki/File_Transfer_Protocol , http://en.wikipedia.org/wiki/Vsftpd)
Berikut tampilan yang keluar pada terminal saat dilakukan instalasi:
Label: jarkomputu
Web Server dan Database Server dan Instalasi XAMPP pada linux
Web server merujuk pada perangkat keras ataupun perangkat lunak yang menyediakan layanan akses kepada pengguna melalui protokol komunikasi HTTP atau HTTPS kepada pengguna dalam menggunakan aplikasi tertentu, seperti web browser.
Fungsi utama dari web server adalah untuk mentransfer berkas dan segala aspeknya sesuai permintaan pengguna mealui protokol komunikasi yang sedang digunakan. Sebagai contoh, saat client menggunakan web browser dan mengirimkan permintaan pada web server untuk mengakses suatu halaman web, web server akan menyediakan data-data pada berkas halaman yang diakses agar dapat ditampilkan pada web browser pengguna. (http://id.wikipedia.org/wiki/Server_web)
Database server adalah sebuah program komputer yang menyediakan layanan basis data untuk komputer maupun program komputer lainnya.
Fungsi utama dan keutamaan database server yaitu :
Menyimpan seluruh data satu sistem atau lebih dalam satu lokasi.
Melakukan pengukuran untuk meningkatkan keamanan data.
Melakukan pengelolaan database untuk mempercepat pencarian terhadap data.
Data yang disimpan dalam database server dapat diakses oleh sejumlah pengguna dalam satu waktu (http://www.serverschool.com/dedicated-servers/what-is-a-database-server/)
XAMPP adalah sebuah aplikasi yang memungkinkan penggunanya untuk menjalankan Apache, MySQL, PHP dan Perl di waktu yang bersamaan. Selain itu terdapat fitur manajemen database PHPMyAdmin seperti pada server hosting sungguhan. Melalui program ini, programmer dapat menguji aplikasi web yang membutuhkan web server dan database server yang dikembangkan dan mempresentasikannya ke pihak lain secara langsung dari komputer, tanpa perlu terkoneksi ke internet. (http://gudhangilmu.blogspot.com/2013/07/apa-itu-xampp.html, http://info-program-komputer.blogspot.com/2012/07/xampp.html)
Berikut langkah-langkah yang dibutuhkan untuk melakukan instalasi aplikasi XAMPP pada Linux
Label: jarkomputu