Linux in Action liburua

Linux in Action liburua Kaixo, Khabro bizilagunak! Liburuan, David Clintonek bizitza errealeko 12 proiektu deskribatzen ditu, besteak beste, zure babeskopia eta berreskuratze sistema automatizatzea, Dropbox estiloko fitxategi pertsonalen hodeia konfiguratzea eta zure MediaWiki zerbitzaria sortzea. Birtualizazioa, hondamendien berreskurapena, segurtasuna, babeskopia, DevOps eta sistemaren arazoen konponketa aztertuko dituzu kasu praktiko interesgarrien bidez. Kapitulu bakoitza praktika onen berrikuspena, termino berrien glosarioa eta ariketak egiten amaitzen da.

“10.1. OpenVPN tunel bat sortzea"

В этой книге я уже немало рассказал о шифровании. SSH и SCP могут защитить данные, передаваемые через удаленные соединения (глава 3), шифрование файлов позволяет защитить данные при хранении на сервере (глава 8), а сертификаты TLS/SSL способны защитить данные при передаче между сайтами и клиентскими браузерами (глава 9). Но иногда ваши данные требуют защиты в более широком спектре соединений. Например, возможно, некоторым членам вашей команды приходится работать в дороге, подключаясь к сети по Wi-Fi через общедоступные точки доступа. Определенно не стоит полагать, что все такие точки доступа безопасны, но вашим людям действительно нужен способ подключения к ресурсам компании — и в этом случае поможет VPN.

Правильно спроектированный VPN-туннель обеспечивает прямое соединение между удаленными клиентами и сервером таким образом, чтобы скрывать данные при их передаче по небезопасной сети. Ну и что? Вы уже видели много инструментов, которые могут сделать это с помощью шифрования. Реальная ценность VPN состоит в том, что, открыв туннель, можно подключать удаленные сети, как если бы они были все вместе локальными. В некотором смысле вы используете обход.

Sare hedatu hau erabiliz, administratzaileek beren lana zerbitzarietan egin dezakete edonondik. Baina are garrantzitsuagoa dena, hainbat kokapenetan banatutako baliabideak dituen enpresa batek horiek guztiak ikusgai eta eskuragarri izan ditzake behar dituzten talde guztientzat, edozein lekutan dauden (10.1. irudia).

Сам по себе туннель не гарантирует безопасность. Но один из стандартов шифрования может быть включен в структуру сети, что существенно повышает уровень безопасности. Туннели, созданные с применением пакета OpenVPN с открытым исходным кодом, используют то же шифрование TLS/SSL, о котором вы уже читали. OpenVPN не единственный доступный вариант для туннелирования, но один из самых известных. Считается, что он немного быстрее и безопаснее, чем альтернативный туннельный протокол уровня 2, использующий шифрование IPsec.

Вы хотите, чтобы в вашей команде все безопасно общались друг с другом, находясь в дороге или работая в разных зданиях? Для этого необходимо создать сервер OpenVPN, чтобы разрешить совместное использование приложений и доступ к локальной сетевой среде сервера. Чтобы это работало, достаточно запустить две виртуальные машины или два контейнера: одну для выполнения роли сервера/хоста, а другую — для клиента. Создание VPN — непростой процесс, поэтому, вероятно, стоит потратить несколько минут на то, чтобы представить себе общую картину.

Linux in Action liburua

10.1.1. OpenVPN zerbitzariaren konfigurazioa

Hasi baino lehen, aholku lagungarri batzuk emango dizkizut. Zuk zeuk egingo baduzu (eta gomendatzen dizut), ziurrenik zure mahaigainean hainbat terminal-leiho irekita lan egiten aurkituko duzu, bakoitza makina ezberdin batera konektatuta. Uneren batean leihoan komando okerra sartzeko arriskua dago. Hori ekiditeko, hostname komandoa erabil dezakezu komando lerroan bistaratzen den makinaren izena non zauden argi eta garbi esaten dizun zerbaitetara aldatzeko. Hori egin ondoren, zerbitzarian saioa amaitu eta berriro hasi beharko duzu ezarpen berriak indarrean egon daitezen. Honela dirudi:

Linux in Action liburua
Придерживаясь этого подхода и присваивая соответствующие имена каждой из машин, с которыми вы работаете, вы сможете легко отслеживать, где находитесь.

Ostalari-izena erabili ondoren, Ostalari OpenVPN-Zerbitzaria Ebazteko Ezinezko mezu gogaikarriak aurki ditzakezu ondorengo komandoak exekutatzen dituzunean. /etc/hosts fitxategia ostalari-izen berri egokiarekin eguneratzeak arazoa konpondu beharko luke.

Подготовка вашего сервера для OpenVPN

OpenVPN zure zerbitzarian instalatzeko, bi pakete behar dituzu: openvpn eta easy-rsa (zifratze-gakoa sortzeko prozesua kudeatzeko). CentOS erabiltzaileek epel-release biltegia instalatu beharko lukete behar izanez gero, 2. kapituluan egin zenuen bezala. Zerbitzariaren aplikaziorako sarbidea probatu ahal izateko, Apache web zerbitzaria ere instala dezakezu (apache2 Ubuntun eta httpd CentOSen).

Zerbitzaria konfiguratzen ari zaren bitartean, 22 (SSH) eta 1194 (OpenVPN-ren ataka lehenetsia) izan ezik, ataka guztiak blokeatzen dituen suebaki bat aktibatzea gomendatzen dut. Adibide honek ufw-ek Ubuntun nola funtzionatuko lukeen erakusten du, baina ziur nago oraindik gogoratzen duzula CentOS firewalld programa 9. kapituluko:

# ufw enable
# ufw allow 22
# ufw allow 1194

Zerbitzariko sare-interfazeen arteko barne bideratzea gaitzeko, lerro bat kendu behar duzu (net.ipv4.ip_forward = 1) /etc/sysctl.conf fitxategian. Honi esker, urruneko bezeroak behar bezala birbideratu ahal izango dira konektatuta daudenean. Aukera berriak funtziona dezan, exekutatu sysctl -p:

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

Теперь серверная среда полностью настроена, но нужно сделать еще кое-что, прежде чем вы будете готовы: придется выполнить следующие шаги (мы подробно рассмотрим их далее).

  1. Создайте на сервере набор ключей для шифрования инфраструктуры открытых ключей (PKI) с помощью сценариев, поставляемых с пакетом easy-rsa. По сути, сервер OpenVPN также действует как собственный центр сертификации (ЦС).
  2. Подготовьте соответствующие ключи для клиента
  3. Сконфигурируйте файл server.conf для сервера
  4. Konfiguratu zure OpenVPN bezeroa
  5. Egiaztatu zure VPN

Генерирование ключей шифрования

Gauza errazak mantentzeko, zure gako azpiegitura konfigura dezakezu OpenVPN zerbitzaria exekutatzen ari den makina berean. Hala ere, segurtasun-jardunbide egokiek normalean CA zerbitzari bereizi bat erabiltzea proposatzen dute ekoizpen-inplementazioetarako. OpenVPNn erabiltzeko enkriptazio-gako baliabideak sortzeko eta banatzeko prozesua irudikatuta dago. 10.2.

Linux in Action liburua
OpenVPN instalatu zenuenean, /etc/openvpn/ direktorioa automatikoki sortu zen, baina oraindik ez dago ezer. Openvpn eta easy-rsa paketeek zure konfiguraziorako oinarri gisa erabil ditzakezun txantiloi-fitxategi adibideekin datoz. Ziurtagiri-prozesua hasteko, kopiatu easy-rsa txantiloiaren direktorioa /usr/share/-tik /etc/openvpn-era eta aldatu easy-rsa/ direktoriora:

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

Каталог easy-rsa теперь будет содержать довольно много сценариев. В табл. 10.1 перечислены инструменты, которые вы будете использовать для создания ключей.

Linux in Action liburua

Goiko operazioek root pribilegioak behar dituzte, beraz sudo su bidez root bihurtu behar duzu.

Первый файл, с которым вы будете работать, называется vars и содержит переменные окружения, которые easy-rsa использует при генерации ключей. Вам нужно отредактировать файл, чтобы использовать собственные значения вместо значений по умолчанию, которые уже есть. Вот как будет выглядеть мой файл (листинг 10.1).

Zerrenda 10.1. /etc/openvpn/easy-rsa/vars fitxategiaren zati nagusiak

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"

Запуск файла vars позволит передать его значения в среду оболочки, откуда они будут включены в содержимое ваших новых ключей. Почему команда sudo сама по себе не работает? Потому что на первом этапе мы редактируем сценарий с именем vars, а затем применяем его. Применение и означает, что файл vars передает свои значения в среду оболочки, откуда они будут включены в содержимое ваших новых ключей.

Ziurtatu fitxategia berriro exekutatzen duzula shell berri bat erabiliz amaitu gabeko prozesua amaitzeko. Hori amaitutakoan, scriptak beste script bat exekutatzeko eskatuko dizu, clean-all, /etc/openvpn/easy-rsa/keys/ direktorioko edukia kentzeko:

Linux in Action liburua
Естественно, следующим шагом будет запуск сценария clean-all, за которым следует build-ca, который использует сценарий pkitool для создания корневого сертификата. Вас попросят подтвердить настройки идентификации, предоставленные vars:

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

Далее идет скрипт build-key-server. Поскольку он использует тот же сценарий pkitool вместе с новым корневым сертификатом, вы увидите те же вопросы для подтверждения создания пары ключей. Ключам будут присвоены имена на основе передаваемых вами аргументов, которые, если только вы не запускаете несколько VPN на этом компьютере, обычно будут server, как в примере:

# ./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

OpenVPN-k Diffie-Hellman algoritmoak (build-dh erabiliz) sortutako parametroak erabiltzen ditu konexio berrietarako autentifikazioa negoziatzeko. Hemen sortutako fitxategiak ez du sekretua izan behar, baina une honetan aktibo dauden RSA gakoetarako build-dh script-a erabiliz sortu behar da. Etorkizunean RSA gako berriak sortzen badituzu, Diffie-Hellman fitxategia ere eguneratu beharko duzu:

# ./build-dh

Ваши ключи на стороне сервера теперь попадут в каталог /etc/openvpn/easy-rsa/keys/, но OpenVPN этого не знает. По умолчанию OpenVPN будет искать ключи в /etc/openvpn/, поэтому скопируйте их:

# 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

Bezeroaren enkriptazio-gakoak prestatzea

Как вы уже видели, в TLS-шифровании используются пары соответствующих ключей: один установлен на сервере, а другой — на удаленном клиенте. Это означает, что вам понадобятся ключи клиента. Наш старый друг pkitool — именно то, что нужно для этого. В данном примере, запуская программу в каталоге /etc/openvpn/easy-rsa/, мы передаем ей аргумент client для генерации файлов под названием client.crt и client.key:

# ./pkitool client

Два клиентских файла вместе с исходным файлом ca.crt, который все еще находится в каталоге keys/, теперь должны быть безопасно переданы вашему клиенту. Из-за их принадлежности и прав доступа это может оказаться не таким легким делом. Самый простой подход — вручную скопировать содержимое исходного файла (и ничего, кроме этого содержимого) в терминал, работающий на Рабочем столе вашего ПК (выделите текст, щелкните на нем правой кнопкой мыши и выберите в меню пункт Copy (Копировать)). Затем вставьте это в новый файл с тем же именем, которое вы создаете во втором терминале, подключенном к вашему клиенту.

Но ведь любой может вырезать и вставить. Вы же вместо этого думайте как администратор, потому что у вас не всегда будет доступ к GUI, где возможна операция вырезания/вставки. Скопируйте файлы в домашний каталог вашего пользователя (чтобы удаленная операция scp могла получить к ним доступ), а затем с помощью chown измените владельца файлов с root на обычного пользователя без полномочий root, чтобы можно было выполнить удаленное действие scp. Убедитесь, что все ваши файлы на данный момент установлены и доступны. На клиент вы переместите их чуть позже:

# 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

Zifratze-gakoen multzo osoa erabiltzeko prest dagoenez, zerbitzariari VPN nola sortu nahi duzun esan behar diozu. Server.conf fitxategia erabiliz egiten da.

Teklatu kopurua murriztea

Gehiegi idazten al da? Parentesiekin zabaltzeak sei komando hauek bitara murrizten lagunduko du. Ziur bi adibide hauek aztertu ahal izango dituzula eta zer gertatzen ari den ulertu. Are garrantzitsuagoa dena, printzipio hauek hamarnaka edo ehunka elementu inplikatzen dituzten eragiketetan nola aplikatu ulertuko duzu:

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

Настройка файла server.conf

Nola jakin dezakezu server.conf fitxategiak nolakoa izan behar duen? Gogoratu /usr/share/?-tik kopiatu duzun easy-rsa direktorioa txantiloia OpenVPN instalatu zenuenean, /etc/openvpn/-ra kopia dezakezun konfigurazio-txantiloi-fitxategi bat geratu zitzaizun. Txantiloia artxibatuta dagoela oinarrituko dut eta tresna erabilgarria aurkeztuko dizut: zcat.

Вы уже знаете о выводе текстового содержимого файла на экран с помощью команды cat, но что, если файл сжат с помощью gzip? Вы всегда можете распаковать файл, и тогда cat с удовольствием его выведет, но это на один или два шага больше, чем нужно. Вместо этого, как вы уже, наверное, догадались, можно ввести команду zcat для загрузки распакованного текста в память за один шаг. В следующем примере вместо того, чтобы печатать текст на экране, вы перенаправите его в новый файл с именем server.conf:

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

Utz dezagun fitxategiarekin batera datorren dokumentazio zabala eta lagungarria albo batera eta ikus dezagun nolakoa izan daitekeen editatzen amaitzean. Kontuan izan puntu eta komak (;) OpenVPNri hurrengo lerroa ez irakurtzeko edo ez exekutatzeko esaten diola (10.2 zerrenda).

Linux in Action liburua
Ikus ditzagun ezarpen horietako batzuk.

  • По умолчанию OpenVPN работает через порт 1194. Вы можете изменить это, например, чтобы еще больше скрыть свои действия или избежать конфликтов с другими активными туннелями. Поскольку 1194 требует минимальной координации с клиентами, лучше всего сделать именно так.
  • OpenVPN применяет для передачи данных либо протокол управления передачей (TCP), либо протокол пользовательских датаграмм (UDP). TCP может быть немного медленнее, но он более надежен и с большей вероятностью понятен приложениям, работающим на обоих концах туннеля.
  • Вы можете указать dev tun, когда хотите создать более простой и эффективный IP-туннель, который передает содержимое данных и ничего больше. Если, с другой стороны, вам потребуется подключить несколько сетевых интерфейсов (и сетей, которые они представляют), создав мост Ethernet, то придется выбрать dev tap. Если вы не понимаете, что все это значит, используйте аргумент tun.
  • Следующие четыре строки передают OpenVPN имена трех файлов аутентификации на сервере и файл параметров dh2048, который вы создали ранее.
  • Строка server устанавливает диапазон и маску подсети, которые будут использоваться для присваивания IP-адресов клиентам при входе в систему.
  • Aukerako push parametroak "route 10.0.3.0 255.255.255.0" urruneko bezeroei zerbitzariaren atzean dauden azpisare pribatuetara sartzeko aukera ematen die. Lan hau egiteko, sarea zerbitzarian bertan konfiguratzea ere eskatzen du, azpisare pribatuak OpenVPN azpisarearen berri izan dezan (10.8.0.0).
  • Строка port-share localhost 80 позволяет перенаправлять клиентский трафик, поступающий через порт 1194, на локальный веб-сервер, прослушивающий порт 80. (Будет полезно в том случае, если вы собираетесь задействовать веб-сервер для тестирования вашей VPN.) Это работает только тогда, когда выбран протокол tcp.
  • Erabiltzaile nobody eta group nogroup lerroak aktibatu behar dira puntu eta komak (;) kenduz. Urruneko bezeroak nobody eta nogroup moduan exekutatzeko behartzeak zerbitzariko saioak pribilegiorik gabekoak direla ziurtatzen du.
  • log-ek zehazten du uneko erregistroko sarrerek sarrera zaharrak gainidatziko dituztela OpenVPN abiarazten den bakoitzean, log-append-ek, berriz, lehendik dagoen erregistro-fitxategiari sarrera berriak eransten dizkio. openvpn.log fitxategia bera /etc/openvpn/ direktorioan idazten da.

Gainera, bezero-bezero-balio bat ere gehitzen da sarritan konfigurazio-fitxategian, bezero anitzek elkar ikus dezaten OpenVPN zerbitzariaz gain. Zure konfigurazioarekin pozik bazaude, OpenVPN zerbitzaria abi dezakezu:

# systemctl start openvpn

OpenVPN eta systemd-ren arteko harremanaren izaera aldakorra dela eta, zerbitzu bat abiarazteko sintaxi hau behar da batzuetan: systemctl start openvpn@server.

Запуск ip addr для отображения списка сетевых интерфейсов вашего сервера теперь должен вывести ссылку на новый интерфейс с именем tun0. OpenVPN создаст его для обслуживания входящих клиентов:

$ 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

Baliteke zerbitzaria berrabiarazi behar izatea dena guztiz funtzionatzen hasi aurretik. Hurrengo geltokia bezeroaren ordenagailua da.

10.1.2. Конфигурирование клиента OpenVPN

Tradizionalki, tunelak gutxienez bi irteerarekin eraikitzen dira (bestela kobazuloak deituko genituzke). Zerbitzarian behar bezala konfiguratutako OpenVPN batek trafikoa bideratzen du tuneletik kanpo eta alde batetik. Baina bezero aldean exekutatzen den softwareren bat ere beharko duzu, hau da, tunelaren beste muturrean.

Atal honetan, OpenVPN bezero gisa jarduteko Linux ordenagailu motaren bat eskuz konfiguratzera bideratuko naiz. Baina hau ez da aukera hau eskuragarri dagoen modu bakarra. OpenVPN-k Windows edo macOS exekutatzen dituzten ordenagailuetan eta ordenagailu eramangarrietan instalatu eta erabil daitezkeen bezero-aplikazioak onartzen ditu, baita Android eta iOS telefono eta tabletetan ere. Ikusi openvpn.net xehetasunetarako.

OpenVPN paketea bezero-makinan instalatu beharko da zerbitzarian instalatu zen bezala, nahiz eta hemen ez den easy-rsa-ren beharrik erabiltzen ari zaren gakoak dagoeneko existitzen direnez. Client.conf txantiloi fitxategia sortu berri duzun /etc/openvpn/ direktoriora kopiatu behar duzu. Oraingoan fitxategia ez da konprimituko, beraz, cp komando arruntak ondo egingo du lana:

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

Большинство настроек в вашем файле client.conf будут довольно понятными: они должны соответствовать значениям на сервере. Как видно из следующего примера файла, уникальным параметром является remote 192.168.1.23 1194, который указывает клиенту IP-адрес сервера. Опять же убедитесь, что это адрес вашего сервера. Вы также должны заставить компьютер клиента проверять подлинность сертификата сервера, чтобы предотвратить возможную атаку «человек посередине». Один из способов сделать это — добавить строку remote-cert-tls server (листинг 10.3).

Linux in Action liburua
Orain /etc/openvpn/ direktoriora joan zaitezke eta zerbitzaritik ziurtagiri-gakoak atera ditzakezu. Ordeztu adibideko zerbitzariaren IP helbidea edo domeinu-izena zure balioekin:

Linux in Action liburua
Ez da ezer zirraragarririk gertatuko bezeroan OpenVPN exekutatu arte. Argumentu pare bat pasatu behar dituzunez, komando lerrotik egingo duzu. --tls-client argumentuak OpenVPNri bezero gisa jardungo zarela eta TLS enkriptazio bidez konektatuko zarela esaten dio, eta --config-ek zure konfigurazio fitxategira seinalatzen du:

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

Irakurri arretaz komandoaren irteera behar bezala konektatuta zaudela ziurtatzeko. Lehen aldian zerbait gaizki ateratzen bada, zerbitzariaren eta bezeroaren konfigurazio-fitxategien arteko ezarpenetan bat ez datozenak edo sareko konexio/suebaki-arazo baten ondorioz izan daiteke. Hona hemen arazoak konpontzeko aholku batzuk.

  • Irakurri arretaz OpenVPN eragiketaren irteera bezeroari. Askotan aholku baliotsuak biltzen ditu zer ezin den eta zergatik egin.
  • Egiaztatu zerbitzariko /etc/openvpn/ direktorioko openvpn.log eta openvpn-status.log fitxategietako errore-mezuak.
  • Проверьте связанные с OpenVPN и подходящие по времени сообщения в системных журналах на сервере и клиенте. (journalctl -ce выведет на экран самые последние записи.)
  • Ziurtatu sareko konexio aktibo bat duzula zerbitzariaren eta bezeroaren artean (horri buruzko informazio gehiago 14. kapituluan).

Egileari buruz

Дэвид Клинтон — системный администратор, преподаватель и писатель. Он администрировал, писал об этом и создавал учебные материалы для многих важных технических дисциплин, включая системы Linux, облачные вычисления (в частности AWS) и контейнерные технологии, такие как Docker. Он написал книгу Learn Amazon Web Services in a Month of Lunches (Manning, 2017). Многие из его учебных видеокурсов можно найти на сайте Pluralsight.com, а ссылки на другие его книги (по администрированию Linux и виртуализации серверов) доступны по адресу bootstrap-it.com.

» Liburuari buruzko xehetasun gehiago hemen aurki daitezke argitaletxearen webgunea
» Edukien taula
» Laburpena

Khabrozhiteleyrentzat % 25eko deskontua kupoia erabiliz - Linux
Liburuaren paperezko bertsioa ordaintzean, liburu elektroniko bat bidaliko da posta elektronikoz.

Iturria: www.habr.com

Gehitu iruzkin berria