Ключевые слова:wireless, wlan, ipsec, security, freebsd, crypt, tunnel, (найти похожие документы)
From: Anton Karpov <toxa at cterra.ru>
Newsgroups: email
Date: Mon, 13 Sep 2004 14:31:37 +0000 (UTC)
Subject: Защита wi-fi трафика в домашней сети с использованием IPSec
Типичная картина - есть домашний роутер на FreeBSD, предоставляющий
доступ в интернет машинам маленькой домашней локалки. Один из клиентов -
лаптоп с wi-fi картой, получающий доступ в сеть через соедиенный с
роутером Access Point. Не будем в сто первый раз упоминать про
недостатки WEP, а также про то, что часто предлагаемая альтернатива -
IPSec-туннель между беспроводным клиентом и шлюзом (роутером). Просто
настроим все это.
Пусть клиент имеет адрес 192.168.1.3, внутренний адрес нашего роутера
a.k.a. шлюза в интернет - 192.168.1.1, адрес точки доступа (AP) не
играет здесь никакой роли - для него все будет прозрачно.
С учетом нашей ситуации (маленькая сеть, один-два беспроводных клиента),
мы не будем использовать key exchange демоны (racoon, isakmpd), а
пропишем ключевые фразы руками.
Сервер:
-------
~# echo 'ipsec_enable="YES"' >> /etc/rc.conf
~# cat > /etc/ipsec.conf
# flush previous SAD & SPD
flush;
spdflush;
# Security Association Database
# For ESP
add 192.168.1.1 192.168.1.3 esp 1011 -E 3des-cbc "myveryverysecretpassphrase";
add 192.168.1.3 192.168.1.1 esp 1012 -E 3des-cbc "myveryverysecretpassphrase";
# For AH
add 192.168.1.1 192.168.1.3 ah 1234 -A hmac-md5 "verysecrettoo";
add 192.168.1.3 192.168.1.1 ah 1235 -A hmac-md5 "verysecrettoo";
# Security Policy Database
spdadd 192.168.1.3 0.0.0.0/0 any -P in ipsec esp/tunnel/192.168.1.3-192.168.1.1/require
ah/tunnel/192.168.1.3-192.168.1.1/use;
spdadd 0.0.0.0/0 192.168.1.3 any -P out ipsec esp/tunnel/192.168.1.1-192.168.1.3/require
ah/tunnel/192.168.1.1-192.168.1.3/use;
^D
Если у нас FreeBSD 4.x:
~# reboot
Или, с учетом того, что ipsec стартует нехитро, как можно убедиться из rc.network:
case ${ipsec_enable} in
[Yy][Ee][Ss])
if [ -f ${ipsec_file} ]; then
echo ' ipsec: enabled'
setkey -f ${ipsec_file}
else
echo ' ipsec: file not found'
fi
;;
esac
просто выполняем:
~# setkey -f /etc/ipsec.conf
В случае FreeBSD 5.x/6.x вообще все просто:
~# /etc/rc.d/ipsec start
Тем самым, мы загрузили правила, указывающие применять протоколы AH
(Authention Header) и ESP (Encapsulated Security Payload) для всех
пакетов, проходящих через нас от клиента или к нему. Файл состоит из
двух частей - описания правил ассоциации (ЧТО использовать) и политики
ассоциации (КАК использовать). В нашем случае видно, что использование
ESP обязательно (require), тогда как AH - по желанию (use). Парольные
фразы - ключи, на основе которых генерируются сессионные ключи для
шифрования информации.
Замечу, что если эти действия выполняются удаленно, например, по ssh, с
того самого беспроводного клиента, то можно потерять с ним связь, так
как он (клиент) еще не настроен. Be careful.
Клиент:
-------
В моем случае клиентом также является FreeBSD-машина, возможно, это не
так интересно с точки зрения настройки (например, если вы предпочитаете
узнать, как настроить Windows NT в качестве клиента), но увы - у меня
FreeBSD и на лаптопах тоже.
В этом случае конфигурация клиента будет отличаться только парой записей
в ipsec.conf:
# flush previous SA & SP
flush;
spdflush;
# Security Association rules
# For ESP
add 192.168.1.1 192.168.1.3 esp 1011 -E 3des-cbc "myveryverysecretpassphrase";
add 192.168.1.3 192.168.1.1 esp 1012 -E 3des-cbc "myveryverysecretpassphrase";
# For AH
add 192.168.1.1 192.168.1.3 ah 1234 -A hmac-md5 "verysecrettoo";
add 192.168.1.3 192.168.1.1 ah 1235 -A hmac-md5 "verysecrettoo";
# Security Policy rules
spdadd 0.0.0.0/0 192.168.1.3 any -P in ipsec esp/tunnel/192.168.1.1-192.168.1.3/require
ah/tunnel/192.168.1.1-192.168.1.3/use;
spdadd 192.168.1.3 0.0.0.0/0 any -P out ipsec esp/tunnel/192.168.1.3-192.168.1.1/require
ah/tunnel/192.168.1.3-192.168.1.1/use;
Нетрудно заметить, что поменялось направление: 0.0.0.0/0 192.168.1.3
стало "IN" (т.е. это означает, что необходимо принимать трафик от всех
как зашифрованный, что вполне логично - это будет трафик,
отмаршрутизированный шлюзом), а 192.168.1.3 0.0.0.0/0 стало "OUT" (т.е.
"шифровать все, что уходит на какой-либо хост от меня", т.к. согласно
маршрутизации все пойдет на шлюз).
Убедиться в том, что ни один пакет не остался "голым", можно с помощью tcpdump:
22:10:14.747551 IP 192.168.1.1 > 192.168.1.3: AH(spi=0x000004d2,seq=0x19d3): IP truncated-ip - 68 bytes missing! 192.168.1.1 > 192.168.1.3: ESP(spi=0x000003f3,seq=0x19d3) (ipip-proto-4)
22:10:14.815396 IP 192.168.1.1 > 192.168.1.3: ah
22:10:14.815707 IP 192.168.1.3 > 192.168.1.1: AH(spi=0x000004d3,seq=0x1b18): IP 192.168.1.3 > 192.168.1.1: ESP(spi=0x000003f4,seq=0x1b18) (ipip-proto-4)
Честно говоря, я не до конца понимаю великий смысл строчек про
truncated-ip, потери производительности или каких-либо других проблем я
не заметил. Возможно, это связано с тем, что на лаптопе я использую
-CURRENT.
Эти русские - отъявленные ребята! А что, в лэптопах уже Ethernet-карт не делают? Надо обязательно светить свой трафик на весь окружающий район? И аутентификации не надо, да? А про атаку "Человек посередине" в wi-fi аффтар ничего не слышал? Ню-ню....