Главная Обратная связь

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)






Общие сведения о протоколе FTP



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

FTP расшифровывается как File Transfer Protocol. Название подразумевает, что этот протокол используется для передачи файлов или директорий с одного хоста на другой по сети - как локальной, так и через интернет.
Главные возможности vsftpd: настройки для виртуальных IP, виртуальные пользователи, сетевые или автономные операции, большой спектр пользовательских настроек, регулирования пропускной способности канала, настройка лимитов по IP, поддержка IPv6 и шифрования (с помощью SSL).

Установка FTP-сервера в OpenSuSE

Так как пакет vsftpd включен в состав дистрибутива OpenSuSE, он устанавливается одной командой (при условии корректно настроенных репозиториев ПО):

$ sudo zypper install vsftpd

Сразу после установки сервер не запущен и не настроен на автозагрузку при старте системы. Поэтому для работы нужно его как минимум запустить, но перед этим следует определиться с режимом работы сервера.

Режимы работы сервера vsftpd

Автономный режим

Автономный (standalone) режим означает, что сервер запускается в виде демона (сервиса, службы) – процесса, стартующего при загрузке ОС и работающего в фоне, т.е. не имеющего связи с терминалом ввода-вывода. В различных Linux-системах есть разные способы запуска таких процессов. До недавнего времени в основном использовались скрипты запуска в каталоге /etc/init.d, управляемые командой service. Сейчас всё большее количество дистрибутивов переходит на систему инициализации systemd. OpenSuSE также входит в число таких дистрибутивов, но, придерживаясь стандартов LSB (Linux Standard Base), оставляет для обратной совместимости и старый способ работы с сервисами через команду service.

Работа с демоном с помощью команды service:

student@suse13:~> sudo service vsftpd status

vsftpd.service - Vsftpd ftp daemon



Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled)

Active: inactive (dead)

Здесь выполняется запрос состояния службы vsftpd и по ответу видно, что такая служба существует, но она остановлена: inactive (dead). Кроме того, её автозапуск не настроен (disabled).

Того же самого можно добиться командой systemd, которая реально используется при работе с сервисами:

# sudo systemctl status vsftpd

Наиболее часто при работе с сервисами используются следующие команды:

- start – запуск сервиса;

- stop – остановка сервиса;

- status – выводит информации о текущем состоянии сервиса;

- restart – это синоним для вызова пары команд stop/start; часто используется для применения новых настроек;

- reload – эта команда говорит серверу перечитать конфигурационные файлы без перезагрузки сервиса.

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

15.3.2 Режим «по запросу»

Другой подход к запуску vsftpd - это режим «по запросу», в котором за работу службы отвечает системный суперсервер. Это может быть суперсервер inetd, его усовершенствование затем xinetd, а в последнее время – systemd. При этом на каждое клиентское подключение запускается свой процесс сервера, который работает, пока подключение не завершится. Таким образом, в системе может одновременно работать большое количество процессов vsftpd, либо ни одного такого процесса. Такой подход увеличивает надежность, но несколько уменьшает эффективность работы сервера.

Так как в OpenSuSE используется sytemd, то для работы с сервером в таком режиме используется сервис vsftpd.socket. Например



suse13:/ # systemctl start vsftpd.socket

suse13:/ # systemctl status vsftpd.socket

vsftpd.socket

Loaded: loaded (/usr/lib/systemd/system/vsftpd.socket; disabled)

Active: active (listening) since Thu 2015-04-30 15:13:37 MSK; 7s ago

Listen: [::]:21 (Stream)

Accepted: 0; Connected: 0

Нужно понимать, что эти режимы работы несовместимы и сервис vsftpd не будет работать совместно с сервисом vsftpd.socket.

Чтобы убедиться в нормальной работе FTP-сервера, протестируйте и откройте порт 21 с помощью команды netstat:

$ netstat -ant | grep 21

tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN

Создание подключения по FTP

Независимо от того, запустили ли вы FTP-сервер в автономном, или в нормальном режиме, вы можете создать первое локальное ftp-подключение. По умолчанию vsftpd разрешает анонимный доступ, поэтому при создании нашего первого тестового подключения в качестве имени пользователя мы будем использовать anonymous. Для этого просто введите команду ftp с аргументом localhost:

student@suse13:~> ftp localhost

Trying ::1:21 ...

Connected to localhost.

220 (vsFTPd 3.0.2)

Name (localhost:student): anonymous

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> qui

221 Goodbye.

student@suse13:~>

Успешное подключение подтверждает, что FTP-сервер в локальной системе настроен правильно. Но перед тем, как перейти к более тонким настройкам, необходимо протестировать FTP-сервер и с нескольких удаленных хостов.

Настройка FTP-сервера

В этом разделе мы рассмотрим некоторые базовые примеры опций конфигурации vsftpd.

Примечание: при работе сервера в автономном режиме любые изменения в настройках vsftpd будут применены только после команды сервиса restart или reload.

Анонимный доступ к FTP

По умолчанию FTP-сервер vsftpd настроен для анонимного доступа (anonymous_enable=YES). Если это то, что вам нужно, можно облегчить жизнь анонимным пользователям, отключив необходимость ввода пароля. Для этого в конфигурационном файле /etc/vsftpd.conf нужно установить значение "YES" для директивы no_anon_password:

no_anon_password=YES

Разрешение на запись

По умолчанию доступ к FTP разрешен только на чтение, т.е. запрещено выполнение любых команд, связанных с изменением файловой системы: создание, удаление и переименование файлов и каталогов, закачка файлов. Чтобы разрешить выполнение подобных команд, используется параметр конфигурации

write_enable = YES

Доступ локальных пользователей по FTP

Чтобы позволить локальным пользователям системы (из файла /etc/passwd) аутентифицироваться на FTP-сервере, необходимо использовать директиву local_enable. Ее значение по умолчанию может различаться для разных дистрибутивов.

local_enable=YES

После включения этой возможности любой пользователь, указанный в файле /etc/passwd, сможет войти на FTP, используя свой пароль. При подключении он попадает в свой домашний каталог и не может выйти за его пределы

student@suse13:~> ftp student@localhost

Trying ::1:21 ...

Connected to localhost.

220 (vsFTPd 3.0.2)

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> pwd

Remote directory: /home/student

ftp>

Список доступа пользователей

Довольно часто доступ к FTP необходимо давать не всем локальным пользователям, а только некоторым из них. Для этого vsftpd поддерживает списки доступа. Такой список представляет собой обычный текстовый файл с произвольным именем, в котором построчно перечислены имена пользователей. В зависимости от конфигурации это может быть список с разрешенными или запрещенными пользователями.

Например, создадим файл /etc/vsftpd.users со следующим содержимым:

student

ftpadmin

Далее, определим новый список пользователей в конфигурационном файле /etc/vsftpd.conf и активируем директиву userlist_enable:

userlist_file=/etc/vsftpd.users

userlist_enable=YES

Действие директивы userlist_enable не совсем очевидно, потому что она работает в паре с другой директивой. По умолчанию пользователи из файла, указанного в userlist_file, будут запрещены на FTP-сервере, т.е. при попытке входа эти пользователи получат отказ в доступе ещё до ввода пароля.

student@suse13:~> ftp student@localhost

Trying ::1:21 ...

Connected to localhost.

220 (vsFTPd 3.0.2)

530 Permission denied.

ftp: Login failed

ftp>

Чтобы разрешить доступ всем пользователям, перечисленным в файле со списком доступа, используется директива userlist_deny. Установив для неё значение "NO", мы поменяем смысл списка доступа на противоположный. Теперь разрешёнными на FTP будут считаться только пользователи, перечисленные в нём.

Смена номера порта

По умолчанию любой FTP-сервер слушает стандартный порт 21 для аутентификации пользователя и порт 20 для передачи данных и vsftpd не является исключением. Для сервера, работающего в автономном режиме, смена прослушиваемого порта выполняется директивой listen_port в файле /etc/vsftpd.conf. Например, для смены порта на 2121 просто добавьте следующую директиву в ваш конфигурационный файл:

listen_port=2121

После чего перезапустите FTP-сервер.

Если же FTP-сервер запущен в каким-либо суперсервером, то изменять настройки надо в соответствующем файле сервиса. Для xinetd это будет файл /etc/xinetd.d/vsftpd, для systemd: /usr/lib/systemd/system/vsftpd.socket. После изменения значения порта необходимо будет перезапустить используемый суперсервер.

Потом можно убедиться, что FTP-сервер слушает порт 2121:

$ netstat -ant | grep 2121

tcp 0 0 0.0.0.0:2121 0.0.0.0:* LISTEN

Другие опции конфигурации

Сервер vsftpd имеет множество опций настроек, которые позволяют тонко настроить его в соответствии со своими нуждами. Узнать их можно из справки по конфигурационному файлу:

man vsftpd.conf

 

Задание на работу

Необходимо установить и настроить сервер vsftpd следующим образом:

- анонимный доступ должен быть разрешен только для чтения;

- FTP-каталог анонимного пользователя должен располагаться в /var/ftp/anonymous;

- создать в системе пользователя со своим именем и разрешить ему доступ на чтение / запись на FTP в каталог /var/ftp/имя;

- создать в системе пользователя со своей фамилией и несуществующим shell, чтобы запретить ему shell-доступ к системе. Разрешить ему только чтение FTP в каталоге /var/ftp/фамилия;

- настроить логгирование операций на FTP в файл /var/log/ftp.log

В отчете по лабораторной работе привести измененные в процессе работы конфигурационные файлы, команды создания пользователей, примеры ftp-сессий, демонстрирующие работу с сервером и фрагменты лог-файла, соответствующие этим сессиям.


Лабораторная работа 16.
Создание и настройка VPN-туннеля в Linux

VPN (Virtual Private Network) — виртуальная частная сеть. VPN - система, позволяющая организовать некую виртуальную сеть, объединяющую несколько удалённых друг от друга сетей в единое целое посредством сторонней (публичной) сети, которая при этом может не обеспечивать безопасность. К примеру, объединение сетей филиалов в одну посредством интернета. Безопасность и надёжность обеспечивается за счёт средств криптографии.

Для чего может понадобится VPN-сервер? Для безопасного доступа к серверу или к сети с множеством серверов или рабочих компьютеров. Можно организовать доступ пользователей из любой точки мира с помощью интернета и ноутбука к их рабочим машинам в офисе или доступ системных администраторов к серверам находящимся в локальной сети организации с удалённых рабочих мест. Сотрудники поддержки могут безопасно подключаться к рабочим станциям и серверам клиентов для анализа и решения возникших проблем. Филиалы одной организации в различных городах и странах могут быть объединены в единую сеть и передавать через неё конфиденциальные данные без угрозы их компрометации.

В данной работе в качестве VPN-сервера используется популярное межплатформенное приложение с открытым исходным кодом – OpenVPN.

Установка OpenVPN-сервера

Предполагается, что на сервере все действия производятся из-под рута. Если репозитории ПО настроены и доступны, то OpenVPN устанавливается одной командой:

zypper install openvpn

В итоге на сервере использовались следующие версии ПО: Debian 6.0.7, OpenVPN 2.1.3-2, OpenSSL 0.9.8o

Генерация ключей

Создаём директорию под ключи:

mkdir /etc/openvpn/easy-rsa/

В нее нужно скопировать утилиты и настройки для работы с ключами. Здесь могут быть несколько возможных вариантов. Если версия OpenVPN достаточно старая, то нужные файлы идут в комплекте с ним. Тогда их можно просто скопировать командой

cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/

Если используется более новая версия OpenVPN и easy-rsa в поставке нет, то можно попробовать установить пакет easy-rsa и скопировать файлы из его директории:

cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/

Если же этого пакета также нет, то придется брать файлы с официального сайта:

wget -O easy-rsa-2.x.tar.gz https://github.com/OpenVPN/easy-rsa/archive/release/2.x.tar.gz

Распаковываем полученный архив и копируем нужные файлы:

tar -xvf easy-rsa-2.x.tar.gz

cp -r easy-rsa-release-2.x/easy-rsa /etc/openvpn/

Переходим в эту директорию:

cd /etc/openvpn/easy-rsa/2.0/

В файле vars настраиваем параметры ключа. Для этого меняем следующие переменные: KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG, KEY_EMAIL, KEY_OU.

Например, так:

export KEY_COUNTRY="RU"

export KEY_PROVINCE="Vladimirskaya"

export KEY_CITY="Murom"

export KEY_ORG="MIVLGU"

export KEY_EMAIL="is@mivlgu.ru"

export KEY_OU="IS"

 

Инициируем переменные:

# . ./vars

NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/2.0/keys

Очищаем от старых сертификатов и ключей папку keys:

# ./clean-all

Создаем сертификат удостоверяющего центра. В квадратных скобках указываются значения по умолчанию, те, которые были заданы в файле vars. Их можно оставлять без изменения.

# ./build-ca

Generating a 2048 bit RSA private key

.........+++

..........................................+++

writing new private key to 'ca.key'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [ru]:

State or Province Name (full name) [Vladimirskaya]:

Locality Name (eg, city) [Murom]:

Organization Name (eg, company) [MIVLGU]:

Organizational Unit Name (eg, section) [IS]:

Common Name (eg, your name or your server's hostname) [MIVLGU CA]:TestOpenVPN

Name [EasyRSA]:

Email Address [is@mivlgu.ru]:

 

Генерируем сертификат и ключи сервера. Для повышения безопасности можно задать пароль. Можно этого и не делать и оставить поле пустым. Обязательно нужно ответить утвердительно на запросы подписи сертификата (Sign the certificate?) и подтверждения выпуска сертификата (certificate requests certified, commit?).

# ./build-key-server server

Generating a 2048 bit RSA private key

......................................+++

............+++

writing new private key to 'server.key'

-----

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [ru]:

State or Province Name (full name) [Vladimirskaya]:

Locality Name (eg, city) [Murom]:

Organization Name (eg, company) [MIVLGU]:

Organizational Unit Name (eg, section) [IS]:

Common Name (eg, your name or your server's hostname) [server]:VPNserver

Name [EasyRSA]:

Email Address [is@mivlgu.ru]:

 

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:

An optional company name []:

Using configuration from /etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf

Check that the request matches the signature

Signature ok

The Subject's Distinguished Name is as follows

countryName :PRINTABLE:'ru'

stateOrProvinceName :PRINTABLE:'Vladimirskaya'

localityName :PRINTABLE:'Murom'

organizationName :PRINTABLE:'MIVLGU'

organizationalUnitName:PRINTABLE:'IS'

commonName :PRINTABLE:'VPNserver'

name :PRINTABLE:'EasyRSA'

emailAddress :IA5STRING:'is@mivlgu.ru'

Certificate is to be certified until May 4 06:25:47 2025 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-key test_user

Если в качестве клиентов OpenVPN предполагаются конечные пользователи (сотрудники компании, клиенты, партнеры), то при создании их ключей крайне желательно задавать пароли.

Обратите внимание, что значения полей Common Name для сервера и для всех клиентов должны быть различными.

Генерируем параметры Диффи-Хеллмана. Это займет определенное время, зависящее, в основном, от длины ключа.

./build-dh

Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time

На этом можно закончить, но если необходима дополнительная безопасность, можно использовать TLS-аутентификацию. Она позволяет защитить сервер от DOS-атак, UDP-флуда, сканирования портов и некоторых других вещей. Для включения такой возможности необходимо сгенерировать ключ для TLS-аутификации:

openvpn --genkey --secret keys/ta.key

После этих действий в каталоге /etc/openvpn/easy-rsa/2.0/keys/ создался набор минимально необходимых файлов для работы OpenVPN.

Имя файла Где необходим Назначение Секретный
ca.crt Сервер и все клиенты Сертификат корневого УЦ НЕТ
ca.key Машина, подписывающая ключи (обычно сервер) Ключ корневого УЦ ДА
dh2048.pem Сервер Параметры Диффи-Хеллмана НЕТ
ta.key Сервер и все клиенты Ключ TLS-аутентификации ДА
server.crt Сервер Сертификат сервера НЕТ
server.key Сервер Ключ сервера ДА
test_user.crt Клиент test_user Сертификат клиента НЕТ
test_user.key Клиент test_user Ключ клиента ДА

 

Копируем серверные ключи в каталог /etc/openvpn:

cp server.crt server.key ca.crt dh1024.pem ta.key /etc/openvpn/

Клиенту же понадобятся следующие ключи: test_user.crt, test_user.key, ca.crt, ta.key.

Настройка OpenVPN-сервера

Базовый конфигурационный файл можно скопировать из каталога с примерами:

cp /usr/share/doc/packages/openvpn/sample-config-files/server.conf /etc/openvpn/

Это шаблон конфигурации, который нужно исправить в соответствии с нашими потребностями:

Чаще всего задаются следующие параметры:

# Порт, на котором будет работать сервер

port 1194

 

# Сетевой протокол: TPC или UDP

proto tcp

 

# Тип сетевого интерфейса: TUN или TAP

dev tun

 

# Сертификат УЦ

ca ca.crt

 

# Сертификат и ключ сервера

cert server.crt

key server.key

 

# Параметры Диффи-Хеллмана. Используемое в них число (2048) может меняться

dh dh2048.pem

 

# Диапазон адресов, используемых в виртуальной сети

server 10.8.0.0 255.255.255.0

 

# Хранить выданные клиентам IP-адреса в указанном файле

ifconfig-pool-persist ipp.txt

 

# Параметры проверки работоспособности канала связи между клиентом и сервером

keepalive 10 120

 

# Включение TLS-аутентификации с использованием указанного ключа

tls-auth ta.key 0

 

# Включить сжатие передаваемых данных

comp-lzo

 

# При перезагрузке не пытаться получить доступ к определенным ресурсам

persist-key

persist-tun

 

# Файл текущего состояния подключений, обновляемый раз в минуту

status openvpn-status.log

 

# Записывать лог работы сервера в указанный файл. При старте сервера содержимое файла очищается. Вместо этой директивы можно использовать log-append, которая будет сохранять предыдущее содержимое файла

log /var/log/openvpn.log

 

# Уровень логгирования от 0 (минимум) до 9 (максимум)

verb 3

 

В файле конфигурации можно указать множество других опций, некоторые из которых в нём же и описаны. Справку по всем поддерживаемым опциям можно получить командой

man openvpn

После настройки конфигурации сервера можно его запустить:

openvpn /etc/openvpn/server.conf

Если задано опция log, то вывод сервера будет записан в соответствующий лог-файл. Прервать работу сервера можно нажатием CTRL+C. Если всё настроено правильно, в логе окажется примерно следующее:

Thu May 7 10:45:14 2015 OpenVPN 2.3.4 i586-suse-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [MH] [IPv6] built on May 1 2014

Thu May 7 10:45:14 2015 library versions: OpenSSL 1.0.1k-fips 8 Jan 2015, LZO 2.08

Thu May 7 10:45:14 2015 Diffie-Hellman initialized with 2048 bit key

Thu May 7 10:45:14 2015 Control Channel Authentication: using 'ta.key' as a OpenVPN static key file

Thu May 7 10:45:14 2015 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication

Thu May 7 10:45:14 2015 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication

Thu May 7 10:45:14 2015 Socket Buffers: R=[163840->131072] S=[163840->131072]

Thu May 7 10:45:14 2015 ROUTE_GATEWAY 192.168.217.2/255.255.255.0 IFACE=eno16777736 HWADDR=00:0c:29:6e:97:ac

Thu May 7 10:45:14 2015 TUN/TAP device tun0 opened

Thu May 7 10:45:14 2015 TUN/TAP TX queue length set to 100

Thu May 7 10:45:14 2015 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0

Thu May 7 10:45:14 2015 /bin/ip link set dev tun0 up mtu 1500

Thu May 7 10:45:14 2015 /bin/ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2

Thu May 7 10:45:14 2015 /bin/ip route add 10.8.0.0/24 via 10.8.0.2

Thu May 7 10:45:14 2015 UDPv4 link local (bound): [undef]

Thu May 7 10:45:14 2015 UDPv4 link remote: [undef]

Thu May 7 10:45:14 2015 MULTI: multi_init called, r=256 v=256

Thu May 7 10:45:14 2015 IFCONFIG POOL: base=10.8.0.4 size=62, ipv6=0

Thu May 7 10:45:14 2015 IFCONFIG POOL LIST

Thu May 7 10:45:14 2015 Initialization Sequence Completed

Если сервер настроен правильно и не пишет в лог ошибки, можно запустить его в виде службы. В большинстве ОС для этого достаточно выполнить команду

service openvpn start

В последних версиях OpenSuSE и других ОС, использующих systemd, команда выглядит иначе:

systemctl start openvpn@server.service

При этом часть сервиса между символами «@» и «.» должна соответствовать названию конфигурационного файла – server.conf.

Настройка OpenVPN-клиента

На клиентской машине также необходимо установить OpenVPN, но при этом не обязательно скачивать файлы easy-rsa. На эту машину необходимо передать следующие файлы с сервера: test_user.crt, test_user.key, ca.crt, ta.key.

Следует учитывать, что некоторые из этих файлов (*.key) являются секретными и должны передаваться только по защищенным каналам. Ключ клиента (test_user.key) должен быть доступен ТОЛЬКО тому пользователю, для которого он был создан.

Эти файлы на клиентской машине нужно поместить в каталог /etc/openvpn/. Туда же копируем шаблон с клиентской конфигурацией

cp /usr/share/doc/packages/openvpn/sample-config-files/client.conf /etc/openvpn/

Изменяем его в соответствии со своими настройками:

# Режим работы - клиент

client

dev tun

proto tcp

 

# Адрес и порт сервера

remote 192.168.217.139 1194

 

# Бесконечно пытаться разрешить доменное имя сервера в IP

resolv-retry infinite

 

# Клиент не будет привязываться к локальному порту

nobind

persist-key

persist-tun

ca ca.crt

cert test_user.crt

key test_user.key

 

# При проверке сертификата сервера учитывать тип сертификата

ns-cert-type server

tls-auth ta.key 1

comp-lzo

log /var/log/openvpn.log

verb 3

Адрес сервера можно определить на серверной машине, например, с помощью команды

ifconfig | grep "inet addr:"

Проверяем подключение к серверу:

cd /etc/openvpn

openvpn client.conf

Если подключение произошло, то в консоли ничего не должно появляться и команда запуска должна «зависнуть». Прервать её можно нажатием CTRL+C. В логе клиента /var/log/openvpn.log должно появиться примерно следующее:

Thu May 7 14:49:45 2015 OpenVPN 2.3.4 i586-suse-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [MH] [IPv6] built on May 1 2014

Thu May 7 14:49:45 2015 library versions: OpenSSL 1.0.1k-fips 8 Jan 2015, LZO 2.08

Thu May 7 14:49:45 2015 Control Channel Authentication: using 'ta.key' as a OpenVPN static key file

Thu May 7 14:49:45 2015 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication

Thu May 7 14:49:45 2015 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication

Thu May 7 14:49:45 2015 Socket Buffers: R=[87380->131072] S=[16384->131072]

Thu May 7 14:49:45 2015 Attempting to establish TCP connection with [AF_INET]192.168.217.139:1194 [nonblock]

Thu May 7 14:49:46 2015 TCP connection established with [AF_INET]192.168.217.139:1194

Thu May 7 14:49:46 2015 TCPv4_CLIENT link local: [undef]

Thu May 7 14:49:46 2015 TCPv4_CLIENT link remote: [AF_INET]192.168.217.139:1194

Thu May 7 14:49:46 2015 TLS: Initial packet from [AF_INET]192.168.217.139:1194, sid=44c03842 f7d29533

Thu May 7 14:49:46 2015 VERIFY OK: depth=1, C=ru, ST=Vladimirskaya, L=Murom, O=MIVLGU, OU=IS, CN=TestOpenVPN, name=EasyRSA, emailAddress=is@mivlgu.ru

Thu May 7 14:49:46 2015 VERIFY OK: nsCertType=SERVER

Thu May 7 14:49:46 2015 VERIFY OK: depth=0, C=ru, ST=Vladimirskaya, L=Murom, O=MIVLGU, OU=IS, CN=VPNserver, name=EasyRSA, emailAddress=is@mivlgu.ru

Thu May 7 14:49:46 2015 Data Channel Encrypt: Cipher 'BF-CBC' initialized with 128 bit key

Thu May 7 14:49:46 2015 Data Channel Encrypt: Using 160 bit message hash 'SHA1' for HMAC authentication

Thu May 7 14:49:46 2015 Data Channel Decrypt: Cipher 'BF-CBC' initialized with 128 bit key

Thu May 7 14:49:46 2015 Data Channel Decrypt: Using 160 bit message hash 'SHA1' for HMAC authentication

Thu May 7 14:49:46 2015 Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-AES256-SHA, 2048 bit RSA

Thu May 7 14:49:46 2015 [VPNserver] Peer Connection Initiated with [AF_INET]192.168.217.139:1194

Thu May 7 14:49:48 2015 SENT CONTROL [VPNserver]: 'PUSH_REQUEST' (status=1)

Thu May 7 14:49:48 2015 PUSH: Received control message: 'PUSH_REPLY,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5'

Thu May 7 14:49:48 2015 OPTIONS IMPORT: timers and/or timeouts modified

Thu May 7 14:49:48 2015 OPTIONS IMPORT: --ifconfig/up options modified

Thu May 7 14:49:48 2015 OPTIONS IMPORT: route options modified

Thu May 7 14:49:48 2015 ROUTE_GATEWAY 192.168.217.2/255.255.255.0 IFACE=eno16777736 HWADDR=00:0c:29:f1:c9:0b

Thu May 7 14:49:48 2015 TUN/TAP device tun0 opened

Thu May 7 14:49:48 2015 TUN/TAP TX queue length set to 100

Thu May 7 14:49:48 2015 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0

Thu May 7 14:49:48 2015 /bin/ip link set dev tun0 up mtu 1500

Thu May 7 14:49:48 2015 /bin/ip addr add dev tun0 local 10.8.0.6 peer 10.8.0.5

Thu May 7 14:49:48 2015 /bin/ip route add 10.8.0.1/32 via 10.8.0.5

Thu May 7 14:49:48 2015 Initialization Sequence Completed

 

Запись «Initialization Sequence Completed» говорит о том, что клиент успешно установил соединение с сервером и выполнил на своей стороне действия, необходимые для работы виртуальной сети.

После этого клиентскую часть можно запустить в виде службы по аналогии с сервером:

systemctl start openvpn@client.service

При этом с клиента должен пинговаться адрес сервера в виртуальной сети – 10.8.0.1:

# ping 10.8.0.1

PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data.

64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=1.24 ms

Также должен появиться новый сетевой интерфейс – tunX, где X – номер интерфейса, обычно 0.

# ifconfig tun0

tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00

inet addr:10.8.0.6 P-t-P:10.8.0.5 Mask:255.255.255.255

Отсюда видно, что клиентская сторона получила адрес 10.8.0.6.

Дополнительные параметры

Виртуальная сеть может быть настроена так, чтобы весь трафик с клиентов по умолчанию перенаправлялся в канал к серверу. Для этого используется директива redirect-gateway, которая означает что после установки соединения с сервером клиент подменяет свой шлюз по умолчанию на адрес сервера в виртуальной сети. Сервер может принудительно передавать эту и другие директивы клиентам командой push. Например:

push "redirect-gateway def1"

push "dhcp-option DNS 10.8.0.1"

Могут также потребоваться дополнительные настройки, связанные с обработкой DNS-запросов на сервере или с маршрутизацией трафика клиентов.

client-to-client- позволяет клиентам VPN-сервера связываться друг с другом, а не только с сервером.

duplicate-cn - параметр нужно добавить если вы для всех клиентов создали одинаковые ключи, но клиенты при этом представляются различными common name.

max-clients 100 - ограничение максимального числа одновременно подключенных клиентов.

user nobody, group nogroup – запускать службу OpenVPN от имени непривилегированного пользователя для повышения безопасности.

client-config-dir ccd – указывает серверу искать в каталоге ccd индивидуальную конфигурацию клиентов. В этом каталоге для каждого клиента может быть создан файл, соответствующий его “Common name”, указанного при создании ключей. Например, для нашего тестового пользователя файл должен называться test_user. В нем можно прописать индивидуальные настройки, которые будут применяться только для этого клиента. Кроме того, эти настройки имеют больший приоритет, чем настройки, указанные в общем конфигурационном файле.

route 10.10.0.0 255.255.0.0 – говорит ОС, что запросы в сеть 10.10.0.0 нужно передавать в виртуальную сеть, т.е. за одним из клиентов есть такая сеть и в неё можно пересылать данные.

push "route 10.10.0.0 255.255.0.0" – говорит клиентам, что на сервере доступна такая сеть и они могут передавать в неё данные.

iroute 10.10.0.0 255.255.0.0 – эта строка должна быть в индивидуальном конфигурационном файле какого-либо клиента в ccd-каталоге. Она говорит серверу, что именно за этим клиентом есть сеть 10.10.0.0 и данные в неё нужно передавать через канал связи с этим клиентом.

ifconfig-push 10.8.0.5 10.8.0.6 – эта строка должна быть в индивидуальном конфигурационном файле клиента. Она говорит серверу, что данному клиенту должен быть назначен адрес 10.8.0.5. Сервер старается сохранять за клиентами изначально выданные IP-адреса, но не гарантирует этого. С этой опцией клиент будет иметь всегда один и тот же адрес внутри виртуальной сети.

crl-verify crl.pem – говорит серверу при проверке клиентских сертификатов использовать файл со списком отозванных сертификатов crl.pem. Необходимость отозвать сертификат может возникать по нескольким причинам, например, если клиенту нужно закрыть доступ к серверу или если пользователь забыл свой пароль. Сертификаты отзываются там же, где и создаются, в каталоге easy-rsa сервера. Отозвать сертификат для test_user можно следующим образом:

. ./vars

./revoke-full test_user

Скрипт revoke-full создает файл crl.pem со списком всех отозванных сертификатов. Именно его нужно подкладывать серверу и указывать директиве crl-verify.

Задание на работу

1. Настроить на различных виртуальных машинах сервер и клиент OpenVPN.

2. Создать ключи и сертификаты для трех клиентов. При создании ключей указывать в поле “Common name” свои имя и фамилию следующим образом: клиент1 - ИМЯ, клиент2 - ФАМИЛИЯ, клиент3 - ИМЯ.ФАМИЛИЯ.

3. Указать на сервере каталог с файлами индивидуальной конфигурации (ccd). Создать в нем файлы для клиентов 1 и 2. Для клиента1 прописать статический IP-адрес 10.8.0.9. Для клиента2 прописать опцию redirect-gateway.

4. Подключиться к серверу поочередно от имени всех трех клиентов, сохраняя лог-файлы для отчета.

5. Отозвать на сервере ключ для клиента 3 и указать в конфигурации сервера список отзыва.

6. Попытаться подключиться к серверу от имени клиента 3.

Требования к отчету

Отчет должен содержать следующие разделы:

1. Титульный лист, оформленный согласно утвержденному образцу.

2. Цели выполняемой лабораторной работы.

3. Задание на лабораторную работу.

4. Описание процесса выполнения работы: какие команды выполнялись, реакция ОС на них.

5. Конфигурационные файлы сервера и клиента (можно не включать закомментированные строки).

6. Лог-файлы всех клиентских подключений.

7. Выводы.


Список использованной литературы

1. Беленькая М.Н., Малиновский С.Т., Яковенко Н.В. Администрирование в информационных системах. Учебное пособие для вузов. – М.: Горячая линия – Телеком, 2011. – 400 с., ил.

2. Адельштайн Т., Любанович Б. Системное администрирование в Linux. – С.-П.: Питер, 2009. – 288 с.

3. Unix: руководство системного администратор. Для профессионалов. – 3-е изд. / Неме Э., Снайдер Г., Сибасс., Т.Р. Хеин.- СПб.: Питер, 2004.—925 с.: ил.

4. Олифер В.Г., Олифер Н.А. Сетевые операционные системы: Учебник для вузов.-С.-П.: Питер, 2002.-544 с.: ил.

5. Кирх О. Linux для профессионалов. Руководство администратора сети.- С.-П.: Питер, 2000 - 2экз.


Эта страница нарушает авторские права

allrefrs.ru - 2018 год. Все права принадлежат их авторам!