пятница, 17 декабря 2010 г.

Как скрыть точки монтирования в Nautilus?

Иногда, это необходимо. Почему? Что бы всякие досужие пользователи не лезли куда им не следует!

Например, при старте системы монтируются шары с сервера (/etc/fstab), в которых находятся каталоги баз данных 1С. В Ubuntu принято подключать все шары и устройства в каталог /media - они соответственно появляются в "места" в Nautilus`e. Так вот многие юзверя считают, что все что на их компьютере - это их личная инфа. А особо заботливые - имеют свойства ее подчищать.
Дабы не лишиться полезной информации, которая лежит в шарах и доступна юзверям. необходимо ее от них прятать. Делается это просо. Монтируем шару в другое место, например, в /mnt.

Все! Nautilus больше не видит точек монтирования!

Жопиздан ;)

четверг, 16 декабря 2010 г.

Настройка Postfix+MySQL+Dovecot-POP3+Amavis в ubuntu server 10.04

Бывает, что после reboot`а сервера dovecot не поднимается автоматически. В логах при этом он сообщает, что "убил себя" из-за "Time moved backwards error". В общем время сместилось назад. Происходит если пользовать ntpdate (когда сервер в домене например), ну или, возможно, села батарейка... Причин масса.)
Как лечится? Создаем задание по рестарту dovecot в crontab. Пишем скрипт:

$sudo mcedit /usr/local/sbin/dovecot_check_restart.sh

#!/bin/sh
HOST='localhost'
PORT=110
#HP=@$HOST:$PORT
HP=:$PORT
echo 'Checking to see if Dovecot is up...'
if ( /usr/sbin/lsof -Pni $HP | grep "$PORT (LISTEN)" 2>&1 >/dev/null ); then
echo 'Dovecot is up';
else
echo 'Dovecot is down, restarting...';
/etc/init.d/dovecot restart
logger -p mail.info dovecot_check_restart.sh restarting Dovecot
fi
скрипт проверяет: запущен ли dovecot, если "нет" - рестартует его.
Для работы скрипта необходима программа lsof.

Добавляем наш скрипт в crontab:

$sudo mcedit /etc/crontab

* * * * * /usr/local/sbin/dovecot_check_restart.sh 2>&1 > /dev/null




Полезные команды по работе с почтой:


Посмотреть активные настройки Postfix:
# postconf -d 

Посмотреть сколько сообщений в очереди:
#mailq | grep Requests 

Посмотреть конкретно что в очереди:
#mailq 

Пнуть очередь на немедленную доставку:
#postsuper -r ALL; postfix flush 

Пнуть конкретное письмо по ID:
#postsuper -r ID 

Удалить письмо по ID:
#postsuper -d ID 


Удаление группы писем от определенного FROM (на примере MAILER-DAEMON):
#FreeBSD: mailq | grep 'MAILER-DAEMON' | awk '{print $1}' | xargs -I{} -n1 postsuper -d {} Linux: mailq | grep 'MAILER-DAEMON' | awk '{print $1}' | xargs -I{} -n1 /usr/sbin/postsuper -d {} 

Удаление группы писем от определенного FROM в статусе REQUIRE:
#mailq | grep 'MAILER-DAEMON' | awk '{print $1}' | tr -d '*' | xargs -I{} -n1 postsuper -d {} 


 Жопиздан:)

среда, 15 декабря 2010 г.

Настройка Postfix+MySQL+Dovecot-POP3+Amavis в ubuntu server 10.04

Раздел 8. AMaViS: фильтрация вирусов и спама.

На просторах интернета две извечных проблемы - спам и вирусы. Эти проблемы не обошли и почту. К счастью, бороться с обоими можно при помощи AMaViS (A Mail Virus Scaner). AMaViS - это своего рода интерфейс между Postfix, SpamAssasin (довольно распространенный и надежный спам-фильтр) и, опционально, антивирусом. AMaViS содержит спам-фильтр, но в нем нет встроенного антивируса. Т.е. нам необходимо установить таковой (что мы уже сделали в первом разделе этого мануала). Воспользуемся ClamAV`ом. Очень качественный и бесплатный антивирус с постоянным обновлением вирусных баз.

Конфигурационные файлы AMaViS лежат в /etc/amavis/conf.d. Итак, ClamAV у нас уже установлен и сконфигурирован по умолчанию, осталось только его включить:
#>mcedit /etc/amavis/conf.d/15-content_filter_mode

и раскомментируем строки, начинающиеся с:

@bypass_virus_checks_maps
@bypass_virus_checks_maps

Рассмотрим еще один конфиг /etc/amavis/conf.d/20-debian_defaults. Его непосредственно, лучше не править. Чтоб поправить его настройки - правильнее будет править /etc/amavis/conf.d/50-user и добавим в него:

$sa_spam_subject_tag = '***SPAM***'; 
$QUARANTINEDIR = '/var/vmail/spamvirusmails';
$spam_quarantine_method = 'local:spam-%b-%i-%n';
$spam_quarantine_to = 'spam-quarantine';
$final_spam_destiny = D_DISCARD;
$sa_tag_level_deflt  = undef;
$spam_admin = "root\@$mydomain";
1;  # ensure a defined return 

Возможные параметры:

$sa_spam_subject_tag: если установлен этот параметр - к теме email`а, который AMaViS сочтет спамом, будет добавлена строка "***SPAM***", установленная в этом параметре. Если мы хотим оставить "оригинальную" тему письма, то необходимо оставить этот параметр в виде: "$sa_spam_subject_tag = undef". Служебная инфа о том, что AMaViS пометил письмо "как спам", для пользователя все равно останется в X-Spam-Status заголовке.

$sa_tag_level_deflt: параметр спам-уровня (число). В зависимости от установленного уровня: выше или ниже, в заголовок письма будет добавляться спам-заголовки (т.е., на сколько я понял, в заголовок письма добавятся заголовки о спам проверке, вне зависимости от того, будет ли письмо расценено как спам или нет). Для упрощения отладки, мы всегда будем добавлять эти заголовки, поэтому этот параметр установлен в самый низкий уровень, т.е. "undef".

$sa_tag2_level_deflt: этот параметр спам-уровня отвечает за чувствительность спам-фильтра к определению спама. Лучше оставить его по-умолчанию (или вообще не определять в конфиге), ибо при слишком низком уровне - может проскочить много спама, при слишком высоком уровне - как спам могут быть расценены совершенно безобидные сообщения.

$sa_kill_level_deflt: должен быть установлен в то же значение, что и $sa_tag2_level_deflt

$final_spam_destiny: параметр "судьбы" спама. По-умолчанию = D_BOUNCE (отбросить).
В нашем случае, спам будет помещаться в карантин, т.е. D_DISCARD. Если же установить его в D_PASS - письма проходить будут, и пусть пользователь сам принимает решение о том, что делать со спамом.

Даем AMaViS`у разрешение на писать в карантин:

#> chown amavis:amavis -R /var/vmail/spamvirusmails

Перестартуем AMaViS:

#> /etc/init.d/amavis restart 

Проверяем, чтоб AMaViS слушал 10024 порт:

#> netstat -nap | grep 10024 

Должно быть что то типа:

tcp  0   0 127.0.0.1:10024     0.0.0.0:*    LISTEN   12345/amavisd 

Если получили похожую строку - значит AMaViS запущен и ждет SMTP сессии. В противном случае - смотри логи (/var/log/mail.log)

Теперь, рассмотрим как это работает. Кто то отправляет нам мыло из инета. Postfix его получает через TCP порт 25 (SMTP). Если Postfix пропускает это сообщение - он форвардит его AMaViS`у на TCP порт 10024 (SMTP). Далее, если AMaViS`а устраивает содержимое письма, то форвардит мыло обратно Postfix`у на TCP порт 10025 (SMTP). И после всего этого Postfix уже отправляет мыло до конечного получателя.


Объясняем Postfix`у вышеуказанную модель и укажем еще один важный параметр "receive_override_option", назначение которого рассмотрим позже:

#>postconf -e content_filter=smtp-amavis:[127.0.0.1]:10024
#>postconf -e receive_override_options=no_address_mappings 


Также, необходимо объявить службу smtp-amavis в параметрах /etc/postfix/master.cf. Плюс, указать Postfix`у слушать 10025 порт, для получения писем от AMaViD:

smtp-amavis unix -      -       n     -       2  smtp
     -o smtp_data_done_timeout=1200
     -o smtp_send_xforward_command=yes
     -o disable_dns_lookups=yes
     -o max_use=20
127.0.0.1:10025 inet n  -       -     -       -  smtpd
     -o content_filter=
     -o local_recipient_maps=
     -o relay_recipient_maps=
     -o smtpd_restriction_classes=
     -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 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
     -o local_header_rewrite_clients= 

Важно! В данном случае -o mynetworks=127.0.0.0/8 необходимо оставить именно в таком виде, а не указывать mynetworks как /etc/postfix/main.cf. Ибо связка Postfix - AMaViS крутятся на одном сервере и находятся в пределах одной подсети 127.0.0.0/8.


Перезагрузим Postfix:

#> postfix reload 


Дадим некоторые пояснения. Сначала мы установили опцию receive_override_options в значение no_address_mapping, ее мы упоминали выше. Она отключает все сопоставления (mapping) адресов. Для чего это нужно?

Postfix принимает письмо. Правила редиректа (таблица forwardings в MySQL) из-за отключения сопоставления адресов не сработали (не подтверждены). Письмо пересылается в службу smtp-amavis, после чего опять возвращается на 127.0.0.1:10025 уже с кучей параметров. Один из этих параметров как раз опять receive_override_option, но теперь уже без значения no_address_mapping (т.е. теперь сопоставление адресов включено). И уже на этом этапе происходит обработка таблицы forwardings. Т.е. эта опция необходима, что бы не задваивать письма при форвардинге.

Внимание! receive_override_option = no_address_mapping фактически дает директиву Postfix отключить форвардинг. И если впоследствии мы решим отключить AMaViS, то нужно будет убрать и эту опцию!!!


Напомним, что пользователь "clamav" должен быть в группе "amavis", что бы эти службы могли общаться друг сдругом. Добавим его туда:

#>adduser clamav amavis
#>/etc/init.d/clamav-daemon restart 


Отключим спам проверку для нашей (внутри нашего домена) исходящей почты. Для этого в /et/amavis/conf.d/50-user перед "1;" добавим такие строки:

@lookup_sql_dsn = (     ['DBI:mysql:database=mail;host=127.0.0.1;port=3306',
      'mail_admin',
      'mailadminpass']);
$sql_select_policy = 'SELECT domain FROM domains WHERE CONCAT("@",domain) IN (%k)'; 

@lookup_sql_dsn определяет параметры доступа AMaViS кнашей базе данных mail в MySQL. А $sql_select_policy задает SQL запрос, который выполняется когда AMaViS определяет из какого домена идет отсылка и принадлежит ли полученный домен нашему. %k - набор строк, с которыми идет сопоставление. Т.е. полноценный SQL запрос будет выглядеть следующим образом:

SELECT domain FROM domains WHERE CONCAT("@",name)
 IN ( 'john@example.com',
     'john',
     '@example.com',
     '@.example.com',
     '@.com', 
    '@.') 

Выглядит, конечно странно... Но в конечном итоге получим строку '@exemple.com'.

Перегрузим AMaViS:

#>/etc/init.d/amavis restart 


Пробуем отослать мыло на john@exemple.com. Если просмотреть заголовки письма, то мы должны найти строки, добавленные AMaViS:

X-Virus-Scanned: Debian amavisd-new at mymailserver
X-Spam-Score: 0
X-Spam-Level:
X-Spam-Status: No, score=0 tagged_above=-9999 required=6.31 tests=[none] 


На этом настройка завершена! Все входящие письма теперь будут проверяться на вирусы и спам. Выполним еще одну проверку. Пример спама есть в /usr/share/docs/spamassasin/exemples/sample-spam.txt. Отправим спам-сообщение на jhon@exemple.com:

#>sendmail john@example.com < /usr/share/doc/spamassassin/examples/sample-spam.txt 

Смотрим в логи /var/log/mail.log, должны увидеть что AMaViS отработал:

amavis[13001]: (13001-02) Passed SPAM, <...> -> , ... 

Отлично! Письмо помечено как спам и отправлено Jhon`у. И, наконец, устанавливаем необходимые права:

#>chmod o= /etc/amavis/conf.d/50-user

Все! Теперь имеем полнофункциональный почтовый сервер!

Данный мануал является вольным переводом статьи Postfix+MySQL+Dovecot-POP/IMAP+Amavis howto on Debian Lenny by Christoph Haas, адаптированный под UBUNTU 10.04

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


пятница, 10 декабря 2010 г.

Настройка Postfix+MySQL+Dovecot-POP3+Amavis в ubuntu server 10.04

Раздел 7. Аутентификация SMTP

Как это не грустно, но в любом случае, спамеры будут "склонять к интиму" нашу систему на предмет рассылки Спама, что рано или поздно приведет ваш почтовый сервер к "blacklist`у". Такие релеи (relay), которые не проверяют какие/от кого письма можно отправлять - называются открытыми релаями (open relay). К счастью, Postfix хорошо защищен от возможности стать open relay`ем. За сие отвечает очень важная опция smtp_recipient_restriction (ее мы рассмотрим позже).

А вообще, необходимо начать с того, что определим подсети (подсеть), которым разрешено использовать наш сервер в качестве транспортера. Это задается параметром mynetworks в main.cf. Обычно, это наша локальная сеть, т.е. локальным пользователям нет необходимости "аутентифицироваться" (если в нашей сети несколько подсетей - их можно указать через запятую):


#>postconf -e mynetworks=192.168.10.0/24, 192.168.1.0/24, 192.168.2.0/24

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

Тогда, необходимо найти способ, при котором наш майл-сервер доверял бы такому пользователю. То есть юзеру необходимо посылать свой логин/пароль майл-серверу, что б тот понимал что письма сего юзверя можно релеить (перенаправлять).
Собственно это и есть концепция аутентификации SMTP.

Аутентификация SMTP для Postfix всегда была нетривиальной задачей. Она реализована через библиотеку SASL (Simple Authentification and Sequtity Level), которая есть частью Cyrus маил-сервера. Т.е. отладка и анализ ошибок практически сводятся к нулю из-за бредовости информации, ее перекрестности - такие сообщения только больше вводят в заблуждение.
Но, наконец-то, начиная с Postfix`а версии 2.3 мы можем передать проверку подлинности Dovecot`у. И, раз уж уже сконфигурировали Dovecot, нам остается только добавить в конфиги Postfix`а несколько параметров:
#>postconf -e smtpd_sasl_type=dovecot
#>postconf -e smtpd_sasl_path=private/auth
#>postconf -e smtpd_sasl_auth_enable=yes
#>postconf -e smtpd_recipient_restrictions=check_sender_access hash:/etc/postfix/restricted_senders,
permit_mynetworks,
permit_sasl_authenticated,
reject_unknown_sender_domain,
reject_non_fqdn_recipient,
reject_unknown_recipient_domain,
reject_unverified_recipient,
reject_unauth_destination 

smtp_sasl_enabled - разрешает SMTP аутентификацию вцелом
smtp_recipient_restriction - определяет права, которые проверяются после того, как удаленный юзвер передает команду "RCPT TO:" во время SMTP диалога, т.е. релей разрешен в следующих случаях:
- check_sender_access hash:/etc/postfix/restricted_senders - проверяем доступность отправителя, т.е. создаем файло /etc/postfix/restricted_senders, где описываем доступность отправителя, такого содержания:
kimo.ua   571   We found it easier just to block you
antre.com.ua 571 We found it easier just to block you
mail.trcgs.com 571 Buzz off!
trcgs.com 571 Buzz off!
*.hinet.net 571 Buzz off!
ukr.net OK
*.ukr.net OK
ezvit.com.ua OK
mail.ezvit.com.ua OK
*.google.com OK
ну и объясним postfix`у о существовании этого файла:


#>postmap /etc/postfix/restricted_senders
!!! причем эту команду необходимо выполнять после каждого изменения файла /etc/postfix/restricted_senders

- permit_mynetworks - пользователь находится в нашей локалке
- permit_sasl_authentificated - юзверь прошел аутентификацию
- reject_unknown_sender_domain - отбрасывать отправителей из неизвестных доменов
- reject_non_fqdn_recipient - отбрасывать, если у получателя нет полного доменного имени
- reject_unknown_recipient_domain - отбрасывать, если у получателя не известный домен
- reject_unverified_recipient - отбрасывать, если получатель непроверен
- reject_unauth_destination - почта предназначена для пользователя НЕ из нашего локального или виртуального домена

Также, необходимо добавить еще несколько дополнительных ограничений:
#>postconf -e disable_vrfy_command = yes
#>postconf -e strict_rfc821_envelopes = yes
#>postconf -e smtpd_helo_required = yes
#>postconf -e smtp_helo_timeout = 500s
#>postconf -e minimal_backoff_time = 300s
#>postconf -e queue_run_delay = 240s
Порежем еще тех, кто не умеет здороваться:
#>postconf -e smtpd_helo_restrictions = reject_invalid_hostname,
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_hostname

Запретим соединение с нашим сервером клиентам, которые находятся в "blacklist`ах":
#>postconf -e smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/restricted_senders,
permit_mynetworks,
reject_unknown_sender_domain,
reject_invalid_hostname,
reject_non_fqdn_hostname,
reject_non_fqdn_sender,
reject_unknown_client,
reject_unknown_hostname,
reject_rbl_client sbl-xbl.spamhaus.org,
reject_rbl_client dnsbl.njabl.org,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client dul.ru,
reject_rhsbl_sender dsn.rfc-ignorant.org,
reject_rbl_client opm.blitzed.org,
reject_rbl_client list.dsbl.org,
reject_rbl_client sbl.spamhaus.org,
reject_rbl_client blackholes.mail-abuse.org,
reject_rbl_client dialups.mail-abuse.org,
reject_rbl_client dynablock.njabl.org,
reject_rbl_client combined.njabl.org,
reject_rbl_client dnsbl.sorbs.net,
reject_rhsbl_sender dsn.rfc-ignorant.org

Ну и, наконец, подограничим на предмет содержания письма:
#>postconf -e smtpd_data_restrictions = permit_mynetworks
reject_unauth_pipelining,
reject_multi_recipient_bounce,
permit
Пробуем аутентифицироваться в SMTP сессии:
#>telnet localhost smtp 
Сервер нас пустил:
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mailtest ESMTP Postfix (Ubuntu) 
Здороваемся:
ehlo example.com 
Postfix выдает нам список особенностей, допустимых в процессе SMTP диалога:
250-mailtest
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN 
Засылаем строку аутентификации c Base64-кодированным паролем:
auth plain am9obkBleGFtcGxlLmNvbQBqb2huQGV4YW1wbGUuY29tAGpob24=
Сервер должен принять аутентификацию:
235 2.0.0 Authentication successful 
Отключаемся от Postfix`а:
quit 
Он тоже прощается):
221 2.0.0 Bye 

Отлично! Аутентификация работает.
Внимание! Если в качестве пароля для jhon@exemple.com был выбран пароль отличный от "jhon", выбранный пароль необходимо перекодировать:
$>perl -MMIME::Base64 -e 'print encode_base64("john\@example.com\0john\@example.com\0password")';

Теперь можно потестить отправку мыла с включенной аутентификацией SMTP. Для этого временно уберем нашу локалку из доверительных сетей:

#>postconf -e mynetworks=
#>postfix reload 
Перезагрузить Postfix можно также можно и командой /etc/init.d/postfix restart. Запускаем почтового клиента и смотрим логи (tail /var/log/mail/mail.log) во время отсылки письма во внешний (интернет) домен. Можно послать мыло, например, на devnull@workaround.org. Если все гуд - в логе будет:
postfix/smtpd[4032]: 1234567890: client=..., sasl_method=PLAIN, sasl_username=john@example.com
postfix/cleanup[4040]: 2EAE8379CB: message-id=<...>
postfix/qmgr[3963]: 1234567890: from=john@example.com, size=830, nrcpt=1 (queue active)
postfix/smtpd[4032]: disconnect from ... 
postfix/smtp[4041]: 1234567890: to=devnull@workaround.org,     
relay=torf.workaround.org[212.12.58.129]:25, delay=6, 
delays=0.09/0.08/5.6/0.23, dsn=2.0.0, status=sent
(250 OK id=1HsPC3-0008UJ-O5)
postfix/qmgr[3963]: 2EAE8379CB: removed 
В случае ошибки в логе будет что похожее на:
postfix/smtpd[4032]: connect from ...[10.20.30.40]
postfix/smtpd[4032]: warning: ...[10.20.30.40]: SASL PLAIN authentication failed:
postfix/smtpd[4032]: lost connection after AUTH from ...[10.20.30.40]
postfix/smtpd[4032]: disconnect from ...[10.20.30.40] 
Не забываем вернуть нашу локалку в доверительные сети:
#>postconf -e mynetworks=192.168.10.0/24, 192.168.1.0/24, 192.168.2.0/24
#>postfix reload 

На этом все! Настройка завершена. Теперь проверим отсекаются ли попытки внешнего релея:
#>telnet relay-test-abuse.org

Ждем пока пройдет проверка... Если в конце мы увидим что то вроде:
"System appeared to reject relay attempts"
значит все ОК.
Жопиздан (с) Job Is Done