Вроде, все так нахваливают host-tracker.com, но он мало того, что непойми как снимает смс (сразу по 2-3).. но и сам сервис похоже сегодня лёг )
Ошибка 102 (net::ERR_CONNECTION_REFUSED): Сервер отказал в подключении.
(хром)
А этот сервис многие нахваливают, в том числе фаствпс )
суббота, 10 сентября 2011 г.
четверг, 8 сентября 2011 г.
изменение времени
Понадобилось сменить время в domU (при запуске сервера неверно было выставлено время)
В основной системе сменилось нормально, но в госте получали
# ntpdate ntp.psn.ru
date
8 Sep 23:06:29 ntpdate[7731]: poll(): nfound = 0, error: No such file or directory
8 Sep 23:06:29 ntpdate[7731]: poll(): nfound = 0, error: No such file or directory
Часы просто остановились на этом времени - я оставил синхронизацию минут на 15, но он так и выводил это время. Это особенность синхронизации - чтобы не оказалось записей "в прошлом" например, часы ждут, пока время сравняется с выставленным.
При этом получали "забавный" эффект вроде крайне длинного времени пинга (первый пакет уходил сразу, второй ждал пару минут - не дождался, но потери 0%)
Надо сначала привести часы к подобию правды
(на часах машины 23:06)
# date +%H%M
2306
# date +%H%M -s 1657
1657
# date +%H%M
1657
Всё, время 16:57, теперь можно выставить точное время
# ntpdate ntp.psn.ru
8 Sep 16:58:16 ntpdate[7831]: adjust time server 194.149.67.129 offset -0.289437 sec
Можно ускорить и через опцию -b, но при этом желательно остановить бд и подобные сервисы.
-b Force the time to be stepped using the settimeofday() system call, rather than
slewed (default) using the adjtime() system call. This option should be used
when called from a startup file at boot time.
В основной системе сменилось нормально, но в госте получали
# ntpdate ntp.psn.ru
date
8 Sep 23:06:29 ntpdate[7731]: poll(): nfound = 0, error: No such file or directory
8 Sep 23:06:29 ntpdate[7731]: poll(): nfound = 0, error: No such file or directory
Часы просто остановились на этом времени - я оставил синхронизацию минут на 15, но он так и выводил это время. Это особенность синхронизации - чтобы не оказалось записей "в прошлом" например, часы ждут, пока время сравняется с выставленным.
При этом получали "забавный" эффект вроде крайне длинного времени пинга (первый пакет уходил сразу, второй ждал пару минут - не дождался, но потери 0%)
Надо сначала привести часы к подобию правды
(на часах машины 23:06)
# date +%H%M
2306
# date +%H%M -s 1657
1657
# date +%H%M
1657
Всё, время 16:57, теперь можно выставить точное время
# ntpdate ntp.psn.ru
8 Sep 16:58:16 ntpdate[7831]: adjust time server 194.149.67.129 offset -0.289437 sec
Можно ускорить и через опцию -b, но при этом желательно остановить бд и подобные сервисы.
-b Force the time to be stepped using the settimeofday() system call, rather than
slewed (default) using the adjtime() system call. This option should be used
when called from a startup file at boot time.
bitrix+svn
http://dev.1c-bitrix.ru/community/webdev/user/27606/blog/978/
При разработке сколь-либо серьёзных проектов зачастую просто необходимо использовать систему контроля версий, например SVN. К сожалению, Битрикс не позволяет вести командную разработку на нескольких локальных машинах, ввиду особенностей его лицензий. Тем не менее, система контроля версий может быть использована в паре с Битрикс в качестве хранилища бэкапов.
Однако, внесение проекта на Битрикс под контроль SVN, не совсем тривиальная задача. Как минимум излишнем будет хранить файлы ядра Битрикса, так как:
1. Они не имеют никакого отношения к проекту
2. Их слишком много
3. Они постоянно обновляются
Казалось бы ничего страшного - ставим svn:ignore на папку bitrix и радуемся жизни. Но в таком случае мы не внесём под контроль SVN свои компоненты, шаблоны, настройки. Для решения этой проблемы я предлагаю воспользоваться механизмом символьных ссылок.
И так, суть решения состоит в следующем. Допустим Ваш проект располагается в каталоге /var/www/project и имеет следующую структуру папок:
* etc - каталог настроек
* bin - каталог вспомогательных скриптов
* lib - библиотеки
* www - document root сайта
Теперь действуем по пунктам:
1. Добавляем пустое дерево каталогов /var/www/project под контроль SVN
2. Разворачиваем Битрикс в /var/www/project/www
3. Проставляем свойство ignore для каталога www (svn propedit:ignore www), указывая в нём каталоги bitrix и upload
4. Коммитим (svn commit), обновляем (svn update) SVN - теперь она не обращает внимание на файлы в папках www/bitrix и www/upload
5. Переносим содержимое каталога www/bitrix/php_interface в каталог etc
6. Удаляем каталог www/bitrix/php_interface
7. Создаём символическую ссылку (находясь в каталоге www/bitrix выполняем ln -s ../../etc php_interface)
8. Пункты 5-7 повторяем для своего пространства имён компонентов, шаблонов и модулей (их можно положить в lib/componets, lib/templates и lib/modules соответственно).
После этого добавляем под контроль SVN все, видимые ей файлы в текущем репозитории и радуемся жизни.
P.S. Структуру tag/branch/trunk не стал организовывать для упрощения примера.
Чего делать категорически нельзя:
- загонять ВСЮ папку bitrix в svn
-- невменяемое количество файлов
-- папка .svn трактуется как модуль и система site update впадает в кому (в саппорт отписывался уже пару раз, обещали поправить)
-- папки .svn в сниппетах тоже трактуются как снипеты со всеми вытекающими (тоже писал в саппорт).
Если разработка под виндой, а сервер на никсах - может быть проблема с правами, владельцами.
В общем, это возможно.
При разработке сколь-либо серьёзных проектов зачастую просто необходимо использовать систему контроля версий, например SVN. К сожалению, Битрикс не позволяет вести командную разработку на нескольких локальных машинах, ввиду особенностей его лицензий. Тем не менее, система контроля версий может быть использована в паре с Битрикс в качестве хранилища бэкапов.
Однако, внесение проекта на Битрикс под контроль SVN, не совсем тривиальная задача. Как минимум излишнем будет хранить файлы ядра Битрикса, так как:
1. Они не имеют никакого отношения к проекту
2. Их слишком много
3. Они постоянно обновляются
Казалось бы ничего страшного - ставим svn:ignore на папку bitrix и радуемся жизни. Но в таком случае мы не внесём под контроль SVN свои компоненты, шаблоны, настройки. Для решения этой проблемы я предлагаю воспользоваться механизмом символьных ссылок.
И так, суть решения состоит в следующем. Допустим Ваш проект располагается в каталоге /var/www/project и имеет следующую структуру папок:
* etc - каталог настроек
* bin - каталог вспомогательных скриптов
* lib - библиотеки
* www - document root сайта
Теперь действуем по пунктам:
1. Добавляем пустое дерево каталогов /var/www/project под контроль SVN
2. Разворачиваем Битрикс в /var/www/project/www
3. Проставляем свойство ignore для каталога www (svn propedit:ignore www), указывая в нём каталоги bitrix и upload
4. Коммитим (svn commit), обновляем (svn update) SVN - теперь она не обращает внимание на файлы в папках www/bitrix и www/upload
5. Переносим содержимое каталога www/bitrix/php_interface в каталог etc
6. Удаляем каталог www/bitrix/php_interface
7. Создаём символическую ссылку (находясь в каталоге www/bitrix выполняем ln -s ../../etc php_interface)
8. Пункты 5-7 повторяем для своего пространства имён компонентов, шаблонов и модулей (их можно положить в lib/componets, lib/templates и lib/modules соответственно).
После этого добавляем под контроль SVN все, видимые ей файлы в текущем репозитории и радуемся жизни.
P.S. Структуру tag/branch/trunk не стал организовывать для упрощения примера.
Чего делать категорически нельзя:
- загонять ВСЮ папку bitrix в svn
-- невменяемое количество файлов
-- папка .svn трактуется как модуль и система site update впадает в кому (в саппорт отписывался уже пару раз, обещали поправить)
-- папки .svn в сниппетах тоже трактуются как снипеты со всеми вытекающими (тоже писал в саппорт).
Если разработка под виндой, а сервер на никсах - может быть проблема с правами, владельцами.
В общем, это возможно.
Особенности работы с ipmi на supermicro
http://www.supermicro.com/manuals/other/Embedded_BMC_IPMI.pdf
http://www.supermicro.com/manuals/other/Onboard_BMC_IPMI.pdf
LAN Interface
This feature allows the user to select which port to use for IPMI out-of-band communication.
• The default setting is Failover, which will allow IPMI to be connected from either
the shared LAN port (LAN1/eth0) or the dedicated IPMI LAN port. Precedence
is given to dedicated LAN port over the shared LAN port.
• Select "Dedicated LAN" for IPMI to connect through the IPMI Dedicated LAN
port at all time.
• Select "Shared LAN" for IPMI to connect through the LAN1 port on the board
Переключение:
web-интерфейс: Configuration->Lan Select->Dedicated LAN
В IPMIView: на вкладке BMC Setting.
Проверил работу на подручной микре: режим failover, запустил пинг и вынул патчкорд из ipmi-интерфейса. Потерялся 1 пакет, но дальше пинги снова пошли. Поставил патчкорд назад, немного подождал, вынул кабель из lan1 - ни одного пакета не потерялось, значит переключило назад.
НО! говорят, есть особенность: если подать напряжение на сервер, в который сетевые кабели пока не воткнуты (или перезагрузили стойку и свич пока грузится, погасив все порты) -- независимо от выставленного режима ipmi будет работать только на lan1. ipmitool bmc reset cold не поможет. Решение - полностью выключить сервер, обесточить, проверить, что в ipmi есть кабель на работающий свич, подать питание.
Столкнулся с этой проблемой, весьма неприятно получилось.
UPD Возможно, это был баг, который уже поправили в свежих прошивках. Нет лишней железки для проверки.
UPD2: переключение режимов
Посмотреть какой режим сейчас установлен можно так ipmitool -l -lanplus raw 0x30 0x70 0xc 0 0 0
Default (failover): you will see 00 00
Dedicated LAN: you will see 01 00
Onboard LAN: you will see 01 01
Изменить можно так:
Set Dedicated LAN:
Ipmitool -l -lanplus raw 0x30 0x70 0xc 1 1 0
Set Onboard LAN1
Ipmitool -l -lanplus raw 0x30 0x70 0xc 1 1 1
Set Failover(default setting)
Ipmitool -l -lanplus raw 0x30 0x70 0xc 1 0 0
И рестартануть БМЦ
http://www.supermicro.com/support/faqs/faq.cfm?faq=9848
отсюда
http://www.supermicro.com/manuals/other/Onboard_BMC_IPMI.pdf
LAN Interface
This feature allows the user to select which port to use for IPMI out-of-band communication.
• The default setting is Failover, which will allow IPMI to be connected from either
the shared LAN port (LAN1/eth0) or the dedicated IPMI LAN port. Precedence
is given to dedicated LAN port over the shared LAN port.
• Select "Dedicated LAN" for IPMI to connect through the IPMI Dedicated LAN
port at all time.
• Select "Shared LAN" for IPMI to connect through the LAN1 port on the board
Переключение:
web-интерфейс: Configuration->Lan Select->Dedicated LAN
В IPMIView: на вкладке BMC Setting.
Проверил работу на подручной микре: режим failover, запустил пинг и вынул патчкорд из ipmi-интерфейса. Потерялся 1 пакет, но дальше пинги снова пошли. Поставил патчкорд назад, немного подождал, вынул кабель из lan1 - ни одного пакета не потерялось, значит переключило назад.
НО! говорят, есть особенность: если подать напряжение на сервер, в который сетевые кабели пока не воткнуты (или перезагрузили стойку и свич пока грузится, погасив все порты) -- независимо от выставленного режима ipmi будет работать только на lan1. ipmitool bmc reset cold не поможет. Решение - полностью выключить сервер, обесточить, проверить, что в ipmi есть кабель на работающий свич, подать питание.
Столкнулся с этой проблемой, весьма неприятно получилось.
UPD Возможно, это был баг, который уже поправили в свежих прошивках. Нет лишней железки для проверки.
UPD2: переключение режимов
Посмотреть какой режим сейчас установлен можно так ipmitool -l -lanplus raw 0x30 0x70 0xc 0 0 0
Default (failover): you will see 00 00
Dedicated LAN: you will see 01 00
Onboard LAN: you will see 01 01
Изменить можно так:
Set Dedicated LAN:
Ipmitool -l -lanplus raw 0x30 0x70 0xc 1 1 0
Set Onboard LAN1
Ipmitool -l -lanplus raw 0x30 0x70 0xc 1 1 1
Set Failover(default setting)
Ipmitool -l -lanplus raw 0x30 0x70 0xc 1 0 0
И рестартануть БМЦ
http://www.supermicro.com/support/faqs/faq.cfm?faq=9848
отсюда
среда, 7 сентября 2011 г.
Подключаем новый сервер c ipmi
Настраивал новую плату с ipmi (X8SI6-F), там есть ipmi
Подключил к сети. Штатно оно получит адрес по dhcp, но можно задать адрес в биосе. Изменять настройки можно или с диска (не проверял, возможно надо в /makedisk/makedisk.exe сделать загрузочный диск), или поставить OpenIPMI (в биосе нашёл только изменение айпи, но не пользователей), через ipmicfg, или через IPMI View. Если это делать удалённо - логин-пароль:
ADMIN:ADMIN
Через OpenIPMI - после установки появится ipmitool, про настройку сети через него есть у меня в заметках. С добавлением пользователя - копать в сторону
# ipmitool user list
ID Name Enabled Callin Link Auth IPMI Msg Channel Priv Limit
2 ADMIN false true false false Unknown (0x00)
# ipmitool user
User Commands: summary [<channel number>]
list [<channel number>]
set name <user id> <username>
set password <user id> [<password>]
disable <user id>
enable <user id>
priv <user id> <privilege level> [<channel number>]
test <user id> <16|20> [<password]>
Впрочем, можно получить
# ipmitool lan print 1
Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory
Get Channel Info command failed
Не загрузился ipmi-модуль.
# modprobe ipmi_devintf
Почему оно не грузится автоматом (как во фре), непонятно.
Можно добавить ipmievd (из OpenIPMI) в загрузку - ipmievd - IPMI event daemon for sending events to syslog
PS Неплохой обзор этой платы
http://www.servethehome.com/supermicro-x8si6-f-motherboard-review-including-onboard-lsi-sas-2008-controller/
Подключил к сети. Штатно оно получит адрес по dhcp, но можно задать адрес в биосе. Изменять настройки можно или с диска (не проверял, возможно надо в /makedisk/makedisk.exe сделать загрузочный диск), или поставить OpenIPMI (в биосе нашёл только изменение айпи, но не пользователей), через ipmicfg, или через IPMI View. Если это делать удалённо - логин-пароль:
ADMIN:ADMIN
Через OpenIPMI - после установки появится ipmitool, про настройку сети через него есть у меня в заметках. С добавлением пользователя - копать в сторону
# ipmitool user list
ID Name Enabled Callin Link Auth IPMI Msg Channel Priv Limit
2 ADMIN false true false false Unknown (0x00)
# ipmitool user
User Commands: summary [<channel number>]
list [<channel number>]
set name <user id> <username>
set password <user id> [<password>]
disable <user id>
enable <user id>
priv <user id> <privilege level> [<channel number>]
test <user id> <16|20> [<password]>
Впрочем, можно получить
# ipmitool lan print 1
Could not open device at /dev/ipmi0 or /dev/ipmi/0 or /dev/ipmidev/0: No such file or directory
Get Channel Info command failed
Не загрузился ipmi-модуль.
# modprobe ipmi_devintf
Почему оно не грузится автоматом (как во фре), непонятно.
Можно добавить ipmievd (из OpenIPMI) в загрузку - ipmievd - IPMI event daemon for sending events to syslog
PS Неплохой обзор этой платы
http://www.servethehome.com/supermicro-x8si6-f-motherboard-review-including-onboard-lsi-sas-2008-controller/
пятница, 2 сентября 2011 г.
SATA/SAS контроллеры
http://blog.zorinaq.com/?e=10
From 16 to 2 ports: Ideal SATA/SAS Controllers for ZFS & Linux MD RAID
http://forum.ixbt.com/topic.cgi?id=11:35147
SATA/SAS/RAID-контроллеры для дома и офиса. Выбор и нюансы использования (FAQ)
http://forum.ixbt.com/topic.cgi?id=11:35388
Порекомендуйте дешевый но "сердитый" контроллер SATA150 (PCI 2.2)
From 16 to 2 ports: Ideal SATA/SAS Controllers for ZFS & Linux MD RAID
http://forum.ixbt.com/topic.cgi?id=11:35147
SATA/SAS/RAID-контроллеры для дома и офиса. Выбор и нюансы использования (FAQ)
http://forum.ixbt.com/topic.cgi?id=11:35388
Порекомендуйте дешевый но "сердитый" контроллер SATA150 (PCI 2.2)
вторник, 30 августа 2011 г.
Обновление пакетами: что делать, если сломали перл
Решили поставить/обновить например glib? Если обновлять пакетами (например portinstall -PP devel/glib20), можно увидеть такое:
---> Checking for the latest package of 'devel/glib20'
---> Fetching the package(s) for 'glib-2.28.8' (devel/glib20)
---> Fetching glib-2.28.8
/var/tmp/portupgradetCmzSZ97/glib-2.28.8.tbz 100% of 3095 kB 724 kBps
---> Downloaded as glib-2.28.8.tbz
---> Identifying the package /var/tmp/portupgradetCmzSZ97/glib-2.28.8.tbz
---> Saved as /usr/ports/packages/All/glib-2.28.8.tbz
---> Found a package of 'devel/glib20': /usr/ports/packages/All/glib-2.28.8.tbz (glib-2.28.8)
---> Located a package version 2.28.8 (/usr/ports/packages/All/glib-2.28.8.tbz)
---> Installing 'glib-2.28.8' from a package
---> Installing lang/perl5.12 as dependency required by glib-2.28.8
---> Checking for the latest package of 'lang/perl5.12'
---> Fetching the package(s) for 'perl-5.12.4_1' (lang/perl5.12)
---> Fetching perl-5.12.4_1
/var/tmp/portupgradeyshhUlQo/perl-5.12.4_1.tbz100% of 14 MB 986 kBps 00m00s
---> Downloaded as perl-5.12.4_1.tbz
---> Identifying the package /var/tmp/portupgradeyshhUlQo/perl-5.12.4_1.tbz
---> Saved as /usr/ports/packages/All/perl-5.12.4_1.tbz
---> Found a package of 'lang/perl5.12': /usr/ports/packages/All/perl-5.12.4_1.tbz (perl-5.12.4_1)
---> Located a package version 5.12.4_1 (/usr/ports/packages/All/perl-5.12.4_1.tbz)
---> Installing 'perl-5.12.4_1' from a package
---> Installing the new version via the package
pkg_add: package 'perl-5.12.4_1' conflicts with perl-5.10.1_3
pkg_add: -f specified; proceeding anyway
Removing stale symlinks from /usr/bin...
Removing /usr/bin/perl
Removing /usr/bin/perl5
Done.
Creating various symlinks in /usr/bin...
Symlinking /usr/local/bin/perl5.12.4 to /usr/bin/perl
Symlinking /usr/local/bin/perl5.12.4 to /usr/bin/perl5
Done.
Cleaning up /etc/make.conf... Done.
Spamming /etc/make.conf... Done.
Cleaning up /etc/manpath.config... Done.
Spamming /etc/manpath.config... Done.
Первое - НЕ ПАНИКОВАТЬ! Не пытаться срочно переустановить старый перл и так далее. Он на месте и полностью рабочий, и чинится за минуту.
1) Узнать старую версию перла
pkg_info |grep perl-5
Теперь для каждого смотрим информацию о зависимостях (Required by:)
pkg_info perl-5.10.1_3
У которого их много - это наша старая версия.
2) восстановить симлинки
cd /usr/bin/
unlink perl*
ln -s /usr/local/bin/perl5.10.1 perl
ln -s /usr/local/bin/perl5.10.1 perl5
На самом деле, надо ещё поправить: в /usr/local/bin перезаписывается perl и perl5, причём perl5 симлинк, а вот perl - файл.
rm /usr/local/bin/perl
unlink /usr/local/bin/perl5
cp /usr/local/bin/perl5.10.1 /usr/local/bin/perl
ln -s /usr/local/bin/perl5.10.1 /usr/local/bin/perl5
vi /etc/make.conf
исправляем версию перла..
vi /etc/manpath.config
тоже самое
Всё, перл вернули назад.
---> Checking for the latest package of 'devel/glib20'
---> Fetching the package(s) for 'glib-2.28.8' (devel/glib20)
---> Fetching glib-2.28.8
/var/tmp/portupgradetCmzSZ97/glib-2.28.8.tbz 100% of 3095 kB 724 kBps
---> Downloaded as glib-2.28.8.tbz
---> Identifying the package /var/tmp/portupgradetCmzSZ97/glib-2.28.8.tbz
---> Saved as /usr/ports/packages/All/glib-2.28.8.tbz
---> Found a package of 'devel/glib20': /usr/ports/packages/All/glib-2.28.8.tbz (glib-2.28.8)
---> Located a package version 2.28.8 (/usr/ports/packages/All/glib-2.28.8.tbz)
---> Installing 'glib-2.28.8' from a package
---> Installing lang/perl5.12 as dependency required by glib-2.28.8
---> Checking for the latest package of 'lang/perl5.12'
---> Fetching the package(s) for 'perl-5.12.4_1' (lang/perl5.12)
---> Fetching perl-5.12.4_1
/var/tmp/portupgradeyshhUlQo/perl-5.12.4_1.tbz100% of 14 MB 986 kBps 00m00s
---> Downloaded as perl-5.12.4_1.tbz
---> Identifying the package /var/tmp/portupgradeyshhUlQo/perl-5.12.4_1.tbz
---> Saved as /usr/ports/packages/All/perl-5.12.4_1.tbz
---> Found a package of 'lang/perl5.12': /usr/ports/packages/All/perl-5.12.4_1.tbz (perl-5.12.4_1)
---> Located a package version 5.12.4_1 (/usr/ports/packages/All/perl-5.12.4_1.tbz)
---> Installing 'perl-5.12.4_1' from a package
---> Installing the new version via the package
pkg_add: package 'perl-5.12.4_1' conflicts with perl-5.10.1_3
pkg_add: -f specified; proceeding anyway
Removing stale symlinks from /usr/bin...
Removing /usr/bin/perl
Removing /usr/bin/perl5
Done.
Creating various symlinks in /usr/bin...
Symlinking /usr/local/bin/perl5.12.4 to /usr/bin/perl
Symlinking /usr/local/bin/perl5.12.4 to /usr/bin/perl5
Done.
Cleaning up /etc/make.conf... Done.
Spamming /etc/make.conf... Done.
Cleaning up /etc/manpath.config... Done.
Spamming /etc/manpath.config... Done.
Первое - НЕ ПАНИКОВАТЬ! Не пытаться срочно переустановить старый перл и так далее. Он на месте и полностью рабочий, и чинится за минуту.
1) Узнать старую версию перла
pkg_info |grep perl-5
Теперь для каждого смотрим информацию о зависимостях (Required by:)
pkg_info perl-5.10.1_3
У которого их много - это наша старая версия.
2) восстановить симлинки
cd /usr/bin/
unlink perl*
ln -s /usr/local/bin/perl5.10.1 perl
ln -s /usr/local/bin/perl5.10.1 perl5
На самом деле, надо ещё поправить: в /usr/local/bin перезаписывается perl и perl5, причём perl5 симлинк, а вот perl - файл.
rm /usr/local/bin/perl
unlink /usr/local/bin/perl5
cp /usr/local/bin/perl5.10.1 /usr/local/bin/perl
ln -s /usr/local/bin/perl5.10.1 /usr/local/bin/perl5
vi /etc/make.conf
исправляем версию перла..
vi /etc/manpath.config
тоже самое
Всё, перл вернули назад.
четверг, 25 августа 2011 г.
Легко эксплуатируемая DoS-уязвимость в HTTP-сервере Apache
В http-сервере Apache найдена опасная уязвимость, позволяющая вызвать отказ в обслуживании через исчерпание всей доступной памяти. Опасность уязвимости усугубляется тем, что для её осуществления уже доступен готовый эксплоит, позволяющий совершить атаку с одной машины с генерацией минимального трафика. При отсутствия отдельных лимитов на размер выделяемой Apache памяти, после выполнения эксплоита наблюдается полное исчерпание памяти с уходом в бесконечный своппинг без возможности зайти в консоль.
Проблема вызвана ошибкой в реализации поддержки загрузки части файла по указанному диапазону (например, после обрыва соединения можно запросить загрузку начиная с определенной позиции). Ошибка связана с тем, что при обработке запроса, содержащего большое число диапазонов (например, "Range:bytes=0-,5-1,5-2,5-3,...,5-1000"), расходуется слишком много памяти. Для осуществления удачной атаки достаточно отправить около 50 подобных запросов на сервер.
Проблема присутствует в Apache 2.2.x, включая последний релиз 2.2.19. Исправление пока доступно в виде патча. Также имеется несколько способов временной защиты, не требующих пересборки Apache. Например, можно принудительно очищать заголовок Range при помощи mod_header ("RequestHeader unset Range") или блокировать длинные последовательности Range через mod_rewrite:
# Вариант 1:
RewriteEngine On
RewriteCond %{HTTP:Range} bytes=0-[0-9]+, [NC,OR]
RewriteCond %{HTTP:Range} bytes=([0-9-],){4,} [NC,OR]
RewriteCond %{HTTP:Range} bytes=[0-9,-]+,0-(,|$) [NC]
RewriteRule .? http://%{SERVER_NAME}/ [NS,L,F]
# Вариант 2:
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(HEAD|GET) [NC]
RewriteCond %{HTTP:Range} ([0-9]*-[0-9]*)(\s*,\s*[0-9]*-[0-9]*)+
RewriteRule .* - [F]
# Вариант 3:
RewriteEngine On
RewriteCond %{HTTP:Range} bytes=0-.* [NC]
RewriteRule .? http://%{SERVER_NAME}/ [R=302,L]
http://www.opennet.ru/opennews/art.shtml?num=31582
Проверялка
http://seclists.org/fulldisclosure/2011/Aug/att-175/killapache_pl.bin
Проблема вызвана ошибкой в реализации поддержки загрузки части файла по указанному диапазону (например, после обрыва соединения можно запросить загрузку начиная с определенной позиции). Ошибка связана с тем, что при обработке запроса, содержащего большое число диапазонов (например, "Range:bytes=0-,5-1,5-2,5-3,...,5-1000"), расходуется слишком много памяти. Для осуществления удачной атаки достаточно отправить около 50 подобных запросов на сервер.
Проблема присутствует в Apache 2.2.x, включая последний релиз 2.2.19. Исправление пока доступно в виде патча. Также имеется несколько способов временной защиты, не требующих пересборки Apache. Например, можно принудительно очищать заголовок Range при помощи mod_header ("RequestHeader unset Range") или блокировать длинные последовательности Range через mod_rewrite:
# Вариант 1:
RewriteEngine On
RewriteCond %{HTTP:Range} bytes=0-[0-9]+, [NC,OR]
RewriteCond %{HTTP:Range} bytes=([0-9-],){4,} [NC,OR]
RewriteCond %{HTTP:Range} bytes=[0-9,-]+,0-(,|$) [NC]
RewriteRule .? http://%{SERVER_NAME}/ [NS,L,F]
# Вариант 2:
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(HEAD|GET) [NC]
RewriteCond %{HTTP:Range} ([0-9]*-[0-9]*)(\s*,\s*[0-9]*-[0-9]*)+
RewriteRule .* - [F]
# Вариант 3:
RewriteEngine On
RewriteCond %{HTTP:Range} bytes=0-.* [NC]
RewriteRule .? http://%{SERVER_NAME}/ [R=302,L]
http://www.opennet.ru/opennews/art.shtml?num=31582
Проверялка
http://seclists.org/fulldisclosure/2011/Aug/att-175/killapache_pl.bin
apache+nginx: убираем порт из адреса при редиректе
Столкнулся на одном проекте с багой: после 301 редиректа адрес становился вида site.ru:8080/newaddr
Оказалось, в данном случае в конфиге был прописан
UseCanonicalName On
Закомментировал - заработало как надо.
Если что - есть вариант прописать в конфиге апача после VirtualHost
Port 80
"Появление порта 8080 в адреса вызвано работой модуля Apache mod_dir. Правильное решение проблемы - добавление Port 80 в конфигурацию Apache.
Установка же header в nginx не всегда решает проблему - некоторые сайты генерируют адрес с использованием директивы Port, которая, если её не выставить, остаётся 8080."
http://forum.nic.ru/archive/index.php/t-197.html
ЗЫ
Не забываем проверить и остальные части конфигов, они такие:
nginx:
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
#proxy_redirect http://${SITENAME}:${PORT}/ http://${SITENAME}/;
...
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
apache - mod_rpaf:
LoadModule rpaf_module libexec/apache22/mod_rpaf.so
RPAFproxy_ips 127.0.0.1 1.2.3.4
RPAFEnable On
RPAFheader X-Forwarded-For
#RPAFsethostname On
Не могу упомянуть занятную статью
http://greenmice.info/ru/node/116
Оказалось, в данном случае в конфиге был прописан
UseCanonicalName On
Закомментировал - заработало как надо.
Если что - есть вариант прописать в конфиге апача после VirtualHost
Port 80
"Появление порта 8080 в адреса вызвано работой модуля Apache mod_dir. Правильное решение проблемы - добавление Port 80 в конфигурацию Apache.
Установка же header в nginx не всегда решает проблему - некоторые сайты генерируют адрес с использованием директивы Port, которая, если её не выставить, остаётся 8080."
http://forum.nic.ru/archive/index.php/t-197.html
ЗЫ
Не забываем проверить и остальные части конфигов, они такие:
nginx:
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
#proxy_redirect http://${SITENAME}:${PORT}/ http://${SITENAME}/;
...
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
apache - mod_rpaf:
LoadModule rpaf_module libexec/apache22/mod_rpaf.so
RPAFproxy_ips 127.0.0.1 1.2.3.4
RPAFEnable On
RPAFheader X-Forwarded-For
#RPAFsethostname On
Не могу упомянуть занятную статью
http://greenmice.info/ru/node/116
понедельник, 22 августа 2011 г.
Новая редакция закона о ПД: нужно ли нам бояться?
Новая редакция закона о ПД: нужно ли нам бояться?
Срочно переезжаем в «облако»: частые ошибки
Защита в виртуальной среде: чеклист угроз
Запись вебинара «Изменения в законе о защите персональных данных»
http://connect.webinar.ru/join.php?id=9572bb6eac50b088cbb53e77ac5dbb4c&afid=&pw=&r=c4ca4238a0b923820dcc509a6f75849b
Срочно переезжаем в «облако»: частые ошибки
Защита в виртуальной среде: чеклист угроз
Запись вебинара «Изменения в законе о защите персональных данных»
http://connect.webinar.ru/join.php?id=9572bb6eac50b088cbb53e77ac5dbb4c&afid=&pw=&r=c4ca4238a0b923820dcc509a6f75849b
Об ублюдочности cisco NAT
Задача: есть мобильные пользователи, которые ходят со своими ноутами и могут работать с сетевыми сервисами как из дома, так и из офиса. Для этого адрес должен быть внешний, вида office.site.ru
Причём вариант service.office.site.ru рассматривается лишь как крайний случай.
Я могу решить эту задачу на freebsd, не так давно было на базе kerio, это легко сделать за 15 минут гугления на iptables...
Но я уже месяц не могу это сделать на циске. Нет, может качество железа у них на уровне, и их гибкостью многие восторгаются... Но эта гибкость появляется несколько в других областях. А по данной проблеме спросил 5 опытных цисководов - все долго гуглили, в итоге разводили руками и советовали делать через service.office.site.ru и локальный днс (серверов много - "по сервису на сервер", а благодаря виртуализации железа при этом много не надо).
В данном случае через днс получается как раз "через жопу": основной домен лежит снаружи и по многим причинам внутри не будет, создать view никто там не даст. Но в инете "спецы" описывают данное решение как единственный "правильный" путь, потому что никак не могут признать отстойность ната в цисках и отсутствия банальных snat и dnat штатно, большая сложность создания нескольких нат-правил...
пример на opennet
Как вариант, заказал второй айпи, прописал его как secondary... Из мира всё работает по обоим айпи, а вот из локалки - нет (через один внешний айпи на другой).
Есть подозрение, что задача не через днс решается только с железом на десяток-другой килобаксов.
Также можно почитать про NAT Order of Operation
http://www.cisco.com/en/US/tech/tk648/tk361/technologies_tech_note09186a0080133ddd.shtml
https://learningnetwork.cisco.com/docs/DOC-8009
https://learningnetwork.cisco.com/thread/30633
Причём вариант service.office.site.ru рассматривается лишь как крайний случай.
Я могу решить эту задачу на freebsd, не так давно было на базе kerio, это легко сделать за 15 минут гугления на iptables...
Но я уже месяц не могу это сделать на циске. Нет, может качество железа у них на уровне, и их гибкостью многие восторгаются... Но эта гибкость появляется несколько в других областях. А по данной проблеме спросил 5 опытных цисководов - все долго гуглили, в итоге разводили руками и советовали делать через service.office.site.ru и локальный днс (серверов много - "по сервису на сервер", а благодаря виртуализации железа при этом много не надо).
В данном случае через днс получается как раз "через жопу": основной домен лежит снаружи и по многим причинам внутри не будет, создать view никто там не даст. Но в инете "спецы" описывают данное решение как единственный "правильный" путь, потому что никак не могут признать отстойность ната в цисках и отсутствия банальных snat и dnat штатно, большая сложность создания нескольких нат-правил...
пример на opennet
Как вариант, заказал второй айпи, прописал его как secondary... Из мира всё работает по обоим айпи, а вот из локалки - нет (через один внешний айпи на другой).
Есть подозрение, что задача не через днс решается только с железом на десяток-другой килобаксов.
Также можно почитать про NAT Order of Operation
http://www.cisco.com/en/US/tech/tk648/tk361/technologies_tech_note09186a0080133ddd.shtml
https://learningnetwork.cisco.com/docs/DOC-8009
https://learningnetwork.cisco.com/thread/30633
воскресенье, 21 августа 2011 г.
Немного про MODX Revolution
Небольшая подборка ссылок
С MODx Evolution уже доводилось общаться - неплохая цмс. Лучше всяких жумл и особенно юми. В чём-то даже удобнее битрикса. Хотя пока не было больших проектов на модх :) На битриксе были, но там свои нюансы...
Быстрый старт в MODX Revolution
http://habrahabr.ru/blogs/modx/116614/
И далее в "похожие посты".
Про "встроенная консоль" - в данном варианте вещь весьма уязвимая (читать комменты). Надо делать через "пишем в файл - запускаем штатными методами", избегая eval()
Ну и основная ветка там - http://habrahabr.ru/blogs/modx/
С MODx Evolution уже доводилось общаться - неплохая цмс. Лучше всяких жумл и особенно юми. В чём-то даже удобнее битрикса. Хотя пока не было больших проектов на модх :) На битриксе были, но там свои нюансы...
Быстрый старт в MODX Revolution
http://habrahabr.ru/blogs/modx/116614/
И далее в "похожие посты".
Про "встроенная консоль" - в данном варианте вещь весьма уязвимая (читать комменты). Надо делать через "пишем в файл - запускаем штатными методами", избегая eval()
Ну и основная ветка там - http://habrahabr.ru/blogs/modx/
среда, 17 августа 2011 г.
Подключаем внешнее хранилище к XenServer по iSCSI
Само хранилище будет лежать на хосте с CentOS.
Для начала, надо понять терминологию.
Инициатор (initiator) — iSCSI-клиент.
Таргет — iSCSI-сервер; предоставляет доступ к своим устройствам по iSCSI.
Обнаружение (discovery) — процесс, в ходе которого инициатору становятся известны доступные ему таргеты.
Существующие на сегодняшний день методы обнаружения:
iSNS (Internet Storage Name Service);
SendTargets — таргеты обнаруживаются через специальный адрес обнаружения (discovery-address);
Использование протокола SLP (Service Location Protocol);
Статическое указание.
Именование в iSCSI
IQN (iSCSI qualified name) – имя длиной до 255 символов в следующем формате:
iqn.<year-mo>.<reversed_domain_name>:<unique_name>
Здесь:
<year-mo> это год (year) и месяц (mo), когда был зарегистрирован домен;
<reversed_domain_name> официальное имя домена, записанное в обратном порядке;
<unique_name> это произвольное имя, например, имя сервера.
Пример: iqn.1998-01.com.mycompany:myserver.
EUI (extended unique identifier) – Represents the eui. prefix followed by the
16‐character name. The name includes 24 bits for company name assigned by the IEEE and 40 bits for a unique ID such as a serial number. Например, eui.0123456789ABCDEF.
http://xgu.ru/wiki/iSCSI
Вот так вот хитро и непонятно.
Варианта штатно 2:
netbsd-iscsi.x86_64 : User-space implementation of iSCSI target from NetBSD
scsi-target-utils.x86_64 : The SCSI target daemon and utility programs
Плюс уже стоит
iscsid - Open-iSCSI daemon
netbsd - userspace, то есть медленно и грузит цп.
Есть варианты вроде компиляции самому, например Установка iSCSI-target на CentOS, но тогда уж надо собирать open-scsi c iSER.. В общем, будем разбираться с scsi-target-utils
"Хранилище"
Ставим пакет.
# yum install -y scsi-target-utils.x86_64
Конфиг лежит в (!) /etc/tgt/target.conf
Впрочем, есть вариант "напрямую" через tgtadm. Попробуем.
# tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2000-01.ru.spb.webmaster:disk1
# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /mnt/1t/xen/iSCSI/iscsi-target0
Для теста я поставил в заранее созданный файл на 4Gb
# ls -la /mnt/1t/xen/iSCSI/iscsi-target0
-rw-r--r-- 1 root root 4294967808 Sep 29 2010 /mnt/1t/xen/iSCSI/iscsi-target0
# tgtadm --mode target --op show
Target 1: iqn.2000-01.ru.spb.www:disk1
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB
Online: Yes
Removable media: No
Backing store type: null
Backing store path: None
Backing store flags:
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 4295 MB
Online: Yes
Removable media: No
Backing store type: rdwr
Backing store path: /mnt/1t/xen/iSCSI/iscsi-target0
Backing store flags:
Account information:
ACL information:
Теперь пробуем подключить этот лун в хенсервере. Вводим имя хоста, Discover IQNs - находит. Делаем Discover LUNs - получаем "The SR failed to complete the operation".
Дело в том, что у нас просто "нет прав", что можно проверить с другой машины в сети
# iscsiadm -m discovery -t st -p 192.168.2.15
#
Дадим права.
# tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
Снова с другой машины:
# iscsiadm -m discovery -t st -p 192.168.2.15
192.168.2.15:3260,1 iqn.2000-01.ru.spb.www:disk1
Отлично.
Снова делаем Discover LUNs, ждём секунд 10, радуемся.
Finish, да форматировать
Появился диск, можно на него ставить систему.
Вообще, правильнее давать не файлы, а LV-разделы например. Для этого в -b указывается путь в /dev
-b /dev/mapper/iscsi_vg-iscsi_300Gb
И ещё сюрприз.
Перезапускаем сервис... и все таргеты пропадают. Установка 777 на конфиг файл и рабочую директорию не помогает.
Все операции выше уместились в 3 строки
<target iqn.2000-01.ru.spb.www:disk1>
backing-store /mnt/1t/xen/iSCSI/iscsi-target0
</target>
Некоторые вещи можно делать через
tgt-admin
tgt-setup-lun
например, tgt-admin -s
аналог tgtadm --mode target --op show
Линки
http://xgu.ru/wiki/iSCSI
http://markelov.blogspot.com/2008/11/iscsi-target-initiator-rhelfedora.html
http://daevy.uzps.mh.ru/?p=512
http://redhat-club.org/forum/viewtopic.php?id=8491
Для начала, надо понять терминологию.
Инициатор (initiator) — iSCSI-клиент.
Таргет — iSCSI-сервер; предоставляет доступ к своим устройствам по iSCSI.
Обнаружение (discovery) — процесс, в ходе которого инициатору становятся известны доступные ему таргеты.
Существующие на сегодняшний день методы обнаружения:
iSNS (Internet Storage Name Service);
SendTargets — таргеты обнаруживаются через специальный адрес обнаружения (discovery-address);
Использование протокола SLP (Service Location Protocol);
Статическое указание.
Именование в iSCSI
IQN (iSCSI qualified name) – имя длиной до 255 символов в следующем формате:
iqn.<year-mo>.<reversed_domain_name>:<unique_name>
Здесь:
<year-mo> это год (year) и месяц (mo), когда был зарегистрирован домен;
<reversed_domain_name> официальное имя домена, записанное в обратном порядке;
<unique_name> это произвольное имя, например, имя сервера.
Пример: iqn.1998-01.com.mycompany:myserver.
EUI (extended unique identifier) – Represents the eui. prefix followed by the
16‐character name. The name includes 24 bits for company name assigned by the IEEE and 40 bits for a unique ID such as a serial number. Например, eui.0123456789ABCDEF.
http://xgu.ru/wiki/iSCSI
Вот так вот хитро и непонятно.
Варианта штатно 2:
netbsd-iscsi.x86_64 : User-space implementation of iSCSI target from NetBSD
scsi-target-utils.x86_64 : The SCSI target daemon and utility programs
Плюс уже стоит
iscsid - Open-iSCSI daemon
netbsd - userspace, то есть медленно и грузит цп.
Есть варианты вроде компиляции самому, например Установка iSCSI-target на CentOS, но тогда уж надо собирать open-scsi c iSER.. В общем, будем разбираться с scsi-target-utils
"Хранилище"
Ставим пакет.
# yum install -y scsi-target-utils.x86_64
Конфиг лежит в (!) /etc/tgt/target.conf
Впрочем, есть вариант "напрямую" через tgtadm. Попробуем.
# tgtadm --lld iscsi --op new --mode target --tid 1 -T iqn.2000-01.ru.spb.webmaster:disk1
# tgtadm --lld iscsi --op new --mode logicalunit --tid 1 --lun 1 -b /mnt/1t/xen/iSCSI/iscsi-target0
Для теста я поставил в заранее созданный файл на 4Gb
# ls -la /mnt/1t/xen/iSCSI/iscsi-target0
-rw-r--r-- 1 root root 4294967808 Sep 29 2010 /mnt/1t/xen/iSCSI/iscsi-target0
# tgtadm --mode target --op show
Target 1: iqn.2000-01.ru.spb.www:disk1
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB
Online: Yes
Removable media: No
Backing store type: null
Backing store path: None
Backing store flags:
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 4295 MB
Online: Yes
Removable media: No
Backing store type: rdwr
Backing store path: /mnt/1t/xen/iSCSI/iscsi-target0
Backing store flags:
Account information:
ACL information:
Теперь пробуем подключить этот лун в хенсервере. Вводим имя хоста, Discover IQNs - находит. Делаем Discover LUNs - получаем "The SR failed to complete the operation".
Дело в том, что у нас просто "нет прав", что можно проверить с другой машины в сети
# iscsiadm -m discovery -t st -p 192.168.2.15
#
Дадим права.
# tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
Снова с другой машины:
# iscsiadm -m discovery -t st -p 192.168.2.15
192.168.2.15:3260,1 iqn.2000-01.ru.spb.www:disk1
Отлично.
Снова делаем Discover LUNs, ждём секунд 10, радуемся.
Finish, да форматировать
Появился диск, можно на него ставить систему.
Вообще, правильнее давать не файлы, а LV-разделы например. Для этого в -b указывается путь в /dev
-b /dev/mapper/iscsi_vg-iscsi_300Gb
И ещё сюрприз.
Перезапускаем сервис... и все таргеты пропадают. Установка 777 на конфиг файл и рабочую директорию не помогает.
Все операции выше уместились в 3 строки
<target iqn.2000-01.ru.spb.www:disk1>
backing-store /mnt/1t/xen/iSCSI/iscsi-target0
</target>
Некоторые вещи можно делать через
tgt-admin
tgt-setup-lun
например, tgt-admin -s
аналог tgtadm --mode target --op show
Линки
http://xgu.ru/wiki/iSCSI
http://markelov.blogspot.com/2008/11/iscsi-target-initiator-rhelfedora.html
http://daevy.uzps.mh.ru/?p=512
http://redhat-club.org/forum/viewtopic.php?id=8491
пятница, 12 августа 2011 г.
LSi 2008 и 2108
1) 2108 - чип для "полноценных" RAID-контроллеров с 512MB кэшом и RAID 0, 1, 5, 6, 10, 50, 60. У LSI появилась еще более производительная версия - 2208, но используется пока только в собственных контроллерах - 9265/9285.
2) 2008 - используется, в основном в HBA, т.к. не имеет аппаратного XOR-процессора. RAID-контроллеры на базе него имеют серьезные ограничения по числу массивов, дисков в массиве и т.д.
Контроллеры на базе 2008 могут работать с одним из трех стеков, в зависимости от прошивки:
iMR (integrated MegaRAID) - стек с поддержкой RAID-5, настраивается через LSI WebBIOS (Ctrl+M) или MSM.
iR (intergrated RAID) - RAID 0, 1, 1E, 10, настраивается через mptbios (Ctrl+C)
IT (Initiator-taregt) - режим обычного HBA.
Прошить firmware IT или iR можно на любой контроллер Supermicro на базе LSI 2008, а вот iMR - только на USAS2-L8iR или набортный с ключом SAS2-RAID5-KEY).
Все контроллеры на базе 2108 не могут работать как HBA.
http://true-system.blogspot.com/2011/04/oem-sas-supermicro.html
2) 2008 - используется, в основном в HBA, т.к. не имеет аппаратного XOR-процессора. RAID-контроллеры на базе него имеют серьезные ограничения по числу массивов, дисков в массиве и т.д.
Контроллеры на базе 2008 могут работать с одним из трех стеков, в зависимости от прошивки:
iMR (integrated MegaRAID) - стек с поддержкой RAID-5, настраивается через LSI WebBIOS (Ctrl+M) или MSM.
iR (intergrated RAID) - RAID 0, 1, 1E, 10, настраивается через mptbios (Ctrl+C)
IT (Initiator-taregt) - режим обычного HBA.
Прошить firmware IT или iR можно на любой контроллер Supermicro на базе LSI 2008, а вот iMR - только на USAS2-L8iR или набортный с ключом SAS2-RAID5-KEY).
Все контроллеры на базе 2108 не могут работать как HBA.
http://true-system.blogspot.com/2011/04/oem-sas-supermicro.html
Подписаться на:
Сообщения (Atom)