Вот пример вывода sql запроса к базе данных:
mysql> SELECT date,time FROM table;
+------------+---------+
| date | time |
+------------+---------+
| 2010-12-07 | 70000 |
| 0000-00-00 | 0 |
+------------+---------+
Вставляем функции date_format и time_format и получаем человеческий ответ =)
mysql> SELECT DATE_FORMAT(date,'%d.%m.%Y') AS date,TIME_FORMAT(time,'%T') AS time FROM table;
+------------+----------+
| date | time |
+------------+----------+
| 07.12.2010 | 07:00:00 |
| 00.00.0000 | 00:00:00 |
+------------+----------+
вторник, 7 декабря 2010 г.
четверг, 2 декабря 2010 г.
Apache и авторизация в LDAP
В общем openldap уже установлен, не настроены резервные копии, синхронизации, защита доступ =), но для тестовых целей вполне себе работоспособный. При установке apache обратите внимание на наличие USE-флагa ldap (напоминаю: речь идет о Gentoo) и APACHE2_MODULES="auth_basic", остальное по вкусу.
После установки apache необходимо подключить модули ldap через конфигурацию стартового скрипта. В файле /etc/conf.d/apache2 необходимо домбавить к ключам запуска APACHE2_OPTS следующие параметры -D AUTHNZ_LDAP -D LDAP.
Настройку самого apache я опускаю, т.к. это не принципиально. Ключевым в авторизации являются параметры для ldap модулей. Это можно делать в основых файлах конфигурации и/или в файле .htaccess. Для настройки я создал каталог в корне сайта и в нем создал файл .htaccess. Таким образом доступ к содержимому этого каталога и его подкаталогов будет возможно только при успешной базовой автризации.
Для тестов у меня уже создан пользователь U1 входящий в группу G1 в подразделении O1 дерева ldap site.local.
Для базовой авторизации создал файл .htaccess:
# .htaccess
# Это сообщение будет появляться в окне базовой авторизации для ввода имени и пароля
AuthName "restricted"
# Тип авторизации базовый
AuthType Basic
# Авторизация будетп производится через ldap
AuthBasicProvider ldap
# Ветка каталога ldap для поиска и авторизации пользователей
AuthLDAPURL "ldap://localhost/ou=Users,ou=OWN,dc=site,dc=local"
# Имя пользователя и пароль с которым apache будет обращаться к ldap
# для работы
AuthLDAPBindDN cn=glav,dc=site,dc=local
AuthLDAPBindPassword пароль
Теперь можно проверять и искать ошибки =). Описанная конфигурация проверят наличие пользователя в ветке каталога ldap и его пароль.
Дальше будет чуть чуть интереснее . Надо убедиться, что пользоатель не просто находится в каталоге ldap и пароль верен, но состоит в нужной группе. Для этого добавляем к нашему .htaccess еще несколько строк:
# Атрибут группы в которой надо проверять наличие пользователя
AuthLDAPGroupAttribute uniqueMember
# Указываем, что пользователи в группе записаны с полным именем dn
AuthLDAPGroupAttributeIsDN on
# Требуем обязательно проверки по группе g1
Require ldap-group cn=o1,ou=o1,dc=site,dc=local
После этого я наступил на шикарные грабли. Так как apache выполняет поиск в ldap-каталоге, необходимо соответствующие поля поиска проиндексировать. В нашем случае проиндексированными должны быть: cn, uid, uniqueMember. Для этого добавляем в файл конфигурации openldap /etc/openldap/slapd.conf следующие параметры:
index uid eq
index cn eq
index uniqueMember eq
Далее останавливаем сервер ldap и индексируем базы:
#/etc/init.d/slapd stop
#slapindex -f /etc/openldap/slapd.conf
После индексации (Важно!) не забудьте установить права для ldap на все файлы базы:
#chown ldap:ldap /var/lib/openldap-data/*
Запустите заново openldap и проверяйте как все это хозяйство работает.
После установки apache необходимо подключить модули ldap через конфигурацию стартового скрипта. В файле /etc/conf.d/apache2 необходимо домбавить к ключам запуска APACHE2_OPTS следующие параметры -D AUTHNZ_LDAP -D LDAP.
Настройку самого apache я опускаю, т.к. это не принципиально. Ключевым в авторизации являются параметры для ldap модулей. Это можно делать в основых файлах конфигурации и/или в файле .htaccess. Для настройки я создал каталог в корне сайта и в нем создал файл .htaccess. Таким образом доступ к содержимому этого каталога и его подкаталогов будет возможно только при успешной базовой автризации.
Для тестов у меня уже создан пользователь U1 входящий в группу G1 в подразделении O1 дерева ldap site.local.
Для базовой авторизации создал файл .htaccess:
# .htaccess
# Это сообщение будет появляться в окне базовой авторизации для ввода имени и пароля
AuthName "restricted"
# Тип авторизации базовый
AuthType Basic
# Авторизация будетп производится через ldap
AuthBasicProvider ldap
# Ветка каталога ldap для поиска и авторизации пользователей
AuthLDAPURL "ldap://localhost/ou=Users,ou=OWN,dc=site,dc=local"
# Имя пользователя и пароль с которым apache будет обращаться к ldap
# для работы
AuthLDAPBindDN cn=glav,dc=site,dc=local
AuthLDAPBindPassword пароль
Теперь можно проверять и искать ошибки =). Описанная конфигурация проверят наличие пользователя в ветке каталога ldap и его пароль.
Дальше будет чуть чуть интереснее . Надо убедиться, что пользоатель не просто находится в каталоге ldap и пароль верен, но состоит в нужной группе. Для этого добавляем к нашему .htaccess еще несколько строк:
# Атрибут группы в которой надо проверять наличие пользователя
AuthLDAPGroupAttribute uniqueMember
# Указываем, что пользователи в группе записаны с полным именем dn
AuthLDAPGroupAttributeIsDN on
# Требуем обязательно проверки по группе g1
Require ldap-group cn=o1,ou=o1,dc=site,dc=local
После этого я наступил на шикарные грабли. Так как apache выполняет поиск в ldap-каталоге, необходимо соответствующие поля поиска проиндексировать. В нашем случае проиндексированными должны быть: cn, uid, uniqueMember. Для этого добавляем в файл конфигурации openldap /etc/openldap/slapd.conf следующие параметры:
index uid eq
index cn eq
index uniqueMember eq
Далее останавливаем сервер ldap и индексируем базы:
#/etc/init.d/slapd stop
#slapindex -f /etc/openldap/slapd.conf
После индексации (Важно!) не забудьте установить права для ldap на все файлы базы:
#chown ldap:ldap /var/lib/openldap-data/*
Запустите заново openldap и проверяйте как все это хозяйство работает.
среда, 1 декабря 2010 г.
LDAP для apache с авторизацией.
Не могу претендовать на how to, но по крайней мере есть нюансы, которые отмечу. В общем потребовался мне apache с авторизацией в LDAP и с этого все началось.
Установка LDAP стандартная, интересное начинается с его настройки. Речь тут идет об OpenLDAP и дистрибутиве Gentoo. Основной файл настроек находится в каталоге /etc/openldap/ и называется slapd.conf. Для работы необходимо настроить минимум:
#/etc/openldap/slapd.conf
#
# Подключаем базовые схемы
#
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
#
# Это права доступа по умолчанию, надо потом исправить, т.к.
# т.к. любой может исправить любую запись. Так что после первичной
# настройке не забудьте исправить.
#
access to dn.base="" by * read
access to dn.base="cn=Subschema" by * read
access to *
by self write
by users read
by anonymous auth
#######################################################################
# BDB database definitions - Дальше описание базы.
#######################################################################
#
# формат файла базы
database hdb
# Это указание корня ldap каталога в базе
suffix "dc=site,dc=local"
#
checkpoint 32 30
# имя пользователя который будет управлять корнем
rootdn "cn=glav,dc=site,dc=local"
# Пароль от rootdn в зашифрованном виде
rootpw {SSHA}ххххххххххххххххххххх
# Каталог, в котором будет размещена база ldap
directory /var/lib/openldap-data
# индексы
index objectClass eq
Шифрованный пароль для rootdn можно получить сразу, выполнив команду slappasswd -h {MD5}.
При старте ldap у меня сразу не создалась БД и /etc/init.d/slapd start валился с ошибкой. Я скопировал /var/lib/openldap-data/DB_CONFIG из файла DB_CONFIG.example и все запустилось.
После этого через ldif файлы я заполнил необходимой информацией каталог. В общем все просто, но даже по прочтении кучи документации я не возьмусь кому нибудь, кроме себя, объяснять как все это работает и что я для этого сделал =). Основная проблема в том, что для использования ldap нужно понимать что из себя представляет ldap!
Для тестовых целей создадин OU (Organization Unit) добавим пользователя, группу и поместим пользователя в эту группу. В дальнейшем на этом примере напишу конфигурацию в apache.
Для добавления записей в ldap каталог, используется утилита ldapadd на вход которой передаем ldif файлы с необходимыми данными. LDIF - формат представления записей службы каталогов или их изменений в текстовой форме.
Для начала добавим OU для пользователей и групп, OU будет называться O1:
#ou.ldif
dn: ou=O1,dc=site,dc=local
objectclass: organizationalUnit
objectclass: top
ou: O1
Командой ldapadd ou.ldif данные заносятся к каталог. Аналогичным образом создаем пользователя U1:
#u1.ldif
dn: uid=pet,ou=O1,dc=site,dc=local
cn: Victor Veseli
objectclass: inetOrgPerson
objectclass: simpleSecurityObject
objectclass: top
sn: Veseli
uid: g1
userpassword: {MD5}ХХХХХХХХХХХХ
Теперь добавляем группу G1 и заносим в нее пользователя U1:
#g1.ldif
dn: cn=G1,ou=O1,dc=site,dc=local
cn: G1
objectclass: groupOfUniqueNames
objectclass: top
uniquemember: uid=pet,ou=O1,dc=site,dc=local
В итоге имеем в ldap каталоге одного пользователя u1 входящего в группу g1 в подразделении o1.
Установка LDAP стандартная, интересное начинается с его настройки. Речь тут идет об OpenLDAP и дистрибутиве Gentoo. Основной файл настроек находится в каталоге /etc/openldap/ и называется slapd.conf. Для работы необходимо настроить минимум:
#/etc/openldap/slapd.conf
#
# Подключаем базовые схемы
#
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
#
# Это права доступа по умолчанию, надо потом исправить, т.к.
# т.к. любой может исправить любую запись. Так что после первичной
# настройке не забудьте исправить.
#
access to dn.base="" by * read
access to dn.base="cn=Subschema" by * read
access to *
by self write
by users read
by anonymous auth
#######################################################################
# BDB database definitions - Дальше описание базы.
#######################################################################
#
# формат файла базы
database hdb
# Это указание корня ldap каталога в базе
suffix "dc=site,dc=local"
#
checkpoint 32 30
# имя пользователя который будет управлять корнем
rootdn "cn=glav,dc=site,dc=local"
# Пароль от rootdn в зашифрованном виде
rootpw {SSHA}ххххххххххххххххххххх
# Каталог, в котором будет размещена база ldap
directory /var/lib/openldap-data
# индексы
index objectClass eq
Шифрованный пароль для rootdn можно получить сразу, выполнив команду slappasswd -h {MD5}.
При старте ldap у меня сразу не создалась БД и /etc/init.d/slapd start валился с ошибкой. Я скопировал /var/lib/openldap-data/DB_CONFIG из файла DB_CONFIG.example и все запустилось.
После этого через ldif файлы я заполнил необходимой информацией каталог. В общем все просто, но даже по прочтении кучи документации я не возьмусь кому нибудь, кроме себя, объяснять как все это работает и что я для этого сделал =). Основная проблема в том, что для использования ldap нужно понимать что из себя представляет ldap!
Для тестовых целей создадин OU (Organization Unit) добавим пользователя, группу и поместим пользователя в эту группу. В дальнейшем на этом примере напишу конфигурацию в apache.
Для добавления записей в ldap каталог, используется утилита ldapadd на вход которой передаем ldif файлы с необходимыми данными. LDIF - формат представления записей службы каталогов или их изменений в текстовой форме.
Для начала добавим OU для пользователей и групп, OU будет называться O1:
#ou.ldif
dn: ou=O1,dc=site,dc=local
objectclass: organizationalUnit
objectclass: top
ou: O1
Командой ldapadd ou.ldif данные заносятся к каталог. Аналогичным образом создаем пользователя U1:
#u1.ldif
dn: uid=pet,ou=O1,dc=site,dc=local
cn: Victor Veseli
objectclass: inetOrgPerson
objectclass: simpleSecurityObject
objectclass: top
sn: Veseli
uid: g1
userpassword: {MD5}ХХХХХХХХХХХХ
Теперь добавляем группу G1 и заносим в нее пользователя U1:
#g1.ldif
dn: cn=G1,ou=O1,dc=site,dc=local
cn: G1
objectclass: groupOfUniqueNames
objectclass: top
uniquemember: uid=pet,ou=O1,dc=site,dc=local
В итоге имеем в ldap каталоге одного пользователя u1 входящего в группу g1 в подразделении o1.
пятница, 19 ноября 2010 г.
Skype и Genius iSlim 310 в Linux
Как то я упустил настройку камеры Genius iSlim 310 в Linux для Skype. Исправляюсь =).
lsusb для этой камеры выдает следующую информацию:
Bus 002 Device 003: ID 093a:2625 Pixart Imaging, Inc.
Для камер Pixart в Linux используются драйверы gspca. Необходимо справить всего один файл в драйвере, а точнее добавить одну строчку нужным нам Diviсe ID. Вот маленький файл patch:
--- drivers/media/video/gspca/pac7302.c 2010-05-17 01:17:36.000000000 +0400
+++ drivers/media/video/gspca/pac7302.c.new 2010-11-19 11:19:32.000000000 +0300
@@ -1200,6 +1200,7 @@
{USB_DEVICE(0x093a, 0x2621)},
{USB_DEVICE(0x093a, 0x2622), .driver_info = FL_VFLIP},
{USB_DEVICE(0x093a, 0x2624), .driver_info = FL_VFLIP},
+ {USB_DEVICE(0x093a, 0x2625)},
{USB_DEVICE(0x093a, 0x2626)},
{USB_DEVICE(0x093a, 0x2628)},
{USB_DEVICE(0x093a, 0x2629), .driver_info = FL_VFLIP},
После обновления ядра, скайп запускаем через LD_PRELOAD:
#LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so skype
Вот и все =).
lsusb для этой камеры выдает следующую информацию:
Bus 002 Device 003: ID 093a:2625 Pixart Imaging, Inc.
Для камер Pixart в Linux используются драйверы gspca. Необходимо справить всего один файл в драйвере, а точнее добавить одну строчку нужным нам Diviсe ID. Вот маленький файл patch:
--- drivers/media/video/gspca/pac7302.c 2010-05-17 01:17:36.000000000 +0400
+++ drivers/media/video/gspca/pac7302.c.new 2010-11-19 11:19:32.000000000 +0300
@@ -1200,6 +1200,7 @@
{USB_DEVICE(0x093a, 0x2621)},
{USB_DEVICE(0x093a, 0x2622), .driver_info = FL_VFLIP},
{USB_DEVICE(0x093a, 0x2624), .driver_info = FL_VFLIP},
+ {USB_DEVICE(0x093a, 0x2625)},
{USB_DEVICE(0x093a, 0x2626)},
{USB_DEVICE(0x093a, 0x2628)},
{USB_DEVICE(0x093a, 0x2629), .driver_info = FL_VFLIP},
После обновления ядра, скайп запускаем через LD_PRELOAD:
#LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so skype
Вот и все =).
пятница, 12 ноября 2010 г.
l2tp - окончание
Не радостное окончание получилось =). IPsec работает но настройка его с NAT-ами дело не благодарное. L2TP как сервер работает отлично, а как клиент - ощущение двойственное.
L2TP в качестве клиента под linux испытаны xl2tpd, rp-l2tpd, openl2tp. Все 3 программы в качестве клиента не могут поддерживать постоянное соединение. Жить с ними можно но не интересно =). Наиболее вменяемый клиент xl2tpd. Варианты с GUI не рассматривал.
По всей видимости останусь жить с openvpn =).
L2TP в качестве клиента под linux испытаны xl2tpd, rp-l2tpd, openl2tp. Все 3 программы в качестве клиента не могут поддерживать постоянное соединение. Жить с ними можно но не интересно =). Наиболее вменяемый клиент xl2tpd. Варианты с GUI не рассматривал.
По всей видимости останусь жить с openvpn =).
среда, 10 ноября 2010 г.
xl2tpd - клиент
Настройка xl2tpd в качестве клиента выполняется аналогично с серверной частью через файл /etc/xl2tpd/xl2tpd.conf
[global]
access control = yes
[lns local]
; Это серверная секция, для клиента может отсутствовать.
[lac l2test]
; lac - клиентская секция, l2test - имя туннеля.
;Соответственно может быть несколько lac секций с разными туннелями.
; Указываем адрес сервера
lns = vpn.net.local
; Автоматически поднимать тунель при старте xl2tpd
autodial = yes
; Пересоединение при разрыве связи
redial = yes
; Перед повторным соединением сделать задержку в сколько то секунд
redial timeout = 60
; Максимальное количество попыток пересоединений с сервером.
; Или я не понимаю документацию или она не работает или все плохо =)
; max redials = 100
; Требовать chap
require chap = yes
; Отказаться от pap
refuse pap = yes
; Не требовать доказательств =)
require authentication = no
; Имя пользователя
name = l2test
; Файл опций для pppd. Если уже настраивали сервер, то опции взять с сервера.
pppoptfile = /etc/ppp/options.l2tpd.lac
Далее стартуем xl2tpd, он соединяется по нашему тунелю и запускает pppd.
Что не так - не так, то что если сервер в момент запуска xl2tpd на клиенте не доступен, то туннель ни когда сам по себе не поднимется. Но это пол беды, хуже то, что если в процессе работы теряется связь с сервером, то туннель обратно самостоятельно не поднимется. Вот тут и вступает вопрос с опцией max redial - какую бы цифру я не ставил, редайл делается один раз и больше попыток соединения не происходит. Найти решение я не смог =(. При этом все версии 1.2.4, 1.2.6-r1 и 1.2.7 ведут себя абсолютно одинаково. Осталось только обратиться к разработчикам =).
[global]
access control = yes
[lns local]
; Это серверная секция, для клиента может отсутствовать.
[lac l2test]
; lac - клиентская секция, l2test - имя туннеля.
;Соответственно может быть несколько lac секций с разными туннелями.
; Указываем адрес сервера
lns = vpn.net.local
; Автоматически поднимать тунель при старте xl2tpd
autodial = yes
; Пересоединение при разрыве связи
redial = yes
; Перед повторным соединением сделать задержку в сколько то секунд
redial timeout = 60
; Максимальное количество попыток пересоединений с сервером.
; Или я не понимаю документацию или она не работает или все плохо =)
; max redials = 100
; Требовать chap
require chap = yes
; Отказаться от pap
refuse pap = yes
; Не требовать доказательств =)
require authentication = no
; Имя пользователя
name = l2test
; Файл опций для pppd. Если уже настраивали сервер, то опции взять с сервера.
pppoptfile = /etc/ppp/options.l2tpd.lac
Далее стартуем xl2tpd, он соединяется по нашему тунелю и запускает pppd.
Что не так - не так, то что если сервер в момент запуска xl2tpd на клиенте не доступен, то туннель ни когда сам по себе не поднимется. Но это пол беды, хуже то, что если в процессе работы теряется связь с сервером, то туннель обратно самостоятельно не поднимется. Вот тут и вступает вопрос с опцией max redial - какую бы цифру я не ставил, редайл делается один раз и больше попыток соединения не происходит. Найти решение я не смог =(. При этом все версии 1.2.4, 1.2.6-r1 и 1.2.7 ведут себя абсолютно одинаково. Осталось только обратиться к разработчикам =).
l2tp и ipsec - кому оно надо?
В процессе настройки l2tp и ipsec прочитал много документации о работе этого счастья через NAT. Дело в том, что ipsec без танцев с бубном работает только при отсутствии между клиентом и сревером трансляции адресов. Не буду вдаваться в подробности реализации ipsec но факт остается фактом. Обеспечить сервер белым ip адресом без трансляции не составляет труда, а вот обеспечить им клиента, почти невозможно. В первую очередь я на это попался при соединении через мобильный интернет МТС, потом домашний провайдер с их домовой сетью и т.д..
Фактически получается, учитывая реалии жизни, что решение с ipsec не возможно применить как универсальное. По хорошему на этом надо ставить жирную точку, но работа проделана =). Самое обидное, что результат категорически отрицательный. Это касается не только ipsec но и клиентской части l2tp реализованой под linux.
Фактически получается, учитывая реалии жизни, что решение с ipsec не возможно применить как универсальное. По хорошему на этом надо ставить жирную точку, но работа проделана =). Самое обидное, что результат категорически отрицательный. Это касается не только ipsec но и клиентской части l2tp реализованой под linux.
вторник, 2 ноября 2010 г.
ipsec - openswan
Как уже говорилось в "l2tp - начало" мы настраиваем связку l2tp с минимальным шифрованием ipsec. Вариантов у шифрования при использовании ipsec достаточно много, меня, как всегда, интересует простейший вариант и минимальные телодвижения, так как основная проблема заключается в первоначальной настройке. После того, как будет запущен самый простой вариант уже есть смысл и возможность углубляться в дебри =), а пока настроим ipsec OpenSwan с шифрованием по ключевой фразе - PSK.
После установки пакета openswan необходимо настроить 2 конфигурационных файла:
# /etc/ipsec/ipsec.conf
version 2.0 # conforms to second version of ipsec.conf specification
config setup
# Включаем NAT-T, иначе через трансляцию и межсетевые экраны это работать
# не будет. На межсетевом экране необходимо разрешить пакеты UDP к нашему
# серверу по портам 500 (ipsec) и 4500 (nat traversal)
nat_traversal=yes
# Перечислены серые сети из которых можно подключиться по ipsec
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
nhelpers=0
conn l2tp-psk
# Авторизация пуде произвоидтся по ключевой фарзе
authby=secret
# Отключаем PFS в первой фазе =).
pfs=no
# Соединения будут добавляться по мере присоединения клиентов
auto=add
# Отключаем попытку договориться о смене ключей
rekey=no
# Внутренний ip адрес сервера ipsec/l2tp
left=192.168.1.10
# IP-адрес сервера в интернет за NAT
leftid=2.2.2.2
# Протокол l2tp на сервере
leftprotoport=17/0 на стороне сервера
# Маршрут сервера по умолчанию
leftnexthop=192.168.100.1
#
# Настройки для клиента протокола l2tp.
#
right=%any
rightprotoport=17/1701
rightsubnet=vhost:%priv,%no
#Disable Opportunistic Encryption
include /etc/ipsec/ipsec.d/examples/no_oe.conf
Осталось записать ключевую фразу в файл с секретом:
#/etc/ipsec/ipsec.secrets
: PSK "123456"
После этого стартуем сервисы /etc/init.d/ipsec и /etc/init.d/xl2tpd. После этого можно пробовать соединиться клиентом встроенным в Windows 7, но не сразу =). Несмотря на то, что в Windows встроен достаточно хороший клиент для vpn, при работе с ipsec через nat, необходимо добавить ключ реестра: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\PolicyAgent\AssumeUDPEncapsulationContextOnSendRule и установить значение REG_DWORD равным 2. Таким образом мы сообщаем Ipsec в Windows что сервер и клиент ipsec могут находиться за NAT. Последнее, что необходимо настроить, это добавить ключевую фразу. Это делается в свойствах соединения, на вкладке "Безопасность" под кнопкой "Дополнительные параметры". Впишите предварительный ключ, такой же, как и указанный в /etc/ipsec/ipsec.secrets.
На этом все настройки закончены и можно пользоваться. =)
После установки пакета openswan необходимо настроить 2 конфигурационных файла:
# /etc/ipsec/ipsec.conf
version 2.0 # conforms to second version of ipsec.conf specification
config setup
# Включаем NAT-T, иначе через трансляцию и межсетевые экраны это работать
# не будет. На межсетевом экране необходимо разрешить пакеты UDP к нашему
# серверу по портам 500 (ipsec) и 4500 (nat traversal)
nat_traversal=yes
# Перечислены серые сети из которых можно подключиться по ipsec
virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
nhelpers=0
conn l2tp-psk
# Авторизация пуде произвоидтся по ключевой фарзе
authby=secret
# Отключаем PFS в первой фазе =).
pfs=no
# Соединения будут добавляться по мере присоединения клиентов
auto=add
# Отключаем попытку договориться о смене ключей
rekey=no
# Внутренний ip адрес сервера ipsec/l2tp
left=192.168.1.10
# IP-адрес сервера в интернет за NAT
leftid=2.2.2.2
# Протокол l2tp на сервере
leftprotoport=17/0 на стороне сервера
# Маршрут сервера по умолчанию
leftnexthop=192.168.100.1
#
# Настройки для клиента протокола l2tp.
#
right=%any
rightprotoport=17/1701
rightsubnet=vhost:%priv,%no
#Disable Opportunistic Encryption
include /etc/ipsec/ipsec.d/examples/no_oe.conf
Осталось записать ключевую фразу в файл с секретом:
#/etc/ipsec/ipsec.secrets
: PSK "123456"
После этого стартуем сервисы /etc/init.d/ipsec и /etc/init.d/xl2tpd. После этого можно пробовать соединиться клиентом встроенным в Windows 7, но не сразу =). Несмотря на то, что в Windows встроен достаточно хороший клиент для vpn, при работе с ipsec через nat, необходимо добавить ключ реестра: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\PolicyAgent\AssumeUDPEncapsulationContextOnSendRule и установить значение REG_DWORD равным 2. Таким образом мы сообщаем Ipsec в Windows что сервер и клиент ipsec могут находиться за NAT. Последнее, что необходимо настроить, это добавить ключевую фразу. Это делается в свойствах соединения, на вкладке "Безопасность" под кнопкой "Дополнительные параметры". Впишите предварительный ключ, такой же, как и указанный в /etc/ipsec/ipsec.secrets.
На этом все настройки закончены и можно пользоваться. =)
четверг, 28 октября 2010 г.
l2tp - начало
Расплодилось у меня много всяких vpn-соединений ppp и openvpn. Решил все унифицировать с достаточной степенью безопасности. Выбор пал на l2tp, так как есть IPsec, а клиент в любом Windows есть по умолчанию, плюс все это хозяйство должно работать под Linux.
Так как решил использовать Gentoo в качестве сервера, то наиболее распространенное решение это xl2tpd и OpenSwan.
Начало =).
Сначала настраивают xl2tpd. Настройка, как и все в Gentoo, делается элементарно. Основной конфигурационный файл xl2tpd /etc/xl2tpd/xl2tpd.conf. Привожу минимальное содержимое этого файла с которым Windows-клиент соединяется с настройками по умолчанию. Естественно речь идет о Window 7.
; l2tpd.conf
;
[global]
; Номер порта UDP на котором работает сервер l2tp
port = 1701
[lns default]
; Диапазон выдаваемых IP-адресов клиентам
ip range = 192.168.0.10-192.168.0.20
; IP-адрес для сервера
local ip = 192.168.0.1
; Запрет более 1 соединения на клиента
exclusive = yes
; Обязательная авторизация
require authentication = yes
; На время отладки полезная опция
ppp debug = yes
; Файл с опциями pppd для соединения
pppoptfile = /etc/ppp/options.l2tpd
Соответственно дальше можно резвиться, опций у xl2tpd навалом =), но нам нужно настроить точно также по минимуму pppd через /etc/ppp/options.l2tpd
#/etc/ppp/options.l2tpd
# Разрешаем устанавливать адреса при соединении
ipcp-accept-local
ipcp-accept-remote
# Устанавливаем Dns для Windows-клиентов
ms-dns 192.168.1.21
# На всякий случай отключаем компрессию, ибо с ней могут быть проблемы (не тестировал)
noccp
# Требовать авторизацию
auth
# Аппратное управление потоком (не тестировал)
crtscts
# Таймаут соединения в секундах
idle 180
# С размерами пакетов тоже все ясно
mtu 1480
mru 1480
# Просим не мучить клиентов маршрутом по умолчанию
nodefaultroute
# Подробные логи в syslog, после настройки можно отключить
debug
# Создать файл блокировок
lock
# Добавляет адрес в arp таблицу
proxyarp
# Для согласования соединения, в миллисекундах, по умолчанию 1000,
# но для надежности я выставил 5000
connect-delay 5000
# Ждать пока клиент не определится с соединением lcp
silent
# Разрешаем соединяться с использованием PAM, но при этом все равно нужна запись
# в pap-secrets, а пароль будет проверяться через PAM. Работает только для PAP
# при CHAP обязательно указание паролей в chap-secrets
login
Так как Windows по умолчанию не использует PAP, то надо настраивать через CHAP. Для авторизации пишем имя и пароль в chap-secrets
# client server secret IP addresses
user * password 192.168.0.0/24
Вот и все, первая часть, настройка самого xl2tpd готова. Запускаем и тестируем.
Так как решил использовать Gentoo в качестве сервера, то наиболее распространенное решение это xl2tpd и OpenSwan.
Начало =).
Сначала настраивают xl2tpd. Настройка, как и все в Gentoo, делается элементарно. Основной конфигурационный файл xl2tpd /etc/xl2tpd/xl2tpd.conf. Привожу минимальное содержимое этого файла с которым Windows-клиент соединяется с настройками по умолчанию. Естественно речь идет о Window 7.
; l2tpd.conf
;
[global]
; Номер порта UDP на котором работает сервер l2tp
port = 1701
[lns default]
; Диапазон выдаваемых IP-адресов клиентам
ip range = 192.168.0.10-192.168.0.20
; IP-адрес для сервера
local ip = 192.168.0.1
; Запрет более 1 соединения на клиента
exclusive = yes
; Обязательная авторизация
require authentication = yes
; На время отладки полезная опция
ppp debug = yes
; Файл с опциями pppd для соединения
pppoptfile = /etc/ppp/options.l2tpd
Соответственно дальше можно резвиться, опций у xl2tpd навалом =), но нам нужно настроить точно также по минимуму pppd через /etc/ppp/options.l2tpd
#/etc/ppp/options.l2tpd
# Разрешаем устанавливать адреса при соединении
ipcp-accept-local
ipcp-accept-remote
# Устанавливаем Dns для Windows-клиентов
ms-dns 192.168.1.21
# На всякий случай отключаем компрессию, ибо с ней могут быть проблемы (не тестировал)
noccp
# Требовать авторизацию
auth
# Аппратное управление потоком (не тестировал)
crtscts
# Таймаут соединения в секундах
idle 180
# С размерами пакетов тоже все ясно
mtu 1480
mru 1480
# Просим не мучить клиентов маршрутом по умолчанию
nodefaultroute
# Подробные логи в syslog, после настройки можно отключить
debug
# Создать файл блокировок
lock
# Добавляет адрес в arp таблицу
proxyarp
# Для согласования соединения, в миллисекундах, по умолчанию 1000,
# но для надежности я выставил 5000
connect-delay 5000
# Ждать пока клиент не определится с соединением lcp
silent
# Разрешаем соединяться с использованием PAM, но при этом все равно нужна запись
# в pap-secrets, а пароль будет проверяться через PAM. Работает только для PAP
# при CHAP обязательно указание паролей в chap-secrets
login
Так как Windows по умолчанию не использует PAP, то надо настраивать через CHAP. Для авторизации пишем имя и пароль в chap-secrets
# client server secret IP addresses
user * password 192.168.0.0/24
Вот и все, первая часть, настройка самого xl2tpd готова. Запускаем и тестируем.
вторник, 5 октября 2010 г.
iLO 2
В какой то момент, мне потребовалось удаленное управление сервером, он видите ли зависал при перезагрузке и приходилось к нему идти ногами, что в общем то не правильно. На моё счастье сервер был Hewlett-Packard DL320G4, в котором "по умолчанию" установлена плата iLO (Integrated Lights-Out) позволяющая управлять им через сеть.
Всё было бы прекрасно, за исключением одного "но" - у меня это не заработало. Долго же я бился, пока не понял, что виртуальная клавиатура в iLO для установленной операционной системы выглядит как USB-клавиатура и если для нее драйверы отсутствуют, то соответственно ни чего не работает. Вроде мелочь, но помнить надо =).
Всё было бы прекрасно, за исключением одного "но" - у меня это не заработало. Долго же я бился, пока не понял, что виртуальная клавиатура в iLO для установленной операционной системы выглядит как USB-клавиатура и если для нее драйверы отсутствуют, то соответственно ни чего не работает. Вроде мелочь, но помнить надо =).
пятница, 9 апреля 2010 г.
ZyXEL (HylaFAX - ответный удар) - продолжение
В прошлый раз я достаточно быстро выкрутился с модемом ZyXEL Omni 56K Duo подключенным по USB и переехал с ядра 2.6.22 на 2.6.27. Мне потребовалось более новое ядро, в частности 2.6.33 и старый трюк с подменой ID модема не сработал. Точнее модуль omninet подгружался но при попытке использования устройства /dev/ttyUSB0 я получил ошибку - Can not open modem (Input/output error).
Поиски в интернете прямого ответа не дали, но результат всё-таки был найден =), правда речь там шла про gps, но факт остается фактом. Необходимо изменить кроме файла omninet.c ещё и usb-serial.c
Вот два патча, которые у меня получились, для ядра 2.6.33:
--- /usr/src/linux/drivers/usb/serial/usb-serial.c 2010-02-24 21:52:17.000000000 +0300
+++ tmp/usb/usb-serial.c 2010-04-09 15:08:09.000000000 +0400
@@ -307,6 +307,8 @@
struct usb_serial_port *port = tty->driver_data;
dbg("%s - port %d", __func__, port->number);
tty_port_close(&port->port, tty, filp);
+ tty_kref_put(tty);
+
}
--- /usr/src/linux/drivers/usb/serial/omninet.c 2010-02-24 21:52:17.000000000 +0300
+++ tmp/usb/omninet.c 2010-04-09 15:08:37.000000000 +0400
@@ -59,7 +59,7 @@
#define DRIVER_DESC "USB ZyXEL omni.net LCD PLUS Driver"
#define ZYXEL_VENDOR_ID 0x0586
-#define ZYXEL_OMNINET_ID 0x1000
+#define ZYXEL_OMNINET_ID 0x1512
/* This one seems to be a re-branded ZyXEL device */
#define BT_IGNITIONPRO_ID 0x2000
Поиски в интернете прямого ответа не дали, но результат всё-таки был найден =), правда речь там шла про gps, но факт остается фактом. Необходимо изменить кроме файла omninet.c ещё и usb-serial.c
Вот два патча, которые у меня получились, для ядра 2.6.33:
--- /usr/src/linux/drivers/usb/serial/usb-serial.c 2010-02-24 21:52:17.000000000 +0300
+++ tmp/usb/usb-serial.c 2010-04-09 15:08:09.000000000 +0400
@@ -307,6 +307,8 @@
struct usb_serial_port *port = tty->driver_data;
dbg("%s - port %d", __func__, port->number);
tty_port_close(&port->port, tty, filp);
+ tty_kref_put(tty);
+
}
--- /usr/src/linux/drivers/usb/serial/omninet.c 2010-02-24 21:52:17.000000000 +0300
+++ tmp/usb/omninet.c 2010-04-09 15:08:37.000000000 +0400
@@ -59,7 +59,7 @@
#define DRIVER_DESC "USB ZyXEL omni.net LCD PLUS Driver"
#define ZYXEL_VENDOR_ID 0x0586
-#define ZYXEL_OMNINET_ID 0x1000
+#define ZYXEL_OMNINET_ID 0x1512
/* This one seems to be a re-branded ZyXEL device */
#define BT_IGNITIONPRO_ID 0x2000
четверг, 4 марта 2010 г.
eml и base64
Получил файл кривого письма в формате eml. По тексту видно, что есть два аттачмента упакованных base64. Выдрал в файлы содержимое этих аттачментов, а дальше:
cat file.base64 | base64 -d > file.png
Не понравилось. Нашел чудесную программу - uudeview. Теперь надо какимто образом не забыть о ее существовании =).
cat file.base64 | base64 -d > file.png
Не понравилось. Нашел чудесную программу - uudeview. Теперь надо какимто образом не забыть о ее существовании =).
Подписаться на:
Сообщения (Atom)