Senin, 10 Mei 2010

KINERJA LINUX...

Tutorial Awal

Daftar Isi:

* Hal yang patut diperhatikan
* Membuat pengguna baru ( new user)
* Me-restart dan mematikan komputer

Hal yang patut diperhatikan

Satu hal terpenting sebelum melakukan segala sesuatu dengan Linux adalah membuat akses baru selain root dan menggunakannya untuk login. Biasakan untuk menghindari penggunaan akses root ketika login sesering mungkin kecuali ketika akan melakukan perawatan atau konfigurasi sistem karena ketika kita login sebagai root maka tidak ada batasan bagi kita untuk berbuat apapun dengan sistem Linux kita seperti menghapus semua file dan hal-hal lain yang sebenarnya tidak perlu dilakukan.

Apabila diperlukan kita dapat mendapatkan akses root sementara dengan perintah su dan memasukkan password root kita. Untuk kembali menjadi pengguna biasa gunakan perintah exit (perintah ini juga dapat digunakan untuk kembali ke prompt login:).

Sebagai pengguna biasa kita mempunyai akses yang terbatas dan tidak akan dapat melakukan kesalahan fatal hanya karena sebab-sebab yang sederhana yang dimungkinkan apabila kita menggunakan akses root.

Login pertama

Setelah menyalakan komputer dan memilih linux pada prompt LILO: maka akan keluar serangkaian diagnosa yang berjalan dengan cepat. Apabila pada saat diagnosa terdeteksi error tetapi kita masih mencapai prompt (setiap distribusi berbeda tampilannya):



Linux kernel 2.0.36

hostname login:

Maka error tersebut untuk sementara dapat diabaikan dahulu. Untuk mengetahui proses diagnosa tersebut gunakan perintah dmesg.

Masukkan login:root dan masukkan password. (apabila kita langsung masuk tanpa ditanya password gunakan perintah passwd untuk membuat password baru, hal yang sama berlaku apabila kita ingin merubah password).



Membuat pengguna baru

Sebagai root gunakan perintah adduser untuk membuat pengguna baru.

Contoh: adduser namasaya untuk membuat pengguna dengan login namasaya

Kemudian buatlah password untuk pengguna tersebut dengan perintah passwd namasaya (jangan hanya menggunakan perintah passwd karena itu berarti mengganti password login kita sendiri dalam hal ini passwd root).

Keluarlah dari sistem dengan perintah exit lalu login kembali dengan login baru kita tersebut. Apabila ingin mengganti password lagi gunakan perintah passwd saja karena kita sudah login sebagai pengguna baru tersebut.

Apabila dibutuhkan kita dapat mendapat akses root sementara dengan perintah su dan memasukkan password root.



Me-restart dan mematikan komputer

Untuk me-restart sistem Linux keluarlah dulu sampai ke prompt login (untuk mencegah ada proses yang tersisa) dan tekan Ctrl-Alt-Del. Hindari mematikan komputer dengan tombol reset atau tombol Power karena dapat mengakibatkan hilangnya data atau kacaunya sistem partisi Linux. Tetapi jangan terlalu khawatir seandainya komputer kita mati karena mati lampu atau kegagalan listrik/perangkat keras lainnya karena pada saat booting kembali maka Linux akan otomatis menjalankan perintah fsck untuk memperbaiki sistem partisinya. Kita juga dapat menggunakan perintah fsck untuk memeriksa kondisi sistem partisi Linux kita. Bacalah manualnya dengan perintah man fsck.

Selain menggunakan Ctrl+Alt+Del kita dapat menggunakan perintah shutdown (loginlah sebagai root apabila diperlukan). Perintah shutdown ini mempunyai banyak sintaks tambahan tetapi yang paling penting adalah:

o shutdown –r now : membuat komputer kita restart saat itu juga

o shutdown –h now dan tunggu hingga keluar prompt: System Halted untuk mematikan komputer kita.

Daftar Perintah dalam Tutorial Awal - Sebelum Memulai

Passwd, dmesg, adduser, fsck, shutdown



Konsep dan Perintah Dasar UNIX

Daftar Isi:

* Sistem File (Filesystem)

* Prompt
* Melihat isi direktori dan navigasi direktori
* Perijinan (Permission) dan perintah manipulasinya
* Manipulasi file
* Menghubungkan file
* Wildcards
* Melihat dan memanipulasi proses
* Daftar Perintah dalam Tutorial I - Konsep dan Perintah Dasar UNIX

Patut diperhatikan!!!

Sebelum membaca tutorial ini diharapkan Tutorial Awal – Sebelum Memulai sudah dibaca terlebih dahulu karena Tutorial Awal memuat hal-hal yang menyangkut keamanan serta pencegahan terjadinya hal-hal yang tidak diinginkan.



Sistem File (Filesystem)

Hal pertama yang patut diingat adalah Sistem File Linux (ext2) -termasuk Sistem File UNIX lainnya- tidak mengenal istilah drive seperti di DOS atau Windows (contoh: Drive C:, Drive D: dst). Sistem File Linux menggunakan sistem hirarki dan penyatuan (direktori dalam direktori) yang memperlakukan semua file, direktori dan device driver (termasuk diskdrive, floppy disk dan cd-rom drive) sebagai file.

Sistem File Linux/UNIX mendukung nama file sebanyak 256 karakter (tetapi hindari simbol dan tanda kutip kecuali titik - . – dan titik dapat digunakan berkali-kali dalam satu nama file (contoh: ini.nama.file). Semua perintah di Linux bersifat case-sensitive (huruf besar dan kecil diartikan berbeda) dan menggunakan tanda \ (slash) - dalam DOS/Windows digunakan tanda \ (backslash).

Linux seperti halnya UNIX mempunyai fasilitas bantu yaitu perintah man dengan sintaks – man namaperintah.



Ada empat kategori file dalam Sistem File UNIX/Linux yaitu:

o File Biasa yang terdiri dari:

+ File teks – dalam format standar ASCII
+ File data – dalam format bukan ASCII (karakter khusus)
o File teks perintah – dalam format ASCII tetapi merupakan sekumpulan perintah otomatis (script)
o File perintah – dalam format binari
o Direktori

o Tautan (links) – lihat pembahasan Menghubungkan file

o Device Driver Khusus – perangkat keras



Sedangkan susunan hirarki dalam Sistem File UNIX/Linux adalah sebagai berikut:

o / - direktori root

o /bin – berisi file-file perintah dasar dalam bentuk binari
o /boot – berisi informasi yang dibutuhkan ketika mem-boot komputer
o /dev – berisi file-file device drivers
o /etc – berisi file-file tambahan yang rata-rata adalah untuk administrasi sistem
o /home – direktori untuk pengguna (user)
o /lib – berisi file-file library
o /sbin – berisi file-file untuk superuser atau root dan file binari untuk startup sistem
o /tmp – berisi file-file sementara/temporer
o /usr – berisi file dan direktori untuk perintah tambahan baik dalam bentuk binari ataupun script
o /var – berisi file-file variabel yang mendefinisikan sistem



Masing-masing distribusi mempunyai sedikit perbedaan terutama dibagian direktori mounting (lihat daftar istilah) seperti:

o RedHat:

+ Floppy Disk dan CD Drive diletakkan di direktori - /mnt/floppy dan /mnt/cdrom
+ Disk Drive diletakkan di direktori yang ditentukan sendiri oleh sistem administrator

o Slackware:

+ Floppy Disk dan CD Drive diletakkan di direktori /floppy dan /cdrom
+ Disk Drive sama seperti di RedHat

Tetapi untuk urusan direktori mounting sebenarnya tergantung pada sang sistem administrator sendiri hendak meletakkannya dimana sehingga perbedaan ini sebenarnya bukanlah masalah yang besar.



Prompt

Apabila kita login sebagai root maka prompt yang muncul adalah lambang # (contoh: namamesin:namadirektori#) sedangkan apabila kita login sebagai pengguna biasa maka yang muncul adalah lambang $ (contoh: namamesin:namadirektori$).



Melihat isi direktori dan navigasi direktori

Gunakan perintah ls dan tampilan standarnya adalah berurut berdasarkan abjad.

Beberapa kode tambahan untuk perintah ls antara lain (sintaks: ls –kode1kode2kode3 – tanpa spasi):

o -a – melihat semua file termasuk yang disembunyikan

o -A – melihat semua file kecuali direktori itu sendiri dan diatasnya (file . dan ..)
o -c – diurutkan berdasarkan waktu (yang paling lama diatas)
o -d – hanya melihat direktori
o -l – melihat dalam format panjang termasuk perijinan file dan detail lainnya.
o -r – diurutkan berbalik abjad
o -t – diurutkan berdasarkan waktu (yang paling baru diatas)



Apabila kita menggunakan perintah ls –l maka dari kanan ke kiri adalah tautan (dibahas di Tautan), nama file, tanggal dan waktu modifikasi, besar file (dalam bytes), nama grup dan pemilik (dibahas di Perijinan) dan deretan huruf dan garis adalah perijinan file (dibahas di Perijinan).

Untuk navigasi antar direktori gunakan perintah cd dan seperti di DOS sintaks seperti cd .. berlaku untuk masuk ke direktori diatas direktori dimana kita berada.

Contoh 1:

cd /etc
ls –l

Direktori /etc berisi file-file untuk administrasi sistem. Apabila perintah ls –l menghasilkan daftar yang terlalu panjang maka gunakan Shift+PageUp untuk menggulung daftar keatas dan Shift+PageDown untuk menggulung daftar kebawah atau dapat dengan menggunakan perintah ls –l | more atau ls –l | less. Dalam direktori /etc ada file X11 yang disebelah kanannya terdapat tanda -> /var/X11R6/lib/ dan diujung kirinya ditandai dengan huruf l, ini menunjukkan bahwa file tersebut adalah file tautan sedangkan bila diujung kirinya terdapat tanda – maka ini adalah file biasa sedangkan huruf d menunjukkan direktori.

Contoh 2:

cd /bin
ls –l



Beberapa file disini diberi tanda * yang menunjukkan file tersebut adalah file binari.

Contoh 3:

cd ~ (menuju /home/namalogin direktori)
ls –a atau ls -al

Akan terlihat file-file yang diawali dengan tanda . yang menunjukkan bahwa file tersebut merupakan file tersembunyi dan biasanya merupakan file-file konfigurasi dan file hasil konfigurasi untuk pengguna seperti .bash_history.



Perijinan (Permission) dan perintah manipulasinya

Untuk alasan keamanan maka semua file di UNIX/Linux mempunyai perijinan file yang mengatur siapa yang berhak membuka/membaca, menulis/menghapus dan menjalankan file tersebut.



Saat menjalankan perintah ls –l maka perhatikan bagian paling kiri sepert::

Contoh 1: -rw–r--r-- namapemilik namagrup

Contoh 2: drwxrw-rw- namapemilik namagrup

Contoh 3: -rwxrwxrwx namapemilik namagrup

Deretan huruf tersebut adalah keterangan serta perijinan file. Paling ujung kiri adalah keterangan file ( - untuk file biasa, d untuk direktori dan l untuk tautan) sedangkan huruf r, w dan x mempunyai arti read (dapat dibaca), write (dapat ditulis/dihapus), e-x-ecute (dapat dijalankan) sedangkan tanda – menyatakan bahwa tidak dijinkan menjalankan operasi berdasarkan letak tanda – tersebut.



Tiga huruf paling kiri adalah untuk pemilik file tersebut, tiga huruf berikutnya adalah untuk grup dimana pemilik tersebut berada dan tiga huruf berikutnya adalah untuk semua pengguna. Pemilik file adalah pengguna yang membuat file tersebut.



Dalam melakukan proses manipulasi perijinan maka yang dapat melakukannya hanyalah pemilik file atau root sehingga apabila diperlukan ubahlah akses menjadi root terlebih dahulu. (baca Tutorial Awal)



Untuk memanipulasi perijinan gunakan perintah chmod. Ada dua cara menggunakan perintah ini yaitu cara numerik dan cara simbolik.

Cara numerik menggunakan tabel:

400 – pemilik berhak membaca
200 – pemilik berhak menulis
100 – pemilik berhak menjalankan

040 – grup berhak membaca
020 – grup berhak menulis
010 – grup berhak menjalankan

004 – semua pengguna berhak membaca
002 – semua pengguna berhak menulis
001 – semua pengguna berhak menjalankan



Untuk memberikan perijinan tertentu maka nilai numerik tersebut dijumlahkan sesuai dengan perijinan yang ingin diberikan pada file tersebut.

Contoh: chmod 664 namafile berarti perijinan yang diberikan bernilai 664 = 400+200+40+20+4 yang artinya pemilik berhak membaca dan menulis, grup pemilik berhak membaca dan menulis dan pengguna lain hanya berhak membaca.

Cara simbolik menggunakan tabel:

u – pemilik
g – grup
o – semua pengguna

a – semuanya (pemilik, grup dan pengguna lain)
r - membaca
w - menulis
x - menjalankan

t - sticky bit



Format penulisannya menggunakan tanda + dan – untuk memberikan perijinan tertentu.

Contoh: chmod ug+rw namafile berarti pemilik dan grupnya diberikan perijinan untuk membaca dan menulis file tersebut.

Kode –t digunakan untuk membuat direktori tidak dapat diakses selain oleh pemilik dan root tetapi file-file didalamnya tidak berubah perijinannya. Hal ini digunakan untuk keamanan karena perijinan direktori tanpa sticky bit akan mempengaruhi perijinan file-file didalamnya.



Untuk memanipulasi kepemilikan gunakan perintah chown (untuk mengganti pemilik) dan chgrp (untuk mengganti grup).



Manipulasi File

Perintah-perintah pada UNIX/Linux biasanya diletakkan di direktori /bin, /sbin, /usr/bin dan /usr/sbin dan dengan perintah ls maka akan dapat dilihat ada perintah apa saja yang berlaku di sistem UNIX/Linux tersebut.



Perintah-perintah paling dasar untuk memanipulasi file antara lain:

o cp – menduplikasi file (contoh: cp namafile /direktori/namafile)

o mv – memindahkan/mengganti nama file (contoh: mv namafile /direktori/namafile atau mv namafile namafilebaru)
o rm – menghapus file (contoh: rm namafile)
o rmdir – menghapus direktori dengan syarat direktori tersebut harus kosong (contoh: rmdir namadirektori)
o more – membaca file (contoh: more namafile) – gunakan hanya untuk file berformat ASCII
o cat – sama seperti more tetapi tidak berhenti apabila halamannya melebihi lebar tampilan layar
o pwd – melihat direktori dimana kita berada

Untuk sintaks lengkapnya gunakan perintah man namaperintah.



Menghubungkan File

Para pengguna Windows tentu mengenal kata shortcut, maka kata tautan (links) pada UNIX/Linux mengacu pada konsep yang sama. Tujuan dari tautan adalah untuk menghemat ruang harddisk dan memudahkan administrasi dalam mengubah konfigurasi (cukup satu file yang dikonfigurasi).



Tautan di UNIX/Linux mempunyai dua jenis yaitu hard links dan symbolic links. Perbedaan mendasar antara keduanya adalah untuk menghapus file acuannya maka semua hard links harus dihapus terlebih dahulu sedangkan symbolic links dapat dibiarkan tetap ada sementara file acuannya dihapus (hal ini tentunya menyebabkan broken links atau tautan terputus).



Perintah untuk membuat tautan adalah ln dan untuk sintaks tambahan mengacu ke man ln.

Contoh 1, membuat hard links:

ln namafile /direktori/namalink

Contoh 2, membuat symbolic links:

ln –s namafile /direktori/namalink



Wildcards

UNIX/Linux mempunyai tiga jenis wildcards yaitu ? untuk mengganti satu karakter (contoh: na??fil? bisa berarti namafile, nanafile dan seterusnya), * untuk mengganti karakter berapapun jumlahnya (contoh: nama* bisa berarti namafile, namafileiniadalah, namafileiniadalahnamafilelainnya dan seterusnya) dan [ ] untuk mencari/menggantikan karakter didalam tanda tersebut.



Proses

Perintah UNIX/Linux dapat dimasukkan secara bersamaan dan dapat diletakkan sebagai latar belakang maupun latar depan (background dan foreground). Untuk menjalankan perintah sebagai latar belakang gunakan tanda & dibelakang perintah tersebut.

Contoh: namamesin:namadirektori$gcc namafile –o namafilehasil & akan membuat perintah gcc berjalan di latar belakang dan menampilkan namamesin:namadirektori$ lagi untuk diberikan perintah selanjutnya.



Permintaan untuk menjalankan beberapa perintah tersebut disebut dengan proses. Proses dimulai dari mulai boot yang dilakukan oleh sistem dengan perintah init sampai perintah-perintah yang dijalankan selama menggunakan komputer. Untuk mengetahui proses apa yang sedang berjalan gunakan perintah ps atau top untuk menunjukkan proses yang terbaru dan proses yang menghabiskan resource terbanyak.



Ketika menjalankan perintah ps atau top maka akan terlihat kata PID yang berarti Process ID. Ini adalah nomor urut proses tersebut dari mulai boot. PID sangat berguna apabila kita ingin mematikan proses tersebut (apabila proses tersebut ingin dibatalkan atau berjalan dengan tidak semestinya). Untuk mem’bunuh’ proses gunakan perintah kill PID dan apabila proses tersebut masih tetap berjalan gunakan perintah killall PID. Apabila masih gagal coba dicek dahulu apakah proses itu milik orang lain atau apabila mempunyai akses root loginlah sebagai root (baca Tutorial Awal) sebelum melakukan perintah kill.

Daftar perintah dalam Tutorial – Konsep dan Perintah Dasar UNIX

ls, cd, cp, mv, rm, rmdir, more, cat, pwd, man, chmod, chown, chgrp, ls, ps, top, kill, killall




VIRTUAL PRIVATE NETWORK

I Made Wiryana

Suatu Wide Area Network, menghubungkan beberapa LAN pada berbagai lokasi menjadi seakan-akan menjadi satu network. Untuk menghubungkan beberapa lokasi membutuhkan dedicated line, router, dan beberapa protokol khusus. Hal ini membutuhkan SDM dan biaya untuk menjaga link tetap beroperasi. Pada beberapa lokasi situasi juga berbeda sehingga dapat membuat pendisaian menjadi lebih sulit. Artikel ini membahas kemungkinan penggunaan Internet dan Linux, sebagai komponen pembangun suatu Virtual Private Network (VPN).

* Pengantar
* Integrasi Network
* Proxy Tranparant
* Penggunaan Real Tunnel
* Konfigurasi Tunnel
* Privasi
* Konfigurasi Secure Shell (SSH)
* Konfigurasi SSH dan tunneling
* Penutup

Pengantar.

Membangun suatu VPN membutuhkan pertimbangan dan pekerjaan yang cukup banyak, termasuk pemorgraman dan lain sebagainya. Suatu VPN berdasarkan dua prinsip, sesuai dengan namanya. Istilah virtual, berarti tak adanya represtasi fisik sebenarnya antara link ke dua site tersebut. Hal ini berarti tak adanya dedicated link antar ke dua lokasi yang diinterkoneksi tersebut. Sehingga tak perlu menarik kabel khusus antara ke dua lokasi. Tetapi dengan menggunakan jaringan yang telah ada yang juga digunakan oleh banyak perusahaan yang lainnya. Sehingga term virtual ini timbul dari kenyataan bahwa network ini dibangun di suatu environment yang tak hanya digunakan untuk keperluan VPN ini.

Istilah private berkatitan dengan istilah virtual. Membangun virtual network di atas infrastruktur yang dapat diakses oleh publik memberikan beberapa implikasi sekuriti. Informasi sensitif tidak ingin dibaca oleh pengguna lainnya yang tak berhak, atau misal oleh kompetitor. Sehingga harus diciptakan suatu mekanisme untuk menjaga informasi tetap bersifat terbatas. Cara satu satunya untuk mencapai ini adalah dengan menggunakan enkripsi, sehingga hanya pihak yang dipercaya saja, yang dapat mengakses informasi. Bagaimanapun juga ini memiliki beberapa implikasi hukum.

Aspek lainnya adalah otentikasi atau identifikasi bila diinginkan. Sehingga harus ditentukan cara untuk mengidentifikasikan pihak di seberang VPN yang berkomunikasi. Untuk ini dapat pula digunakan perangkat lunak enkripsi.

Integrasi Network

Langkah pertama yang dilakukan untuk melakukan ini adalah dengan mengintegrasikan jaringan lokal dari remote site ke dalam suatu jaringan yang besar. Integrasi ini harus menciptakan suatu situasi yang memungkinkan pengaksesan ke berbagai bagian dari jaringan yang terintegrasi secara transparan. Untuk mencapai hal ini, harus diatasi beberapa masalah, antara lain :

* Menentukan alamat IP
* Melakukan routing traffic dari A ke B

Setiap alamat IP di Internet haruslah unik. Karena hanya itulah cara untuk mengidentifikasi suatu host. Menggunakan alamat yang sama untuk beberapa mesin akan menghasilkan hasil yang tak dapat diperkirakan. Prinsip address yang harus unik ini hanya berlaku bagi host yang dapat diakses secara langsung dari Internet.

Sebagian alamat yang dimiliki oleh mesin pengguna ditentukan oleh ISP (Internet Service Provider). ISP akan melakukan koneksi ke Internet dan melakukan routing seluruh trafiic dari dan ke alamat IP pengguna. Sehingga alamat IP ini bersifat tetap, dan pengguna dapat menggunakannya alamat yang sama selalu, sehingga hal ini mempermudah konfigurasi. Alamat IP yang tetap biasanya digunakan oleh koneksi Internet dedicated, yaitu koneksi yang hidup 24 jam sehari. Jika suatu address bersifat dinamis, maka akan selalu berubah setiap kali user melakukan koneksi dengan Internet. Address dinamis ini biasanya digunakan untuk koneksi dial-up. Pengguna akan diberikan alamat address IP yang tersedia ketika melakukan koneksi.

Jika memiliki suatu jangkauan alamat IP (misal klas B, atau klas C), keadaan menjadi sedikit berbeda. Jangkauan ini bersifat unik, dan pengguna dapat dengan bebas menggunakan untuk membangun koneksi ini. Tetapi pada beberapa kondisi, tidak mungkin menggunakan 1 alamat IP untuk menghubungkan kantor satu ke alamat IP lainnya di kantor lainnya dengan menggukanan jangkauan address yang sama untuk keduanya. Keterbatasan ini disebabkan oleh mekanisme paket IP dirouting di Internet. Mekanisme routing ini biasanya tidak berdasarkan alamat IP sebenarnya, tetapi berdasarkan jangkauan (range) alamat IP. Jadi seluruh paket pada jangkauan tertentu akan dikirim ke satu router, dan alamat IP untuk range tertentu dikirim ke router yang lainnya.

Adanya keterbatasan penggunaan alamat IP ini, menjadikan beberapa perusahaan melakukan strategi dengan cara memilih secara bebas alamat IP untuk penggunaan Internal, dan hal ini diperbolehkan selama diyakinkan bahwa paket dengan alamat internal ini tak pernah keluar ke jaringan Interet. Range internal ini dipilih sehingga dengan mudah sejumlah kelompok yang berbeda dapat diberikan IP sendiri sendiri. Pembagian ini bertujuan untuk mempermudah untuk melakukan route antar kantor yang berbeda, atau dengan kata lain mempermudah proses saling mengelompokkan satu grup dengan grup yang lainnya.

Jika suatu kantor dengan kantor lainnya dikoneksikan dengan menggunakan dedicated line, alamat IP ini dapat digunakan tanpa masalah yang berarti. Traffic tak akan pernah dapat mencapai Internet, sehingga dapat dipilih alamat IP yang manapun. Tetapi bila koneksi antar kantor ini dilakukan via Internet, maka akan timbul permasalahan dalam pemilihan alamat IP ini. Alamat yang digunakan tak boleh telah digunakan di Internet, sebab bisa saja alamat IP yang dipilih untuk keperluan internal, ternyata telah digunakan oleh salah satu site di Internet, sehingga routing di Internet akan mengirimkan paket ke alamat yang tidak tepat tak sesuai dengan keinginan yang dituju.

Untuk mengatasi masalah ini, digunaakan teknik yang disebut tunneling. Ini berarti paket IP lengkap yang akan dikirim akan dipaketkan lagi ke paket IP lainnya yang memiliki alamat IP sah. Prinsip tunneling tak hanya terbatas untuk protokol TCP/IP. Tetapi dapat dilakukan tunneling beragam jenis protokol ke dalam suatu paket IP (misal Netware dapat dilakukan tunneling, menggunakan paket IP, sehingga dapat diciptakan hubungan link Netware antara client dan serrver melewati Internet). Tetapi dalam bahasan ini hanya akan dibahas tunneling paket IP ke dalam paket IP atau yang disebut IPIP tunneling.

Gambar 1 Prinsip tunneling



Suatu message dari host A akan dikirim ke host B. Alamat A dan B adalah hanya alamat internal, dan setiap koneksi antar keduanya menggunakan alamat X, dan Y (alamat IP yang sah). Pada prinsip tunneling, paket IP pertama akan dimasukkan sebagai pay load area, dari message yang akan dikirimkan via Internet. Dan dikirimkan menggunakan address X dan Y pada header information. Ketika message diterima oleh tunneling server di sisi lain, alamat IP sebenarnya dapat diketahui dari pay load area ini, dan barulan dikirimkan ke lokal network, ke alamat sesungguhnya (dengan menggunakan alamat IP internal). Pengiriman message ini tak terbatas pada message dari A dan ke B saja, tetapi dari satu jaringan lokal, ke jaringan lokal lainnya. Di Internet message ini hanya tampak seperti paket antara host X dan Y saja (yaitu host dengan alamat terdaftar).

Banyak metoda untuk mengimplementasikan suatu mesin Linux sebagai mesin tunneling/detunelling. Berikut ini akan dibahas kemungkinan tersebut

Ada beberapa pertimbangan dalam membentuk sistem tunnelinng ini antara alain :

* Di manakah harus diletakkan program tunneling
* Apakah tunneling dijalankan di firewall atau di mesin terpisah.

Menjalankan tunneling di firewall memiliki beberapa kerugian.

* Seluruh kode tunneling biasanya khusus untuk platform tertentu, sehingga biasanya juga untuk produk firewall tertentu pula. Sehingga bila ingin digunakan tunneling yang bersamaan dengan firewall, maka harus digunakan platform dan software firewall yang sama di kedua sisi jaringan yang dihubungkan. Persyaratan ini menjadikan solusi menjadi mahal.

* Dengan menambahkan kode program ke firewall, maka firewall menjadi lebih kompleks, sehingga lebih besar kemungkinan terjadinya error. Sering kali suatu error akan membuka celah untuk dapat digunakan oleh pihak tertentu sehingga memperoleh hak akses yang tak sah

Sebaiknya harus dipasang mesin khusus yang hanya akan menangani tunneling. Bagi client dari jaringan, mesin tunneling ini dianggap tak ubahyna hanya sebagai suatu router ke tujuan (dalam hal ini jaringan lainnya). Hal ini akan menyederhanakan kerja firewall. Akan dibutuhkan aturan filtering yang lebih sedikit, karena pada kasus minimal hanya akan ada mesin tunneling yang akan berhubungan melalui firewall. Sehingga dapat dengan mudah diblok akses dari jaringan internal langsung ke jaringan eksternal, hal ini untuk mencegah kebocoran informasi.

Dengan menggunakan mesin tunneling yang terpisah, maka akan lebih besar pilihan yang dapat dilakukan, misal dapat digunakan firewall , dan mesin tunneling dengan menggunakan Linux.

Proxy tranparant

Kernel Linux terbaru (paling tidak versi 2.0 ke atas) memiliki banyak kemampuan memfilter paket. Paket kernel yang terbaru telah mendukung suatu kemampuan yang disebut transparency proxying, yang dapat membantu penyusunan suatu sistem tunneling.

Suatu proxy, adalah suatu program jaringan khusus yang akan merelay data, dari sisi satu ke sisi lainnya, dan sebaliknya. Proses merelay ini dilakukan oleh program proxy, yang terjadi di user space. Ini berarti proxy akan menerima data pada salah satu buffer yang dimilikinya, dan mungkin meng-copy nya ke buffer lainnya selain melakukan hal yang intelligence, dan mengirimkan ke buffer lainnya di interface jaringan yang lainnya (sisi luar) untuk menuju tujuan paket tersebut. Karena paket keluaran di kirim secara manual, dari interface sisi luar, maka paket akan memiliki alamat IP sama dengan external interface tersebut sebagai source address. Suatu paket yang telah diforwardkan olehj kernel biasanya memiliki soruce address sama dengan original source address. Dengan cara ini (menggunakan proyxy), alamat IP internal telah ditransformasikan menjadi alamat IP eksternal. Ditambah lagi beberapa hal dapat ditambahkan di program proxy ini, misal otentikasi pengguna, dan kompressi.

Salah satu masalah dengan menggunakan proxy adalah menyalurkan data dari internal network ke proxy. Tak ada cara yang portabel untuk melakukan hal ini. Bila diinginkan melakukan telnet, melewati suatu proxy. Maka :

* Harus telnet ke mesin proxy tersebut

* Mungkin melakukan otentikasi

* Barulah melakukan koneksi ke alamat sesungguhnya yang dituju

Suatu Web Browser dapat dikonfifgurasikan secara otomatis untuk menggunakan suatu proxy (awalnya bertujuan untuk caching), tetapi sebagian besar aplikasi yang menggunakan TCP/IP tak dapat secara mudah diubah.

Tetapi pada kernel Linux yang baru dapat dikonfigurasi sehingga dapat mendrop seluruh traffic untuk port tertentu atau untuk alamat IP teretentu pada port network di mesin yang sama. Hal ini dapat dilakukan dengan menggunakan command ipfwadm.



ipfwadm 2.3.0 1996/07/30

Usage : /sbin/ipfwadm -A [direction] command [options] (accounting)

/sbin/ipfwadm -F command [options] (forwarding firewall)

/sbin/ipfwadm -I command [options] (input firewall)

/sbin/ipfwadm -O command [options] (output firewall)

/sbin/ipfwadm -M [-s | -l] [options] (masquerading entries)

/sbin/ipfwadm -h (print this help information)



Command :

-i [policy] insert rule (no policy for accounting rule)

-a [policy] append rule (no policy for accounting rule)

-d [policy] delete rule (no policy for accounting rule)

-l list all rules of this category

-z reset packet/byte counters of all rules of this cateogry

-f remove all rules of this category

-p policy change default policy (accept/deny/reject)

-s tcp tcpfin udp set measuring timeout values

-c check acceptance of IP packet



Options :

-P protocol (either tcp, udp, icmp, or all)

-S address[/mask][port ... ]

source specification

-D address[/mask][port ... ]

destination specification

-V address network interface address

-W name network interface name

-b bidirectional match

-e extended output mode

-k match TCP packets only when ACK set

-m masquerade packets as coming from local host

-o turn on kerjel logginf for matching packets

-r [port] redirect packets to local port (transparent proxying)

-t and xor and/xor TOS field

-v verbose mode

-x expand numbers (display exact value)

-y match TCP packets only when SYN set and ACK cleared

ipfwadm digunakan untuk mendefinisikan aturan pemfilteran pada code firewall di kernel Linux. Jika dikombinasikan denngan suatu INPUT rule dengan option -r (transparent proxying), kernel akan mengirimkan seluruh traffic network yang sesuai dengan rule ke network port di mesin. Sehingga bila telah ada proxy yang mendengar (listening) ke port tersebut, secara otomatis akan merelay traffic network tersebut. Sebagai contoh aturan berikut ini akan melewatkan seluruh traffic outgoing telnet, ke suatu transparent proxy yang berjalan pada firewall dan melakukan listen, pada port telnet



ipfwadm -l -a accept -P tcp -r -S localnet/24 -D 0.0.0.0/0 telnet

Bila destination address (yang ditunjukkan setelah option -D, dalam hal ini 0.0.0.0) diubah, maka dapat dilakukan redirek hanya koneksi tertentu melalui proxy.

Untuk menjalankan transpararet proxy (pada kernel 2.0 ke atas), harus dispesifikasikan beberapa option ketika membangun kernel. Harus dibuat agar code IP firewall menjadi enable, begitu juga option transparent proxy harus enable juga. Walaupun sepintas solusi ini cocok dengan kebutuhan VPN, ada juga kekurangan yaitu :

* Harus ditulis code untuk transparant proxy ini, dan implementasi ini sangat khas Linux. Dan setiap protocol harus diproxy dnegan cara yang berbeda

* Ketika menggunakan proxy, maka akan kehilangan alamat IP asli dari message, sehingga pengukuran seukirit pada sisi lainnya (misalnya ingin diketahui siapa sebenarnya (atau workstation mana yang mengirim packet) menjadi sia sia, karena hanya akan terlihat alamat IP proxy, dan bukannya alamt IP pengirim asli

Penggunaan Real Tunnel

Linux (setidaknya kernel 2.0 ke atas) telah menyediakan fasilitas real tunneling. Fasilitas ini dapat dioperasikan dengan merubah option. Yaitu :



Network firewalls (CONFIG_FIREWALL) [N/y/?] y

IP : Forwarding/gatewaying (CONFIG_IP_FORWARD) [N/y/?] y

IP : Firewalling (CONFIG_IP_FIREWALL) [N/y//?] (NEW) y

IP : tunneling (CONFIG_NET_IPIP) [N/y/m/?] (NEW) m

Ketika membangun fasilitas tunneling sebagai suatu modul (dtemtukan dengan m pada option terakhir), maka modul dapat dimasukkan atau dikelaurkan ketika sistem sedang berjalan. Ini mempermudah ketika melakukan konfigurasi dan uji coba.

Sekali telah dibangun kernel dan modul ini, maka akan ada satu modul untuk tunneling, new_tunnel.o. Modul ini perlu "berkomunikasi" dengan module tunneling pada mesin Linux di sisi jaringan lainnya. Modul yang mengirimkan data akan bertugas memultipleks, dan module penerima (di sisi seberang) akan menangani tugas demultipleks. Kemampuan inilah yang akan digunakan untuk membanguns suatu VPN.

Konfigurasi Tunnel

Setelah membangun kernel, dan modul yang bersangkutan, maka sistem harus di-reboot untuk mengaktifkan kernel yang baru ini. Setelah dilakukan hal tersebut, maka dapat digunakan perintah insmod, rmod, dan lsmod untuk memasukkan (insert), menghilangkan (remove), dan melihat modul yang ada (list)

Setelah memasukkan modul new_tunnel.o dengan perintah insmod, maka dapat diperiksa keberhasilan pemuatan modul tersebut dengan menggunakan perintah lsmod. Maka akan ditampilkan hasil sebagai berikut.



Module #pages : Used by:

new_tunnel 1 0

Dan ketika dilakukan perintah cat /proc/net/devm maka akan terlihat divais networking baru yang bernama tun10.



Inter-| Receive | Transmit

face | packets errs drop fifo frame|packets errs drop fifo colls carrier

lo: 18 0 0 0 0 18 0 0 0 0 0

eth0: 3347 0 0 0 0 4009 0 0 0 19 0

tun10: 0 0 0 0 0 0 0 0 0 0 0

Divais tun10 dapat digunakan sebagai divais networking normal, dan program ifconfig dapat digunakan untuk mengkonfigurasi dan mengaktifkan divais (interface) ini.

Gambar 2. Koneksi yang biasanya dilakukan untuk VPN

Misal, untuk keperluan percobaan, 2 network yang keduanya dihubungkan ke ISP masing masing. Dua network ini akan dikoneksikan secara tranparant. Misal network pada bagian kiri memiliki address 193.78.174.32 dengan subnetmask 255.255.255.224, dan network yang di sebelah kanan memiliki address 1293.78.174.64 dengan subnetmask yang sama pula 255.255.255.224. Setiap network menggunakan firewall T1 dan T2, yang digunakan untuk menghubungkan ke network, dengan address masing masing ditunjukkan pada gambar yaitu T1 adalah 194.21.134.23 dan T2 adalah 208.34.1.12. T1 memiliki address internal 193.78.174.33. dan firewall T2 memiliki address internal 193.78.174.65. Misal seluruh konfigurasi normal telah dilakukan untuk seluruh network dan akan ditunjukkan perubahan yang dilakukan agar tunneling dapat berjalan.

Pada T1, perlu dilakukan konfigurasi interface tun10, sudah barang tentu modul tunneling telah dimasukkan terlebih dahulu. Sehingga akan tampak



ifconfig tun10 193.78.174.33 netmask 255.255.255.224 up

Interface tunnel memiliki address IP yang sama dengan interface internal real (sebenarnya). Setelah interface dikonfigurasi, maka dapat ditambahkan static routing entry, yang akan memforward seluruh traffic untuk network 193.78.174.64. melalui tunnel :



route add -net 193.78.174.64 netmask 255.255.255.224 gw

208.34.1.12 tun10

Perintah di atas akan menambahkan static route untuk network 193.78.174.64. Seluruh traffic untuk address tersebut akan dikirim ke gateway 208.34.1.12 (IP address sisi luar sisi luar dari T2). Pada T2 dilakukan hal yang sama dengan dibalik



ifconfig tun10 193.78.174.65 netmask 255.255.255.224 up

route add -net 193.78.174.32 netmask 255.255.255.224 gw

194.21.134.23 tun10

Setelah mengkonfigurasi ke dua sisi tunnel seperti ini, seluruh traffic dari network satunya akan dimultipleks dan didemultipleks secara otomatis oleh modul tunneling. Dengan menambahkan static route ini, seluruh proses dilakukan secara transparansi tanpa perlu campur tangan user.

Ke dua network sudah dapat berkomunikasi. Tetapi seluruh data dikirim secara gamblang, sehingga dapat dibaca oleh siapapun yang memiliki akses ke paket yang dikirim (misal dengan tcpdump). Bagian selanjutnya akan dibahas bagaimana memecahkan masalah ini.

Privasi

Seperti telah disebutkan, data yang dikirim antar ke dua site tersebut tidak dienkripsi. Untuk keperluan ini dapat digunakan paket public domain, misal SSH. SSH adalah kepanjangan dari Secure Shell, dan program ini mampu melakukan otentikasi ke dua pihak yang melakukan komunikasi dan melakukan ekripsi data yang mengalir. Informasi mengenai SSH dapat ditemukan di http://www.cs.hut.fi/ssh/

Perlu diketahui SSH menggunakan algoritma RSA, yang dipatenkan di USA. Sehingga perlu diperiksa aspek legalitasnya sebelum digunakan.

Penggunaan enkripsi data dan mengirimnya melalui jaringan publik pada beberapa negara adalah ilegal. Sehingga sebaiknya perlu dilakukan klarifikasi dari segi hukum terlebih dahulu. Dengan semakin banyak dipakainya software ekripsi dan makin meluasnya jaringan Internet, maka jumlah negara yang melarang pemakaian enkripsi ini makin bertambah pula. Sebagai contoh, di kalangan negara Eropa para politisi mulai mendiskusikan tentang pemakaian teknologi ini. Kekhawatiran negara-negara ini disebabkan ketakutan akan digunakannya teknologi enkripsi ini untuk mengirimkan pesan rahasia antar teroris yang dapat membahayakan keamanan nasional. Sehingga ingin sekali negara negara tersebut dapat melakukan pengawasan dan dapat membaca seluruh message yang dikirim.

Permasalahan lainnya adalah berkaitan dengan peraturan ITAR di USA. Perangkat lunak enkripsi tergolong amunisi, sehingga terbatas untuk dapat dieksport. Ini berarti perangkat lunak enkripsi yang bermutu tinggi (ingat perangkat lunaknya, bukan algoritmanya), dilarang dieksport. Sehingga versi Netscape internasional hanya menggunakan model enkripsi 40 bit, sedangkan versi yang boleh beredar di USA menggunakan 128 bit.

Karena pelarangan hanya berlaku bagi perangkat lunaknya, dan bukan algoritmanya, maka banyak implementasi dengan enkripsi yang kuat yang dilakukan di luar USA telah beredar. Dan itu legal saja bila dieksport ke USA, walaupun begitu setelah dieksport ke USA, dari USA tak boleh di-reeksport ke negara lainnya lagi.

SSH awalnya ditulis oleh Tatu Ylönen dari Finlandia. Kemampuan SSH yang penting untuk tunneling adalah :

* Metoda otentikasi yang baik. Dengan menggunakan .rhosts bersama-sama dengan hots otentikasi berdasarkan RSA, dan otentikasi murni RSA.
* Seluruh komunikasi secara otomatis, dan tranparansi dienkrip. Enkripsi juga bertujuan untuk melindungi dari spoofed packet dan hijacked connection.
* Arbitrary port TCP/IP dapat di redirek melalui channel terenkripsi pada kedua arah.
* Client RSA melakukan otentikasi mesin server pada awal setiap koneksi untuk melindungi dari trojan horse dan man in the middle attack. Server melakukan otentikasi mesin client dengan menggunakan RSA sebelum menerima otentikasi .rhosts atau /etc/hosts.equiv

* Session X11 bahkan dapat diredirek dengan menggunakan SSH ini untuk melindungi dari orang yang mengambil alih suatu session X. Yang terpenting adalah, session dienkripsi di antara client dan server. Sehingga tunneling server tak perlu tahu enkripsi. SSH akan mengenkripsi pay load area pada paket IP yang asli, dan pada bagian penerima akan mendekripsi pay load area ini, dan memberikan pada program aplikasi.

SSH tersedia untuk sebagian besar variant UNIX, dan bekerja untuk platform yang berbeda. Dapat digunakan mesin LINUX pada salah satu ujung dan mesin SPARC atau HP pada sisi yang lainnya. Setelah mendownload dan menginstall SSH, maka akan ada beberapa program. Dua program yang terpenting adalah ssh dan sshd. Kedua paket ini dapat dibandingkan seperti rsh dan rshd yang awalnya ditemukan di UNIX versi BSD.

Konfigurasi Secure Shell (SSH)

sshd merupakan program server yang berjalan di background dan mendengar setiap koneksi yang datang (melalui port 22). Ketika suatu client melakukan koneksi, maka akan dilakukan otentikasi, dan jika dinyatakan lolos, maka sshd akan memulai program yang diminta oleh client tersebut. Input dan output program dienkripsi dengan menggunakan key yang telah saling ditukar pada saat negotiating phase, yaitu ketika penyusunan koneksi.

Program ssh adalah program client yang digunakan untuk mengeksekusi program pada remote host. ssh biasanya akan melakukan koneksi ke sshd pada mesin server, dan bertukar informasi otentikasi dan key enkripsi, dan kemudian sshd akan mengeksekusi perintah pada mesin remote. Ketika melakukan eksekusi seluruh pertukaran data antar ssh dan sshd, dienkripsi dengan menggunakan salah satu algoritma.

Untuk keperluan tunneling, ssh memberikan beberapa pilihan tambahan yang dapat digunakan untuk mengenkripsi traffic yang melalui tunnel. Option ini ditunjukkan di manual ssh (silahkan lihat ftp://ftp.mfi.com/pub/sysad min) dengan option -L dan -R. Keduanya dapat digunakan untuk melakukan redireksi traffic untuk port tertentu ke port tertentu di mesin remote. Traffic yang diredirect ini dienkripsi sebelum dikirim. Option -L, digunakan jika ingin meredirek akses dari port lokal ke suatu port di sistem remote. Gambar 3 menunjukkan kemungkinan setup. Mesin client yang ingin berkomunikasi secara aman dengan mesin server. Untuk memungkinkan hal ini, satu mesin pada local network yang sama bertindak sebagai client (dapat juga mesin yaang sama dengan client), dan menjalankan ssh dengan option -L. Secara lengkap maka perintah akan tampak seperti :



ssh -L portx:server:porty [nama mesin yang menjalankan sshd]

Mesin yang menjalankan ssh akan menjalankan subshell yang akan mendengar ke port x, dan ketika terjadi koneksi pada port tersebut, program ssh akan mengenkripsi dan membelokkan data ke mesin yang menjalalankan sshd pada mesin remote. Mesin ini kemudian akan mendekripsi data dan merelaynya melalui port y pada server.

Dapat juga melakukan pembelokkan secara remote dengaan menggunakan option -R. Dengan option ini, maka dapat diperintahkan pada sshd pada mesin remote untuk memulai ssh dengan option -L yang sesuai. Sisi remote akan membelokkan seluruh traffic pada port tersebut melalui koneksi yang aman antara ssh dan sshd.

Gambar 3. Setup untuk pembelokan ssh.

Dapat juga membangun suatu tunnel, hanya dengan menggunakan SSH, akan tetapi hal ini hanya mungkin bila seluruh sistem dapat diakses secara langsung dari Internet. Bila tidak mungkin, maka dapat digunakan fasilitas tunelling pada Linux. Ketika melakukan instalasi SSH, secara otomatis akan dihasilkan host identification pairs untuk mesin tersebut. Sehingga tak perlu dilakukan hal yang khusus untuk menghasilkan kunci identifikasi mesin ini.

Kombinasi SSH dan Tunneling

Ketika mengkombinasikan SSH dan tunneling, terdapat bebeberapa pertimbangan. Ketika menggunakan SSH, maka transparansi akan sedikit hilang. Sehingga mungkin ssh dan sshd tak ingin dijalankan pada setiap mesin pada jaringan lokal. Karena akan menghabiskan waktu untuk memaintenance, dan ssh tak dapat jalan pada setiap plaform. Tempat terbaik untuk menginstall ssh dan sshd adalah pada mesin tunneling. Setelah dilakukan instalasi, maka dapat digunakan perintah ssh -R untuk membelokkan (redirect) port pada mesin di jaringan remote ke port pada mesin di jaringan lokal. Hal ini dilakukan pada tiap mesin tunneling di jaringan.. Bahkan dapat dilakukan mesin tunneling akan menjalankan ssh ketika pertama kali dihidupkan.

Ketika menspesifikasikan ssh -R, harus dispesifikasikan alamat IP (atau hostname, bila local name server memiliki copy dari name mapping pada network lainnya) yang digunakan pada jaringan lain. Dengan mengacu ke gambar 2, maka digunakan alamat IP di jangkauan 193.78.174.0, Dan tidak digunakan alamat IP di luar interface sisi luar dari firewall. Dengan menggunakan alamat ini, maka akan seluruh koneksi akan dipaksa melewati koneksi terenkripsi melalui module tunneling.

Ketika ingin menggunakan dari client suatu jaringan ke server di jaringan lain, maka harus dikoneksi melalui redirect port pada mesin tunneling seperti yang dispesifikasi pada perintah ssh -R. Jadi tak dapat dilakukan koneksi transparant langsung ke remote server untuk membangun koneksi terenkripsi, tetapi harus menggunakan sebuah port pada mesin tunneling lokal. Hal ini menjadi kurang begitu praktis, tetapi akan sebanding dengan hasilnya yaitu koneksi jaringan aman, yang mampu mencegah dilakukakannya snooping data.

Ada hal yang berkaitan dengan sisi sekuriti yang lainnya. Harus diperhatikan apakah resiko ini dapat diterima atau tidak. SSH hanyak akan mengenkrispi pay load area, dari paket IP asli, dan tidak mengenkripsi header information. Dan hal ini tak mungkin dilakukan karena header information berisi address IP, dan port dan hal lainnya. Jika dienkripsi, maka akan menghasikan packet IP yang tidak dideliver. Module tunneling akan mengenkapsulasi paket IP asli pada payload area. Header asli akan dimasukkan ke dalam message terenkapsulasi ini, dan header asli akan berisi alamat IP yang akan digunakan di bagian dalam firewall. Dengan tak tertutupnya informasi ini, maka jaringan dapat diserang dengan IP spoofing attack, karena si penyerang akan melihat jenis address IP manakah yang dipercaya oleh firewall. Hal inilah merupakan alasan lainnya, mengapa tunneling harus menggunakan mesin yang terpisah. Firewall sekarang hanya akan mempercayai satu mesin saja, yaitu satu mesin tunneling, dan akan menolak semua koneksi dari mesin lokal lainnya. Sehingga hal ini mengurangi resiko akan suatu serangan IP spoofing.

Sebetulnya masalah di atas dapat diatasi dengan membangun suatu otentikasi dan enkripsi dalam modul tunelling itu sendiri. Module tunneling seharusnya mengenkripsi payload area dari paket IP yang akan dikirim ke Internet. Dnegan mengenkripsi payload area, modul akan secara otomatis tak hanya mengenkripsi data asli, tetapi juga berikut informasi header, sehingga menyembunyikan address IP internal. Beberapa produk misal WriteProtect keluaran Le Resau, menggunakan modulke tunneling yang memecahkan masalah kedua ini, sehingga memungkinkan terjadinya tunnel yang terkenkrispsi secara benar benar transparan.

Penutup

Dengan menggunakan software yang saat ini tersedia di Internet, dapat dibangun suatu Virtual Private Network sendiri. Dengan menggunakan tunnel, dapat disembunyikan address IP internal dari Internet. Satu keuntungan adalah mampunya pemilihan jangkauan IP sendiri untuk penggunaan internal, dan memberikan satu jangkauan IP untuk setiap kantor. Seluruh kemampuan ini telah ada di Linux.

Dengan menggunakan paket lainnya, SSH, dapat dienkripsi data yang dipertukarkan antara 2 situs. Dengan menggunakan algoritma yang sesuai, dapat dibangun suatu komunikasi data yang aman dan otentikasi identitas pada pihak yang terlibat dalam proses komunikasi. Dengan menggunakan mesin tunneling terpisah, dapat mempertinggi otentikasi pada firewall dan membuat berbagai jaringan dapat saling berkomunikasi.

Akhir kata, selamat menggunakan Linux.

Tidak ada komentar:

Posting Komentar