Настройка на Sendmail
конфигурационен файл на sendmail
Може би най-сложният от гледна точка на конфигурация и поддръжка от всички софтуерни компоненти на фамилията операционни системи UNIX е програмата sendmail. Тези, които са виждали поне веднъж неговия конфигурационен файл, не се съмняват в това. Подобна сложност не е възникнала от нулата - тя е продукт на условията на съществуване в най-хаотичния свят - света на електронната поща. Директното редактиране на конфигурационния файл на sendmail, обикновено наречен "sendmail.cf" (във FreeBSD този файл се намира в директорията "/etc/mail"), особено редактирането на така наречените правила, съхранени в него, е задача, която малко хора могат да направят. Необходимостта от такава директна хирургична интервенция обаче е изключително рядка. В повечето случаи можете (и трябва) да използвате макропроцесора "m4(1)". Вижте също изграждането на файла sendmail.cf.
Самият макропроцесор m4 не е високоспециализирана програма и може да се използва в много области, където е необходима макро обработка на текстови данни. В случая на sendmail, за последния е създадена богата библиотека от макроси във формат m4, който е редовен компонент на изходния код на самия sendmail, съответно се доставя с изходния код и позволява автоматизиране и опростяване на конфигурацията на sendmail в по-голямата част от случаите. Какво всъщност ще направим сега. Подробно описание на конфигурирането на sendmail с помощта на m4 е дадено във файла "SENDMAIL_ROOT/cf/README" (тук SENDMAIL_ROOT е коренът на дървото на източника на sendmail, във FreeBSD това е директорията "/usr/share/sendmail"), но ние ще се ограничим до описанието на нашия конкретен случай.
N.B. Първо, струва си да се изясни, че префиксите във всеки ред, състоящи се от число, двоеточие и интервал, са простономериране на редове за по-лесно допълнително обяснение. Това номериране не е част от действителния конфигурационен файл.
Нека разгледаме дадения конфигурационен файл ред по ред.
Ред 01. Съдържа дефиницията на версията на файла, което улеснява възможната допълнителна поддръжка. Низът не е задължителен, но присъствието му няма да е излишно. Този макрос просто добавя ред с информация за версията към получения файл. Форматът на самия низ е произволен и може да съдържа например информация за версията в SCCS, RCS, CVS или някакъв друг формат.
N.B. Имайте предвид, че в макроса низът се отваря с обратна кавичка [`] и се затваря с прав ['] . Това е синтаксисът и трябва да го наблюдавате внимателно, защото няма да има съобщение за грешка по време на превода.
Ред 03. Определяне на вида на пощенския домейн. Включва набор от макроси, които задават параметри, специфични за даден пощенски домейн. Включващите файлове се намират в директорията " SENDMAIL_ROOT/cf/domain/ ". За повечето реализации "generic" е добре.
Това завършва общата конфигурационна схема, ред е да дефинираме функции - FEATURE. Струва си да се отбележи, че всеки конфигурационен компонент трябва да има свое място в конфигурационния файл, тъй като редът, в който се появяват, е важен. Пълната структура и ред са описани в " SENDMAIL_ROOT/cf/README ".
Ред 05. Декларираме, че нашата система има локален агент за доставка, който поддържа протокола LMTP (локален протокол за прехвърляне на поща - локалният протокол за доставка на поща, описан в RFC2033). За FreeBSD това е " mail.local(8) ". Дали вашата система има локален мейлър с поддръжка на LMPT е описано в придружаващата документация за вашата операционна система. Най-общо казано наличието на LMTPmailer не е критичен, но полезен. Следователно, ако премахнете този параметър, тогава няма да се случи нищо ужасно.
Това завършва описанието на функциите, които използваме, време е да определим техните допълнителни параметри и други конфигурационни променливи.
Ред 14. Посочване на местоположението на файла, съдържащ списъка с домейни, за които може да се разработи механизмът за виртуализация на потребителите, включен в ред 9. Ако този файл липсва или е празен, тогава виртуализацията ще работи само на ниво локални потребителски имена, тоест ще бъде напълно подобна на „ aliases(5) “. Файловият формат ще бъде описан по-долу.
Ред 16. Декларира името на домейна на "разширения" хост, който всъщност ще препраща нашата изходяща поща. Тук " mail.infopac.ru " трябва да бъде заменено от вас с името на пощенската система на доставчика, който използвате.
Ред 18. Още един "пирон в ковчега" на DNS. Всъщност тук ние само дефинираме местоположението и използването на файла за превключване на услугата. Чрез този механизъм ще деактивираме обажданията към DNS услугата, която ще бъде описана по-късно.
Ред 19. Ние живеем в страна, където всичките 8 бита от байта се използват за кодиране на символи и това е, което казваме на MTA да предаде всичко, както е в 8-битово кодиране, и да не прави ненужно преобразуване в 7-битов формат, използвайки MIME64 кодиране на тялото на съобщението.
Ред 20. Задайте времето за изчакване за изпълнение на операцията "IDENT" на 0 секунди. Тази услуга почти не се използва, а обработката й води до ненужни допълнителни забавяния при предаването на пощата.
Редове 21 и 22. Режимът на работа с опашката на пощенските съобщения. Като се има предвид, че изпращането от опашката ще се извърши само при следващата комуникационна сесия, която можеслед час, или може би утре, задаваме изчакване за предупреждение (ред 21) за невъзможността за доставка за достатъчно дълъг период, тук - 16 часа. Е, и съответно връщането на съобщението, ако е невъзможно да го изпратите (ред 22) след 8 дни.
Редове 26 и 27. Последната описана група е групата на използваните мейлъри. Това е минимално необходимият и задължителен набор в нашия случай. Тук "local" е локална поща за доставка, "smtp" е доставка чрез SMTP протокол през TCP/IP връзка.
Това завършва конфигурационния макро файл. Превеждането му във формата на конфигурационния файл на sendmail се извършва с команда като:
Тук $ е основната директория на конфигурационната библиотека на sendmail - "SENDMAIL_ROOT/cf/", на FreeBSD е "/usr/src/contrib/sendmail/cf". Дефиницията на директория за "-D_CF_DIR_" трябва задължително да завършва с "/". Вместо "config.mc" и "config.cf" трябва да са истинските имена на вашите файлове. За FreeBSD дефиницията "-D_CF_DIR_" може да бъде пропусната, така че в моя случай командата беше:
Външни файлове и услуги
Получаването на конфигурационния файл на sendmail е половината от битката. Сега да преминем към конфигурацията на компоненти, външни за sendmail, но логически свързани с него.
Вашите стойности, освен ако не използвате услугите на Инфопак, разбира се трябва да са различни.
/etc/mail/genericstable
Хеш база трябва да бъде генерирана от този текстов изходен файл с командата:
/etc/mail/service.switch
Сега нека създадем файл за превключване на услуги. В нашия случай, според стойността, посочена в директивата за ред 18, това ще бъде файлът " /etc/mail/service.switch ". Този текстов файл трябва да съдържа един ред:
Линията казва на sendmail да използва само информациятаот файла /etc/hosts при разрешаване на имена по време на доставка на поща. За повече информация относно използването на сервизния превключвател вижте "Ръководство за инсталиране и работа на Sendmail", раздел "2.5. Сервизен превключвател".
/etc/mail/virtusertable
От дадения текстов изходен файл трябва да се генерира хеш база с команда, подобна на командата за файла " /etc/mail/genericstable ".
Най-общо казано, функционалността на виртуалните таблици за файловете " /etc/mail/genericstable " и " /etc/mail/virtusertable " е много по-висока от това, което е показано тук. Механиката на тяхната работа е напълно описана в документа " SENDMAIL_ROOT/cf/README ".
/etc/mail/virtusertable.domains
Базовият хеш за файла не е необходимо да се генерира.
Създайте, ако вече не е създаден, файл с имена на локални хостове. Не ни трябва, но sendmail го иска. Ако е необходимо, файлът може да бъде маркиран за предназначението му. За да създадем, като потребител „root“ изпълняваме:
Тъй като няма да действаме като SMTP сървър, няма смисъл периодично да обработваме пощенската опашка. Следователно трябва да променим начина, по който sendmail стартира при зареждане на системата. За да направите това, във файла "/etc/rc.conf" пишем:
Тоест, демонът ще присъства, но няма да обработи реда си. Вижте sendmail(8) за подробности. Завършваме работата на работещия демон с командата, изпълнена като "root" потребител:
И стартирайте демона в новия режим:
/etc/mail/Makefile
Тестване
Както се казва, моментът на истината настъпи. Ако сте направили всичко, както е написано тук, тогава можете да започнете да тествате. Първо, нека проверим дали sendmail се държи както очакваме. За да направите това, стартирайте го в тестов режим:
Не забравяйте, че sendmail работи за нас в режим "на опашка" итова означава, че всяко писмо, прието за доставка, ще бъде поставено на опашка за обработка, но няма да бъде доставено. За да може sendmail да обработи своята опашка и да завърши доставката, той трябва да бъде стартиран с превключвателя " -q ":
Това ще доведе до факта, че натрупаната опашка ще бъде обработена и съобщенията в нея ще бъдат доставени.