IPSec między Windows XP i OpenBSD
Problem występujący w mojej domowej sieci WLAN można streścić następująco: mój AP nie robi nic poza WEP, który okazuje się trywialny do złamania. Konieczna jest więc dodatkowa ochrona poufności ruchu w WLAN.
Pierwsze rozwiązanie, które mi się narzucało to wykorzystanie natywnego IPSec z Windows i isakmpd z OpenBSD. Rozwiązanie to działa, ale z jednym wyjątkiem: Windows ma problemy z trybem tunelowym. Jestem w stanie automatycznie szyfrować cały ruch LAN-LAN, ale ruch w relacji LAN-świat idący na odcinku stacja-router jest nieszyfrowany.
Jest to dla mnie częściowo do zaakceptowania, bo głównym zmartwieniem jest nieszyfrowana transmisja między stacjami w LAN. Ten cel udało się zrealizować. Ruch ze stacji na świat i tak zwykle idzie innymi szyfrowanymi protokołami (SSL, SSH).
OpenBSD
W sieci wdrożyłem najprostszą możliwą architekturę IPSec opartą o pre-shared key identyczny na wszystkich stacjach. Jest to prostackie sprowadzenie IPSec do czegoś w rodzaju WPA-PSK, ale mi to wystarcza.
Konfiguracja po stronie OpenBSD, plik /etc/isakmpd/isakmpd.conf:
[Phase 1]
Default= any
[any]
Phase= 1
Configuration= Default-main-mode
Authentication= HASLO-HASLO-HASLO
[Default-main-mode]
EXCHANGE_TYPE= ID_PROT
Transforms= AES-SHA,3DES-SHA
Wymowa tego fragmentu jest lakoniczna: puszczaj każdego, kto się poprawnie uwierzytelni podanym hasłem po IKE. Dodatkowo w OpenBSD trzeba podać politykę w /etc/isakmpd/isakmpd.policy:
Authorizer: "POLICY"
Licensees: "passphrase:HASLO-HASLO-HASLO"
Conditions: app_domain == "IPsec policy" &&
esp_present == "yes" &&
esp_enc_alg != "null" -> "true";
Zacząłem to też testować na certyfikatach X.509 i zasadniczo działa, ale potem zrezygnowałem jak zaczęły się problemy z trybem tunelowym po stronie Windows i tak zostało. Oczywiście, Windows XP nie obsługuje AES w IPSec :-\
Windows
Po stronie Windows dodaję politykę IPSec przy pomocy konsoli:
- Uruchamiam mmc
- Dodaję snapshot IP Security Policies on Local Computer
- Prawym Create IP Security Policy
- Wszystko na domyślnych do okna Default Response Rule Authentication Method, wybieram Use this string... i podaję "HASLO-HASLO-HASLO"
- Finish z włączonym Edit properties przenosi do okienka z konfiguracją filtrów. I tutaj jest kluczowe.
- Do istniejącego Dynamic Default Response dodaję (Add) kolejny filtr.
- W Tunnel endpoint zostawiam "This rule does not..."
- W Network Type wybieram LAN
- W Authenticaton method podaję hasło jak wyżej.
- W oknie IP Filter List wybieram Add, pojawia się okno definicji filtra
- Znowu Add i wizard
- W IP Traffic Source wybieram "My IP Address"
- W IP Traffic Destination wybieram "A specific IP Subnet" i wpisuję swoją sieć lokalną
- Do końca na domyślnych, OK.
- W okienku IP Filter List należy zaznaczyć kropką nowo utworzony filtr i Next.
- W Filter Action wybieram Require Security żeby do stacji nie można było się dobić bez IPSec - czyli bez uwierzytelnienia.
- Next, Finish, OK, Close.
- W głównym oknie konsoli mmc pojawia się nowa polityka IPSec. Teraz żeby ją uruchomić należy kliknąć prawym i dać Assign.
Teraz przy pierwszym ruchu sieciowym do stacji w LAN Windows powinien próbować najpierw nawiązać ISAKMP, a potem cały ruch powinien iść po IPSec. Bez IPSec nie powinno być możliwe skontaktowanie się z daną stacją, na której skonfigurowaliśmy politykę IPSec jak wyżej.
Wygląda to jak poniżej. Akurat to początkowe ISAKMP zostało sprowokowane przez zapytanie do DNS skierowane do OpenBSD (który jest nameserverem).
20:35:04.446567 toshiba.local.isakmp > gw.local.isakmp: isakmp v1.0 exchange QUICK_MODE encrypted
cookie: 6673a330f301dcfe->e6d4075ece8ce9f0 msgid: 22c2bbb3 len: 204
20:35:04.453368 gw.local.isakmp > toshiba.local.isakmp: isakmp v1.0 exchange QUICK_MODE encrypted
cookie: 6673a330f301dcfe->e6d4075ece8ce9f0 msgid: 22c2bbb3 len: 164
20:35:04.454742 esp toshiba.local > gw.local spi 0x239290E7 seq 1 len 68
20:35:04.455283 toshiba.local.isakmp > gw.local.isakmp: isakmp v1.0 exchange QUICK_MODE encrypted
cookie: 6673a330f301dcfe->e6d4075ece8ce9f0 msgid: 22c2bbb3 len: 52
20:35:05.435456 esp toshiba.local > gw.local spi 0x239290E7 seq 2 len 68
20:35:05.437144 esp gw.local > toshiba.local spi 0x50F26C95 seq 1 len 108
20:35:05.438136 esp toshiba.local > gw.local spi 0x239290E7 seq 3 len 68
20:35:05.439576 esp gw.local > toshiba.local spi 0x50F26C95 seq 2 len 108
Dodajmy, że OpenBSD nie jest tutaj do niczego potrzebne, bo stacje w LAN dogadują się po ISAKMP między sobą. OpenBSD uczestniczy w tej komunikacji jak równy z równym, dzięki czemu przynajmniej ruch do bramki jest szyfrowany.
20:38:05.158215 esp toshiba.local > asus.local spi 0xE4D68A11 seq 1 len 76
20:38:05.159408 esp asus.local > toshiba.local spi 0xABCBD7DC seq 1 len 76
20:38:17.032640 esp optimus.local > toshiba.local spi 0xD4D64BF3 seq 40 len 52 (DF)
20:38:17.035345 esp toshiba.local > optimus.local spi 0x1ADB8AA6 seq 47 len 52 (DF)
20:38:23.120899 toshiba.local > ns1.siteground14.com: icmp: echo request
20:38:23.287413 ns1.siteground14.com > toshiba.local: icmp: echo reply
20:38:35.763226 esp toshiba.local > optimus.local spi 0x1ADB8AA6 seq 48 len 76
20:38:35.764480 esp optimus.local > toshiba.local spi 0xD4D64BF3 seq 41 len 76
Wydajność
Test wykonany w różnych kombinacjach przy pomocy ttcp po TCP. Bloki 16-32 MB.
| Relacja | WEP | IPSec | Transfer |
| SIS 162-Ralink | X | X | 2,78 mbit/sek |
| IntelO-Ralink | X | X | 3,42 mbit/sek |
| IntelO-IntelT | X | X | 7 mbit/sek |
| IntelO-IntelT | X | 7,86 mbit/sek | |
| Ralink-Intel) | X | 7,42 mbit/sek | |
| Ralink-Intel) | X | X | 3,52 mbit/sek |
Wygląda na to, że AMD-K6 300 MHz jest wąskim gardłem. Karta SIS obsługuje tylko WLAN 11mbit/sek.
Wnioski
Postawienie natywnego windzianego IPSec między stacjami rozwiązuje problem bezpieczeństwa stacji w LAN bo:
- do stacji nie można połączyć się bez IPSec
- ruch między stacjami jest szyfrowany (głównie transfery plików)
Software'owy WEP w OpenBSD nie stanowi żadnego problemu. Do dopracowania jest jeszcze ruch gw-stacje.
- Zaloguj się lub zarejestruj by odpowiadać
- Generate PDF file
- Wersja do wydruku








