Отладка Ваших настроек PPP По


Если настройка PPP не работает, при просмотре этого log-файла Вы должны получить подсказку, что что-то идет неправильно. Если это не помогает, то Вы можете включить особо подробный вывод, используя опцию отладки debug. После этого протокол для pppd будет содержать все управляющие блоки, посланные или полученные syslog. Все сообщения будут идти через daemon.

В заключение, наиболее радикальная возможность: включение отладки на уровне ядра, вызовом pppd с опцией kdebug. Она сопровождается числовым аргументом, который является поразрядным ИЛИ следующих значений: 1 для общих сообщении отладки, 2 для печати содержания всей входящей HDLC-структуры, и 4 для того, чтобы сделать драйвер принтера выходящим на HDLC-структуру. Для того, чтобы захватить сообщения ядра, Вы должны также запустить syslogd, который будет читать файл /proc/kmsg или klogd daemon. Каждый из них направляет отладку ядра в syslog kernel.



Отмена статьи


Чтобы отменить статью, скомандуйте:

ctlinnd cancel Message-Id

Отмена статьи

Чтобы отменить статью, скомандуйте:

ctlinnd cancel Message-Id

Аргументы имеют смысл:

Message-ID

ID отменяемой статьи.

Эта команда удаляет определенную статью с сервера. Она не генерирует сообщение отмены статьи.





Отображение статуса поступления новостей


Для отображения статуса новостей скомандуйте:

ctlinnd feedinfo site

Отображение статуса поступления новостей

Для отображения статуса новостей скомандуйте:

ctlinnd feedinfo site

Аргументы имеют смысл:

site

Имя сайта (из файла newsfeeds), для которого Вы желаете отобразить состояние.



PAP против CHAP


PAP в основном работает как нормальная процедура входа в систему. Клиент опознает себя, посылая имя пользователя и пароль серверу, который сравнивает их с базой данных. Этот метод легко уязвим для посторонних наблюдателей, которые могут попытаться получить пароль, слушая последовательную линию.
PAP против CHAP

PAP в основном работает как нормальная процедура входа в систему. Клиент опознает себя, посылая имя пользователя и пароль серверу, который сравнивает их с базой данных. Этот метод легко уязвим для посторонних наблюдателей, которые могут попытаться получить пароль, слушая последовательную линию.

CHAP не имеет этих недостатков. С CHAP аутенфикатор (сервер) посылает беспорядочно сгенерированную "challenge"-строку клиенту, наряду с именем хоста. Клиент использует имя хоста (hostname) для того, чтобы искать соответствующий шифр, объединяет его с challenge и шифрует строку, используя однонаправленную hash-функцию. Результат будет возвращен на сервер наряду с hostname клиента. Сервер теперь выполняет те же самые вычисления и опознает клиента.

Другая особенность CHAP то, что он не требует опознания клиента для опознания самого себя при запуске, но посылает challenge в определенные промежутки времени, чтобы удостовериться, не был ли клиент заменен злоумышленником, например, переключив телефонные линии.

Пакет pppd хранит секретные ключи для CHAP и PAP в двух отдельных файлах, называемых соответственно /etc/ppp/pap-secrets и /etc/ppp/chap-secrets. Записывая удаленный хост в один или другой файл, Вы имеете хороший контроль над CHAP или PAP.

По умолчанию pppd не требует установления подлинности удаленной машины, но соглашается опознавать себя, когда она запросит опознание. Так как CHAP намного более совершенен, чем PAP, pppd пробует использовать его всякий раз, когда это возможно. Если удаленная машина этого не поддерживает, или если pppd не может найти CHAP-шифр для удаленной системы в файле chap-secrets, он возвращается к PAP. Если он не имеет также и PAP-шифра, то связь закроется.

Это поведение может быть изменено. Например, когда дается ключевое слово auth, pppd требует, чтобы другой конец линии опознал сам себя. pppd согласится использовать CHAP или PAP для этого, как только будет имеет соответствующий шифр в базе данных CHAP или PAP соответственно. Имеются другие опции, чтобы включить или выключить частный опознавательный протокол, но я не буду описывать их здесь.

Если все системы, с которыми Вы работаете по PPP соглашаются опознавать самих себя, Вы должны поместить опцию auth в глобальный файл /etc/ppp/options и определить пароли для каждой системы в файле chap-secrets. Если система не поддерживает CHAP, добавьте запись к файлу pap-secrets. Таким образом, Вы можете удостовериться в том, что никакая неопознанная система не соединяется с Вашим хостом.

Следующие два раздела обсуждают два PPP файла шифров: pap-secrets и chap-secrets. Они размещены в /etc/ppp и содержат тройки клиентов, серверов и паролей, необязательно сопровождаемых списком адресов IP. Интерпретация клиента и сервера отлична для CHAP и PAP.



Параметры Они определяют к каким пакетам применяется правило



Параметры

Они определяют, к каким пакетам применяется правило:

-P protocol

TCP, UDP, ICMP или все. Например:

-P tcp

-S address[/mask] [port]

Исходный IP-адрес пакета. Если сетевая маска не задана, она принимается как “/32”. Можно дополнительно задать порты, к которым относится данное правило. Необходимо также задать протокол, используя параметр -P. Если порт или несколько портов не заданы, предполагаются все. Порты могут быть заданы именами, используя файл /etc/services. В случае протокола ICMP поле порта используется, чтобы задавать типы пакетов ICMP. Несколько портов описываются так: lowport:highport. Например:

-S 172.29.16.1/24 ftp:ftp-data

-D address[/mask] [port]

Указывает IP-адрес назначения. Во всем остальном аналогичен предыдущему параметру. Например:

-D 172.29.16.1/24 smtp

-V address

Указывает адрес сетевого интерфейса, на котором пакет получен (-I) или послан (-O). Это позволяет Вам создавать правила, которые применяются только к некоторым сетевым интерфейсам на Вашей машине. Например:

-V 172.29.16.1

-W name

Задает имя сетевого интерфейса. Этот параметр работает таким же образом, как параметр -V, но задавать нужно имя устройства вместо адреса. Например:

-W ppp0



Пассивные коллекции данных доступа


Вы должны сначала направить IP forwarding на Вашей Linux-машине так, чтобы она не пробовала маршрутизировать пакеты, которые получает, иначе повесите всю сеть. В ядрах 2.0.36 и 2.2 это делается так:

# echo 0 >/proc/sys/net/ipv4/ip_forward

Вы должны включить режим promiscuous на интерфейсе Ethernet командой ifconfig. Теперь Вы можете устанавливать правила учета, которые позволят собирать информацию относительно движения пакетов в локальной сети без включения Вашей Linux-машины в маршрут вообще. Заметьте, что это не следует делать, если Ваша Linux-машина служит как маршрутизатор. Если Вы отключаете IP forwarding, она перестанет работать как маршрутизатор! Делайте это только на машине с одним физическим сетевым интерфейсом.



Перечень активных групп


Команда list active показывает каждую группу и данные о ней. Два числа в каждой строке вывода задают старший и младший номера статей в каждой группе. Программы работы с новостями на основании этих чисел узнают, сколько статей сейчас в группе. Последнее поле в выводе отображает флажки контроля: разрешено ли посылать статьи в груупу, является ли она модерируемой, и хранятся ли статьи на сервере на самом деле, или только данные о них. Подробно эти флажки описаны в главе 23. Рассмотрим пример:
Перечень активных групп

Команда list active показывает каждую группу и данные о ней. Два числа в каждой строке вывода задают старший и младший номера статей в каждой группе. Программы работы с новостями на основании этих чисел узнают, сколько статей сейчас в группе. Последнее поле в выводе отображает флажки контроля: разрешено ли посылать статьи в груупу, является ли она модерируемой, и хранятся ли статьи на сервере на самом деле, или только данные о них. Подробно эти флажки описаны в главе 23. Рассмотрим пример:

list active 215 Newsgroups in form "group high low flags". control 0000000000 0000000001 y junk 0000000003 0000000001 y alt.test 0000000000 0000000001 y .



Перечень новых статей


После установления связи с сервером программа чтения новостей обычно запрашивает перечень новых статей, которые поступили после последнего соединения с этим сервером. Это делается командой newnews. Три обязательных параметра должны быть заданы: имя группы или групп, чтобы сделать запрос, дата и время, относительно которых вносить в список. Дата и время определены как числа с шестью цифрами в формате; yymmdd и hhmmss:
Перечень новых статей

После установления связи с сервером программа чтения новостей обычно запрашивает перечень новых статей, которые поступили после последнего соединения с этим сервером. Это делается командой newnews. Три обязательных параметра должны быть заданы: имя группы или групп, чтобы сделать запрос, дата и время, относительно которых вносить в список. Дата и время определены как числа с шестью цифрами в формате; yymmdd и hhmmss:

newnews junk 990101 000000 230 New news follows .



Перечень статей в группе


Чтобы адресовать статьи newsreader должен знать, какие числа представляют активные статьи. Команда listgroup предлагает список активных чисел статей в текущей или явно заданной группе, если имя группы указано дополнительным параметром:
Перечень статей в группе

Чтобы адресовать статьи newsreader должен знать, какие числа представляют активные статьи. Команда listgroup предлагает список активных чисел статей в текущей или явно заданной группе, если имя группы указано дополнительным параметром:

listgroup junk 211 Article list follows 1 2 3 .



Передача файлов


Taylor UUCP также позволяет описывать передачу файлов в подробностях. Вы можете запретить любой обмен с определенной системой. Только установите request в no, и удаленная система не сможет ни искать, ни читать, ни посылать Вашей никаких файлов вообще. Аналогично Вы можете запретить пользователям Вашей системы пересылку файлов в систему или из нее, установив transfer в no. По умолчанию любая пересылка им разрешается.
Передача файлов

Taylor UUCP также позволяет описывать передачу файлов в подробностях. Вы можете запретить любой обмен с определенной системой. Только установите request в no, и удаленная система не сможет ни искать, ни читать, ни посылать Вашей никаких файлов вообще. Аналогично Вы можете запретить пользователям Вашей системы пересылку файлов в систему или из нее, установив transfer в no. По умолчанию любая пересылка им разрешается.

Кроме того, Вы можете конфигурировать каталоги, из которых файлы могут быть скопированы. Обычно запрещают доступ с удаленных систем к определенным каталогам, но разрешают своим пользователям посылать файлы со своего исходного каталога. Обычно удаленным пользователям разрешается получить файлы только из общего каталога UUCP /var/spool/uucppublic. Это традиционное место, в котором хранятся публично доступные файлы. Очень похоже на FTP-сервис.

Taylor UUCP обеспечивает четыре различные команды конфигурирования каталогов для посылки и получения файлов: local-send определяет список каталогов, из которых пользователь может запросить файлы. local-receive задает список каталогов, в которые пользователь может просить UUCP записать файлы. remote-send и remote-receive, которые определяют то же самое для запросов в другую систему. Рассмотрим следующий пример:

system pablo ... local-send /home local-receive /home /receive remote-send !/incoming !/receive remote-receive /incoming

Команда local-send разрешает пользователям Вашего компьютера посылать любые файлы ниже /home и из общего каталога UUCP на систему pablo. Команда local-receive разрешает им получать файлы или в общедеступный каталог receive в uucppublic, или в любой общедоступный каталог ниже /home. Команда remote-send разрешает pablo запрашивать файлы из /var/spool/uucppublic или из любого общедоступного его подкаталога, кроме подкаталогов incoming и receive. Это сообщается uucico восклицательным знаком, поставленным перед именем каталога. Последняя строка разрешает pablo записать любые файлы в каталог incoming.

Одна из самых больших проблем при передаче файлов, используя UUCP, это то, что файлы записываются в обшедоступные каталоги. Это может соблазнить нзкоторых пользователей вмешаться в личные дела других пользователей. Однако, нет никакого способа решения этой проблемы, кроме отключения передач файлов по UUCP вообще.



Перенумерация группы


Для перенумерации группы используется команда:

ctlinnd renumber group

Перенумерация группы

Для перенумерации группы используется команда:

ctlinnd renumber group

Аргументы имеют смысл: group

Имя группы. Если параметр group определен как пустая строка, будут обработаны все группы.

Эта команда обновляет младшее число для указанной группы.



Пересылка (Forwarding)


UUCP обеспечивает механизм, благодаря которому другие системы могут выполнять передачу файлов от Вашего имени. Например, Ваша система имеет доступ через uucp к системе seci, но не имеет доступа к uchile. Тогда пусть seci получит для Вас файлы с uchile и перешлет Вам. Следующая команда именно это и делает:

$ uucp -r seci!uchile!/find-ls.gz /uchile.files.gz

Пересылка (Forwarding)

UUCP обеспечивает механизм, благодаря которому другие системы могут выполнять передачу файлов от Вашего имени. Например, Ваша система имеет доступ через uucp к системе seci, но не имеет доступа к uchile. Тогда пусть seci получит для Вас файлы с uchile и перешлет Вам. Следующая команда именно это и делает:

$ uucp -r seci!uchile!/find-ls.gz /uchile.files.gz

Эта методика прохождения работы через несколько систем называется пересылкой (forwarding). В вышеупомянутом примере причиной для использования пересылки могло быть то, что seci имеет UUCP-доступ к uchile, а Ваша машина нет. Однако, если Вы используете систему UUCP, ограничьте обслуживание пересылки некоторыми машинами, которым Вы доверяете, чтобы не ужасаться счету, если кто-нибудь решит скачать себе через Вас исходные тексты последней версии X11R6.

По умолчанию Taylor UUCP запрещает пересылку вообще. Чтобы дать возможность пересылки определенной системе, Вы можете использовать команду forward. Эта команда определяет список систем, которые могут воспользоваться пересылкой через Вашу. Например, администратор UUCP seci должен был добавить следующие строки к файлу sys, чтобы разрешить pablo запрос файлов из uchile:

# pablo system pablo ... forward uchile # uchile system uchile ... forward-to pablo

Строка forward-to для uchile необходима, чтобы любые полученные файлы фактически передались pablo. Иначе UUCP пропустит их. Этот пример разрешает uchile посылать файлы только pablo через seci: любой другой путь недопустим.

Чтобы разрешить пересылку любой системе, используйте специальное ключевое слово ANY (обязательно заглавные буквы).



Пересылка почты с вирутальных



Пересылка почты с вирутальных хостов на другие пункты назначения

Возможность sendmail под названием virtusertable предоставляет поддержку таблицы настройки виртуальных доменов. Таблица виртуальных пользователей отображает входящую почту, предназначенную для адресов user@host на другие адреса otheruser@otherhost. Можно рассматривать это как продвинутое свойство псевдонима почты, которое функционирует, используя не только имя пользователя, но и его домен.

Для включения поддержки virtusertable допишите в свой файл sendmail.mc:

FEATURE(virtusertable)

По умолчанию файл, содержащий правила трансляции почты, называется /etc/mail/virtusertable. Это можно поменять пернастройкой макроса, подробности в документации на sendmail, там много опций.

Формат таблицы очень прост. Левая сторона каждой строки содержит образец, представляющий первоначальный адрес. Правая сторона задает образец адреса, на который надо переслать пришедшую почту.

Типичный образец записи:

samiam@bovine.net colin sunny@bovine.net darkhorse@mystery.net @dairy.org mail@jhm.org @artist.org $1@red.firefly.com
В этом примере есть три виртуальных домена: bovine.net, dairy.org и artist.org.

Первая запись перешлет почту, посланную пользователю в виртуальном домене bovine.net локальному пользователю на данной машине. Вторая запись переназначает почту пользователю в другой домен. Обратите внимание, что первая и вторая записи работают с разными пользователями одного домена! Третья запись переназначает всю почту любого пользователя виртуального домена dairly.org на один адрес в другом домене. Наконец, четвертая запись переназначает всю почту пользователей в artist.org тем же самым пользователям, но уже в другом домене: например, julie@artists.org будет переназначена на julie@red.firefly.com.



Перезапуск счетчиков Счетчики


Команды ipfwadm и ipchains позволяют сделать это просто:

# ipfwadm -A -z
или:
# ipchains -Z
или:
# iptables -Z
Вы можете даже объединять вывод списка и обнуление, чтобы гарантировать что никакие данные учета не потеряны между этими действиями:
# ipfwadm -A -l -z
или:
# ipchains -L -Z
или:
# iptables -L -Z -v
Эти команды сначала отобразят все данные со счетчиков, затем немедленно обнулят счетчики и начнут учет сначала. Если Вы регулярно собираете статистику, имеет смысл написать скрипт с соответствующими командами и вызывать его через cron.



Перезапуск сервера новостей


Для перезапуска сервера новостей скомандуйте:

ctlinnd go reason

Перезапуск сервера новостей

Для перезапуска сервера новостей скомандуйте:

ctlinnd go reason

Аргументы имеют смысл:

reason

Задает сообщение. Если это пустая строка, сервер будет работать в обычном режиме. Если (текстовое сообщение) причина задана, будут работать только те функции, которые были заблокированы с соответствующим сообщением.

Эта команда используется для перезапуска после команд throttle, pause или reject.



Поддержка Caldera


Caldera основана Ray Noorda, бывшим CEO Novell. Поддержка Caldera NetWare коммерческое изделие. Caldera обеспечивает поддержку NetWare как компонент собственного дистрибутива Linux (называется Caldera OpenLinux). Это идеальный путь введения Linux в среды, которые требуют коммерческую поддержку и интеграцию в существующие или новые Novell-сети.
Поддержка Caldera

Caldera основана Ray Noorda, бывшим CEO Novell. Поддержка Caldera NetWare коммерческое изделие. Caldera обеспечивает поддержку NetWare как компонент собственного дистрибутива Linux (называется Caldera OpenLinux). Это идеальный путь введения Linux в среды, которые требуют коммерческую поддержку и интеграцию в существующие или новые Novell-сети.

Caldera NetWare полностью запатентована Novell, обеспечивая уверенность, что программы двух компаний будут совместимы. Две исключительных ситуации в этой уверенности: "pure IP" для клиента и сервер NDS: ни один из этих сервисов пока недоступен в данном дистрибутиве. NetWare клиент и сервер доступны вместе. Набор инструментальных средств управления также входит в поставку. Подробности есть на web-сайте Caldera.



Поддержка Linux


Есть много способов он-лайновой поддержки. Существует немало добровольцев, готовых ответить на вопросы, когда они общаются в интерактивных сервисах сети. Несколько фирм зарабатывают именно такой поддержкой.
Поддержка Linux

Есть много способов он-лайновой поддержки. Существует немало добровольцев, готовых ответить на вопросы, когда они общаются в интерактивных сервисах сети. Несколько фирм зарабатывают именно такой поддержкой.

OpenProjects IRC Network представляет собой IRC-сеть, посвященную полностью Open Projects: Open Source и Open Hardware. Некоторые из каналов разработаны, чтобы обеспечить интерактивную поддержку Linux.

Имеется ряд активных каналов на OpenProjects IRC network, где Вы всегда найдете пользователей. Вы можете использовать этот сервис программой-клиентом IRC, например, irc-II, для связи с сервером irc.openprojects.org:6667. Соединитесь для начала с общим каналом #linpeople.



Подписка на обновления Информация


O'Reilly & Associates, Inc.
101 Morris Street
Sebastopol, CA 95472
1-800-998-9938 (in the U.S. or Canada)
1-707-829-0515 (international or local)
1-707-829-0104 (FAX)

Вы можете посылать нам сообщения по e-mail. Чтобы запросить каталог или присоединиться к списку рассылки, пошлите письмо на адрес info@oreilly.com

Чтобы уточнить технические вопросы или дать комментарий относительно книги, пошлите e-mail на адрес bookquestions@oreilly.com

Есть и web-сайт этой книги с подробным описанием, примерами и планами на будущее. Он находится по адресу:

http://www.oreilly.com/catalog/linag2

Наконец, за полной инофрмацией о разных книгах издательства O'Reilly обращаейтесь на его web-сайт:

http://www.oreilly.com



Поле типа содержания тела почтового сообщения (Content-Type)


Поле типа используется для описания типа данных, которые содержатся в теле почтового сообщения. Это поле сообщает программе чтения почты какого сорта преобразования необходимы для того, чтобы сообщение правильно проинтерпретировать. Эта же информация используется и программой рассылки при кодировании/декодировании почты. Стандарт MIME определяет семь типов данных, которые можно передавать в теле письма: текст (text); смешанный тип (multipart); почтовое сообщение (message); графический образ (image); аудио информация (audio); фильм или видео (video); приложение (application). Общая форма записи поля выглядит в записи Бекуса-Наура как:

Content-Type:= type "/" subtype *[";" parameter] type := "application" / "audio" / "image" / "message" / "multipart" / "text" / "video" / x-token x-token := <Два символа "X-", за которыми без пробела следует последовательность любых символов> subtype := token parameter:= attribute "=" value attribute:= token value := token / quoted-string token := 1*<любой символ кроме пробела и управляющего символа, или tspecials> tspecials:= "(" /")" / "<" / ">" / "@" ; Обязательно / "," / ";" / ":" / "\" / <"> ; должны быть, / "/" / "[" / "]" / "?" / "." ; заключены в / "=" ; кавычки.

Остановимся подробнее на каждом из типов, разрешенных стандартом MIME.

Text. Этот тип указывает на то, что в теле сообщения содержится текст. Основным подтипом типа "text" является "plain", что обозначает так называемый планарный текст. Понятие планарного текста появилось в связи с тем, что существует еще размеченный текст, т.е. текст со встроенными в него символами управления отображением, и гипертекст, т.е. текст, который можно просматривать не последовательно, а произвольно, следуя гипертекстовым ссылкам. Для обозначения размеченного текста используют подтип "richtext", а для обозначения гипертекста подтип "html". Вообще говоря, "html" - это специальный вид размеченного текста, который используется для представления гипертекстовой информации в системе World Wide Web, которая получила в последнее время широкое распространение в Internet. Понятие размеченного текста требует более подробного обсуждения, так как его передача и интерпретация являются одной из причин появления стандарта MIME.

"Richtext" определяет текст со встроенными в него специальными управляющими последовательностями, которые в соответствии со стандартом языка разметки документов SGML называются тагами. Таги представляют из себя последовательность символов типа "<строка-символов>". "Строка-символов" определяет управляющее действие. Таги делятся на таги начала элемента текста ("<......>") и таги конца элемента текста ("</......>"). В качестве примера такой разметки можно привести следующий фрагмент текста:

<bold>Now</bold> is the time for <italic>all</italic> good men <smaller>(and <lt>women>)</smaller> to <ignoreme></ignoreme> come to the aid of their <nl>

В этом фрагменте <bold> означает выделение "жирным" шрифтом, <italic> - курсив, <smaller> - мелкий шрифт, <lt> - знак "<", игнорирование обозначено как <ignoreme>, новая строка как <nl>.

Специальный тип разметки задается подтипом "html". Это так называемый гипертекст. Разметка гипертекста строится по тому же принципу как и в тексте типа "richtext". Однако применяются таги, позволяющие описать гипертекстовые ссылки. К таким тагам относятся "<A HREF="......">.....</A>", <IMG ....>, <A NAME="...."></A>. Таг "<A HREF="......"> .......</A> определяет следующий фрагмент текста, который будет просматриваться. При этом текст между тагом начала и тагом конца будет выделен в программе просмотра цветом или другим способом и используется как контекстная гипертекстовая ссылка. Таг <IMG .....> задет встроенный в текст документа графический образ. В некотором смысле этот таг аналогичен "multipart", который разрешает комбинировать сообщение из нескольких фрагментов разного типа. Таг <A NAME...> определяет "якорь", т.е. место внутри документа, на которое можно сослаться как на метку. В качестве примера такой разметки текста можно привести следующий фрагмент:

Это пример разметки документа в формате HTML. <H1>Это заголовок документа</H1> <P> - Это параграф. <A HREF="test.html#mark1"> Это пример гипертекстовой ссылки.</A> <IMG SRC="test.gif" ALIGN=Bottom> Это встроенный image. <A NAME="mark1"></A> Это "якорь" внутри текста документа.

"Multipart". Этот тип содержания тела почтового сообщения определяет смешанный документ. Смешанный документ может состоять из фрагментов данных разного типа. Данный тип имеет ряд подтипов.

Подтип "mixed" - задает сообщение, состоящее из нескольких фрагментов, которые разделены между собой границей, задаваемой в качестве параметра подтипа. Приведем простой пример:

From: Nathaniel Borenstein <nsb@bellcore.com> To: Ned Freed <ned@innosoft.com> Subject: Sample message MIME-Version: 1.0 Content-type: multipart/mixed; boundary="simple boundary" This is the preamble. It is to be ignored, though it is a handy place for mail composers to include an explanatory note to non-MIME compliant readers. --simple boundary This is implicitly typed plain ASCII text. It does NOT end with a linebreak. --simple boundary Content-type: text/plain; charset=us-ascii This is explicitly typed plain ASCII text. It DOES end with a linebreak. --simple boundary-- This is the epilogue. It is also to be ignored.

В данном примере поле "Content-Type" определяет подтип "mixed" и границу между фрагментами, как строку "--simple boundary--". В начале каждого фрагмента может быть задана своя строка с полем "Content-Type". Как видно из примера, существует два фрагмента, которые не отображаются: преамбула и эпилог, в которые можно поместить комментарии.

Другим подтипом может быть подтип "alternative". Данный подтип позволяет организовать вариабельный просмотр почтового сообщения в зависимости от типа программы просмотра. Приведем пример:

From: Nathaniel Borenstein <nsb@bellcore.com> To: Ned Freed <ned@innosoft.com> Subject: Formatted text mail MIME-Version: 1.0 Content-Type: multipart/alternative; boundary=boundary42 --boundary42 1 фрагмент Content-Type: text/plain; charset=us-ascii ...plain text version of message goes here.... --boundary42 2 фрагмент Content-Type: text/richtext .... richtext version of same message goes here ... --boundary42 3 фрагмент Content-Type: text/x-whatever .... fanciest formatted version of same message goes here ... --boundary42--

В этом примере для работы с планарным текстом при использовании алфавитно-цифровых программ просмотра предназначен первый фрагмент текста. Для просмотра размеченного текста используется второй фрагмент, для специальной программы просмотра может быть подготовлен специальный вариант (фрагмент 3).

Подтип "digest" предназначен для многоцелевого почтового сообщения, когда различным частям хотят приписать более детальную информацию, чем просто тип:

From: Moderator-Address MIME-Version: 1.0 Subject: Internet Digest, volume 42 Content-Type: multipart/digest; boundary="---- next message ----" ------ next message ---- From: someone-else Subject: my opinion ...body goes here ... ------ next message ---- From: someone-else-again Subject: my different opinion ... another body goes here... ------ next message ------

Приведенный пример показывает как можно воспользоваться подтипом "digest" для рассылки почты разным пользователям и по-разному поводу, используя поля "From:" и "Subject" в качестве частных заголовков.

Подтип "parallel" предназначен для составления такого почтового сообщения, части которого должны отображаться одновременно, что предполагает запуск сразу нескольких программ просмотра. Синтаксис такого сообщения аналогичен рассмотренным выше.

Тип "message". Данный тип предназначен для работы с обычными почтовыми сообщениями, которые однако не могут быть переданы по почте по разного рода причинам. Эти причины объясняются подтипами данного типа.

Подтип "partial" предназначен для передачи одного большого сообщения по частям для последующей автоматической сборки у получателя. Приведем пример передачи аудио сообщения разбитого на части:

X-Weird-Header-1: Foo From: Bill@host.com To: joe@otherhost.com Subject: Audio mail Message-ID: id1@host.com MIME-Version: 1.0 Content-type: message/partial; id="ABC@host.com"; number=1; total=2 X-Weird-Header-1: Bar X-Weird-Header-2: Hello Message-ID: anotherid@foo.com Content-type: audio/basic Content-transfer-encoding: base64 ... first half of encoded audio data goes here... and the second half might look something like this: From: Bill@host.com To: joe@otherhost.com Subject: Audio mail MIME-Version: 1.0 Message-ID: id2@host.com Content-type: message/partial; id="ABC@host.com"; number=2; total=2 ... second half of encoded audio data goes here...

Атрибуты подтипа определяют идентификатор сообщения (id), номер порции (number) и общее число порций (total). Следует обратить внимание на то, что каждая часть имеет свое поле "Content-Type". Это означает, что все сообщение может состоять из частей разных типов.

Другим подтипом является "External-Body", который позволяет ссылаться на внешние, относительно сообщения, информационные источники. Этот подтип похож на гипертекстовую ссылку из типа "text". Приведем конкретный пример:

From: Whomever Subject: whatever MIME-Version: 1.0 Message-ID: id1@host.com Content-Type: multipart/alternative; boundary=42 --42 Content-Type: message/external-body; name="BodyFormats.ps"; site="thumper.bellcore.com"; access-type=ANON-FTP; directory="pub"; mode="image"; expiration="Fri, 14 Jun 1991 19:13:14 -0400 (EDT)" Content-type: application/postscript --42 Content-Type: message/external-body; name="/u/nsb/writing/rfcs/RFC-XXXX.ps"; site="thumper.bellcore.com"; access-type=AFS expiration="Fri, 14 Jun 1991 19:13:14 -0400 (EDT)" Content-type: application/postscript --42 Content-Type: message/external-body; access-type=mail-server server="listserv@bogus.bitnet"; expiration="Fri, 14 Jun 1991 19:13:14 -0400 (EDT)" Content-type: application/postscript get rfc-xxxx doc --42--

В данном примере приведено использование "External-Body" и "multipart/alternative". Все сообщение разбито на несколько фрагментов. В каждом из фрагментов находится ссылка на внешний файл. Реально тела почтового сообщения нет (границы программами просмотра не отображаются). Однако если программа просмотра способна работать с внешними протоколами, то можно ссылки разрешить автоматически, запуская соответствующий сервис.

Стандартным подтипом типа "message" является "rfc822". Данный подтип определяет сообщения стандарта RFC822.

Типы описания нетекстовой информации. Таких типов имеется четыре:

"image" для описания графических образов. Наиболее часто используются файлы форматов GIF и JPEG. "audio" для описания аудио информации. Для воспроизведения сообщения данного типа требуется специальное оборудование. "video" для передачи фильмов. Наиболее популярным является формат MPEG. "application" для передачи данных любого другого формата, обычно используется для передачи двоичных данных для последующего промежуточного преобразования. Так если на машине стоит видео-карта с 512Kb памяти, а графика подготовлена в 256 цветах, то сначала ее следует преобразовать и здесь может помочь тип "application". Основной подтип данного типа - "octet-stream", но существуют "ODA" и "Postscript".

Назначение данных типов ясно из названия - обозначение данных для последующей обработки как данных в форматах, определяемых подтипом.

Поле типа кодирования почтового сообщения (Content-Transfer-Encoding). Многие данные передаются по почте в их исходном виде. Это могут быть 7bit символы, 8bit символы, 64base символы и т.п. Однако при работе в разнородных почтовых средах необходимо определить механизм их представления в стандартном виде - US-ASCII. Для этого существуют процедуры кодирования такого сорта данных. Наиболее широко применяемая - uuencode. Для того, чтобы при получении данные были бы правильно распакованы и введено в стандарт поле "Сontent-Transfer-Encoding". Синтаксис этого поля следующий:

Content-Transfer-Encoding:= "BASE64" / "QUOTED-PRINTABLE" / "8BIT" / "7BIT" / "BINARY" / x-token

Каждая из альтернатив применяется в своем подходящем случае. Альтернативы "8bit", "7bit", "BINARY" реально никакого преобразования не требуют, так как почта передается байтами и SMTP не делает различия между ними. Однако они введены для строгости описания типов. "BASE64" обычно используется в связке с типом "text/ISO-8859-1", "x-token" позволяет пользователю описать свою процедуру преобразования.

Дополнительные необязательные поля. Как уже говорилось ранее, стандарт определяет еще два дополнительных поля: "Content-ID" и "Content-Description". Первое поле определяет уникальный идентификатор содержания, а второе служит для комментария содержания. Ни то, ни другое программами просмотра обычно не отображаются.

В заключении обсуждения стандарта MIME комплексный пример без комментариев:

MIME-Version: 1.0 From: Nathaniel Borenstein <nsb@bellcore.com> Subject: A multipart example Content-Type: multipart/mixed; boundary=unique-boundary-1 This is the preamble area of a multipart message. Mail readers that understand multipart format should ignore this preamble. If you are reading this text, you might want to consider changing to a mail reader that understands how to properly display multipart messages. --unique-boundary-1 ...Some text appears here... [Note that the preceding blank line means no header fields were given and this is text, with charset US ASCII. It could have been done with explicit typing as in the next part.] --unique-boundary-1 Content-type: text/plain; charset=US-ASCII This could have been part of the previous part, but illustrates explicit versus implicit typing of body parts. --unique-boundary-1 Content-Type: multipart/parallel; boundary=unique-boundary-2 --unique-boundary-2 Content-Type: audio/basic Content-Transfer-Encoding: base64 ... base64-encoded 8000 Hz single-channel u-law-format audio data goes here.... --unique-boundary-2 Content-Type: image/gif Content-Transfer-Encoding: Base64 ... base64-encoded image data goes here.... --unique-boundary-2-- --unique-boundary-1 Content-type: text/richtext This is <bold><italic>richtext.</italic></bold> <nl><nl>Isn't it <bigger><bigger>cool?</bigger></bigger> --unique-boundary-1 Content-Type: message/rfc822 From: (name in US-ASCII) Subject: (subject in US-ASCII) Content-Type: Text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: Quoted-printable ... Additional text in ISO-8859-1 goes here ... --unique-boundary-1--

Подводя итоги обсуждения, еще раз следует отметить, что стандарт MIME позволяет расширить область применения электронной почты, обеспечить доступ к другим информационным ресурсам сети в стандартных форматах.

Полезные макросы


sendmail использует ряд стандартных макросов. Наиболее полезные из них применительно к написанию правил:
Полезные макросы

sendmail использует ряд стандартных макросов. Наиболее полезные из них применительно к написанию правил:

$j

Полное доменное имя хоста.

$w

Компонент hostname из записи FQDN.

$m

Компонент domain name записи FQDN.

Эти макросы можно включать в правила. Наша конфигурация использует макрос $m.



Получение Linux


Единого дистрибутива Linux нет. Вместо него существует множество разных. Из коммерческих можно назвать Debian, RedHat, Caldera, Corel, SuSE и Slackware. Каждый такой полный дистрибутив включает полную систему: ядро, основные утилиты, библиотеки, файлы поддержки и много прикладных программ. Разница как раз именно в наборе этих программ.
Получение Linux

Единого дистрибутива Linux нет. Вместо него существует множество разных. Из коммерческих можно назвать Debian, RedHat, Caldera, Corel, SuSE и Slackware. Каждый такой полный дистрибутив включает полную систему: ядро, основные утилиты, библиотеки, файлы поддержки и много прикладных программ. Разница как раз именно в наборе этих программ.

Кроме того, есть мини-дистрибутивы, предназначенные для какой-то конкретной задачи, например, организации роутера. Такие часто заявляются как "Linux на одной дискете". Много ссылок можно найти на http://www.linuxlinks.com.

Дистрибутивы Linux можно скачать с большого числа сайтов по всему миру. Каждый уважающий себя дистрибутив имеет свои FTP и web-сайты. Вот данные для наиболее крупных и популярных: Caldera

http://www.caldera.com ftp://ftp.caldera.com

Corel

http://www.corel.com ftp://ftp.corel.com

Debian

http://www.debian.org ftp://ftp.debian.org

RedHat

http://www.redhat.com ftp://ftp.redhat.com

Slackware

http://www.slackware.com ftp://ftp.slackware.com

SuSE

http://www.suse.com ftp://ftp.suse.com

Многие популярные FTP-архивы также зеркалируют дистрибутивы Linux. Наиболее известны в этом плане:

metalab.unc.edu:/pub/Linux/distributions
ftp.funet.fi:/pub/Linux/mirrors
tsx-11.mit.edu:/pub/linux/distributions
mirror.aarnet.edu.au:/pub/linux/distributions

Многие современные дистрибутивы поддерживают установку прямо через Internet. Это удобно при наличии быстрого канала или обновлении пакетов.

Linux можно купить на CD-ROM в комплекте с богатым набором программ. Многие продавцы предлагают несколько дистрибутивов на разных дисках. В России есть еще традиция комплектовать некоторые книги по этой ОС такими дисками. Это идеальное решение для установки: не надо долго качать из сети.



Получение списка групп


Команда list выводит список групп с их краткими описаниями:
Получение списка групп

Команда list выводит список групп с их краткими описаниями:

list newsgroups 215 Descriptions in form "group description". control News server internal group junk News server internal group local.general General local stuff local.test Local test group .



Получение только тела статьи


Если, с другой стороны, пользователь решает, что он хочет читать статью, newsreader нуждается в способе попросить выслать ему тело статьи. Команда body используется для этой цели. Это работает аналогично команде head, за исключением того, что будет возвращено только тело статьи:
Получение только тела статьи

Если, с другой стороны, пользователь решает, что он хочет читать статью, newsreader нуждается в способе попросить выслать ему тело статьи. Команда body используется для этой цели. Это работает аналогично команде head, за исключением того, что будет возвращено только тело статьи:

body 2 222 2 body This is another test message, please feel free to ignore it too. .



Получение только заголовка статьи


Пользователь должен иметь некоторую информацию относительно статьи прежде, чем он сможет решить желает ли он читать ее. Я упомянул ранее, что некоторые команды позволяют передавать заголовок и тело статьи отдельно. Команда head используется, чтобы запросить этот режим. Сервер передает только заголовок определенной статьи. Если пользователь не хочет читать эту статью, он не потратит впустую время и трафик.
Получение только заголовка статьи

Пользователь должен иметь некоторую информацию относительно статьи прежде, чем он сможет решить желает ли он читать ее. Я упомянул ранее, что некоторые команды позволяют передавать заголовок и тело статьи отдельно. Команда head используется, чтобы запросить этот режим. Сервер передает только заголовок определенной статьи. Если пользователь не хочет читать эту статью, он не потратит впустую время и трафик.

Статьи могут быть определены, используя любой их номер (из вывода команды listgroup) или их message id:

head 2 221 2 head Path: news.vbrew.com!not-for-mail From: terry@richard.geek.org.au Newsgroups: junk Subject: test message number 2 Date: 27 Apr 1999 21:51:50 GMT Organization: The Virtual brewery Lines: 2 Message-ID: NNTP-Posting-Host: localhost X-Server-Date: 27 Apr 1999 21:51:50 GMT Body: Xref: news.vbrew.com junk:2 .


Последовательное оборудование


Хотя аппаратные средства handshake необязательны, но очень полезны. Они позволяют любой из двух машин сигнализировать о готовности получить данные или о том, что другая машина должна подождать, пока приемник не обработает поступающие данные. Линии, используемые для этого, названы "Clear to Send" (CTS) и "Ready to Send" (RTS), соответственно. Это объясняет второе название handshake, а именно, "RTS/CTS". Другой тип handshake назван "XON/XOFF". Он использует два назначенных символа, традиционно Ctrl-S и Ctrl-Q, чтобы сообщать удаленной машине, что она должна остановить и продолжить передавать данные соответственно. Эти символы при передаче двоичных данных могут вызывать хаос на линии, поскольку они могут быть не управляющими, а частью передаваемых данных. Аппаратный handshake рекомендуется использовать всегда, при наличии такой возможности.

В PC интерфейс RS-232 обычно управляется чипом UART, полученным из чипа 16450 или более новой его версии NSC 16550A. Некоторые марки (особенно внутренних модемов, оборудованных набором чипов Rockwell) используют другие чипы, которые были запрограммированы, чтобы вести себя так же, как 16550.

Главное различие между 16450 и 16550 то, что последний имеет FIFO-буфер размером 16 байт в то время как первый только 1 байт. Это делает чипы серии 16450 подходящими для скорости в 9600, в то время как для больших скоростей требуются чипы, совместимые с 16550. Кроме этих чипов Linux также поддерживает чип 8250, который был сделан специально для PC AT.

В стандартной конфигурации ядро ищет четыре стандартных последовательных платы от COM1 до COM4. Ядро автоматически определяет, какой чип для какого порта применяется и использует расширенные возможности 16550, если он найден.



Постоянный дозвон


Persistent dialing (постоянный дозвон) используется, если Вы очень активно используете модемную линию. В этом режиме связь должна поддерживать как можно больше времени (лучше всего, постоянно), и именно это компьютер постарается обеспечить.
Постоянный дозвон

Persistent dialing (постоянный дозвон) используется, если Вы очень активно используете модемную линию. В этом режиме связь должна поддерживать как можно больше времени (лучше всего, постоянно), и именно это компьютер постарается обеспечить.

Однако, есть опасность, что в случае сбоя на телефонной линии pppd будет вечно пытаться установить связь. К счастью, есть опции, позволяющие обойти эту проблему.

Для включения этого режима, Вы должны включить опцию persist в файл настройки pppd. Включение этой опции единственное, что Вы должны сделать. Дальше pppd автоматически вызовет команду, определенную опцией connect, чтобы восстановить подключение, когда произошел сбой связи. Если модем пытается связаться раньше, чем нужно (например, в случае неисправности модема или сервера на другом конце линии), Вы можете использовать опцию holdoff, чтобы установить минимальное время, которое pppd будет ждать перед попыткой установить связь. Эта опция не решит проблему неисправности, но она по крайней мере уменьшит загрузку канала.

Типичная конфигурация для постоянного дозвона:

persist holdoff 600
Время в опции holdoff определено в секундах. В нашем примере pppd ждет пять минут перед повторным набором.

Можно объединить постоянный дозвон с дозвоном по требованию, используя опцию idle, чтобы прерывать связь по таймеру неактивности соединения. Вряд ли найдется много желающих использовать такой режим, однако он описан на man-странице по pppd.



Построение файла sendmail cf Когда


# cd /etc/mail # m4 /usr/share/sendmail.cf/m4/cf.m4 vstout.uucpsmtp.mc >sendmail.cf

Эта команда вызывает макропроцессор m4 и передает ему имена двух файлов макроопределений. Затем m4 обрабатывает файлы в порядке поступления. Первый файл стандартный шаблон макрокоманд, обеспеченный исходным пакетом sendmail, второй, конечно, является файлом, содержащим наши собственные определения макрокоманд. Вывод команды направлен в файл /etc/mail/sendmail.cf, который является адресатом.

Вы можете теперь запустить sendmail с новой конфигурацией всех параметров.



Посылка статьи


Раньше уже упоминалось различие между передачей статьи и ее посылкой. Когда Вы передаете статью, имеется неявное предположение, что статья уже существует, что она имеет идентификатор сообщения, который уникален и назначен сервером, первоначально обработавшем статью. Такая статья имеет полный заголовок. При регистрации (посылке) статья имеет лишь заголовок из заданных Вами полей (тема, группа, в которую направлена и т.п.). Сервер новостей добавит все остальные поля заголовка и создаст message ID для передачи статьи дальше.
Посылка статьи

Раньше уже упоминалось различие между передачей статьи и ее посылкой. Когда Вы передаете статью, имеется неявное предположение, что статья уже существует, что она имеет идентификатор сообщения, который уникален и назначен сервером, первоначально обработавшем статью. Такая статья имеет полный заголовок. При регистрации (посылке) статья имеет лишь заголовок из заданных Вами полей (тема, группа, в которую направлена и т.п.). Сервер новостей добавит все остальные поля заголовка и создаст message ID для передачи статьи дальше.

Все это означает, что посылка статьи проще, чем передача:

post 340 Ok From: terry@richard.geek.org.au Subject: test message number 1 Newsgroups: junk Body: This is a test message, please feel free to ignore it. . 240 Article posted

Сгенерируйте еще парочку сообщений самостоятельно, они нам понадобятся.



PPP и Linux В Linux функциональные


PPP kernel-драйвер был написан Michael Callahan. Демон pppd был выведен из реализации PPP для Sun и 386BSD, которая была написана Drew Perkins и другими, и сейчас поддерживается Paul Mackerras. Он был портирован в Linux Al Longyear. Программа chat была написана Karl Fox.

Точно так же, как и SLIP, PPP выполнен посредством специальной line discipline. Для того, чтобы использовать последовательную линию как PPP-связь, Вы сначала должны установить связь с помощью Вашего модема, как обычно, и перевести линию в PPP-режим. В этом методе все входящие данные проходят через PPP-драйвер, который проверяет входящие HDLC-структуры на целостность (каждая HDLC-структура несет 16 битов контрольной суммы). В настоящее время он способен к опциональному применению Van Jacobson header compression. Как только Linux стала поддерживать IPX, драйвер PPP был расширен для того, чтобы обрабатывать IPX-пакеты.

Kernel-драйверу помогает pppd, PPP daemon, который выполняет инициализацию и опознание, которое является необходимым перед тем, как трафик может быть послан по связи. Поведение pppd может подстраиваться, используя ряд опций. PPP подробно освещается в книге Using & Managing PPP, я рассмотрю его здесь лишь в общем виде, поскольку полное описание очень громоздко.

Эта работа не может покрыть все аспекты pppd, но даст Вам полное введение. Для более подробной информации, обратитесь к man-страницам и файлам README дистрибутива pppd, которые должны помочь Вам решить большинство вопросов. Если у Вас остаются проблемы даже после чтения всей документации, то Вы должны обратиться в конференцию comp.protocols.ppp. Там Вы узнаете многое о pppd, эти конференции просто необъятны.



PPPсервер


При запуске pppd нужно учитывать, что запуск в режиме сервера, это только вопрос добавления соответствующей опции в командной строке и конфигурирования последовательного tty-устройства так, чтобы вызвать pppd с соответствующими параметрами, когда было получено входящее обращение. Было бы идеально создать специального пользователя, скажем ppp, и задать ему скрипт или программу, которая вызывает pppd с этими опциями как оболочку входа в систему. Другой вариант: если Вы предполагаете поддерживать авторизацию по PAP или CHAP, можно использовать программу mgetty, чтобы поддерживать модем и использовать свойство "/AutoPPP/".
PPP-сервер

При запуске pppd нужно учитывать, что запуск в режиме сервера, это только вопрос добавления соответствующей опции в командной строке и конфигурирования последовательного tty-устройства так, чтобы вызвать pppd с соответствующими параметрами, когда было получено входящее обращение. Было бы идеально создать специального пользователя, скажем ppp, и задать ему скрипт или программу, которая вызывает pppd с этими опциями как оболочку входа в систему. Другой вариант: если Вы предполагаете поддерживать авторизацию по PAP или CHAP, можно использовать программу mgetty, чтобы поддерживать модем и использовать свойство "/AutoPPP/".

Чтобы создать сервер с использованием метода входа в систему, добавьте следующую строку в файл /etc/passwd:

ppp:x:500:200:Public PPP Account:/tmp:/etc/ppp/ppplogin
Если Ваша система использует затенение паролей, добавьте в файл /etc/shadow строку:
ppp:!:10913:0:99999:7:::

Конечно, UID и GID, которые Вы используете, зависят от того, какой пользователь использован для подключения. Вы также должны установить пароль для этого пользователя, используя команду passwd.

Скрипт ppplogin может выглядеть так:

#!/bin/sh # ppplogin - script to fire up pppd on login mesg n stty -echo exec pppd -detach silent modem crtscts

Команда mesg отключает других пользователей от записи в tty с использованием, например, вызова write. Команда stty выключает повторение символов (эхо). Эта команда необходима: без нее все, что посылает клиент будет послано ему назад. Наиболее важная опция pppd -detach. Она не дает pppd отсоединится от управления tty. Если мы не определили эту опцию, pppd перейдет в фоновый режим, а скрипт входа завершится. Это в свою очередь приведет к завершению связи. Опция silent заставляет pppd ждать получения пакета с вызываемой системы и не начинать свою передачу до его прибытия. Эта опция предотвращает разрыв связи, если удаленная система медлительная. Параметр modem предписывает pppd управлять линиями контроля модема на последовательных портах. Вы должны всегда задать эту опцию при использовании pppd с модемом. Опция crtscts включает аппаратное соединение (hardware handshake).

Помимо этих параметров можно использовать какой-либо вариант авторизации, например, определяя auth в командной строке pppd или в глобальном файле параметров.

Если Вы хотите использовать mgetty, все, что Вы должны сделать, это настроить mgetty так, чтобы поддерживать последовательное устройство с которым связан модем (подробности изложены в главе 4), затем настроить pppd для авторизации по PAP или CHAP с помощью соответствующих параметров в файле options и добавить раздел, подобный следующему, к файлу конфигурации /etc/mgetty/login.config:

# Configure mgetty to automatically detect incoming PPP calls and invoke # the pppd daemon to handle the connection. # /AutoPPP/ - ppp /usr/sbin/pppd auth -chap +pap login

Первое поле используется, чтобы обнаружить входящее обращение к PPP (чувствительно к регистру). Третий столбец задает имя пользователя, которое появится в выводе команды who. Остальная часть строки команда для вызова сервиса. В нашем примере мы определяем, что нужна авторизация PAP, запрещаем CHAP и определяем, что системный файл passwd должен использоваться для авторизации пользователей. Не забудьте, что Вы можете определять параметры в файле options или в командной строке.

Чтобы запустить PPP на Вашей машине, нужно сделать следующее:

Настроить модем на автоответ. Hayes-совместимые модемы используют для этого команду ATS0=3. Если вы хотите использовать mgetty daemon, это необязательно.

Настройте последовательное устройство с помощью команды getty на прием входящих звонков. Обычно это делается с помощью варианта getty, команды mgetty.

Решите какой вариант авторизации будет использован. Системный логин, PAP или CHAP?

Настройте pppd для работы в режиме сервера.

Рассмотрите маршрутизацию. Вы должны обеспечить сетевой маршрут к вызывающим абонентам или нет? Маршрутизация может выполняться, используя скрипт ip-up.



Правая сторона


Когда левая сторона правила соответствует адресу, первоначальный текст будет удален и заменен правой стороной правила. Все лексемы в правой стороне не будут скопированы буквально, если они начинаются с символа доллара. Как и для левой стороны несколько метасимволов могут использоваться на правой стороне. Они приведены в следующем списке:
Правая сторона

Когда левая сторона правила соответствует адресу, первоначальный текст будет удален и заменен правой стороной правила. Все лексемы в правой стороне не будут скопированы буквально, если они начинаются с символа доллара. Как и для левой стороны несколько метасимволов могут использоваться на правой стороне. Они приведены в следующем списке:

$ n

Этот метасимвол будет заменен на n-ое выражение с левой стороны.

$[name $]

Этот метасимвол превратит hostname в каноническое имя.

$(map key $@arguments $:default $)

Это более общая форма поисковой таблицы. Вывод: результат поиска ключа в таблице map с использованием параметров arguments. Здесь map может быть любой из поддерживаемых sendmail карт, таких как virtusertable, которые я опишу немного позже. Если поиск провалился, будет использовано значение default. Если оно не задано, ничего не изменится, а запись key будет выведена так, как пришла.

$>n

Анализирует остаток строки через набор правил n. Вывод этого набора будет выдан как результат текущего правила. Это позволяет правилам вызывать другой набор.

$#mailer

Этот метасимвол заставляет набор правил остановить обработку и определяет транспорт, который должен использоваться для передачи данного сообщения на следующем шаге доставки. Этот метасимвол должен быть вызван только из набора 0 или из его подпрограмм. Это конечная стадия синтаксического анализа адреса.

$@host

Этот метасимвол определяет хост, которому это сообщение будет послано. Если это локальный хост, имя может быть опущено. Параметр host может быть разделенным двоеточияим список хостов-адресатов, которые будут последовательно перебраны для доставки данного письма.

$:user

Определяет целевого пользователя для сообщения почты.

Правило обычно обрабатывается до тех пор, пока не прекратится совпадение. Тогда запускается следующее правило. Это можно поменять указанием на правой стороне одного из двух специальных метасимволов:

$@

Этот метасимвол заставляет набор вернуть остаток правой стороны как значение. Никакие другие правила в наборе не обрабатываются.

$:

Заставляет это правило завершаться немедленно, но остаток текущего набора будет обработан.



Прекращение подачи новостей


Для прекращения подачи новостей скомандуйте:

ctlinnd drop site

Прекращение подачи новостей

Для прекращения подачи новостей скомандуйте:

ctlinnd drop site

Аргументы имеют смысл:

site

Имя сайта (из файла newsfeeds), которому не следует впредь передавать новости. Если это поле пустая строка, команда будет применена ко всем сайтам.

Прекращение передачи новостей для данного сайта ведет к прерыванию всех процессов, передающих ему новости. Эта команда полезна, если Вы изменили детали подачи для некоего сайта, но связь с ним активна.



Прием почты для других доменов



Прием почты для других доменов

Когда sendmail принимает сообщение e-mail, он сравнивает хост назначения в заголовке с именем локальной машины. Если они совпали, sendmail принимает сообщение для локальной доставки. В противном случае, sendmail может принять письмо для последующей пересылки адресату (подробности в разделе База данных доступа (access database) выше).

Если нужно конфигурировать виртуальные домены, первое, что нужно сделать, это убедить sendmail в необходимости приема почты для виртуальных доменов. Это очень легко.

В sendmail есть свойство use_cw_file, позволяющее определить имя файла, где мы сохраняем имена доменов, для которых sendmail принимает почту. Чтобы конфигурировать это свойство, добавьте объявление свойства к файлу sendmail.mc:

FEATURE(use_cw_file)

Заданное по умолчанию имя файла будет /etc/mail/local-host-names для дистрибутивов, хранящих настройки в каталоге /etc/mail или /etc/sendmail.cw для всех остальных. Впрочем, Вы можете определять имя и расположение файла, переопределив макрос confCW_FILE:

define(`confCW_FILE',`/etc/virtualnames')

Если нужно создать виртуальные домены bovine.net, dairy.org и artist.org, впишите в файл /etc/mail/local-host-names:

bovine.net dairy.org artist.org

Когда это будет выполнено, и будут созданы соответствующие записи DNS, которые указывают на наш хост, связывая с ним имена этих доменов, sendmail примет почту для них, как если бы она была предназначена для нашего реального домена.



Команды протокола SMTP



Приложение 1. Команды протокола SMTP

HELO <SP> <domain> <CRLF> Открыть сессию взаимодействия по протоколу SMTP. <domain> - доменное имя машины
MAIL <SP> FROM:<reverse-path> <CRLF> Сообщить адрес отправителя (<reverse-path>). Обязательная команда, которую надо выдать перед отправкой сообщения
RCPT <SP> TO:<forward-path> <CRLF> Сообщить адрес получателя (forward-path). Обязательная команда, которую выдают после MAIL FROM, но перед DATA
DATA <CRLF> Начать передачу тела почтового сообщения. Тело сообщения должно кончаться точкою(".") в первой позиции строки
RSET <CRLF>
SEND <SP> FROM:<reverse-path> <CRLF> Послать сообщение на терминал пользователя, который определяется командой RCPT
SOML <SP> FROM:<reverse-path> <CRLF> SEND OR MAIL. Послать в почтовый ящик или на терминал пользователя
SAML <SP> FROM:<reverse-path> <CRLF> SEND AND MAIL. Послать в почтовый ящик и на терминал пользователя
VRFY <SP> <string> <CRLF> Получить информацию о пользователе, имя которого указывается в качестве аргумента команды (<string>)
EXPN <SP> <string> <CRLF> Получить информацию о пользователях зарегистрированных в качестве получателей корреспонденции
HELP [<SP> <string>] <CRLF> Краткая справка по командам протокола
NOOP <CRLF> Нет операции
QUIT <CRLF> Завершить сессию
TURN <CRLF> Поменяться местами серверу и клиенту


Коды возврата SMTP



Приложение 2. Коды возврата SMTP

211 System status, or system help reply Статус системы или Help
214 Help message. [Information on how to use the receiver or the meaning of a particular non-standard command; this reply is useful only to the human user] Краткая справка
220 <domain> Service ready SMTP-сервис готов к работе
221 <domain> Service closing transmission channel Сервис закрыл канал передачи данных
250 Requested mail action okay, completed Соединение установлено
251 User not local; will forward to <forward-path> Пользователь не местный. Выполнить перенаправление запроса
354 Start mail input; end with <CRLF>.<CRLF> Начать ввод почтового сообщения
421 <domain> Service not available, closing transmission channel [This may be a reply to any command if the service knows it must shut down] Сервис отсутствует. Канал передачи данных закрыт
450 Requested mail action not taken: mailbox unavailable [E.g., mailbox busy] Нет возможности записать данные в почтовый ящик
451 Requested action aborted: local error in processing Ошибка при обработке запроса
452 Requested action not taken: insufficient system storage Запрос не выполнен недостаточно памяти на вычислительной установке
500 Syntax error, command unrecognized [This may include errors such as command line too long] Синтаксическая ошибка - нет такой команды
501 Syntax error in parameters or arguments Синтаксическая ошибка в аргументах команды
502 Command not implemented Данная команда не может быть выполнена
503 Bad sequence of commands Неправильная последовательность команд
504 Command parameter not implemented Параметр команды не может быть использован в данном контексте
550 Requested action not taken: mailbox unavailable [E.g., mailbox not found, no access] Не найден соответствующий почтовый ящик
551 User not local; please try <forward-path> Пользователь не найден можно попробовать отправить почту по другому адресу
552 Requested mail action aborted: exceeded storage allocation Превышены квоты на использование ресурсов памяти
553 Requested action not taken: mailbox name not allowed [E.g., mailbox syntax incorrect] Имя почтового ящика неправильное
554 Transaction failed Обмен завершился аварийно


Образец файла host conf



Пример 6-1. Образец файла host.conf

# /etc/host.conf # We have named running, but no NIS (yet) order bind,hosts # Allow multiple addrs multi on # Guard against spoof attempts nospoof on # Trim local domain (not really necessary). trim vbrew.com.



Образец файла nsswitch conf



Пример 6-2. Образец файла nsswitch.conf

# /etc/nsswitch.conf # # Example configuration of GNU Name Service Switch functionality. # Information about this file is available in the `libc6-doc' package. hosts: dns files networks: files

Этот пример заставляет систему искать компьютеры сначала в Domain Name System, а в случае неудачи в файле /etc/hosts. Поиск имени сети использует только файл /etc/networks.

Вы способны управлять поисковой таблицей более точно, используя "action items", которые описывают, какое действие использует результат предыдущего поиска. Action items появляются между сервисными спецификациями и включены в квадратные скобки ([]). Общий синтаксис здесь такой:

[ [!] status = action ... ]

Имеются два возможных действия: return

Управление возвращается программе, которая запросила преобразование имени. Если попытка поиска была успешна, resolver вернет подробные данные, иначе нулевой результат.

continue

Resolver перейдет к следующему сервису в списке и будет пытаться использовать его.

Факультативный символ ! определяет, что значение состояния должно быть инвертировано перед тестированием.

Доступные значения состояния, которые мы можем использовать: success

Запрошенная запись была найдена без ошибки. Заданное по умолчанию действие для этого состояния return.

notfound

Не было ошибки в поисковой таблице, но компьютер адресата или сеть не найдены. Заданное по умолчанию действие для этого состояния continue.

unavail

Сервис недоступен. Файл hosts или networks нечитаем для сервиса files, сервер имен или NIS-сервер не отвечают на запросы сервисов dns или nis. Заданное по умолчанию действие для этого состояния continue.

tryagain

Это состояние означает, что сервис временно недоступен. Для сервиса files это обычно указывает, что файл был блокирован неким процессом. Для других сервисов это может означать, что сервер временно не может принимать подключения. Заданное по умолчанию действие для этого состояния continue.

Простой пример того, как Вы могли бы использовать этот механизм, показан в примере 6-3.



Файл nsswitch conf с командой Action



Пример 6-3. Файл nsswitch.conf с командой Action

# /etc/nsswitch.conf # # Example configuration of GNU Name Service Switch functionality. # Information about this file is available in the `libc6-doc' package. hosts: dns [!UNAVAIL=return] files networks: files

Этот пример пытается искать компьютеры через Domain Name Service. Если состояние возврата не unavailable, resolver возвращает любой найденный адрес. Если, и только если, DNS возвращает unavailable, resolver делает попытку использовать локальный /etc/hosts. Это означает, что он должен использовать файл hosts, только если наш сервер имен является недоступным.



Образец файла /etc/services



Пример 12-2. Образец файла /etc/services

# The services file: # # well-known services echo 7/tcp # Echo echo 7/udp # discard 9/tcp sink null # Discard discard 9/udp sink null # daytime 13/tcp # Daytime daytime 13/udp # chargen 19/tcp ttytst source # Character Generator chargen 19/udp ttytst source # ftp-data 20/tcp # File Transfer Protocol (Data) ftp 21/tcp # File Transfer Protocol (Control) telnet 23/tcp # Virtual Terminal Protocol smtp 25/tcp # Simple Mail Transfer Protocol nntp 119/tcp readnews # Network News Transfer Protocol # # UNIX services exec 512/tcp # BSD rexecd biff 512/udp comsat # mail notification login 513/tcp # remote login who 513/udp whod # remote who and uptime shell 514/tcp cmd # remote command, no passwd used syslog 514/udp # remote system logging printer 515/tcp spooler # remote print spooling route 520/udp router routed # routing information protocol

Заметьте, что, например, сервис echo работает на порте 7 для обоих (TCP и UDP) протоколов, порт 512 используется для двух различных сервисов, а именно, для системы спутниковой связи COMSAT daemon по UDP и для remote execution (rexec), использующего TCP.

Кроме файла services сетевым библиотекам нужен способ преобразования имен протоколов в номера портов при работе на уровне IP с другими системами. Это делается с помощью файла /etc/protocols. Каждая его строка хранит имя протокола и соответствующий номер порта. Пример файла:



Образец файла /etc/protocols



Пример 12-3. Образец файла /etc/protocols

# # Internet (IP) protocols # ip 0 IP # internet protocol, pseudo protocol number icmp 1 ICMP # internet control message protocol igmp 2 IGMP # internet group multicast protocol tcp 6 TCP # transmission control protocol udp 17 UDP # user datagram protocol raw 255 RAW # RAW IP interface



Образец файла /etc/rpc



Пример 12-4. Образец файла /etc/rpc

# # /etc/rpc - miscellaneous RPC-based services # portmapper 100000 portmap sunrpc rstatd 100001 rstat rstat_svc rup perfmeter rusersd 100002 rusers nfs 100003 nfsprog ypserv 100004 ypprog mountd 100005 mount showmount ypbind 100007 walld 100008 rwall shutdown yppasswdd 100009 yppasswd bootparam 100026 ypupdated 100028 ypupdate

В TCP/IP сетях перед авторами RPC стояла задача отображения номеров программ на общие сетевые услуги. Каждый сервер обеспечивает TCP и UDP порт для каждой программы и каждой версии. Вообще, RPC-приложения используют UDP для передачи данных и возвращаются обратно к TCP тогда, когда данные, которые надо передать, не вписываются в единственную датаграмму UDP.

Конечно, клиентские программы должны иметь способ выяснить, который порт соответсвует номеру программы. Использование для этого файла конфигурации было бы слишком негибким; с тех пор, как RPC-приложения не используют зарезервированные порты, нет никакой гарантии, что порт не занят каким-то приложением и доступен нам. Следовательно, RPC-приложения выбирают любой порт, который они могут получить, и регистрируют это с помощью portmapper daemon. Клиент, который хочет войти в контакт с сервисом с данным номером программы, сначала сделает запрос portmapper для выяснения номера порта нужного сервиса.

Этот метод имеет тот недостаток, что вводит единственную точку отказа, очень похожую на inetd daemon. Однако, этот случай немного хуже, потому что когда portmapper валится, вся информация RPC о портах теряется. Это обычно значит, что Вы должны перезапустить все RPC-серверы вручную или перезагрузить машину.

В Linux portmapper называется /sbin/portmap или /usr/sbin/rpc.portmap. Кроме того, что он должен быть запущен из скрипта запуска сети, рortmapper не требует никакой работы по конфигурации.



Клиентский файл настроек ssh



Пример 12-5. Клиентский файл настроек ssh

# /etc/ssh/ssh_config # Default options to use when connecting to a remote host Host * # Compress the session data? Compression yes # .. using which compression level? (1 - fast/poor, 9 - slow/good) CompressionLevel 6 # Fall back to rsh if the secure connection fails? FallBackToRsh no # Should we send keep-alive messages? Useful if you use IP masquerade KeepAlive yes # Try RSA authentication? RSAAuthentication yes # Try RSA authentication in combination with .rhosts authentication? RhostsRSAAuthentication yes

Я упомянул в разделе конфигурации сервера, что каждый компьютер и пользователь имеет ключ. Ключ пользователя сохранен в его файле ~/.ssh/indentity. Чтобы генерировать ключ, используйте команду ssh-keygen, но Вы не должны определять имя файла, в котором сохраняете ключ. По умолчанию ssh-keygen использует правильное расположение, но попросит Вас ввести имя файла в случае, если Вы хотите сохранить ключ в другом месте. Иногда полезно иметь много авторизационных файлов. Как и прежде ssh-keygen запросит у Вас пароль, что добавляет другой уровень защиты, и его стоит использовать. Пароль не будет отображен на экране, когда Вы его напечатаете.

ПРЕДУПРЕЖДЕНИЕ

Пароль нельзя восстановить, если он забыт. Требования к паролю такие же, как и ко всем прочим паролям. Он должен быть длиной от 10 до 30 символов. Если пароль забыт, придется сгенерировать новый ключ.

Вы должны попросить каждого из Ваших пользователей, чтобы они выполнили ssh-keygen для правильного создания ключа. Команда ssh-keygen создаст их каталоги ~/.ssh/ с соответствующими правами доступа, а также их секретный и публичный ключи в .ssh/identity и .ssh/identity.pub, соответственно. Типовой сеанс:
$ ssh-keygen Generating RSA keys: .......oooooO.............................. Key generation complete. Enter file in which to save the key (/home/maggie/.ssh/identity): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/maggie/.ssh/identity. Your public key has been saved in /home/maggie/.ssh/identity.pub. The key fingerprint is: 1024 85:49:53:f4:8a:d6:d9:05:d0:1f:23:c4:d7:2a:11:67 maggie@moria $

Теперь ssh готов к работе.



Образец файла /etc/ypserv securenets



Пример 13-1. Образец файла /etc/ypserv.securenets

# allow connections from local host -- necessary host 127.0.0.1 # same as 255.255.255.255 127.0.0.1 # # allow connections from any host on the Virtual Brewery network 255.255.255.0 172.16.1.0

Первая запись в каждой строке задает сетевую маску для этой строки. Вторая запись определяет адрес соответствующего хоста, к которому маска применяется. Можно задать маску и адрес явно ключевыми словами host и netmask.

Третья опция (если определена) должна задавать для использования безопасный диспетчер портов (portmapper) вместо обычного securenets в ypserv. Безопасный portmapper (portmap-5.0) использует схему hosts.allow, но предлагает это для всех RPC-серверов, не только для ypserv. Однако, Вы не должны использовать опцию securenets и безопасный диспетчер портов вместе.



Образец файла nsswitch conf



Пример 13-2. Образец файла nsswitch.conf

# /etc/nsswitch.conf # hosts: nis dns [NOTFOUND=return] files networks: nis [NOTFOUND=return] files services: files nis protocols: files nis rpc: files nis

GNU libc обеспечивает некоторые другие действия, которые описаны на man-странице nsswitch.



Sample configuration file for vstout



Пример 18-1. Образец файла настройки vstout.smtp.m4

divert(-1) # # Sample configuration file for vstout - smtp only # divert(0) VERSIONID(`@(#)sendmail.mc 8.7 (Linux) 3/5/96') OSTYPE(`linux') # # Include support for the local and smtp mail transport protocols. MAILER(`local') MAILER(`smtp') # FEATURE(rbl) FEATURE(access_db) # end
Файл sendmail.mc для vstout показан в примере 18-2. Машина vstout использует SMTP, чтобы общаться со всеми хостами в LAN. Кроме того, конфигурация для vstout посылает всю почту для других адресатов на межсетевой почтовый хост moria по протоколу UUCP

Sample configuration file for vstout



Пример 18-2. Образец файла настройки vstout.uucpsmtp.m4

divert(-1) # # Sample configuration file for vstout # divert(0) VERSIONID(`@(#)sendmail.mc 8.7 (Linux) 3/5/96') OSTYPE(`linux') dnl # moria is our smart host, using the "uucp-new" transport. define(`SMART_HOST', `uucp-new:moria') dnl # Support the local, smtp and uucp mail transport protocols. MAILER(`local') MAILER(`smtp') MAILER(`uucp') LOCAL_NET_CONFIG # This rule ensures that all local mail is delivered using the # smtp transport, everything else will go via the smart host. R$* < @ $* .$m. > $* $#smtp $@ $2.$m. $: $1 < @ $2.$m. > $3 dnl # FEATURE(rbl) FEATURE(access_db) # end
Если Вы сравните две конфигурации, вполне сможете понять, что делает каждый из параметров конфигурации. Рассмотрим их более детально.

This rule ensures that all



Пример 18-3. Правило из vstout.uucpsmtp.m4

LOCAL_NET_CONFIG # This rule ensures that all local mail is delivered using the # smtp transport, everything else will go via the smart host. R$* < @ $* .$m. > $* $#smtp $@ $2.$m. $: $1 < @ $2.$m. > $3
Известно, что макрос LOCAL_NET_CONFIG вызовет правило, которое будет вставлено где-нибудь близко к концу набора 0, но перед любым определением интеллектуального хоста. Также известно, что набор 0 последний. Здесь должны быть три параметра: транспорт, хост и пользователь.

Две строки комментария можно игнорировать: они все равно ничего не делают. Правило задано строкой, начинающейся с R. Мы знаем, что R является командой sendmail и добавляет это правило к текущему набору. В данном случае это набор 0. Давайте рассматривать левую и правую стороны.

Левая сторона правила выглядит так: $* < @ $* .$m. > $*.

Набор 0 ищет символы < и > потому, что они должны прийти из набора 3. Набор 3 преобразует адреса в общую форму и делает синтаксический анализ проще, он также помещает часть host адреса почты в символы <>.

Это правило соответствует любому адресу почты, который напоминает: 'DestUser < @ somehost.ourdomain. > Some Text' . То есть, это соответствует почте для любого пользователя на любом компьютере в нашем домене.

Помните, что текст, согласованный метасимволами на левой стороне правила, будет назначен макроопределениям для использования на правой стороне. В примере первое определение $* соответствует тексту от начала адреса до символа $1 для работы с ним на правой стороне. Второе определение $* назначено $2, а последнее к $3.

Мы теперь имеем достаточно данных, чтобы понять левую сторону. Эти правила соответствуют почте для любого пользователя в любом компьютере в нашем домене. Имя пользователя будет в $1, имя хоста в $2, любой сопроводительный текст в $3. Затем вызывается правая сторона, чтобы обработать эти данные.

Давайте теперь рассматривать то, что мы ожидаем видеть в выводе. Правая сторона нашего правила выглядит так: $#smtp $@ $2.$m. $: $1 < @ $2.$m. > $3.

Когда правая сторона нашего набора обрабатывается, каждый из метасимволов интерпретируется, и соответствующие замены будут сделаны.

Метасимвол $# заставляет это правило использовать указанный транспорт, в данном случае smtp.

Метасимвол $@ задает целевой хост. В этом примере целевой компьютер определен как $2.$m., что является полным доменным именем в нашем домене, то есть FQDN, созданный из компонента hostname, назначенного $2 левой стороной, с добавлением доменного имени (.$m.).

Метасимвол $: определяет целевого пользователя, который тоже задан на левой стороне правила и хранится в $1.

Мы сохраняем содержание секции <> и любой сопроводительный текст, используя данные из левой стороны.

Так как это правило обращается к конкретному транспорту, письмо будет послано для доставки соответствующему транспортному агенту. В нашем примере оно будет передано адресату через протокол SMTP.

Образец файла aliases



Пример 18-4. Образец файла aliases

# The following two aliases must be present to be RFC-compliant. # It is important to resolve them to 'a person' who reads mail routinely. postmaster: root # required entry MAILER-DAEMON: postmaster # required entry # # demonstrate the common types of aliases usenet: janet # alias for a person admin: joe,janet # alias for several people newspak-users: :include:/usr/lib/lists/newspak # read recipients from file changefeed: |/usr/local/lib/gup # alias that invokes program complaints: /var/log/complaints # alias writes mail to file

После обновления файла /etc/aliases выполните:

# /usr/bin/newaliases
Это пересоздаст базу данных, используемую sendmail для работы с псевдонимами. Команда /usr/bin/newaliases является эквивалентом выполнения:
# /usr/lib/sendmail -bi
Такое имя понадобилось из-за распространенности команды newaliases для этих целей.



Образец вывода команды mailstats



Пример 18-5. Образец вывода команды mailstats

# /usr/sbin/mailstats Statistics from Sun Dec 20 22:47:02 1998 M msgsfr bytes_from msgsto bytes_to msgsrej msgsdis Mailer 0 0 0K 19 515K 0 0 prog 3 33 545K 0 0K 0 0 local 5 88 972K 139 1018K 0 0 esmtp ============================================================= T 121 1517K 158 1533K 0 0

Эти данные будут собраны, если опция StatusFile в sendmail.cf включена и файл состояния существует. Обычно Вы добавили бы следующее к sendmail.cf:

# status file O StatusFile=/var/log/sendmail.st

Для перезапуска сбора статистики, Вы должны обнулить файл статистики:

> /var/log/sendmail.st
и перезапустить пакет sendmail.