Категория > Новости > Сильный лебедь. Делаем VPN на strongSwan и автоматизируем подключение в iOS - «Новости»

Сильный лебедь. Делаем VPN на strongSwan и автоматизируем подключение в iOS - «Новости»


25-12-2021, 00:00. Автор: Audley
ма­нуала по его нас­трой­ке, пред­полагая, что у тебя уста­нов­лена Ubuntu 20.04. Если у тебя дру­гой Linux, коман­ды могут отли­чать­ся, но прин­цип и кон­фиги будут по боль­шей час­ти те же.

Пер­вый шаг стан­дар­тный для уста­нов­ки чего угод­но:


sudo apt update

Те­перь ста­вим нуж­ные пакеты:


libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins libtss2-tcti-tabrmd-dev

Ког­да все ска­чает­ся, перей­дем к нас­трой­ке.


 

Генерируем сертификаты


Соз­даем катало­ги для сер­тифика­тов и клю­чей:


mkdir -p~/pki/{cacerts,certs,private}

Уби­раем у этой пап­ки лиш­ние пра­ва — для надеж­ности:


chmod 700 ~/pki

Ге­нери­руем кор­невой ключ RSA:


pki --gen --type rsa --size4096 --outform pem >~/pki/private/ca-key.pem

И кор­невой сер­тификат:


--dn "CN=VPN root CA" --outform pem ~/pki/cacerts/ca-cert.pem

Чис­ло 3650 — это десять лет (в днях), которые будет работать сер­тификат. Можешь изме­нить это зна­чение на свое усмотре­ние.


Кор­невые сер­тифика­ты готовы, теперь нам нужен сер­тификат для нашего сер­вера.


Де­лаем при­ват­ный ключ:


pki --gen --type rsa --size4096 --outform pem >~/pki/private/server-key.pem

И сам сер­тификат. Обра­ти вни­мание, что IP в трех мес­тах нуж­но изме­нить на IP тво­его сер­вака.


--cacert~/pki/cacerts/ca-cert.pem --cakey~/pki/private/ca-key.pem --dn "CN=NNN.NNN.NNN.NNN" --san@NNN.NNN.NNN.NNN --sanNNN.NNN.NNN.NNN --flagserverAuth --flagikeIntermediate --outform pem ~/pki/certs/server-cert.pem

С этим закон­чили, можем переме­щать клю­чи и сер­тифика­ты из домаш­него катало­га в пап­ку нас­тро­ек strongSwan:


sudo cp -r~/pki/*/etc/ipsec.d/
 

Настраиваем strongSwan


На вся­кий слу­чай пере­име­нуем ста­рый файл с нас­трой­ками, если он есть:


sudo mv/etc/ipsec.conf{,.original}

От­кро­ем его /etc/ipsec.conf в nano:


sudo nano /etc/ipsec.conf

До­бав­ляем раз­дел config setup:


config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no

Даль­ше добав­ляем нас­трой­ки тун­неля IKEv2 (не забудь под­ста­вить свой IP):


conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
dpdaction=clear
dpddelay=300s
rekey=no
left=%any
leftid=NNN.NNN.NNN.NNN
leftcert=server-cert.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
right=%any
rightid=%any
rightauth=eap-mschapv2
rightsourceip=10.10.10.0/24
rightdns=8.8.8.8,8.8.4.4
rightsendcert=never
eap_identity=%identity
ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

Здесь забиты адре­са гуг­лов­ско­го DNS (8.8.8.8 и 8.8.4.4), ты можешь исполь­зовать их или заменить, нап­ример, адре­сом сво­его роуте­ра (его мож­но узнать, наб­рав ip route show default).


Сох­раня­ем кон­фиг и выходим из nano (Ctrl-X, Y, Enter).


Сер­вер VPN мы нас­тро­или, оста­лось соз­дать кре­ды, с которы­ми кли­ент смо­жет авто­ризо­вать­ся. За них отве­чает файл /etc/ipsec.secrets. Откры­ваем его в nano:


sudo nano /etc/ipsec.secrets

До­бав­ляем в него строч­ку


:RSA "server-key.pem"

Дво­ето­чие и про­бел пос­ле него важ­ны, не уби­рай их!


Даль­ше зада­ем логин и пароль поль­зовате­ля. Замени их сво­ей ком­бинаци­ей. Хороший стой­кий пароль можешь соз­дать в пароль­ном менед­жере.


логин :EAP "пароль"

Сох­раняй файл, и переза­пус­тим strongSwan, что­бы он про­читал новые кон­фиги:


sudo systemctl restart strongswan-starter
 

Настраиваем сеть


Наш VPN уже работа­ет и готов при­нимать соеди­нения, но сетевой тра­фик до него пока не доходит. Нуж­но нас­тро­ить фай­рвол и IP-фор­вардинг.


Раз­реша­ем про­пус­кать тра­фик OpenSSH, а так­же UDP на пор­тах 500 и 4500:


sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw allow 500,4500/udp

Ос­талось сде­лать так, что­бы вхо­дящие пакеты IPSec обра­баты­вались нашей служ­бой. Узна­ем адрес нашего сетево­го интерфей­са:


ip route show default

Пос­мотри, что будет написа­но пос­ле сло­ва dev. Это может быть, нап­ример, eth0 или ens2 либо еще что‑нибудь в таком духе. Запом­ни или запиши куда‑нибудь эти бук­вы.


От­кры­ваем файл с нас­трой­ками пра­вил фай­рво­ла:


sudo nano /etc/ufw/before.rules

В самом начале фай­ла, до сек­ции *filter, нам надо добавить два бло­ка. Замени в трех мес­тах ИНТЕРФЕЙС тем, что мы наш­ли выше.


*nat
-A POSTROUTING -s 10.10.10.0/24 -o ИНТЕРФЕЙС -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o ИНТЕРФЕЙС -j MASQUERADE
COMMIT
*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o ИНТЕРФЕЙС -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT
*filter
...

А в кон­це *filter — такие две стро­ки:


-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT

Зак­рыва­ем, сох­раня­ем. Теперь откры­ваем файл с нас­трой­ками служ­бы фай­рво­ла:


sudo nano /etc/ufw/sysctl.conf

До­бав­ляем в конец вот такие стро­ки:


net/ipv4/ip_forward=1
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0
net/ipv4/ip_no_pmtu_disc=1

Вык­люча­ем и вклю­чаем фай­рвол для при­мене­ния нас­тро­ек:


sudo ufw disable
sudo ufw enable

Ес­ли сис­тема зап­росит под­твержде­ние, жми Y.


 

Настраиваем подключение


Нам нуж­но заб­рать с сер­вера свой сер­тификат, с которым мы будем под­клю­чать­ся. Он лежит в фай­ле по такому пути:


/etc/ipsec.d/cacerts/ca-cert.pem

Мо­жешь вывес­ти его коман­дой cat, ско­пиро­вать и сох­ранить в файл на сво­ем компь­юте­ре либо заб­рать, под­клю­чив­шись по SFTP.


Для под­клю­чения к VPN тебе понадо­бят­ся три вещи: IP тво­его сер­вера, файл с сер­тифика­том и пара из логина и пароля, которые ты задал в фай­ле /etc/ipsec.secrets. Все это у тебя есть!


Нас­трой­ки в раз­ных ОС выпол­няют­ся нем­ного по‑раз­ному.


В macOS тебе нуж­но:



  1. Дваж­ды клик­нуть на файл с сер­тифика­том и под­твер­дить его добав­ление в цепоч­ку клю­чей, вве­дя пароль.

  2. От­крыть цепоч­ку (Keychain Access), най­ти VPN root CA и задать нуж­ные раз­решения. Дваж­ды клик­ни по нему, рас­крой раз­дел «Доверять» (Trust) и выбери «Доверять всег­да» (Always Trust) нап­ротив стро­ки IPSec.

  3. Соз­дать соеди­нение в нас­трой­ках сети. Нажимай плю­сик вни­зу, выбирай VPN, IKEv2 и жми «Соз­дать» (Create), впи­сывай IP сер­вера в стро­ки «Адрес сер­вера» и «Уда­лен­ный ID».

  4. В нас­трой­ках соеди­нения выбирай «Имя поль­зовате­ля» и ука­жи свои логин и пароль.


В Windows про­цесс нем­ного дру­гой:



  1. От­кры­вай «Кон­соль управле­ния», выбирай «Файл → Добавить или уда­лить оснас­тку → Сер­тифика­ты → Добавить».

  2. Что­бы VPN работал для любого поль­зовате­ля, выбирай «Учет­ная запись компь­юте­ра» и жми «Далее». Затем жми «Локаль­ный компь­ютер» и «Закон­чить».

  3. В «Кор­не кон­соли» выбирай «Доверен­ные кор­невые цен­тры сер­тифика­ции для доверия федера­ции» и «Сер­тифика­ты».

  4. В меню «Дей­ствия» в пра­вой панели наж­ми «Все задачи» и «Импорти­ровать».

  5. Вы­зови меню выбора фай­ла, выс­тавь тип X.509 и импорти­руй свой сер­тификат.

  6. Те­перь нуж­но соз­дать под­клю­чение к VPN. Зай­ди в «Панель управле­ния → Сеть интернет». В Windows 7 может понадо­бить­ся соз­дать новое под­клю­чение к рабоче­му мес­ту, в Windows 10 и 11 дол­жен быть спе­циаль­ный раз­дел VPN. В любом слу­чае впи­сывай адрес сер­вера, логин и пароль.

  7. Мо­жешь под­клю­чать­ся!


На iOS уста­нов­ка схо­жа с тем, что мы делали на macOS. Но пос­коль­ку я обе­щал про­демонс­три­ровать воз­можность авто­мати­чес­ки вклю­чать и вык­лючать VPN, мы вмес­то это­го соз­дадим файл с про­филем, который заод­но будет содер­жать и все нас­трой­ки.


На Android, увы, strongSwan не под­держи­вает­ся на уров­не ОС, поэто­му тебе при­дет­ся ска­чать кли­ент­ское при­ложе­ние и нас­тро­ить его. Впро­чем, эта статья ори­енти­рова­на на поль­зовате­лей iOS, так что я не пред­полагаю, что речь о тво­ем основном телефо­не.


 

Куем профиль для iOS


А теперь самая важ­ная часть нашего прик­лючения, ради которой все и затева­лось. Мы соз­дадим кас­томный про­филь для iOS, где про­пишем, при каких усло­виях устрой­ство дол­жно под­клю­чать­ся к VPN. Не вол­нуй­ся — пол­ностью полагать­ся на авто­мати­зацию необя­затель­но, и при желании ты смо­жешь деак­тивиро­вать такое поведе­ние в нас­трой­ках, что­бы вклю­чать и вык­лючать VPN вруч­ную.



Перейти обратно к новости