Крайно ръководство за настройка на защитен OpenVPN сървър на Ubuntu 20.04
Виртуална частна мрежа (VPN) ви позволява сигурно и частно да се свързвате с отдалечена частна мрежа, например, вашата офис мрежа или интернет по такъв начин, сякаш сте директно свързани към частна мрежа.
VPN работи в архитектура сървър-клиент. VPN сървър е разположен на машина и е публично достъпен през Интернет. VPN сървърът може да бъде конфигуриран да позволява свързване към частна LAN, като например офис мрежа, или да разрешава връзки с интернет. Потребителят се свързва с VPN сървъра с помощта на VPN клиент на своята локална машина. Комуникацията между VPN сървър и клиент се осъществява с помощта на защитен протокол за тунелиране. За Интернет изглежда, че дестинацията на трафика е VPN сървърът; обаче трафикът преминава към клиента през сървъра.
VPN има много приложения в ежедневието, като сигурно свързване с обществена Wifi мрежа, която често е компрометирана или заобикаляйки географските ограничения на определени уебсайтове чрез свързване към VPN, базирана в държава, която е разрешена от уебсайта.
OpenVPN е широко използвана VPN реализация, която позволява широка гама от конфигурации и опции. Той използва Secure Sockets Layer (SSL) протокол за криптиране на данните и предварително споделени ключове, потребителско име/парола или сертификати за удостоверяване на VPN клиента. В тази статия ще видим как да настроим VPN сървър и VPN клиент на Ubuntu 20.04.
Инсталация
OpenVPN е наличен в официалните хранилища на Ubuntu в пакета openvpn
. Този пакет инсталира както OpenVPN сървъра, така и клиента.
sudo apt инсталирайте openvpn
Както споменахме по-рано, OpenVPN използва SSL сертификати за криптиране на данни между сървъра и клиента. Трябва да настроим собствен сертифициращ орган (CA), за да издаваме сертификати за VPN. Имайте предвид, че това трябва да бъде настроено на различна машина от тази, на която е настроен OpenVPN; причината е, че ако е на същия сървър и ако бъде компрометиран, нападателят може да получи достъп до частния ключ и по този начин да атакува VPN връзката.
Ще използваме инструмент, наречен „Easy-RSA“, за да настроим сертифициращия орган. За да го инсталирате, изпълнете следното на CA машината, OpenVPN сървърната машина и клиентската машина, тъй като конфигурацията е необходима и на трите, за да настроите CA.
sudo apt install easy-rsa
Сега първо ще конфигурираме сертифициращия орган на CA машината и ще изпълним някои необходими стъпки за конфигуриране за същото на машината на Open VPN сървър.
Настройка на сертифициращ орган
Първоначална настройка на CA машина
Сега този пакет инсталира команда, наречена make-cadir
който се използва за създаване на папка за конфигурация на сертифициращия орган. Нека създадем папка с помощта на това и да влезем в папката.
make-cadir cert_authority && cd cert_authority
Отворете извикания файл vars
създаден в тази директория. Този файл съдържа някои конфигурационни променливи, които трябва да променим. Стойностите, които трябва да бъдат променени, са на редове 91-96, след коментара за Организационни полета който описва тези полета. Разкоментирайте редовете и попълнете съответните стойности на мястото на примерните стойности.
Запазете и излезте от файла. Ако използвате vim редактор, натиснете Esc
, Тип :wq
и натиснете Въведете
за запазване и излизане.
След това стартираме easyrsa
програма в директорията за настройка на инфраструктурата с публичен ключ (PKI), която ще се използва за генериране на публичен ключ и сертификати.
./easyrsa init-pki
Следващата стъпка ще генерира CA ключа и сертификата. Когато командата поиска парола, въведете парола за CA ключа. Също така въведете общо име, когато бъдете подканени. Ако оставите това празно, ще се използва името по подразбиране Easy-RSA CA име.
./easyrsa build-ca
Както виждаме от изхода, сертификатът и ключът са генерирани. Този ключ ще се използва за подписване на сертификати на клиента и сървъра, следователно никога не трябва да се докосва/променя.
Сега имаме настройката на PKI. Следващата стъпка е да създадем сървърен ключ и сертификат на машината, които ще използваме като OpenVPN сървър. Този сертификат по-късно ще бъде подписан от CA машината.
Генериране на сървърен ключ и сертификат на сървърната машина
Вече сме инсталирали Easy RSA на сървърната машина. Сега изпълнете трите стъпки на сървърната машина, които преди това извършихме на CA машината, а именно. създаване на CA директория с помощта на make-cadir
и влизайки вътре в него, модифицирайки променливите в vars
файл и генериране на PKI чрез ./easyrsa init-pki
команда.
След това трябва да изпълним командата, за да генерираме заявка и ключ за сертификат за сървър.
./easyrsa gen-req сървър nopass
Обърнете внимание, че сме предали опцията nopass
така че командата няма да ни подкани да въведете парола за сървърния ключ. Той все още ще подканва за общо име за сървъра, което можете да въведете всичко или да го оставите празно за име по подразбиране (сървър) да се използва.
Преместете генерирания ключов файл вътре в /etc/openvpn
директория.
sudo mv pki/private/server.key /etc/openvpn
Изпратете заявката за сертификат до CA машината. Ще използваме команда scp
за тази цел.
scp pki/reqs/server.req потребител@CA_MACHINE_HOSTNAME:/директория
На екранната снимка по-горе хостът 45.79.125.41 е CA машината. Копирахме сертификата в директорията /root.
Сега сертификатът на сървъра е копиран на CA машината. Следващата стъпка е да се върнете към CA машината и да подпишете този сертификат.
Подписване на сертификата на сървъра в CA
Първо, нека проверим дали файлът със заявка за сертификат от сървъра е копиран на CA машината. Отидете в директорията, където копирахме файла (/root в моя пример) и стартирайте ls
.
:~# cd /root && ls cert_authority server.req
Както виждаме, файлът server.req
присъства. След това отидете в директорията на CA и импортирайте тази заявка.
cd cert_authority ./easyrsa import-req /root/server.req сървър
За да подпишете тази заявка, изпълнете следната команда.
./easyrsa sign-req сървър сървър
Тук първият аргумент е типът на заявката, т.е. сървър, а вторият аргумент е общото име на сървърната машина, за която по-рано използвахме стойността по подразбиране, т.е. сървър.
Въведете фразата да, и паролата за CA ключа, когато бъдете подканени.
Сега можем да премахнем файла със заявка за сертификат и да копираме генерирания сертификат за сървъра, както и публичния сертификат на CA обратно на машината на сървъра.
rm /root/server.req scp pki/issued/server.crt [email protected]:/root scp pki/ca.crt [email protected]:/root
След това трябва да извършим още няколко стъпки, за да осигурим сигурна връзка на VPN.
Генериране на DH параметри
DH (Diffie-Hellman) обменът на ключове е алгоритъм за гарантиране на сигурен обмен на крипто ключове през несигурен канал. Първо, нека преместим получения сертификат и публичен сертификат на CA /etc/openvpn
.
mv /root/ca.crt /root/server.crt /etc/openvpn
Отидете в папката CA на сървърната машина и изпълнете следната команда, за да генерирате DH параметрите. Може да отнеме много време за генериране.
./easyrsa gen-dh
Сега преместете генерирания файл в /etc/openvpn
.
mv /root/cert_authority/pki/dh.pem /etc/openvpn
Генериране на TA ключове
OpenVPN използва друга допълнителна мярка за сигурност, използвайки TLS ключ за удостоверяване. За да генерирате TLS ключа за удостоверяване, изпълнете:
openvpn --genkey --secret tls_auth.key
И преместете ключа на /etc/openvpn
.
mv tls_auth.key /etc/openvpn
Конфигурирането на сървърния ключ и настройката на сертифициращия орган вече е завършено. Нека да преминем към действителната конфигурация на VPN сървъра сега.
Конфигурация на OpenVPN сървър
Конфигурационният файл за OpenVPN сървър не се създава автоматично, но можем да използваме шаблонен конфигурационен файл от openvpn
пакет.
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gzip -d /etc/openvpn/server.conf.gz
Отворете файла с помощта на vim или всеки редактор по ваш избор.
cd /etc/openvpn vim server.conf
Трябва да въведете общите имена на ключове и сертификати, които генерирахме по-рано. Отидете на ред №. 78. Тъй като използвахме всички имена по подразбиране, ги запазваме непроменени. След това проверете името на файла с DH параметри на ред 85. Използвахме името dh.pem, така че нека го променим.
След това нека променим привилегиите за OpenVPN сървър. Отидете на ред 274 и 275 и премахнете водещия ;
да го декоментирам.
По същия начин отидете на ред 192 и премахнете точката и запетаята. Тази директива позволява трафикът на всички клиенти да преминава през VPN.
Запазете и излезте от файла.
Променете собствеността на папката /etc/openvpn на root.
sudo chown -R корен: корен /etc/openvpn
Настройка на мрежа и защитна стена
Трябва да разрешим IP препращане на сървъра, за да позволим препращане на пакети от и към VPN клиента. Декоментирайте 28 ред /etc/sysctl.conf
:
Запазете и излезте от файла.
Рестартирам systemctl
за да се осъществят тези промени.
sudo sysctl -p
Трябва да настроим превод на мрежови адреси (NAT) на сървъра с помощта на UFW защитна стена, така че да позволим на VPN клиента достъп до Интернет, използвайки IP адреса на VPN сървъра. Първо, нека активираме препращането на пакети в конфигурацията на защитната стена. Отвори /etc/default/ufw
и променете променливата на ред 19 на ACCEPT.
Запазете и излезте от файла.
Сега добавете следните правила към файла /etc/ufw/before.rules
преди филтър ред във файла.
*nat :ПРАВИЛНО ПРИЕМАНЕ [0:0] -A ОТСТРАНЯВАНЕ -s 10.8.0.0/8 -o -j МАСКИРАНЕ НА ЗАДАВАНЕ
Въведете своя мрежов интерфейс на мястото на . Можете да видите вашия мрежов интерфейс с командата ifconfig
.
Разрешете трафик за услугата OpenVPN на защитната стена и разрешете порт 1194.
sudo ufw разреши openvpn && sudo ufw разреши 1194
Презаредете услугата защитна стена.
sudo ufw презареждане
Вече можем да рестартираме демона на Open VPN сървъра, като изпълним:
рестартиране на услугата sudo openvpn
Активирайте го да стартира при стартиране, като изпълните:
sudo systemctl активира openvpn
OpenVPN сървърът вече е конфигуриран и стартира. Нека сега да преминем към заявка за клиентски сертификат и генериране на ключ и друга конфигурация.
OpenVPN клиентска конфигурация
Трябва да генерираме ключ и заявка за сертификат за клиента. Процедурата за това е същата като тази за сървъра.
Въпреки че клиентският ключ и заявка за сертификат могат да бъдат създадени на клиентската машина и след това прехвърлени на CA машината, се препоръчва да се създаде на машината на сървъра. Предимството да правите това на сървъра е, че можете да създадете скрипт за изпълнение на всички необходими стъпки на сървъра, което улеснява присъединяването на нов клиент към VPN.
Отидете в папката CA на сървъра и изпълнете следното:
cd ~/cert_authority ./easyrsa gen-req клиент nopass
По подобен начин, както беше направено по-рано, въведете общо име, когато бъдете подканени, или го оставете празно, за да използвате общото име по подразбиране, т.е. клиент.
Нека сега копираме генерираната заявка за клиентски сертификат на CA машината.
scp pki/reqs/client.req [email protected]:/root
Нека импортираме тази заявка в CA машината:
./easyrsa import-req /root/client.req клиент
И нека сега да го подпишем:
./easyrsa sign-req клиентски клиент
Въведетеда
когато бъдете подканени да продължите. Въведете паролата за CA ключ, когато бъдете попитани.
Вече можем да премахнем искания файл за клиента и да копираме заявката обратно на машината на VPN сървъра.
rm /root/client.req scp pki/issued/client.crt [email protected]:/root
Нека създадем папка с име клиент
за да запазите всички файлове, свързани с клиента, на VPN сървъра. Ще преместим клиентския ключ и сертификата в тази папка.
mkdir ~/client sudo mv ~/client.crt ~/cert_authority/pki/private/client.key ~/client
Сега нека създадем конфигурационен файл от наличен шаблон, подобно на начина, по който създадохме конфигурационния файл на сървъра.
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client
Отворете файла client.conf
. На ред 42 въведете име на хост или IP адрес на вашата сървърна машина на мястото на моят сървър-1
.
Декоментирайте редове 61 и 62, като премахнете водещата точка и запетая, за да понижите привилегиите за файла.
След това коментирайте редове 88-90 и ред 108. Причината е, че искаме да добавим съдържанието на споменатите файлове ръчно, вместо да използваме местоположението на файловете. Целта на това е конфигурационният файл на клиента по-късно да бъде прехвърлен на клиента, където всъщност няма да имаме клиентски ключ и файлове със сертификат; следователно копираме съдържанието на тези в самия конфигурационен файл.
Добавете следното към конфигурационния файл на клиента. Въведете файловото съдържание на съответните файлове в дадените тагове.
# Поставете съдържанието на ca.crt файла тук # Поставете съдържанието на client.crt файла тук # Поставете съдържанието на client.key файла тук key-direction 1 # Поставете съдържанието на файла tls_auth.key тук
Запазете и излезте от файла. Преименувайте този файл от client.conf
да се client.ovpn
, тъй като последното е разширението, необходимо за конфигурационни файлове, които могат да бъдат импортирани като мрежови конфигурации.
Сега прехвърлете файла client.ovpn
към клиента, т.е. локална машина.
Бягай scp
на вашата клиентска машина, за да прехвърлите файл от сървърна машина към вашата локална машина.
scp user@server_ip:/пътя_до_файл локален_дестинационен път
И накрая, трябва да използваме този конфигурационен файл, за да се свържем с VPN сървъра. Това може да стане както чрез командния ред, така и чрез GUI.
За да стартирате VPN клиента от командния ред, изпълнете:
sudo openvpn --config client.ovpn
И това е единствената команда, която трябва да изпълните, за да стартирате VPN клиента.
За да стартирате VPN клиента чрез GUI, изпълнете следните стъпки.
Отидете на Настройки » Мрежа на вашата клиентска машина.
Кликнете върху + бутон в секцията VPN и изберете „Импортиране от файл...“ от опциите.
Кликнете върху „Добавяне“, за да започнете да използвате VPN.
Имайте предвид, че под „Gateway“ това е IP адресът на сървъра.
Накрая превключете бутона „клиентска VPN“, за да активирате VPN на машината.
Установяването на VPN връзка може да отнеме няколко секунди. Ново лого за напредък за VPN ще се появи в горния ляв ъгъл на екрана ви, докато се настройва, и ще се промени на VPN лого, след като бъде настроено.
За да проверите дали VPN работи правилно, изпълнете следното:
curl //ipinfo.io/ip
Той трябва да върне IP адреса на вашата сървърна машина. Или можете също да проверите своя IP адрес, като просто потърсите „Моят IP“ в Google. Той трябва да показва IP адреса на вашия VPN сървър, ако нашата VPN настройка работи правилно.
Заключение
В тази статия видяхме как да конфигурирате OpenVPN сървър, сертифициращ орган и OpenVPN клиент. За да добавим повече клиенти към VPN, сега трябва да следваме процедурата за генериране и подписване на сертификат за клиента и да използваме същия конфигурационен файл, създаден тук, като само клиентският ключ и стойностите на сертификата са променени.
В случай на по-бавни интернет връзки е възможно, ако UDP се използва за комуникация, да има значителна загуба на пакети. Потребителят може да премине към TCP, като декоментира реда прото tcp
и коментира линията прото udp
в конфигурационния файл на сървъра.
Освен това, в случай че има други грешки, можете да зададете ниво на регистриране с глагол
директива в конфигурационните файлове на сървъра и клиента. Можете да въведете стойности между 0 и 9. Колкото по-висока е стойността на тази директива, толкова по-подробен ще бъде дневникът.