Типичная картина - есть домашний роутер на 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.