2006/11/30

Xming - X Server для Windows

Чтобы использовать windows-машину в качестве X-терминала, на ней самой необходимо иметь запущенный локальный X-Server. Отличным выбором для таких целей будет Xming.

Варианты использования:

1. У Вас есть удаленный сервер, на котором запущена какая-то графическая оболочка (диспетчер окон). Вам необходимо запустить какое-то приложение, которое имеет графический интерфейс.

Решение:

  • Запустить Xming на вашей Windows-машине
  • Залогиниться с помощью консольного клиента (putty) на Ваш удаленный сервер.
  • С помощью команды DISPLAY=ip_адрес_windows_машины:0.0 указать, куда будет передано изображение
  • Запустить приложение, требующее графической среды (например gnome-calc)

2. У Вас есть локальный сервер, с которым вы хотите работать в терминальном режиме - подсоединяться с компьютера-терминала, логиниться и работать с удаленным рабочим столом.

Решение:

  • Запустить Xming на вашей Windows-машине с помощью XLaunch-wizard с следующей конфигурацией: Display Settings - One Window/Full Screen; Session Type - Open Session via XDMCP.
  • Логиниться в полученном графическом терминале и работать в своё удовольствие.

Ссылки:
  1. Википедия - X Window System
  2. HOW-TO: X11 forwarding с ssh, putty и Xming
  3. Xming
  4. What Is the X Window System
  5. X Window - восполняя пробелы. Часть 1
  6. X Window - восполняя пробелы. Часть 2
  7. X Window - восполняя пробелы. Часть 3

2006/11/21

OpenTSA

Данное описание затрагивает процесс установки "time stamping" сервиса на базе патча к openssl и модуля mod_tsa к http-серверу Apache. Проект открытый, назван OpenTSA и достаточно активно развивается. Итак:

1. Выбранная версия openssl и соответствующий этой версии tsa-патч ставятся полностью по инструкции. Если в процессе сборки не возникло критических ошибок, на warning-сообщения можно не обращать внимания.

2. Apache2 должен быть собран на только что установленном openssl (в данном случае это /usr/local/openssl-0.9.8c):

./configure --prefix=/usr/local/apache2 --enable-ssl --with-ssl=/usr/local/openssl-0.9.8c
make && make install

3. Собрать модуль mod_tsa с помощью apxs из только что установленного Apache:

tar zxf  mod_tsa-xxxxxxxx.tgz
cd mod_tsa
make OPENSSL=/usr/local/openssl-0.9.8c APXS=/opt/apache2/bin/apxs APACHECTL=/opt/apache2/bin/apachectl
make install OPENSSL=/usr/local/openssl-0.9.8c APXS=/opt/apache2/bin/apxs APACHECTL=/opt/apache2/bin/apachectl

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

CREATE TABLE `token` (
`token_id` varchar(40) collate utf8_unicode_ci NOT NULL default '',
`token_date` datetime NOT NULL default '0000-00-00 00:00:00',
`token_pkcs7` blob NOT NULL,
PRIMARY KEY (`token_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

5. Сгенерировать приватный ключ и сертификат на только что собранном openssl, так как он имеет необходимое расширение для сертификатов - Time Stamping.

/usr/local/openssl-0.9.8c/bin
./openssl genrsa -out server.key 2048
./openssl req -key server.key > server.csr

Отдать сгенерированный csr-файл своему CA, получить в ответ сертификат с timestamp-расширением, необходимый для функционирования модуля mod_tsa.

6. Добавить в конфигурацию Apache описание модуля и запустить Apache:

LoadModule tsa_module         modules/mod_tsa.so


SetHandler tsa
Order allow,deny
Allow from all

TSASerialFile conf/tsaserial
TSACertificate /usr/local/apache2/conf/server.crt
TSACertificateChain /usr/local/apache2/conf/ca-bundle.crt
TSAKey /usr/local/apache2/conf/server.key
TSADBModule MySQL
TSAMySQLHost localhost
TSAMySQLUser tsa_user
TSAMySQLDatabase tsa_db
# лучше открыть доступ без пароля, иначе при каждом новом старте
# Apache будет спрашивать пароль к БД
TSAMySQLPassPhrase Off

TSAKeyPassPhrase off
TSADefaultPolicy 1.1.2
TSAPolicies 1.1.3 1.1.4
TSAMessageDigests sha1 md5
TSAAccuracy 60 0 0
TSAClockPrecisionDigits 0
TSAOrdering On
TSAIncludeName On
TSAESSCertIdChain On

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

2006/11/17

modXLdapAuth

Для того, чтобы аутентифицировать пользователя по сертификату в Apache достаточно добавить соответствующую директиву (SSLVerifyClient). Но в таком случае очень неудобно строить политику доступа - нет ни базы сертификатов, с которой бы можно было оперировать, ни возможностей по разграничению доступа (авторизации). На помощь приходит модуль modXLdapAuth (homepage), который использует LDAP как хранилище пользовательских данных, взятых из сертификатов и предоставляющий дополнительные средства для реализации политики доступа к закрытым ресурсам. Единственное ограничение с которым я столкнулся - модуль работает только с Apache 2.0.x (ветки 1.3 и 2.2 не поддерживаются).

Прежде чем начинать сборку модуля необходимо подготовить LDAP сервер - необходимо включить в конфигурацию сервиса дополнительную схему (schema) modXLDAPAuth [1Kb]. В OpenLDAP это делается добавлением строки
include         /etc/ldap/schema/modXLDAPAuth.schema

в основной файл конфигурации slapd.conf.

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

CertificateClientCN - обычно имя, на которое выдан сертификат
CertificateIssuer - CA, выдавший сертификат
CertificateSerialNumber - серийный номер сертификата

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

dn: uid=ivpetr,ou=People,o=company,c=ru
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
objectClass: Certmap
uid: ivpetr
structuralObjectClass: inetOrgPerson
CertificateClientCN:: Petrov Ivan
CertificateIssuer: Office CA
CertificateSerialNumber: 0D
cn: Ivan
mail: petrov@company.com
telephoneNumber: +790234567
userPassword:: e3NoYX0vbitrQTZZTzc3NnJTQ29Wczc4TGFQdCs1eTQ9

После этого можно начинать сборку модуля:

./configure --with-apxs=/usr/local/apache2/bin/apxs --with-ldap-dir=/usr --with-openssl=/usr
make && make installl

Пример конфигурации успешно собранного модуля


SSLRequireSSL
SSLVerifyClient require
SSLVerifyDepth 5
SSLOptions +FakeBasicAuth +StrictRequire +StdEnvVars +ExportCertData
Order allow,deny
Allow from all
AllowOverride AuthConfig
XLDAPAuthoritative on
XLDAPAuthServer localhost
XLDAPAuthBindDN "cn=manager,o=company,c=ru"
XLDAPAuthBindPw "mamamia"
XLDAPAuthSuffix "ou=People,o=company,c=ru"
XLDAPAuthFilter "(&(CertificateIssuer=%{SSL_CLIENT_I_DN_CN})(CertificateSerialNumber=%{SSL_CLIENT_M_SERIAL})(CertificateClientCN=%{SSL_CLIENT_S_DN_CN}))"
XLDAPAuthLogLevel info
XLDAPAuthRemoteUserAttr uid

На основании приведенной выше конфигурации Apache будет вести себя следующим образом:

  • для аутентификации будет требоваться сертификат пользователя (глубина проверки 5)
  • для поиска по LDAP серверу будет использоваться пользователь"cn=manager,o=company,c=ru" с паролем mamamia
  • поиск по LDAP директории будет осуществляться по фильтру - на основании атрибутов CertificateClientCN, CertificateIssuer, CertificateSerialNumber
  • переменная REMOTE_USER будет выставлена в данные, взятые из атрибута uid (в нашем случае, если пользователь Ivan Petrov пройдет аутентификацию, эта переменная будет выставлена в значение ivpetr)
Модуль успешно работает с пользовательскими данными на русском и литовском языках.
Достаточно подробное описание работы и конфигурации модуля есть на его домашней странице. Единственное, что пока не понятно - почему до сих пор не существует серьезных разработок в области аутентификационных модулей на основе сертификатов, потому как в описанном модуле остаются недоработки и ошибки.

2006/11/16

jUDDI

jUDDI - это JAVA-реализация UDDI (Universal Description, Discovery, and Integration) сервиса для обслуживания вебслужб. Установку можно произодить по описанию, но оно достаточно сильно устарело и несколько отличается от текущего момента. Данная заметка описывает установку jUDDI 0.9rc4 на Apache Tomcat 5.5.15.

1. Базу данных (juddi_db) лучше подготовить своими средствами (phpmysqladmin), создать пользователя и дать ему необходимые права для работы с базой. Скрипт juddi/sql/mysql/create_database.sql (удалить начальные строки про создание базы и добавление привилегий) можно использовать для создания каркаса будущей базы. Скрипт insert_publishers.sql позволяет добавить первого пользователя для публикации веб-сервисов.

2. Распаковать juddi.war в $TOMCAT_HOME/webapps/juddi

3. В файл $TOMCAT_HOME/webapps/juddi/WEB-INF/juddi-users.xml вставить пользователя, который был только что добавлен в базу скриптом insert_publishers.sql.

4. Файл $TOMCAT_HOME/webapps/juddi/WEB-INF/juddi.properties привести в соответствие Вашим требованиям - задать переменные juddi.operatorName, juddi.discoveryURL, juddi.operatorEmailAddress.

5. Добавить в основной файл конфигурации $TOMCAT_HOME/conf/server.xml описание контекста



driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/juddi_db?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&mysqlEncoding=utf8"
username="username"
password="password"
maxActive="20"
maxIdle="3"
removeAbandoned="true"
maxWait="3000" />

6. Протестировать всё ли в порядке по адресу http://localhost:8080/juddi/happyjuddi.jsp. Наверняка придется вручную устранять кое-какие зависимости, но это не так то сложно - найти jar-файл и положить его в $TOMCAT_HOME/common/lib.

Ссылки:
  1. jUDDI project

2006/11/14

Сборка mod_jk под Apache2

Иногда необходимо объединить усилия Apache и Tomcat - например аутентификацию пользователя проводить средствами Apache, и если аутентификация пройдена, показывать контент средствами Tomcat. Такую схему можно реализовать с помощью модуля mod_jk для Apache. Отсюда можно взять последнюю версию исходников модуля.
wget tomcat-connectors-1.2.x-src.tar.gz
tar zxf tomcat-connectors-1.2.x-src.tar.gz
cd tomcat-connectors-1.2.x-src/native
./configure --with-apxs=/usr/local/apache2/bin/apxs
make && make install

Модуль mod_jk.so появился в директории /usr/local/apache2/modules/

Необходимо его прописать в httpd.conf:

LoadModule jk_module    modules/mod_jk.so

Добавить описание модуля (mod_jk.conf):

# The location where mod_jk will find the workers definitions
JkWorkersFile /usr/local/apache2/conf/workers.properties
# The location where mod_jk is going to place its log file
JkLogFile /usr/local/apache2/logs/mod_jk.log
JkLogLevel info
JkMount /pathtotomcat/* ajp13_worker

В папке /tomcat-connectors-1.2.19-src/conf можно найти пример файла worker.properties.

2006/11/13

Smoothwall Express 2.0 + Snort (with MySQL)

Чтобы включить систему обнаружения атак (IDS) Snort в Smoothwall достаточно установить соответствующую галочку в web-интерфейсе, но такой путь не предоставит всех возможностей для работы с IDS Snort. Данное описание охватывает обновление версии Snort, добавление возможности вести события (alerts) в базе (mysql) и установку инструментария для работы с накопленной базой событий.

Поэтому первым дело необходимо установить обновленную версию Snort для Smoothwall Express 2.0. Последнюю версию данного расширения можно взять тут.

1. Поместить скаченное расширение на Smoothwall Express можно с помощью scp:

scp user@hostname:~/Snort-Update-2.x.x-MySQL.tgz /tmp

2. Разархивируем содержимое архива и все станет на свои места

tar zxvf ./Snort-Update-2.x.x-MySQL.tgz -C /

3. Переписать файл файл /usr/local/bin/snort новым файлом snort-mysql

cp /usr/local/bin/snort-mysql /usr/local/bin/snort
cp: overwrite `/usr/local/bin/snort'? y

4. Подготовить базу данных Snort, для этого в дистрибутиве Snort в директории schemas имеются скрипты для различных СУБД - для MySQL - create_mysql. Необходимо создать 2 базы данных - snort_db и snort_archive_db - первая непосредственно для отслеживания событий, вторая для архивирования старых событий (понадобится для работы с BASE).

5. Отредактировать /etc/snort.conf

Закомментировать
# include /etc/snort/vars
Задать переменные
var HOME_NET [192.168.1.0/24,212.122.83.100]
var EXTERNAL_NET !$HOME_NET
В препроцессор sfportscan можно добавить список хостов для игнорирования событий о сканировании портов сканерами домашней сети (HOME_NET)
ignore_scanners { 192.168.1.0/24 }
Добавить output-описания:
output alert_full: alert # Snort будет продолжать писать в /var/log/snort/alert
output database: log, mysql, user=user password=pass dbname=snort_db host=192.168.1.1 # и в БД

6. Проверить работоспособность новой версии Snort можно, запустив комманду:

/usr/local/bin/snort -c /etc/snort.conf -D -u snort -g snort -d -e -z -i eth1

Если все в порядке в списке процессов (ps ax) одним из последних будет Snort.

Скрипт /usr/local/bin/restartsnort не подходит для использования, поэтому его необходимо заменить на рабочий вариант.
# cat > /usr/local/bin/stopsnort
#!/bin/bash
kill -9 `cat /var/run/snort*.pid`
[Ctrl + C]
# cat > /usr/local/bin/startsnort
#!/bin/bash
/usr/local/bin/snort -c /etc/snort.conf -D -u snort -g snort -d -e -z -i eth1
[Ctrl + C]
# cat > /usr/local/bin/restartsnort
#!/bin/bash
/usr/local/bin/stopsnort; sleep 3; /usr/local/bin/startsnort
[Ctrl + C]
# chmod 755 /usr/local/bin/stopsnort
# chmod 755 /usr/local/bin/startsnort
# chmod 755 /usr/local/bin/restartsnort

Если в конфигурационном файле snort.conf включен препроцессор perfmonitor, то необходимо добавить в ротацию журналов файл /var/log/snort/snort.stats - он достаточно быстро растет. Препроцессор rpc_decode можно выключить (закомментировать), если не используются RPC-службы.

Для удобной работы с накопленной базой событий существует система BASE (Basic Analysis and Security Engine). Это "реинкарнация" старой ACID-системы, которая в данный момент больше не развивается. BASE активно разрабатывается и всегда доступен на SourceForge. Для работы с BASE нужно иметь несколько дополнительных средств:

  • ADODB
  • GD
  • PEAR
  • Image_Graph
Если есть pear, ставится элементарно:
pear install Image_Color
pear install Image_Canvas-alpha
pear install Image_Graph-alpha

Если с pear сложности, достаточно скачать все эти пакеты с http://pear.php.net/, распаковать в одну директрию, например Image и эту директорию положить в такое место, куда по умолчанию заглядывает php.

Установка BASE проста

# tar -xvzf base-x.x.x.tar.gz
# cd base-x.x.x
# cp base_conf.php.dist base_conf.php

Редактируем base_conf.php:

$BASE_urlpath = “/base”;
$DBlib_path = "Путь до adodb";
$DBtype = "mysql";
$alert_dbname = "snort_db";
$alert_host = "localhost";
$alert_port = "";
$alert_user = "snort";
$alert_password = "new_password";
$archive_dbname = "snort_archive_db";
$archive_host = "localhost";
$archive_port = "";
$archive_user = "snort";
$archive_password = "new_password ";

Аналогична установка для /base_archive:

$BASE_urlpath = “/base_archive”;
$DBlib_path = "Путь до adodb";
$DBtype = "mysql";
$alert_dbname = "snort_archive_db";
$alert_host = "localhost";
$alert_port = "";
$alert_user = "snort";
$alert_password = "new_password";
$archive_dbname = "snort_archive_db";
$archive_host = "localhost";
$archive_port = "";
$archive_user = "snort";
$archive_password = "new_password ";

Теперь Base доступен по адресу http://hostname/base (архив http://hostname/base_archive).

Ссылки:
  1. Snort 2.x.x (Plain, MySQL, PostgreSQL, ODBC, All)
  2. Snort, Apache, PHP, MySQL, and BASE on SuSe Setup Guide
  3. Detection of the Telecommunication Attacks: Theory and Practice, Snort
  4. The Three Snort Pigs. Snort Sensor Tuning Using SnortCenter
  5. More Suitable, Faster, Better: Snort + MySQL

2006/11/08

Отправка HTML-форматированного письма (с картинками)

Очень удобно сгенерированные HTML-отчеты (с картинками) читать из почтового клиента, но как оказалось, не так-то просто это сделать - одной командой тут не обойтись. На помощь приходит perl реализация - пакет MIME-Lite-HTML (документация). Не беда, если в системе пакетов (например Debian) не существует такого пакета - достаточно взять tar.gz-архив с сайта разработчиков, распаковать его и поместить файл HTML.pm в директорию с остальными perl-библиотеками (для Debian директория будет /usr/share/perl5/MIME/Lite).

Зависимости для MIME::Lite::HTML :
  • MIME::Lite
  • LWP::UserAgent
  • HTML::LinkExtor
  • URI::URL
Для устранения зависимостей в Debian необходимо установить пакеты libmime-lite-perl, libwww-perl и все их зависимости.

Как это работает:
1. Программа-анализатор генерирует html-отчет с картинками в локальную (закрытую) директорию на сервере (например /var/stats).
2. Приведенный ниже perl-скрипт генерирует на основе созданного htlm-отчета html-форматированное письмо, с сохранением всего содержимого (картинки), и отсылает готовое письмо по указанному адресу.

Пример perl-скрипта:
#!/usr/bin/perl -w
use MIME::Lite::HTML;
my $mailHTML = new MIME::Lite::HTML (
From => 'Charlie Root',
To => 'myemail@home.net',
IncludeType => 'cid',
Subject => 'Daily activity report',
);
$MIMEmail = $mailHTML->parse('file:///var/stats/index.htm');
$MIMEmail->send;


Как послать письмо с прикрепленным файлом из командной строки

Linux:
metasend -b -s "$SUBJECT" -f $TXTFILE -m text/plain -n -f $ATTFILE -m image/png -t $MAILTO
mpack -s "$SUBJECT" -c application/octet-stream $ATTFILE $MAILTO
mutt -a $ATTFILE -s "$SUBJECT" $MAILTO < $TXTFILE

Подсмотрено тут, опробовано самолично.

Ссылки:

  1. Sending files as mail attachments

2006/11/03

RdiffWeb

"rdiffWeb is a web interface for browsing and restoring from rdiff-backup repositories"

Отличная вещь для web-доступа к резервным копиям, сделанным утилитой rdiff-backup.

Зависимости:

  • Python
  • CherryPy v2.1
  • librsync
  • rdiff-backup
  • MySQLdb

Инсталляция очень проста:

tar zxf rdiffWeb-0.3.5.tar.gz
$ cd rdiffWeb-0.3.5
$ python setup.py build
$ python setup.py install

После этого необходимо сконфигурировать и запустить сервис

$ rdiff-web-config
$ /etc/init.d/rdiff-web start

В процессе конфигурации необходимо выбрать хранилище настроек (file или mysql-база). Рекомендую mysql-базу, так как в таком случае кроме удобства появляется возможность автоматически просматривать директории от указанного корня, вместо того, чтобы вбивать их вручную. Запущенная служба по умолчанию работает на порту 8080.