Књига "Линукс у акцији"

Књига "Линукс у акцији" Здраво, становници Кхабро! У књизи, Дејвид Клинтон описује 12 пројеката из стварног живота, укључујући аутоматизацију вашег система резервних копија и опоравка, постављање облака личних датотека у стилу Дропбок-а и креирање сопственог МедиаВики сервера. Истражићете виртуелизацију, опоравак од катастрофе, безбедност, резервне копије, ДевОпс и решавање системских проблема кроз занимљиве студије случаја. Свако поглавље се завршава прегледом најбољих пракси, речником нових термина и вежбама.

Одломак „10.1. Креирање ОпенВПН тунела"

Већ сам много говорио о шифровању у овој књизи. ССХ и СЦП могу заштитити податке који се преносе преко удаљених веза (поглавље 3), шифровање датотека може заштитити податке док се чувају на серверу (поглавље 8), а ТЛС/ССЛ сертификати могу заштитити податке који се преносе између сајтова и клијентских претраживача (поглавље 9) . Али понекад ваши подаци морају бити заштићени на ширем спектру веза. На пример, можда неки од чланова вашег тима раде на путу док се повезују на Ви-Фи преко јавних приступних тачака. Дефинитивно не треба да претпоставите да су све такве приступне тачке безбедне, али вашим људима је потребан начин да се повежу са ресурсима компаније — и ту може помоћи ВПН.

Правилно дизајниран ВПН тунел обезбеђује директну везу између удаљених клијената и сервера на начин који скрива податке док путују преко несигурне мреже. Па шта? Већ сте видели многе алате који то могу да ураде помоћу шифровања. Права вредност ВПН-а је да отварањем тунела можете повезати удаљене мреже као да су све локалне. У извесном смислу, користите обилазницу.

Користећи ову проширену мрежу, администратори могу да обављају свој посао на својим серверима са било ког места. Али што је још важније, компанија са ресурсима распоређеним на више локација може их учинити видљивим и доступним свим групама којима су потребни, где год да се налазе (слика 10.1).

Сам тунел не гарантује сигурност. Али један од стандарда шифровања може бити укључен у структуру мреже, што значајно повећава ниво сигурности. Тунели креирани помоћу ОпенВПН пакета отвореног кода користе исту ТЛС/ССЛ енкрипцију о којој сте већ читали. ОпенВПН није једина доступна опција тунелирања, али је једна од најпознатијих. Сматра се да је нешто бржи и сигурнији од алтернативног протокола Лаиер 2 тунела који користи ИПсец енкрипцију.

Да ли желите да сви у вашем тиму безбедно комуницирају једни са другима док сте на путу или раде у различитим зградама? Да бисте то урадили, потребно је да креирате ОпенВПН сервер да бисте омогућили дељење апликација и приступ окружењу локалне мреже сервера. Да би ово функционисало, све што треба да урадите је да покренете две виртуелне машине или два контејнера: један да делује као сервер/хост и један да делује као клијент. Изградња ВПН-а није једноставан процес, тако да је вероватно вредно одвојити неколико минута да бисте добили ширу слику на уму.

Књига "Линукс у акцији"

10.1.1. Конфигурација ОпенВПН сервера

Пре него што почнете, даћу вам неколико корисних савета. Ако ћете то сами да урадите (и топло вам препоручујем), вероватно ћете се наћи да радите са више прозора терминала отвореним на радној површини, од којих је сваки повезан на другу машину. Постоји ризик да ћете у неком тренутку унети погрешну команду у прозор. Да бисте то избегли, можете да користите команду хостнаме да промените име машине приказано на командној линији у нешто што вам јасно говори где се налазите. Када то урадите, мораћете да се одјавите са сервера и поново се пријавите да би нова подешавања ступила на снагу. Овако то изгледа:

Књига "Линукс у акцији"
Пратећи овај приступ и дајући одговарајућа имена свакој од машина са којима радите, можете лако да пратите где се налазите.

Након коришћења имена хоста, можда ћете наићи на досадне поруке ОпенВПН-Сервер-а Немогуће је решити када извршавате следеће команде. Ажурирање датотеке /етц/хостс одговарајућим новим именом хоста требало би да реши проблем.

Припрема вашег сервера за ОпенВПН

Да бисте инсталирали ОпенВПН на ваш сервер, потребна су вам два пакета: опенвпн и еаси-рса (за управљање процесом генерисања кључева за шифровање). Корисници ЦентОС-а треба прво да инсталирају епел-релеасе спремиште ако је потребно, као што сте урадили у поглављу 2. Да бисте могли да тестирате приступ серверској апликацији, можете такође да инсталирате Апацхе веб сервер (апацхе2 на Убунту и хттпд на ЦентОС-у).

Док подешавате свој сервер, препоручујем да активирате заштитни зид који блокира све портове осим 22 (ССХ) и 1194 (подразумевани порт ОпенВПН-а). Овај пример илуструје како би уфв функционисао на Убунту-у, али сигуран сам да се још увек сећате програма ЦентОС фиреваллд из поглавља 9:

# ufw enable
# ufw allow 22
# ufw allow 1194

Да бисте омогућили интерно рутирање између мрежних интерфејса на серверу, потребно је да декоментирате један ред (нет.ипв4.ип_форвард = 1) у датотеци /етц/сисцтл.цонф. Ово ће омогућити да се удаљени клијенти преусмере по потреби када се повежу. Да би нова опција радила, покрените сисцтл -п:

# nano /etc/sysctl.conf
# sysctl -p

Ваше серверско окружење је сада потпуно конфигурисано, али још једна ствар коју треба да урадите пре него што будете спремни: мораћете да довршите следеће кораке (у наставку ћемо их детаљно обрадити).

  1. Креирајте скуп кључева за шифровање инфраструктуре јавних кључева (ПКИ) на серверу користећи скрипте које сте добили са еаси-рса пакетом. У суштини, ОпенВПН сервер такође делује као сопствени ауторитет сертификата (ЦА).
  2. Припремите одговарајуће кључеве за клијента
  3. Конфигуришите сервер.цонф датотеку за сервер
  4. Подесите свој ОпенВПН клијент
  5. Проверите свој ВПН

Генерисање кључева за шифровање

Да ствари буду једноставне, можете да подесите кључну инфраструктуру на истој машини на којој ради ОпенВПН сервер. Међутим, најбоље безбедносне праксе обично предлажу коришћење засебног ЦА сервера за примену у производњи. Процес генерисања и дистрибуције ресурса кључева за шифровање за употребу у ОпенВПН-у је илустрован на Сл. 10.2.

Књига "Линукс у акцији"
Када сте инсталирали ОпенВПН, директоријум /етц/опенвпн/ је аутоматски креиран, али у њему још нема ничега. Пакети опенвпн и еаси-рса долазе са примерима датотека шаблона које можете користити као основу за своју конфигурацију. Да бисте започели процес сертификације, копирајте директоријум еаси-рса шаблона из /уср/схаре/ у /етц/опенвпн и промените у директоријум еаси-рса/:

# cp -r /usr/share/easy-rsa/ /etc/openvpn
$ cd /etc/openvpn/easy-rsa

Еаси-рса директоријум ће сада садржати доста скрипти. У табели 10.1 наводи алатке које ћете користити за креирање кључева.

Књига "Линукс у акцији"

Горе наведене операције захтевају роот привилегије, тако да морате да постанете роот преко судо су.

Прва датотека са којом ћете радити зове се варс и садржи променљиве окружења које еаси-рса користи приликом генерисања кључева. Морате да уредите датотеку да бисте користили сопствене вредности уместо подразумеваних вредности које су већ тамо. Овако ће изгледати мој фајл (листинг 10.1).

Листинг 10.1. Главни фрагменти датотеке /етц/опенвпн/еаси-рса/варс

export KEY_COUNTRY="CA"
export KEY_PROVINCE="ON"
export KEY_CITY="Toronto"
export KEY_ORG="Bootstrap IT"
export KEY_EMAIL="[email protected]"
export KEY_OU="IT"

Покретање датотеке варс ће пренети њене вредности у окружење љуске, где ће бити укључене у садржај ваших нових кључева. Зашто наредба судо сама по себи не ради? Зато што у првом кораку уређујемо скрипту под називом варс и затим је примењујемо. Примена и значи да датотека варс преноси своје вредности у окружење љуске, где ће бити укључене у садржај ваших нових кључева.

Обавезно поново покрените датотеку користећи нову шкољку да бисте довршили недовршени процес. Када се ово уради, скрипта ће од вас затражити да покренете другу скрипту, чисту све, да бисте уклонили било који садржај у директоријуму /етц/опенвпн/еаси-рса/кеис/:

Књига "Линукс у акцији"
Наравно, следећи корак је покретање скрипте цлеан-алл, а затим буилд-ца, која користи пкитоол скрипту за креирање роот сертификата. Од вас ће бити затражено да потврдите подешавања идентитета које обезбеђује варс:

# ./clean-all
# ./build-ca
Generating a 2048 bit RSA private key

Следеће долази скрипта буилд-кеи-сервер. Пошто користи исту пкитоол скрипту заједно са новим роот сертификатом, видећете иста питања да потврдите креирање пара кључева. Кључеви ће бити именовани на основу аргумената које проследите, а који ће, осим ако не користите више ВПН-ова на овој машини, обично бити сервер, као у примеру:

# ./build-key-server server
[...]
Certificate is to be certified until Aug 15 23:52:34 2027 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

ОпенВПН користи параметре генерисане Диффие-Хеллман алгоритмом (користећи буилд-дх) за преговарање о аутентификацији за нове везе. Датотека креирана овде не мора бити тајна, али мора бити генерисана помоћу буилд-дх скрипте за РСА кључеве који су тренутно активни. Ако у будућности креирате нове РСА кључеве, такође ћете морати да ажурирате Диффие-Хеллман датотеку:

# ./build-dh

Ваши кључеви на страни сервера ће сада завршити у директоријуму /етц/опенвпн/еаси-рса/кеис/, али ОпенВПН то не зна. ОпенВПН ће подразумевано тражити кључеве у /етц/опенвпн/, па их копирајте:

# cp /etc/openvpn/easy-rsa/keys/server* /etc/openvpn
# cp /etc/openvpn/easy-rsa/keys/dh2048.pem /etc/openvpn
# cp /etc/openvpn/easy-rsa/keys/ca.crt /etc/openvpn

Припрема кључева за шифровање клијента

Као што сте већ видели, ТЛС шифровање користи парове одговарајућих кључева: један инсталиран на серверу и један на удаљеном клијенту. То значи да ће вам требати клијентски кључеви. Наш стари пријатељ пкитоол је управо оно што вам треба за ово. У овом примеру, када покренемо програм у директоријуму /етц/опенвпн/еаси-рса/, прослеђујемо му аргумент клијента да генеришемо датотеке под називом цлиент.црт и цлиент.кеи:

# ./pkitool client

Две клијентске датотеке, заједно са оригиналном ца.црт датотеком која се још увек налази у директоријуму кеис/, сада би требало да се безбедно пренесу на вашег клијента. Због њиховог власништва и права приступа, ово можда неће бити тако лако. Најједноставнији приступ је да ручно копирате садржај изворне датотеке (и ништа осим тог садржаја) у терминал који ради на радној површини вашег рачунара (одаберите текст, кликните десним тастером миша на њега и изаберите Копирај из менија). Затим налепите ово у нову датотеку са истим именом коју креирате у другом терминалу повезаном са вашим клијентом.

Али свако може да исече и залепи. Уместо тога, размишљајте као администратор јер нећете увек имати приступ ГУИ где су операције исецања/лепљења могуће. Копирајте датотеке у кућни директоријум вашег корисника (тако да им удаљена сцп операција може приступити), а затим користите цховн да промените власништво над датотекама са роот на обичног корисника који није роот тако да се може извршити удаљена сцп радња. Уверите се да су све ваше датотеке тренутно инсталиране и доступне. Преместићете их на клијента мало касније:

# cp /etc/openvpn/easy-rsa/keys/client.key /home/ubuntu/
# cp /etc/openvpn/easy-rsa/keys/ca.crt /home/ubuntu/
# cp /etc/openvpn/easy-rsa/keys/client.crt /home/ubuntu/
# chown ubuntu:ubuntu /home/ubuntu/client.key
# chown ubuntu:ubuntu /home/ubuntu/client.crt
# chown ubuntu:ubuntu /home/ubuntu/ca.crt

Са пуним скупом кључева за шифровање спремних за рад, морате да кажете серверу како желите да креирате ВПН. Ово се ради помоћу датотеке сервер.цонф.

Смањење броја притисака на тастере

Има ли превише куцања? Проширење са заградама ће помоћи да се ових шест команди смањи на две. Сигуран сам да можете проучити ова два примера и разумети шта се дешава. Што је још важније, моћи ћете да разумете како да примените ове принципе на операције које укључују десетине или чак стотине елемената:

# cp /etc/openvpn/easy-rsa/keys/{ca.crt,client.{key,crt}} /home/ubuntu/
# chown ubuntu:ubuntu /home/ubuntu/{ca.crt,client.{key,crt}}

Подешавање датотеке сервер.цонф

Како можете знати како треба да изгледа датотека сервер.цонф? Сећате се шаблона директоријума еаси-рса који сте копирали са /уср/схаре/? Када сте инсталирали ОпенВПН, остала вам је компримована датотека шаблона конфигурације коју можете копирати у /етц/опенвпн/. Надоградићу се на чињеници да је шаблон архивиран и упознаћу вас са корисним алатом: зцат.

Већ знате о штампању текстуалног садржаја датотеке на екрану помоћу команде цат, али шта ако се датотека компримује помоћу гзип-а? Увек можете распаковати датотеку и мачка ће је са задовољством избацити, али то је један или два корака више него што је потребно. Уместо тога, као што сте можда претпоставили, можете издати команду зцат за учитавање распакованог текста у меморију у једном кораку. У следећем примеру, уместо да штампате текст на екрану, преусмерите га на нову датотеку под називом сервер.цонф:

# zcat 
  /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz 
  > /etc/openvpn/server.conf
$ cd /etc/openvpn

Оставимо по страни обимну и корисну документацију која долази уз датотеку и видимо како би она могла изгледати када завршите са уређивањем. Имајте на уму да тачка и зарез (;) говори ОпенВПН-у да не чита или не извршава следећи ред (листинг 10.2).

Књига "Линукс у акцији"
Хајде да прођемо кроз нека од ових подешавања.

  • ОпенВПН подразумевано ради на порту 1194. Ово можете променити, на пример, да бисте додатно сакрили своје активности или избегли сукобе са другим активним тунелима. Пошто 1194 захтева минималну координацију са клијентима, најбоље је то урадити на овај начин.
  • ОпенВПН користи или протокол за контролу преноса (ТЦП) или протокол корисничких датаграма (УДП) за пренос података. ТЦП је можда мало спорији, али је поузданији и већа је вероватноћа да ће га разумети апликације које раде на оба краја тунела.
  • Можете одредити дев тун када желите да креирате једноставнији, ефикаснији ИП тунел који носи садржај података и ништа друго. Ако, с друге стране, треба да повежете више мрежних интерфејса (и мрежа које они представљају), стварајући Етхернет мост, мораћете да изаберете дев тап. Ако не разумете шта све ово значи, употребите аргумент тун.
  • Следећа четири реда дају ОпенВПН-у имена три датотеке за аутентификацију на серверу и дх2048 датотеке са опцијама коју сте раније креирали.
  • Линија сервера поставља опсег и маску подмреже која ће се користити за додељивање ИП адреса клијентима након пријављивања.
  • Опциони пусх параметар „роуте 10.0.3.0 255.255.255.0“ омогућава удаљеним клијентима да приступе приватним подмрежама иза сервера. Да би ово функционисало, потребно је и подешавање мреже на самом серверу тако да приватна подмрежа зна за ОпенВПН подмрежу (10.8.0.0).
  • Порт-схаре лоцалхост 80 линија вам омогућава да преусмерите клијентски саобраћај који долази на порт 1194 на локални веб сервер који слуша на порту 80. (Ово ће бити корисно ако ћете користити веб сервер за тестирање вашег ВПН-а.) Ово само функционише. онда када је изабран тцп протокол.
  • Линије корисника нико и групе ногрупа морају бити омогућене уклањањем тачака и зареза (;). Присиљавање удаљених клијената да раде као нико и ногроуп осигурава да сесије на серверу нису привилеговане.
  • лог наводи да ће тренутни уноси дневника заменити старе уносе сваки пут када се ОпенВПН покрене, док лог-аппенд додаје нове уносе постојећој датотеци евиденције. Сама датотека опенвпн.лог је уписана у /етц/опенвпн/ директоријум.

Поред тога, вредност клијент-клијент се такође често додаје у конфигурациону датотеку тако да више клијената може да види једни друге поред ОпенВПН сервера. Ако сте задовољни својом конфигурацијом, можете покренути ОпенВПН сервер:

# systemctl start openvpn

Због промене природе односа између ОпенВПН-а и системд-а, следећа синтакса може понекад бити потребна за покретање услуге: системцтл старт опенвпн@сервер.

Покретање ип аддр-а за листање мрежних интерфејса вашег сервера сада би требало да избаци везу ка новом интерфејсу који се зове тун0. ОпенВПН ће га креирати да служи долазним клијентима:

$ ip addr
[...]
4: tun0: mtu 1500 qdisc [...]
      link/none
      inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
          valid_lft forever preferred_lft forever

Можда ћете морати да поново покренете сервер пре него што све почне да ради у потпуности. Следећа станица је клијентски рачунар.

10.1.2. Конфигурисање ОпенВПН клијента

Традиционално, тунели се граде са најмање два излаза (иначе бисмо их назвали пећинама). Правилно конфигурисан ОпенВПН на серверу усмерава саобраћај у и из тунела на једној страни. Али биће вам потребан и софтвер који ради на страни клијента, односно на другом крају тунела.

У овом одељку, фокусираћу се на ручно подешавање неке врсте Линук рачунара да делује као ОпенВПН клијент. Али ово није једини начин на који је ова прилика доступна. ОпенВПН подржава клијентске апликације које се могу инсталирати и користити на десктоп и лаптоп рачунарима који користе Виндовс или мацОС, као и на Андроид и иОС паметним телефонима и таблетима. За детаље погледајте опенвпн.нет.

ОпенВПН пакет ће морати да се инсталира на клијентској машини као што је инсталиран на серверу, иако овде нема потребе за еаси-рса пошто кључеви које користите већ постоје. Морате да копирате датотеку шаблона цлиент.цонф у директоријум /етц/опенвпн/ који сте управо креирали. Овог пута датотека неће бити зипована, тако да ће редовна цп команда сасвим добро обавити посао:

# apt install openvpn
# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf 
  /etc/openvpn/

Већина подешавања у вашој датотеци цлиент.цонф биће прилично разумљива: требало би да се подударају са вредностима на серверу. Као што можете видети из следећег примера датотеке, јединствени параметар је удаљени 192.168.1.23 1194, који клијенту говори ИП адресу сервера. Опет, проверите да ли је ово адреса вашег сервера. Такође би требало да натерате клијентски рачунар да провери аутентичност сертификата сервера да бисте спречили могући напад човека у средини. Један од начина да то урадите је додавање линије сервера ремоте-церт-тлс (листинг 10.3).

Књига "Линукс у акцији"
Сада можете да одете у директоријум /етц/опенвпн/ и извучете сертификационе кључеве са сервера. Замените ИП адресу сервера или име домена у примеру вашим вредностима:

Књига "Линукс у акцији"
Ништа узбудљиво се вероватно неће догодити док не покренете ОпенВПН на клијенту. Пошто морате да проследите неколико аргумената, то ћете урадити из командне линије. Аргумент --тлс-цлиент говори ОпенВПН-у да ћете се понашати као клијент и повезати се преко ТЛС шифровања, а --цонфиг указује на вашу конфигурациону датотеку:

# openvpn --tls-client --config /etc/openvpn/client.conf

Пажљиво прочитајте излаз команде да бисте били сигурни да сте исправно повезани. Ако нешто крене наопако први пут, то може бити због неусклађености поставки између конфигурационих датотека сервера и клијента или проблема са мрежном везом/заштитним зидом. Ево неколико савета за решавање проблема.

  • Пажљиво прочитајте излаз ОпенВПН операције на клијенту. Често садржи драгоцене савете о томе шта се тачно не може учинити и зашто.
  • Проверите поруке о грешци у датотекама опенвпн.лог и опенвпн-статус.лог у директоријуму /етц/опенвпн/ на серверу.
  • Проверите системске евиденције на серверу и клијенту за поруке које се односе на ОпенВПН и временски ограничене. (јоурналцтл -це ће приказати најновије уносе.)
  • Уверите се да имате активну мрежну везу између сервера и клијента (више о томе у поглављу 14).

О аутору

Давид Цлинтон - систем администратор, наставник и писац. Он је администрирао, писао и креирао образовне материјале за многе важне техничке дисциплине, укључујући Линук системе, рачунарство у облаку (посебно АВС) и технологије контејнера као што је Доцкер. Написао је књигу Леарн Амазон Веб Сервицес ин а Монтх оф Рунцхес (Маннинг, 2017). Многи од његових видео курсева за обуку могу се наћи на Плуралсигхт.цом, а везе до његових других књига (о администрацији Линука и виртуелизацији сервера) доступне су на боотстрап-ит.цом.

» Више детаља о књизи можете пронаћи на веб-сајт издавача
» Преглед садржаја
» Извод

За Кхаброзхителеи 25% попуста користећи купон - линук
По уплати папирне верзије књиге, електронска књига ће бити послата на е-маил.

Извор: ввв.хабр.цом

Додај коментар