Archive

Archive for March, 2009

Сертификаты

March 11th, 2009 No comments

# создание самоподписанного сертификата в одну строку

openssl req -new -x509 -days 365 -nodes -out /etc/ssl/certs/postfix.pem -keyout /etc/ssl/private/postfix.pem -subj "/C=XX/ST=XX/L=XX/O=XX/OU=XX/CN=case.net.ru/emailAddress=case@case.net.ru"

# создание ключа сервера

openssl genrsa -des3 -rand /dev/urandom -out server.key

# убирание из него пароля

openssl rsa -in server.key -out server.pem

# создание запроса на подпись сертификата

openssl req -new -key server.key -out server.csr

# создание самоподписанного сертификата

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Tags:

Использование табов (вкладок) в VIM 7

March 10th, 2009 No comments

Открыть несколько файлов, каждый в своем табе:
$ vim -p file1 file2 file3
Открыть файл для редактирования в новом табе:
:tabe /path/to/file
Закрыть таб:
:tabc или :wq или ZZ
Перейти к следующему табу:
:tabn
Перейти к предыдущему табу:
:tabp
Вывести список открытых табов:
:tabs
Справка по табам:
:help tabpage

Tags:

Postgrey

March 10th, 2009 No comments

Postgrey is a program which implements greylisting and is
designed to work with the Postfix MTA.

WWW: http://postgrey.schweikert.ch/

Принцип действия серых списков основан на тактике рассылки спама. Как правило, спам рассылается в очень короткое время.
Работа серого списка заключается в намеренной задержке писем на некоторое время. При этом адрес и время пересылки заносится в базу данных серого списка. Если удалённый компьютер является настоящим МТА, то он согласно RFC2821, должен сохранить письмо в очереди и повторять пересылку в течение пяти дней. Спам-боты, как правило, писем в очереди не сохраняют, поэтому спустя непродолжительное время, прекращают попытки переслать письмо. Экспериментальным путём установлено, что в среднем время рассылки спама составляет чуть больше часа.
При повторной пересылке письма с этого же адреса, если с момента первой попытки прошло необходимое количество времени, Ваш МТА примет его. При этом IP-адрес отправляющего МТА, электронные адреса отправителя и получателя будут внесены в белый список на достаточно длительное время, после чего письма будут приниматься без задержек.

Установка:

1
2
[root@case.net.ru]$ cd /usr/ports/mail/postgrey/
[root@case.net.ru]$ make install clean

Добавляем в rc.conf:

1
postgrey_enable="YES"

Прописываем правила проверки сообщения для postfix’a в main.cf:

1
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023

Добавляем в файл /usr/local/etc/postfix/postgrey_whitelist_recipients доверенные домены и почтовые ящики для которых не производится проверка postgrey’ем.

Запускаем postgrey:

1
[root@case.net.ru]$ /usr/local/etc/rc.d/postgrey start

Перезагружаем postfix:

1
[root@case.net.ru]$  postfix reload

Отчет о проделанной работе:

1
$ cat /var/log/maillog | postgreyreport --dbdir=/var/db/postgrey --nosingle_line --check_sender=mx,a --separate_by_subnet=":======\n"

Ссылки: http://argo-uln.blogspot.com/2007/11/blog-post.html

Tags: ,

Как работают авторизации AUTH PLAIN и AUTH LOGIN

March 10th, 2009 No comments

AUTH PLAIN:

1
2
3
4
5
6
7
8
9
10
#!/usr/local/bin/expect -f 
set host case.net.ru
spawn telnet "$host" 25
expect "220 case.net.ru ESMTP Postfix"
send "EHLO localhost\r"
expect "250-case.net.ru"
send "AUTH PLAIN AHRlc3RAY2FzZS5uZXQucnUAMTIzNDU2\r"
expect "235 2.7.0 Authentication successful"
send "QUIT\r"
interact

Где 7 строка – это авторизация в формате base64, полученная одним из следующих способов:

1
2
3
4
$ perl -MMIME::Base64 -e 'print encode_base64("\000test\@case.net.ru\000123456");'
AHRlc3RAY2FzZS5uZXQucnUAMTIzNDU2
$ php -r 'echo base64_encode("\000test@case.net.ru\000123456");'
AHRlc3RAY2FzZS5uZXQucnUAMTIzNDU2

AUTH LOGIN:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/local/bin/expect -f 
set host case.net.ru
spawn telnet "$host" 25
expect "220 case.net.ru ESMTP Postfix"
send "EHLO localhost\r"
expect "250-case.net.ru"
send "AUTH LOGIN\r"
expect "334 VXNlcm5hbWU6"
send "dGVzdEBjYXNlLm5ldC5ydQ==\r"
expect "334 UGFzc3dvcmQ6"
send "MTIzNDU2\r"
expect "235 2.7.0 Authentication successful"
send "QUIT\r"
interact

Где строки:
08 – Username:
09 – Имя пользователя в base64
10 – Password:
11 – Пароль в base64
Имя пользователя и пароль получаем следующим образом:

1
2
3
4
$ php -r 'echo base64_encode("test@case.net.ru");'
dGVzdEBjYXNlLm5ldC5ydQ==
$ php -r 'echo base64_encode("123456");'
MTIzNDU2
Tags:

Конветирование wav в gsm и gsm в wav

March 7th, 2009 No comments

Часто при работе с asterisk возникает необходимость конвертировать файлы форматов wav и gsm. Сделать это без потери качества можно так:
gsm to wav:
$ sox infile.gsm -r 44100 -a outfile.wav
wav to gsm:
$ sox foo-in.wav -r 8000 -c 1 -s -w foo-out.wav resample -ql

(c) http://my-debian.blogspot.com/2008/10/wav-gsm-gsm-wav.html

Tags:

Немного об идеологии Cacti

March 7th, 2009 No comments

Нижний уровень – сбор данных.
Data Input Methods – Здесь мы добавляем название нашего скрипта и определяем в какие переменные будет записывать его выхлоп.

Следующий уровень – хранение данных.
Data Templates – определяем шаблон хранилища данных. За какие периоды хранить данные, как часто они могут обновляться, какие переменные сохраняются в rrd файлах. Имена переменных соответственно берутся с нижнего уровня.

Следующий уровень – представление данных.
Graph Templates – определяем как наши данные будут рисоваться. Какие переменные рисовать линиями, какие значениями. Определяем все что выводится на картинке. Это уровень требует указания хранилища данных.

Порядок действий по созданию графика:
- написать скрипт для сбора данных, выхлоп которого имеет cacti-совместимый формат – ИМЯ:ЗНАЧЕНИЕ;
- добавить метод сбора данных;
- определить шаблон хранения данных;
- определить шаблон отображения данных;
- создать хранилище данных;
- создать график, указав ему созданное хранилище.

Ну и образец графика на последок:
cacti

Tags:

XCache

March 6th, 2009 No comments

XCache is a fast, stable PHP opcode cacher that has been tested and is now running on production servers under high load.

Установка:

1
2
3
4
5
6
[root@case.net.ru]$ cd /usr/ports/www/xcache/
[root@case.net.ru]$ make showconfig
===> The following configuration options are available for xcache-1.2.2:
     COVERAGER=off "Enable code coverage dumper"
===> Use 'make config' to modify these settings
[root@case.net.ru]$ make install clean

Настройка:

1
2
[root@case.net.ru]$ cp /usr/local/share/examples/xcache/xcache.ini /usr/local/etc/php/
[root@case.net.ru]$ cp -R /usr/local/share/examples/xcache/admin /usr/local/www/data/xcache

В файле xcache.ini устанавливаем переменную xcache.admin.pass, хеш пароля можно получить командой:

1
[root@case.net.ru]$ md5 -s password
Tags: ,

Сортировка почты с помощью Dovecot Sieve

March 5th, 2009 No comments

Что имеется: postfix + mysql + dovecot как imap сервер + roundcube
Задача: сделать так, что бы письма с пометкой SPAM ложились в каталог Junk, а не Inbox.

Собираем Dovecot с поддержкой LDA:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@case.net.ru]$ cd /usr/ports/mail/dovecot
[root@case.net.ru]$ make showconfig
===> The following configuration options are available for dovecot-1.1.11:
     KQUEUE=on "kqueue(2) support"
     SSL=off "SSL support"
     IPV6=off "IPv6 support"
     POP3=off "POP3 support"
     LDA=on "LDA support"
     MANAGESIEVE=off "ManageSieve support"
     GSSAPI=off "GSSAPI support"
     VPOPMAIL=off "VPopMail support"
     BDB=off "BerkleyDB support"
     LDAP=off "OpenLDAP support"
     PGSQL=off "PostgreSQL support"
     MYSQL=on "MySQL support"
     SQLITE=off "SQLite support"
===> Use 'make config' to modify these settings
[root@case.net.ru]$ make install clean

Устанавливаем dovecot-sieve:

1
2
[root@case.net.ru]$ cd /usr/ports/mail/dovecot-sieve/
[root@case.net.ru]$ make install clean

Настраиваем postfix:
Добавляем в master.cf:

1
2
dovecot   unix  -       n       n       -       -       pipe
  flags=DRhu user=vmail:vmail argv=/usr/local/libexec/dovecot/deliver -f ${sender} -d ${recipient}

Меняем в main.cf:

1
virtual_transport = dovecot

Меняем в dovecot.conf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
protocol lda {
  postmaster_address = case@case.net.ru
  hostname = case.net.ru
  mail_plugins = cmusieve
  mail_plugin_dir = /usr/local/lib/dovecot/lda
  sendmail_path = /usr/sbin/sendmail
  sieve_global_path = /usr/home/vmail/dovecot-sieve.conf
}
 
auth default {
  socket listen {
    master {
      path = /var/run/dovecot/auth-master
      mode = 0600
      user = vmail
      group = vmail
    }
  }
}

Настраиваем sieve в файле /usr/home/vmail/dovecot-sieve.conf:

1
2
3
4
require "fileinto";
if header :contains "Subject" "SPAM" {
  fileinto "Junk";
}

Создание файловой системы в оперативной памяти с помощью mdmfs

March 5th, 2009 No comments
mdmfs -s 50m md /temp
Tags:

UnionFS

March 5th, 2009 No comments

Используется для объединения содержимого нескольких каталогов в одном.

Монтирование:

1
2
3
4
5
6
7
8
9
10
11
12
[root@case.net.ru]$ ls -l dir1
total 12
-rw-r--r--  1 root  wheel  5  5 мар 11:20 file1
-rw-r--r--  1 root  wheel  5  5 мар 11:20 file2
-rw-r--r--  1 root  wheel  5  5 мар 11:20 file3
[root@case.net.ru]$ ls -l dir2
total 0
-rw-r--r--  1 root  wheel  0  5 мар 11:41 file1
-rw-r--r--  1 root  wheel  0  5 мар 11:20 file2
-rw-r--r--  1 root  wheel  0  5 мар 11:20 file3
[root@case.net.ru]$ mount -t unionfs dir1 dir3
[root@case.net.ru]$ mount -t unionfs dir2 dir3

Каталог примонтированный первым (dir1) – становится каталогом нижнего уровня. Каталог примонтированный последним (dir2) – каталогом верхнего уровня. Данные верхнего уровня полностью перекрывают нижний.

1
2
3
4
5
[root@case.net.ru]$ ls -l dir3
total 0
-rw-r--r--  1 root  wheel  0  5 мар 11:41 file1
-rw-r--r--  1 root  wheel  0  5 мар 11:20 file2
-rw-r--r--  1 root  wheel  0  5 мар 11:20 file3

Если удалить файл, который имеется в обоих каталогах, удалится он из верхнего уровня (dir2). На нижнем уровне он останется без изменений, но уже и не будет доступен для просмотра и работы.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@case.net.ru]$ rm dir3/file1
[root@case.net.ru]$ ls -l dir3
total 0
-rw-r--r--  1 root  wheel  0  5 мар 11:20 file2
-rw-r--r--  1 root  wheel  0  5 мар 11:20 file3
[root@case.net.ru]$ ls -l dir1
total 12
-rw-r--r--  1 root  wheel  5  5 мар 11:20 file1
-rw-r--r--  1 root  wheel  5  5 мар 11:20 file2
-rw-r--r--  1 root  wheel  5  5 мар 11:20 file3
[root@case.net.ru]$ ls -l dir2
total 0
-rw-r--r--  1 root  wheel  0  5 мар 11:20 file2
-rw-r--r--  1 root  wheel  0  5 мар 11:20 file3

При создании файла или изменении файла, который находится на нижнем уровне – файл создается (копируется) в верхний уровень.

1
2
3
4
5
6
7
8
[root@case.net.ru]$ echo 'some_data' > dir3/file1
[root@case.net.ru]$ ls -l dir3/file1
-rw-r--r--  1 root  wheel  10  5 мар 11:46 dir3/file1
[root@case.net.ru]$ ls -l dir2/file1
-rw-r--r--  1 root  wheel  10  5 мар 11:46 dir2/file1
[root@case.net.ru]$ ls -l dir1/file1
-rw-r--r--  1 root  wheel  5  5 мар 11:20 dir1/file1
[root@case.net.ru]$

Где можно попробовать на практике: jail.

Ссылки: Unionfs во FreeBSD: разбираемся в текущей реализации (Сергей Супрунов, №50 / 01.2007).

Tags: