Teori
IPsec adalah standar untuk mengamankan komunikasi IP melalui authentikasi, dan enkripsi. Selain itu, juga bisa mengkompresi paket, mengurangi beban. Protokol berikut merupakan bagian dari standar IPsec:
AH (Authentication Header) menyediakan jaminan authentikasi untuk paket yang dikirimkan. Hal ini dilakukan dengan menghitung checksum dari paket menggunakan algoritma kriptografi. Jika checksum benar, maka penerima bisa yakin bahwa paket tidak dimodifikasi, dan paket benar-benar berasal dari pengirim (diasumsikan bahwa kunci hanya diketahui oleh pengirim dan penerima).
ESP (Encapsulating Security Payload) digunakan untuk mengenkripsi paket. Hal ini membuat data pada paket aman, dan hanya dapat dibaca oleh host yang memiliki kunci dekripsi yang benar.
IPcomp (IP payload compression) menyediakan kompresi sebelum paket dienkripsi. Hal ini berguna, karena data yang dienkripsi biasanya terkompresi lebih jelek daripada data yang tidak terenkripsi.
IKE (Internet Key Exchange) menyediakan media untuk melakukan negosiasi kunci secara aman. Harap diperhatikan bahwa IKE bersifat opsinal, kunci bisa dikonfigurasikan secara manual.
Terdapat dua mode operasi: mode transport digunakan untuk mengenkripsi koneksi normal antar dua host, mode tunnel mengenkapsulasi paket asli pada header baru. Pada bab ini, kita akan melihat pada mode transport, karena tujuan utama dari bab ini adalah menunjukan bagaimana membuat pengaturan koneksi yang aman antara dua host.
Terdapat dua metode utama untuk otentikasi. Anda bisa menggunakan kunci manual, atau daemon Internet Key Exchange (IKE) seperti racoon, yang secara otomatis bertukar kunci diantara dua host secara aman. Pada kedua kasus, Anda harus menentukan aturan pada Security Policy Database (SPD). Basis data ini digunakan oleh kernel untuk menentukan jenis aturan keamanan apa yang diperlukan untuk berkomunikasi dengan host lain. Jika Anda menggunakan kunci manual, Anda harus mengatur Security Association Database (SAD), yang menentukan algoritma enkripsi dan kunci yang harus digunakan untuk komunikasi yang aman dengan host lain. Jika Anda menggunakan daemon IKE, asosiasi keamanan akan dibuat secara otomatis.
Dukungan native IPsec hanya tersedia pada kernel Linux 2.6.x. Kernel versi sebelumnya tidak memiliki dukungan native terhadap IPsec. Jadi, pastikan Anda sudah memiliki kernel 2.6.x. Kernel 2.6 tersedia pada Slackware Linux 10.0, 10.1, dan 10.2 dari direktori testing
CONFIG_INET_AH=y
CONFIG_INET_ESP=y
CONFIG_INET_IPCOMP=y
Atau, Anda bisa mengkompilasi dukungan untuk protokol IPsec sebagai modul:
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
CONFIG_INET_IPCOMP=m
Pada bab ini, kita hanya akan menggunakan transformasi AH dan ESP, tetapi bukan ide yang jelek untuk mengaktifkan transformasi IPComp untuk konfigurasi lebih lanjut dari IPsec. Selain dukungan untuk protokol IPsec, Anda harus mengkompilasi dukungan kernel untuk algoritma enkripsi dan hash yang akan digunakan oleh AH atau ESP. Linux atau dukungan modul untuk algoritma ini bisa diaktifkan pada opsi CONFIG_CRYPTO. Tidaklah merepotkan untuk mengkompilasi semua algoritma cipher dan hash sebagai sebuah modul.
Ketika Anda memilih untuk mengkompilasi dukungan IPsec sebagai modul, pastikan bahwa modul yang diperlukan sudah dimuat. Sebagai contoh, jika Anda hendak menggunakan ESP untuk koneksi IPv4, muat modul esp4.
Kompilasi kernel seperti biasa dan boot kernel tersebut.
Langkah berikutnya adalah menginstall IPsec-Tools. Aplikasi ini merupakan port dari utilitas IPsec KAME. Download kode terbaru dan uraikan, konfigurasi, dan install:
# tar jxf ipsec-tools-x.y.z.tar.bz2
# cd ipsec-tools-x.y.z
# CFLAGS="-O2 -march=i486 -mcpu=i686" \
./configure --prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
--enable-hybrid \
--enable-natt \
--enable-dpd \
--enable-frag \
i486-slackware-linux
# make
# make install
Ganti x.y.z dengan kode versi yang didownload. Flag yang kita tentukan selama konfigurasi kode sumber adalah:
--enable-dpd: mengaktifkan dead peer detection (DPD). DPD adalah metode untuk mendeteksi apakah sembarang host dimana asosiasi keamanan sudah ditentukan tidak dapat dapat dicapai. Jika benar, maka asosiasi keamanan untuk host tersebut bisa dihapus.
--enable-natt: mengaktifkan NAT traversal (NAT-T). Karena NAT mengganti header IP, hal ini menimbulkan masalah untuk penjaminan authentikasi dari paket. NAT-T adalah metode yang membantu mengatasi masalah ini. Mengkonfigurasi NAT-T diluar batasan dari artikel ini.
Kita akan menggunakan sebuah contoh sebagai panduan untuk mengatur koneksi tidak terenkripsi diantara dua host. Host akan memiliki alamat IP 192.168.1.1 dan 192.168.1.169. “Mode transport ” akan digunakan dengan transformasi AH dan ESP beserta kunci manual.
Langkah pertama adalah menulis berkas konfigurasi yang akan kita beri nama /etc/setkey.conf
/etc/setkey.conf
#!/usr/sbin/setkey -f
# Flush the SAD and SPD
flush;
spdflush;
add 192.168.1.1 192.168.1.169 ah 0x200 -A hmac-md5
0xa731649644c5dee92cbd9c2e7e188ee6;
add 192.168.1.169 192.168.1.1 ah 0x300 -A hmac-md5
0x27f6d123d7077b361662fc6e451f65d8;
add 192.168.1.1 192.168.1.169 esp 0x201 -E 3des-cbc
0x656c8523255ccc23a66c1917aa0cf30991fce83532a4b224;
add 192.168.1.169 192.168.1.1 esp 0x301 -E 3des-cbc
0xc966199f24d095f3990a320d749056401e82b26570320292
spdadd 192.168.1.1 192.168.1.169 any -P out ipsec
esp/transport//require
ah/transport//require;
spdadd 192.168.1.169 192.168.1.1 any -P in ipsec
esp/transport//require
ah/transport//require;
Baris pertama (baris yang diakhiri “;”) menambahkan kunci untuk pengujian checksum header untuk paket yang datang dari 192.168.1.1 dan menuju 192.168.1.169. Baris kedua menambahkan hal yang sama untuk paket datang dari 192.168.1.169 menuju 192.168.1.1. Baris keempat dan kelima mendefinisikan kunci untuk enkripsi data seperti yang dilakukan oelh dua baris pertama. Akhirnya, baris “spadd” mendefinisikan dua aturan, yaitu paket yang keluar dari 192.168.1.1 menuju 192.168.1.169 harus (require) di-enkodekan (esp) dan “signed” dengan header otorisasi. Aturan kedua adalah untuk paket yang masuk dan melakukan hal yang sama dengan paket keluar.
Harap Anda perhatikan bahwa Anda tidak seharusnya menggunakan kunci ini, tetapi kunci unik Anda sendiri. Anda bisa menghasilkan kunci menggunakan perangkat /dev/random
# dd if=/dev/random count=16 bs=1 | xxd -ps
Perintah ini menggunakan dd untuk menghasilkan 16 byte dari /dev/random
# dd if=/dev/random count=24 bs=1 | xxd -ps
Pastikan bahwa berkas /etc/setkey.conf
# chmod 600 /etc/setkey.conf
Berkas /etc/setkey.conf
-P in
dan -P out
dibalik. Jadi, berkas /etc/setkey.conf
#!/usr/sbin/setkey -f
# Flush the SAD and SPD
flush;
spdflush;
add 192.168.1.1 192.168.1.169 ah 0x200 -A hmac-md5
0xa731649644c5dee92cbd9c2e7e188ee6;
add 192.168.1.169 192.168.1.1 ah 0x300 -A hmac-md5
0x27f6d123d7077b361662fc6e451f65d8;
add 192.168.1.1 192.168.1.169 esp 0x201 -E 3des-cbc
0x656c8523255ccc23a66c1917aa0cf30991fce83532a4b224;
add 192.168.1.169 192.168.1.1 esp 0x301 -E 3des-cbc
0xc966199f24d095f3990a320d749056401e82b26570320292
spdadd 192.168.1.1 192.168.1.169 any -P in ipsec
esp/transport//require
ah/transport//require;
spdadd 192.168.1.169 192.168.1.1 any -P out ipsec
esp/transport//require
ah/transport//require;
Konfigurasi IPsec bisa diaktifkan dengan perintah setkey :
# setkey -f /etc/setkey.conf
Jika Anda hendak mengaktifkan IPsec secara permanen, Anda bisa menambahkan baris berikut pada /etc/rc.d/rc.local
/usr/sbin/setkey -f /etc/setkey.conf
Setelah mengkonfigurasi IPsec, Anda bisa menguji koneksi dengan menjalankan tcpdump dan melakukan ping ke host yang lain. Anda bisa melihat jika AH dan ESP digunakan pada hasil keluaran perintah tcpdump :
# tcpdump -i eth0
tcpdump: listening on eth0
11:29:58.869988 terrapin.taickim.net > 192.168.1.169: AH(spi=0x00000200,seq=0x40f): ESP(spi=0x00000201,seq=0x40f) (DF)
11:29:58.870786 192.168.1.169 > terrapin.taickim.net: AH(spi=0x00000300,seq=0x33d7): ESP(spi=0x00000301,seq=0x33d7)
Judul dari pertukaran kunci otomatis sudah dibahas sebentara pada perkenalan dari bab ini. Secara sederhana, IPsec dengan IKE bekerja seperti berikut.
Beberapa proses pada host hendak terhubung ke host lain. Kernel menguji apakah terdapat aturan keamanan yang sudah ditentukan untuk host lain. Jika sudah terdapat asosiasi keamanan yang berhubungan dengan aturan, koneksi bisa dibuat, dan akan diautentikasi, dienkripsi, dan atau dikompresi sesuai dengan definisi. Jika tidak ada asosiasi keamanan, kernel akan meminta daemon IKE untuk membuat asoasiasi keamanan yang diperlukan.
Pada tahap pertama dari pertukaran kunci, daemon IKE mencoba memverifikasi authentikasi dari host lain. Hal ini biasanya dilakukan dengan kunci yang sudah dipersiapkan (preshared) atau sertifikat. Jika authentikasi berhasil, maka kanal rahasia akan dibentuk diantara dua host, yang biasanya disebut asosiasi keamananan IKE, untuk melanjutkan dengan pertukaran kunci.
Selama fase kedua dari pertukaran kunci, asosiasi keamanan untuk komunikasi dengan host lain akan dibentuk. Hal ini melibatkan pemilihan algoritma enkripsi yang akan digunakan, dan menghasilkan kunci yang akan digunakan untuk mengenkripsi komunikasi.
Pada tahap ini, langkah pertama akan diulangi kembali, tetapi karena sudah ada asosiasi keamanan, komunikasi bisa dilanjutkan.
Daemon IKE racoon disertakan dengan aplikasi KAME IPsec, bagian berikut menjelaskan bagaimana mengatur racoon.
Seperti biasa, langkah pertama untuk mengatur IPsec adalah untuk mendefinisikan aturan keamanan. Kebalikan dari kunci manual, Anda tidak perlu membuat asosiasi keamanan, karena racoon akan membuatkan untuk Anda. Kita akan menggunakan IP host yang sama dengan contoh diatas. Aturan keamanan tampak seperti berikut:
#!/usr/sbin/setkey -f
# Flush the SAD and SPD
flush;
spdflush;
spdadd 192.168.1.1 192.168.1.169 any -P out ipsec
esp/transport//require;
spdadd 192.168.1.169 192.168.1.1 any -P in ipsec
esp/transport//require;
Orang yang cermat akan melihat bahwa aturan AH tidak ada pada contoh ini. Pada sebagian besar kasus, hal ini bukanlah masalah, ESP bisa menyediakan authentikasi. Tetapi Anda harus waspada bahwa authentikasi menjadi lebih lebar; ia tidak menjaga informasi diluar header ESP. Tetapi lebih efisien daripada mengenkapsulasi paket ESP pada AH.
Dengan aturan keamanan sudah terbentuk, Anda bisa mengkonfigurasi racoon. Karena informasi yang spesifik untuk koneksi, seperti metode authentikasi ditentukan pada konfigurasi fase satu, kita bisa menggunakan konfigurasi fase dua yang lebih umum. Juga dimungkinkan untuk membuat pengaturan fase dua yang spesifik untuk beberapa host tertentu. Tetapi secara umum, konfigurasi umum akan cukup untuk pengaturan sederhana. Kita juga akan menambahkan path untuk berkas kunci preshared, dan direktori sertifikat. Ini adalah contoh dari /etc/racoon.conf
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";
sainfo anonymous {
{
pfs_group 2;
lifetime time 1 hour;
encryption_algorithm 3des, blowfish 448, rijndael;
authentication_algorithm hmac_sha1, hmac_md5;
compression_algorithm deflate;
}
Penanda sainfo
digunakan untuk membuat blok yang menentukan pengaturan untuk asosiasi keamanan. Parameter anonymous
digunakan untuk menentukan bahwa pengaturan ini harus digunakan untuk semua host yang tidak memiliki konfigurasi spesifik. pfs_group
menentukan grup mana dari eksponensial Diffie-Hellman yang harus digunakan. Grup yang berbeda menyediakan panjang angka bilangan prima yang berbeda yang akan digunakan untuk proses authentikasi. Grup 2 menyediakan panjang kunci 1024 bit jika Anda hendak menggunakan panjang yang lebih besar. Untuk keamanan yang lebih baik, Anda bisa menggunakan grup lain (seperti 14 untuk panjang 2048 bit). encryption_algorithm
menentukan algoritma enkripsi apa yang hendak digunakan oleh host untuk enkripsi ESP. authentication_algorithm
menentukan algoritma yang digunakan untuk Authentikasi ESP atau AH. Akhirnya, compression_algorithm
digunakan untuk menentukan algoritma kompresi ketika IPcomp ditentukan pada asosiasi.
Langkah berikutnya adalah menambahkan konfigurasi fase satu untuk pertukaran kunci dengan host lain pada berkas konfigurasi racoon.conf
remote 192.168.1.169
{
exchange_mode aggressive, main;
my_identifier address;
proposal {
encryption_algorithm 3des;
hash_algorithm sha1;
authentication_method pre_shared_key;
dh_group 2;
}
}
Blok remote
menentukan konfigurasi fase satu. Opsi exchange_mode
digunakan untuk mengkonfigurasi mode pertukaran apa yang harus digunakan untuk fase. Anda bisa menyebutkan lebih dari satu mode, tetapi mode pertama akan digunakan jika host ini adalah pelaku awal dari pertukaran kunci. Opsi my_identifier
menentukan penanda apa yang harus dikirimkan pada host remote. Jika opsi ini diabaikan, address
akan digunakan, yang mengirimkan alamat IP sebagai penanda. Blok proposal
menentukan parameter yang akan diusulkan ke host lain selama authentikasi fase satu. Opsi encryption_algorithm
, dan dh_group
sudah dijelaskan diatas. Opsi hash_algorithm
bersifat wajib, dan mengkonfigurasi algoritma hash yang harus dipakai. Hal ini bisa berupa md5
, atau sha1
. Opsi authentication_method
sangat penting untuk konfigurasi ini, karena parameter ini digunakan untuk menentukan kunci preshared apa yang harus digunakan, dengan pre_shared_key
.
Dengan racoon yang sudah diatur, terdapat satu hal lagi yang perlu dilakukan, kunci preshared harus ditambahkan pada /etc/racoon/psk.txt
192.168.1.169 somekey
Pada tahap ini, konfigurasi dari aturan keamanan dan racoon sudah selesai, dan Anda bisa mulai menguji konfigurasi. Merupakan ide yang bagus untuk menjalankan racoon dengan parameter -F
. Hal ini akan menjalankan racoon didepan layar (foreground), membuatnya lebih mudah untuk menangkap pesan kesalahan. Untuk menjalankannya:
# setkey -f /etc/setkey.conf
# racoon -F
Sekarang karena Anda telah menambahkan aturan keamanan pada basis data, dan menjalankan racoon, Anda bisa menguji konfigurasi IPsec Anda. Sebagai contoh, Anda bisa melakukan ping ke host lain sebagai permulaan. Pertama kali Anda melakukan ping, Anda akan menemui kegagalan:
$ ping 192.168.1.169
connect: Resource temporarily unavailable
Alasannya adalah karena asosiasi keamanan harus dibentuk. Tetapi paket ICMP akan memicu pertukaran kunci. Ping akan memicu pertukaran kunci. Anda bisa melihat apakah pertukaran berhasil atau tidak dengan melihat pada pesan log racoon pada /var/log/messages
Apr 4 17:14:58 terrapin racoon: INFO: IPsec-SA request for 192.168.1.169 queued due to no phase1 found.
Apr 4 17:14:58 terrapin racoon: INFO: initiate new phase 1 negotiation: 192.168.1.1[500]<=>192.168.1.169[500]
Apr 4 17:14:58 terrapin racoon: INFO: begin Aggressive mode.
Apr 4 17:14:58 terrapin racoon: INFO: received Vendor ID: DPD
Apr 4 17:14:58 terrapin racoon: NOTIFY: couldn't find the proper pskey, try to get one by the peer's address.
Apr 4 17:14:58 terrapin racoon: INFO: ISAKMP-SA established 192.168.1.1[500]-192.168.1.169[500] spi:58c4669f762abf10:60593eb9e3dd7406
Apr 4 17:14:59 terrapin racoon: INFO: initiate new phase 2 negotiation: 192.168.1.1[0]<=>192.168.1.169[0]
Apr 4 17:14:59 terrapin racoon: INFO: IPsec-SA established: ESP/Transport 192.168.1.169->host1ip; spi=232781799(0xddff7e7)
Apr 4 17:14:59 terrapin racoon: INFO: IPsec-SA established: ESP/Transport 192.168.1.1->192.168.1.169 spi=93933800(0x59950e8)
Setelah pertukaran kunci, Anda bisa memastikan bahwa IPsec sudah dikonfigurasi dengan benar dengan menganalisa paket yang masuk dan keluar dengan tcpdump. tcpdump tersedia pada set disk n. Misalkan koneksi keluar ke host lain melalui antarmuka eth0, Anda bisa menganalisa paket yang melalui antarmuka eth0 dengan tcpdump -i eth0. Jika paket keluar dienkripsi dengan ESP, Anda bisa melihatnya pada hasil keluaran tcpdump. Sebagai contoh:
# tcpdump -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
17:27:50.241067 IP terrapin.taickim.net > 192.168.1.169: ESP(spi=0x059950e8,seq=0x9)
17:27:50.241221 IP 192.168.1.169 > terrapin.taickim.net: ESP(spi=0x0ddff7e7,seq=0x9)
0 komentar:
Posting Komentar
Mohon maaf bila dalam mempublikasikan entry ini kurang memuaskan, baru belajar coy...