Munin мониторинг серверов

Доброе время суток.
На днях задался вопросом о мониторинге сервера. Перечитал много информации о различных системах мониторинга, и по моему вкусу пришлась одна достаточно хорошая и многофункциональная система мониторинга под названием Munin с достаточно большим списком плагинов и красивыми цветными графика.


Читать дальше →

Obexftp с поддержкой кириллицы

Пару дней назад встала задача передачи файлов по bluetooth в Ubuntu 10.10 с компьютера на различные устройства. Выполнять передачу файлов нужно было только фоном (без GUI), писать свой бинарник было нерентабельно, поэтому выбор пал на obexftp. Протестировав его пару минут, столкнулся с проблемой кодировки — имена файлов, содержащие символы кириллицы, приходили кракозябрами.

Погуглив, нашел патч, исправляющий проблемы с кодировкой с помощью iconv. Протестировав на паре файлов, все было замечательно, пока программа не стала выдавать segfault при начале приема файла или при окончании загрузки файла (только с кириллицей).

К примеру, при передачи файла с именем «Сосны.mp3» происходил segfault программы, хотя если написать «Сосны 1.mp3», то файл передавался успешно.

Пришлось погружаться в дебаггинг…

Читать дальше →

Работа с изображениями JPEG

Данная статья посвящена, как правильно работать с изображениями в формате JPEG. Казалось бы, где здесь могут быть «подводные камни»? Оказывается не все так просто.

Врага надо знать в лицо
Перед тем как начать работать с JPEG, надо его изучить, для этого я рекомендую прочитать статьи о JPEG на сайте Черепанова Александра, в частности, статьи «Режимы сжатия формата JPEG» и «Структура файла, маркеры».

Читать дальше →

Конечные автоматы

Введение


Конечные автоматы являются мощным инструментом для работы. Компиляторы работает на основе конечных автоматов. Любой алгоритм которые вы пишете может быть представлен в виде конечного автомата.

В конечном автомате количесто состояний конечно, а результат его работа определяется по его конченому состоянию (Wikipedia).
Существует несколько видов конечных автоматов:

Читать дальше →

Динамическая маршрутизация по GRE over IPsec туннелям между Cisco и FreeBSD 8.1

Несколько месяцев назад компания, в которой я работаю начала снова расширяться, следствием чего было появление двух новых офисов. Руководством была поставлена задача обеспечить доступ новых сотрудников к серверам компании. Ниже представлено описание того, как я подошел к решению данной задачи, черпая информацию в Google, man-командах FreeBSD и встроенной помощи в Cisco IOS.

Смотрим, что из этого получилось.

Исходные данные и постановка задачи

  1. Три офиса компании, между которыми необходимо настроить связь через общественные сети. Внутри туннелей запустить протокол динамической маршрутизации для обмена маршрутами к локальным сетям.
  2. Между двумя филиалами есть прямой оптоволоконный канал.
  3. Топология должна быть полносвязной, для наличия резервных маршрутов.
  4. Связь с внешним миром обеспечивают: маршрутизаторы Сisco 2821, Сisco 2811, и сервер на базе FreeBSD 8.1. Маршрутизаторы подключены к внешнему миру по Ethernet каналу, а FreeBSD 8.1 через ADSL. В маршрутизаторы вставлены модули Ethernet коммутации на 4ре порта, таким образом шлюзом по умолчанию для подсетей, за которые ответственны маршрутизаторы, является интерфейс Vlan1.
Данные по подсетям:
  • офис A — подсеть 192.168.20.0/24, шлюз 192.168.20.254 (FreeBSD 8.1), внешний адрес A.A.A.A
  • офис B — подсеть 192.168.19.0/24, шлюз 192.168.19.254 (Cisco 2821), внешний адрес B.B.B.B
  • офис C — подсеть 192.168.18.0/24, шлюз 192.168.18.254 (Cisco 2811), внешний адрес C.C.C.C
Итак, между двумя филиалами уже есть прямой оптоволоконный канал, который находится в собственности организации. Таким образом, один канал уже присутствует и практически не нуждается в конфигурировании. Осталось организовать два туннеля: первого (А) с третьим © и второго (В) с третьим © филиалами — через общественные сети (Интернет). Для организации защиты данных туннелей предполагается использовать стандарт IPsec. Раз топология должна быть полносвязной, то встает вопрос правильной маршрутизации данных. Списки доступа для шифрования вместе со статическими маршрутами для этого плохо подходят. Поэтому было решено запустить внутри туннелей протокол динамической маршрутизации. В качестве последнего принято решение использовать OSPF, а для его запуска в туннелях — протокол GRE (Generic Routing Encapsulation). Таким образом, возникла задача построить два GRE-туннеля, защищенных протоколом IPsec.

Читать дальше →

Компиляция mex файлов в matlab с помощью mingw под windows 64 бит

Часто mex файлы в matlab легко компилируются с помощью visual studio и все вроде бы хорошо, но тут вы решаете, что неплохо бы прикрутить что-то из мира свободного кода, и тут получается проще собрать систему с mingw, чем использовать nmake.

Читать дальше →

Нестандартный способ защиты паролей

На самом деле, в том же интернете можно найти множество различных способов защиты паролей, хранящихся в базе (например MySQL). В данном посте же будет рассмотрен тот способ, который мне показался достаточно стойким к взлому.

Немного теории о защите паролей

Очень часто, при написании сайта может возникнуть вопрос — «Как же защитить конфедециальность данных пользователя?». Единого ответа тут быть разумеется не может, но есть ряд способов, применяемых по ситуации. В данном посте мы рассмотрим лишь те, которые подходят для применения непосредственно в самом движке сайта, и мешающие удачливому хакеру, умыкнувшему у нас дамп базы получить пароль от «root» (или administrator, кому как больше нравится), получая тем самым все права и привелегии.

  • Способ №1. Мы можем просто-напросто прогнать пароль через хэш-функцию при регистрации, и затем записать результат в базу. У этого способа есть один недостаток — при использовании распространеного хэш-алгоритма (например md5 или sha 1) хакер может воспользоваться декриптором, который выдаст ему исходный пароль.
  • Способ №2. Никто не мешает нам использовать хэш-алгоритм дважды. То-есть, мы хэшируем по сути хэш. Это значительно усложняет жизнь взломщику, но все равно не дает 100% гарантии.
  • Способ №3. Шифрование с «солью». У этого способа существует множество вариаций, но смысл остается один — во время шифрования помимо исходного пароля используется также и уникальная для каждого пользователя последовательность символов.

Читать дальше →

Тотальный пример использования django-registration и расширения модели User

В интернете есть много разрозненной информации о django-registration и о расширении стандартной модели Users. Однако, тотального примера, которое позволило бы новичку вникнуть как реализовать задуманную им логику регистрации нет. Я попробовал восполнить этот пробел.

Поставим себе следующие техническое задание:
  • Во время регистрации пользователь заполняет дополнительные поля.
  • При отправке формы — вся информация сохраняется в профайле, и на почту высылается письмо с ссылкой для активации.
  • При переходе по ссылке пользователь активирует свою учетную запись, автоматически авторизуется на сайте, и перенаправляется на определенную страницу.
Сразу отметим что по умолчанию django-registration не включает в себя сохранение дополнительных полей, и после активация записи приходится вводить свой логин и пароль для авторизации.

Читать дальше →

Парадокс двух конвертов. Part 2 — C#.

Доброго времени суток!

Сегодня, во времена популяризации покера, актуальными становятся алгоритмы увеличения прибыли при недостаточном количестве информации. Многие занимаются вопросами нахождения наиболее эффективных алгоритмов.
Существует великое множество вероятностных задач и парадоксов, но особое место среди них занимает парадокс (задача) о двух конвертах.
Теоретические аспекты очень подробно описаны на википедии, возможные решение предложены на мембране.
Также эта тема уже обсуждалась на Хабре.
Я же предлагаю вашему вниманию реализацию данного парадокса на C#.

Читать дальше →

Проект всей жизни

Здравствуй, дорогой читатель!

Из-за своей специальности я очень часто слышу: «Это проект всей моей жизни» или «Я живу этим проектом». Но как определить, что это за проект — временное помешательство или действительно проект всей жизни?
Читать дальше →