Розсилання пошти в мережевій операційній системі FreeBSD
Розсилання пошти в мережевій операційній системі FreeBSD
КОНТРОЛЬНА РОБОТА № 3 Розсилання пошти в мережЕВій операційній системі FreeBSD Мета роботи Одержати практичні навички у розсиланні пошти з використанням протоколу UUCP та команди MAIL у мережевій операційній системі FreeBSD4.2 Теоретичні положення Протокол UUCP (Unix to Unix copy) призначений для копіювання файлів між декількома машинами в мережі, для виконання команд на віддаленій машині. Цей протокол також можна використати для розсилання пошти. Нехай одна з машин є вузлом, яка обмінюється поштою з користувачами поза організацією, де вона знаходиться через головну обчислювальну машину з адресою MAIL.PROVIDER.KIEV.UA, а також виконує розсилання пошти ще трьом машинам всередині організації, де вона знаходиться. Нехай імена цих машин будуть host1.your.domain.org, host2.your.domain.org і host3.your.domain.org. Нехай для простоти ім'я нашої машини буде MYHOST.YOUR.DOMAIN.ORG Кожній машині для проведення операції розсилання пошти необхідно присвоїти її власне UUCP - ім'я. Воно не повинно співпадати з її справжнім іменем, але не зважаючи на це, будемо вважати, що UUCP - імена наших машин - це MYHOST, HOST1, HOST2, HOST3 і PROVIDER Обмін поштою відбувається повністю через протокол UUCP, причому схема проходження така: Нехай стрілка означає напрям дзвінка. Тоді |
PROVIDER | | MYHOST | | HOST1 | | | | | | HOST2 | | | | | | HOST3 | | |
Настройка розсилання пошти передбачає настройку самого протоколу UUCP і настройку служби SENDMAIL. Розглянемо детально, як організований протокол UUCP, і які основні команди і daemon'и необхідні для повної його реалізації UUCP - Unix to Unix copyСинтаксис команди - uucp [опції] вихідний_файл кінцевий_файлФайл може бути записаний як СИСТЕМА!ШЛЯХ, де СИСТЕМА - це UUCP - ім'я даної машини. Після того, як була дана команда, вона не виконується відразу, а записується в загальну чергу, а її виконання проводити daemon UUCICO при його звертанні до системи. Причому це звертання відбувається відразу, якщо в опціях не був вказаний ключ -r або --nouucico.Для цієї команди можуть бути дані наступні опції-c, --nocopy - не копіювати вихідні файли в SPOOL - директорію. Якщо файли були видалені до того, як над ними попрацював daemon UUCICO, то копіювання аварійно перерветься;-С, --copy - ця операція відбувається за умовчання;-d, --directories - створювати всі необхідні директорії для копіювання, якщо це необхідно;-f, --nodirectories - не створювати ніяких директорій, вважаючи, що вони уже існують. В іншому випадку аварійно перервати копіювання;-R - копіювати рекурсивним методом, тобто копіювати вкладені папки;-m, --mail - повідомляти про вдале (невдале) закінчення пересилки пошти через mail;-n user, --notify user- повідомляти про вдале (невдале) закінчення пересилки пошти через mail для конкретного користувача на віддаленій системі;-r, --nouucico - не запускати daemon UUCICO відразу, а ставити файли в чергу для пізнішого виконання;-j, --jobid - виводити на екран ідентифікаційний номер процесу;-t, --uuto - використовується за умовчання для скрипта UUTO для коректної інтерпретації СИСТЕМА!ШЛЯХ;Команда UUSTATСинтаксис команди - uustat [опції]Показує поточний статус різних об'єктів, які підпадають під дії протоколу UUCP. Ця команда також може бути використана для того щоб відповісти на запит або послати негативну відповідь на запит, посланий командами UUCP або UUX. Для повного перегляду допомоги англійською мовою в командному рядку UNIX необхідно набрати команду man uustat. Нам буде достатньо використати команду uustat -all - показати всю чергу запитів на передачу файлів uustat --status - показати всі послідовності зв'язних інформаційних обмінів між усіма віддаленими машинами. Uustat --ps - показати стан всіх процесів UUCP, які контролюють порти або доступ до системи. UUXСинтаксис команди - uux [опції] командиЦя команда служить для виконання команд на віддалених машинах через UUCP використовуючи файли віддаленої машини. При виконанні автоматично запускається daemon UUCICO, якщо в командному рядку не стояло --nouucicoВиконання команди відбувається через активізацію daemon'а UUXQT. Аргументи файлів можуть бути зібрані з віддаленої системи і передані керуючій системі, як потік стандартного вводу. При написанні шляхів в якості аргументів UUX, можна використати знання, отримані з параграфа про UUCP. Для більш детального перегляду допомоги англійською мовою в командному рядку UNIX необхідно набрати команду man UUX. Для повного опису конфігурації необхідно розглянути також наступний daemon і дві додаткові утиліти Daemon UUXQT Синтаксис daemon'а : UUXQT [опції] Він виконує команди, що вимагаються командою UUX з локальної або віддаленої машини. Daemon UUXQT запускається daemon'ом UUCICO відразу ж по факту виконання команди UUX, якщо в рядку не був вказаний ключ --nouucico Розглянемо основні опції -c command - виконуються запити тільки для указаних в командному рядку команд; -s system - виконуються запити, отримані з указаних в командному рядку названий систем. Утиліта UUCHK Синтаксис uuchk [-s система] [стандартні опції для UUCP] UUCHK зчитує дані про конфігурацію протоколу UUCP, і відображає значно ширший спектр інформації, чим можна прочитати в конфігураціойному файлі. Цю утиліту корисно використовувати, коли відбувається процес конфігурації протоколу UUCP. Опція система використовується для того, щоб указати, для яких систем необхідно вивести дані про конфігурацію. Утиліта MAKEMAP служить для перетворення файлів в бази даних для настройки SENDMAIL. Настройка протоколу UUCP 1) Необхідно написати конфігураційні файли для UUCP. 2) drwxrwx--- 3 uucp uucp 512 15 ноя 16:23 ./ drwxr-xr-x 10 root wheel 2048 30 дек 21:44 ../ -r--r----- 1 uucp uucp 61 23 янв 1997 call -r--r----- 1 uucp uucp 260 8 апр 1997 config -rw-r----- 1 uucp uucp 250 3 сен 20:51 dial -r--r----- 1 uucp uucp 1 25 авг 1996 dialcode -r--r----- 1 uucp uucp 14 21 апр 1997 passwd -r--r----- 1 uucp uucp 96 29 май 1997 port drwxr-xr-x 2 root uucp 512 15 ноя 12:08 samples/ -r--r----- 1 uucp uucp 160 28 май 1997 sysin -r--r----- 1 uucp uucp 366 16 ноя 16:06 sysout 1.1 callВ цьому файлі описується ваш логін і пароль для продзвонки на інші uucp-машини. Природно, логін і пароль необхідно получити від адміністратора тої машини, на яку ви зібрались дзвонити. В нашому випадку він буде виглядати приблизно так: ======= call ====== # system login password provider uumyhost Your_Secret_Password ======= call ====== 1.2 configВ цьому файлі описуються різні параметри uucp, в основному шляхи і імена файлів. Цей файл потрібен, якщо потрібно перевизначити деякі умовчання, які або задані при компіляції. ======= config ====== nodename myhost # тут необхідно указати ваше власне uucp-ім'я spool /var/spool/uucp pubdir /var/spool/uucppublic logfile /var/spool/uucp/Log statfile /var/spool/uucp/Stats debugfile /var/spool/uucp/Debug sysfile sysin sysout # імена файлів з описами систем - ваших лінків portfile port dialfile dial dialcodefile dialcode callfile call passwdfile passwd # кількість одночасно виконуваних процесів розкладки пошти max-uuxqts 1 ======= config ====== 1.3 dialЦе файл з описами модемів. ======= dial ====== dialer idc # довільне ім'я модему, під яким він буде відомий uucp dialtone w pause , #chat "" ATZ\r\d\c OK ATM0DPW\T CONNECT \p\c chat "" ATZ\r\d\c OK ATM0DT\T CONNECT \p\c chat-fail BUSY chat-fail ERROR chat-fail NO\sDIALTONE chat-fail NO\sCARRIER #complete \d\d+++\d\dATH\r\c #abort \d\d+++\d\dATH\r\c ======= dial ====== 1.4 dialcodeСлужить для набору номера, має нульову довжину1.5 passwdВ цьому файлі містяться логін і відповідний пароль для тих систем, які будуть дзвонити вам. При роботі з протоколом UUCP daemon uucico -l авторизує подзвонивших користувачів, пропонуючи їм при цьому ввести логін і пароль, і перевіряє правильність пароля по цьому файлу. Які логіни і паролі можна присвоїти віддаленим машинам, які дзвонять вам - справа смаку. Правильніше дати їм логіни, які починаються однаково, наприклад, з двох букв uu. ======= passwd ====== uuhost1 Top_Secret_Password uuhost2 Smart_Password uuhost3 Stupid_Password ======= passwd ====== 1.6 portВ цьому файлі міститься опис портів. Портів може бути багато. Кожен порт має своє ім'я, яке і використовується надалі в файлах з описами віддалених систем. Hабір параметрів не обмежується нижченаведеним прикладом. Докладніше можна знайти в описі до Taylor UUCP. ======= port ====== port port1 # ім'я порту type modem device /dev/cuaa1 dialer idc speed 38400 port port2 # теж ім'я порту type tcp service 540 ======= port ====== 1.7 sysinЦе файл з описами систем, які будуть дзвонити вам. ======= sysin ====== call-login * call-password * local-send / local-receive / port port1 # це, як ви пам'ятаєте, у нас модемний порт chat-timeout 90 protocol g # можливо, ви захочете використати який-небудь інший протокол time never # дзвонять тільки вони, ви їм ніколи не дзвоните debug 1 system host1 myname myhost # як ви представитесь системі host1, коли вона подзвонить called-login uuhost1 system host2 myname myhost called-login uuhost2 system host3 myname myhost called-login uuhost3 ======= sysin ====== 1.8 sysout
В цьому файлі зручно прописати ті системи, на які ви самі збираєтесь дзвонити. В даному випадку у нас тільки одна така система - ваш провайдер. ======= sysout ====== call-login * call-password * local-send / local-receive / port port1 chat-timeout 90 protocol g time any # дзвонити в будь-який час. А взагалі час можна задавати дуже гнучко. debug 1 system provider chat ogin: \L word: \P # берется з файлу call phone 111111 alternate # так робиться перебір номерів phone 222222 alternate phone 333333 ======= sysout ====== Коректність настройки можна перевірить, запустив uuchk. Щоб періодично дзвонити своєму провайдеру за поштою, вставте рядок в /etc/crontab 0 * * * * uucp /usr/libexec/uucp/uucico -S provider Hастройка sendmail2.1 Hастройка sendmail.cfHеобхідно створити новий sendmail.cf, котрий буде знати про uucp. Для його створення возьмемо такий файл-прототип: ====== uucp.mc ========= divert(-1) include(`../m4/cf.m4') VERSIONID(`@(#)uucp.mc 1.01') OSTYPE(bsd4.4)dnl MAILER(local)dnl MAILER(smtp)dnl MAILER(uucp)dnl FEATURE(nodns)dnl FEATURE(nocanonify)dnl FEATURE(mailertable)dnl FEATURE(uucpdomain)dnl define(`SMART_HOST', `uucp-dom:provider')dnl define(`confCOPY_ERRORS_TO', `postmaster')dnl ====== uucp.mc ========= Після чого необхідно виконати команду m4 uucp.mc > /etc/sendmail.cf Увага! MAILER(smtp) прибирати не можна, навіть, якщо ніякого smtp немає. Він все рівно потрібен для того, щоб працював мейлер uucp-dom. Це мейлер, котрий знає про доменну форму імен - для того, щоби адреса в листах не були в форматі uucp (через знаки оклику). 2.2 Hастройка mailertable
Маршрутзація uucp пошти відбувається згідно правилам, описаним в mailertable. Візьмемо в якості шаблону такий файл ======= /etc/mailertable ====== uucp-dom:provider ======= /etc/mailertable ====== Де provider - це uucp-ім'я системи провайдера (система повинна бути описана в /etc/uucp/sysout) Точка тут виступає в ролі символа підстановки і означає будь-яку кількість довільних символів. Якщо ви не є завершеною системою, то якщо роздаєте пошту комусь ще по uucp, то ваш mailertable може виглядати так: ======= /etc/mailertable ====== host1.your.domain.org uucp-dom:host1 host1.your.domain.org uucp-dom:host1 host2.your.domain.org uucp-dom:host2 host2.your.domain.org uucp-dom:host2 .host3.your.domain.org uucp-dom:host3 host3.your.domain.org uucp-dom:host3 uucp-dom:provider ======= /etc/mailertable ====== Окрема точка в кінці означає - все інше пересилати провайдеру, він сам розбереться. Зрозуміло, що мову в mailertable йде тільки про імена машин. Про користувачів він нічого не знає. Тобто, записи host1.your.domain.org uucp-dom:host1 host1.your.domain.org uucp-dom:host1 означають тільки те, що пошта для машин host1.your.domain.org foo.host1.your.domain.org bar.host1.your.domain.org foo.bar.host1.your.domain.org і т.п. буде направляться через uucp-систему host1. Залишилось тільки додати, що sendmail використовує mailertable у вигляді database map, тому залишилось зробити наступне: makemap hash /etc/mailertable.db 2.3 Hастройка uudomainЯк уже вказувалось раніше, доменне ім'я системи (hostname) і uucp-ім'я цієї ж самої системи абсолютно не зобов'язані співпадати. Тому в файлі uudomain налаштовується відповідність доменного імені хост і його uucp-імені. В цьому файлі повинні бути описані всі системи, з якими у вас є прямий зв'язок по uucp. Користуючись нашим прикладом, ваш uudomain буде виглядати приблизно так: ======= /etc/uudomain ====== host1 host1.your.domain.org host2 host2.your.domain.org host3 host3.your.domain.org provider mail.provider.ru ======= /etc/uudomain ====== uudomain, так же як і mailertable, має бути у вигляді database map, тому makemap hash /etc/uudomain.db Тепер залишилось тільки kill -1 `cat /var/run/sendmail.pid` 2.4 Hастройка uucp-сервераВважається, що ваша машина є поштовим сервером, на який ваші клієнти (host1.your.domain.org, host2.your.domain.org, host3.your.domain.org) будуть ходити за поштою. Ходити за поштою вони можуть по телефону або по IP. Бити сервером uucp дуже просто - коли клієнт подзвонить модемом або зайде на 540 порт, йому необхідно підсунути uucico в якості shell. Краще підсовувати uucico з ключом -l, тоді воно буде само питати пароль, а брати паролі буде з власного файлу з паролями (/etc/uucp/passwd) 2.5 Розсилання пошти користувачами Команда mail - відправка і отримання пошти Синтаксис mail [-iInv] [-s Коментар ] [-c адреса пересилки] [-b копія адрес пересилки] адресат [-опції команди SENDMAIL ...] mail [-iInNv] -f [ім'я користувача] mail [-iInNv] [-u раніше заданий киристувач] Mail - це побудована на платформі UNIX система з вбудованим інтерфейсом для обробки поштових повідомлень. Опції команди MAIL -v - режим, коли всі деталі пересилки або прийому повідомлень виводяться на екран -i - режим ігнорування сигналів збросу, що поступають зі сторони телефонної лінії або сети -N вивід на екран заголовків повідомлень при роботі з конкретною папкою, в якій вони зберігаються -s вказувати мета листа -c, -b посилати копії листа списку користувачів, вказаних через кому В самому початку mail виконає команди, які прописані в файлах usr/share/misc/mail.rc, /usr/local/etc/mail.rc і /etc/mail.rc. Потім буде запущений файл ~/.mailrc. Mail перевірить наявність нових повідомлень в поштовій скринці користувача, а також перевірить наявність уже отриманих повідомлень в поштову скриньку. Якщо в командному рядку була вказана команда mail без параметрів, система увійде в режим роботи з поштовими повідомленнями. При цьому командний рядок буде мати вигляд & Нижче наведені команди для роботи в цьому режимі t <список номерів поштових повідомлень через пробіл> вивести на екран текст повідомлення n перейти до виводу на екран наступного повідомлення e <список номерів поштових повідомлень через пробіл> відредагувати повідомлення f < список номерів поштових повідомлень через пробіл > вивести на екран заголовки повідомлень d < список номерів поштових повідомлень через пробіл > відмітити повідомлення для подальшого знищення при виході з режиму роботи з поштою s < список номерів поштових повідомлень через пробіл > приєднати до повідомлення файл u < список номерів поштових повідомлень через пробіл> зняти помітку з повідомлень, які або помічені для видалення при виході з системи R < список номерів поштових повідомлень через пробіл > відповісти на повідомлення тому, хто його прислав r < список номерів поштових повідомлень через пробіл > відповісти всім на повідомлення m <список користувачів через пробіл > надіслати поштове повідомлення всім вказаним в списку користувачам Вийти з системи роботи з поштовими повідомленнями Завдання на роботуЗайти до мережі і переглянути поштове повідомлення.Вивести декілька поштових повідомлень, а також заголовки усіх повідомлень.Написати і відправити лист іншому користувачеві.Вивести на екран та відредагувати текст повідомлення.Знищити написане повідомлення.
|