OpenSWAN

Z wiki linux-user
Skocz do: nawigacji, wyszukiwania
 
Linia 10: Linia 10:
  
  
==== Podstawowe protokoły wchodzące w skład IPSec ===
+
=== Podstawowe protokoły wchodzące w skład IPSec ===
 +
 
 
*'''AH''' ma za zadanie zapewnienie integralności danych, nie zapewnia ich poufności
 
*'''AH''' ma za zadanie zapewnienie integralności danych, nie zapewnia ich poufności
 
*'''ESP''' zapewnia szyfrowanie danych za pomocą jednego z szyfrów (DES, 3DES, Blowfish)
 
*'''ESP''' zapewnia szyfrowanie danych za pomocą jednego z szyfrów (DES, 3DES, Blowfish)
 
*'''IKE''' wypiera AH odpowiada za wstępne uwierzytelnienie oraz uzgadnianie kluczy kryptograficznych. IKE składa się z dwóch części ISAKMP (Internet Security Association and Key Managment Protocol) - odpowiada za przeprowadzenie uwierzytelniania oraz utworzenie kanału SA oraz Oakley - odpowiada za uzgodnienie kluczy według algorytmu Diffiego-Hellmana.
 
*'''IKE''' wypiera AH odpowiada za wstępne uwierzytelnienie oraz uzgadnianie kluczy kryptograficznych. IKE składa się z dwóch części ISAKMP (Internet Security Association and Key Managment Protocol) - odpowiada za przeprowadzenie uwierzytelniania oraz utworzenie kanału SA oraz Oakley - odpowiada za uzgodnienie kluczy według algorytmu Diffiego-Hellmana.
 +
 +
=== Instalacja ===
 +
W celu instalacji odpowiedniego pakietu na systemach redhat'owych wydajemy polecenie
 +
yum install openswan*
 +
co spowoduje zainstalowanie pakietu '''OpenSWAN'''. Od teraz mamy już wszystko co potrzeba do przystąpienia do konfiguracji bezpiecznego kanału.
 +
 +
=== Konfiguracja ===
 +
Przed przystąpieniem do konfiguracji musimy ustalić co tak na prawdę chcemy osiągnąć. Mamy wiele możliwości, w tym miejscu postaram się przedstawić jeden z nich tzn połączenie dwóch sieci w jedną. W przypadku gdy mamy dwa odziały jednej firmy w różnych miejscach takie działanie będzie jak najbardziej uzasadnione. Przyjmuję następujące dane:
 +
 +
'''oddział A'''
 +
serwer linux
 +
ip zew 81.192.0.186
 +
lokalna sieć 10.0.0.0/16
 +
'''oddział B'''
 +
serwer linux
 +
ip zew 81.192.0.185
 +
lokalna sieć 10.1.0.0/16
 +
Tworzymy/edytujemy plik ''/etc/ipsec.conf'', tak aby wyglądał następująco na serwerze A
 +
 +
'''serwer A'''
 +
vim /etc/ipsec.conf
 +
version 2.0    # conforms to second version of ipsec.conf specification
 +
config setup
 +
  interfaces=%defaultroute
 +
  forwardcontrol=yes
 +
  rp_filter=0
 +
  nat_traversal=no
 +
conn linux-to-linux
 +
  auth=esp
 +
  authby=rsasig
 +
  pfs=yes
 +
  left=81.192.0.186
 +
  leftsubnet=10.0.0.0/16
 +
  leftid=81.192.0.186
 +
  leftrsasigkey=(klucz publiczny serwera A)
 +
  right=81.192.0.185
 +
  rightsubnet=10.1.0.0/16
 +
  rightid=81.192.0.185
 +
  rightrsasigkey=(klucz publiczny B)
 +
  auto=add
 +
Taką samą konfigurację tworzymy na serwerze B odpowiednio zamieniając adresy IP.
 +
 +
'''serwer B'''
 +
vim /etc/ipsec.conf
 +
version 2.0    # conforms to second version of ipsec.conf specification
 +
config setup
 +
interfaces=%defaultroute
 +
forwardcontrol=yes
 +
rp_filter=0
 +
nat_traversal=no
 +
conn linux-to-linux
 +
  auth=esp
 +
  authby=rsasig
 +
  pfs=yes
 +
  left=81.192.0.185
 +
  leftsubnet=10.1.0.0/16
 +
  leftid=81.192.0.185
 +
  leftrsasigkey=(klucz publiczny serwera B)
 +
  right=81.192.0.186
 +
  rightsubnet=10.0.0.0/16
 +
  rightid=81.192.0.186
 +
  rightrsasigkey=(klucz publiczny A)
 +
  auto=add
 +
==== znaczenie opcji ====
 +
 +
*'''authby=rsasig''' uwierzytelnianie za pomocą RSA
 +
*'''left=81.192.0.186''' lokalny adres rutera serwera A
 +
*'''leftsubnet=10.0.0.0/16''' sieć LAN za ruterem serwera A
 +
*'''leftrsasigkey=O8wq3…''' klucz publiczny serwera A
 +
*'''right=81.192.0.185''' ip bramy serwera B
 +
*'''rightsubnet=10.1.0.0/16''' sieć LAN za serwerem B
 +
*'''rightrsasigkey=8qw9Hwdf…''' klucz publiczny serwera B
 +
 +
=== Generowanie kluczy RSA ===
 +
Musimy wygenerować odpowiednie klucze potrzebne do autoryzacji serwerów. Aby to uczynić wydajemy odpowiednie polecenia na obu serwerach
 +
ipsec rsasigkey 1024 > /etc/ipsec.d/rsa.key
 +
jeżeli po tym poleceniu dostajemy błąd w stylu
 +
ipsec rsasigkey: configdir is required
 +
możemy użyć polecenia w inny sposób
 +
ipsec rsasigkey 1024 --configdir /etc/pki/nssdb/  > /etc/ipsec.d/rsa.key
 +
Po wygenerowaniu kluczy na obu serwerach należy przekopiować klucz publiczny, który zaczyna się od opcji ''pubkey=…'' do pliku ''/etc/ipsec.conf'' w miejsce przy opcji ''leftrsasigkey=….'' W taki sam sposób musisz przekopiować klucz publiczny '''serwera A''' na '''serwer B''' do pliku ''/etc/ipsec.conf/'' w miejsce opcji ''rightrsasigkey=…'' i w analogiczny sposób z '''serwera B''' na '''serwer A'''. Kolejnym krokiem jest przekopiowanie w odpowiednie miejsce klucza prywatnego. Aby to uczynić edytujemy plik ''/etc/ipsec.secrets'' zmieniamy go w następujący sposób, kopiując z pliku ''/etc/ipsec.d/rsa.key'' sekcje od ''Modules:'' do końca pliku
 +
 +
'''serwer A'''
 +
vim /etc/ipsec.secrets
 +
81.192.0.186 81.192.0.185: RSA {
 +
Modulus:0xb10c2d1d1b87d51b919e2f7e550ff83d57fa776e74b88f559659857fdfa
 +
61d0fbb27a9ac7da9671d97283aa8258ca922267fc83d9b68219d71b2f3999ce49349
 +
d904ed1f887928ga722b85b281306e4f977604b74fcf1ef50ca147d52ad95d0fc3cc4
 +
7e8e6992a511ebfbba0d43360a6ae4c399e4beea3559b763d556fbb0785
 +
PublicExponent: 0x03
 +
# everything after this point is CKA_ID in hex format when using NSS
 +
PrivateExponent: 0x2xc949962dadb0f6eef6b2e2cea15274d5d0c48f
 +
Prime1: 0x2xc949962dadb0f6eef6b2e2cea15274d5r0c48f
 +
Prime2: 0x2xc949962dadb0f6eef6b2e2cea15274d5r0c48f
 +
Exponent1: 0x2xc949962dadb0f6eef6b2e2cea15274d5r0c48f
 +
Exponent2: 0x2xc949962dadb0f6eef6b2e2cea15274d5r0c48f
 +
Coefficient: 0x2xc949962dadb0f6eef6b2e2cea15274d5r0c48f
 +
CKAIDNSS: 0x2xc949962dadb0f6eef6b2e2cea15274d5r0c48f
 +
}Tak samo postępujemy na '''serwerze B''' zmieniając jedynie kolejność adresów IP. Pierwszy IP wskazuje na maszyne lokalną następny na maszyne odległą.
 +
 +
=== Operacje końcowe ===
 +
 +
Aby zweryfikować poprawność naszej konfiguracji włączamy '''ipsec''' na obu serwerach
 +
/etc/init.d/ipsec start
 +
lub
 +
ipsec setup start
 +
a następnie wydajemy polecenie
 +
ipsec verify
 +
jeżeli dostajemy błąd typu
 +
NETKEY detected, testing for disabled ICMP send_redirects  [FAILED]
 +
NETKEY detected, testing for disabled ICMP accept_redirects         [FAILED]
 +
musimy wyłączyć send_redirects oraz accept_redirects dla ICMP, wydajemy polecenie
 +
echo 0 > /proc/sys/net/ipv4/conf/default/accept_redirects
 +
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
 +
jeżeli wszystko ruszyło jak należy możemy rozpocząć połączenie wydając polecenie
 +
ipsec auto --up linux-to-linux
 +
w tym słowo ''linux-to-linux'' jest nazwą połączenia zawartą w pliku ''/etc/ipsec.conf''. Po tych operacjach powinniśmy mieć możliwość połączenia się z '''bramy A''' do '''bramy B''' i na odwrót. Aby zweryfikować czy napewno wszystko poszło jak należy i jesteśmy połączeni z '''serwerem B''' możemy wydać polecenie
 +
ip xfrm state
 +
Do rozwiązania ewentualnych problemów może pomóc nam polecenie
 +
ipsec auto --status
 +
 +
<br /><google1 style="4"></google1>

Aktualna wersja na dzień 15:57, 23 kwi 2012

Osobiste
Przestrzenie nazw

Warianty
Działania
Nawigacja
Narzędzia


Sponsor serwisu

Firma informatyczna ITProjek Bydgoszcz usługi informacztyczne, serwery, linux, windows, strony www, hosting, sieci komputerowe, system archiwizacji danych