суббота, 15 декабря 2007 г.




Молния
А что в логах сервера и клиента во время невозможности переподключения? Если там нет ничего интересного - увеличьте параметр verb

Добавление от 27.06.2007 05:57:

islink
Вот скрипт аутентификации auth.vbs. Использование:

В конфиге клиента указать:
auth-user-pass

В конфиге сервера указать:
auth-user-pass-verify "auth.vbs" via-file
У процесса openvpn.exe должно хватать прав для создания временного файла в текущем каталоге, скорее всего это будет "c:\Program Files\OpenVPN\config"

Вероятнее всего там же, в "c:\Program Files\OpenVPN\config" надо положить файл users.pw (если не там или иное имя - изменить это в скрипте). Файл состоит из требуемого количества пар строк:
имя
пароль
Между этими парами пустые строки (именно абсолютно пустые) игнорируются. Например:

код
user01
pass01
user02
pass02

TEST-client01
1

example_of_user_with_blank_password

user03
pass03

Вот сам скрипт auth.vbs:
код (во всю высоту: 55 строк)
'VBscript auth.vbs для аутентификации в OpenVPN - auth-user-pass-verify auth.vbs via-file
'(c) 2007 vinni http://forum.ixbt.com/users.cgi?id=info:vinni
'Support: http://forum.ixbt.com/topic.cgi?id=14:40906#1

' в скрипте производится сравнение имени пользователя без учёта регистра.
' Если нужно иначе - уберите UCase(...) в 2 или 4 местах

On Error Resume Next

' открываем файл, имя которого передано OpenVPN-ом в скрипт через параметр
Set fso = CreateObject("scripting.filesystemobject")
Set CurrentUserPasswordFile = fso.OpenTextFile(WScript.Arguments(0),1) '1 = for reading
if Err.Number<>0 Then WScript.Quit(1)

' читаем из этого файла 2 строки - имя и пароль, которые ввёл пользователь "на том конце"
if CurrentUserPasswordFile.AtEndOfStream then WScript.Quit(1)
UserName=CurrentUserPasswordFile.ReadLine
if CurrentUserPasswordFile.AtEndOfStream then WScript.Quit(1)
Password=CurrentUserPasswordFile.ReadLine
CurrentUserPasswordFile.Close

' открываем переменную окружения common_name (это CN предъявленного клиентом сертификата)
' и сравниваем её с введенным именем пользователя.
' если это сравнение не нужно, то следующие 2 строки удалить или закомменировать
CurrentCommonName = CreateObject("Wscript.Shell").ExpandEnvironmentStrings("%common_name%")
if UCase(CurrentCommonName) <> UCase(UserName) then WScript.Quit(1)

' открываем наш файл с базой логинов и паролей
' по умолчанию это Users.pw в текущем каталоге
Set UserPasswordFileBase = fso.OpenTextFile("Users.pw",1) '1 = for reading
if Err.Number<>0 Then WScript.Quit(1)

' читаем в цикле пары строк, пропуская пустые МЕЖДУ ЭТИМИ ПАРАМИ,
' и сравниваем их с тем, что ввёл пользователь.
Do while not(UserPasswordFileBase.AtEndOfStream)
NextUserName=UserPasswordFileBase.ReadLine
if Err.Number<>0 Then WScript.Quit(1)
if NextUserName<>"" then
' если имя пользователя надо сравнивать с учётом регистра, то удалите здесь UCase(...)
if UCase(UserName)=UCase(NextUserName) then
if Password=UserPasswordFileBase.ReadLine then
' если имя и пароль совпали с парой из базы, то завершаем скрипт с результатом 0
' так нужно для OpenVPN'a, это признак успешной аутентификации
UserPasswordFileBase.Close
WScript.Quit(0)
end if
else
UserPasswordFileBase.ReadLine
end if
end if
Loop

' если поиск завершился безуспешно, то завершаем скрипт с результатом 1
' так нужно для OpenVPN'a, это признак НЕуспешной аутентификации
UserPasswordFileBase.Close
WScript.Quit(1)

Опция для пропуска по common name в Openvpn

Переведи всех на сертификаты и используй crl, например. Еще один вариант, есть
опция ccd-exclusive, если файла с именем пользователя нет в ccd-подкаталоге, то
доступ ему запрещается, если есть - то там могут быть дополнительные настройки
(но могут и не быть - пустого файла достаточно чтоб пускало). Hо crl действует
на момент обновления ключей (то есть и в начале сессии и в середине),
ccd-exclusive - только в начале, то есть что делать с теми, кто уже соединился,
надо решать отдельно.

суббота, 8 декабря 2007 г.

Настройка сети в Virtualbox

Настройка сети

Если нам нужно использовать для настройки сети не NAT, а host interface с явным IP адресом, то нужно проделать следующие операции. Договоримся, что все команды будем отдавать из-под пользователя root, а не из под sudo. Так как последняя команда не пройдёт из-под sudo.

Первым делом нам понадобится пакет bridge-utils. Далее создаём файл /etc/sysconfig/network-scripts/ifcfg-br0 следующего содержания:

DEVICE=br0
TYPE=Bridge
BOOTPROTO=dhcp
ONBOOT=yes

Добавляем в файл /etc/sysconfig/network-scripts/ifcfg-eth0 последней строкой BRIDGE=br0 и перезапускаем сеть

/etc/init.d/network restart

После этого отдаём команду

VBoxAddIF vbox0 пользователь(из-под которого будет запускаться VirtualBox) br0

Осталось только выбрать в настройках сети вместо NAT хост-интерфейс и в поле “Имя интерфейса” указать vbox0. Последнюю команду судя по всему придётся пускать каждый раз после перезагрузки системы (не гостевой).

воскресенье, 2 декабря 2007 г.

Скрипты для создания SSL сертификатов Под Openvpn сервер

Для сервера
-------------------------------------------------------------------------------------------------------
#!/bin/sh
#cp /etc/ssl/openssl2.cnf ./openssl.cnf
vim openssl.cnf
touch serial
echo 01 > serial
mkdir crl newcerts private
touch index
echo -n "введите имя хоста(Имя сгенерированного сертификата) "
read HOST
echo -n "введите имя сервера(Имя Linux компьютера) "
read MOST
export MOST="$MOST"
openssl req -new -nodes -config openssl.cnf -x509 -keyout private/ca-key.pem -out ca-cert.pem -days 3650
openssl genrsa -out $HOST.key
openssl req -new -nodes -config openssl.cnf -key $HOST.key -out $HOST.csr
openssl ca -batch -config openssl.cnf -in $HOST.csr -out $HOST.cert
openvpn --genkey --secret ta.key
openssl dhparam -out dh1024.pem 1024
mkdir $HOST
cp $HOST.* $HOST
cp ca-cert.pem $HOST
cp ta.key $HOST
cp dh1024.pem $HOST
rm $HOST.*


--------------------------------------------------
Для клиента
--------------------------------------------------
#!/bin/sh
#cp /etc/ssl/openssl2.cnf ./openssl.cnf
#vim openssl.cnf
echo Сколько сертификатов делать?
read CEND
SU=1
MOST=0
#export MOST="$MOST"
mkdir ./client-sert
while test $MOST -lt $CEND
do
MOST=$SU
export MOST="$MOST"
openssl genrsa -out client_$MOST.key
openssl req -new -nodes -config openssl.cnf -key client_$MOST.key -out client_$MOST.csr
openssl ca -batch -config openssl.cnf -in client_$MOST.csr -out client_$MOST.cert
mkdir ./client-sert/$MOST
mv ./client_$MOST.* ./client-sert/$MOST
cp ./dh1024.pem ./client-sert/$MOST
cp ./ta.key ./client-sert/$MOST
cp ./ca-cert.pem ./client-sert/$MOST
let SU=$MOST+1
done
echo Всё готово

-----------------------------------------------------------------------------------------------------------------------
Необходимо немного отредактировать файл openssl.cnf
В моём пакете используется уже отредактированный и адоптированный файл конфигурации.

Создание Deb пакета

dpkg --build DIRECTORY ovpncreat.deb
Необходим файл ./DEBIAN/control
в нём описываются данные о пакете
После первого слова обозначающего раздел описания ставим двоеточию.
Система сама скажет чего ей не хватает в этом файле.