← man/network
setkey — man setkey — 80×24
ugur@toprak:~/man/network$man setkey
Bölüm 8

setkey

IPsec SA/SP veritabanını manuel olarak yönetir

Synopsis

      setkey [-knrv] file ...
      setkey [-knrv] -c
      setkey [-krv] -f filename
      setkey [-aklPrv] -D
      setkey [-Pvp] -F
      setkey [-H] -x
      setkey [-?V]

Description

setkey, çekirdekteki Güvenlik İlişkisi Veritabanı (Security Association Database - SAD) girdilerinin yanı sıra Güvenlik Politikası Veritabanı (Security Policy Database - SPD) girdilerini ekler, günceller, döker (dump) veya boşaltır (flush).

setkey, standart girdiden (-c ile çağrılırsa) veya filename adlı dosyadan (-f filename ile çağrılırsa) bir dizi işlemi kabul eder.

(seçeneksiz) Belirtilen dosyada yer alan SAD girdilerini veya SPD girdilerini döker.

  • -?: Kısa yardımı yazdırır.

  • -a: setkey genellikle -D ile etkin olmayan (dead) SAD girdilerini görüntülemez. Eğer -a da belirtilirse, etkin olmayan SAD girdileri de görüntülenecektir. Etkin olmayan bir SAD girdisi, süresi dolmuş ancak bazı SPD girdileri tarafından referans gösterildiği için sistemde kalmaya devam eden bir girdidir.

  • -D: SAD girdilerini döker. Eğer -P de belirtilirse, SPD girdileri dökülür. Eğer -p belirtilirse portlar görüntülenir.

  • -F: SAD girdilerini boşaltır (temizler). Eğer -P de belirtilirse, SPD girdileri boşaltılır.

  • -H: -x modunda onaltılık (hexadecimal) döküm ekler.

  • -h: NetBSD üzerinde, -H seçeneğinin eş anlamlısıdır. Diğer sistemlerde -? seçeneğinin eş anlamlısıdır.

  • -k: Çekirdekte (kernel) kullanılan anlambilimi kullanır. Yalnızca Linux'ta mevcuttur. Ayrıca -r seçeneğine bakın.

  • -l: -D çıktısını kısa tutarak sonsuz döngüde çalışır.

  • -n: İşlem yapmaz. Program girdi geçerliliğini kontrol eder ancak SPD üzerinde hiçbir değişiklik yapılmaz.

  • -r: IPsec RFC'lerinde açıklanan anlambilimi kullanır. Bu mod varsayılandır. Ayrıntılar için "RFC vs Linux kernel semantics" (RFC'ye karşı Linux çekirdeği anlambilimi) bölümüne bakın. Yalnızca Linux'ta mevcuttur. Ayrıca -k seçeneğine bakın.

  • -x: Sonsuz döngüde çalışır ve PF_KEY soketine iletilen tüm mesajları döker. -xx biçimlendirilmemiş zaman damgalarını yazdırır.

  • -V: Sürüm dizgisini yazdırır.

  • -v: Ayrıntılı modda çalışır. Program, diğer süreçlerden çekirdeğe gönderilen mesajlar da dahil olmak üzere, PF_KEY soketinde değiş tokuş edilen mesajları döker.

Configuration syntax Yapılandırma sözdizimi Komut satırında -c veya -f ile setkey aşağıdaki yapılandırma sözdizimini kabul eder. Diyez işareti (‘#’) ile başlayan satırlar yorum satırı olarak kabul edilir.

add [-46n] src dst protocol spi [extensions] algorithm ... ; Bir SAD girdisi ekler. Anahtar uzunluğunun belirtilen algoritmayla eşleşmemesi de dahil olmak üzere, add işlemi birden fazla nedenden dolayı başarısız olabilir.

get [-46n] src dst protocol spi ; Bir SAD girdisini gösterir.

delete [-46n] src dst protocol spi ; Bir SAD girdisini kaldırır.

deleteall [-46n] src dst protocol ; Belirtilen tanımlamaya uyan tüm SAD girdilerini kaldırır.

flush [protocol] ; Seçeneklerle eşleşen tüm SAD girdilerini temizler. Komut satırındaki -F seçeneği de aynı işlevi gerçekleştirir.

dump [protocol] ; Seçeneklerle eşleşen tüm SAD girdilerini döker. Komut satırındaki -D seçeneği de aynı işlevi gerçekleştirir.

spdadd [-46n] src_range dst_range upperspec policy ; Bir SPD girdisi ekler.

spdadd tagged tag policy ; Bir PF etiketine (tag) dayalı bir SPD girdisi ekler. tag ifadesi çift tırnak içine alınmış bir dizgi olmalıdır.

spddelete [-46n] src_range dst_range upperspec -P direction ; Bir SPD girdisini siler.

spdflush ; Tüm SPD girdilerini temizler. Komut satırındaki -FP seçeneği de aynı işlevi gerçekleştirir.

spddump ; Tüm SPD girdilerini döker. Komut satırındaki -DP seçeneği de aynı işlevi gerçekleştirir.

Meta-arguments are as follows: Meta-argümanlar aşağıdaki gibidir:

src dst Güvenli iletişimin kaynağı/hedefi, bir IPv4/v6 adresi ve isteğe bağlı olarak köşeli parantezler arasında bir port numarası olarak belirtilir. setkey bir FQDN'i sayısal adreslere çözümleyebilir. FQDN birden fazla adrese çözümlenirse setkey, tüm olası kombinasyonları deneyerek çekirdeğe birden fazla SAD/SPD girdisi yükleyecektir. -4, -6 ve -n seçenekleri FQDN'in adres çözümlemesini belirli şekillerde sınırlandırır. -4 ve -6 sırasıyla sonuçları yalnızca IPv4/v6 adresleriyle sınırlandırır. -n, FQDN çözümlemesini önler ve adreslerin sayısal adresler olmasını gerektirir.

protocol protocol aşağıdakilerden biridir: esp rfc2406 tabanlı ESP esp-old rfc1827 tabanlı ESP ah rfc2402 tabanlı AH ah-old rfc1826 tabanlı AH ipcomp IPComp tcp rfc2385 tabanlı TCP-MD5

spi SAD ve SPD için Güvenlik Parametresi İndeksi (Security Parameter Index - SPI). spi bir ondalık sayı veya “0x” ön ekine sahip onaltılık bir sayı olmalıdır. 0 ile 255 arasındaki SPI değerleri IANA tarafından gelecekte kullanılmak üzere ayrılmıştır ve kullanılamaz. TCP-MD5 ilişkileri 0x1000 değerini kullanmalıdır ve bu nedenle şu an için yalnızca ana bilgisayar başına (per-host) çözünürlüğe sahiptir.

extensions aşağıdakilerden bazılarını alabilir:

  • -m mode: Kullanılacak bir güvenlik protokolü modunu belirtir. mode aşağıdakilerden biridir: transport, tunnel veya any. Varsayılan değer any'dir.
  • -r size: Yeniden oynatma önleme (replay prevention) için bayt cinsinden pencere boyutunu belirtir. size, 32 bitlik kelime (word) cinsinden ondalık sayı olmalıdır. size sıfır ise veya belirtilmemişse yeniden oynatma kontrolleri gerçekleşmez.
  • -u id: SPD'deki politika girdisinin tanımlayıcısını belirtir. Bkz. policy. -f pad_option ESP dolgusunun (padding) içeriğini tanımlar. pad_option aşağıdakilerden biridir: zero-pad Tüm dolgular sıfırdır. random-pad Bir dizi rastgele değer kullanılır. seq-pad 1'den başlayan ardışık artan sayılar kullanılır. -f nocyclic-seq Döngüsel sıra numaralarına (cyclic sequence numbers) izin vermez. -lh time
  • -ls time: SA'nın saniye cinsinden ölçülen sabit/esnek (hard/soft) ömür süresini belirtir. -bh bytes
  • -bs bytes: SA'nın taşınan bayt cinsinden ölçülen sabit/esnek ömür süresini belirtir.

algorithm -E ealgo key ESP için bir şifreleme algoritması ealgo belirtir. -E ealgo key -A aalgo key ESP için bir şifreleme algoritması ealgo'nun yanı sıra bir yük kimlik doğrulama (payload authentication) algoritması aalgo belirtir. -A aalgo key AH için bir kimlik doğrulama algoritması belirtir. -C calgo [-R] IPComp için bir sıkıştırma algoritması belirtir. Eğer -R belirtilirse, spi alan değeri hat üzerinde olduğu gibi IPComp CPI (sıkıştırma parametre indeksi) olarak kullanılacaktır. Eğer -R belirtilmezse, çekirdek hat üzerinde bilinen CPI'ı kullanacak ve spi alanı yalnızca çekirdek dahili kullanımı için bir indeks olarak kullanılacaktır.

key ifadesi çift tırnak içine alınmış bir karakter dizisi veya önünde “0x” bulunan bir dizi onaltılık basamak olmalıdır.

ealgo, aalgo ve calgo için olası değerler Algoritmalar (Algorithms) bölümlerinde belirtilmiştir.

src_range dst_range Bunlar, IPsec tarafından güvenli hale getirilmesi gereken iletişimleri seçer. Bir IPv4/v6 adresi veya bir IPv4/v6 adres aralığı olabilirler ve bunlara bir TCP/UDP port belirlemesi eşlik edebilir. Bu şu şekildedir:

address address/prefixlen address[port] address/prefixlen[port]

prefixlen ve port bir ondalık sayı olmalıdır. port etrafındaki köşeli parantezler gereklidir ve kılavuz sayfası meta-karakterleri değildir. FQDN çözümlemesi için src ve dst için geçerli olan kurallar burada da geçerlidir.

upperspec Kullanılacak üst katman protokolü. upperspec olarak /etc/protocols içindeki kelimelerden birini ya da icmp6, ip4 veya any kullanabilirsiniz. any “herhangi bir protokol” anlamına gelir. Protokol numarasını da kullanabilirsiniz. Üst katman protokolü ICMPv6 olduğunda ICMPv6'nın bir türünü (type) ve/veye kodunu (code) belirtebilirsiniz. Belirtim icmp6 kelimesinden sonra yer almalıdır. Tür ve kod tek bir virgülle ayrılır. Kod her zaman belirtilmelidir. Sıfır belirtildiğinde çekirdek bunu joker karakter (wildcard) olarak ele alır. Çekirdeğin bir joker karakteri sıfır değerli bir ICMPv6 türünden ayırt edemediğini unutmayın. Örneğin, aşağıdakiler politikanın gelen hiçbir Neighbor Solicitation için IPsec gerektirmediği anlamına gelir:

spdadd ::/0 ::/0 icmp6 135,0 -P in none ;

NOT: upperspec, yönlendirme düğümünde ekstra yeniden birleştirme gerektirdiğinden (şu anda uygulanmamıştır) yönlendirme (forwarding) durumuna karşı şu anda çalışmamaktadır. /etc/protocols içinde birçok protokol vardır; TCP, UDP ve ICMP dışındaki protokoller IPsec ile kullanıma uygun olmayabilir. Ne kullanacağınızı dikkatlice düşünmeniz gerekir.

policy policy aşağıdaki üç biçimden birindedir:

-P direction [priority specification] discard -P direction [priority specification] none -P direction [priority specification] ipsec protocol/mode/src-dst/level [...]

Politikasının yönünü direction olarak belirtmelisiniz. out, in veya fwd kullanılabilir.

priority specification, politikanın SPD içindeki yerleşimini kontrol etmek için kullanılır. Politika konumu, işaretli bir tamsayı ile belirlenir; burada daha yüksek öncelikler politikanın listenin başına daha yakın yerleştirildiğini, daha düşük öncelikler ise politikanın listenin sonuna daha yakın yerleştirildiğini gösterir. Eşit önceliklere sahip politikalar, bu tür politikaların gruplarının sonuna eklenir.

Öncelik, yalnızca setkey politika önceliklerini destekleyen çekirdek başlıklarına (Linux >= 2.6.6) karşı derlendiğinde belirtilebilir. Çekirdek öncelikleri desteklemiyorsa, bir öncelik belirtimi ilk kez kullanıldığında bir uyarı mesajı yazdırılacaktır. Politika önceliği aşağıdaki biçimlerden birini alır:

{priority,prio} offset offset, -2147483647 ile 214783648 aralığında bir tamsayıdır.

{priority,prio} base {+,-} offset base; low (-1073741824), def (0) veya high (1073741824) değerlerinden biridir.

offset işaretsiz bir tamsayıdır. Pozitif ofsetler için 1073741824'e, negatif ofsetler için 1073741823'e kadar olabilir.

discard, eşleşen paketlerin atılacağı anlamına gelir. none, paket üzerinde IPsec işleminin gerçekleşmeyeceği anlamına gelir. ipsec, paket üzerinde IPsec işleminin gerçekleşeceği anlamına gelir.

protocol/mode/src-dst/level kısmı paketin nasıl işleneceğine dair kuralı belirtir. protocol olarak ah, esp veya ipcomp kullanılmalıdır. mode, transport veya tunnel değerlerinden biridir. Eğer mode tunnel ise, kullanılacak SA'yı belirtmek için SA'nın uç nokta adreslerini src ve dst olarak aralarında ‘-’ olacak şekilde belirtmelisiniz. Eğer mode transport ise, hem src hem de dst atlanabilir. level şunlardan biri olmalıdır: default, use, require veya unique. SA her seviyede mevcut değilse çekirdek, uygun bir SA kurması için anahtar değişim daemon'ından talepte bulunacaktır. default, çekirdek paketi işlerken belirttiğiniz protokol için sistem genelindeki varsayılana (örneğin esp_trans_deflev sysctl değişkeni) başvuracağı anlamına gelir. use, çekirdeğin varsa bir SA kullanacağı, aksi takdirde normal çalışmaya devam edeceği anlamına gelir. require, çekirdek politika ile eşleşen bir paket gönderdiğinde her zaman SA gerektiğini belirtir. unique, require ile aynıdır; ek olarak, politikanın benzersiz giden (out-bound) SA ile eşleşmesini sağlar. Politika seviyesini unique olarak belirtmeniz yeterlidir, racoon(8) politika için SA'yı yapılandıracaktır. Bu politika için SA'yı manuel anahtarlama ile yapılandırırsanız, bu politikayı SA'ya bağlamak için unique kelimesinden sonra iki nokta üst üste ‘:’ ile ayrılmış decimal bir politika tanımlayıcısı koyabilirsiniz, örneğin: unique:number. number 1 ile 32767 arasında olmalıdır. Manuel SA yapılandırmasının extensions -u seçeneğine karşılık gelir.

Bir SA paketi (bundle) kullanmak istediğinizde birden fazla kural tanımlayabilirsiniz. Örneğin, bir IP başlığını bir AH başlığı, ardından bir ESP başlığı ve ardından bir üst katman protokol başlığı takip ediyorsa kural şu şekilde olacaktır:

esp/transport//require ah/transport//require;

Kural sırası çok önemlidir.

Çekirdekte NAT-T etkinleştirildiğinde, UDP üzerinden ESP paketleri için politika eşleştirmesi uç nokta adresleri ve portu üzerinde yapılabilir (bu sisteme bağlıdır. Port kontrolünü gerçekleştirmeyen sistemler aynı NAT arkasındaki birden fazla uç noktayı destekleyemez). UDP üzerinden ESP kullanırken, doğru eşleşmeyi elde etmek için uç nokta adreslerinde port numaralarını belirtebilirsiniz. İşte bir örnek:

spdadd 10.0.11.0/24[any] 10.0.11.33/32[any] any -P out ipsec esp/tunnel/192.168.0.1[4500]-192.168.1.2[30000]/require ;

Bu portlar, UDP üzerinden ESP dışındaki her şey için belirtilmemiş olarak bırakılmalıdır (varsayılan değer 0'dır). setkey -DPp kullanılarak SPD dökümünde görüntülenebilirler.

“discard” ve “none” ifadelerinin ipsec_set_policy(3) içinde açıklanan sözdiziminde yer almadığını unutmayın. Sözdiziminde birkaç fark vardır. Ayrıntı için ipsec_set_policy(3) belgesine bakın.

Algorithms Algoritmalar Aşağıdaki liste desteklenen algoritmaları göstermektedir. protocol ve algorithm neredeyse birbirinden bağımsızdır (orthogonal). Bu kimlik doğrulama algoritmaları, protokol parametresinin -A aalgo seçeneğinde aalgo olarak kullanılabilir:

algorithm keylen (bits) comment hmac-md5 128 ah: rfc2403 128 ah-old: rfc2085 hmac-sha1 160 ah: rfc2404 160 ah-old: 128bit ICV (belge yok) keyed-md5 128 ah: 96bit ICV (belge yok) 128 ah-old: rfc1828 keyed-sha1 160 ah: 96bit ICV (belge yok) 160 ah-old: 128bit ICV (belge yok) null 0 to 2048 hata ayıklama için hmac-sha256 256 ah: 96bit ICV (draft-ietf-ipsec-ciph-sha-256-00) 256 ah-old: 128bit ICV (belge yok) hmac-sha384 384 ah: 96bit ICV (belge yok) 384 ah-old: 128bit ICV (belge yok) hmac-sha512 512 ah: 96bit ICV (belge yok) 512 ah-old: 128bit ICV (belge yok) hmac-ripemd160 160 ah: 96bit ICV (RFC2857) ah-old: 128bit ICV (belge yok) aes-xcbc-mac 128 ah: 96bit ICV (RFC3566) 128 ah-old: 128bit ICV (belge yok) tcp-md5 8 to 640 tcp: rfc2385

Bu şifreleme algoritmaları, protokol parametresinin -E ealgo seçeneğinde ealgo olarak kullanılabilir:

algorithm keylen (bits) comment des-cbc 64 esp-old: rfc1829, esp: rfc2405 3des-cbc 192 rfc2451 null 0 to 2048 rfc2410 blowfish-cbc 40 to 448 rfc2451 cast128-cbc 40 to 128 rfc2451 des-deriv 64 ipsec-ciph-des-derived-01 3des-deriv 192 belge yok rijndael-cbc 128/192/256 rfc3602 twofish-cbc 0 to 256 draft-ietf-ipsec-ciph-aes-cbc-01 aes-ctr 160/224/288 draft-ietf-ipsec-ciph-aes-ctr-03

aes-ctr için bir anahtarın ilk 128 bitinin AES anahtarı olarak kullanılacağını ve kalan 32 bitin nonce olarak kullanılacağını unutmayın.

Bu sıkıştırma algoritmaları, protokol parametresinin -C calgo seçeneğinde calgo olarak kullanılabilir:

algorithm comment deflate rfc2394

RFC vs Linux kernel semantics RFC'ye karşı Linux çekirdeği anlambilimi Linux çekirdeği, bu belirli kutudan yönlendirilen (forwarded) paketler için in politikası yerine fwd politikasını kullanır.

Çekirdek modunda setkey, politikaları ve SA'ları tam olarak çekirdekte saklandıkları şekilde yönetir ve gösterir.

RFC modunda setkey, eklenen her in politikası için fwd politikaları oluşturur (henüz uygulanmamıştır) ve tüm fwd politikalarını filtreler.

Return Values

Komut başarı durumunda 0, hata durumunda ise sıfır olmayan bir değerle çıkar.

Examples

     add 3ffe:501:4819::1 3ffe:501:481d::1 esp 123457
	     -E des-cbc 0x3ffe05014819ffff ;

     add -6 myhost.example.com yourhost.example.com ah 123456
	     -A hmac-sha1 "AH SA configuration!" ;

     add 10.0.11.41 10.0.11.33 esp 0x10001
	     -E des-cbc 0x3ffe05014819ffff
	     -A hmac-md5 "authentication!!" ;

     get 3ffe:501:4819::1 3ffe:501:481d::1 ah 123456 ;

     flush ;

     dump esp ;

     spdadd 10.0.11.41/32[21] 10.0.11.33/32[any] any
	     -P out ipsec esp/tunnel/192.168.0.1-192.168.1.2/require ;

     add 10.1.10.34 10.1.10.36 tcp 0x1000 -A tcp-md5 "TCP-MD5 BGP secret" ;

See Also

ipsec_set_policy(3), racoon(8), sysctl(8)

IPsec için değiştirilmiş manuel anahtar yapılandırması (Manual key configuration for IPsec), Ekim 1999, http://www.kame.net/newsletter/19991007/.

History

setkey komutu ilk olarak WIDE Hydrangea IPv6 protokol yığını kitinde göründü. Komut Haziran 1998'de tamamen yeniden tasarlandı.

Bugs

setkey, sözdizimi hatalarını daha iyi bildirmeli ve işlemelidir.

IPsec ağ geçidi yapılandırması için, ağ geçidi paketleri yeniden birleştirmediğinden (üst katman başlıklarını inceleyemediğinden) TCP/UDP port numaralarına sahip src_range and dst_range çalışmaz.

macOS 26.4 March 19, 2004 macOS 26.4