OpenBSD'nin isakmpd aracını kullanılan Linux 2.6 Çekirdeği

Thomas Walpuski OpenBSD işletim sisteminin IKE artalan sürecini Linux'ta kullanılabilir hale getirmiştir (http://bender.thinknerd.de/~thomas/IPsec/isakmpd-linux.html). Artık isakmpd Linux çekirdeği 2.5.47+ ve 2.6.x sürümlerinde IPsec VPN oluşturmak için kullanılabilmektedir. Bu bölümde isakmpd kurulum ve yapılandırması anlatılacaktır.

Kurulum

Eğer RPM tabanlı bir datığım veya Debian kullanıyorsanız kurulum işlemi paket yönetim araçlarıyla kolayca yapılabilir. Bu belgenin yazarı Linux 2.6.0 çekirdeği için bir RPM paketi derlemiştir (ulink url="http://www.spenneberg.org/VPN/Kernel-2_6_IPsec"/>). Çekirdekteki ABI bir çok kez değiştiği için bu paketin deneme sürümlerinde çalışmayacağını şimdiden söylemeliyim. Debian projesi apt-get install isakmpd komutuyla kurulabilecek bir paketi içermektedir.

Kurulum kaynak koddan yapılırken eğer X.509 sertifikalarını kullanmak istiyorsanız keynote paketine de ihtiyacınız olacaktır (http://www1.cs.columbia.edu/~angelos/keynote.html). İlave olarak Linux çekirdek sürümünüz 2.5.47+ veya 2.6.x olmalıdır.

isakmpd kaynak koduna ulaşmak için Thomas Walpuski'nin sayfasındaki yönergeleri takip etmelisiniz. Dosyayı indirdikten sonra GNUmakefile dosyasını düzenleyerek OS=linux satırını aktif hale getirin. Eğer çekirdek kaynak kodunu /usr/src/linux dizininden farklı bir yerde bulunduruyorsanız bunu sysdep/linux/GNUmakefile.sysdep dosyasını düzenleyerek belirtmelisiniz.

Derleme işlemi make komutu ile yapılır.

isakmpd iki ilave komutla birlikte gelir: keyconv ve certpatch. Bu araçlar apps alt dizininde bulunur elle derlenmeleri gerekir (benim hazırladığım RPM paketi bu araçları da içeriyordu). keyconv DNSSEC openssl anahtarına dönüştürülürken Certpatch ile varolan bir sertifikaya SubjectAltName eklenebilir ya da tersi yapılabilir.

Aşağıdaki komutlar bu araçları derlememe yeterlioldu (sizde farklı olabilir):

gcc -DMP_FLAVOUR=MP_FLAVOUR_GMP -I../.. -I../../sysdep/linux   -I /usr/src/linux-2.6.0 -lcrypto -lgmp certpatch.c -o certpatch
gcc  -I../.. -I../../sysdep/linux   -I /usr/src/linux-2.6.0 -lcrypto -lgmp base64.c keyconv.c -o keyconv

Uyarı
Tüm man sayfaları Latin1 biçemindedir. Red Hat 9 bu dosyaları gösterememektedir.[14] Görüntüleyebilmek için dönüştürülmeleri gereklidir: iconv --from-code LATIN1 --to-code UTF-8 --output isakmpd2.8 isakmpd.8

isakmpd derlendiğinde zorunlu olan dizin yapısını oluşturur:

mkdir /etc/isakmpd
mkdir /etc/isakmpd/ca
mkdir /etc/isakmpd/certs
mkdir /etc/isakmpd/keynote
mkdir /etc/isakmpd/crls
mkdir /etc/isakmpd/private
mkdir /etc/isakmpd/pubkeys

Önceden Paylaşılan Anahtarları (PSK) Kullanmak

isakmpd bir yapılandırma dosyası (/etc/isakmpd/isakmpd.conf), bir de politika dosyası /etc/isakmpd/isakmpd.policy kullanır. Yapılandırma iyi bilinen .INI sitilini kullanır. Her bir bölüm aşağıdaki gibi bir satırla başlar:

[section]

Her bölümün içinde bir değişkene değer atayabilirsiniz:

tag=value

Eğer değer bir satırdan uzunsa \ işareti ile birden fazla satır kullanabilirsiniz. Yorum satırları # ile başlar.

Başlangıçta kimlik kanıtlama için önceden paylaşılmış anahtarın kullanıldığı baist bit yapılandırmaya bakacağız. Kurulum için Şekil 5.12'e bakabilirsiniz.

[General]
Listen-on=              192.168.1.100

[Phase 1]
192.168.2.100=                ISAKMP-peer-west

[Phase 2]
Connections=            IPsec-east-west

[ISAKMP-peer-west]
Phase=                  1
Local-address=          192.168.1.100
Address=                192.168.2.100
Authentication=         ThisIsThePassphrase

[IPsec-east-west]
Phase=                  2
ISAKMP-peer=            ISAKMP-peer-west
Configuration=          Default-quick-mode
Local-ID=               Net-east
Remote-ID=              Net-west

[Net-west]
ID-type=                IPV4_ADDR_SUBNET
Network=                172.16.2.0
Netmask=                255.255.255.0

[Net-east]
ID-type=                IPV4_ADDR_SUBNET
Network=                172.16.1.0
Netmask=                255.255.255.0

[Default-quick-mode]
DOI=                    IPSEC
EXCHANGE_TYPE=          QUICK_MODE
Suites=                 QM-ESP-3DES-MD5-PFS-SUITE

Bu yapılandırma 192.168.1.100 ve 192.168.2.100 adreslerine sahip iki ağ geçidi arasında bir tünel oluşturur. Bu tünel 172.16.1.0/24 ve 172.16.2.0/24 ağları tarafından kullanılabilir. Yukarıdaki dosya 192.168.1.100 IP adresine sahip ağ geçidinin kullanacağı dosyadır.

Şimdi her bölümü ayrıntılı olarak inceleyelim. İlk bölüm [General] genel kurulumu belirler. Burada kurulum aşamasında isakmpd'nin belirli bir IP adresine bağlanması gerekip gerekmediğini belirtiyoruz. Eğer VPN ağgeçicidinizin birden çok IP adresi varsa bunu yapmanız tavsiye edilir.

[Phase 1] bölümü 192.168.2.100 adresli taraf için hangi yapılandırmanın kullanılacağını tanımlar. Eğer karşı tarafın IP adresi belli değilse (roadwarrior) bunun yerine öntanımlı değeri kullanabilirsiniz.

[Phase 2] bölümü ise Phase 1 kimlik kanıtlaması yapıldıktan sonra oluşturulacak tüneli tanımlanır. Eğer isakmpd bağlantıları aktif olarak başlatmıyorsa bunun yerine Passive-connections kullanılabilir.

Bu aşamada Phase 1 ve Phase 2 bölümlerine karşılık gelecek bir isim verilmelidir. Bu örnekte ISAKMP-peer-west ismini kullandık. Bu tanımlama Phase 1'de kullanıldığından yerel ve uzak adresleri biliyoruz. Eğer uzak adres biinmiyorsa bu satırı kaldırmak yeterlidir. Kimlik kanıtlama düz metin olarak verilen önceden paylaşılan anahtarla yapılmalıdır.

Sıradaki tanımlama IPsec-east-west tünelinin tanımlamasıdır. Bu tünel Phase 2'de kullanılmıştır ve ISAKMP-peer tarafından ISAKMP-peer-west tüneline bağlanılırken kullanılmalıdır. Bağlantının yapılandırmasını ve tüneli diğer tanımlamaları da (Local-ID ve Remote-ID) burada yapılmalıdır.

Bu tanımlanacak ID-type şunlar olabilir: IPV4_ADDR, IPV6_ADDR, IPV4_ADDR_SUBNET ve IPV6_ADDR_SUBNET.

Son olarak quick-mode yapılandırması bölümü bulunmaktadır. Bu bölümde tünel tanımlama bilgileri bulunmaktadır. Bu bilgiler DOI (öntanımlı değeri: IPSEC), EXCHANGE_TYPE (öntanımlı değeri: QUICK_MODE) ve Suites. Yukarıdaki QM-ESP-3DES-MD5-PFS-SUITE değerinin açılımı QuickMode-Encapsulated-Security-Payload-3DES-Encryption-MD5-HMAC-Perfect-Forward-Secrecy'dir. birden çok değer verilecekse bunlar birbirinden virgülle ayrılmalıdır. Man dosyasında mümkün olan bütün taşımalar ve takımlar bulunmaktadır.

isakmpd.policy daha kısa bir dosyadır. Aşağıda bir örneği bulunmaktadır:

KeyNote-Version: 2
Authorizer: "POLICY"
Licensees: "passphrase:ThisIsThePassphrase"
Conditions: app_domain == "IPsec policy" &&
esp_present == "yes" &&
esp_enc_alg == "3des" &&
esp_auth_alg == "hmac-md5" -> "true";

Bağlantıyı denemek için isakmpd aşağıdaki gibi başlatılır:

isakmpd -d -4 -DA=90

Bu komutla isakmpd, önalanda (-d) IPv4 (-4) kullanacak şekilde ve hata ayıklama seviyesi 90 (-DA=90) olarak başlatılmış olur.

Bağlantı kurulduğunda bir ağdan diğerine ping paketleri gönderebiliyor olmanız gerekir. Eğer ipsec-tools'u da kurmuşsanız isakmpd tarafından eklenen politikaları ve güvenlik anlaşmalarını görüntülemek için setkey komutunu da kullanabilirsiniz. ctrl-c ile önalanda çalışan isakmpd'yi öldürmeniz SAD ve SPD'yi temizlemez. Bunu ancak setkey komutunu elle çalıştırarak yapabilirsiniz. Şayet isakmpd'yi kill -TERM ile öldürülürürseniz SAD ve SPD'yi temizlemiş olursunuz!

X.509 Sertifikalarını Kullanmak

isakmpd kimlik kanıtlama süreçlerinde X.509 sertifikalarını kullanabilir. Kendi sertifikalarınızı her zamanki araçlarla oluşturabilirsiniz. VPN'in her iki tarafı için aşağıdaki dosyalara ihtiyacınız olacak:

  • /etc/isakmpd/private/local.key Makinenin .pem biçeminde özel anahtarı. Erişim izinleri 600 olmalıdır.
  • /etc/isakmpd/ca/ca.crt Güvendiğiniz sertifika otoritesinin sertifikası.
  • /etc/isakmpd/certs/ip-address.crt Yerel makinenin sertifikası.

isakmpd'nin sertifikaları bulup kullanması için bir SubjectAltName içermesi gerekir. Bu X.509v3 gelişletmesi sertifikaların oluşturulma sürecinde veya daha sonra certpatch komutu ile tanımlanabilir. Bu komut CA'nın özel anahtarını kullanır, sertifikayı açar ve eklentiyi ekledikten sonra sertifikayı tekrar imzalar.

certpatch -i ip-address -k ca.key  originalcert.crt newcert.crt

Certpatch sertifikaya bir IP adresi ekleyebileceği gibi bir FQDN veya bir UFQDN de ekleyebilir.

Bu dosyalar uygun dizinlere yerleştirildikten ve gerekli erişim yetkileri verildikten sonra yapılandırma ve politika dosyalarını oluşturabilirsiniz. Yapılandırma dosyasında Authentication satırını kaldırın ve ISAKMP-peer-west bölümüne ID=East satırını ekleyin. Ardından East'ı tanımlayın. Ek olarak X.509 dizinlerini de belirtmeniz gerekecektir. Tam bir yapılandırma dosyası örneği aşağıda verilmiştir:

[General]
Listen-on=              192.168.1.100

[Phase 1]
192.168.2.100=                ISAKMP-peer-west

[Phase 2]
Connections=            IPsec-east-west

[ISAKMP-peer-west]
Phase=                  1
Local-address=          192.168.1.100
Address=                192.168.2.100
ID=                     East

[East]
ID-type=                IPV4_ADDR
Address=                192.168.1.100

[IPsec-east-west]
Phase=                  2
ISAKMP-peer=            ISAKMP-peer-west
Configuration=          Default-quick-mode
Local-ID=               Net-east
Remote-ID=              Net-west

[Net-west]
ID-type=                IPV4_ADDR_SUBNET
Network=                172.16.1.0
Netmask=                255.255.255.0

[Net-east]
ID-type=                IPV4_ADDR_SUBNET
Network=                172.16..2.0
Netmask=                255.255.255.0

[Default-quick-mode]
DOI=                    IPSEC
EXCHANGE_TYPE=          QUICK_MODE
Suites=                 QM-ESP-3DES-MD5-PFS-SUITE
[X509-certificates]
CA-directory=           /etc/isakmpd/ca/
Cert-directory=         /etc/isakmpd/certs/
Private-key=            /etc/isakmpd/private/local.key

Politika dosyası da düzenlenmeye ihtiyaç duyar. Sadece güvenilen CA tarafından imzalanan sertifikaları kullanan taraflara izin vermek istediğinizden Authorizer satırından sonra gerekli satırları ekleyin. Aşağıda eksiksiz bir politika dosyası bulunmaktadır:

KeyNote-Version: 2
Authorizer: "POLICY"
Licensees: "DN:/C=DE/ST=NRW/L=Steinfurt/O=Spenneberg.Com/OU=VPN/CN=RootCA"
Conditions: app_domain == "IPsec policy" &&
esp_present == "yes" &&
esp_enc_alg == "3des" &&
esp_auth_alg == "hmac-md5" -> "true";

DN: ifadesini takip eden metin CA sertifikasının konu satırıyla uyuşmalıdır:

openssl x509 -in ca/ca.crt -noout -subject

Yapılandırmayı denemek için her zamanki gibi isakmpd'yi başlatabilirsiniz.



[14] Bu, günü geçmiş bir işletim sistemi olduğundan uyarıyı dikkate almanız gerekmez.