Postfix vmail-visa spam filter

vladimir simeonov
18/07/2011

Спам.. Кошмара на всеки mail administrator. В борбата с него има два основни подхода:

1. позволяваш на писмата да влязат в сървъра за обработка и ги изпращаш към spam filter от рода на spamassassin.

2. филтрираш писмата преди да са постъпили в системата на базата на graylist, whitelist, blacklist и т.н.

3. кръстоска между 1 и 2

Ако сървъра който получава писма е споделен хостинг, то с времето неиминуемо ще започне да получава огромни количества спам. Ако администратора използва вариант 1, то ще се наложи да добавя процесори и памет за лакомия spamassassin. работил съм на машина, която 50-80% от процесорното време се яде от spamd, до положение при което се получават timeout поради огромното време което spamd му отнема за проверката на потока. грозна картина.

въобще ако не разполагам с плаформа за филтриране от рода на CISCO IronPort, дори не бих се захванал да реализирам вариант 1.

Недостатъците на вариант 2 са следните:

1. blacklist ите от рода на spamcop, spamhaus и т.н. RBL, PBL са , че в тях не попадат всички адреси от които се изпраща spam. но това е обстоятелство което може да се компенсира единствено, чрез добавяне на нови lists. разбира се трябва да се има впредвид, че ако някоя от листите се срине и не е достъпна за проверка, системата се чупи и то доста грозно!!

2. whitelist – е не можете да имате в реално време такава листа, което обаче е добра идея за проект с такава насоченост

3. graylist – основните недостатъци са:

– системи които не са протоколно съвместими (при получаване на грешка 4.5.0 не оставят писмото в queue/spool за повторно предаване), най – често това са web scripts, които директно изпращат писмата без да ползват клиент (postfix, sendmail, etc.)

– интервалите на повторно предаване на писмата за различните mail servers са различни, от 4мин до 4часа и повече (случвало се е писмото да пристига след 12часа)

4. forward-reverse dns lookup е метод при който postfix проверява дали адреса от който е остановена връзка за получаване на писмо има обратен запис и дали hostname-a на обратния запис съответства с правия запис (127.0.0.1 -> mail.example.com; mail.example.com -> 127.0.0.1)

комбинация от 4 посочени метода гарантират 99% блокиране на SPAM. но също така метод 4 има основният недостатък да генерира огромен процент false positive. причината?? неправилно конфигурирани пощенски сървъри.

в интернет работят системи за изпращане на писма, които са свръх неправилно конфигурирани, техните администратори дори не знаят, че ако нямат правилно конфигуриран forward-reverse dns lookup, стотици хиляди сървъри ще отхвърлят писмата им като спам.

и тъйкато в определен момент си казах стига, не мога по цял ден да чистя false-positive, създадох един скрипт, който филтрира т.н. false-positive по много прост метод:

1. неправилно конфигуриран сървър опитва да изпрати писмо до моят сървър.

2. сървъра отхвърля писмото с грешка 4.8.1

3. филтъра хваща чрез postfix perl dragon лога това отхвърляне и започва проверка на адреса на подателя.

4. при повторен опит за доставяне на същото писмо от host-а, скрипта на базата на точките които хоста е събрал при проверката му от скрипта, добавя хоста в whitelist-a или в перманентен blacklist.

единственият недостатък на скрипта е, че хоста трябва да направи 3 опита за доставка на писмото, което означава време и забавяне.

скрипта е част от проекта Vmail Visa, можете да го свалите от https://sourceforge.net/projects/vmail-visa/

за инсталация – Readme. 🙂

Hawai – Postfix autoreply daemon

vladimir simeonov
18/07/2011

Hawai е проект, който предоставя автономен autoreply демон за postfix. Базиран е като замисъл (но не и като код) на Yaa. yaa е един недобре написан скрипт, който по – скоро неработи, отколкото върши полезна дейност.

Hawai се закача към postfix на транспортно ниво чрез следната схема:

входящо писмо (to [email protected]) -> noreply alias: [email protected], [email protected],

autoreply.lordofdeath.net -> transport hawai

transport hawai-> hawai.pl

самият скрипт проверява за всяко получено писмо дали е включен автоматичен отговор в съответната таблица на mysql за autoreply.

самите правила се дефинират, чрез plugin за RoundCube или друга свободна имплементация на интерфейс.

инсталация: Readme.

ubuntu 8.04 mail server

vladimir simeonov
04/07/2011

С това ръководство ще се опитам да събера на едно място начините за изграждане на пълнофункционален пощенски сървър на базата на:

Ubuntu Server 8.04 LTS

изграден е на базата на: POSTFIX (MTA) + Mysql (съхранение на данни за потребители) + Postfixadmin (php код за управление на акаунтите на postfix посредством web browser) + SASL (позволява логване на потребители при изпращане на писма) + IMAP/POP3 (позволява проверка на получени писма) + RoundCube Webmail (проверка на писма през browser) + Amavis-new (анти – спам и анти – вирусен скенер)

В интернет има няколко подобни ръководства, но в тях нещата не са завършени, а някой компонени не се настройват правилно и времето по отстраняване и намиране на грешките надхвърля значитено времето по изпълнение на самото ръководство. Главно ще се водя по следните достъпни ръководства,

  • https://help.ubuntu.com/community/PostfixCompleteVirtualMailSystemHowto
  • http://forums.linux-index.org/cgi-bin/virtual-users-and-domains-with-postfix-ubuntu-8.04
  • http://www.starbridge.org/spip/spip.php?article1

напомням, че това е нещо като сборник на всички полезни и правилни инструкции в тях, с нищо не съм внасял от себе си, ползвал съм и доста материали от интернет за дребни надстройки, за които ми е трудно да предоставя точен линк. Не желая да приписвам никакви заслуги на себе си по реализацията на описаното.

1. Няма да описвам как да инсталирате базовата инсталация. Това трябва да направите сами. По време на инсталацията е препоръчително да маркирате за инсталация следните компоненти, но не е фатално ако ги пропуснете: OpenSSH Server, LAMP, BIND DNS server

2. Изключително важно е да имате домейн, който да има прав и обратен resolve към инсталираната машина. Опците по сигурността, който ще бъдат въведени по – късно ще спират изпращането и получаване на писма от сервъра ако той няма FQDN, nslookup IP не връща FQDN/Hostname

3. Интерфейсите на мрежовите контролери трябва да са настроени със статични адреси.

4. Всички команди които ползвам ще се изпълняват като потребител root, т.е. ще изпусна sudo, ако не сте задали парола за root акаунта можете да го направите като: $sudo passwd root, или да влезете временно като root: $sudo su -, или просто да ги изпълнявате като добавяте sudo пред тях.

5. Инсталиране на пакети:

apt-get install postfix postfix-mysql mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl postfix-tls libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql libpam-smbpass roundcube-webmail postgrey

6. Ако не сте задали парола на mysql-server,

mysqladmin -u root password <парола>

7. Ако не си спомняте паролата на root потребителя в mysql, тук е описано как може да се смени:

  • http://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html

8. Ще използваме папката /usr/src за временни файлове и downloads

mkdir -p /usr/src/postfix; touch /usr/src/postfix/postfixadmin-mysq.sql;

9. Ако ползвате nano заместете editor с нано, ако ползвате vi, по – добре инсталирайте vim и използвайте vim вместо editor на следващите редове.

nano /usr/src/postfix/postfixadmin-mysql.sql

Поставете вътре следното съдържание, ЗАМЕНИТЕ УДЕБЕЛЕНИЯТ ШРИФТ С ПАРОЛА ПО ВАШ ИЗБОР, ТЯ НЕ ТРЯБВА ДА Е ЕДНАКВА С ТАЗИ НА MYSQL, ТАЗИ ПАРОЛА ЩЕ СЕ ИЗПОЛЗВА ПО – НАТАТЪК В НАСТРОЙКИТЕ, ЩЕ Я МАРКИРАМ С PAROLA, КЪДЕТО ВИДИТЕ PAROLA, НАПРЕД В ИНСТРУКЦИИТЕ Я ЗАМЕНЕТЕ С ПАРОЛАТА КОЯТО СТЕ ИЗБРАЛИ, ЗАБЕЛЕЖЕТЕ ЧЕ ТУК ПРАВИМ 2 ПОТРЕБИТЕЛЯ, ТАКА ЧЕ ПАРОЛИТЕ СА 2, PAROLA1 и PAROLA2, PAROLA2 ще ползваме само на 1 място, но те тр. да са различни

CREATE DATABASE postfix;

GRANT SELECT ON postfix.* TO [email protected] IDENTIFIED BY ‘PAROLA1‘;

GRANT ALL ON postfix.* TO [email protected] IDENTIFIED BY ‘PAROLA2‘;

USE postfix;

#

# Table structure for table admin

#

CREATE TABLE admin (

username varchar(255) NOT NULL default ”,

password varchar(255) NOT NULL default ”,

created datetime NOT NULL default ‘0000-00-00 00:00:00’,

modified datetime NOT NULL default ‘0000-00-00 00:00:00’,

active tinyint(1) NOT NULL default ‘1’,

PRIMARY KEY (username),

KEY username (username)

) COMMENT=’Postfix Admin – Virtual Admins’;

#

# Table structure for table alias

#

CREATE TABLE alias (

address varchar(255) NOT NULL default ”,

goto text NOT NULL,

domain varchar(255) NOT NULL default ”,

created datetime NOT NULL default ‘0000-00-00 00:00:00’,

modified datetime NOT NULL default ‘0000-00-00 00:00:00’,

active tinyint(1) NOT NULL default ‘1’,

PRIMARY KEY (address),

KEY address (address)

) COMMENT=’Postfix Admin – Virtual Aliases’;

#

# Table structure for table domain

#

CREATE TABLE domain (

domain varchar(255) NOT NULL default ”,

description varchar(255) NOT NULL default ”,

aliases int(10) NOT NULL default ‘0’,

mailboxes int(10) NOT NULL default ‘0’,

maxquota int(10) NOT NULL default ‘0’,

transport varchar(255) default NULL,

backupmx tinyint(1) NOT NULL default ‘0’,

created datetime NOT NULL default ‘0000-00-00 00:00:00’,

modified datetime NOT NULL default ‘0000-00-00 00:00:00’,

active tinyint(1) NOT NULL default ‘1’,

PRIMARY KEY (domain),

KEY domain (domain)

) COMMENT=’Postfix Admin – Virtual Domains’;

#

# Table structure for table domain_admins

#

CREATE TABLE domain_admins (

username varchar(255) NOT NULL default ”,

domain varchar(255) NOT NULL default ”,

created datetime NOT NULL default ‘0000-00-00 00:00:00’,

active tinyint(1) NOT NULL default ‘1’,

KEY username (username)

) COMMENT=’Postfix Admin – Domain Admins’;

#

# Table structure for table log

#

CREATE TABLE log (

timestamp datetime NOT NULL default ‘0000-00-00 00:00:00’,

username varchar(255) NOT NULL default ”,

domain varchar(255) NOT NULL default ”,

action varchar(255) NOT NULL default ”,

data varchar(255) NOT NULL default ”,

KEY timestamp (timestamp)

) COMMENT=’Postfix Admin – Log’;

#

# Table structure for table mailbox

#

CREATE TABLE mailbox (

username varchar(255) NOT NULL default ”,

password varchar(255) NOT NULL default ”,

name varchar(255) NOT NULL default ”,

maildir varchar(255) NOT NULL default ”,

quota int(10) NOT NULL default ‘0’,

domain varchar(255) NOT NULL default ”,

created datetime NOT NULL default ‘0000-00-00 00:00:00’,

modified datetime NOT NULL default ‘0000-00-00 00:00:00’,

active tinyint(1) NOT NULL default ‘1’,

PRIMARY KEY (username),

KEY username (username)

) COMMENT=’Postfix Admin – Virtual Mailboxes’;

#

# Table structure for table vacation

#

CREATE TABLE vacation (

email varchar(255) NOT NULL default ”,

subject varchar(255) NOT NULL default ”,

body text NOT NULL,

cache text NOT NULL,

domain varchar(255) NOT NULL default ”,

created datetime NOT NULL default ‘0000-00-00 00:00:00’,

active tinyint(1) NOT NULL default ‘1’,

PRIMARY KEY (email),

KEY email (email)

) COMMENT=’Postfix Admin – Virtual Vacation’;

#————————————End copy————————————-

След това изпълнете следната команда, ще изисква да въведете в терминал паролата на root, за mysql

mysql -u root -p < /usr/src/postfix/postfixadmin-mysql.sql

10. В следващата стъпка създаваме няколко важни файла, не забравяйте че в тях PAROLA1 е паролата която въведохте в кога по – горе!

editor /etc/postfix/mysql_virtual_alias_maps.cf

user = postfix

password = PAROLA1

hosts = 127.0.0.1

dbname = postfix

table = alias

select_field = goto

where_field = address

editor /etc/postfix/mysql_virtual_domains_maps.cf

user = postfix

password = PAROLA1

hosts = 127.0.0.1

dbname = postfix

table = domain

select_field = domain

where_field = domain

#additional_conditions = and backupmx = ‘0’ and active = ‘1’

editor /etc/postfix/mysql_virtual_mailbox_maps.cf

user = postfix

password = PAROLA1

hosts = 127.0.0.1

dbname = postfix

table = mailbox

select_field = maildir

where_field = username

#additional_conditions = and active = ‘1’

editor /etc/postfix/mysql_virtual_mailbox_limit_maps.cf

user = postfix

password = PAROLA1

hosts = 127.0.0.1

dbname = postfix

table = mailbox

select_field = quota

where_field = username

#additional_conditions = and active = ‘1’

editor /etc/postfix/mysql_relay_domains_maps.cf

user = postfix

password = PAROLA1

hosts = 127.0.0.1

dbname = postfix

table = domain

select_field = domain

where_field = domain

additional_conditions = and backupmx = ‘1’

11. Следващата стъпка е да защитим файловете от промяна и няпозволен достъп:

chgrp postfix /etc/postfix/mysql_*.cf

chmod 640 /etc/postfix/mysql_*.cf

12. Създаваме потребител на който ще принадлежат писмата който ще се записват на диска

groupadd -g 5000 vmail

useradd -m -g vmail -u 5000 -d /home/vmail -s /bin/bash vmail

13. редактирайте /etc/postfix/main.cf и генерираме ключ за SSL/TLS

cd /etc/postfix

openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509

ЗАДЪЛЖИТЕЛНО СМЕНЕТЕ УДЕБЕЛЕНИЯТ ТЕКСТ С ВАШИЯТ DOMAIN/HOSTNAME.

# See /usr/share/postfix/main.cf.dist for a commented, more complete version

# Debian specific: Specifying a file name will cause the first

# line of that file to be used as the name. The Debian default

# is /etc/mailname.

#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)

biff = no

# appending .domain is the MUA’s job.

append_dot_mydomain = no

# Uncomment the next line to generate “delayed mail” warnings

#delay_warning_time = 4h

readme_directory = no

# TLS parameters

smtpd_tls_cert_file=/etc/postfix/smtpd.cert

smtpd_tls_key_file=/etc/postfix/smtpd.key

smtpd_use_tls=yes

smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for

# information on enabling SSL in the smtp client.

myhostname = MYHOSTNAME/FQDN

alias_maps = hash:/etc/aliases

alias_database = hash:/etc/aliases

myorigin = /etc/mailname

mydestination =

relayhost =

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

mailbox_size_limit = 0

recipient_delimiter = +

inet_interfaces = all

####PostfixAdmin

virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf

virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf

virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf

virtual_mailbox_limit = 51200000

virtual_minimum_uid = 5000

virtual_uid_maps = static:5000

virtual_gid_maps = static:5000

virtual_mailbox_base = /home/vmail

virtual_transport = virtual

# Additional for quota support

virtual_create_maildirsize = yes

virtual_mailbox_extended = yes

virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf

virtual_mailbox_limit_override = yes

virtual_maildir_limit_message = Sorry, the your maildir has overdrawn your diskspace quota, please free up some of spaces of your mailbox try again.

virtual_overquota_bounce = yes

###SMTP AUTH

smtpd_sasl_auth_enable = yes

smtpd_sasl_security_options = noanonymous

smtpd_sasl_local_domain =

broken_sasl_auth_clients = yes

smtpd_sasl_authenticated_header = yes

#smtpd_sasl_application_name = smtpd

#cyrus_smtpd_sasl_path = /etc/postfix/sasl:/usr/lib/sasl2

###POLICY

smtpd_recipient_restrictions =

reject_unauth_pipelining,

permit_mynetworks,

check_policy_service inet:127.0.0.1:60000,

permit_sasl_authenticated,

reject_non_fqdn_recipient,

reject_unauth_destination,

reject_invalid_hostname,

reject_non_fqdn_hostname,

reject_non_fqdn_sender,

reject_unknown_recipient_domain,

reject_unauth_pipelining,

reject_rbl_client zen.spamhaus.org,

# reject_rbl_client no-more-funn.moensted.dk,

# reject_rbl_client virbl.dnsbl.bit.nl,

reject_rbl_client bl.spamcop.net,

# reject_rbl_client dynamic.spamlists.tqmcube.com,

# reject_rbl_client list.dsbl.org,

# reject_rbl_client dnsbl-1.uceprotect.net,

# reject_rbl_client dnsbl-2.uceprotect.net,

# reject_rbl_client dnsbl-3.uceprotect.net,

# reject_rbl_client relays.ordb.org,

# reject_rbl_client lists.spam.sux.com,

# reject_rbl_client impersonator.lists.spam.sux.com,

# reject_rbl_client dnsbl.njabl.org,

# reject_rbl_client dnsbl.ahbl.org,

permit

smtpd_sender_restrictions =

permit_sasl_authenticated,

permit_mynetworks,

reject_non_fqdn_sender,

reject_unknown_sender_domain,

hash:/etc/postfix/access-sender,

reject_unauth_pipelining,

permit

smtpd_client_restrictions =

hash:/etc/postfix/access,

check_client_access hash:/etc/postfix/rbl-whitelist,

permit_mynetworks,

reject_unauth_pipelining,

reject_rbl_client zen.spamhaus.org,

permit

#smtpd_helo_restrictions =

# permit_mynetworks,

# permit_sasl_authenticated,

#reject_non_fqdn_hostname,

#reject_invalid_hostname,

# permit

smtpd_delay_reject = yes

content_filter = amavis:[127.0.0.1]:10024

receive_override_options = no_address_mappings

14. Свалете postfixadmin:

инсталира се с

dpkg -i postfixadmin*.deb

рестартираме apache2:

/etc/init.d/apache2 restart

15. главният му файл за настройка се намира в /etc/postfixadmin/config*

можете да го направите да изглежда така:

Сменете PAROLA2 с паролата която въведохте в файла в началото:

/**

* Postfix Admin

*

* LICENSE

* This source file is subject to the GPL license that is bundled with

* this package in the file LICENSE.TXT.

*

* Further details on the project are available at :

* http://www.postfixadmin.com or http://postfixadmin.sf.net

*

* @version $Id: config.inc.php 309 2008-03-05 00:09:46Z christian_boltz $

* @license GNU GPL v2 or later.

*

* File: config.inc.php

* Contains configuration options.

*/

if (ereg (“config.inc.php”, $_SERVER[‘PHP_SELF’]))

{

header (“Location: login.php”);

exit;

}

/*****************************************************************

* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

* The following line needs commenting out or removing before the

* application will run!

* Doing this implies you have changed this file as required.

*/

$CONF[‘configured’] = yes;

// Postfix Admin Path

// Set the location of your Postfix Admin installation here.

// YOU MUST ENTER THE COMPLETE URL e.g. http://domain.tld/postfixadmin

$CONF[‘postfix_admin_url’] = ”;

// shouldn’t need changing.

$CONF[‘postfix_admin_path’] = ‘/usr/share/postfixadmin’;

// Language config

// Language files are located in ‘./languages’, change as required..

$CONF[‘default_language’] = ‘en’;

// Database Config

// mysql = MySQL 3.23 and 4.0

// mysqli = MySQL 4.1

// pgsql = PostgreSQL

$CONF[‘database_type’] = ‘mysqli’;

$CONF[‘database_host’] = ‘localhost’;

$CONF[‘database_user’] = ‘postfixadmin’;

$CONF[‘database_password’] = ‘PAROLA2‘;

$CONF[‘database_name’] = ‘postfix’;

$CONF[‘database_prefix’] = ”;

// Here, if you need, you can customize table names.

$CONF[‘database_prefix’] = ”;

$CONF[‘database_tables’] = array (

‘admin’ => ‘admin’,

‘alias’ => ‘alias’,

‘config’ => ‘config’,

‘domain’ => ‘domain’,

‘domain_admins’ => ‘domain_admins’,

‘log’ => ‘log’,

‘mailbox’ => ‘mailbox’,

‘vacation’ => ‘vacation’,

‘vacation_notification’ => ‘vacation_notification’,

);

// Site Admin

// Define the Site Admins email address below.

// This will be used to send emails from to create mailboxes.

$CONF[‘admin_email’] = ‘[email protected]’;

// Mail Server

// Hostname (FQDN) of your mail server.

// This is used to send email to Postfix in order to create mailboxes.

$CONF[‘smtp_server’] = ‘localhost’;

$CONF[‘smtp_port’] = ’25’;

// Encrypt

// In what way do you want the passwords to be crypted?

// md5crypt = internal postfix admin md5

// md5 = md5 sum of the password

// system = whatever you have set as your PHP system default

// cleartext = clear text passwords (ouch!)

$CONF[‘encrypt’] = ‘md5crypt’;

// Minimum length required for passwords. Postfixadmin will not

// allow users to set passwords which are shorter than this value.

$CONF[‘min_password_length’] = 0;

// Generate Password

// Generate a random password for a mailbox or admin and display it.

// If you want to automagically generate paswords set this to ‘YES’.

$CONF[‘generate_password’] = ‘YES’;

// Show Password

// Always show password after adding a mailbox or admin.

// If you want to always see what password was set set this to ‘YES’.

$CONF[‘show_password’] = ‘YES’;

// Page Size

// Set the number of entries that you would like to see

// in one page.

$CONF[‘page_size’] = ‘100’;

// Default Aliases

// The default aliases that need to be created for all domains.

[B]$CONF[‘default_aliases’] = array (

‘abuse’ => ‘[email protected]’,

‘hostmaster’ => ‘[email protected]’,

‘postmaster’ => ‘[email protected]’,

‘webmaster’ => ‘[email protected]

);[/B]

// Mailboxes

// If you want to store the mailboxes per domain set this to ‘YES’.

// Examples:

// YES: /usr/local/virtual/domain.tld/[email protected]

// NO: /usr/local/virtual/[email protected]

$CONF[‘domain_path’] = ‘YES’;

// If you don’t want to have the domain in your mailbox set this to ‘NO’.

// Examples:

// YES: /usr/local/virtual/domain.tld/[email protected]

// NO: /usr/local/virtual/domain.tld/username

// Note: If $CONF[‘domain_path’] is set to NO, this setting will be forced to YES.

$CONF[‘domain_in_mailbox’] = ‘NO’;

// Default Domain Values

// Specify your default values below. Quota in MB.

$CONF[‘aliases’] = ‘100’;

$CONF[‘mailboxes’] = ‘100’;

$CONF[‘maxquota’] = ‘100’;

// Quota

// When you want to enforce quota for your mailbox users set this to ‘YES’.

$CONF[‘quota’] = ‘YES’;

// You can either use ‘1024000’ or ‘1048576’

$CONF[‘quota_multiplier’] = ‘1024000’;

// Transport

// If you want to define additional transport options for a domain set this to ‘YES’.

// Read the transport file of the Postfix documentation.

$CONF[‘transport’] = ‘NO’;

// Transport options

// If you want to define additional transport options put them in array below.

$CONF[‘transport_options’] = array (

‘virtual’, // for virtual accounts

‘local’, // for system accounts

‘relay’ // for backup mx

);

// Transport default

// You should define default transport. It must be in array above.

$CONF[‘transport_default’] = ‘virtual’;

// Virtual Vacation

// If you want to use virtual vacation for you mailbox users set this to ‘YES’.

// NOTE: Make sure that you install the vacation module. http://high5.net/postfixadmin/

$CONF[‘vacation’] = ‘YES’;

// This is the autoreply domain that you will need to set in your Postfix

// transport maps to handle virtual vacations. It does not need to be a

// real domain (i.e. you don’t need to setup DNS for it).

$CONF[‘vacation_domain’] = ‘autoreply.lod.air’;

// Vacation Control

// If you want users to take control of vacation set this to ‘YES’.

$CONF[‘vacation_control’] =’YES’;

// Vacation Control for admins

// Set to ‘YES’ if your domain admins should be able to edit user vacation.

$CONF[‘vacation_control_admin’] = ‘YES’;

// Alias Control

// Postfix Admin inserts an alias in the alias table for every mailbox it creates.

// The reason for this is that when you want catch-all and normal mailboxes

// to work you need to have the mailbox replicated in the alias table.

// If you want to take control of these aliases as well set this to ‘YES’.

$CONF[‘alias_control’] = ‘YES’;

// Alias Control for admins

// Set to ‘NO’ if your domain admins shouldn’t be able to edit user aliases.

$CONF[‘alias_control_admin’] = ‘YES’;

// Special Alias Control

// Set to ‘NO’ if your domain admins shouldn’t be able to edit default aliases.

$CONF[‘special_alias_control’] = ‘YES’;

// Alias Goto Field Limit

// Set the max number of entries that you would like to see

// in one ‘goto’ field in overview, the rest will be hidden and “[and X more…]” will be added.

// ‘0’ means no limits.

$CONF[‘alias_goto_limit’] = ‘0’;

// Backup

// If you don’t want backup tab set this to ‘NO’;

$CONF[‘backup’] = ‘YES’;

// Send Mail

// If you don’t want sendmail tab set this to ‘NO’;

$CONF[‘sendmail’] = ‘YES’;

// Logging

// If you don’t want logging set this to ‘NO’;

$CONF[‘logging’] = ‘YES’;

// Fetchmail

// If you don’t want fetchmail tab set this to ‘NO’;

$CONF[‘fetchmail’] = ‘YES’;

// fetchmail_extra_options allows users to specify any fetchmail options and any MDA

// (it will even accept ‘rm -rf /’ as MDA!)

// This should be set to NO, except if you *really* trust *all* your users.

$CONF[‘fetchmail_extra_options’] = ‘NO’;

// Header

$CONF[‘show_header_text’] = ‘NO’;

$CONF[‘header_text’] = ‘:: Postfix Admin ::’;

// link to display under ‘Main’ menu when logged in as a user.

$CONF[‘user_footer_link’] = “http://change-this-to-your.domain.tld/main”;

// Footer

// Below information will be on all pages.

// If you don’t want the footer information to appear set this to ‘NO’.

$CONF[‘show_footer_text’] = ‘YES’;

$CONF[‘footer_text’] = ‘Return to change-this-to-your.domain.tld’;

$CONF[‘footer_link’] = ‘http://change-this-to-your.domain.tld’;

// Welcome Message

// This message is send to every newly created mailbox.

// Change the text between EOM.

$CONF[‘welcome_text’] = <<

Hi,

Welcome to your new account.

http://webmail.lod.air

EOM;

// When creating mailboxes, check that the domain-part of the

// address is legal by performing a name server look-up.

$CONF[’emailcheck_resolve_domain’]=’YES’;

// Optional:

// Analyze alias gotos and display a colored block in the first column

// indicating if an alias or mailbox appears to deliver to a non-existent

// account. Also, display indications, for POP/IMAP mailboxes and

// for custom destinations (such as mailboxes that forward to a UNIX shell

// account or mail that is sent to a MS exchange server, or any other

// domain or subdomain you use)

// See http://www.w3schools.com/html/html_colornames.asp for a list of

// color names available on most browsers

//set to YES to enable this feature

$CONF[‘show_status’]=’YES’;

//display a guide to what these colors mean

$CONF[‘show_status_key’]=’YES’;

// ‘show_status_text’ will be displayed with the background colors

// associated with each status, you can customize it here

$CONF[‘show_status_text’]=’ ‘;

// show_undeliverable is useful if most accounts are delivered to this

// postfix system. If many aliases and mailboxes are forwarded

// elsewhere, you will probably want to disable this.

$CONF[‘show_undeliverable’]=’NO’;

$CONF[‘show_undeliverable_color’]=’tomato’;

$CONF[‘show_undeliverable_exceptions’]=array(“unixmail.domain.ext”,”exchangeserver.domain.ext”,”gmail.com”);

$CONF[‘show_popimap’]=’NO’;

$CONF[‘show_popimap_color’]=’darkgrey’;

// set ‘show_custom_count’ to 0 to disable custom indicators

$CONF[‘show_custom_count’]=2;

$CONF[‘show_custom_domains’]=array(“subdomain.domain.ext”,”domain2.ext”);

$CONF[‘show_custom_colors’]=array(“lightgreen”,”lightblue”);

// Optional:

// ****** to run after creation of mailboxes.

// Note that this may fail if PHP is run in “safe mode”, or if

// operating system features (such as SELinux) or limitations

// prevent the web-server from executing external scripts.

// $CONF[‘mailbox_postcreation_script’]=’sudo -u courier /usr/local/bin/postfixadmin-mailbox-postcreation.sh’;

// Optional:

// ****** to run after deletion of mailboxes.

// Note that this may fail if PHP is run in “safe mode”, or if

// operating system features (such as SELinux) or limitations

// prevent the web-server from executing external scripts.

// $CONF[‘mailbox_postdeletion_script’]=’sudo -u courier /usr/local/bin/postfixadmin-mailbox-postdeletion.sh’;

// Optional:

// ****** to run after deletion of domains.

// Note that this may fail if PHP is run in “safe mode”, or if

// operating system features (such as SELinux) or limitations

// prevent the web-server from executing external scripts.

// $CONF[‘domain_postdeletion_script’]=’sudo -u courier /usr/local/bin/postfixadmin-domain-postdeletion.sh’;

// Optional:

// Sub-folders which should automatically be created for new users.

// The sub-folders will also be subscribed to automatically.

// Will only work with IMAP server which implement sub-folders.

// Will not work with POP3.

// If you define create_mailbox_subdirs, then the

// create_mailbox_subdirs_host must also be defined.

//

// $CONF[‘create_mailbox_subdirs’]=array(‘Spam’);

// $CONF[‘create_mailbox_subdirs_host’]=’localhost’;

//

// Normally, the TCP port number does not have to be specified.

// $CONF[‘create_mailbox_subdirs_hostport’]=143;

//

// If you have trouble connecting to the IMAP-server, then specify

// a value for $CONF[‘create_mailbox_subdirs_hostoptions’]. These

// are some examples to experiment with:

// $CONF[‘create_mailbox_subdirs_hostoptions’]=array(‘notls’);

// $CONF[‘create_mailbox_subdirs_hostoptions’]=array(‘novalidate-cert’,’norsh’);

// See also the “Optional flags for names” table at

// http://www.php.net/manual/en/function.imap-open.php

// Theme Config

// Specify your own logo and CSS file

$CONF[‘theme_logo’] = ‘images/logo-default.png’;

$CONF[‘theme_css’] = ‘css/default.css’;

// If you want to keep most settings at default values and/or want to ensure

// that future updates work without problems, you can use a separate config

// file (config.local.php) instead of editing this file and override some

// settings there.

if (file_exists(dirname() . ‘/config.local.php’)) { # for /

include(dirname() . ‘/config.local.php’);

}

//

// END OF CONFIG FILE

//

/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */

влезте през browser:

при успешна проверка на компонентите, ще си update базата данни и ще даде право да се въведе админстраторски акаунт и парола.

когато и това приключи въведете следната команда, за да можете да влезете в http://yourdomain/postfixadmin

rm -f -y /usr/lib/postfixadmin/setup.php

15. Настройка на POP/IMAP:

mv /etc/courier/authmysqlrc /etc/courier/authmysqlrc.bak

editor /etc/courier/authmysqlrc

MYSQL_SERVER 127.0.0.1

MYSQL_USERNAME postfix

MYSQL_PASSWORD PAROLA1

MYSQL_DATABASE postfix

MYSQL_USER_TABLE mailbox

MYSQL_LOGIN_FIELD username

MYSQL_NAME_FIELD name

MYSQL_CRYPT_PWFIELD password

#MYSQL_CLEAR_PWFIELD password

MYSQL_MAILDIR_FIELD maildir

MYSQL_QUOTA_FIELD concat(quota,’S’)

MYSQL_HOME_FIELD ‘/home/vmail’

MYSQL_UID_FIELD ‘5000’

MYSQL_GID_FIELD ‘5000’

във файла /etc/courier/authdaemonrc

authmodulelist=”authmysql”

можете да сложите DEBUGLEVEL да е 1 или 2, за да можете да гледате евентуални грешки в началото, при ниво 2 показва паролите в лога, така че не е препоръчително да го оставяте за постоянно.

16. Следва една от най – проблемните части:

apt-get install postfix-tls sasl2-bin libsasl2 libsasl2-modules libpam-mysql openssl

editor /etc/pam.d/smtp

auth required pam_mysql.so user=postfix passwd=PAROLA1 host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1 md5=1

account sufficient pam_mysql.so user=postfix passwd=PAROLA1 host=127.0.0.1 db=postfix table=mailbox usercolumn=username passwdcolumn=password crypt=1 md5=1

editor /etc/postfix/sasl/smtpd.conf

pwcheck_method: saslauthd

mech_list: PLAIN LOGIN

log_level: 5

в файла /etc/default/saslauthd:

START=yes

MECHANISMS=”pam”

OPTIONS=”-c -r -m /var/spool/postfix/var/run/saslauthd”

mkdir /var/spool/postfix/var/

mkdir /var/spool/postfix/var/run/

mkdir /var/spool/postfix/var/run/saslauthd

chown -R root:sasl /var/spool/postfix/var/

chmod 710 /var/spool/postfix/var/run/saslauthd

adduser postfix sasl

ln -s /var/spool/postfix/var/run/saslauthd /var/run/saslauthd

отваряте файла /etc/init.d/postfix и намирате реда започващ с FILES

и го правите да изглежда така:

FILES=”etc/localtime etc/services etc/resolv.conf etc/hosts \

etc/nsswitch.conf etc/nss_mdns.config etc/postfix/sasl/smtpd.conf”

17. Настройка на филтри:

apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 unzoo libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop pax

editor /etc/amavis/conf.d/50-user

use strict;

#

# Place your configuration directives here. They will override those in

# earlier files.

#

# See /usr/share/doc/amavisd-new/ for documentation and examples of

# the directives you can use in this file

#

$pax=’pax’;

#———— Do not modify anything below this line ————-

1; # ensure a defined return

18. в /etc/postfix/master.cf добавете следното накрая на файла:

amavis unix – – – – 2 smtp

-o smtp_data_done_timeout=1200

-o smtp_send_xforward_command=yes

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_client_restrictions=

-o smtpd_helo_restrictions=

-o smtpd_sender_restrictions=

-o smtpd_recipient_restrictions=permit_mynetworks,reject

-o mynetworks=127.0.0.0/8

-o strict_rfc821_envelopes=yes

-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks

-o smtpd_bind_address=127.0.0.1

19. ще направим накрая бази за забранени клиенти, редактирайки ги можете да блокирате определени адреси/сървъри:

postmap /etc/postfix/access

postmap /etc/postfix/access-sender

postmap /etc/postfix/rbl-whitelist

не забравяйте че след всяко редактиране на файловете ще трябва да изпълнявате горните команди.

20. отворете 2ра конзола. в 1-вата въведете следната команда:

tail -f /var/log/mail.*

във втората конзола:

/etc/init.d/postfix restart; /etc/init.d/saslauthd restart; /etc/init.d/courier-imap restart; /etc/init.d/courier-imap-ssl restart; /etc/init.d/courier-pop restart; /etc/init.d/courier-pop-ssl restart; /etc/init.d/amavis restart;

предполагам, че съм пропуснал нещо в цялото това чудо. но.. “По грешките ще ги познаете”

Надявам се при вас да сработи

21. Пускане на SSL 465 порт на postfix:

editor /etc/postfix/master.cf

smtps inet n – – – – smtpd

-o smtpd_tls_wrappermode=yes

-o smtpd_sasl_auth_enable=yes

CentOS Postfix Mail server

vladimir simeonov
04/07/2011

Поднобно на статията за Убунту, пускам как се инсталира почти същата конфигурация+ малко промени натрупани с времето. основната разлика е използването на Dovecot вместо Courier поради следните съществени причини:

1. води се, че Dovecot е по – бърз спрямо Courier

2. Dovecot може да замести напълно courier-authlib и конфигурирането на postfix+SASL не е равносилно на клизма

разбира се трябва да изтъкна и следните недостатъци:

1. Dovecot има по чувствителен конф. файл тип bind

2. dovecot се килва автоматично, ако установи рязка промяна в системния часовник. ако някой не ползва ntp или не му работи правилно, доста често ще му се килва процеса. няма да се спирам на начини за разрешаване. те са описани подробно в интернет.

за улеснение съм написал един прост скрипт, който автоматизира по – голяма част от процеса. на места се налага намеса за ръчно редактиране. ако не ги направите или скрипта изгърми ще трябва ръчно да правите командите ред по ред.

Тук ще посоча източниците на информация, тъйкато това е обобщена информация и не съм си я изсмуквал от пръстите. възможно е да съм пропуснал нещо, но главното е това:

  • http://howtoforge.com/virtual_users_postfix_courier_mailscanner_clamav_centos
  • http://wiki.dovecot.org/HowTo/DovecotLDAPostfixAdminMySQL
  • http://wiki.centos.org/HowTos/Amavisd]http://wiki.centos.org/HowTos/Amavisd
  • http://www.kutukupret.com/2009/09/13/postfix-centos-policyd-v2-mysql/
  • http://www.howtoforge.com/perfect-server-centos-5.2

разбира се скрипта не покрива напълно инсталацията и се налага първата и най – важна стъпка да я направите на ръка.

Прекомпилиране на postfix за поддръжка на mysql

1. взимате актуален SRC файл от сървър на centos

при мен в момента на инсталацията е:

wget http://mirror.centos.org/centos/5.4/os/SRPMS/postfix-2.3.3-2.1.el5_2.src.rpm

ако линка не работи, отидете на http://mirror.centos.org/centos/5.4/os/SRPMS

и намерете от списъка актуалния файл и го свалете на удобно място.

2.

rpm -i postfix-2.3.3-2.1.el5_2.src.rpm

3.

sed -i -e “s/\%define MYSQL 0/\%define MYSQL 1/” /usr/src/redhat/SPECS/postfix.spec

4.

yum install wget bzip2 unzip zip nmap rpm-build pcre-devel cyrus-sasl-devel.i386 subversion yum-utils dovecot.i386 \

openssl lynx fileutils ncftp gcc gcc-c++ quota mysql mysql-devel mysql-server php php-devel php-gd php-imap php-ldap \

php-mysql php-odbc php-pear php-xml php-xmlrpc curl curl-devel perl-libwww-perl libxml2 libxml2-devel openldap-devel \

php-mbstring.i386 amavisd-new clamd.i386 perl-Cache-FastMmap perl-Config-IniFiles ntp perl-Net-CIDR

5.

rpmbuild -ba /usr/src/redhat/SPECS/postfix.spec

6.

rpm -ivh /usr/src/redhat/RPMS/i386/postfix-2.3.3-2.1.i386.rpm

едва след успешното изпълнение на тази стъпка, можете да копирате скрипта, да го направите изпълним файл и да почвате.

ВАЖНО: задължително отворете втори терминал, тъйкато там където се изисква вашата намеса в повечето случай директно се отваря vi за редактиране на файла. ако излезете от файла за да видите неизвестен параметър. скрипта продължава напред. в почти всички случай това е фатално!!!

ВАЖНО: скрипта не трябва да се пуска повече от веднъж. резултатите от повторно пускане са непредвидими!!!

ако откриете бъгове по скрипта или пропуски можете да ми пишете.

ubuntu 10.04 postfix mail server

vladimir simeonov
04/07/2011

Това е версия 2 на първата статия, която ползва courier, докато тук съм се спрял на dovecot.

Преди да започнете със самата инсталация, трябва да:

1. инсталирана чиста инсталация на Ubuntu Server 10.04 LTS

1.1.

по време на инсталацията можете да добавите SSH, DNS

2.

пълен ROOT, през sudo su или sudo passwd root. скрипта не се стартира, ако не е root!

3. предварителни файлове за да тръгне скрипта:

apt-get install subversion postfix dovecot-common postfix-mysql libsasl2-2 mysql-server postfix-tls openssl phpmyadmin apache2 libapache2-mod-php5 php5 php5-mysql roundcube-mysql postfix-policyd quota dovecot-imapd dovecot-pop3d ntp amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 libnet-ph-perl libnet-snpp-perl libnet-telnet-perl nomarch lzop pax roundcube roundcube-core spampd

четете вниматлено въпросите!!!

паролата за mysql е препоръчително да е сложна и да я запомните.

при запитване за конфигурацията на postfix изберете No configuration

за phpmyadmin маркирайте apache2

за policyd избирате “Yes” на въпроса да създаде ли автоматично база-данни. въвеждате паролата на root за mysql и натискате на следващия прозорец Enter, за да може сам да си генерира парола

същия въпрос ще ви бъде зададен и за phpmyadmin и roundcube. процедирайте отново така.

накрая стартирайте скрипта: ubuntu setup script

Не забравяйте да тунинговате персонално, според нуждите ви всеки един файл. особено:

  1. /etc/postfix/main.cf
  2. /etc/dovecot/dovecot.conf
  3. /etc/amavis-new/*
  4. /var/www/postfixadmin/conf*
  5. /etc/roundcube/*
  6. /etc/postfix-policy*

Postfix има изключително рестриктивен подход към пощенски сървъри, на които IP адресът няма прав и обратен resolv. Въпрос на ваш личен избор е дали да работите така или да разчитате единствено на проверката за spam от spamassassin. Моята практика показва, че с тази конфигурация се ликвидира 99,99% от нежеланата поща. разбира се има и false positive. в таблицата access_sender можете да whitelist-вате такива неправилно конфигурирани сървъри.

postfix dkim spf on ubuntu server

vladimir simeonov
04/07/2011

Предполагам някой знаят какво представлява SPF, макар и да се води вече за отживелица.

С две думи за тези които не знаят: служи за аутентикиране на пощенски сървъри през DNS. т.е. задавате в DNS записите на домейна си, от кои адреси може да се изпращат писма. Повечето сървъри правят подобна проверка и на практика при зададен такъв адрес от ваша страна, друг сървър не може да изпраща писма от името на домейна ви.

инсрукцията е за BIND DNS сървър.

добавяте запис във файла със зоната:

example.com. IN TXT “v=spf1 mx a -all”

  • mx = разрешавам mx записа (ip-то му) да изпраща писма от името на домейна
  • а = разрешавам A записа за домейна да изпраща писма (web server-a)
  • -all = всички останали нямат право да изпращат писма от името на домейна

възможен е и друг вариант:

example.com IN TXT “v=spf1 ip4:192.168.0.0/24 -all”

  • ip4: = оказвате обхват от адреси, които могат да изпращат писма от името на домейна

DKIM (DomainKeys Identified Mail) е метод посредством цифровият подпис на пощенския сървър да подпишете писмото, за да потвърдите, че произхода му е от вашият сървър.

как се използва заедно с postfix:

  • http://anothersysadmin.wordpress.com/2008/01/16/domainkeysdkim-with-postfix/

накратко:

трябва ни прокси което да подписва подадените писма от postfix и да му ги връща за доставка. ще се подписват само изходящи писма.

Убунту (във версия 10.04 със сигурност го има като пакет):

apt-get install dkimproxy

алтернативно го теглите и инсталирате от

http://dkimproxy.sourceforge.net

добавяте следният код в /etc/postfix/master.cf

(точно под първият ред)

submission inet n – n – – smtpd

-o smtpd_etrn_restrictions=reject

-o content_filter=dksign:[127.0.0.1]:10027

-o receive_override_options=no_address_mappings

-o smtpd_tls_wrappermode=yes

-o smtpd_sasl_auth_enable=yes

-o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject

накрая на файла добавяте:

dksign unix – – n – 10 smtp

-o smtp_send_xforward_command=yes

-o smtp_discard_ehlo_keywords=8bitmime,starttls

127.0.0.1:10028 inet n – n – 10 smtpd

-o content_filter=

-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks

-o smtpd_helo_restrictions=

-o smtpd_client_restrictions=

-o smtpd_sender_restrictions=

-o smtpd_recipient_restrictions=permit_mynetworks,reject

предлолага се, че имате сертификат за SSL в конф. папка на postfix:

/etc/postfix/ssl/smtpd.key

ако нямате: прочетете статията за postfix, как да го генерирате.

в /etc/dkimproxy/dkimproxy_out.conf

[code]# 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:10028

# specify what domains DKIMproxy can sign for (comma-separated, no spaces)

domain lordofdeath.net

# specify what signatures to add

signature dkim(a=rsa-sha256,c=relaxed)

signature domainkeys(a=rsa-sha1,c=nofws)

# specify location of the private key

keyfile /etc/postfix/smtpd.key

# specify the selector (i.e. the name of the key record put in DNS)

selector postfix

reject-error 480[/code]

vi /etc/default/dkimproxy

RUN_DKIMPROXY_IN=0

/etc/init.d/dkimproxy restart

/etc/init.d/postfix restart

в папката на postfix със сертификата (/etc/postfix/ssl) пускате командата:

openssl rsa -in smtpd.key -out rsa.public -pubout -outform PEM

копирате съдържанието на rsa.public

cat rsa.public

vi /var/cache/bind/lorofdeath.net <- заменяте с името на вашата зона

postfix._domainkey.lordofdeath.net. IN TXT “v=DKIM1; k=rsa; p=СЪДЪРЖАНИЕ НА rsa.public

rndc reload или /etc/init.d/bind9 restart

на всички клиенти, които искате да се подписват писмата им, ги пренасочвате към порт 587 (SSL). трябва при изпращане на писмо към google, да има в хедъра му Authentication-Results: ***** dkim=pass ****

за автоматично подписване на всички входящи писма от клиенти:

/etc/postfix.master.cf

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_client_restrictions=

-o smtpd_helo_restrictions=

-o smtpd_sender_restrictions=

-o smtpd_recipient_restrictions=permit_mynetworks,reject

-o mynetworks=127.0.0.0/8

-o strict_rfc821_envelopes=yes

-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks

-o smtpd_bind_address=127.0.0.1

-o content_filter=dksign:[127.0.0.1]:10027

dksign unix – – n – 10 smtp

-o smtp_send_xforward_command=yes

-o smtp_discard_ehlo_keywords=8bitmime,starttls

127.0.0.1:10028 inet n – n – 10 smtpd

-o content_filter=

-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks

-o smtpd_helo_restrictions=

-o smtpd_client_restrictions=

-o smtpd_sender_restrictions=

-o smtpd_recipient_restrictions=permit_mynetworks,reject

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:10028

# specify what domains DKIMproxy can sign for (comma-separated, no spaces)

domain    lordofdeath.net,hostatme.com,luladjiev.com,dezonbg.com,ybase.eu

# specify what signatures to add

signature dkim(a=rsa-sha256,c=relaxed)

signature domainkeys(a=rsa-sha1,c=nofws)

# specify location of the private key

keyfile /etc/postfix/smtpd.key

# specify the selector (i.e. the name of the key record put in DNS)

selector  postfix

reject-error 580