Tuesday, July 3, 2018

Parallel Computation, Message Pasing, OpenMP, dan CUDA GPU

Parallel computing is the use of more than one CPU to run a program simultaneously. Ideally, parallel processing makes the program run faster because more CPUs are used, unlike single computing that only use one CPU. But in practice to divide the program so that it can be executed by different CPUs without any interrelationship between them it’s usually difficult, so the program runs with multiple CPUs simultaneously in order to make the program better and can be processed quickly. It can be concluded that in parallel processing is different from the term multitasking, that means one CPU handles or executes several programs at once, parallel processing can be called also with the term parallel computing. Then for the difference between a single computing with parallel computing, it can be illustrated in the image below:
Image 1 Solving A Problem on Single Computing


Image 2 Solving A Problem on Parallel Computing

Types of Parallel Computers 

Based on hardware levels that support parallelism, in general the parallel computers can be classified: 

1. Multicore processing 
It is a processor that has several executing units. A multicore processor can perform several instructions per cycle from multiple streams of instructions. 

2. Symmetric multiprocessing 
A computer system with multiple identical processors that can use a shared memory or separate memory structure that is connected by bus. 

3. Distributed computing 
A computer system with distributed memory, where each processing element is connected by the network. 

4. Cluster computing 
Is a set of computers that work together and connected by the network, so it can be seen as a whole, this computer cluster is coordinated by a parent computer that tasked to distribute the work to each other computer. 

5. Massive parallel processing 
A single computer with multiple processors connected in a network. Inside the MPP each CPU has the same memory, operating system and application. Each subsystem communicating with each other through high-speed interconnects. 

6. Grid computing 
Grid computing utilizes the Internet in communicating between computers to solve a problem and is the most distributed parallel. 

7. Specialized parallel computer Parallel computer that serves to complete special tasks.



A. Parallelism Concept 

Parallel computing is one of computational techniques, where the computing process is done by several independent resources (computers) simultaneously. Parallel computing is usually required at the time of processing of large amounts of data or in the process of computing a very large number. In solving a problem, parallel computing requires a parallel machine infrastructure consisting of multiple computers connected to a network and capable of working in parallel, for that reason parallel computing need support software. 

Parallel programming is a computer programming technique that allows the execution of commands / operations simultaneously, either in computers with one or more CPUs. The main purpose of parallel programming is to improve computing performance. The more things you can do simultaneously (in the same time), the more work you can accomplish. 

An example of using this concept in everyday life is at the entrance / exit of the expressway (highway).


B. Distributed Processing 

Distributed processing is a process of distributing parallel processing in parallel processing using multiple machines. So, it can be say the ability of a computer that run simultaneously to solve a problem with a fast process. 

Distributed parallel processing using parallel processing on multiple machines. One example is how some communities allow users to register and dedicate their own computers to process some of the data sets given to them by the server. When thousands of users sign up, a lot of data can be processed in a very short amount of time.


C. Architectural Parallel Computer 

1. Single Instruction Single Data Stream (SISD) 

This model used 1 processor only. Therefore this model can be regarded as a model for single computing. In this type of computer all instructions are done sequentially one by one, but also possible overlapping (overlapping function used) in the execution of each section of instruction (pipelining). In general SISD computer in the form of a computer that consists of one processing (single processor). However, SISD computers may also have more than one functional unit (memory module, processing unit, etc.), as long as the entire functional unit in control of a control unit. An example of a SISD machine is a traditional PC or an old mainframe.


2. Single Instruction Multiple Data Stream (SIMD)

On a SIMD computer there is more than one processing element controlled by a single control unit. All processing elements receive and execute the same instructions that the controller sends, but to perform operations against different data coming from different data streams too. An example of a SIMD is an array processor (array processor) or GPU.

3. Multiple Instruction Single Data Stream (MISD) 

This type of computer has n processing unit that each receives and operates different instructions on the same data stream, because each processing unit has different controlling units. The output from one processor becomes input for the next processor. There is no real manifestation of this type of computer except in the form of prototype for research and never released to public.

4. Multiple Instruction Multiple Data Stream (MIMD) 

In this MIMD computer system there is an interaction between n processors. This is because all data streams from memory dank e, come from the same data space for all processors. The MIMD computer is tightly coupled (global memory) if the interaction between high processing and loosely coupled if the interaction rate between the processors is low. This computer has several autonomous processors capable of performing different instructions on different data. Distributed systems are generally known as MIMDs, either using a shared memory space or a distributed memory space.

D. Pengantar Thread Programming

A thread in computer programming is a related information about the use of a single program that can handle multiple users simultaneously. This Thread allows the program to know how the user entering the program turn in and the user will re-enter using a different user. Multiple threads can run simultaneously with other processes divide the resource into memory, while other processes do not divide it. Thread programming is divided into 2 :

1. Static Threading 
This technique is commonly used for computers with multiprocessors chips and other types of shared-memory computers. This technique allows the shared memory thread to be available, using the program counter and execute the program independently. The operating system places one thread on the processor and exchanges it with another thread that wants to use the processor. 

2. Dynamic Multithreading 
This technique is a development of previous techniques that aim for convenience because with it, programmers do not have to bother with communication protocols, load balancing, and other complexity that exist in static threading. This concurrency platform provides scheduler that load balacing automatically. Although the platform is still under development but generally supports two features: nested parallelism and parallel loops.

E. Introduction Message Pasing, Open MP 

Message Passing is a form of communication used in parallel computing, OOT (Object Oriented Programming) or Object-Based Programming and interprocess communication. MPI is a programming standard that allows programmers to create an application that can run in parallel. Processes run by an application can be shared to send for each compute node which then each compute node is processed and returns the result to the computer head node.

Other uses of MPI are : 

1. Writes parallel code in portable form 
2. Get high performance in parallel programming 
3. Face problems that involving irregular or dynamic data relationships that are’nt very compatible with parallel data models.

OpenMP Consists of a set of compiler commands, library routines, and environment variables that affect run-time. Many applications built with parallel programming hybrid models can run on cluster computers using OpenMP and Message Passing Interface (MPI), or more transparently using OpenMP extensions of non-shared memory systems.

F. Pengantar Pemograman CUDA GPU 

Before entering CUDA discussion we have to learn GPU first. GPU is a special processor to speed up and change memory to speed up image processing. GPU itself is usually located in the computer graphics card or laptop.

CUDA (Compute Unified Device Architecture) is a scheme created by NVIDIA for NVIDIA as a GPU (Graphic Processing Unit) that capable of computing not only for graphics processing but also for general purpose. So with the CUDA we can take advantage of many processors from NVIDIA to perform the calculation process or even computing a lot.

Tuesday, May 8, 2018

Pembahasan Materi Program Jaringan

Latihan Get IP

Pada pemrograman jaringan, IP Address merupakan suatu hal yang harus ada karena untuk menghubungkan suatu jaringan dengan jaringan lain, device dengan device lain, diperlukan alamat sebagai penanda identik. Pemrograman java dapat digunakan untuk mendapatkan alamat IP Address pada pemrograman jaringan


Program akan melakukan import fungsi-fungsi yan ada di dalam library java.net, kemudian program akan mendeklarasikan tipe data InetAddress dengan nama variable “host” dan memberikan nilai variable tersebut dengan “null”. Kemudian program akan memanggil fungsi getLocalHost yang mana akan menghasilkan nama host dari computer yang menjalankan program, nama host tersebut akan disimpan pada variable “host” sehingga variable “host” ini dapat berfungsi sebagai objek. 

Selanjutnya mendeklarasikan array “ip” dengan tipe data byte dan mengisi variable ini dengan cara memanggil fungsi getAddress untuk mendapatkan IP dari nama host yang sudah tersedia. Untuk memunculkan alamat IP secara tepat, maka diperlukan perulangan untuk memanggil setiap indeks dari variable IP secara berurut. Dalam perulangan terdapat kondisi apabila looping terjadi dengan nilai dari i > 0, maka akan diberikan tanda “.”, selanjutnya program akan mencetak 1 element dari variabel ip berdasarkan indeks yang diberikan sekaligus menjadikan value dari elemen tersebut menjadi unsigned value sehingga dapat dibaca secara benar.

Di bawah ini merupakan hasil program dijalankan :



Latihan Get Name



Program di atas merupakan script code bahasa java untuk mendapatkan nama dari komputer yang menjalankan program.

Program akan melakukan import fungsi-fungsi yan ada di dalam library java.net, kemudian program akan mendeklarasikan tipe data InetAddress dengan nama variable “host” dan memberikan nilai variable tersebut dengan “null”. Kemudian program akan memanggil fungsi getLocalHost yang mana akan menghasilkan nama host dan disimpan pada variable “host” sehingga variable “host” ini dapat berfungsi sebagai objek. Selanjutnya akan mencetak string dengan statement System.out.println disertai dengan nilai yang didapat dengan cara memanggil fungsi getHostName.

Di bawah ini merupakan hasil program dijalankan :



Latihan IP to Name



Program di atas merupakan script code bahasa java untuk mendapatkan nama dari komputer yang menjalankan program dengan berdasarkan IP yang di input sebagai argument.

Program akan melakukan import fungsi-fungsi yan ada di dalam library java.net, kemudian program akan mengecek dengan statement if apabila saat menjalankan program tidak disertai argument, maka akan mencetak string “Pemakaian: java IPtoName <IP address>” dan keluar dari program. 

Apabila kondisi statement if tidak terpenuhi, maka akan mendeklarasikan array “host” dengan tipe data string dan memberikan nilai argument pertama yang diterima program. Kemudian program akan mendeklarasikan tipe data InetAddress dengan nama variable “address” dan memberikan nilai variable tersebut dengan “null”. Selanjutnya program akan mecoba untuk mengambil data IP dari variable “host” yang hasilnya akan disimpan pada variable “address”. 

Apabila string “host” tidak memberikan hasil kepada variable “address”, maka program akan mencetak string “invalid IP – malformed IP” dan keluar dari program. Apabila variable “address” mendapatkan hasil, maka akan mencetak nama host berdasarkan ip yang tersimpan pada variable “address”.

Di bawah ini merupakan hasil program dijalankan :



Latihan NsLookup



Program di atas merupakan script code bahasa java untuk mendapatkan nama dari komputer yang menjalankan program dengan berdasarkan IP yang di input sebagai argument.

Program akan melakukan import fungsi-fungsi yan ada di dalam library java.net, kemudian program akan mengecek dengan statement if apabila saat menjalankan program tidak disertai argument, maka akan mencetak string “Pemakaian: java NsLookup <hostname>” dan keluar dari program. Apabila kondisi statement if tidak terpenuhi, maka akan mendeklarasikan array “host” dengan tipe data string dan memberikan nilai argument pertama yang diterima program. 

Kemudian program akan mendeklarasikan tipe data InetAddress dengan nama variable “address” dan memberikan nilai variable tersebut dengan “null”. Selanjutnya program akan mecoba untuk mengambil data IP dari variable “host” yang hasilnya akan disimpan pada variable “address”. Apabila string “host” tidak memberikan hasil kepada variable “address”, maka program akan mencetak string “Unknown host” dan keluar dari program. Apabila variable “address” mendapatkan hasil, maka selanjutnya akan mendeklarasikan array “ip” dengan tipe data byte dan mengisi variable ini dengan cara memanggil fungsi getAddress untuk mendapatkan IP.

Untuk memunculkan alamat IP secara tepat, maka diperlukan perulangan untuk memanggil setiap indeks dari variable IP secara berurut. Dalam perulangan terdapat kondisi apabila looping terjadi dengan nilai dari i > 0, maka akan diberikan tanda “.”, selanjutnya program akan mencetak 1 element dari variabel ip berdasarkan indeks yang diberikan sekaligus menjadikan value dari elemen tersebut menjadi unsigned value sehingga dapat dibaca secara benar.

Di bawah ini merupakan hasil program dijalankan :



Membangun Aplikasi Client-Server TCP Sederhana

Server (simpleServer.java)



Program diatas adalah program server yang akan digunakan untuk menghubungkan antara client-server yang berorientasi transfer data string.

Program akan mengimport fungsi-fungsi yang terdapat dalam library java.net dan java.io, kemudian program mendeklarasikan variabel “TESTPORT” yang bertipe data integer dengan nilai 5000 sebagai alamat port yang akan digunakan program. Selanjutnya mendeklarasikan variable “line” dengan tipe string, mendeklarasikan objek bufferedReader dengan nama “is”, mendeklarasikan objek DataOutputStream dengan nama “os”, mendeklarasikan objek socket dengan nama “clientSocket”.

Selanjutnya program akan menginisialisasi objek ServerSocket dengan argument “TESTPORT” untuk mencoba port yang diberikan dan akan mencetak “Aplikasi Server hidup …”, sedangkan apabila terjadi kesalahan maka akan dilakukan eksepsi IOException,

Kemudian dengan menggunakan fungsi accept(), program akan mencoba menerima data yang dikirimkan dari client. Lalu program akan menciptakan inputan dan aliran output untuk client berdasarkan value yang diperoleh dari client.

Selanjutnya program akan mengecek inputan yang diberikan oleh client, apabila data tersebut berisikan “salam” maka program akan mengirimkan output “salam juga” kepada client, apabila inputan berupa selain “salam”, maka akan mengirimkan “Maaf, saya tidak mengerti” kepada client.

Di bawah ini merupakan hasil program dijalankan :




Client (simpleCLient.java)



Program diatas adalah program client yang akan digunakan untuk menghubungkan antara client-server yang berorientasi transfer data string.

Program akan mengimport fungsi-fungsi yang terdapat dalam library java.net dan java.io, kemudian program mendeklarasikan variabel “REMOTE_PORT” yang bertipe data integer dengan nilai 5000 sebagai alamat port yang akan digunakan program untuk menyambungkan dengan server. Selanjutnya mendeklarasikan objek socket dengan nama cl, mendeklarasikan objek bufferedReader dengan nama “is”, mendeklarasikan objek DataOutputStream dengan nama “os”, mendeklarasikan objek bufferedReader dengan nama “stdin”, mendeklarasikan variable string dengan nama “userInput”, mendeklarasikan variable string dengan nama “output”.

Selanjutnya program akan menginisialisasi objek ServerSocket dengan argument “REMOTE_PORT” untuk mencoba port yang diberikan. Kemudian setelah berhasil terhubung dengan server, pengguna akan memasukkan input yang akan disimpan pada variable “userInput” dan akan mengirimkan kepada server. Ketika gagal dalam mengirimkan input kepada server, maka akan mencetak “Error writing to server..." disertai dengan eksepsi “ex”. 

Selanjutnya program akan menerima tanggapan yang dikirimkan oleh server, dan memberikan nilai tersebut kepada variable “output”. Kemudian program akan mencetak “Dari server: “ disertai variable “output”. 

Di bawah ini merupakan hasil program dijalankan :



Lalu ketika pada client apabila dilakukan input “salam” maka akan menghasilkan output :



Sedangkan pada sisi server



Ketika memasukkan input selain “salam” pada client, maka akan menghasilkan output pada masing-masin client dan server :







Thursday, April 12, 2018

REVIEW PAPER DENGAN TEMA PARALLEL COMPUTATION


Pada penulisan ini, saya akan mereview paper dari sebuah penelitian dengan tema komputasi parallel. Penelitian tersebut berjudul “Analisis Performa Komputasi Paralel GPU Menggunakan PYCUDA dan PYOPENCL dengan Komputasi Serial CPU pada Citra Digital”.

Tahun Penelitian

Penelitian paper ditulis tanggal 27 Juli 2017 pada lokasi Yogyakarta

Penulis Paper
  1. Muhammad Koprawi
  2. Teguh Bharata Adji
  3. Dani Adhipta


Permasalahan yang Di Teliti
  • Pycuda sebagai API python yang merupakan kombinasi dari python dan CUDA hanya bisa berjalan pada kartu grafis NVIDIA untuk keperluan pemrosesan paralel, sedangkan berdasarkan paper [9][15] dijelaskan bahwa pyopencl yang merupakan kombinasi python dan opencl dapat berkerja pada komputasi CPU, komputasi GPU dan mobile device, tidak seperti pycuda yang hanya bisa berjalan pada kartu grafis NVIDIA, opencl bisa berjalan pada lintas vendor kartu grafis sehingga tidak terbatas pada salah satu kartu grafis saja. Maka dari itu, dilakukan pengujian kepada kedua API tersebut.
  • Untuk menunjukkan peningkatan performa dan sebagai pembanding perhitungan komputasi paralel maka kedua API python (pycuda dan pyopencl) tersebut perlu dibandingkan dengan komputasi serial CPU.


TujuanPenelitan

Penelitian ini bertujuan untuk melihat kinerja dan performa komputasi paralel GPU antara PYCUDA dan PYOPENCL terhadap citra digital dan juga membandingkan dengan komputasi serial CPU.

Metode yang Digunakan

Metode penelitian yang digunakan adalah metode eksperimental, yaitu dengan melakukan pengujian citra melalui pemrograman paralel dengan PYCUDA dan PYOPENCL yang dilakukan pada sebuah perangkat komputer yang mampu menjalankan komputasi GPU dan pemrograman serial yang dijalankandiCPU.

Pengujian yang Dilakukan
  • Melakukan perbandingan rata-rata pengujian citra RGB menjadi citra grayscale. Hasil pengujian tersebut membuktikan bahwa semakin besar ukuran citra yang diuji, semakin besar waku yang diperlukan untuk melakukan operasi citra. Kemudian waktu yang dibutuhkan komputasi serial lebih lama jika dibandingkan dengan waktu dari komputasi parallel dalam memproses citra.
  • Pengujian kedua dilakukan dengan menguji perubahan citra RGB menjadi citra negatif. Hasil pengujian yang dilakukan membuktikan komputasi serial memerlukan lebih banyak waktu dibandingkan dengan komputasi paralel.
  • Pengujian ketiga dilakukan dengan menguji perubahan citra RGB menjadi citra black and white (hitam putih). Hasil pengujian yang telah dilakukan pada operasi citra dari citra RGB menjadi citra black and white membuktikan bahwa komputasi serial memerlukan lebih banyak waktu dibandingkan dengan komputasi paralel. Semakin besar ukuran citra maka semakin lama pula waktu yang diperlukan untuk melakukan operasi citra.


Kelebihan Penelitian
  • Dari penelitian, kita dapat menegtahui kinerja komputasi parallel dan komputasi serial.
  • Pada paper penulis, ditulis kecepatan secara rinci. Sehingga dapat mengetahui secara detail perbedaan waktu kedua metode (parallel dan serial)
  • Pemrosesan citra dengan PYOPENCL lebih cepat jika dibandingkan dengan CPU dan PYCUDA.


Kekurangan Penelitian
  • Pengujian hanya melakukan tiga kali pengujian, sementara masih ada faktor-faktor lain yang harus diperhatikan jika ingin membandingkan kinerja dari komputasi serial dan koputasi parallel.
  • Dalam melakukan pengujian, diperlukan peralatan tambahan untuk mencatat waktu pemrosesan citra.
  • Bahan yang akan diujikan sulit didapat, terutama citra yang beresolusi sangat tinggi yang hanya bisa didapat dari pengambilan gambar secara langsung menggunakan lensa yang relativ mahal.


Kesimpulan Keseluruhan Penelitian

Penelitian melakukan tiga pengujian yang berbeda untuk membandingkan kinerja dari komputasi parallel dan komputasi serial. Dari ketiga proses operasi citra yang telah dilakuan, komputasi serial memerlukan lebih banyak waktu untuk melakukan operasi citra dibandingkan dengan komputasi paralel. Perbedaan jenis operasi citra sangat berpengaruh terhadap waktu yang dihasikan pada pengujian.

Daftar Pustaka

Paper : Download


P.S : Terima kasih kepada penulis yang telah membagikan ilmunya kepada saya dan saya memohon maaf apabila ada pihak yang di rugikan dalam postingan ini. Postingan ini semata-mata hanya untuk pembelajaran saja.

Thursday, March 15, 2018

Parallel Computation

Parallel computing adalah penggunakan lebih dari satu CPU untuk menjalankan sebuah program secara simultan. Parallel processing membuat program berjalan lebih cepat karena menggunakan lebih dari satu CPU, berbeda dengan komputasi tunggal yang hanya menggunakan satu CPU saja. 

Pada materi kali ini akan membahas :

  1. Parallelism Concept
  2. Distributed Processing
  3. Architectural Parallel Computer
  4. Pengantar Thread Programming
  5. Pengantar Message Passing, dan OpenMP
  6. Pengantar Pemrograman CUDA GPU








Download PDF



Friday, January 26, 2018

Konfigurasi Firewall CSF (Config Server Firewall) pada OS Linux Ubuntu 16.04


Firewall adalah sistem keamanan jaringan komputer yang digunakan untuk melindungi komputer dari beberapa jenis serangan dari komputer luar.

Config Server Firewall (atau CSF) adalah firewall yang bersifat open source untuk sebagian besar distribusi Linux dan VPS berbasis Linux. Selain fungsionalitas dasar dari paket penyaringan firewall - CSF menyertakan fitur keamanan lainnya, seperti deteksi login / intrusion / flood. CSF menyertakan integrasi UI untuk cPanel, DirectAdmin dan Webmin, namun pada percobaan ini hanya mengunakan command line. CSF mampu mengenali banyak serangan, seperti port scan, SYN floods, dan serangan login brute force pada banyak layanan.



Config Server Firewall (CSF) menawarkan berbagai macam perlindungan untuk VPS.

1. Login authentication failure daemon
CSF memeriksa log untuk usaha login yang gagal pada interval waktu reguler, dan dapat mengenali sebagian besar percobaan login yang gagal untuk mendapatkan akses ke server cloud. Selain itu, kita dapat menentukan file login sendiri dengan pencocokan ekspresi reguler. Hal dapat membantu jika kita memiliki aplikasi yang kemudian ada log gagal masuk, dan akan memblokir pengguna setelah gagal masuk mencapai jumlah yang ditentukan.

2. Process tracking
CSF dapat dikonfigurasi untuk melacak proses untuk mendeteksi proses yang mencurigakan dan mengirim email ke administrator sistem jika terdeteksi.

3. Directory watching
Pantauan direktori akan memantau apabila terdapat script atau folder yang mencurigakan dan akan mengirim email ke administrator sistem saat terdeteksi.

4. Messenger service
Fitur ini memungkinkan CSF mengirim pesan yang lebih informatif ke client saat sebuah pemblokiran diterapkan. Fitur ini memiliki keuntungan dan kerugian. Di satu sisi, memungkinkan untuk memberikan lebih banyak informasi kepada klien. Di sisi lain, memberikan lebih banyak informasi, yang mungkin akan mempermudah penyerang untuk menyerang VPS kita.

5. Flood protection
Pengaturan ini memberikan perlindungan terhadap serangan flood, seperti serangan DDoS. Kita dapat menentukan jumlah koneksi yang diizinkan pada setiap port dalam jangka waktu yang diinginkan.

6. Port knocking
Port knocking memungkinkan client untuk membuat koneksi server tanpa menggunakan port terbuka. Server akan menghubungkan klien ke port utama setelah urutan knock port yang berhasil.

7. Connection limit protection
Fitur ini bisa digunakan untuk membatasi jumlah koneksi yang aktif dari alamat IP pada masing-masing port.

8. Port/IP address redirection
CSF dapat dikonfigurasi untuk mengalihkan koneksi dari IP / port ke IP / port yang lain. Setelah pengalihan, alamat sumber klien akan menjadi alamat IP server.

9. UI integration
CSF juga menawarkan integrasi UI untuk cPanel dan Webmin selain interface dari command line.

10. IP block list
Fitur ini memungkinkan CSF mendownload daftar alamat IP yang diblokir secara otomatis.



Cara menginstall Config Server Firewall (CSF)

1. Download CSF

CSF merupakan aplikasi pihak ketiga yang tidak akan ada pada saat penginstallan system operasi linux Ubuntu, sehingga dibutuhkan untuk mendownload agar dapat menggunakan CSF ini. CSF dapat didownload dari website ConfigServer dengan melalui console terminal, download CSF dapat dilakukan dengan memasukkan perintah ke dalam console terminal :

wget http://download.configserver.com/csf.tgz


Kemudian tekan enter, jika berhasil, maka akan muncul pesan pada console terminal seperti di bawah ini.




2. Meng-ekstrak CSF

Hasil download yang dilakukan pada lankah sebelumnya merupakan file .tar dan harus di ekstrak agar dapat di install. Untuk meng-ekstraknya masukkan perintah pada console terminal :

tar -xzf csf.tgz


Kemudian tekan enter, jika berhasil, maka akan muncul pesan pada console terminal seperti di bawah ini.



3. Install CSF


Untuk menginstall CSF, sebelumnya harus masuk ke dalam direktori csf dengan perintah :

cd csf

setelah itu masukkan perintah pada console terminal :


sh install.sh


Kemudian tekan enter, jika berhasil, maka akan muncul pesan yang menandakan install berhasil pada console terminal seperti di bawah ini.



4. Pengecekan Module

Ini adalah langkah opsional yang dapat dilakukan untuk mengecek apakah seluruh module telah terinstall dengan baik. Pengecekan dapat dilakukan dengan memasukkan perintah ke dalam console terminal :

perl /usr/local/csf/bin/csftest.pl


Kemudian tekan enter, jika berhasil, maka akan muncul pesan yang menandakan bahwa seluruh module telah OK terinstall pada console terminal seperti di bawah ini.



5. Konfigurasi CSF

CSF dapat dikonfigurasi melalui script yang dapat diakses dengan memasukkan perintah :

nano /etc/csf/csf.conf


Tekan enter, maka pada awal akan muncul seperti tampilan di bawah ini.



6. Konfigurasi Port


Semakin sedikit akses yang ada pada VPS, maka akan semakin aman server. Namun, tidak semua port bisa ditutup karena client harus bisa menggunakan layanan server. Konfigurasi port pertama kali akan terlihat seperti ini.

TCP_IN      = "20,21,22,25,53,80,110,143,443,465,587,993,995"
TCP_OUT  = "20,21,22,25,53,80,110,113,443"
UDP_IN     = "20,21,53"
UDP_OUT = "20,21,53,113,123"


Layanan open ports :
  •         Port 20: FTP data transfer
  •         Port 21: FTP control
  •          Port 22: Secure shell (SSH)
  •          Port 25: Simple mail transfer protocol (SMTP)
  •          Port 53: Domain name system (DNS)
  •          Port 80: Hypertext transfer protocol (HTTP)
  •          Port 110: Post office protocol v3 (POP3)
  •          Port 113: Authentication service/identification protocol
  •          Port 123: Network time protocol (NTP)
  •          Port 143: Internet message access protocol (IMAP)
  •          Port 443: Hypertext transfer protocol over SSL/TLS (HTTPS)
  •          Port 465: URL Rendesvous Directory for SSM (Cisco)
  •          Port 587: E-mail message submission (SMTP)
  •          Port 993: Internet message access protocol over SSL (IMAPS)
  •          Port 995: Post office protocol 3 over TLS/SSL (POP3S)

Kita dapat menggunakan port mana saja yang dibutuhkan, sehingga kita dapat mematikan port-port yang tidak digunakan.


Berikut ini adalah konfigurasi port yang harus digunakan ketika ingin memakai server :

a. Server apa saja
  • TCP_IN: 22,53
  • TCP_OUT: 22,53,80,113,443
  • UPD_IN: 53
  • UPD_OUT: 53,113,123

b. Apache
  • TCP_IN: 80,443
  • FTP server
  • TCP_IN: 20,21
  • TCP_OUT: 20,21
  • UPD_IN: 20,21
  • UPD_OUT:20,21

c. Mail server
  • TCP_IN: 25,110,143,587,993,995
  • TCP_OUT: 25,110

d. MySQL server (membutuhkan izin akses)
  • TCP_IN: 3306
  • TCP_OUT: 3306



Jika kita mengunakan IPv6, maka kita juga harus melakukan konfigurasi yang sama pada TCP6_IN, TCP6_OUT, UPD6_IN, and UPD6_OUT.

Setelah melakukan konfigurasi port, maka simpan dengan menekan Ctrl+O untuk menyimpan konfigurasi dan tekan Ctrl+Z untuk keluar dari editor. Terapkan konfigurasi yang telah disimpan dengan memasukkan perintah pada console terminal :


csf –r




Jika semua telah berjalan baik dan dapat mengakses server, maka langkah selanjutnya mematikan testing dengan masuk ke dalam editor dengan memasukkan perintah :

nano /etc/csf/csf.conf


Ubah konfigurasi TESTING yang terdapat pada awal file dengan 0 seperti di bawah ini.
















Simpan file tersebut, dan lakukan penerapan sekali lagi dengan perintah


csf -r

7. Blokir IP


Jika ingin memblokir suatu IP, masuk ke dalam file deny dengan perintah :


nano /etc/csf/csf.deny





Maka akan terlihat tampilan awal seperti di bawah ini.





























Lakukan pemblokiran dengan memasukkan IP Address dan range jika ada, seperti contoh di bawah ini melakukan pemblokiran dua buah IP





























8. Pengizinan IP (Allow IP)

Jika ingin mengizinkan suatu IP, masuk ke dalam file allow dengan perintah :

nano /etc/csf/csf.allow





Maka akan terlihat tampilan awal seperti di bawah ini.





























Lakukan pengizinan dengan memasukkan IP Address dan range jika ada, seperti contoh di bawah ini melakukan pemblokiran sebuah IP.





















9. Ignoring IP

CSF juga memiliki kemampuan untuk mengecualikan alamat IP dari filter firewall. Alamat IP di csf.ignore akan melewati filter firewall, dan hanya dapat diblokir jika tercantum dalam file csf.deny.
Untuk masuk ke dalam file ignore, masukkan perintah ke dalam console terminal :

nano /etc/csf/csf.ignore




Tekan enter, maka akan terlihat tampilan awal seperti di bawah ini.






























IP Address dari computer kita akan langsung tercantum dalam daftar IP ignore.



Kesimpulan :


Firewall merupakan filter yang dapat mencegah apabila terdapat akses yang tidak diinginkan. Pada firewall yang menggunakan CSF, dapat melakukan pencegahan dengan menggunakan allow, deny, maupun ignore terhadap IP Address yang ingin melakukan akses ke dalam network.