OpenVPN через stunnel

Thank you for reading this post, don't forget to subscribe!

OpenVPN очень успеш­ная Open Source тех­но­ло­гия, кото­рая при­ме­ня­ет­ся во мно­гих ком­па­ни­ях для орга­ни­за­ции уда­лен­но­го досту­па сотруд­ни­кам. Для того, что­бы улуш­чить без­опас­ность дан­но­го типа под­клю­че­ний, мож­но исполь­зо­вать ути­ли­ту stunnel, кото­рая обес­пе­чи­ва­ет орга­ни­за­цию допол­ни­тель­но­го шиф­ро­ва­ния с помо­щью про­то­ко­ла ssl. . При добав­ле­нии к OpenVPN допол­ни­тель­ной защи­ты в виде stunnel при­хо­дит­ся так­же исполь­зо­вать дан­ное ПО и на кли­ент­ской части, что созда­ет опре­де­лен­ные неудоб­ства и долж­но учи­ты­вать­ся заранее.

Что делаем на сервере

Будем счи­тать, что у нас уже есть рабо­та­ю­щий OpenVPN сер­вис на OS Ubuntu Linux, к кото­ро­му мы хотим доба­вить допол­ни­тель­ную защи­ту в виде stunnel.  Нам по сути надо поме­нять толь­ко кон­фи­гу­ра­ци­он­ный файл stunnel.conf. Нуж­ное содер­жи­мое это­го фай­ла при­ве­де­но ниже.

Так в дан­ном при­ме­ре сер­вис stunnel будет при­ни­мать вхо­дя­щие под­клю­че­ния на TCP:45678 пор­ту на внеш­нем сете­вом интер­фей­се и пере­на­прав­лять их на TCP:1194 порт интер­фей­са localhost. Имен­но на дан­ном пор­ту теперь дол­жен слу­шать сер­вис OpenVPN. После сохра­не­ния фай­ла про­ве­дем пере­за­груз­ку сер­ви­су stunnel с помо­щью сле­ду­ю­щей коман­ды в шелле.

# sudo /etc/init.d/stunnel4 restart
Кро­ме это­го необ­хо­ди­мо обно­вить кон­фи­гу­ра­цию само­го сер­ви­са OpenVPN. Так, нуж­но под­ре­дак­ти­ро­вать файл /etc/openvpn/server.conf таким обра­зом, что­бы сер­вис рабо­тал на TCP 1194 пор­ту интер­фей­са localhost. Эти дирек­ти­вы как часть ука­зан­но­го фай­ла будут выгля­дит сле­ду­ю­щим образом.

После того, как нуж­ные дирек­ти­вы будут вне­се­ны, про­ве­дем пере­за­груз­ку сер­ви­са OpenVPN.

# sudo systemctl restart openvpn@server
И в завер­ше­нии пере­на­строй­ки сер­ве­ра про­из­во­дит­ся добав­ле­ние пра­вил iptables, кото­рые раз­ре­шат тра­фик меж­ду при­ло­же­ни­я­ми на интер­фей­се localhost.

# sudo iptables -A INPUT -i lo -j ACCEPT
# sudo iptables -A OUTPUT -o lo -j ACCEPT

Что делаем на клиенте

Повто­рять общую настрой­ку кли­ент­ской части stunnel не буду, это так­же опи­са­но в ста­тье в моем бло­ге, упо­мя­ну­той выше. Настрой­ки фай­ла stunnel.conf кли­ент­ской части stunnel при­во­жу ниже.

В выше­при­ве­ден­ном фай­ле мы ука­зы­ва­ем при­ни­мать соеди­не­ния от кли­ен­та OpenVPN на интер­фей­се localhost по пор­ту TCP:1194 и пере­на­прав­лять их на внеш­ний IP адрес сер­ве­ра по пор­ту TCP:45678. После вне­се­ния и сохра­не­ния нуж­ных изме­не­ний про­во­дим запуск stunnel на клиенте.

В кли­ент­ской части OpenVPN необ­хо­ди­мо изме­нить кон­фи­гу­ра­ци­он­ный файл .ovpn таким обра­зом, что­бы под­клю­че­ние шло на localhost TCP:1194 порт. Это место настро­ек фай­ла пред­став­ле­но ниже.

proto tcp
remote 127.0.0.1 1194
После при­ме­не­ния изме­нен­но­го кон­фи­га, запус­ка­ем кли­ент OpenVPN и полу­ча­ем двой­ную защи­ту в действии.

 

Скре­щи­ва­ние двух Open Source тех­но­ло­гий поз­во­ля­ет сде­лать уда­лен­ный доступ еще более без­опас­ным и надеж­ным. В каких-то аспек­тах дан­ное реше­ние выиг­ры­ва­ет в кон­ку­рен­ции с плат­ны­ми про­дук­та­ми от таких гиган­тов IT рын­ка как Cisco Systems и CheckPoint. Пожа­луй, это еще один из при­ме­ров, когда нали­чие зна­ний и нуж­ных навы­ков поз­во­ля­ют достичь нуж­ных резуль­та­тов без покуп­ки доро­гу­ще­го про­грамм­но­го обес­пе­че­ния и оборудования.