среда, 27 июля 2011 г.

Контроль переписки в Postfix или Big Brother watching you

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

Для доставки копии ВСЕХ сообщений (входящих и исходящих) на указанный адрес (поддерживается с Postfix v.2.1) добавляем в /etc/postfix/main.cf добавляем вот такой вот параметр:

always_bcc = address

где address - мыло ящика, куда необходимо дублировать ВСЕ месаджи от ВСЕХ

Для контроля определенных сотрудников необходимо использовать таблицы соответствия отправителя/получателя с адресами доставки копий сообщений sender_bcc_maps = type:table и recipient_bcc_maps = type:table

Рассмотрим 2 варианта реализации - на основе файлов (индексированных карт hash) и базы данных MySQL.

Способ с использованием индексированных hash карт

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

Для копирования исходящих сообщений:

Создаем файл /etc/postfix/sender_bcc. Внутрь помещаем правило о том с чьего мала и куда слать копию:
user@mydomain.ru backup@mydomain.ru
user2@mydomain.ru backup@mydomain.ru

Добавляем в main.cf мапу на этот файл:
sender_bcc_maps = hash:/etc/postfix/sender_bcc

Индексируем:
#>postmap /etc/postfix/sender_bcc

Перезагружаем постфикс и любуемся копированием исходящей почты :).

По аналогии в /etc/postfix/recipient_bcc создаем правило для копирования входящей почты:
user@mydomain.ru backup@mydomain.ru
user2@mydomain.ru backup@mydomain.ru

И опять же добавляем в main.cf мапу на этот файл:
recipient_bcc_maps = hash:/etc/postfix/recipient_bcc

Индексируем:
#>postmap /etc/postfix/recipient_bcc

ВАЖНО!!! Если в последствии в файлы /etc/postfix/recipient_bcc и /etc/postfix/sender_bcc вносятся изменения - необходимо перестраивать их хэш (периндексировать):

#>postmap /etc/postfix/recipient_bcc
#>postmap /etc/postfix/sender_bcc


Способ с использованием MySQL

Подразумевается, что уже используется MySQL совместно с Postfix для хранения учетных записей, транспорта и т.д.

Создаем таблицу bcc-ей в базе данных:

#>mysql -p mail

mysql>CREATE TABLE IF NOT EXISTS bcc (
id int(10) unsigned NOT NULL auto_increment,
sender varchar(128) NOT NULL default '',
recipient varchar(128) NOT NULL default '',
copy varchar(128) NOT NULL default '',
PRIMARY KEY (id)
)
ENGINE=InnoDB DEFAULT CHARSET=utf8;

В /etc/postfix/ создаем файлы sender_bcc.cf:

user = mail_admin
password = mailadminpass
dbname = mail
query = SELECT copy FROM bcc WHERE sender = '%s'
hosts = 127.0.0.1

и recipient_bcc.cf:

user = mail_admin
password = mailadminpass
dbname = mail
query = SELECT copy FROM bcc WHERE recipient = '%s'
hosts = 127.0.0.1

В /etc/postfix/main.cf добавляем:

sender_bcc_maps = mysql:/usr/local/etc/postfix/sender_bcc.cf
recipient_bcc_maps = mysql:/usr/local/etc/postfix/recipient_bcc.cf

Перезапускам Postfix для применения изменений. Изменения данных в таблице MySQL bcc применяются без перезапуска Postfix.

Избавляемся от дублирования сообщений bcc_maps

Чтобы не происходило дублирования почты при использовании bcc_maps в /etc/postfix/master.cf следует добавить строчку перед conten_filter. Т.е. должно быть где-то так:

smtp      inet  n       -       n       -       -       smtpd
-o content_filter=
-o receive_override_options=no_address_mappings

Замечание! Если на серваке крутится несколько виртуальных доменов, и надо "копировать" переписку только с одного домена, то в качестве sender или recipient необходимо указывать маску. Например, @mydomen1.com

Жопиздан:)

среда, 20 июля 2011 г.

Подключение принтеров HP в Ubuntu

Есть замечательная приблуда HPLIP (можно качнуть с оф. сайта HP). Вроде и подключаются через нее принтера, и вроде даже работать должны, но есть нюанс: HPLIP не умеет подключать расшаренные принтера. Поэтому предлагаю использовать foo2zjs.

Это замечательный Linux драйвер для принтеров, работающих по протоколу ZjStream. Его работой очень доволен...

ВАЖНО!!! НЕ надо ставить foo2zjs из стандартных репозиториев. Необходимо качать свежую сборку с оф сайта. Приступим-с:

Get:
$wget -O foo2zjs.tar.gz http://foo2zjs.rkkda.com/foo2zjs.tar.gz

Unpack:
$tar zxf foo2zjs.tar.gz
$cd foo2zjs

Compile:
$make

Get extra files from the web, such as .ICM profiles for color correction, and firmware. Select the model number for your printer:
$./getweb cpwl # Get Minolta Color PageWorks/Pro L .ICM files
$./getweb 2200 # Get Minolta 2200 DL .ICM files
$./getweb 2300 # Get Minolta 2300 DL .ICM files
$./getweb 2430 # Get Minolta 2430 DL .ICM files

$./getweb 1000 # Get HP LaserJet 1000 firmware file
$./getweb 1005 # Get HP LaserJet 1005 firmware file
$./getweb 1018 # Get HP LaserJet 1018 firmware file
$./getweb 1020 # Get HP LaserJet 1020 firmware file

$./getweb 1025 # Get HP LaserJet Pro CP1025nw .ICM files

Install driver, foomatic XML files, and extra files:
$su OR $sudo make install
#make install

(Optional) Configure hotplug (USB; HP LJ 1000/1005/1018/1020):
#make install-hotplug OR $sudo make install-hotplug

(Optional) If you use CUPS, restart the spooler:
#make cups OR $sudo make cups

Все! Запускаем system-config-printer и подключаем принтера (как локальные, так и шаровые).
Жопиздан:)

четверг, 14 июля 2011 г.

Организация VPN сервера в Ubuntu

Устанавливаем VPN сервер:
$sudo apt-get install pptpd

Ок. Демон установился и запустился. По-умолчанию, демон слушает TCP-порт 1723 и использует протокол GRE (он же протокол 47) . Разрешаем на фаерволе входящие подключения на этот порт по этому протоколу (IPTABLES =/sbin/iptables, если кто забыл:)) ):

$IPTABLES -A INPUT -p gre -s 0/0 -j ACCEPT
$IPTABLES -A OUTPUT -p gre -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p tcp -s 0/0 --dport 1723 j ACCEPT
или через shorewall, /etc/shorewall/rules добавляем:
ACCEPT           net    fw    tcp 1723
GRE(ACCEPT)   net    fw



Далее ковыряем конфиг /etc/pptpd.conf, чтобы получилось вот такое:


option /etc/ppp/pptpd-options
#noipparam
logwtmp
bcrelay eth0
localip 10.177.36.3
remoteip 10.177.36.10-15
options - путь, где лежит конфиг опций; ВАЖНО!!! должно быть закаментировано! noipparam - если опция активна, то клиенту не будет передаваться его IP; logwtmp - позволяет передавать PPTP-серверу лог аутентификации пользователей через стандартную функцию logwtmp (нужна для отладки); bcrelay - разрешить передачу VPN-клиентам широковещательных пакетов с внутреннего интерфейса eth0; localip - ip нашего VPN сервера; remoteip - диапазон ip, выдаваемых клиентам.

Теперь ковырнем конфиг опций /etc/ppp/pptpd-options:

name pptpd
auth
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
proxyarp
nodefaultroute
logfile /var/log/pptpd.log
lock
nobsdcomp 
name - имя сервера (должно совпадать с параметром server в /etc/ppp/chap-secrets см. описание ниже); auth - требовать от клиента обязательной аутентификации; refuse-pap,refuse-chap,refuse-mschap - не принимать подключения от клиентов использующих ненадежные протоколы проверки пароля (pap, chap, ms chap v1); require-mschap-v2 - требовать от клиентов наиболее (на сегодняшний день) надежный протокол проверки пароля; require-mppe-128 - использовать механизм шифрования с 128-битным ключем; proxyarp - директива серверу работать с локальной сетью не используя маскарадинг (используется если клиентам выдаются ip-адреса из локальной подсети); nodefaultroute - не менять клиентам маршрут по-умолчанию (что б при установки соединения не отваливались интернеты) ВАЖНО!!!!! Не смотря на nodefaultroute, под Windows при установке VPN все равно маршрут по-умолчанию становиться на VPN, чтобы этого не происходило идем в свойства VPN соединения → Сеть → Протокол TCP/IP → Свойства → Дополнительно, там снимаем галку "Использовать основной шлюз в удаленной сети". logfile - куда писать логи; nobsdcomp - явное указание серверу, что компьютер работает под осью отличной от BSD (OpenBSD, FreeBSD).


Добавляем пользователей в /etc/ppp/chap-secrets:

# client        server                     secret                  IP addresses
test               pptpd                      testpass
test1             pptpd                      test1pass           10.177.36.10

Таким образом мы создали пользователя "test" с паролем "testpass" и пользователя "test1" с паролем "test1pass" c явным указанием ему получать ip-адрес "10.177.36.10".

Перезапускаем демона:

$sudo /etc/init.d/pptpd restart

Все! VPN-сервер готов к работе.

Если VPN-сервер работает за NAT-том, то еще необходимо организовать к нему проброс. На VPN-сервере разрешаем форвард пакетов:

$sudo mcedit /proc/sys/net/ipv4/ip_forward
и туда пишем:
net.ipv4.ip_forward=1

потом выполняем:
$sudo sysctl -p

Ну и, собственно проброс... На шлюзе в /etc/shorewall/rules добавляем:

DNAT   net    loc:10.177.36.3    tcp 1723
DNAT   net    loc:10.177.36.3    47

На этом настройка завершена...

А если все подключается, но ничего не работает, то вполне возможно нужно изменить размер MTU, таким образом, чтобы он был меньше MTU соединения с провайдером. Например, вы подключаетесь к провайдеру с MTU=1400 (см. в настройках роутера), тогда для своего VPN сервера нужно задать меньшее значение, например 1300. Для этого идем в /etc/ppp/pptpd-options и дописываем:

mru 1300
mtu 1300

ПОЛЕЗНЫЕ ССЫЛКИ:


Жопиздан:) (с) Job Is Done