- PVSM.RU - https://www.pvsm.ru -
Всё началось с того что возникла необходимость защитить передаваемые на сервер пользовательские данные. И сделать нужно было так, что бы не заморачивать при этом пользователей корпоративных iPad'ов. Я не смог придумать ничего умнее как использовать IPSexc и VPN On-Demand на iOS. И поднимать я его решил через strongSwan.
Как же я намучился с этим… Как же я возненавидел это сообщение на картинке сверху… В интернете полно статей и готовых примеров, но все они используют авторизацию по логину и паролю.
И теперь я хочу сэконосить время тем кто отважится пройти этот тернистый путь.
Определимся что должны получить на выходе:
Как должно работать:
VPN должен включиться на iPad'е сам как только мы обратимся к определённом хосту, например «ya.ru». При этом не запрашивая пароль у пользователя.
Что будем использовать:
Что будем делать:
Как выяснилось, RSA-авторизация в strongSwan сделана через xauth. И этот самый xauth, помимо сертификата, обязательно требует ещё и логин с пароль. Вот такая у них реализация. У strongSwan есть вполне сносное описание [1] как поднять IPSec VPN для работы с iOS. Но проблема здесь как раз в запросе пароля. Поэтому этот вариант нам не подходит.
Но не всё так плохо! Нас спасёт Tobias Brunner и его коммит [2]! Как раз без этого коммита у нас ничего бы и не получилось. Спасибо ему огромное. Этот код представляет собой плагин к xauth, который не требует дополнительной аутентификации пользовательского логина и пароль. Т.е. происходит только RSA-аутентификация по ключам. Что нам и нужно было!
Не буду рассказывать про то как сгенерировать ключи. Это очень подробно описано в туториале от strongSwan [1]. Я лишь хочу обратить внимание на несколько важных моментов туториала:
Перед установкой рекомендуется прочитать и внять рекомендациям [3] по «хакингу». А точнее по сборке пакета из репозитория.
После установки всех необходимых библиотек и тулзов перейдём к сборке:
Не забудьте открывать на firewall'е 500 и 4500 UDP порты, т.к. через них работает IPSec.
Разрешим проброску пакетов через NAT:
iptables --table nat --append POSTROUTING --jump MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward for each in /proc/sys/net/ipv4/conf/* do echo 0 > $each/accept_redirects echo 0 > $each/send_redirects done
Наконец мы можем приступить к конфигурации.
version 2.0 # conforms to second version of ipsec.conf specification config setup conn ios keyexchange=ikev1 xauth=server leftauth=rsa rightauth=rsa rightauth2=xauth-noauth left=%defaultroute leftsubnet=0.0.0.0/0 leftfirewall=yes leftcert=serverCert.pem right=%any rightsubnet=10.0.0.0/24 rightsourceip=10.0.0.0/24 rightcert=clientCert.pem auto=add
: RSA serverKey.pem
charon { # number of worker threads in charon threads = 16 dns1 = 8.8.8.8 plugins { } } pluto { dns1 = 8.8.8.8 } charon { dns1 = 8.8.8.8 } libstrongswan { }
Init.d скрипт слишком длинный. Его можно будет забрать здесь [4].
Установить сертификаты (clientCert.p12 и caCert.pem) можно несколькоми способами:
Лично я советую использовать iPhone Configuration Utility, т.к. только там можно задать домены для которых должен быть On-Demand VPN.
Вопросы, комментарии, критика приветствуется.
Спасибо за внимание.
Автор: iznakurnozh
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/27146
Ссылки в тексте:
[1] описание: http://wiki.strongswan.org/projects/strongswan/wiki/IOS_(Apple)
[2] коммит: http://git.strongswan.org/?p=strongswan.git;a=commit;h=fb780b2147fecd4e02a6cac99b1071c6060cb3f7
[3] рекомендациям: https://github.com/strongswan/strongswan/blob/master/HACKING
[4] здесь: https://gist.github.com/anonymous/4953417
[5] iPhone Configuration Utility: http://www.apple.com/support/iphone/enterprise/
[6] Источник: http://habrahabr.ru/post/169463/
Нажмите здесь для печати.