суббота, 12 ноября 2011 г.

Ejabberd + Jwchat настройка

(ОС: Debian 5.0)


Приводим /etc/ejabberd/ejabberd.cfg к такому виду:
{listen,
 [
  ...
  {5280, ejabberd_http, [
                         {request_handlers, [
                                             {["web"], mod_http_fileserver}
                         ]},
                         http_bind,
                         http_poll,
                         web_admin
                        ]}
 ]}.

{modules,
 [
  ...
  {mod_http_bind,  []},
  {mod_http_fileserver, [
                         {docroot, "/var/lib/ejabberd/www"},
                         {accesslog, "/var/log/ejabberd/webaccess.log"}
                        ]}
 ]}.
Скачиваем джаббер веб-клиент http://blog.jwchat.org/jwchat/ и разворачиваем
mkdir /var/lib/ejabberd/www
cd /var/lib/ejabberd/www
tar -xzvf jwchat-1.0.tar.gz
mv jwchat-1.0 jwchat
cd jwchat
Оставляем только русскую локализацию
for a in $(ls *.ru); do b=${a%.ru}; cp $a $b; done
удаляем все остальные
rm *.html.* *.js.*
Накатываем права
cd /var/lib/ejabberd/
chown -R ejabberd:ejabberd ./www
Правим конфиг веб-клиента config.js
var SITENAME = "jabber.example.org";

var BACKENDS =
[
 {
  name:"Native Binding",
  description:"Ejabberd's native HTTP Binding backend",
  httpbase:"/http-bind/",
  type:"binding",
  servers_allowed:[SITENAME]
 }

];

...
Перезагружаем
invoke-rc.d ejabberd restart
Проверяем
http://<ip_address>:5280/web/jwchat/index.html

SpamAssassin + MailZu + MySQL + ClamAV + Amavisd

(ОС: Debian 5.0)


apt-get install amavisd-new spamassassin clamav
Настройка SpamAssassin
Параметры запуска (/etc/default/spamassassin):
OPTIONS="--max-children 5 --sql-config --username=spamfilter --nouser-config -D"
Ключ -D включает дебаг, соответственно после тестирования его следует убрать
Создаем MySQL базу (в примере mailfilter) для хранения данных AWL, Bayes:
mysql -u mailfilter -p mailfilter < /usr/share/doc/spamassassin/awl_mysql.sql
mysql -u mailfilter -p mailfilter < /usr/share/doc/spamassassin/bayes_mysql.sql
Вот этот дамп не заливаем, так как Amavisd не умеет работать с дефолтной sql базой SpamAssassin и у него своя sql база для хранения пользовательских настроек
/usr/share/doc/spamassassin/userpref_mysql.sql
Добавляем в конфиг spamassassin настройки для доступа к его MySQL базе:
user_awl_dsn                    DBI:mysql:mailfilter:localhost
user_awl_sql_username           mailfilter
user_awl_sql_password           secret
user_awl_sql_table              awl
auto_whitelist_factory          Mail::SpamAssassin::SQLBasedAddrList
bayes_sql_dsn                   DBI:mysql:mailfilter:localhost
bayes_sql_username              mailfilter
bayes_sql_password              secret
bayes_store_module              Mail::SpamAssassin::BayesStore::SQL
Проверяем корректность конфига:
spamassassin --lint
Настройка Postfix
Добавить в /etc/postfix/master.cf:
amavisfeed unix    -       -       n       -       2     smtp
     -o smtp_data_done_timeout=1200
     -o smtp_send_xforward_command=yes
     -o smtp_tls_note_starttls_offer=no

127.0.0.1:10025 inet n    -       n       -       -     smtpd
     -o content_filter=
     -o smtpd_delay_reject=no
     -o smtpd_client_restrictions=permit_mynetworks,reject
     -o smtpd_helo_restrictions=
     -o smtpd_sender_restrictions=
     -o smtpd_recipient_restrictions=permit_mynetworks,reject
     -o smtpd_data_restrictions=reject_unauth_pipelining
     -o smtpd_end_of_data_restrictions=
     -o smtpd_restriction_classes=
     -o mynetworks=127.0.0.0/8
     -o smtpd_error_sleep_time=0
     -o smtpd_soft_error_limit=1001
     -o smtpd_hard_error_limit=1000
     -o smtpd_client_connection_count_limit=0
     -o smtpd_client_connection_rate_limit=0
     -o receive_override_options=no_header_body_checks,no_unknown_recipient_checks,no_milters
     -o local_header_rewrite_clients=
     -o smtpd_milters=
     -o local_recipient_maps=
     -o relay_recipient_maps=
Добавить в /etc/postfix/main.cf:
content_filter=amavisfeed:[127.0.0.1]:10024
Настройка Amavisd-new
Раскомментировать в /etc/amavis/conf.d/15-content_filter_mode:
@bypass_virus_checks_maps = (
   \%bypass_virus_checks, \@bypass_virus_checks_acl, \$bypass_virus_checks_re);

@bypass_spam_checks_maps = (
   \%bypass_spam_checks, \@bypass_spam_checks_acl, \$bypass_spam_checks_re);
Внести в группу:
gpasswd -a clamav amavis
Разбор конфига Amavisd
Внести в /etc/amavis/conf.d/20-debian_defaults
$mydomain = 'local.lan';
(где local.lan Ваш основной почтовый домен)
Поправить в /etc/amavis/conf.d/05-node_id:
$myhostname = 'cyrus.local.lan';
(где cyrus.local.lan имя вашего хоста)
Дебаг, детализация от 0 до 5:
$log_level = 5;
Порог срабатывания, превышение которого или равнение на него добавляет к письму заголовки со служебной информацией по работе спам фильтра:
$sa_tag_level_deflt  = -200.0;
Первый параметр устанавливает уровень достигнув которого письмо помечается как спам,
а второй параметр устанавливает уровень когда письмо считается спамом и срабатывают reject/bounce/discard/pass, quarantine, notify
Обычно выставляют одинаковый уровень.
$sa_tag2_level_deflt = 6.31;
$sa_kill_level_deflt = 6.31;
Действия предпринимаемые на различные события:
$final_virus_destiny      = D_DISCARD;
$final_banned_destiny     = D_BOUNCE;
$final_spam_destiny       = D_BOUNCE;
$final_bad_header_destiny = D_PASS;
Заголовок письма посылаемого в качестве оповещения на различные события (оповещения отправителя о вирусе в его письме или оповещения админа):
$hdrfrom_notify_sender = 'Content-filter at $myhostname';
Адрес пользователя которому отправлять оповещения:
$virus_admin = "sayan.tsyrenov\@$mydomain";
(меняем на свой адрес)
Создать MySQL базу для карантина и настроить на нее amavisd,
Дамп для базы брать из /usr/share/doc/amavisd-new/README.sql-mysql.gz
@storage_sql_dsn =  ( ['DBI:mysql:mailzu:localhost', 'mailzu', 'secret'] );
$banned_files_quarantine_method = 'sql:';
$spam_quarantine_method = 'sql:';
Добавить в основной конфиг amavis (здесь добавляется порт на который c MailZu будет отсылаться "освобожденный" спам)
$inet_socket_port = [10024,9998];
$interface_policy{'9998'} = 'AM.PDP';
$inet_socket_bind = undef;
$policy_bank{'AM.PDP'} = {
    protocol => 'AM.PDP',
    inet_acl => [qw( 127.0.0.1 [::1] 172.16.0.21 )],
};
Настройка MailZu
Скопировать и настроить конфиг:
cyrus:/var/www/mailzu/config# cp config.php.sample config.php
$conf['amavisd']['spam_release_port'] = '9998';
$conf['db']['binquar'] = true;
$conf['auth']['s_admins'] = array ('sayan.tsyrenov@local.lan', 'tsyrenov.sayan@local.lan');
Для поддержки адреса электронной почты в качестве логина при аутентификации по IMAP, выставить пустое значение
$conf['auth']['serverType'] = 'imap';
$conf['auth']['imap_domain_name'] = ''; 
Создать файл логов:
touch /var/log/mailzu.log
chown www-data:www-data mailzu.log
Скрипт удаления старых данных из MySQL базы (изменить в скрипте месторасположение perl и выставить параметры
доступа к базе данных, скрипт запускается с ключом --database <типа базы>):
/var/www/mailzu/scripts/mz_db_clean.pl
Подправить кодировку, используемую для отображения HTML
/var/www/mailzu/lang/en_US.lang.php
$charset = 'UTF-8';
Внести поправку в /var/www/mailzu/lib/PHPMailer.class.php

Настройка DKIM для Exim 4.69

Настройка DKIM через dkimproxy для Exim версии ниже 4.69 на серверах с ISPmanager


(ОС: Debian 5.0 x64)


apt-get install dkim-filter dkimproxy
Добавить в самое начала конфига /etc/exim4/exim4.conf.template
tls_advertise_hosts = 0.0.0.0.25
local_interfaces = 0.0.0.0 : 127.0.0.1.10025
Туда же в начало routers section
dkimproxy:
driver = manualroute
condition = "${if eq {$interface_port}{10025} {0}{1}}"
transport = dkimproxy_smtp
route_list = "* localhost byname"
self = send
Пример:
begin routers
        dkimproxy:
                driver = manualroute
                condition = "${if eq {$interface_port}{10025} {0}{1}}"
                transport = dkimproxy_smtp
                route_list = "* localhost byname"
                self = send
        dnslookup:
                driver = dnslookup
                domains = !+dummy_domains
Туда же в начало transports section
dkimproxy_smtp:
driver = smtp
port = 10027
allow_localhost
Пример:
begin transports
        dkimproxy_smtp:
                driver = smtp
                port = 10027
                allow_localhost
        remote_smtp:
                driver = smtp

        local_delivery:
                driver = appendfile
/etc/dkimproxy/dkimproxy_out.conf приводим к такому виду
# specify what address/port DKIMproxy should listen on
listen    127.0.0.1:10027

# specify what address/port DKIMproxy forwards mail to
relay     127.0.0.1:10025

# specify what domains DKIMproxy can sign for (comma-separated, no spaces)
# Note that this is set in /etc/init.d/dkimproxy in this Debian package
# unactivate it there if you want to use the config file
domain    <наш_домен>

# specify what signatures to add
signature dkim(c=relaxed)
signature domainkeys(c=nofws)

# specify location of the private key
keyfile   /var/lib/dkimproxy/private.key

# specify the selector (i.e. the name of the key record put in DNS)
selector  default
Генерим ключи
openssl genrsa -out private.key 1024
openssl rsa -in private.key -pubout -out public.key
private.key кладем в /var/lib/dkimproxy и выставляем на него права
chown dkimproxy:dkimproxy /var/lib/dkimproxy/private.key
chmod 600 /var/lib/dkimproxy/private.key
Создаем новую TXT запись в DNS целевого домена и записываем в него следующие данные, ключ берем из public.key
Пример TXT записи:
default._domainkey.<наш_домен>. IN TXT v=DKIM1; g=*; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDV4xSWbJ6VcSpNG4iixqKkp8HDo0ym3s4u07yElifc6T1viiby8P4kwFxlS5P5Msbgi6F5rMnWoLq5oKV6i0j+x4aCn6dyAD9FZYPnY2zerSDDBS7Y50tVgLbwWjCdAtuu4nZYSUfzGqtLXaZJ8gVefvWUNtsip6olGPWdxG0HDwIDAQAB
Правим hostname в /etc/hosts, чтобы команда hostname -d отдавала нормальное имя домена (dkimproxy берет имя домена через команду hostname -d, правка конфига dkimproxy для решения данной проблемы не поможет)
Перезагружаем dkimproxy, exim
Выполняем ps ax | grep dkimproxy и смотрим чтобы в ключе --domain было полное имя домена
Проверяем, отправляем на ящик gmail.com письмо и смотрим заголовки, если все хорошо то увидим строчку dkim=passed.
 Начиная с версии 4.70 Exim поддерживает DKIM нативно и пляски с dkimproxy уже не потребуются.

Squid + OpenLDAP


Настройка Squid на аутентификацию и авторизацию по данными из OpenLDAP. Резолвятся логин, пароль, членство в группе.
Аутентификация:
Добавляем в /etc/squid/squid.conf:
auth_param basic program /usr/lib/squid/squid_ldap_auth -v 3 -b "dc=company,dc=lan" -f sn=%s localhost
auth_param basic children 5
auth_param basic realm Web-Proxy
auth_param basic credentialsttl 1 minute
Смотрим группу:
Добавляем в /etc/squid/squid.conf:
external_acl_type ldap_group %LOGIN /usr/lib/squid/squid_ldap_group -P -v 3 -b "dc=company,dc=lan" -f "(&(objectClass=posixGroup)(cn=%a)(memberUid=%v))" localhost
Настройка соответствия групп openldap и ACL squid
acl full_access external ldap_group full_access
acl simple_access external ldap_group simple_access
acl simple_access_and_messagers external ldap_group simple_access_and_messagers
acl only_work_sites external ldap_group only_work_sites
ACL
acl list_work_sites dstdomain .ru.wikipedia.org
acl list_negative_sites dstdomain .vkontakte.ru .odnoklassniki.ru .youtube.com
ACL skype & icq
acl icq dstdomain .icq.com
acl numeric_IPs dstdom_regex ^(([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)|(\[([0-9af]+)?:([0-9af:]+)?:([0-9af]+)?\])):443
acl Skype_UA browser ^skype^
Раздача прав
http_access allow simple_access !list_negative_sites !icq !numeric_IPs !Skype_UA
http_access allow simple_access_and_messagers !list_negative_sites
http_access allow only_work_sites list_work_sites
http_access allow full_access
В openldap соответственно создаем группы и делаем их членами нужные нам учетные записи, сейчас схема такая:
simple_access - обычный доступ к инет
simple_access_and_messagers - доступ в инет + доступ к isq, skype
only_work_sites - доступ к рабочим сайтам
full_access - доступ в инет без ограничений
(вместо company.lan подставляем имя вашего домена в openldap)