OpenSWAN
Z wiki linux-user
Linia 10: | Linia 10: | ||
− | + | === 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> |