Собственно, в этой статье я опишу настройку почтового шлюза для Зимбры, но уже не на Fedora, а на FreeBSD. На линуксе настройку такого же почтового шлюза я рассматривал вот тут:
Собственно говоря, первый этап, на котором осуществляется вся первичная настройка сервера, мною уже описан вот тут:
http://technotrance.su/index.php/moi-stati/freebsd/item/13-home-web-mail-ftp-server1
Поэтому, установку, тюнинг ядра, русификацию и т.д. делаем точно также, как указано в ссылке выше. Правда сейчас я уже выполнял установку 9.1-RELEASE, но в ней всё делается точно также, как и в 9.0-RELEASE. Единственное отличие, которое надо будет учесть для настройки почтового шлюза – это опции включения фаервола в ядре. Их надо сделать вот такими:
# включить фаервол options IPFIREWALL # делать логи пакетов, для которых в правилах есть опция 'log' options IPFIREWALL_VERBOSE # Ограничение повторяющихся логов на случай атак типа флудинга. options IPFIREWALL_VERBOSE_LIMIT=50 # включение перенаправления (проброса) пакетов. options IPFIREWALL_FORWARD # включение возможности NAT options IPFIREWALL_NAT options LIBALIAS # Включение возможности ограничивать скорость трафика. options DUMMYNET options ROUTETABLES=2 options HZ="1000"
После установки системы и базовой её настройки ставим postfix. Этот вопрос я тоже уже рассматривал вот в этой своей статье:
http://technotrance.su/index.php/moi-stati/freebsd/item/15-home-web-mail-ftp-server3
Там, в самом начале, как раз и описывается установка postfix. Здесь же, опции сборки будут отличаться лишь тем, что dovecot нам не нужен:
А остальное всё делаем также, вплоть до настроек файла /etc/rc.conf:
sendmail_enable="NO" sendmail_submit_enable="NO" sendmail_outbound_enable="NO" sendmail_msp_queue_enable="NO" postfix_enable="YES"
Перезагружаем сервер после этого.
Вот теперь приступим к конфигурированию. Сразу определимся, что у меня в системе стоит две сетевухи. Первая em0 подключена к интернету и имеет белый адрес. На этот белый адрес у меня уже зарегистрированы несколько доменов второго уровня и к ним имеются MX- и PTR-записи. И пусть они называются mydomain.ru, mydomain1.ru, mydomain2.ru, mydomain3.ru. Ну, а сетевая карта re0 подключена к локальной сети и пусть имеет адрес 192.168.199.150.
Найдём файл /usr/local/etc/postfix/main.cf и отредактируем в нём некоторые строчки. Показываю лишь те, что я редактировал, остальное же не трогаем ничего:
# имя хоста почтового шлюза. Это имя будет использоваться в течении сессии ehlo/helo smtp: myhostname = mydomain.ru # наш домен mydomain = mydomain.ru # подставляется к адресу отправителя или получателя если он указан не полностью. myorigin = $myhostname # сетевые интерфейсы, с которыми может работать postfix inet_interfaces = all # Задаём имена доменов, для которых мы будем принимать почту. В моём случае, их несколько разных. mydestination = $myhostname, localhost, mydomain1.ru, mydomain2.ru, mydomain3.ru # Так как на шлюзе требуется только пересылка почты, отключаем локальную доставку сообщений local_recipient_maps = mynetworks_style = host # сети, которым разрешено выполнять пересылку через данный сервер. Обычно сюда включают # только внутреннюю локальную сеть, или вообще только IP внутреннего почтового сервера. # В нашем случае, это сервер с зимброй. mynetworks = 192.168.199.101, 127.0.0.1 # в данной директиве определяем домены, для которых необходимо принимать почту. relay_domains = $mydestination # В самый конец конфига добавляем ещё одну строчку. В этом файле мы укажем хост с зимброй, # на который надо доставлять сообщения для доменов mydomain.ru, mydomain1.ru, mydomain2.ru, mydomain3.ru transport_maps = hash:/usr/local/etc/postfix/transport
Сохраняем этот конфиг. Затем, создаём файл /usr/local/etc/postfix/transport и наполняем его вот таким содержимым:
mydomain.ru smtp:[192.168.199.101] mydomain1.ru smtp:[192.168.199.101] mydomain2.ru smtp:[192.168.199.101] mydomain3.ru smtp:[192.168.199.101]
Сохраним и выполним команду:
postmap hash:/usr/local/etc/postfix/transport
затем перезапускаем postfix:
service postfix restart
Теперь, что касается настроек зимбры. В настройках первого сервера делаем также, как на этом скриншоте:
Только в список доверенных сетей агента передачи данных добавим ещё и наш почтовый шлюз. Вот такой этот список должен быть:
127.0.0.1/8 192.168.199.101/32 192.168.199.150/32
Собственно, после этого, связка зимбра+почтовый шлюз должна уже заработать. Но поскольку я на почтовый шлюз хочу прикрутить ещё и procmail, то, в моём случае, конфигурирование ещё не заканчивается. Ставлю procmail:
cd /usr/ports/mail/procmail make install clean
Затем, настроим постфикс на работу с procmail. В конфиге постфикса /usr/local/etc/postfix/main.cf находим строчку:
#mailbox_command = /some/where/procmail
и правим её вот так:
mailbox_command = /usr/local/bin/procmail
Затем, найдём строчку:
#mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp
И исправим её на:
mailbox_transport = procmail
либо просто додавляем эту строчку ниже.
А ещё, после неё, добавим вот эту строчку:
procmail_destination_recipient_limit = 1
Это чтобы procmail разбивал массовую рассылку письма на отдельные письма.
Сохраняем и идём редактировать следующий файл /usr/local/etc/postfix/master.cf. В нём в самом начале находим строчку:
smtp inet n - n - - smtpd
и прямо под ней добавляем новую строчку (впереди строчки три пробела):
-o content_filter=procmail:
и в самый конец файла добавляем строчку:
procmail unix - n n - - pipe flags=Rq user=nobody argv=/usr/local/bin/procmail -f SENDER=${sender} -t RECIPIENT=${recipient} -m /usr/local/etc/procmailrc
Сохраняем. Вкратце, мы всем этим сделали следующее: указали постфиксу на почтовый фильтр procmail, указали что procmail будет использоваться в качестве транспорта и в файле master.cf этот самый транспорт и прописали.
Теперь создаём файл /usr/local/etc/procmailrc и наполняем его вот таким содержимым:
MAILDIR=/usr/local/etc/postfix/procmail LOGFILE=$MAILDIR/procmail.log LOCKFILE=$MAILDIR/procmail.lock SHELL=/bin/sh # тремя строчками выше мы задали необходимые переменные # а ниже мы прописали правила, которые позволят пропускать почту, # адресуемую на @mydomain.ru, @mydomain1.ru, @mydomain2.ru, @mydomain3.ru и почту и обратно. :0H * ^.*@mydomain\.ru.*$ ! $RECIPIENT :0H * ^.*@mydomain1\.ru.*$ ! $RECIPIENT :0H * ^.*@mydomain2\.ru.*$ ! $RECIPIENT :0H * ^.*@mydomain3\.ru.*$ ! $RECIPIENT # последнее правило будет уничтожать всё остальное. :0 /dev/null
Это пока самые простейшие правила для доменов. В дальнейшем их можно будет плодить сколь угодно всяких разных.
Не забываем создать каталог /usr/local/etc/postfix/procmail и назначить на него права:
mkdir /usr/local/etc/postfix/procmail chown nobody:mail /usr/local/etc/postfix/procmail chmod 770 /usr/local/etc/postfix/procmail
Далее, мне бы хотелось прикрутить шифрование к почтовому шлюзу. Для этого, в конец файла /usr/local/etc/postfix/main.cf добавляем строчки:
smtp_use_tls = yes smtpd_use_tls = yes smtpd_tls_auth_only = yes smtp_tls_note_starttls_offer = yes smtpd_tls_key_file = /usr/local/etc/postfix/smtpd.pem smtpd_tls_cert_file = /usr/local/etc/postfix/smtpd.pem smtpd_tls_CAfile = /usr/local/etc/postfix/smtpd.pem smtpd_tls_loglevel = 1 smtpd_tls_received_header = yes smtpd_tls_session_cache_timeout = 3600s tls_random_source = dev:/dev/urandom
и создаём самоподписанный доверенный сертификат. Находясь в каталоге /usr/local/etc/postfix, необходимо выполнить команду:
openssl req -new -nodes -x509 -out smtpd.pem -keyout smtpd.pem -days 9999
На задаваемые вопросы отвечаем примерно так:
Country Name (2 letter code) [AU]:RU State or Province Name (full name) [Some-State]:Sverdlovskaya Locality Name (eg, city) []:EKB Organization Name (eg, company) [Internet Widgits Pty Ltd]:Office Organizational Unit Name (eg, section) []:noname Common Name (eg, YOUR name) []:mydomain.ru Email Address []:[email protected]
Самым важным параметром является значение Common Name — оно должно совпадать с FQDN сервера.
Ещё в конфиге /usr/local/etc/postfix/main.cf ещё можно прописать вот эти параметры:
default_destination_concurrency_limit = 100 # максимальное количество писем, которые почтовый шлюз может отправить одновременно. default_destination_recipient_limit = 100 # максимальное количество писем, которые почтовый шлюз может принять одновременно. default_process_limit = 200 # количество дочерних процессов, которые может запускать postfix max_use = 500 # количество одновременных подключений, которые может обрабатывать postfix
После всех этих правок не забываем перезапустить постфикс. Вобщем то, и на этом настройка постфикса заканчивается.
Но настройка самого шлюза ещё продолжается, в моём случае. Поскольку у меня на сервере с зимброй будет ещё и openfire, и ftp-шник, а сам этот сервер будет «прятаться» за почтовым шлюзом, то мне надо настроить:
а) NAT для сервера с зимброй, чтобы он мог видеть внешний мир;
б) Проброс портов извне к серверу с зимброй, чтобы пользователи извне могли попадать на вэб-интерфейс, подключаться к жабберу и заходить на ФТП.
В этом мне помогли вот эти статьи:
http://habrahabr.ru/post/111580
http://ifreebsd.org/freebsd/настройка-natтрансляция-адресов-маскар
Для начала, в /etc/rc.conf добавим строчки:
firewall_nat_enable="YES" gateway_enable="YES"
А в /etc/sysctl.conf добавим строчку:
net.inet.ip.fw.one_pass=1
А фаервол приводим вот к такому виду:
# сброс всех правил -f flush # разрешить любой доступ через интерфейс-петлю add 00050 allow all from any to any via lo0 # NAT для зимбера и проброс портов. В этих строчках указываются опции NATа, а также, # какие порты и куда пробрасываем. Поскольку стоит deny_in, то нужно также указать, # что порты 25 и 465 пробрасываются на сам почтовый шлюз. # Опцию переноса строк "\" надо убрать, все должно быть в одну строчку: nat 1 config if em0 reset same_ports deny_in \ \ redirect_port tcp 192.168.199.101:443 443 \ \ redirect_port tcp 192.168.199.101:80 80 \ \ redirect_port tcp <белый ip>:25 25 \ \ redirect_port tcp <белый ip>:465 465 \ \ redirect_port tcp 192.168.199.101:21 21 \ \ redirect_port tcp 192.168.199.101:5222-5223 5222-5223 \ \ redirect_port tcp 192.168.199.101:7070 7070 \ \ redirect_port tcp 192.168.199.101:7777 7777 add 00053 nat 1 tcp from any to any via em0 # второй NAT, чтобы проходил ping везде nat 2 config if em0 reset same_ports add 00054 nat 2 icmp from any to any icmptypes 0,8 via em0 # разрешить любой исходящий трафик с сервера add 00055 allow all from me to any # разрешить прохождение пакетов со статусом 'установлен' add 00075 allow tcp from any to any established # разрешить весь icmp трафик add 00100 allow icmp from any to any # разрешить серверу обмениваться любым трификом со DNS-сервером add 00150 allow all from 192.168.199.100 to me via re0 # открытые порты к серверу. add 00160 allow tcp from any to me 25,465 via em0 add 00161 allow tcp from any to me 22,10000,25,465 via re0 # разрешить любой трафик с зимброй add 00171 allow all from 192.168.199.101 to any via re0 add 00172 allow all from any to 192.168.199.101 via re0 # Запретить всё остальное add 10000 deny all from any to any
Затем, даём команду:
service ipfw restart
Чтобы корректно работал проброс порта 21 для ФТП-сервера, нужно загрузить модуль ядра alias_ftp.ko. Для этого, надо создать файл /boot/loader.conf и прописать в него вот такую строчку:
alias_ftp_load="YES"
С этой опцией модуль alias_ftp.ko будет загружаться при старте системы. Не забудем, после этого, перезагрузить сервер.
Собственно, после этого, можно уже и проверить работу почтового шлюза на предмет всех его перечисленных требований.
У меня на этапе проверки прохождения почты была замечена ошибка:
postfix/local[20404]: error: open database /etc/aliases.db: No such file or directory postfix/local[20404]: warning: dict_nis_init: NIS domain name not set - NIS lookups disabled postfix/local[20404]: warning: hash:/etc/aliases is unavailable. open database /etc/aliases.db: No such file or directory
решается она так:
rm -f /etc/mail/aliases.db
затем, находим файл /etc/aliases и комментируем в нём строчку:
# nobody: root
А потом выполняем команду:
newaliases
Также, следует снизить «таймаут агента вэб-почты» в настройках зимбры, чтоб задержек в прохождении писем меньше было:
Собственно, на этом и всё. Если найду какие недоработки, то потом подправлю эту статью.
Источник http://technotrance.su/index.php/moi-stati/freebsd/item/23-mail-gateway-freebsd