Difference between revisions of "IPv6 Enkripsi: Automatic key exchange (IKE)"

From OnnoWiki
Jump to navigation Jump to search
 
(20 intermediate revisions by the same user not shown)
Line 1: Line 1:
IPsec membutuhkan pertukaran kunci rahasia.
+
Jika anda ingin menggunakan IPsec untuk berkomunikasi dengan seseorang, Hal ini diperlukan untuk membentuk Security Association (IPsec-SA) antara Anda dan rekan sebelum itu. Ada dua cara untuk membangun itu. Salah satunya adalah dengan menggunakan konfigurasi manual. Cara lain adalah automatis konfigurasi. Dalam contoh berikut ini, kita akan menggunakan “racoon” untuk melakukan konfigurasi secara automatis.
Hal ini dilakukan secara automatis oleh daemon IKE.
 
IKE juga menangani authentikasi peer, baik melalui kunci rahasia yang di ketahui bersama (biasa di sebut “pre-shared secret”) atau melalui kunci  RSA (yang dapat digunakan dari sertifikat X.509).
 
  
Saat ini, ada dua implementasi IKE daemon yang tersedia di Linux, yang sangat berbeda dalam cara konfigurasi maupun penggunaan.
+
Beberapa parameter (Key) harus dipertukarkan antara anda dan rekan untuk membangun IPsec-SA. Racoon pertukaran mereka dengan menggunakan IKE. IKE membangun SA sendiri sendiri sambil bertukar Key, jangan menggunakan IPsec-SA. Ada dua fase dalam IKE. Salah satu fase untuk membangun SA untuk komunikasi sendiri (IKE-SA). Fase yang lain untuk membangun Ipsec-SA. Disini kita menyebutnya, Tahap 1 dan Tahap 2 . Inisiator untuk memulai IKE mengusulkan beberapa parameter untuk responden, dan pilihan responden salah satu dari mereka atau menolak mereka di setiap tahap. Juga racoon memiliki beberapa parameter untuk pengelolaan dari proses pertukaran. Oleh karenanya, ada banyak banyak item untuk mengkonfigurasi racoon.
  
Tampaknya, “pluto” lebih sederhana daripada implementasi *S/WAN.
+
Hal ini tidak mudah bagi pengguna umum untuk memahami semuanya. Dokumen ini menjelaskan cara mengkonfigurasi racoon singkat. Konfigurasi kompleks tidak dijelaskan. Juga untuk menggunakan sertifikat dari lingkup dalam dokumen ini.
  
==IKE daemon “racoon”==
+
IPsec membutuhkan pertukaran kunci rahasia. Hal ini dilakukan secara automatis oleh daemon IKE (IPSec Key Exchange). IKE juga menangani authentikasi peer, baik melalui kunci rahasia yang di ketahui bersama (biasa di sebut “pre-shared secret”) atau melalui kunci RSA (yang dapat digunakan dari sertifikat X.509).
  
IKE daemon “racoon” di ambil dari KAME project dan di porting ke Linux. Distribusi Linux Modern berisi paket deamon ini di “ipsec-tools”. Ada dua executable untuk bisa mensetup IPsec dengan baik. Ada baiknya membaca-baca Linux Advanced Routing & Traffic Control HOWTO / IPSEC.
+
Pada kesempatan ini, kita akan mencoba untuk menggunakan ipsec-tools di Ubuntu sebagai contoh. Ujicoba akan dilakukan untuk membangun sambungan terenkripsi antara dua node dengan IPv6 address, yaitu:
  
===Manipulation of the IPsec SA/SP database with the tool “setkey”===
+
* Host A IPv6 2345::1
 +
* Host B IPv6 2345::2
  
“setkey” is important to define the security policy (SP) for the kernel.
 
  
File: /etc/racoon/setkey.sh
+
==Mekanisme Dasar IPsec==
  
Example for an end-to-end encrypted connection in transport mode
+
Kernel mempertahankan dua database untuk menggunakan IPsec. Salah satunya adalah Security Policy Database (SPD). Kernel mengacu SPD dalam rangka untuk memutuskan apakah akan menerapkan IPsec untuk paket atau tidak. Juga entri SPD menentukan / bagaimana IPsec-SA diterapkan. Satu lagi adalah Security Association Database (SAD). Entri SAD mengandung Key setiap IPsec-SA.
  
#!/sbin/setkey -f
+
Gambar berikut menentukan aliran sampai kernel memberlakukan IPsec-SA untuk paket.
flush;
 
spdflush;
 
spdadd 2001:db8:1:1::1 2001:db8:2:2::2 any -P out ipsec esp/transport//require;
 
spdadd 2001:db8:2:2::2 2001:db8:1:1::1 any -P in  ipsec esp/transport//require;
 
  
Example for a end-to-end encrypted connection in tunnel mode
+
[[File:Ipsec.jpg|center|400px|thumb]]
  
#!/sbin/setkey -f
+
Proses yang terjadi pada saat membangun sambungan menggunakan IKE (IPsec Key Exchange) adalah sebagai berikut:
flush;
 
spdflush;
 
spdadd 2001:db8:1:1::1 2001:db8:2:2::2 any -P out ipsec esp/tunnel/2001:db8:1:1::1-2001:db8:2:2::2/require;
 
spdadd 2001:db8:2:2::2 2001:db8:1:1::1 any -P in  ipsec esp/tunnel/2001:db8:2:2::2-2001:db8:1:1::1/require;
 
  
For the other peer, you have to replace “in” with “out”
+
# Administrator set policy ke SPD menggunakan setkey.
 +
# Kernel mengacu pada SPD untuk mengambil keputusan untuk menjalankan IPsec pada sebuah packet.
 +
# Jika IPsec diperlukan, kernel akan mengambilKey untuk IPsec-SA dari SAD.
 +
# Jika gagal, kernel akan mengirim permohonan untuk mengambil Key ke racoon.
 +
# racoon akan mempertukarkan Key dengan menggunakan IKE dengan yang lain untuk membangun IPsec-SA.
 +
# racoon meletakan Key kedalam SAD.
 +
#  Kernel dapat mengirimkan paket yang menggunakan IPsec.
  
===Configuration of the IKE daemon “racoon”===
+
Seorang administrator harus mengkonfigurasi SPD dengan menggunakan perintah setkey , dan harus mengkonfigurasi racoon. Di samping itu, dia juga perlu menjalankan racoon atau IKE sejenis di sisi satu-nya lagi.
  
“racoon” requires a configuration file for proper execution. It includes the related settings to the security policy, which should be set up previously using “setkey”.
+
==Instalasi racoon==
  
File: /etc/racoon/racoon.conf
+
Instalasi ipsec-tools menggunakan perintah
  
  # Racoon IKE daemon configuration file.
+
  # apt-get install racoon ipsec-tools
  # See 'man racoon.conf' for a description of the format and entries.
+
 
  path include "/etc/racoon";
+
Pada pertanyaan “Configuration mode for racoon IKE daemon:” jawab “direct”
  path pre_shared_key "/etc/racoon/psk.txt";
+
 
 +
Racoon membutuhkan ijin root untuk bisa berjalan. Racoon menggunakan UDP port 500, di samping itu juga membuka file log biasanya di /var/log/racoon.log .
 +
Ada beberapa opsi yang dapat digunakan Racoon , beberapa yang sering digunakan adalah:
 +
 
 +
-f configfile
 +
    menentukan alternate configuration file.  
 +
    /usr/local/v6/etc/racoon.conf sebagai default.
 +
-l logfile
 +
    memberitahukan alternate log file.
 +
    /var/log/racoon.log sebagai default.
 +
-d dlevel
 +
    Set debugging level dengan hexadecimal.
 +
 
 +
Di bawah adalah perintah dimana racoon akan mengeluarkan banyak informasi ke standard output maupun log file.
 +
 
 +
# racoon -d 0xffffffff
 +
 
 +
==Contoh Konfigurasi Racoon==
 +
 
 +
Konfigurasi racoon di Ubuntu biasanya tersimpan di /etc/racoon/racoon.conf
 +
 
 +
  # vi /etc/racoon/racoon.conf  
 +
 
 +
Penjelasan berikut adalah salah satu dari konfigurasi paling sederhana. Bagian ini akan di jelaskan secara bertahap
 +
 
 +
  path script "/etc/racoon/scripts";  
 +
  path pre_shared_key "/etc/racoon/psk.txt";  
 +
path certificate "/etc/racoon/certs";
 +
log notify;
 +
 +
remote anonymous
 +
{
 +
exchange_mode aggressive ;
 +
my_identifier user_fqdn "sakane@kame.net" ;
 +
lifetime time 24 hour ;
 +
proposal {
 +
encryption_algorithm 3des;
 +
hash_algorithm sha1;
 +
authentication_method pre_shared_key ;
 +
dh_group 2 ;
 +
}
 +
}
 
   
 
   
  listen
+
  sainfo anonymous
 
  {
 
  {
        isakmp 2001:db8:1:1::1;
+
fs_group 2;
 +
lifetime time 12 hour ;
 +
lifetime byte 50 MB ;
 +
encryption_algorithm 3des, blowfish, des, rijndael ;
 +
authentication_algorithm hmac_sha1, hmac_md5 ;
 +
compression_algorithm deflate ;
 
  }
 
  }
 +
 +
 +
* path pre_shared_key – berisi file yang mendefinisikan pre-shared keys. Ini digunakan untuk meng-authentikasi peer pada phase 1. Jika kita tidak menggunakan pre-shared key authentication method, kita tidak perlu men-definisikannya. Format yang digunakan seperti hosts. Artinya, parameter di pisahkan oleh beberapa spasi atau tab. Pada contoh di atas, pre-shared key di definisikan sebagai berikut;
 +
 +
  sakane@kame.net secretkey
 +
 +
* my_identifier men-definisikan identifier yang digunakan untuk authentikasi pada phase 1. Kata selanjutnya "user_fqdn" yang artinya penggunaan User FQDN sebagai identifier sendiri.
 +
 +
 +
remote
 +
 +
* remote mendefinsikan tentang Phase 1. anonymous berarti akan melakukan match sembarang peer. Kita dapat saja membatasi exchange dari masing-masing peer.
 +
* exchange_mode mendefinnisikan exchange mode pada Phase 1; aggressive berarti exchange menggunakan aggressive mode. Kita dapat menggunakan main sebagai main mode dan base sebagai base mode. Jika peer memulai exchange dengan mode yang tidak di definisikan disini, racoon akan menolak-nya. racoon dapat menerima ke tiga mode tersebut.
 +
* identifier di remote menentukan apa identifier sendiri yang digunakan. Identifier akan mengirimkan ke peer, dan peer akan menggunakan sebagai satu dari authentication information. Dalam contoh di atas, identifier di remote menggunakan user_fqdn, oleh karenanya "sakane@kame.net" digunakan dalam dentifier user_fqdn.
 +
* lifetime time dan lifetime byte menentukan lifetime dari IKE-SA. Ini berdasarkan time (waktu) dan berdasarkan byte. Kita dapat menggunakan sec, min dan hour sebagai unit dari  lifetime berdasarkan time. Dan kita juga dapat menggunakan B, KB, MB dan TB sebagai  unit dari lifetime berdasarkan bytes.
 +
* proposal mendefinisikan proposal pada Phase 1. Kita dapat saja menggunakan beberapa / multiple proposal.
 +
* encryption_algorithm menunjukan algoritma enkripsi pada Phase 1. racoon dapat menggunakan DES, 3DES, RC5, IDEA, CAST, BLOWFISH sebagai algoritma enkripsi. Kita perlu menentukan des, 3des, rc5, idea, cast, blowfish. Kita dapat menentukan salah satu dari algoritma tersebut di proposal untuk Phase 1.
 +
* hash_algorithm menentukan hash algorithm. racoon dapat menggunakan MD5 dan SHA1 sebagai hash algorithm. Kita perlu menentukan md5 dan sha1. Kita dapat menentukannya di proposal untuk Phase 1.
 +
* authentication_method menentukan authentication method pada Phase 1. Pada contoh di atas, kita menggunakan Pre-shared Key sebagai authentication method. Racoon dapat menggunakan RSA Signature authentication method.
 +
* dh_group dapat menentukan group untuk Diffie-Hellman Key Exchange. Racoon dapat menggunakan 1, 2 dan 5 sebagai group. Kita perlu menentukan 1, 2 dan 5.
 +
 +
sainfo
 +
 +
* sainfo menentukan beberapa parameter yang digunakan pada Phase 2. anonymous berarti akan match ke sembarang peer. Kita dapat saja membatasi exchange untuk masing-masing peer.
 +
* pfs_group menentukan group untuk Diffie-Hellman Key Exchange di Phase 2. Racoon dapat menggunakan 1, 2 dan 5 sebagai group. Kita perlu menentukan 1, 2 dan 5 .
 +
* lifetime time dan lifetime byte menentukan lifetime dari IPsec-SA. Ini berdasarkan time (waktu) dan berdasarkan byte. Kita dapat menggunakan sec, min dan hour sebagai unit dari  lifetime berdasarkan time. Dan kita juga dapat menggunakan B, KB, MB dan TB sebagai  unit dari lifetime berdasarkan bytes.
 +
* encryption_algorithm menentukan proposal untuk algoritma enkripsi untuk ESP. racoon dapat menggunakan DES, 3DES, CAST, BLOWFISH, TWOFISH, RIJNDAEL dan NULL sebagai algoritma enkripsi untuk ESP. 3des, cast128, blowfish, des, twofish, rijndael ; Kita perlu menentukan des, 3des, cast, blowfish, twofish, rijndael dan null_enc .
 +
* authentication_algorithm menentukan proposal untuk authentication algorithm untuk ESP dan AH. racoon dapat menggunakan HMAC-SHA1, HMAC-MD5 dan Keyed-MD5 sebagai authentication algorithm. Kita perlu menentukan hmac_sha1, hmac_md5 dan kpdk.
 +
* compression_algorithm menentukan proposal untuk compression algorithm untuk IPCOMP. racoon dapat menggunakan DEFLATE pada saat ini. Kita perlu menulis deflate.
 +
 +
'''CATATAN:''' racoon tidak mempunyai daftar dari security protocol yang akan di tawarkan. Daftar security protocol di berikan oleh kernel. Sebelumnya kita harus mendefinisikan semua algoritma yang mungkin digunakan kedalam sainfo meskipun kita tidak membutuhkan algoritma kompresi apapun.
 +
Contoh di atas akan menerima exchange untuk Phase 1 dan Phase 2, jika kita memasukan Pre-shared Key yang benar sebelum exchange. Racoon dapat membatasi untuk melakukan exchange dengan peer setiap phase.
 +
 +
==Contoh konfigurasi Sederhana==
 +
 +
log notify;
 +
path pre_shared_key "/etc/racoon/psk.txt";
 +
path certificate "/etc/racoon/certs";
 
   
 
   
  remote 2001:db8:2:2::2
+
  remote anonymous {
{
+
         exchange_mode main,aggressive;
         exchange_mode main;
+
         proposal {
        lifetime time 24 hour;
 
         proposal
 
        {
 
 
                 encryption_algorithm 3des;
 
                 encryption_algorithm 3des;
                 hash_algorithm md5;
+
                 hash_algorithm sha1;
 
                 authentication_method pre_shared_key;
 
                 authentication_method pre_shared_key;
                 dh_group 2;
+
                 dh_group modp1024;
         }  
+
         }
 +
        generate_policy off;
 
  }
 
  }
 
   
 
   
# gateway-to-gateway
+
  sainfo anonymous {
  sainfo address 2001:db8:1:1::1 any address 2001:db8:2:2::2 any
+
         pfs_group modp768;
{
 
         lifetime time 1 hour;
 
 
         encryption_algorithm 3des;
 
         encryption_algorithm 3des;
 
         authentication_algorithm hmac_md5;
 
         authentication_algorithm hmac_md5;
 
         compression_algorithm deflate;
 
         compression_algorithm deflate;
 
  }
 
  }
 
sainfo address 2001:db8:2:2::2 any address 2001:db8:1:1::1 any
 
{
 
        lifetime time 1 hour;
 
        encryption_algorithm 3des;
 
        authentication_algorithm hmac_md5;
 
        compression_algorithm deflate;
 
}
 
  
Also set up the pre-shared secret:
+
==Contoh Konfigurasi Pre Shared Key==
 +
 
 +
Pre Shared Key biasanya tersimpan di file
 +
 
 +
/etc/racoon/psk.txt
 +
 
 +
Contoh isi dari Pre Shared Key kira-kira sebagai berikut:
 +
 
 +
# IPv4/v6 addresses
 +
10.160.94.3    mekmitasdigoat
 +
172.16.1.133    0x12345678
 +
194.100.55.1    whatcertificatereally
 +
2001:470:19:b37::101 a9993e364706816aba3e
 +
2001:470:19:b37::100 a9993e364706816aba3e 
 +
3ffe:501:410:ffff:200:86ff:fe05:80fa    mekmitasdigoat
 +
3ffe:501:410:ffff:210:4bff:fea2:8baa    mekmitasdigoat
 +
2345::1 abcdef
 +
2345::2 abcdef
 +
# USER_FQDN
 +
foo@kame.net    mekmitasdigoat
 +
sakane@kame.net secretkey
 +
# FQDN
 +
foo.kame.net    hoge
 +
 
 +
 
 +
==Restart ipsec & racoon==
 +
 
 +
Untuk mengaktifkan ipsec & racoon agar komunikasi akan di enkripsi cukup me-restart
 +
 
 +
/etc/init.d/setkey restart
 +
/etc/init.d/racoon restart
 +
 
 +
setkey akan mengaktifkan ipsec, sehingga komunikasi akan di enkripsi. Tentunya dengan syarat semua konfigurasi dilakukan dengan benar.
 +
 
 +
==Contoh Konfigurasi SPD==
 +
 
 +
===Kasus 1===
 +
 
 +
Security protocol yang digunakan ESP. Encapsulation mode adalah Transport.
 +
 
 +
    Host-A                    Host-B
 +
    2345::1 ----------------- 2345::2
 +
 
 +
Konfigurasi di Host-A 2345::1  file /etc/ipsec-tools.conf
 +
 
 +
spdadd 2345::1 2345::2 any -P out ipsec
 +
esp/transport//require ;
 +
spdadd 2345::2 2345::1 any -P in ipsec
 +
esp/transport//require ;
  
File: /etc/racoon/psk.txt
+
Perhatikan IP address dan arah-nya. IP address pertama berarti source IP header. IP address selanjutnya berarti destination IP header. out berarti packet keluar. in berarti packet masuk.
  
# file for pre-shared keys used for IKE authentication
+
Konfigurasi di Host-B 2345::2 file /etc/ipsec-tools.conf
# format is: 'identifier' 'key'
 
 
2001:db8:2:2::2 verysecret
 
  
===Running IPsec with IKE daemon “racoon”===
+
spdadd 2345::2 2345::1 any -P out ipsec
 +
esp/transport//require ;
 +
spdadd 2345::1 2345::2 any -P in ipsec
 +
esp/transport//require ;
  
At least the daemon needs to be started. For the first time, use debug and foreground mode. The following example shows a successful IKE phase 1 (ISAKMP-SA) and 2 (IPsec-SA) negotiation:
+
===Kasus 2===
  
# racoon -F -v -f /etc/racoon/racoon.conf
+
ESP Transport mode digunakan pertama, dan AH Transport mode digunakan selanjutnya.
Foreground mode.  
+
Hal ini berarti kernel akan membuat paket menjadi [IP|AH|ESP|ULP].
2005-01-01 20:30:15: INFO: @(#)ipsec-tools 0.3.3
 
¬ (http://ipsec-tools.sourceforge.net)
 
2005-01-01 20:30:15: INFO: @(#)This product linked
 
¬ OpenSSL 0.9.7a Feb 19 2003 (http://www.openssl.org/)
 
2005-01-01 20:30:15: INFO: 2001:db8:1:1::1[500] used as isakmp port (fd=7)
 
2005-01-01 20:31:06: INFO: IPsec-SA request for 2001:db8:2:2::2
 
¬ queued due to no phase1 found.
 
2005-01-01 20:31:06: INFO: initiate new phase 1 negotiation:
 
¬ 2001:db8:1:1::1[500]<=>2001:db8:2:2::2[500]
 
2005-01-01 20:31:06: INFO: begin Identity Protection mode.
 
2005-01-01 20:31:09: INFO: ISAKMP-SA established
 
¬ 2001:db8:1:1::1[500]-2001:db8:2:2::2[500] spi:da3d3693289c9698:ac039a402b2db401
 
2005-01-01 20:31:09: INFO: initiate new phase 2 negotiation:
 
¬ 2001:6f8:900:94::2[0]<=>2001:db8:2:2::2[0]
 
2005-01-01 20:31:10: INFO: IPsec-SA established:
 
¬ ESP/Tunnel 2001:db8:2:2::2->2001:db8:1:1::1 spi=253935531(0xf22bfab)
 
2005-01-01 20:31:10: INFO: IPsec-SA established:
 
¬ ESP/Tunnel 2001:db8:1:1::1->2001:db8:2:2::2 spi=175002564(0xa6e53c4)
 
  
Each direction got its own IPsec-SA (like defined in the IPsec standard). With “tcpdump” on the related interface, you will see as result of an IPv6 ping:
+
    Host-A           Host-B
 +
  2345::1 ----------------------- 2345::2
  
20:35:55.305707 2001:db8:1:1::1 > 2001:db8:2:2::2: ESP(spi=0x0a6e53c4,seq=0x3)
+
Konfigurasi pada Host-A 2345::1  file /etc/ipsec-tools.conf
  20:35:55.537522 2001:db8:2:2::2 > 2001:db8:1:1::1: ESP(spi=0x0f22bfab,seq=0x3)
 
  
As expected, the negotiated SPIs are being used here.
+
spdadd 2345::1 2345::2 any -P out ipsec
 +
esp/transport//require
 +
ah/transport//require ;
 +
spdadd 2345::2 2345::1 any -P in ipsec
 +
esp/transport//require
 +
ah/transport//require ;
  
And using “setkey”, current active parameters are shown:
+
Perhatikan urutan security protocol. Di outgoing case mendefinisikan out, dia mendefinisikan urutan security protocol yang akan digunakan oleh kernel kepada paket. Di incoming case mendefinisikan in, dia mendefinisikan urutan security protocol yang akan digunakan oleh kernel kepada packet. Pada kasus di atas berarti ESP transport mode digunakan pertama, dan di lanjutkan dengan AH transport mode.
  
# setkey -D
+
Konfigurasi pada Host-B 2345::2  file /etc/ipsec-tools.conf
2001:db8:1:1::1 2001:db8:2:2::2
 
        esp mode=tunnel spi=175002564(0x0a6e53c4) reqid=0(0x00000000)
 
        E: 3des-cbc  bd26bc45 aea0d249 ef9c6b89 7056080f 5d9fa49c 924e2edd
 
        A: hmac-md5  60c2c505 517dd8b7 c9609128 a5efc2db
 
        seq=0x00000000 replay=4 flags=0x00000000 state=mature
 
        created: Jan  1 20:31:10 2005  current: Jan  1 20:40:47 2005
 
        diff: 577(s)    hard: 3600(s)  soft: 2880(s)
 
        last: Jan  1 20:35:05 2005      hard: 0(s)      soft: 0(s)
 
        current: 540(bytes)    hard: 0(bytes)  soft: 0(bytes)
 
        allocated: 3    hard: 0 soft: 0
 
        sadb_seq=1 pid=22358 refcnt=0
 
2001:db8:2:2::2 2001:db8:1:1::1
 
        esp mode=tunnel spi=253935531(0x0f22bfab) reqid=0(0x00000000)
 
        E: 3des-cbc c1ddba65 83debd62 3f6683c1 20e747ac 933d203f 4777a7ce
 
        A: hmac-md5  3f957db9 9adddc8c 44e5739d 3f53ca0e
 
        seq=0x00000000 replay=4 flags=0x00000000 state=mature
 
        created: Jan  1 20:31:10 2005  current: Jan  1 20:40:47 2005
 
        diff: 577(s)    hard: 3600(s)  soft: 2880(s)
 
        last: Jan  1 20:35:05 2005      hard: 0(s)      soft: 0(s)
 
        current: 312(bytes)    hard: 0(bytes)  soft: 0(bytes)
 
        allocated: 3    hard: 0 soft: 0
 
        sadb_seq=0 pid=22358 refcnt=0
 
  
==IKE daemon “pluto”==
+
spdadd 2345::2 2345::1 any -P out ipsec
 +
esp/transport//require
 +
ah/transport//require ;
 +
spdadd 2345::1 2345::2 any -P in ipsec
 +
esp/transport//require
 +
ah/transport//require ;
  
The IKE daemon “pluto” is included in distributions of the *S/WAN projects. *S/WAN project starts at the beginning as FreeS/WAN. Unfortunately, the FreeS/WAN project stopped further development in 2004. Because of the slow pace of development in the past, two spin-offs started: strongSwan and Openswan. Today, readily installable packages are available for at least Openswan (included in Fedora Core 3).
+
Perhatikan IP address cara alokasinya sama seperti kasus 1 di atas.
  
A major difference to “racoon”, only one configuration file is required. Also, an initscript exists for automatic setup after booting.
+
===Kasus 3===
  
===Configuration of the IKE daemon “pluto”===
+
ESP Tunnel untuk VPN.
  
The configuration is very similar to the IPv4 one, only one important option is necessary.
 
  
File: /etc/ipsec.conf
+
                      =========== ESP ===========
 +
                      |                        |
 +
    Network-A      Gateway-A                Gateway-B        Network-B
 +
    2002::/64 ---- 2345::1 ---------------- 2345::2 -------- 2003::/64
  
# /etc/ipsec.conf - Openswan IPsec configuration file
 
#
 
# Manual:    ipsec.conf.5
 
version 2.0    # conforms to second version of ipsec.conf specification
 
 
# basic configuration
 
config setup
 
        # Debug-logging controls:  "none" for (almost) none, "all" for lots.
 
        # klipsdebug=none
 
        # plutodebug="control parsing"
 
 
#Disable Opportunistic Encryption
 
include /etc/ipsec.d/examples/no_oe.conf
 
 
conn ipv6-p1-p2
 
        connaddrfamily=ipv6      # Important for IPv6!
 
        left=2001:db8:1:1::1
 
        right=2001:db8:2:2::2
 
          authby=secret
 
        esp=aes128-sha1
 
        ike=aes128-sha-modp1024
 
        type=transport
 
        #type=tunnel
 
        compress=no
 
        #compress=yes
 
        auto=add
 
        #auto=start
 
  
Don't forget to define the pre-shared secret here also.
+
Konfigurasi pada Gateway-A 2345::1 file /etc/ipsec-tools.conf
  
File: /etc/ipsec.secrets
+
spdadd 2002::/64 2003::/64 any -P out ipsec
 +
esp/tunnel/2345::1-2345::2/require ;
 +
spdadd 2003::/64 2002::/64 any -P in ipsec
 +
esp/tunnel/2345::2-2345::1/require ;
  
2001:db8:1:1::1 2001:db8:2:2::2 : PSK      "verysecret"
+
Tunnel end point harus di definisikan.
  
===Running IPsec with IKE daemon “pluto”===
+
Konfigurasi pada Gateway-B 2345::2 file /etc/ipsec-tools.conf
  
If installation of Openswan was successfully, an initscript should exist for starting IPsec, simply run (on each peer):
+
spdadd 2003::/64 2002::/64 any -P out ipsec
 +
esp/tunnel/2345::2-2345::1/require ;
 +
spdadd 2002::/64 2003::/64 any -P in ipsec
 +
esp/tunnel/2345::1-2345::2/require ;
  
# /etc/rc.d/init.d/ipsec start
+
==Referensi==
  
Afterwards, start this connection on one peer. If you saw the line “IPsec SA established”, all worked fine.
+
* https://wiki.debian.org/IPsec
  
# ipsec auto --up ipv6-peer1-peer2
 
104 "ipv6-p1-p2" #1: STATE_MAIN_I1: initiate
 
106 "ipv6-p1-p2" #1: STATE_MAIN_I2: sent MI2, expecting MR2
 
108 "ipv6-p1-p2" #1: STATE_MAIN_I3: sent MI3, expecting MR3
 
004 "ipv6-p1-p2" #1: STATE_MAIN_I4: ISAKMP SA established
 
112 "ipv6-p1-p2" #2: STATE_QUICK_I1: initiate
 
004 "ipv6-p1-p2" #2: STATE_QUICK_I2: sent QI2, IPsec SA established {ESP=>0xa98b7710 <0xa51e1f22}
 
  
Because *S/WAN and setkey/racoon do use the same IPsec implementation in Linux 2.6.x kernel, “setkey” can be used here too to show current active parameters:
+
==Pranala Menarik==
  
# setkey -D
+
* [[IPv6]]
2001:db8:1:1::1 2001:db8:2:2::2
 
        esp mode=transport spi=2844489488(0xa98b7710) reqid=16385(0x00004001)
 
        E: aes-cbc  082ee274 2744bae5 7451da37 1162b483
 
        A: hmac-sha1  b7803753 757417da 477b1c1a 64070455 ab79082c
 
        seq=0x00000000 replay=64 flags=0x00000000 state=mature
 
        created: Jan  1 21:16:32 2005  current: Jan  1 21:22:20 2005
 
        diff: 348(s)    hard: 0(s)      soft: 0(s)
 
        last:                          hard: 0(s)      soft: 0(s)
 
        current: 0(bytes)      hard: 0(bytes)  soft: 0(bytes)
 
        allocated: 0    hard: 0 soft: 0
 
        sadb_seq=1 pid=23825 refcnt=0
 
2001:db8:2:2::2 2001:db8:1:1::1
 
        esp mode=transport spi=2770214690(0xa51e1f22) reqid=16385(0x00004001)
 
        E: aes-cbc  6f59cc30 8d856056 65e07b76 552cac18
 
        A: hmac-sha1  c7c7d82b abfca8b1 5440021f e0c3b335 975b508b
 
        seq=0x00000000 replay=64 flags=0x00000000 state=mature
 
        created: Jan  1 21:16:31 2005  current: Jan  1 21:22:20 2005
 
        diff: 349(s)    hard: 0(s)      soft: 0(s)
 
        last:                          hard: 0(s)      soft: 0(s)
 
        current: 0(bytes)      hard: 0(bytes)  soft: 0(bytes)
 
        allocated: 0    hard: 0 soft: 0
 
        sadb_seq=0 pid=23825 refcnt=0
 

Latest revision as of 08:52, 9 March 2019

Jika anda ingin menggunakan IPsec untuk berkomunikasi dengan seseorang, Hal ini diperlukan untuk membentuk Security Association (IPsec-SA) antara Anda dan rekan sebelum itu. Ada dua cara untuk membangun itu. Salah satunya adalah dengan menggunakan konfigurasi manual. Cara lain adalah automatis konfigurasi. Dalam contoh berikut ini, kita akan menggunakan “racoon” untuk melakukan konfigurasi secara automatis.

Beberapa parameter (Key) harus dipertukarkan antara anda dan rekan untuk membangun IPsec-SA. Racoon pertukaran mereka dengan menggunakan IKE. IKE membangun SA sendiri sendiri sambil bertukar Key, jangan menggunakan IPsec-SA. Ada dua fase dalam IKE. Salah satu fase untuk membangun SA untuk komunikasi sendiri (IKE-SA). Fase yang lain untuk membangun Ipsec-SA. Disini kita menyebutnya, Tahap 1 dan Tahap 2 . Inisiator untuk memulai IKE mengusulkan beberapa parameter untuk responden, dan pilihan responden salah satu dari mereka atau menolak mereka di setiap tahap. Juga racoon memiliki beberapa parameter untuk pengelolaan dari proses pertukaran. Oleh karenanya, ada banyak banyak item untuk mengkonfigurasi racoon.

Hal ini tidak mudah bagi pengguna umum untuk memahami semuanya. Dokumen ini menjelaskan cara mengkonfigurasi racoon singkat. Konfigurasi kompleks tidak dijelaskan. Juga untuk menggunakan sertifikat dari lingkup dalam dokumen ini.

IPsec membutuhkan pertukaran kunci rahasia. Hal ini dilakukan secara automatis oleh daemon IKE (IPSec Key Exchange). IKE juga menangani authentikasi peer, baik melalui kunci rahasia yang di ketahui bersama (biasa di sebut “pre-shared secret”) atau melalui kunci RSA (yang dapat digunakan dari sertifikat X.509).

Pada kesempatan ini, kita akan mencoba untuk menggunakan ipsec-tools di Ubuntu sebagai contoh. Ujicoba akan dilakukan untuk membangun sambungan terenkripsi antara dua node dengan IPv6 address, yaitu:

  • Host A IPv6 2345::1
  • Host B IPv6 2345::2


Mekanisme Dasar IPsec

Kernel mempertahankan dua database untuk menggunakan IPsec. Salah satunya adalah Security Policy Database (SPD). Kernel mengacu SPD dalam rangka untuk memutuskan apakah akan menerapkan IPsec untuk paket atau tidak. Juga entri SPD menentukan / bagaimana IPsec-SA diterapkan. Satu lagi adalah Security Association Database (SAD). Entri SAD mengandung Key setiap IPsec-SA.

Gambar berikut menentukan aliran sampai kernel memberlakukan IPsec-SA untuk paket.

Ipsec.jpg

Proses yang terjadi pada saat membangun sambungan menggunakan IKE (IPsec Key Exchange) adalah sebagai berikut:

  1. Administrator set policy ke SPD menggunakan setkey.
  2. Kernel mengacu pada SPD untuk mengambil keputusan untuk menjalankan IPsec pada sebuah packet.
  3. Jika IPsec diperlukan, kernel akan mengambilKey untuk IPsec-SA dari SAD.
  4. Jika gagal, kernel akan mengirim permohonan untuk mengambil Key ke racoon.
  5. racoon akan mempertukarkan Key dengan menggunakan IKE dengan yang lain untuk membangun IPsec-SA.
  6. racoon meletakan Key kedalam SAD.
  7. Kernel dapat mengirimkan paket yang menggunakan IPsec.

Seorang administrator harus mengkonfigurasi SPD dengan menggunakan perintah setkey , dan harus mengkonfigurasi racoon. Di samping itu, dia juga perlu menjalankan racoon atau IKE sejenis di sisi satu-nya lagi.

Instalasi racoon

Instalasi ipsec-tools menggunakan perintah

# apt-get install racoon ipsec-tools

Pada pertanyaan “Configuration mode for racoon IKE daemon:” jawab “direct”

Racoon membutuhkan ijin root untuk bisa berjalan. Racoon menggunakan UDP port 500, di samping itu juga membuka file log biasanya di /var/log/racoon.log . Ada beberapa opsi yang dapat digunakan Racoon , beberapa yang sering digunakan adalah:

-f configfile
   menentukan alternate configuration file. 
   /usr/local/v6/etc/racoon.conf sebagai default. 
-l logfile
   memberitahukan alternate log file. 
   /var/log/racoon.log sebagai default. 
-d dlevel
   Set debugging level dengan hexadecimal. 

Di bawah adalah perintah dimana racoon akan mengeluarkan banyak informasi ke standard output maupun log file.

# racoon -d 0xffffffff

Contoh Konfigurasi Racoon

Konfigurasi racoon di Ubuntu biasanya tersimpan di /etc/racoon/racoon.conf

# vi /etc/racoon/racoon.conf 

Penjelasan berikut adalah salah satu dari konfigurasi paling sederhana. Bagian ini akan di jelaskan secara bertahap

path script "/etc/racoon/scripts"; 
path pre_shared_key "/etc/racoon/psk.txt"; 
path certificate "/etc/racoon/certs"; 
log notify; 

remote anonymous
{
	exchange_mode aggressive ;
	my_identifier user_fqdn "sakane@kame.net" ;
	lifetime time 24 hour ;
	proposal {
		encryption_algorithm 3des;
		hash_algorithm sha1;
		authentication_method pre_shared_key ;
		dh_group 2 ;
	}
} 

sainfo anonymous
{
	fs_group 2;
	lifetime time 12 hour ;
	lifetime byte 50 MB ;
	encryption_algorithm 3des, blowfish, des, rijndael ;
	authentication_algorithm hmac_sha1, hmac_md5 ;
	compression_algorithm deflate ;
}


  • path pre_shared_key – berisi file yang mendefinisikan pre-shared keys. Ini digunakan untuk meng-authentikasi peer pada phase 1. Jika kita tidak menggunakan pre-shared key authentication method, kita tidak perlu men-definisikannya. Format yang digunakan seperti hosts. Artinya, parameter di pisahkan oleh beberapa spasi atau tab. Pada contoh di atas, pre-shared key di definisikan sebagai berikut;
 sakane@kame.net	secretkey
  • my_identifier men-definisikan identifier yang digunakan untuk authentikasi pada phase 1. Kata selanjutnya "user_fqdn" yang artinya penggunaan User FQDN sebagai identifier sendiri.


remote

  • remote mendefinsikan tentang Phase 1. anonymous berarti akan melakukan match sembarang peer. Kita dapat saja membatasi exchange dari masing-masing peer.
  • exchange_mode mendefinnisikan exchange mode pada Phase 1; aggressive berarti exchange menggunakan aggressive mode. Kita dapat menggunakan main sebagai main mode dan base sebagai base mode. Jika peer memulai exchange dengan mode yang tidak di definisikan disini, racoon akan menolak-nya. racoon dapat menerima ke tiga mode tersebut.
  • identifier di remote menentukan apa identifier sendiri yang digunakan. Identifier akan mengirimkan ke peer, dan peer akan menggunakan sebagai satu dari authentication information. Dalam contoh di atas, identifier di remote menggunakan user_fqdn, oleh karenanya "sakane@kame.net" digunakan dalam dentifier user_fqdn.
  • lifetime time dan lifetime byte menentukan lifetime dari IKE-SA. Ini berdasarkan time (waktu) dan berdasarkan byte. Kita dapat menggunakan sec, min dan hour sebagai unit dari lifetime berdasarkan time. Dan kita juga dapat menggunakan B, KB, MB dan TB sebagai unit dari lifetime berdasarkan bytes.
  • proposal mendefinisikan proposal pada Phase 1. Kita dapat saja menggunakan beberapa / multiple proposal.
  • encryption_algorithm menunjukan algoritma enkripsi pada Phase 1. racoon dapat menggunakan DES, 3DES, RC5, IDEA, CAST, BLOWFISH sebagai algoritma enkripsi. Kita perlu menentukan des, 3des, rc5, idea, cast, blowfish. Kita dapat menentukan salah satu dari algoritma tersebut di proposal untuk Phase 1.
  • hash_algorithm menentukan hash algorithm. racoon dapat menggunakan MD5 dan SHA1 sebagai hash algorithm. Kita perlu menentukan md5 dan sha1. Kita dapat menentukannya di proposal untuk Phase 1.
  • authentication_method menentukan authentication method pada Phase 1. Pada contoh di atas, kita menggunakan Pre-shared Key sebagai authentication method. Racoon dapat menggunakan RSA Signature authentication method.
  • dh_group dapat menentukan group untuk Diffie-Hellman Key Exchange. Racoon dapat menggunakan 1, 2 dan 5 sebagai group. Kita perlu menentukan 1, 2 dan 5.

sainfo

  • sainfo menentukan beberapa parameter yang digunakan pada Phase 2. anonymous berarti akan match ke sembarang peer. Kita dapat saja membatasi exchange untuk masing-masing peer.
  • pfs_group menentukan group untuk Diffie-Hellman Key Exchange di Phase 2. Racoon dapat menggunakan 1, 2 dan 5 sebagai group. Kita perlu menentukan 1, 2 dan 5 .
  • lifetime time dan lifetime byte menentukan lifetime dari IPsec-SA. Ini berdasarkan time (waktu) dan berdasarkan byte. Kita dapat menggunakan sec, min dan hour sebagai unit dari lifetime berdasarkan time. Dan kita juga dapat menggunakan B, KB, MB dan TB sebagai unit dari lifetime berdasarkan bytes.
  • encryption_algorithm menentukan proposal untuk algoritma enkripsi untuk ESP. racoon dapat menggunakan DES, 3DES, CAST, BLOWFISH, TWOFISH, RIJNDAEL dan NULL sebagai algoritma enkripsi untuk ESP. 3des, cast128, blowfish, des, twofish, rijndael ; Kita perlu menentukan des, 3des, cast, blowfish, twofish, rijndael dan null_enc .
  • authentication_algorithm menentukan proposal untuk authentication algorithm untuk ESP dan AH. racoon dapat menggunakan HMAC-SHA1, HMAC-MD5 dan Keyed-MD5 sebagai authentication algorithm. Kita perlu menentukan hmac_sha1, hmac_md5 dan kpdk.
  • compression_algorithm menentukan proposal untuk compression algorithm untuk IPCOMP. racoon dapat menggunakan DEFLATE pada saat ini. Kita perlu menulis deflate.

CATATAN: racoon tidak mempunyai daftar dari security protocol yang akan di tawarkan. Daftar security protocol di berikan oleh kernel. Sebelumnya kita harus mendefinisikan semua algoritma yang mungkin digunakan kedalam sainfo meskipun kita tidak membutuhkan algoritma kompresi apapun. Contoh di atas akan menerima exchange untuk Phase 1 dan Phase 2, jika kita memasukan Pre-shared Key yang benar sebelum exchange. Racoon dapat membatasi untuk melakukan exchange dengan peer setiap phase.

Contoh konfigurasi Sederhana

log notify;
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";

remote anonymous {
        exchange_mode main,aggressive;
        proposal {
                encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group modp1024;
        }
        generate_policy off;
}

sainfo anonymous {
        pfs_group modp768;
        encryption_algorithm 3des;
        authentication_algorithm hmac_md5;
        compression_algorithm deflate;
}

Contoh Konfigurasi Pre Shared Key

Pre Shared Key biasanya tersimpan di file

/etc/racoon/psk.txt 

Contoh isi dari Pre Shared Key kira-kira sebagai berikut:

# IPv4/v6 addresses 
10.160.94.3     mekmitasdigoat 
172.16.1.133    0x12345678 
194.100.55.1    whatcertificatereally 
2001:470:19:b37::101 a9993e364706816aba3e
2001:470:19:b37::100 a9993e364706816aba3e  
3ffe:501:410:ffff:200:86ff:fe05:80fa    mekmitasdigoat 
3ffe:501:410:ffff:210:4bff:fea2:8baa    mekmitasdigoat 
2345::1 abcdef
2345::2 abcdef
# USER_FQDN 
foo@kame.net    mekmitasdigoat 
sakane@kame.net	secretkey
# FQDN 
foo.kame.net    hoge


Restart ipsec & racoon

Untuk mengaktifkan ipsec & racoon agar komunikasi akan di enkripsi cukup me-restart

/etc/init.d/setkey restart
/etc/init.d/racoon restart

setkey akan mengaktifkan ipsec, sehingga komunikasi akan di enkripsi. Tentunya dengan syarat semua konfigurasi dilakukan dengan benar.

Contoh Konfigurasi SPD

Kasus 1

Security protocol yang digunakan ESP. Encapsulation mode adalah Transport.

   Host-A                    Host-B
   2345::1 ----------------- 2345::2

Konfigurasi di Host-A 2345::1 file /etc/ipsec-tools.conf

spdadd 2345::1 2345::2 any -P out ipsec
	esp/transport//require ;
spdadd 2345::2 2345::1 any -P in ipsec
	esp/transport//require ;

Perhatikan IP address dan arah-nya. IP address pertama berarti source IP header. IP address selanjutnya berarti destination IP header. out berarti packet keluar. in berarti packet masuk.

Konfigurasi di Host-B 2345::2 file /etc/ipsec-tools.conf

spdadd 2345::2 2345::1 any -P out ipsec
	esp/transport//require ;
spdadd 2345::1 2345::2 any -P in ipsec
	esp/transport//require ;

Kasus 2

ESP Transport mode digunakan pertama, dan AH Transport mode digunakan selanjutnya. Hal ini berarti kernel akan membuat paket menjadi [IP|AH|ESP|ULP].

   Host-A		           Host-B
  2345::1 ----------------------- 2345::2

Konfigurasi pada Host-A 2345::1 file /etc/ipsec-tools.conf

spdadd 2345::1 2345::2 any -P out ipsec
	esp/transport//require
	ah/transport//require ;
spdadd 2345::2 2345::1 any -P in ipsec
	esp/transport//require
	ah/transport//require ;

Perhatikan urutan security protocol. Di outgoing case mendefinisikan out, dia mendefinisikan urutan security protocol yang akan digunakan oleh kernel kepada paket. Di incoming case mendefinisikan in, dia mendefinisikan urutan security protocol yang akan digunakan oleh kernel kepada packet. Pada kasus di atas berarti ESP transport mode digunakan pertama, dan di lanjutkan dengan AH transport mode.

Konfigurasi pada Host-B 2345::2 file /etc/ipsec-tools.conf

spdadd 2345::2 2345::1 any -P out ipsec
	esp/transport//require
	ah/transport//require ;
spdadd 2345::1 2345::2 any -P in ipsec
	esp/transport//require
	ah/transport//require ;

Perhatikan IP address cara alokasinya sama seperti kasus 1 di atas.

Kasus 3

ESP Tunnel untuk VPN.


                      =========== ESP ===========
                      |                         |
   Network-A      Gateway-A                Gateway-B        Network-B
   2002::/64 ---- 2345::1 ---------------- 2345::2 -------- 2003::/64


Konfigurasi pada Gateway-A 2345::1 file /etc/ipsec-tools.conf

spdadd 2002::/64 2003::/64 any -P out ipsec
	esp/tunnel/2345::1-2345::2/require ;
spdadd 2003::/64 2002::/64 any -P in ipsec
	esp/tunnel/2345::2-2345::1/require ;

Tunnel end point harus di definisikan.

Konfigurasi pada Gateway-B 2345::2 file /etc/ipsec-tools.conf

spdadd 2003::/64 2002::/64 any -P out ipsec
	esp/tunnel/2345::2-2345::1/require ;
spdadd 2002::/64 2003::/64 any -P in ipsec
	esp/tunnel/2345::1-2345::2/require ;

Referensi


Pranala Menarik