MDaemon рд╕реЗ Exim + Dovecot рдХреА рдУрд░ рдкрд▓рд╛рдпрди

рдореИрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛ рд╣реВрдВ, рд╣реЗрдмреНрд░рд╛ рдХреЗ рдирд┐рд╡рд╛рд╕рд┐рдпреЛрдВред

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдХрд╛рдо рдкрд░ рдПрдХ рд╕реНрдерд┐рддрд┐ рдЙрддреНрдкрдиреНрди рд╣реБрдИ: рдПрдХ рдирдпрд╛ рдореЗрд▓ рд╕рд░реНрд╡рд░ рдЪреБрдирдирд╛ рдФрд░ рд╕рднреА рд╡рд░реНрддрдорд╛рди рдЦрд╛рддреЛрдВ рдФрд░ рдкреБрд░рд╛рдиреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдЙрдирдХреЗ рдореЗрд▓ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдпрд╣ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реБрдЖ:
  1. рдЦрд╛рддреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 250 рдЦрд╛рддреЛрдВ рддрдХ рд╕реАрдорд┐рдд рдереА;
  2. рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореЗрд▓ рд╕рд░реНрд╡рд░ рдХреЛ рдлреНрд░реАрдЬ рдХрд░рдирд╛ рд╢реБрд░реВ рд╣реБрдЖ, рддрд╛рдХрд┐ рдЙрд╕реЗ рдХреЗрд╡рд▓ рд╣рд╛рд░реНрдб-рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗ (рдПрдХ рдмрд╛рд░ рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдПрдЪрдбреАрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╣реБрдд рдХрдард┐рди рдерд╛);

рдпрд╣рд╛рдБ рдЙрд╕ рд╕рдордп рдХреНрдпрд╛ рд╣реБрдЖ (рд╕реБрдкрд░рдорд╛рдЗрдХреНрд░реЛ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░):

рд▓рдЧрднрдЧ 240 рдЦрд╛рддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдлрд╝реЛрд▓реНрдбрд░ (рдпрд╣рд╛рдВ рд╕рднреА рдореЗрд▓) рдХрд╛ рд╡рдЬрди рд▓рдЧрднрдЧ 200 рдЬреАрдмреА рдерд╛ред

рдХреНрдпрд╛ рд╣реБрдЖ (рдбреЗрд▓ рдкреЙрд╡рд░рдПрдбрдЬ 2850 рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо)

рдЦреИрд░, рдЕрдм рд╕рдм рдХреБрдЫ рдХреНрд░рдо рдореЗрдВ рд╣реИред

1. FreeBSD, Exim, DoveCot, SpamAssassin рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛
1.1ред FreeBSD рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
рдЪреБрдирд╛рд╡ FreeBSD 9.0 рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛ред рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереАред рдореИрдВрдиреЗ ftp рд╕реЗ iso рдЗрдореЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХреА, рдЗрд╕реЗ рдбрд┐рд╕реНрдХ рдкрд░ рдХрдЯ рдХрд┐рдпрд╛ рдФрд░ рдЙрд╕рд╕реЗ рдмреВрдЯ рдХрд┐рдпрд╛ред рд╕реНрдерд╛рдкрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ (рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЗ рдмрд┐рдирд╛ рдЦреЗрдж)ред

рд╣рдо рдереЛрдбрд╝реА рджреЗрд░ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реНрдерд╛рдкрдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдВрдбреЛ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рдЗрдВрд╕реНрдЯреЙрд▓ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рд╣рд┐рдд рдХреЗ рдХреАрдмреЛрд░реНрдб рд▓реЗрдЖрдЙрдЯ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдПрдиреНрдХреЛрдбрд┐рдВрдЧ, рдпрд╛ рдмрд╕ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдирд╣реАрдВред рдЕрдЧрд▓рд╛, рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХреЗ рдШрдЯрдХреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдореИрдВрдиреЗ рдЙрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдЦреЗрд▓реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ (рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рдкрд░ рдЧреЗрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдПрдХреНрдЬрд┐рдо рднреА рдПрдХ рдЕрдЪреНрдЫрд╛ рдЦрд┐рд▓реМрдирд╛ рд╣реИ), рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдФрд░ рдЬрд╛рд░реА рд░рдЦрд╛ред рдбрд┐рд╕реНрдХ рдХрд╛ рд╡рд┐рднрд╛рдЬрди рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

# Device Mountpoint FStype Size /dev/mfid0p2 / ufs 20G /dev/mfid0p3 /var ufs 50G /dev/mfid0p4 /home ufs 328G /dev/mfid0p5 none swap 4G 


рдЗрди / рд╣реЛрдо рдореЗрдВ рд╕рднреА maildir'y рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдЕрдВрдХрди рдХреЗ рдмрд╛рдж, рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ, рд░реВрдЯ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░реЗрдВред рдЕрдЧрд▓рд╛, рдиреЗрдЯрд╡рд░реНрдХ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдФрд░ рд░рд┐рдмреВрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ (рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдм рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, рдХреНрд░рдорд╢рдГ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди, рдХрд┐рд╕реА рднреА sudo рдХреА рд╕реНрдерд╛рдкрдирд╛, рдкрд░реНрд▓, рдЖрджрд┐ред

1.2ред рдПрдХреНрдЬрд╝рд┐рдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
рдореИрдВ рдПрдХреНрдЬрд╝рд┐рдо рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рдХреЗрдиреНрджреНрд░рд┐рдд рдХрд░реВрдБрдЧрд╛ред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЛрдВ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░реЗрдВрдЧреЗ:

1) рдореЗрд▓рдмреЙрдХреНрд╕ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рдореЗрд▓рдбрд┐рд░ рд╣реИ;
2) рдПрд╕рдПрдордЯреАрдкреА рдкреНрд░рд╛рдзрд┐рдХрд░рдг;
3) рдПрд╕рдкреАрдПрдл, рдбреАрдХреЗрдЖрдИрдПрдо рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди (рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЕрднреА рддрдХ рдореБрдбрд╝ рдирд╣реАрдВ рд╣реИ);
4) рдЙрджреНрдзрд░рдг рд╕рдорд░реНрдерди (рдЕрдм рддрдХ рдХреЗрд╡рд▓ рдЕрдкреЗрдВрдбрд┐рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдлрд┐рд░ рдХрдмреВрддрд░ рдХреЛрдЯрд╛ рдкреНрд▓рдЧрдЗрди);
5) MySQL рдХрд╛ рд╕рдорд░реНрдерди;
6) рдПрд╕рдПрд╕рдПрд▓ рд╕рдорд░реНрдердиред

рдЖрдЗрдП MySQL 5.1 рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВред
 echo "DEFAULT_MYSQL_VER=51" >> /etc/make.conf cd /usr/ports/databases/mysql51-server make install clean #   Mysql mysql_install_db #   echo 'mysql_enable="YES"' >> /etc/rc.conf echo 'mysql_db_dir="/var/db/mysql"' >> /etc/rc.conf /usr/local/etc/rc.d/mysql start 

рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛, рддреЛ рдорд╛рдВрд╕рдкреЗрд╢реА рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧреА, рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рд░реВрдЯ рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ
 mysqladmin -u root password my_password 

рдПрдХреНрдЬрд╝рд┐рдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдПрдБ
 pw useradd exim -s /sbin/nologin -b /var/mail/mqueue -g mail 

рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдПрдБ:
 mysqladmin -u root -p create database exim_db 

DB рд╕рдВрд░рдЪрдирд╛:
 DROP TABLE IF EXISTS `accounts`; CREATE TABLE `accounts` ( `login` varchar(128) COLLATE utf8_bin NOT NULL DEFAULT '', `password` varchar(128) COLLATE utf8_bin NOT NULL DEFAULT '', `uid` int(11) NOT NULL DEFAULT '1002', `gid` int(11) NOT NULL DEFAULT '6', `domain` varchar(128) COLLATE utf8_bin NOT NULL DEFAULT 'domain.ru', `quota` varchar(16) COLLATE utf8_bin NOT NULL DEFAULT '250M', `status` int(11) NOT NULL DEFAULT '1', PRIMARY KEY (`login`,`domain`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; DROP TABLE IF EXISTS `aliases`; CREATE TABLE `aliases` ( `address` varchar(128) COLLATE utf8_bin DEFAULT NULL, `goto` varchar(128) COLLATE utf8_bin DEFAULT NULL, `domain` varchar(128) COLLATE utf8_bin DEFAULT 'domain.ru' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; DROP TABLE IF EXISTS `domains`; CREATE TABLE `domains` ( `domain` varchar(128) COLLATE utf8_bin NOT NULL DEFAULT '', `status` int(11) NOT NULL DEFAULT '1', PRIMARY KEY (`domain`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; 

рдпреВрдЖрдИрдбреА рдФрд░ рдЬреАрдЖрдИрдбреА тАЛтАЛрдХреНрд╖реЗрддреНрд░ рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдПрдХреНрдЬрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдпреВрдЖрдИрдбреА рдФрд░ рдЬреАрдЖрдИрдбреА тАЛтАЛрд╣реИрдВред рд╡реЗ рдореЗрд░реЗ рд▓рд┐рдП рдпреВрдЖрдИрдбреА = 1002 рдФрд░ рдЬреАрдЖрдИрдбреА тАЛтАЛ= 6 рдереЗред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рддрд╛рд▓рд┐рдХрд╛ рдлрд╝реАрд▓реНрдб рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред
рдПрдХреНрдЬрд╝рд┐рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛрдбрд╝реЗрдВ
 mysql -u root -p Password: *** mysql> grant all privileges on exim_newdb.* to exim@localhost identified by 'exim_password'; mysql> \q 

SSL рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдмрдирд╛рдПрдВ:
 mkdir -p /etc/ssl/certs cd /etc/ssl/certs openssl req -x509 -newkey rsa:1024 -keyout favmail.pem -out favmail.pem -days 9999 -nodes 

рд╣рдо рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рддреИрдпрд╛рд░ рд╣реИред
рдПрдХреНрдЬрд╝рд┐рдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдкреВрд░рд╛ рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВ, рдЕрдм рдЖрдк рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХреНрдЬрд╝рд┐рдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
 cd /usr/ports/mail/exim make install clean 

рд╣рдо рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдорд╛рд░реА рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рд╕рдорд░реНрдерди maildir, spf, dkim, mysql рдХреЛ рдЪреБрдирд╛ред рд╣рдо рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдПрдХреНрдЬрд┐рдо рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдХреЗ рд╕рд╛рде рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИред
Sendmail рдмрдВрдж рдХрд░реЗрдВ
 echo 'sendmail_enable="NONE"' >> /etc/rc.conf /etc/rc.d/sendmail stop 

рдФрд░ /etc/mail/mailer.conf рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
 cat /etc/mail/mailer.conf # $FreeBSD: release/9.0.0/etc/mail/mailer.conf 93858 2002-04-05 04:25:14Z gshapiro $ # # Execute the "real" sendmail program, named /usr/libexec/sendmail/sendmail # sendmail /usr/local/sbin/exim send-mail /usr/local/sbin/exim mailq /usr/local/sbin/exim -bp newaliases /usr/local/sbin/exim -bi hoststat /usr/local/sbin/exim purgestat /usr/local/sbin/exim 


рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдПрдВред рдореИрдВрдиреЗ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреБрд╕реНрддрд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣рд╛рдВ рдЙрдирдХреЗ рд╕реНрд░реЛрдд рд╣реИрдВ:

рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реБрдЖ:
 cat /usr/local/etc/exim/configure primary_hostname = domain.ru hide mysql_servers = localhost/exim_db/exim/exim_password domainlist local_domains = ${lookup mysql{select domain from domains where domain='${domain}'}} domainlist relay_to_domains = ${lookup mysql{select domain from domains where domain='${domain}'}} hostlist relay_from_hosts = localhost : 127.0.0.1 acl_smtp_rcpt = acl_check_rcpt acl_smtp_data = acl_check_data tls_certificate = /etc/ssl/certs/favmail.pem tls_privatekey = /etc/ssl/certs/favmail.pem daemon_smtp_ports = 25 : 465 tls_on_connect_ports = 465 qualify_domain = domain.ru allow_domain_literals = false exim_user = exim exim_group = mail never_users = root host_lookup = * rfc1413_hosts = * rfc1413_query_timeout = 5s ignore_bounce_errors_after = 2h timeout_frozen_after = 7d return_size_limit = 10K split_spool_directory = true syslog_timestamp = no begin acl acl_check_rcpt: acl_check_rcpt: accept hosts = : deny domains = +local_domains local_parts = ^[.] : ^.*[@%!/|] deny domains = !+local_domains local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./ accept senders=${lookup mysql{SELECT senders FROM whitelist \ WHERE senders='${quote_mysql:$sender_address}'}} deny message = HELO/EHLO required by SMTP RFC condition = ${if eq{$sender_helo_name}{}{yes}{no}} deny message = Go Away! You are spammer. condition = ${if match{$sender_host_name} \ {bezeqint\\.net|net\\.il|dialup|dsl|pool|peer|dhcp} \ {yes}{no}} deny message = rejected because $sender_host_address \ is in a black list at $dnslist_domain\n$dnslist_text hosts = !+relay_from_hosts !authenticated = * log_message = found in $dnslist_domain dnslists = bl.spamcop.net : \ cbl.abuseat.org : \ dnsbl.njabl.org : \ pbl.spamhaus.org warn set acl_m0 = 25s warn hosts = +relay_from_hosts set acl_m0 = 0s warn authenticated = * set acl_m0 = 0s warn logwrite = Delay $acl_m0 for $sender_host_name \ [$sender_host_address] with HELO=$sender_helo_name. Mail \ from $sender_address to $local_part@$domain. delay = $acl_m0 drop message = Rejected - Sender Verify Failed log_message = Rejected - Sender Verify Failed hosts = * !verify = sender/no_details/callout=2m,defer_ok !condition = ${if eq{$sender_verify_failure}{}} accept domains = +local_domains endpass message = unknown user verify = recipient accept domains = +relay_to_domains endpass message = unrouteable address verify = recipient accept hosts = +relay_from_hosts accept authenticated = * deny message = relay not permitted acl_check_data: warn message = X-Spam-Score: $spam_score ($spam_bar) hosts = !+relay_from_hosts spam = nobody:true warn message = X-Spam-Report: $spam_report hosts = !+relay_from_hosts spam = nobody:true warn message = Subject: [***SPAM***] $h_Subject: hosts = !+relay_from_hosts spam = nobody deny message = This message scored $spam_score spam points. spam = nobody:true hosts = !+relay_from_hosts condition = ${if >{$spam_score_int}{120}{1}{0}} deny message = Blacklisted file extension detected ($mime_filename) condition = ${if match \ {${lc:$mime_filename}} \ {\N(\.exe|\.pif|\.bat|\.scr|\.lnk|\.com|\.vbs|\.cpl)$\N} \ {1}{0}} accept begin routers dnslookup: driver = dnslookup domains = ! +local_domains transport = remote_smtp ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 no_more system_aliases: driver = redirect allow_fail allow_defer data = ${lookup mysql{select goto from aliases where address='${quote_mysql:$local_part}' and domain='${quote_mysql:$domain}'}} user = exim group = mail file_transport = address_file pipe_transport = address_pipe userforward: driver = redirect check_local_user no_verify no_expn check_ancestor file_transport = address_file pipe_transport = address_pipe reply_transport = address_reply data = ${lookup mysql{select goto from aliases where address='${quote_mysql:$local_part}' and domain='${quote_mysql:$domain}'}} localuser: driver = accept domains = ${lookup mysql{select domain from domains where domain='${domain}'}} local_parts = ${lookup mysql{select login from accounts where login='${local_part}' and domain='${domain}'}} transport = local_delivery cannot_route_message = Unknown user begin transports remote_smtp: driver = smtp local_delivery: driver = appendfile maildir_format maildir_tag = ,S=$message_size directory = /home/mail/$domain/$local_part create_directory delivery_date_add envelope_to_add return_path_add group = mail mode = 0660 no_mode_fail_narrower address_pipe: driver = pipe return_output address_file: driver = appendfile delivery_date_add envelope_to_add return_path_add address_reply: driver = autoreply begin retry * * F,2h,15m; G,16h,1h,1.5; F,4d,6h begin rewrite begin authenticators auth_plain: driver = plaintext server_set_id = $2 server_prompts = : public_name = PLAIN server_condition = ${lookup mysql{select login from accounts where login='${quote_mysql:${local_part:$2}}' and password='${quote_mysql:$3}'}{yes}{no}} auth_login: driver = plaintext public_name = LOGIN server_set_id = $1 server_prompts = Username:: : Password:: server_condition = ${lookup mysql{select login from accounts where login='${quote_mysql:${local_part:$1}}' and password='${quote_mysql:$2}'}{yes}{no}} auth_cram_md5: driver = cram_md5 public_name = CRAM-MD5 server_secret = ${lookup mysql{select password from accounts where login='${quote_mysql:${local_part:$1}}'}{$value}fail} server_set_id = $1 

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:
 exim -bV Exim version 4.77 #0 (FreeBSD 9.0) built 04-Jul-2012 19:16:56 Copyright (c) University of Cambridge, 1995 - 2007 Probably Berkeley DB version 1.8x (native mode) Support for: crypteq iconv() use_setclassresources PAM Perl Expand_dlfunc OpenSSL Content_Scanning DKIM Experimental_SPF Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmnz dnsdb dsearch mysql nis nis0 passwd Authenticators: cram_md5 dovecot plaintext spa Routers: accept dnslookup ipliteral manualroute queryprogram redirect Transports: appendfile/maildir autoreply lmtp pipe smtp Fixed never_users: 0 Size of off_t: 8 Configuration file is /usr/local/etc/exim/configure 

рдареАрдХ рд╣реИ, рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдорд┐рд▓реАред рд╣рдо рдПрдХреНрдЬрд┐рдо рдХреЗ рд▓рд┐рдП рд▓реЙрдЧ рд░реЛрдЯреЗрд╢рди рдХрд░рддреЗ рд╣реИрдВ:
 crontab -u exim -e @daily /usr/local/exim/exicyclog 

рд╣рдо рд╕реНрдерд╛рдиреАрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдорд╛рдиреНрдпрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╣реИрдВ:
 exim -bt admin admin@domain.ru router = localuser, transport = local_delivery 

рдФрд░ рдЧреИрд░
 exim -bt user@www.com user@www.com router = dnslookup, transport = remote_smtp host ASPMX.L.GOOGLE.com [173.194.71.27] MX=10 host ALT2.ASPMX.L.GOOGLE.com [209.85.225.26] MX=20 host ALT1.ASPMX.L.GOOGLE.com [173.194.77.26] MX=20 host ASPMX4.GOOGLEMAIL.com [173.194.78.27] MX=30 host ASPMX5.GOOGLEMAIL.com [74.125.130.27] MX=30 host ASPMX3.GOOGLEMAIL.com [74.125.127.27] MX=30 host ASPMX2.GOOGLEMAIL.com [173.194.69.27] MX=30 

рдмрдврд╝рд┐рдпрд╛, рдЖрдк рджреМрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ
 echo 'exim_enable="YES"' >> /etc/rc.conf /usr/local/etc/rc.d/exim start 

рдПрдХреНрдЬрд╝рд┐рдо рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдЬрд╛рдБрдЪред рдРрд╕рд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдпрд╣рд╛рдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред
рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдЖрдк рдПрдХреНрдЬрд╝рд┐рдо рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
1.3ред рдбрд╡рдХреЛрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
рд╣рдо рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рд╕реЗ рднреА dovecot рдбрд╛рд▓рддреЗ рд╣реИрдВ
 cd /usr/ports/mail/dovecot make install clean 

рдФрд░ рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп (рдЙрдкрд░реЛрдХреНрдд рд▓рд┐рдВрдХ рджреНрд╡рд╛рд░рд╛ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)
 cat /usr/local/etc/dovecot.conf base_dir=/var/run/dovecot/ protocols=imap imaps pop3 pop3s ssl=yes ssl_cert_file=/etc/ssl/certs/favmail.pem ssl_key_file=/etc/ssl/certs/favmail.pem protocol imap { listen=*:143 ssl_listen=*:993 } protocol pop3 { listen=*:110 ssl_listen=*:995 } disable_plaintext_auth=no shutdown_clients=yes log_timestamp="%b %d %H:%M:%S " syslog_facility=mail login_dir=/var/run/dovecot/login login_chroot=yes login_user=dovecot login_process_size=64 login_process_per_connection=yes login_processes_count=3 login_max_processes_count=3 login_greeting=Dovecot ready login_log_format_elements=user=<%u> method=%m rip=%r lip=%l %c login_log_format=%$: %s first_valid_uid=1002 first_valid_gid=6 mail_access_groups=mail mail_debug=yes verbose_proctitle = yes mail_location=maildir:/home/mail/%d/%n protocol imap { imap_client_workarounds=delay-newmail outlook-idle netscape-eoh tb-extra-mailbox-sep } protocol pop3 { pop3_uidl_format=%08Xu%08Xv pop3_client_workarounds=outlook-no-nuls oe-ns-eoh } protocol lda { postmaster_address=admin@domain.ru auth_socket_path=/var/run/dovecot/auth-master } auth default { default_realm=domain.ru mechanisms=plain socket listen { master { path=/var/run/dovecot/auth-master mode=0600 user=exim } } passdb sql { args=/usr/local/etc/dovecot-sql.conf } userdb sql { args=/usr/local/etc/dovecot-sql.conf } user=root verbose=yes } plugin { } ####################################### cat /usr/local/etc/dovecot-sql.conf driver=mysql connect=host=127.0.0.1 dbname=exim_db user=exim password=exim_password! default_pass_scheme=PLAIN password_query=select password from accounts where login='%n' and domain='%d' user_query=select uid, gid from accounts where login='%n' and domain='%d' 

рдбреЗрдореЙрди рдЪрд▓рд╛рдПрдВ:
 echo 'dovecot_enable="YES"' >> /etc/rc.conf /usr/local/etc/rc.d/dovecot start 

рд╣рдо POP (S), IMAP (S) рдЯреЗрд▓рдиреЗрдЯ рдпрд╛ рдХрд┐рд╕реА рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ рдЖрдк рдбрд╡рдХреЛрдЯ рд╕реЗрдЯ рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

1.4ред SpamAssassin рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП Exim рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
SpamAssassin рдХреЛ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

1) perl -MCPAN -e рдЦреЛрд▓;
2) рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рд╕реЗред

рдореИрдВ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рд╕реЗрдЯред SpamAssassin рдПрдХ рдореЛрддреА рдореЙрдбреНрдпреВрд▓ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдореЛрддреА рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
 cd /usr/ports/security/p5-Digest-MD5 make install clean cd /usr/ports/www/p5-HTML-Parser make install clean cd /usr/ports/dns/p5-Net-DNS make install clean cd /usr/ports/japanese/p5-Mail-SpamAssassin make install clean 

рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рджреМрд░рд╛рди, рдХреБрдЫ рдореЙрдбреНрдпреВрд▓ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╕рдореВрд╣ рд╣реЛрдЧрд╛ред
рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, SpamAssassin рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред рдпрд╣рд╛рдБ рдореЗрд░рд╛ local.cf рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдореИрдВ рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ:
 cat /usr/local/etc/mail/spamassassin/local.cf trusted_networks 192.168.2/24 required_score 5.0 report_safe 0 rewrite_header subject [***SPAM***] use_bayes 1 bayes_path /usr/local/etc/mail/spamassassin/bayes/ bayes_file_mode 0666 bayes_min_spam_num 1 bayes_min_ham_num 1 bayes_learn_to_journal 1 skip_rbl_checks 0 bayes_auto_learn 0 ok_languages ru en ok_locales ru_en score BAYES_00 0.0001 0.0001 -6.0 -6.0 score BAYES_05 0.0001 0.0001 -3.0 -3.0 score BAYES_20 0.0001 0.0001 -1.0 -1.0 score BAYES_50 0.0001 0.0001 1.6 1.6 score BAYES_60 0.0001 0.0001 2.0 2.0 score BAYES_80 0.0001 0.0001 4.0 4.0 score BAYES_95 0.0001 0.0001 6.5 6.5 score BAYES_99 0.0001 0.0001 10.0 10.0 score RDNS_NONE 0.0001 0.0001 3.0 3.0 score SUBJ_FULL_OF_8BITS 0.00 score HTML_COMMENT_8BITS 0.01 score HEADER_8BITS 0.00 score TO_NO_USER 0.01 score FORGED_MUA_OUTLOOK 0.5 score X_AUTH_WARNING 0.01 score SUBJ_HAS_UNIQ_ID 9.99 score HTTP_USERNAME_USED 9.99 score FORGED_YAHOO_RCVD 9.99 score FORGED_JUNO_RCVD 16 score UNWANTED_LANGUAGE_BODY 1.02 score MLM 5.55 score RCVD_NUMERIC_HELO 4.95 

рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рдкреБрд░рд╛рдиреЗ рд╕рд░реНрд╡рд░ рд╕реЗ MDaemon рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ SpamD SpamAssassin рдХреЛ рдЕрдкрдорд╛рдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫрдВрдЯрдиреА рдХреА рдЬрд╛рддреА рд╣реИред
рдЕрдм рд▓рд╛рдЗрди рдХреЛ рдПрдХреНрд▓реЗрдо рдХреЙрдиреНрдлрд┐рдЧрд░ рд╕реЗ acl рд▓рд╛рдЗрди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
 spamd_address = 127.0.0.1 783 

рдФрд░ ACLs рдореЗрдВ, acl_check_data рдирд┐рдпрдо
 acl_check_data: #deny message = Virus found ($malware_name) #malware = * warn message = X-Spam-Score: $spam_score ($spam_bar) hosts = !+relay_from_hosts spam = nobody:true warn message = X-Spam-Report: $spam_report hosts = !+relay_from_hosts spam = nobody:true warn message = Subject: [***SPAM***] $h_Subject: hosts = !+relay_from_hosts spam = nobody deny message = This message scored $spam_score spam points. spam = nobody:true hosts = !+relay_from_hosts condition = ${if >{$spam_score_int}{120}{1}{0}} accept 

рд╕реНрдкреИрдо рдХреЛ рдЪрд▓рд╛рдПрдВ рдФрд░ рдПрдХреНрдЬрд╝рд┐рдо рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ
 echo 'spamd_enable="YES"' >> /etc/rc.conf /usr/local/etc/rc.d/sa-spamd start /usr/local/etc/rc.d/exim restart 

рд╣реЛ рдЧрдпрд╛ред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдирдпрд╛ рдореЗрд▓ рд╕рд░реНрд╡рд░ рд╣реИ рдФрд░ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдорд╛рдЗрдЧреНрд░реЗрд╢рди рд╕реЗ рдирд┐рдкрдЯ рд╕рдХрддреЗ рд╣реИрдВ

2. MDaemon рд╕реЗ рдПрдХреНрдЬрд┐рдо рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрд▓рд╛рдпрди
2.1ред рд▓реЗрдЦрд╛ рдФрд░ рдЙрдкрдирд╛рдо

MDDON рдлрд╛рдЗрд▓реНрд╕ рдореЗрдВ рдореИрдбрдореЙрди рд╕рднреА рдпреВрдЬрд░ рдЕрдХрд╛рдЙрдВрдЯреНрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕рдХреЗ рдРрдк рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рд╣реИ рдФрд░ рдЖрдк рдЗрд╕реЗ рд╕реАрдзреЗ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╣реА рдПрдордбреАрдПрдПрдирдПрдо рд╕реАрдПрд╕рд╡реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЦрд╛рддреЛрдВ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдореЗрдиреВ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдЦрд╛рддреЛрдВ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВ: рд▓реЗрдЦрд╛-> рдирд┐рд░реНрдпрд╛рдд-> рдПрдХ рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдЦрд╛рддреЗ, рдХреЙрдорд╛ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП (рд╣рд╛рдБ, рдореЗрдиреВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд▓рдВрдмрд╛ рдирд╛рдо рд╣реИред рдзрд░реНрдо рдиреЗ "рд╕реАрдПрд╕рд╡реА рдХреЛ рдирд┐рд░реНрдпрд╛рдд" рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдереА )ред Account.csv рдлрд╝рд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЦрд╛рддреЗ рд╣реИрдВ, рдЕрдм рдЙрдкрдирд╛рдоред рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдбреЗрдЯ рдлрд╛рдЗрд▓ рд▓реЗрдиреА рд╣реЛрдЧреАред рдЙрд╕реЗ Alias.dat рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреЗрд╡рд▓ рдЙрдкрдирд╛рдо рдЗрд╕рдореЗрдВ рд░рд╣рддреЗ рд╣реИрдВ, рдФрд░ рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рднрдЯреНрдареА рдореЗрдВ рд╣реИрдВред
рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдФрд░ рдПрдХреНрдЬрд╝рд┐рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЦрд╛рддреЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдореЛрддреА рдкрд░ рдПрдХ рдЫреЛрдЯреА рд╕реА рд▓рд┐рдкрд┐ рддреИрдпрд╛рд░ рдХреА, рдпрд╣рд╛рдБ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рджреА рдЧрдИ рд╣реИ:
 use strict; use Digest::MD5 qw(md5_hex); use DBI; my $dsn='DBI:mysql:exim_db:192.168.2.7'; my $db_user='exim'; my $db_pass='exim_password!'; my $dbh=DBI->connect($dsn, $db_user, $db_pass) or die "Cann\'t connect to DB\n"; my $acc_file="c:\\Accounts.csv"; my $alias_file="c:\\Alias.dat"; open(ACFILE, $acc_file); open(ALIASFILE, $alias_file); my @line=<ACFILE>; my @alias=<ALIASFILE>; my @arr; my @arr1; my $login; my $password; my $mquota; my $mdir; my $sq sub sql_query { my ($query)=@_; #print $query."\n"; my $sth=$dbh->prepare($query); $sth->execute; $sth->finish; } print "Adding user accounts\n"; foreach my $s(@line) { @arr=split(/,/, $s); if ($arr[0] =~ m/Email/g) { next; } $login=$arr[0]; $password=$arr[5]; $login =~ s/\"//g; $login =~ s/\@domain.ru//; if($arr[17]>0) { $mquota=$arr[17]/1000; } else { $mquota=0; } $sql=qq(INSERT INTO accounts(login, password, quota) VALUES("$login", $password, $mquota)); sql_query($sql); print $login." added OK\n"; } print "\nAdding aliases\n"; foreach my $s(@alias) { @arr1=split(/ /, $s); $arr1[2] =~ s/\n//; $arr1[0] =~ s/\@domain.ru//; $arr1[2] =~ s/\@domain.ru//; my $goto=$arr1[2]; my $address=$arr1[0]; #print $goto."\n"; $sql=qq(insert into aliases(address, goto) values('$address', '$goto')); sql_query($sql); print "Alias ".$address." => ".$goto." added OK\n"; } 

рдЦреИрд░, рдпрд╣ рд▓рдЧрднрдЧ рд╣реИред рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЗрд▓ рдХреЛ рдЦреАрдВрдЪрддрд╛ рд░рд╣рддрд╛ рд╣реИред

2.2ред рдореЗрд▓рдмреЙрдХреНрд╕ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдХреНрд╕реЗ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдпреВрдЯрд┐рд▓рд┐рдЯреА рдЗрдореНрдкреИрдкреНрд╕рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореБрдЭреЗ рдИрдПрдирдЯреА рд╡рд┐рднрд╛рдЧ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм рдореИрдВрдиреЗ рд╡рд╣рд╛рдВ рдкреНрд░рд╡рд╛рд╕ рдХрд╛ рд╡рд┐рд╖рдп рдЙрдард╛рдпрд╛ рдерд╛ред
рд╣рдо рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рд╕реЗ imapsync рдбрд╛рд▓рддреЗ рд╣реИрдВ
 cd /usr/ports/mail/imapsync make install clean 

рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдХреБрдЫ рдкрдЯрдХрдерд╛рдПрдБ рд▓рд┐рдЦреАрдВ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдЕрдХреЗрд▓рд╛ рд╣реА рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдкрд╣рд▓реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ imapsync рдХреЗ рд▓рд┐рдП рдПрдХ csv рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдЗрд╕реЗ рдЪрд▓рд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЙрдирдХреА рд╕рд╛рдордЧреНрд░реА рд╣реИрдВ
 # Creating CSV file for imapsync # #!//usr/bin/perl use strict; use DBI; my $dsn="DBI:mysql:exim_db:localhost"; my $db_user="exim"; my $db_password="exim_password"; my $dbh=DBI->connect($dsn, $db_user, $db_password) or die "Cannt connect to DB"; my $f_csv="imap_users.csv"; open(CSV, ">".$f_csv); my $sql="select login, password from accounts"; my $result=$dbh->prepare($sql); $result->execute; while ((my $login, my $password)=$result->fetchrow_array) { print CSV $login.";".$password.";".$login.";".$password."\n"; } print "File $f_csv is created\n"; close(CSV); $result->finish; #------------------------------------------------------------------- # imapsync #!/usr/bin/perl my $f_csv="imap_users.csv"; my $src="192.168.2.3"; my $dst="127.0.0.1"; open(CSV, $f_csv); while(<CSV>) { chomp; my ($u1, $p1, $u2, $p2)=split(";"); #print $p1."\n"; print "Sync user $u1\n"; my $r_sync=system("imapsync --debug --host1 $src --user1 $u1 --password1 $p1 --host2 $dst --user2 $u2 --password2 $p2"); } close(CSV); 

рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рд▓рдВрдмреЗ, рд▓рдВрдмреЗ, рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╕рднреА 200GB рдкреБрд░рд╛рдиреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдирдП рдкрд░ рдирд╣реАрдВ рдЪрд▓реЗ рдЬрд╛рддреЗред

3. рд╕рд╛рд░рд╛рдВрд╢
рдХреБрдЫ рдШрдВрдЯреЛрдВ рдмрд╛рдж, рдореИрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛, рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬреЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛ рдЧрдпрд╛ред рдореИрдВрдиреЗ рдХрдИ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрдИ рдореЗрд▓рдмреЙрдХреНрд╕реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХреАред рдХреЛрдИ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рджреЗрдЦрд╛ рдЧрдпрд╛, рд╕рдм рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рдерд╛ рдЬреИрд╕рд╛ рдХрд┐ рдерд╛, рдФрд░ рдпрд╣ рдмрдирд╛ рд░рд╣рд╛ред рд╕рднреА рдкрддреНрд░ рдЬрдЧрд╣ рдореЗрдВ рд╣реИрдВред рдПрдХрдорд╛рддреНрд░ рджреЛрд╖, рдпрджрд┐ рдЖрдк POP3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рднреА рдЕрдХреНрд╖рд░ рдХрдерд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдард┐рдд рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ред
рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕реА рдХреА рдорджрдж рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдкреВрдЫреЗрдВред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

Source: https://habr.com/ru/post/In154281/


All Articles