Linux network инструкция администратора

Адреса Email Для электронной почты


Способ интерпретации машинного имени зависит от сети, к которой Вы подключены.


Альтернативы (Alternates)


Иногда желательно иметь несколько описаний для входа в одну систему, например, если система может быть доступна на различных модемных линиях. С Taylor UUCP Вы можете делать это, определив так называемую альтернативу (alternate).

Альтернативы (Alternates)
Иногда желательно иметь несколько описаний для входа в одну систему, например, если система может быть доступна на различных модемных линиях. С Taylor UUCP Вы можете делать это, определив так называемую альтернативу (alternate).


Альтернативная строка сохраняет все установки из основной и определяет только те значения, которые должны быть отменены в заданной по умолчанию или добавлены к ней. Альтернатива смещена, относительно записи для системы, строкой, содержащей ключевое слово altgrnave alternate.
Чтобы использовать два номера телефона для pablo , Вы должны изменить файл sys следующим образом:

system pablo phone 123-456 .. entries as above ... alternate phone 123-455
При вызове pablo,
uucico теперь сначала наберет 123-456 и, если ничего не получается, попробует альтернативу. Альтернативный вход сохраняет все установки из основного входа системы и изменяет только номер телефона.


Анонимный UUCP


Если Вы хотите обеспечивать анонимный UUCP-доступ к системе, Вы сначала должны саздать специальное имя для него (см. выше). Общей практикой является дать ему имя входа в систему и пароль uucp.

Анонимный UUCP
Если Вы хотите обеспечивать анонимный UUCP-доступ к системе, Вы сначала должны саздать специальное имя для него (см. выше). Общей практикой является дать ему имя входа в систему и пароль uucp.


Кроме того, Вы должны установить несколько опций защиты для неизвестных систем. Например, Вы можете запретить им выполнение любых команд на Вашей системе. Однако, Вы не можете задать эти параметры в файле sys, потому что команда требует имени system, которое Вы не знаете. Taylor UUCP решает эту проблему через команду unknown. Команда unknown может использоваться в файле config, чтобы определить любую команду, которая может обычно появляться в записи системы:

unknown remote-receive /incoming unknown remote-send /pub unknown max-remote-debug none unknown command-path /usr/lib/uucp/anon-bin unknown commands rmail
Это ограничит неизвестные системы скачиванием файлов из подкаталогов pub и закачиванием файлов в каталог incoming ниже
/var/spool/uucppublic. Следующая строка говорит
uucico игнорировать любые запросы из удаленной системы, чтобы включить отладку локально. Последние две строки разрешают неизвестным системам выполнять rmail, но путь команды разрешает uucico искать команду rmail в частном каталоге, с именем anon-bin. Это позволяет Вам обеспечить некоторый специальный rmail, который, например, может передавать всю почту суперпользователю для исследования. Это разрешает анонимным пользователям писать администратору системы, но в то же время предотвращает отправление любой почты в другие места.
Чтобы включить анонимный UUCP, Вы должны определить по крайней мере один параметр unknown в файле config. Иначе uucico
отклонит неизвестные системы.


Appendix



Linux Network Administrators Guide

Автоопределение Ethernet


Многие из драйверов Linux Ethernet достаточно интеллектуальны, чтобы знать, как искать расположение Вашей платы Ethernet. Это избавляет от необходимости сообщать такие данные ядру вручную. Ethernet HOWTO перечисляет, использует ли специфический драйвер автопоиск, и в каком порядке он ищет адрес ввода-вывода платы.

Автоопределение Ethernet
Многие из драйверов Linux Ethernet достаточно интеллектуальны, чтобы знать, как искать расположение Вашей платы Ethernet. Это избавляет от необходимости сообщать такие данные ядру вручную. Ethernet HOWTO перечисляет, использует ли специфический драйвер автопоиск, и в каком порядке он ищет адрес ввода-вывода платы.


Имеются три ограничения на автопоиск. Во-первых, это не может распознавать все платы правильно. Это особенно верно для некоторых дешевых аналогов популярных плат. Во-вторых, ядро не будет искать больше, чем одну плату, если оно определенно не проинструктировано об этом. Это было сознательным решением проекта, поскольку считается что Вы захотите иметь контроль над тем, какая плата какому интерфейсу назначена. Самый лучший способ делать это надежно: вручную конфигурировать платы Ethernet. В-третьих, драйвер избегает некоторых адресов, чтобы не конфликтовать с другим оборудованием. Так что еще не факт, что адрес платы вообще будет проверен.
PCI-платы должны быть опознаны правильно, но все равно Вы имеете способ инструктировать ядро лично относительно марки и адреса карты, если используете больше одной платы, или автопоиск потерпел неудачу.
Во время загрузки можно передавать параметры и информацию ядру, которую любой из ядерных компонентов может читать. Этот механизм позволяет Вам передавать ядру информацию, которую драйверы Ethernet могут использовать без проведения автопоиска.
Если Вы используете lilo для загрузки, параметры можно передать, указав их через аргумент append в файле lilo.conf. Например, можно передать ядру следующие параметры, чтобы проинструктировать его о плате Ethernet:
Назад
Вперед

ether=irq, base_addr, [param1,][param2,] name
<



/p>

Первые четыре параметра задают числа, последний задает имя устройства. Параметры irq, base_addr и name обязательны, но два param опциональны. Числовые значения могут быть установлены в ноль, в этом случае ядро будет их искать, исходя из имеющейся информации.

Первый параметр задает IRQ. По умолчанию, ядро попробует его найти само. Например, драйвер 3c503 имеет специальное свойство, которое выбирает свободный IRQ из 5, 9, 3, 4 и настраивает плату, чтобы использовать эту линию. Параметр base_addr задает адрес ввода-вывода карты, значение 0 сообщает, чтобы ядро исследовало возможные адреса карты.

Различные драйверы используют следующие два параметра по разному. Для карт с разделением памяти (shared-memory cards), подобных WD80x3, они определяют первый и последний адреса разделяемой памяти. Другие платы обычно используют param1, чтобы установить уровень выдачи отладочной информации. Значения от 1 до 7 задают повышенные уровни отладки, 8 выключает ее, 0 выдает нормальное число сообщений. Драйвер 3c503 использует param2, чтобы выбрать между своим трансивером (по умолчанию) и внешним (значение 1). Аргументы param не должны быть включены вообще, если нет ничего особо нуждающегося в настройке.

Первый нечисловой параметр интерпретируется ядром как имя устройства. Вы должны определить имя устройства для каждой платы Ethernet.

Если у Вас две платы Ethernet cards, можно поручить определение первой ядру, а самому настроить вторую через lilo. Можно и вручную конфигурировать обе платы. Если Вы решите поручить ядру поиск первой платы, надо выяснить, какую плату считаете первой Вы, а какую ядро. Ваши мнения совпадут не всегда. Решить проблему позволяет опция lilo reserve, которая однозначно запретит ядру поиск в адресном пространстве первой карты. Например, чтобы Linux нашла вторую карту Ethernet на адресе 0x300 с именем eth1

задайте параметры ядра:

reserve=0x300,32 ether=0,0x300,eth1

Опция reserve запрещает какому-либо драйверу обращаться в указанное адресное пространство. Вы можете также использовать ядерные параметры, чтобы отменить автопоиск для eth0 :



reserve=0x340,32 ether=0,0x340,eth0

Автопоиск можно и вовсе запретить (допустим, Вы временно сняли одну из плат Ethernet). Чтобы запретить автопоиск задайте аргумент base_addr как –1:

ether=0,-1,eth0

Для передачи этих параметров ядру при загрузке Вы их вводите в ответ на приглашение lilo "boot:". Чтобы lilo выдал запрос "boot:", надо при загрузке держать нажатой одну из клавиш Control, Alt или Shift. Если в ответ на приглашение нажать Tab, будет выведен список ядер, которые можно загрузить. Для загрузки ядра с параметрами введите его имя, пробел и все нужные параметры. Затем нажмите клавишу Enter, и lilo загрузит заданное ядро с заданными параметрами.

Чтобы параметры воспринимались при каждой перезагрузке автоматически, внесите их в /etc/lilo.conf, используя ключевое слово append=. Например:

boot=/dev/hda root=/dev/hda2 install=/boot/boot.b map=/boot/map vga=normal delay=20 append="ether=10,300,eth0"

image=/boot/vmlinuz-2.2.14 label=2.2.14 read-only

После правки lilo.conf, выполните команду lilo для активизации изменений.


Авторизация NNTP Демон nntpd предоставляет


Процедура авторизации выполнена посредством новой команды NNTP AUTHINFO. При использовании этой команды, пользователь передает username (имя пользователя) и его пароль на NNTP-сервер. nntpd проверяет их по файлу
/etc/passwd. Проверяется также принадлежность пользователя к группе nntp.
Текущая реализация NNTP-авторизации только экспериментальная и не была выполнена очень универсальной. Результат этого в том, что авторизация работает только с базами данных паролей с простым стилем; теневые пароли не распознаются. Если Вы компилируете пакет из исходных текстов и имеете установленный пакет PAM, проверка пароля довольно проста, чтобы изменить ее.


База данных DNS


Мы видели, что DNS имеет дело не только с IP-адресами хостов, но также обменивается информацией относительно серверов имен. В базе данных DNS фактически имеется целая куча различных типов записей.
База данных DNS
Мы видели, что DNS имеет дело не только с IP-адресами хостов, но также обменивается информацией относительно серверов имен. В базе данных DNS фактически имеется целая куча различных типов записей.


Единица информации в базе данных DNS названа записью ресурса (resource record) или RR. Каждая запись имеет свой тип, описывающий тип данных, которые в ней записаны, и определяющий тип сети, к которой она применяется. Последний используется при определении схемы адресации, вроде IP-адресов (IN класс), или адресов в Hesiod-сетях (используемые в MIT). Основной записью ресурсов является запись, которая связывает полное имя домена с IP-адресом.
Конечно, хост может иметь больше, чем одно имя. Например, сервер предоставляющий сервисы FTP и World Wide Web может иметь имена ftp.machine.org и www.machine.org. Однако, одно из этих имен должно быть определено как официальное или каноническое (canonical) имя хоста в то время, как остальные просто псевдонимы. Различие между ними в том, что каноническое имя хоста связано с А-записью в то время, как другие только с записью типа CNAME, которая указывает на каноническое имя хоста.
Я не буду приводить здесь все типы записей, а сделаю это позже, в другой главе, здесь же ограничусь кратким примером. Пример 6-4 показывает часть базы данных домена, которая загружена на сервере имен для зоны physics.groucho.edu.


Будьте бдительны: проверки последовательности обращения


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

Будьте бдительны: проверки последовательности обращения
Другой способ отражать и обнаружить самозванцев состоит в том, чтобы использовать проверки последовательности обращения. Проверки последовательности помогают Вам защититься от злоумышленников, которые сумели выяснить пароль, с которым Вы регистрируетесь в Вашей системе UUCP.


При использовании проверок последовательности обращения, обе машины следят за числом уже установленных соединений. Оно увеличивается с каждым соединением. После регистрации, вызывающий посылает порядковый номер обращения, а вызываемый сверяет его со своим. Если они не соответствуют, попытка соединения будет отклонена. Если начальный номер выбирать произвольно, нападавшим будет нелегко угадать правильный порядковый номер обращения.
Но проверки последовательности обращения делают для Вас еще больше: даже если некоторый очень умный человек обнаружит Ваш порядковый номер обращения также, как Ваш пароль, Вы заметите это. Когда нападавший вызывает Вашу передачу UUCP и захватывает почту, это увеличит порядковый номер обращения на один. Когда в следующий раз Вы вызываете Вашу передачу и пробуете регистрироваться, удаленный uucico откажется от Вас, потому что числа не соответствуют!
Если Вы включили проверки последовательности обращения, Вы должны регулярно проверять Ваши регистрационные файлы на сообщения об ошибках, которые намекают на возможные причины. Если Ваша система отклоняет порядковый номер обращения, который вызывающая система предлагает,
uucico поместит в регистрационный файл сообщение, говорящее что-нибудь вроде "Out of sequence call rejected". Если Ваша система не допущена, потому что порядковые номера находятся вне синхронизации, в регистрационном файле будет примерно следующее "Handshake failed (RBADSEQ)".



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

# enable call sequence checks sequence true

Еще Вы должны создать файл, содержащий порядковый номер. Taylor UUCP хранит порядковый номер в файле .Sequence в каталоге spool удаленной системы. Он должен

принадлежать uucp и иметь режим доступа 600 (то есть, чтение и запись разрешены только самому uucp). Самое лучшее инициализировать этот файл произвольным согласованным начальным значением. Иначе нападающий может подобрать номер, пробуя все значения меньше, скажем, 60. Простой пример создания файла:

# cd /var/spool/uucp/pablo

# echo 94316 > .Sequence

# chmod 600 .Sequence

# chown uucp.uucp .Sequence

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


C-News и NFS Простой способ распределять


Когда Вы используете NFS, статьи зарегистрированные на локальном компьютере должны быть посланы центральной машине, потому что прямое обращение к административным файлам может привести к возникновению непоследовательных (противоречивых) файлов. Кроме того, Вы наверняка хотите защитить область хранения новостей, экспортируя ее только для чтения, что также требует пересылки центральной машине.
C-News обрабатывает эту конфигурацию прозрачно для пользователя. Когда Вы регистрируете статью, Ваш пакет работы с новостями обычно вызывает inews, чтобы ввести статью в систему новостей. Эта команда выполняет ряд проверок статьи, заполняет ее заголовок и проверяет файл server в /etc/news. Если этот файл существует и содержит имя, отличное от имени локального компьютера, inews вызывается на удаленном компьютере через rsh. Так как скрипт inews
использует ряд исполняемых модулей и файлов поддержки из C-News, Вы должны иметь C-News на локальной машине или монтировать программное обеспечение новостей по сети.
Для того, чтобы rsh мог работать правильно, каждый пользователь, регистрирующий новости, должен иметь эквивалентное имя на сервере, то есть, иметь возможность зайти на сервер без запроса пароля.
Удостоверьтесь, что имя сервера в server
буквально соответствует выводу команды hostname на сервере. Иначе C-News зациклится навсегда при попытке доставить статью. NFS подробно обсуждется в главе 14.


Cables



Linux Network Administrators Guide

Что нужно знать UUCP


Работа программ Linux слегка напоминает работу разведки: никто не должен знать лишнего.
Прежде, чем Вы начинаете писать файлы конфигурации UUCP, Вы должны выяснить некоторую необходимую информацию. Сначала Вы должны выяснить, к какому последовательному порту присоединен модем. Обычно порты DOS COM1-COM4 отображаются на специальные файлы устройств с /dev/ttyS0 по /dev/ttyS3. Большинство дистрибутивов, например, Slackware, создают файл /dev/modem как ссылку на соответствующий файл устройства ttyS* и конфигурируют коммуникационные программы kermit, seyon, чтобы они использовали этот обобщенный файл. В этом случае Вы должны также использовать /dev/modem в Вашей конфигурации UUCP.

Что нужно знать UUCP
Работа программ Linux слегка напоминает работу разведки: никто не должен знать лишнего.
Прежде, чем Вы начинаете писать файлы конфигурации UUCP, Вы должны выяснить некоторую необходимую информацию. Сначала Вы должны выяснить, к какому последовательному порту присоединен модем. Обычно порты DOS COM1-COM4 отображаются на специальные файлы устройств с /dev/ttyS0 по /dev/ttyS3. Большинство дистрибутивов, например, Slackware, создают файл /dev/modem как ссылку на соответствующий файл устройства ttyS* и конфигурируют коммуникационные программы kermit, seyon, чтобы они использовали этот обобщенный файл. В этом случае Вы должны также использовать /dev/modem в Вашей конфигурации UUCP.


Причина этого в том, что все программы используют так называемые файлы блокировки (lock files), чтобы сообщить, когда последовательный порт используется. Имена этих файлов блокировки являются конкатенацией строки LCK.. и имени файла устройства, например, LCK..ttyS1. Если программы используют различные имена для одного устройства, они будут не в состоянии распознавать чужие файлы блокировки. Как следствие, они прервут чужие сеансы связи. Это не такое уж маловероятное событие, если Вы планируете, чтобы UUCP использовал crontab. Подробности настройки последовательных портов описаны в главе 4.
Затем Вы должны выяснить, с какой скоростью модем и Linux могут связываться, и установить максимальную эффективную скорость передачи. Эффективная скорость передачи может быть намного выше, чем физическая скорость модема. Например, много модемов посылают и получают данные на скорости 56 kbps. Использование протоколов сжатия (например, V.42bis) позволяет установить фактическую скорость передачи более, чем в 100 kbps.
Конечно, если Вы хотите, чтобы UUCP cделал что-нибудь, Вам нужен номер телефона системы для вызова. Также Вам нужен идентификатор для входа в систему и, возможно, пароль для удаленной машины.
Также надо знать порядок входа в систему. Следует ли нажать клавишу Enter перед появлением приглашения для входа? Что будет отображено: login: или user:? Это необходимо для создания сценария дружеской беседы (chat script), который описывает uucico как регистрироваться. Если у Вас возникают затруднения, попробуйте вызывать систему программой терминала kermit или minicom и записать точно, что Вы делаете.


Что такое firewall? Firewall это


Firewall выполняет фильтрацию сетевого трафика на уровне протоколов обмена пакетами. Он пропускает пакеты, удовлетворяющие определенным критериям из внешней сети во внутреннюю и наоборот. Критерии задаются правилами фильтрации, которые могут быть очень сложными. Фильтр пакетов также отбрасывает пакеты, которые не соответствуют заданным критериям. При этом на машину-отправитель может быть (а может и не быть, зависит от настройки) послано сообщение об ошибке.
Таким образом, firewall скрывает внутреннюю организацию сети от внешнего мира и повышает надежность ее работы. Сеть оказывается защищена от атак хакеров. К сожалению, полной защиты такой подход не гарантирует: всегда найдется умный хакер, который даже firewall обойдет. Но все же firewall резко осложняет жизнь хакерам.
Ядро Linux предоставляет встроенные функции IP firewall. Сетевой код ядра реализует IP filtering несколькими способами и предоставляет интерфейс для управлния правилами фильтрации. Кроме того, Linux firewall имеет еще две полезные функции, не связанные напрямую с фильтрацией пакетов. Они будут рассмотрены позже, пока я просто назову их. Это IP Accounting (глава 10) и IP masquerade (глава 11).
С сожалением должен констатировать факт, что именно в этой области эквивалентной сетевой терминологии на русском пока нет. В среде администраторов сложилась своя терминология, заимствовавшая много английских слов. К тому же, там сложилось отрицательное отношение ко всем попыткам ввести какие-то русские переводы терминов. Частично я согласен с таким отношением, поскольку все попытки перевода отличаются либо огромными размерами и туманными формами, либо не вполне отражают смысл. Я не считаю, что здесь нужна реформа языка, поскольку профессиональная терминология уже устоялась, все специалисты ее понимают, а если она не похожа на русскую, так велика ли беда? Поэтому в изложении я придерживаюсь устоявшейся в этой области терминологии. Если используется несколько разных слов для обозначения одного понятия, я использую их вместе.


Что такое IP Filtering? IP filtering



  • Номера портов (для TCP/UPD)

  • Типы пакетов: SYN/ACK, data, ICMP Echo Request и т.д.

  • Откуда пришел пакет

  • Куда идет пакет
    Важно понять, что IP-фильтрация является средством сетевого уровня. Это означает, что она не понимает ничего относительно прикладной программы, использующей сетевые подключения, а понимает только что-то непосредственно относительно подключений. Например, Вы можете отвергать доступ пользователей к Вашей внутренней сети через telnet-порт, но если Вы полагаетесь ТОЛЬКО на IP-фильтрацию, Вы не сможете запретить использование программы telnet с портом, с которого Вы позволяете передавать пакеты через Ваш firewall. Вы можете предотвращать эти проблемы, используя прокси-сервер для каждого сервиса, проходящего через firewall. Прокси-серверы понимают прикладную программу, под которую они были разработаны, и предотвращают злоупотребления типа использования программы telnet, чтобы обойти firewall через порт для World Wide Web. Если Ваш firewall поддерживает прокси для World Wide Web, telnet будет всегда соединяться только с ним, и проходить будут только HTTP-запросы. Есть много прокси-серверов, как коммерческих, так и свободных. Они хорошо рассмотрены в Firewall-HOWTO.
    Набор правил IP-фильтрации задает много правил. Например, допустим, что Вы позволяете пользователям World Wide Web в сети Virtual Brewery network обращаться только к другим web-серверам в Internet. Настройте Ваш firewall на пропуск пакетов:

    С исходными адресами сети Virtual Brewery network, любым сайтом назначения и портом назначения 80 (WWW)

  • С адресом назначения в сети Virtual Brewery network и портом назначения 80 (WWW) с любого исходного адреса.
    Здесь использованы два правила фильтрации. Мы должны позволить нашим данным выходить, но также должны позволить возвращаться ответам на запросы. На деле Linux упрощает это и позволяет нам определять эти правила в одной команде.


    Что такое почтовое сообщение?


    Эта административно-управленческая информация относится к двум категориям: во-первых, любые данные, которые являются специфическими для транспортной среды, подобно адресам отправителя и получателя. Это называется конвертом или оболочкой. Эти данные могут быть преобразованы транспортным программным обеспечением при передаче сообщения.
    Во-вторых, данные необходимые для обработки сообщения почты, которые не являются частью транспортного механизма, типа темы сообщения, списка всех получателей и даты. Во многих сетях стало стандартным добавлять эти данные к сообщению, формируя так называемый заголовок почты (mail header). Эта информация отделена от собственно письма (mail body) пустой строкой.
    Большая часть программного обеспечения для транспортировки почты в мире Unix использует формат заголовка, определенный в RFC-822. Его первоначальная цель: определить стандарт для использования в ARPANET. Позже он был адаптирован к разным сетям, включая UUCP-сети.
    RFC-822 задает только самые общие данные. Более современные стандарты были задуманы, чтобы справиться с возрастанием потребностей как, например, шифрование данных, поддержка наборов национальных символов и мультимедиа расширений почты (MIME), которые подробно описаны в RFC-1341 и других RFC.
    Во всех этих стандартах заголовки состоят из отдельных строк, отделяемых символами перевода строки. Имя поля начинается с первого символа строки. Поля заголовка могут занимать несколько строк. В этом случае все строки, кроме первой, начинаются с символа табуляции. Имена и семантика полей очень отличаются. Поля могут располагаться в любом порядке.
    Типичный заголовок выглядит примерно так:
    Назад
    Вперед

    Return-Path: Received: ursa.cus.cam.ac.uk (cusexim@ursa.cus.cam.ac.uk [131.111.8.6]) by al.animats.net (8.9.3/8.9.3/Debian 8.9.3-6) with ESMTP id WAA04654 for ; Sun, 30 Jan 2000 22:30:01 +1100 Received: from ph10 (helo=localhost) by ursa.cus.cam.ac.uk with local-smtp (Exim 3.13 #1) id 12EsYC-0001eF-00; Sun, 30 Jan 2000 11:29:52 +0000 Date: Sun, 30 Jan 2000 11:29:52 +0000 (GMT) From: Philip Hazel Reply-To: Philip Hazel To: Terry Dawson , Andy Oram Subject: Electronic mail chapter In-Reply-To: Message-ID:
    <



    /p>

    Обычно, все необходимые поля заголовка генерируются Вашим mailer`ом (программой для работы с электронной почтой), например elm , pine, mush или mailx. Некоторые поля необязательны и могут быть добавлены пользователем. Например, elm позволяет редактировать часть заголовка сообщения. Ниже приведен список наиболее часто используемых полей с пояснением их значения:

    From:

    Содержит email-адрес отправителя и, возможно, его "реальное имя".

    To:

    email-адрес получателя. Может быть несколько адресов, они разделяются запятыми.

    Cc:

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

    Bcc:

    Кому послать невидимые копии. Может быть несколько адресов, они разделяются запятыми. Разница между "Cc:" и "Bcc:" в том, что "Bcc:"-получатели не увидят имен и адресов других получателей, а "Cc:"-получатели их увидят.

    Subject:

    Тема сообщения в нескольких словах.

    Date:

    Дата посылки почты.

    Reply-To:

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

    Organization:

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

    Message-ID:

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

    Received:

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

    X-anything:

    Почтовые программы не должны жаловаться на заголовки, которые начинаются с X-. Они используются, чтобы воплотить дополнительные возможности, которые еще не реализованы в RFC. Например, один из крупных серверов списков рассылки по Linux указывает имя списка в поле X-Mn-Key:.

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


    Доставка новостей Статьи могут


    Для каждой статьи команда relaynews проверяет, была ли статья уже замечена на локальной машине, для чего ищет id сообщения в файле хронологии (history). Копии статьи будут пропущены. Затем relaynews рассматривает строку заголовка Newsgroups:, чтобы выяснить, запрашивает ли локальная машина статьи из любой из этих групп. Если она это делает, и группа новостей перечислена в файле active, relaynews пробует сохранить статью в соответствующем каталоге в области хранения новостей. Если этот каталог не существует, он будет создан. Id сообщения статьи будет зарегистрирован в файле history. В противном случае
    relaynews пропускает статью.
    Если relaynews будет не в состоянии сохранить входящую статью, потому что группа, в которой она была зарегистрирована, не перечислена в вашем файле active, статья будет перемещаться в группу junk. relaynews также проверит старые или статьи без дат и уничтожит их. Входящие пакеты, которые терпят неудачу по любой другой причине, перемещаются в /var/spool/news/in.coming/bad , и регистрируется сообщение об ошибках.
    После этого статья рассылается всем сайтам, запросившим новости из этой группы способом, специфичным для каждого конкретного сайта. Чтобы не посылать статью одному и тому же сайту несколько раз, проверяется поле Path: заголовка статьи, в нем указываются все машины, через которые прошла статья. Сайту будет послана статья, только если он не упомянут в этом поле.
    C-News обычно используется, чтобы передавать новости между UUCP-машинами, хотя можно использовать его и в NNTP-среде. Чтобы доставить новости на удаленную UUCP-машину делается следующее: используется uux для вызова на удаленной машине команды rnews с последующей перекачкой статьи или набора статей на эту машину. Подробно UUCP рассматривается в главе 16.
    Когда удаленный сайт поддерживает пакетирование, C-News не рассылает статьи поштучно, а добавляет имена их файлов в некий файл, обычно out.going/site/togo. Периодически из crontab вызывается программа пакетирования, которая записывает статьи в файл, сжимает их, если это задано, и отправляет rnews на удаленной машине.


    Доставка писем на локальные адреса


    Обычно локальный адрес задает только имя входа пользователя в систему, тогда сообщение будет доставлено в почтовый ящик пользователя, /var/spool/mail/
    user-name. Другие случаи включают псевдонимы, имена списков рассылки и пересылку почты. В этих случаях локальный адрес расширяется до нового списка адресов, которые могут быть локальными или удаленными.
    Доставка писем на локальные адреса
    Обычно локальный адрес задает только имя входа пользователя в систему, тогда сообщение будет доставлено в почтовый ящик пользователя, /var/spool/mail/
    user-name. Другие случаи включают псевдонимы, имена списков рассылки и пересылку почты. В этих случаях локальный адрес расширяется до нового списка адресов, которые могут быть локальными или удаленными.


    Кроме этих "нормальных" адресов Exim может обрабатывать другие типы локальных адресатов сообщения, подобные командам канала и именам файла. При доставке в файл Exim добавит в него сообщение, создавая файл в случае необходимости. Файл и адресаты канала не являются адресами в обычном смысле, так что Вы не можете посылать почту, скажем, на /etc/passwd@vbrew.com и перезаписывать файл пароля; доставка в специфический файл имеет силу только, если она исходит из файлов псевдонима или из команды пересылки. Обратите внимание, что адрес /etc/passwd@vbrew.com синтаксически имеет силу, но если Exim получил такой адрес, он обычно будет искать пользователя, чье имя входа в систему /etc/passwd, что приведет к сбою и сообщению об ошибке.
    В списке псевдонима или файле пересылки имя файла начинается со слэша (/?), если оно не является полным адресом почты. Например, /tmp/junk в файле пересылки или псевдонимов интерпретируется как имя файла, но /tmp/junk@vbrew.com будет воспринят как адрес email, хотя это вряд ли будет очень полезным. Однако имеющий силу адрес этого типа замечен при посылке почты через шлюзы X.400, потому что в X.400 адреса начинаются с наклонной черты вправо. В общем, маршрутизация почты всегда была сложной.
    Командой канала (pipe command) может быть любая команда Unix, которой предшествует символ канала (|), если строка не является полным адресом email с указанием домена. Если Вы не изменили конфигурацию, Exim не использует оболочку, чтобы выполнить команду; вместо этого он разделяет ее на команду и параметры, сам и выполняет непосредственно. Сообщение будет подано команде на стандартном вводе.
    Например, для пересылки из списка рассылки в локальную группу новостей Вы могли бы использовать скрипт gateit и установить локальный псевдоним, который доставляет все сообщения от этого списка адресатов до скрипта, используя |gateit. Если командная строка содержит запятую, команда и предшествующий символ канала должны быть заключены в двойные кавычки.


    Драйверы PPP и SLIP Point-to-Point


    Для запуска PPP или SLIP не нужно никаких изменений оборудования: Вы можете использовать любой последовательный порт. Так как конфигурация последовательного порта не специфическая для работы с сетями TCP/IP, она рассмотрена в отдельной главе. Подробности есть в главе 4. PPP детально рассмотрен в главе 8, а SLIP в главе 7.


    Другие полезные инструменты


    Есть несколько инструментальных средств, которые могут помочь Вам в решении задач. Здесь кратко описаны два таких средства.

    Другие полезные инструменты
    Есть несколько инструментальных средств, которые могут помочь Вам в решении задач. Здесь кратко описаны два таких средства.


    Программа hostcvt помогает Вам построить конфигурацию с нуля, преобразуя файл /etc/hosts в главные файлы для named. Она генерирует прямой (A) и обратный (PTR) коды отображения и заботится о псевдонимах. Конечно, она не сделает всю работу за Вас, поскольку Вам все еще нужно настраивать значения времени ожидания в записи SOA или добавить MX-записи. Утилита hostcvt входит в пакет BIND, но доступна и отдельно с нескольких Linux FTP-серверов.
    После установки сервера имен Вы должны проверить его конфигурацию. Некоторые хорошие инструментальные средства делают эту работу проще. Во-первых, это dnswalk, основанный на Perl. Во-вторых, nslint. Они оба обходят базу данных DNS, ищут общие ошибки и проверяют, что информация является непротиворечивой. Два других полезных инструментальных средства, host и dig, являются универсальными средствами для запроса базы данных DNS. Вы можете использовать эти инструментальные средства, чтобы вручную осматривать и диагностировать записи базы данных DNS.
    Скорей всего, все эти средства доступны в откомпилированном виде. Утилиты dnswalk и nslint доступны в исходниках с http://www.visi.com/~barr/dnswalk и ftp://ftp.ee.lbl.gov/nslint.tar.Z. Утилиты host и dig доступны в исходниках с ftp://ftp.nikhef.nl/pub/network и ftp://ftp.is.co.za/networking/ip/dns/dig.


    Два формата почтовых адресов


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


    Основная проблема: смшивание UUCP стиля bang-path и формата RFC-822. Эти два типа адресации соединить не так-то просто. Допустим, есть адрес domainA!user@domainB. Неизвестно, что важнее: знак @ или путь. Другими словами: мы должны послать сообщение на domainB, который отправляет его на domainA!user, или письмо надо послать domainA, который отошлет его user@domainB?
    Адреса, в которых операторы адресации смешаны, называются гибридными (hybrid addresses). В только что приведенном примере считается, что знак @ важнее пути. Запись domainA!user@domainB означает послать сообщение сначала на domainB.
    Имеется способ определить маршруты RFC822-совместимыми способами: обозначает адрес пользователя user в домене domainC, где domainC должен быть достигнут через domainA и domainB (именно в этом порядке!). Этот тип адресов часто называется адресом, направленным источником (source routed). Положиться на это поведение не очень хорошая идея, поскольку изменения в RFC, описывающие маршрутизацию почты, рекомендуют, чтобы маршрутизация источника в адресе почты игнорировалась, а взамен должна быть сделана попытка доставить письмо непосредственно удаленному адресату.
    Когда имеется оператор адреса % (например, user%domainB@domainA), письмо будет сначала послано domainA, который превратит знак процента в знак @. Теперь адрес user@domainB, и почтовая программа передаст Ваше сообщение на domainB, который перешлет его пользователю user. Этот тип адреса иногда упоминается как "Ye Olde ARPAnet Kludge" и его использование не приветствуется. Однако, много средств транспортировки почты генерируют этот тип адреса.
    Но лучше всего использовать адрес именно в виде абсолютного адреса RFC-822 user@host.domain, если это позволяет Ваша система.


    Файл active Файл active расположен


    newsgroup, конечно, имя группы. low и high
    задают предельное число статей, доступных в настоящее время. Если ни одна не является доступной в настоящее время, low =high+1.
    По крайней мере предполагается, что поле low это хранит. Но, из соображений эффективности, C-News не модифицирует это поле. Это не было бы большой потерей, если бы не имелось программ чтения новостей, которые зависят от этого поля. Например, trn проверяет это поле, чтобы видеть, может ли он очистить свою базу данных статей. Для обновления поля
    low надо регулярно выполнять команду updatemin (или в более ранних версиях C-News скрипт upact).
    perm представляет собой параметр, детализирующий доступ пользователей в зависимости от группы. Он принимает одно из следующих значений:
    y
    Пользователям разрешают отправлять статьи в эту группу.
    n
    Пользователям не разрешают отправлять статьи в эту группу. Однако группа может читаться.
    x
    Эта группа была локально заблокирована. Это случается, когда администраторы новостей закрывают статьи, зарегистрированные в некоторых группах.
    Статьи, полученные для этой группы, не сохраняются локально, хотя они будут посланы абонентам, которые запрашивают их.
    m
    Это обозначает модерируемую группу. Когда пользователь пробует отправлять статью в эту группу, интеллектуальный newsreader сообщит, какая она, и пошлет статью модератору. Адрес модератора берется из файла moderators в /var/lib/news .
    =real-group
    Это отмечает newsgroup как локальный псевдоним для другой группы, а именно real-group. Все статьи, зарегистрированные в newsgroup, будут переназначены в real-группу.
    В C-News, Вы вообще не должны обращаться к этому файлу непосредственно. Группы могут быть добавлены или удалены, используя
    addgroup и delgroup (см. ниже ). Когда группы добавляются или удаляются для всего Usenet, это обычно делается, посылая сообщение управления newgroup или rmgroup соответственно. Никогда не посылайте такое сообщение самостоятельно!
    О том, как создавать newsgroup, читайте ежемесячник в news.announce.newusers.
    Файл, близко связанный с active, active.times. Всякий раз, когда группа создается, C-News пишет в этот файл сообщение, содержащее имя созданной группы, дату ее создания, было ли это выполнено в соответствии c сообщением управления newgroup или локально, и кто сделал это. Это сделано для удобства программ чтения новостей, которые могут сообщать пользователю о любой недавно созданной группе. Это также используется командой NEWGROUPS протокола NNTP.


    Файл exports Рассмотрим, как настроить


    По умолчанию, rpc.mountd не позволяет кому угодно монтировать файловые системы по сети, что является довольно разумной позицией. Для того, чтобы разрешить одному или большему количеству хостов монтировать nfs-каталог, он должен быть экспортирован, то есть определен в файле exports. Типовой файл может выглядеть следующим образом:

    # exports file for vlager /home vale(rw) vstout(rw) vlight(rw) /usr/X11R6 vale(ro) vstout(ro) vlight(ro) /usr/TeX vale(ro) vstout(ro) vlight(ro) / vale(rw,no_root_squash) /home/ftp (ro)
    Каждая строка определяет каталог и хост, которому можно монтировать его. Имя хоста обычно задает его полное доменное имя, но может содержать универсальные символы * и ?, которые действуют аналогично их действию в оболочке Bourne. Например, lab*.foo.com
    соответствует lab01.foo.com также, как и laboratory.foo.com. Если имя хоста не задано, как с каталогом /home/ftp в примере выше, то любому хосту позволено монтировать этот каталог. Хост может быть также задан его IP-адресом в форме address/ netmask.
    При проверке клиентского хоста по файлу exports, rpc.mountd будет искать имя клиента, используя вызов gethostbyaddr. С DNS этот вызов возвращает каноническое имя машины клиента, так что Вы должны удостовериться в том, не используются ли псевдонимы в exports. Без использования DNS, возвращенное имя будет первым подходящим именем, найденным в файле hosts, которое соответствует адресу клиента.
    Имя хоста сопровождается произвольным, разделенным запятыми списком параметров, приведенных в скобках. Эти параметры могут принимать следующие значения:
    secure
    Запрос должен прийти с одного из зарезервированных портов, то есть с порта, номер которого меньше 1024. Задан по умолчанию.
    insecure
    Задает действие, обратное действию параметра
    secure.
    ro
    Монтировать каталог NFS только для чтения. Задан по умолчанию.
    rw
    Монтировать каталог NFS для чтения и записи.
    root_squash
    Все обращения по NFS выполнять от имени пользователя nobody (uid 65534) на сервере независимо от того, пользователь с каким uid послал запрос с клиента.
    no_root_squash



    Не отображать uid 0 на uid 65534. Задан по умолчанию.

    link_relative

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

    link_absolute

    Оставляет все символьные связи такими, какими они и были (нормальное поведение для Sun NFS серверов).

    map_identity

    Клиентские uids и gids соответствуют серверным. Задан по умолчанию.

    map_daemon

    Клиент и сервер не разделяют пространство uid/gid.

    rpc.nfsd построит карту отображений ID клиента и сервера, запрашивая на клиенте демон rpc.ugidd.

    map_static

    Этот параметр позволяет Вам определять имя файла, который содержит статическую карту uids и gids. Например,

    map_static=/etc/nfs/vlight.map определит файл

    /etc/nfs/vlight.map как карту uid/gid. Синтаксис файла карты описан на man-странице exports(5).

    map_nis

    Предписывает NIS-серверу выполнять работу по отображению uid и gid.

    anonuid и anongid

    Эти параметры позволяют Вам определять uid и gid анонимного пользователя. Это полезно, если Вы имеете том, экспортируемый для монтирования всеми желающими.

    Все ошибки при обработке файла exports будут переданы syslogd daemon на уровне notice при запуске rpc.nfsd или rpc.mountd.

    Заметьте, что имена хостов будут получены из IP-адресов клиентов обратным поиском, так что Вы должны иметь правильно сконфигурированный сервер имен. Если Вы используете BIND, то Вы должны включить контроль спуфинга в Вашем файле host.conf. Подробно это рассмотрено в главе 6.


    имеет много новых свойств,


    BIND Version 8 имеет много новых свойств, а с ними пришел и новый синтаксис файла конфигурации. Старый named.boot

    с простыми одиночными инструкциями был заменен на

    named.conf с синтаксисом, аналогичным gated, похожий на C-синтаксис.

    Файл host.conf в BIND 8

    BIND Version 8 имеет много новых свойств, а с ними пришел и новый синтаксис файла конфигурации. Старый named.boot

    с простыми одиночными инструкциями был заменен на

    named.conf с синтаксисом, аналогичным gated, похожий на C-синтаксис.

    Новый синтаксис более сложен, но есть инструмент, который автоматизирует преобразование старого синтаксиса в новый. В пакете исходников BIND 8 есть perl-программа named-bootconf.pl , которая занимается этим преобразованием. Чтобы использовать этот инструмент, Вы должны иметь установленный интерпретатор

    perl.

    Вы должны использовать скрипт так:
    # cd /etc

    # named-bootconf.pl named.conf

    Скрипт изготовит named.conf, похожий на приведенный в примере 6-9.


    Файл named.boot


    Файл конфигурации BIND до Version 8 был очень прост. BIND Version 8 имеет совсем другую структуру файла настройки, чтобы использовать новые свойства. Имя файла настройки сменилось с /etc/named.boot на /etc/named.conf. Мы сосредоточимся на конфигурировании старой версии, потому что многие дистрибутивы ее еще используют, но рассмотрим и отличия. К тому же мы рассмотрим, как преобразовать старый файл named.conf в новый.

    Файл named.boot
    Файл конфигурации BIND до Version 8 был очень прост. BIND Version 8 имеет совсем другую структуру файла настройки, чтобы использовать новые свойства. Имя файла настройки сменилось с /etc/named.boot на /etc/named.conf. Мы сосредоточимся на конфигурировании старой версии, потому что многие дистрибутивы ее еще используют, но рассмотрим и отличия. К тому же мы рассмотрим, как преобразовать старый файл named.conf в новый.


    Файл named.boot вообще маленький и содержит мало данных, но указывает на главные файлы, содержащие зональную информацию и хранит указатели на другие серверы имен. Комментарии в файле начинаются с символов # или ; и заканчиваются в конце строки. Прежде чем мы обсудим формат named.boot более подробно, рассмотрим типовой файл для vlager в примере 6-8.


    Файлы базы данных DNS


    Главные (Master) файлы, поставляемые с named, подобно named.hosts, всегда имеют домен, связанный с ними, называемый origin. Это имя домена, указанное с параметрами cache и primary. Внутри главного файла Вы можете определить домен и связанные с ним имена файлов. Имя, заданное в файле конфигурации, рассматривается абсолютно (absolute), если оно заканчивается одной точкой, иначе оно рассматривается относительно origin. Можно и прямо сослаться на origin знаком (@).

    Файлы базы данных DNS
    Главные (Master) файлы, поставляемые с named, подобно named.hosts, всегда имеют домен, связанный с ними, называемый origin. Это имя домена, указанное с параметрами cache и primary. Внутри главного файла Вы можете определить домен и связанные с ним имена файлов. Имя, заданное в файле конфигурации, рассматривается абсолютно (absolute), если оно заканчивается одной точкой, иначе оно рассматривается относительно origin. Можно и прямо сослаться на origin знаком (@).


    Данные, содержащиеся в главном файле, разделены на записи ресурсов (resource records, RRs). RRs самые маленькие модули информации, доступные через DNS. Каждая запись ресурса имеет тип. Например, A-записи отображают имя хоста на IP-адрес, а CNAME-записи связывают псевдоним для хоста с его официальным именем. Пример 6-11 показывает главный файл named.hosts для Virtual Brewery.
    Записи ресурсов в главных файлах совместно используют общий формат:

    [domain] [ttl] [class] type rdata
    Поля отделяются пробелами или позициями табуляции. Запись может быть продолжена после перевода строки, если открывающаяся фигурная скобка стоит перед первым переводом строки и последнее поле сопровождается заключительной фигурной скобкой. Все между точкой с запятой и символом перевода строки игнорируется. Описание формата:
    domain
    Задает имя домена, к которому относится запись. Если никакое имя не задано, RR применяется к домену предыдущей RR.
    ttl
    Чтобы сервер имен обновлял информацию, RR ограничен по времени работы (ttl). Это поле определяет время в секундах, которое информация имеет силу после того, как была получена с сервера. Это десятичное число из восьми цифр.



    Если значение ttl не дано, ему присваивается значение поля minimum предыдущей SOA-записи.

    class

    Класс адреса, например, IN для адресов IP или HS для объектов в Hesiod-классе. Для TCP/IP Вы должны определить IN.

    Если никакое поле класса не задано, берется класс предшествующей RR.

    type

    Описывает тип RR. Наиболее часто встречаются типы A, SOA, PTR и NS. Следующие разделы описывают различные типы RR.

    rdata

    Хранит данные, связанные с RR. Формат этого поля зависит от типа RR. Дальше это будет описано для каждого RR отдельно.

    Дальше приведен частичный список RR, которые нужно использовать в файлах DNS.

    SOA

    Описывает зону авторитета (SOA или "Start of Authority"). Эта запись сообщает о том, что записи после SOA RR содержат авторитетную информацию для домена. Каждый главный файл, включенный в инструкцию primary, должен содержать SOA-запись для этой зоны. Данные ресурса содержат следующие поля:

    origin

    Это каноническое имя хоста основного сервера для этого домена. Обычно задается как абсолютное имя.

    contact

    Это e-mail адрес человека, ответственного за поддержание домена, со знаком "@" замененным на точки. Например, если ответственный в Virtual Brewery janet, это поле содержит janet.vbrew.com.

    serial

    Номер версии зонального файла, выраженный как единственное десятичное число. Всякий раз, когда данные меняются в зональном файле, это число должно быть увеличено.

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

    refresh

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

    retry



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

    expire

    Определяет время в секундах, после которого сервер должен отбросить все зональные данные, если невозможно было войти в контакт с основным сервером. Этот промежуток времени должен быть очень большим. Craig Hunt рекомендует 42 дня.

    minimum

    Задает по умолчанию значение ttl для исходных записей, которые точно не определяют его. Требует другого сервера, чтобы отбросить RR при проверки после определенного времени.

    Ничего нельзя сделать со временем, после которого вторичный сервер попробует модифицировать зональную информацию. Значение minimum должно быть большим, особенно для LAN, где сетевая топология почти никогда не меняется. В случае, когда единственные RR могут часто изменяться, Вы можете приписывать им различные ttl.

    A

    Ассоциирует IP-адрес с именем. Содержит адрес в dotted quad notation. Для каждого хоста должна быть только одна запись. Hostname, используемый в этой А-записи, считается служебным или каноническим hostname. Все другие hostname расцениваются как псевдонимы и должны быть отображены на канонический (canonical) hostname, используя запись CNAME. Если каноническое имя нашего хоста vlager, его и надо вписать в A-запись с его IP-адресом. Если мы связываем с этим адресом другое имя, например news, надо использовать запись CNAME, которая свяжет его с альтернативным именем.

    NS

    Указывает на главный (primary) сервер подчиненной зоны. Содержит hostname сервера.

    Вы встретите записи NS в двух ситуациях:
    • Когда Вы делегируете авторитет зависимой зоне.


  • Внутри главной зональной базы данных зависимой зоны.


  • Наборы серверов в родительских и делегированных зонах должны соответствовать друг другу, иначе опознание имен работать не будет.



    Запись NS определяет имена первичного и вторичного серверов для зоны. Эти имена должны быть разрешимы к используемому адресу. Иногда серверы не принадлежат к обслуживаемому домену, что порождает проблему: нельзя обратиться к серверу, пока не получен его адрес, но получить адрес нельзя, пока не обратимся к серверу (неоткуда). Можно конфигурировать специальные записи непосредственно на сервере имен родительской зоны. Они позволяют серверу из родительской области преобразовывать IP-адрес делегированного зонального сервера. Эти записи обычно названы приклеенными записями (glue records), поскольку они "склеивают" делегированную зону с родительской.

    CNAME

    Ассоциирует псевдоним хоста с его каноническим hostname. Каноническиий hostname указан в файле, который обеспечивает А-запись, а псевдонимы просто связаны с этим именем CNAME-записью, но не имеют собственных записей.

    PTR

    Этот тип записи используется, для того, чтобы соединить имена домена in-addr.arpa с именами хостов (hostnames). Это используется для обратного отображения IP-адресов к hostnames. Данное имя должно быть каноническим.

    MX

    Эта RR объявляет преобразователь почты (mail exchanger) для домена. Для чего надо иметь преобразователи почты, рассказано в главе 17 . Синтаксис MX-записи следующий:

    [domain] [ttl] [class] MX preference host

    Имя host объявляет преобразователь почты для домена domain. Каждый преобразователь почты имеет целое число preference , связанное с ним. Агент транспортировки почты, желающий доставить почту в домен, будет перебирать все хосты, не имеющие MX-записей в этом домене, пока все не пройдет успешно. Сначала будет проверяться тот хост, у которого самое низкое число, а затем все хосты по возрастанию числа.

    HINFO

    Эта запись предоставляет информацию относительно аппаратных средств системы и программного обеспечения. Синтаксис этой записи:

    [domain] [ttl] [class] HINFO hardware software

    Поле hardware идентифицирует аппаратные средства, используемые этим хостом. Имеются специальные соглашения, чтобы точно определить их. Список подходящих имен дан в "Assigned Numbers" (RFС 1340). Если область содержит пробелы, то ее содержимое надо заключить в двойные кавычки. Имена областей

    software используются операционной системой. Подходящее имя может быть выбрано из "Assigned Numbers" RFC.

    Запись HINFO для Intel Linux-машин может выглядеть примерно так:
    tao 36500 IN HINFO IBM-PC LINUX2.2

    А для Linux-машины на процессоре Motorola 68000 так:
    cevad 36500 IN HINFO ATARI-104ST LINUX2.0 jedd 36500 IN HINFO AMIGA-3000 LINUX2.0


    Файлы настройки Taylor


    Теперь мы вернемся к файлам конфигурации. Taylor UUCP получает информацию из следующих файлов:
    config
    Это основной файл конфигурации. Вы можете определить Ваше имя UUCP именно в нем.

    Файлы настройки Taylor
    Теперь мы вернемся к файлам конфигурации. Taylor UUCP получает информацию из следующих файлов:
    config
    Это основной файл конфигурации. Вы можете определить Ваше имя UUCP именно в нем.


    sys
    Описывает все участки сети, известные Вам. Для каждого участка он определяет имя, в какое время вызывать его, какой номер набрать, какое устройство использовать и как регистрироваться.
    port
    Описывает все доступные порты, вместе с обеспечиваемой ими скоростью и программами соединения, которые нужно использовать.
    dial
    Описывает программы номера, используемые, чтобы установить телефонное соединение.
    dialcode
    Содержит расширения для символьных номеров (dialcodes).
    call
    Содержит имя входа в систему и пароль, который нужно использовать при вызове системы.
    passwd
    Содержит имена входов в систему и пароли, используемые при регистрации. Этот файл используется только, когда uucico делает собственную проверку пароля.
    Файлы конфигурации Taylor состоят из строк, содержащих пары "ключевое слово=значение". Знак hash (#) представляет собой комментарий, действующий до конца строки. Чтобы использовать знак # просто так, Вы можете ввести его с наклонной чертой влево \#.
    Есть очень много опций, которые Вы можете изменять в этих файлах конфигурации. С их помощью вы сможете сконфигурировать модемную связь UUCP. Дополнительные разделы описывают изменения, необходимые, если Вы хотите использовать UUCP поверх TCP/IP или поверх последовательного соединения. Полное описание дается в Texinfo-документах, которые распространяются вместе с исходным текстом Taylor UUCP.
    Если Вы думаете, что сконфигурировали вашу систему UUCP полностью, можете проверить конфигурацию, используя uuchk
    (находится в /usr/lib/uucp).
    uuchk читает ваши файлы конфигурации и печатает детализированный отчет о значениях, используемых для каждой системы.


    Файлы псевдонимов


    Exim способен обработать файлы псевдонимов, совместимые с файлами псевдонимов Berkeley's sendmail. Записи в файле псевдонима могут иметь следующую форму:

    alias: recipients

    Файлы псевдонимов
    Exim способен обработать файлы псевдонимов, совместимые с файлами псевдонимов Berkeley's sendmail. Записи в файле псевдонима могут иметь следующую форму:

    alias: recipients



    recipients задает разделяемый запятыми список адресов, на которые будет заменяться псевдоним. Список получателей может быть продолжен на другой строке, если следующая строка начинается с символа пробела.
    Специальное свойство позволяет Exim обрабатывать списки адресатов, которые хранятся в отдельном файле псевдонимов: если Вы определяете :include: filename
    как получателя, Exim читает этот файл и рассматривает его содержимое как список получателей. Обработка списков рассылки будет показана в этой главе ниже, в разделе списки рассылки .
    Главный файл псевдонимов /etc/aliases. Если Вы сделаете этот файл доступным на запись для группы или прочих пользователей, Exim откажется использовать его и задержит локальные доставки. Вы можете управлять проверкой прав доступа, задавая modemask
    в редиректоре system_aliases.
    Пример файла aliases:

    # vbrew.com /etc/aliases file hostmaster: janet postmaster: janet usenet: phil # The development mailing list. development: joe, sue, mark, biff, /var/mail/log/development owner-development: joe # Announcements of general interest are mailed to all # of the staff announce: :include: /etc/Exim/staff, /var/mail/log/announce owner-announce: root # gate the ppp mailing list to a local newsgroup ppp-list: "|/usr/local/bin/gateit local.lists.ppp"
    Когда имеются имена файла и команды канала в файле псевдонима, как здесь, Exim должен знать, от имени какого пользователя ему выполнять доставку. Опция user (и, возможно, group) должна быть установлена в файле конфигурации Exim для редиректора, который обрабатывает псевдонимы, или на транспорте, который доставляет эти письма.
    Если ошибка происходит при доставке на адрес, сгенерированный из файла псевдонимов, Exim пошлет сообщение отправителю, но этого может быть мало. Опция errors_to может использоваться для определения, что сообщения об ошибке должны быть посланы в другое место, например, на локальный адрес postmaster.


    Форматы почтовых адресов


    В оригинале среды UUCP распространенная форма была path!host!user (путь!машина назначения! пользователь), где path описывал последовательность машин для достижения машины адресата (host). Эта конструкция называется записью bang path, потому что метка восклицания называется "bang". Сегодня много uucp-подобных сетей приняли стандарт RFC-822 и понимают этот тип адреса.
    Форматы почтовых адресов
    В оригинале среды UUCP распространенная форма была path!host!user (путь!машина назначения! пользователь), где path описывал последовательность машин для достижения машины адресата (host). Эта конструкция называется записью bang path, потому что метка восклицания называется "bang". Сегодня много uucp-подобных сетей приняли стандарт RFC-822 и понимают этот тип адреса.


    Другие сети имеют различные способы адресации. Decnet-сети, например, используют два двоеточия как разделитель адресов, производя адрес так: host::user. Стандарт X.400 использует совсем другую схему, описывая получателя (без связи с машиной!) набором пар свойств, например, страна и организация.
    В сети FidoNet каждый пользователь идентифицирован кодом, подобным 2:320/204.9, состоящим из четырех чисел, обозначающих: зону (2 для Европы), сеть (320 для Парижа), узел и указатель (машину индивидуального пользователя). Fidonet-адреса могут быть отображены на RFC-822; вышеупомянутое написали бы как Thomas.Quinot@p9.f204.n320.z2.fidonet.org.


    Linux network инструкция администратора


    Subnetting не только организационное деление, но часто и естественное следствие границ аппаратных средств. Знания хостов о строении данной физической сети, типа Ethernet, являются очень ограниченными: единственные хосты, с которыми они способны говорить непосредственно, те, что находятся в той же сети. Ко всем другим хостам они могут обращаться только через так называемый gateway (шлюз). Gateway, это хост, который связан с двумя или больше физическими сетями одновременно и конфигурирован так, чтобы перекачивать пакеты между ними.

    Gateways
    Subnetting не только организационное деление, но часто и естественное следствие границ аппаратных средств. Знания хостов о строении данной физической сети, типа Ethernet, являются очень ограниченными: единственные хосты, с которыми они способны говорить непосредственно, те, что находятся в той же сети. Ко всем другим хостам они могут обращаться только через так называемый gateway (шлюз). Gateway, это хост, который связан с двумя или больше физическими сетями одновременно и конфигурирован так, чтобы перекачивать пакеты между ними.


    IP достаточно легко распознать, находится ли хост в местной физической сети: различные физические сети должны принадлежать различным IP-сетям. Например, сетевой адрес 149.76.4.0 зарезервирован для хостов в локальной сети математиков. При посылке пакетов машине quark сетевое программное обеспечение на машине erdos немедленно увидит по IP-адресу 149.76.12.4, что хост места назначения находится в другой физической сети, и поэтому может быть достигнут только через gateway (допустим, машину sophus ).
    Машина sophus непосредственно связана с двумя подсетями: отделом математики и университетской магистралью. Они доступы через различные интерфейсы (eth0 и fddi0 соответственно). Но какой IP-адрес мы ей назначаем? 149.76.1.0 или 149.76.4.0?
    Ответ: оба. При работе с сервером в локальной сети математиков машина sophus использует IP-адрес 149.76.1.1, а при работе с хостом на магистрали она должна использовать 149.76.1.0 . Таким образом, gateway получает по одному IP-адресу на каждую сеть, к которой подключен. Эти адреса (вместе с netmask) привязаны к интерфейсу, через который обращаются подсети. Значит, интерфейсы и адреса sophus связаны так:

    Интерфейс Адрес
    Маска подсети
    Последняя запись определяет loopback интерфейс lo .
    Вообще, вы можете не обращать внимание на различия между адресами хоста и интерфейса. Относитесь к адресу хоста, который находится только в одной сети, как к адресу того и другого, хотя строго говоря, это Ethernet-интерфейс имеет IP-адрес. Однако, это различие ощутимо только, когда вы работаете с gateway.


    Введение в сети Локальное



    Немного истории


    Идея сетей также стара, как и вообще идея телекоммуникаций. Рассмотрим людей, живших в каменном веке, когда для обмена сообщениями между людьми использовались барабаны. Предположим пещерный человек А хочет пригласить пещерного человека Б поиграть, но тот живет слишком далеко и не может услышать барабан, в который бьет А. Каковы же могут быть действия А? Он может пешком добраться до Б, взять барабан побольше или попросить В, живущего на полпути между А и Б, передать сообщение. Позже это стали называть сетями.
    Конечно, мы далеко ушли от примитивных занятий и устройств наших предков. В наши дни мы пользуемся компьютерами которые общаются между собой посредством проводов, оптоволоконных кабелей коротких волн, и т.д., позволяющих легко обмениваться данными. Далее мы с Вами будем обсуждать способы и пути, с помощью которых это можно сделать.
    Я опишу три типа сетей в этом руководстве. Мы с вами сосредоточимся на сетях TCP/IP, потому что это наиболее популярный набор протоколов в локальных (Local Area Networks, LAN) и глобальных сетях (Wide Area Networks, WAN), типа Internet. Мы будем также изучать сети UUCP и IPX. Протокол UUCP раньше обычно использовался для транспортировки новостей и сообщений почты по dialup телефонным подключениям. Это менее распространено сегодня, но все еще полезно в ряде ситуаций. Протокол используется обычно IPX в Novell NetWare, и я опишу как использовать его, чтобы подключить вашу Linux-машину к Novell-сети. Все это протоколы работы с сетями, которые используются, чтобы передавать данные между компьютерами. Мы обсудим, как они используются и их основные принципы.
    Мы определяем сеть как совокупность компьютеров (хостов, от hosts), которые могут связаться друг с другом, часто полагаясь на услуги ряда выделенных компьютеров, передающих данные между участниками. Хостом может являться не обязательно полноценный компьютер, им вполне может быть X-терминал или интеллектуальный принтер. Маленькие скопления компьютеров также называют сайтами (sites).
    Связь невозможна без некоторого языка или кода. В компьютерных сетях эти языки коллективно упоминаются как протоколы. Однако, здесь речь идет не о письменных протоколах, а скорее о высоко формализованном коде поведения, вроде встреч на высшем уровне между главами правительств или брачной песни лебедей. Протоколы (protocols), используемые в компьютерных сетях, это только очень строгие правила для обмена сообщениями между компьютерами.


    IP Accounting Локальное


    Имеются другие применения для сетевого учета, которые не имеют никакого отношения к долларам и счетам. Если Вы управляете сервером, который предлагает ряд различных типов сетевых услуг, для Вас иногда полезно знать точно, сколько данных генерируется каждым типом услуг. Эта информация могла бы помочь Вам в принятии решений, какие аппаратные средства покупать, или сколько серверов выполнить.
    Ядро Linux обеспечивает средство, которое позволяет Вам собирать все типы полезной информации относительно сетевого трафика. Это средство названо IP accounting.


    IP Masquerade и Network


    Одной из частей этого сервиса является сетевая трансляция адресов (Network Address Translation, NAT). NAT описывает процесс изменения сетевых адресов, содержащихся в заголовках пакетов. Этот подход является идеальным для решения проблемы. Таким образом, ВСЯ сеть может реально работать с Internet через ОДИН IP-адрес!
    IP masquerading позволяет использовать частный IP-адрес в локальной сети и поручить маршрутизатору преобразование адресов с учетов сервисов и портов. Когда такой маршрутизатор получает пакет из внутренней сети, он меняет его так, будто пакет пришел на самом деле от маршрутизатора. Затем пакет отсылается в сеть. С пакетами ответов из сети выполняется то же самое, но в обратном порядке.
    Мы имеем маленькую сеть Ethernet на частных адресах, которые не могут использоваться в Internet. Сеть имеет Linux-маршрутизатор, обеспечивающий доступ к Internet. Одно из автоматизированных рабочих мест в сети (192.168.1.3) пожелало установить подключение к удаленному компьютеру 209.1.106.178 через порт 8888. Автоматизированное рабочее место направляет пакет маршрутизатору, который идентифицирует этот запрос подключения как требование услуг masquerade. Он принимает пакет, выделяет для него порт 1035, заменяет адрес и номер порта в пакете и передает пакет в сеть. Компьютер адресата полагает, что получил подключения из Linux-компьютера, который обеспечивает masquerade, и посылает ответ. Маршрутизатор после получения этого ответа находит связь в таблице masquerade и производит обратную замену адреса и порта. Локальный компьютер полагает, что он работает непосредственно с удаленным компьютером. Удаленный главный компьютер не знает ничего относительно локального компьютера вообще и полагает, что получил подключение с Linux-компьютера, обеспечивающего masquerade.
    А вот этот последний компьютер знает, что эти два компьютера говорят друг другу на каких портах, и выполняет прозрачную подстановку адресов и портов. Внешне выглядит сложно, но реальная настройка отличается простотой.


    я не могу описать все


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

    Сетевая информационная


    Поэтому фирма Sun разработала Network Information System (NIS). NIS обеспечивает универсальные средства доступа к базе данных, которая может использоваться, например, чтобы распределять информацию, содержащуюся в файлах passwd и groups на все компьютеры в Вашей сети. Точно так же Вы можете использовать NIS, чтобы распределить информацию о hostname из файла /etc/hosts на все машины в сети.
    NIS основан на RPC, включает сервер, клиентскую библиотеку и несколько административных инструментальных средств. Первоначально NIS был назван желтыми страницами или YP (Yellow Pages), это название все еще используется, чтобы обратиться к нему. К сожалению, это имя является маркой компании British Telecom, которая требовала, чтобы Sun отказалась от его использования. Тем не менее, YP остался префиксом в именах команд, относящихся к NIS таких, как ypserv и ypbind.
    Сегодня NIS доступен фактически для всех Unix, и имеются свободные реализации. BSD Net-2 был основан на публичной версии, выпущенной Sun. Код клиентской библиотеки из этого релиза долго присутствовал в Linux libc, а административные программы были перенесены в Linux Swen ThЭmmler. Сервер NIS в публичной версии отсутствовал.
    Peter Eriksson разработал новую версию под именем NYS. Она поддерживает как NIS, так и Sun NIS+. NYS не только обеспечивает набор инструментальных средств NIS и сервер, но также добавляет целый набор новых библиотечных функций, которые должны компилироваться в libc, если Вы желаете использовать этот пакет. Это включает новую схему конфигурации преобразования имен, которая заменяет текущую схему, использующую host.conf.
    GNU libc, известная как libc6, в сообществе Linux, включает модифицированную версию традиционной поддержки NIS, разработанную Thorsten Kukuk. Она поддерживает все библиотечные функции NYS и также использует расширенную схему конфигурации NYS. Вам все еще нужны инструментальные средства и сервер, но использование GNU libc избавляет от проблем с библиотеками.
    Эта глава в основном рассматривает поддержку NIS в GNU libc. Для двух других пакетов приведенные здесь инструкции тоже могут пригодиться. Подробнее о вопросе можно узнать в NIS-HOWTO, кроме того на английском языке есть книга Managing NFS and NIS (автор Hal Stern, издательство O'Reilly).


    Сетевая файловая система


    NFS предлагает ряд преимуществ:

    Данные, к которым обращаются все пользователи, могут быть сохранены на центральном хосте, клиенты будут монтировать этот каталог при начальной загрузке. Например, Вы можете сохранить все логины пользователей на одном хосте, настроить все хосты Вашей сети на монтирование каталога /home с этого хоста. Если все это установлено в паре с NIS, то пользователи смогут войти в любую систему и работать на одном множестве файлов.

  • Данные, потребляющие большие количества дискового пространства, могут быть сохранены на единственном хосте. Например, все файлы и программы, относящиеся к LaTeX и METAFONT могут быть сохранены и поддерживаться в одном месте. Мало того, что удобно ими управлять, так еще и место экономится.

  • Административно-управленческая информация может быть сохранена на одном хосте. Нет нужды использовать rcp для того, чтобы установить один и тот же файл на 20 различных машинах.
    Linux NFS в значительной степени работа Rick Sladkey, написавшего код NFS kernel и большие части NFS-сервера. Последний был создан из unfsd, NFS-сервер уровня пользователя, первоначально написанного Mark Shand, и hnfs Harris NFS-сервера, написанного Donald Becker.
    Давайте теперь посмотрим, как NFS работает: клиент может запросить смонтировать каталог с удаленного хоста в локальный каталоге тем же способом, как он может установить физическое устройство. Однако, синтаксис, используемый для этого, несколько иной. Например, чтобы смонтировать каталог /home с хоста vlager в каталог /users на машине vale, администратор использовал бы следующую команду на vale:
    eth0
    149.76.4.1 255.255.255.0
    fddi0
    149.76.1.1 255.255.255.0
    lo
    127.0.0.1 255.0.0.0

    # mount -t nfs vlager:/home /users
    Команда mount попробует соединиться с rpc.mountd, daemon монтирования на vlager через RPC. Сервер проверит, разрешается ли vale смонтировать каталог, и если все нормально, вернет file handle. Этот handle будет использоваться во всех последовательных запросах к подкаталогам /users.
    Когда кто-то обращается к файлу по NFS, kernel RPC-сайта вызовет rpc.nfsd (NFS daemon) на машине сервера. Это обращение берет handle файла, имя файла, к которому обращаются, идентификаторы группы и пользователя как параметры. Они используются в определении прав доступа к точно определенному файлу. Чтобы защититься от несанкционированного чтения или модифицирования файла, идентификаторы пользователя и группы должны быть одними и теми же на обоих хостах.



    В большинстве реализаций Unix, функциональные возможности NFS клиента и сервера выполнены как демоны kernel-уровня, которые запускаются из пространства пользователя при начальной загрузке системы. Это NFS Daemon (rpc.nfsd) на хосте сервера и Block I/O Daemon
    (biod) на клиентском хосте. Чтобы улучшить производительность, biod выполняет асинхронный ввод-вывод, используя упреждающее чтение и отложенную запись. К тому же, несколько демонов rpc.nfsd обычно запускаются совместно.
    Реализация NFS в Linux немного отличается в клиентском коде: она объединена с файловой системой VFS на уровне ядра и не требует дополнительного управления. Обычно код сервера запускается полностью в пространстве пользователя, так что управление несколькими копиями затруднено. Текущая реализация rpc.nfsd предлагает экспериментальную ограниченную поддержку нескольких серверов. Olaf Kirch разработал NFS-сервер уровня ядра, который появился в ядрах Linux 2.2 и выше. Эффективность заметно выросла. Позже мы поговорим об этом отдельно.

    IPX и файловая система


    Linux поддерживает не только протоколы TCP/IP, но также и набор протоколов, используемых операционной системой Novell Corporation's NetWare. Эти протоколы дальние родственники TCP/IP, и хотя они делают то же самое, но работают совсем иначе, что делает их несовместимыми с TCP/IP.
    Linux имеет свободное и коммерческое программное обеспечение, чтобы обеспечить поддержку интеграции с Novell.


    E-Mail Локальное оглавление


    Были изобретены различные стандарты обмена почтой. В RFC-822 описывается машинно-независимый способ обмена специальными символами в почтовых сообщениях. Много усилий было приложено для создания "мультимедийной почты", которая включает изображения и звук в сообщения почты.
    Огромное количество программ транспортировки почты было написано для систем Un*x. Одна из наиболее известных, sendmail
    университета Berkeley. Первоначальный автор, Eric Allman, теперь снова активно работает над sendmail. Подробно о Linux-версии пакета sendmail мы поговорим в главе 18.
    Linux также использует сервер Exim (автор Philip Hazel, место создания University of Cambridge). О нем мы поговорим в главе 19.
    Пакеты Exim и sendmail
    поддерживают набор файлов конфигурации, которые должны быть настроены для Вашей системы. Кроме информации, которая требуется, чтобы почта вообще работала (например, имя машины), имеется много параметров, которые могут быть настроены. Основной файл конфигурации sendmail сначала очень трудно понять. Выглядит, как будто Ваша кошка ходила по клавиатуре с нажатой клавишей SHIFT. Файлы конфигурации Exim более структурированы и проще в понимании, чем у sendmail. Но Exim не обеспечивает прямую поддержку для UUCP и обрабатывает только доменные адреса. Сегодня это не такое уж страшное ограничение. Однако, для малого сайта работа, требуемая для установки любого из них, приблизительно одна.
    В этой главе я опишу, что такое email, и с какими проблемами Вы, как администратор будете иметь дело. Глава 18 и глава 19 описывают установку и настройку sendmail и Exim. Приводимой здесь информации хватит, чтобы создать небольшой почтовый сервер, но помните, что можно провести много часов за настройкой поистине фантастического количества параметров.
    К концу текущей главы я кратко опишу настройку elm, клиента почты очень распространенного на многих Unix-подобных системах, включая Linux.
    Для получения более подробной информации относительно электронной почты в Linux, пожалуйста, обратитесь к Electronic Mail HOWTO (автор Vince Skahan), который регулярно отсылается в comp.os.linux.answers . Дистрибутивы elm, Exim
    и sendmail также поставляются с хорошей документацией. Можно также почитать RFC-документы для знакомства с теорией вопроса.


    Получение и запуск Exim


    Основной файл конфигурации обычно назван
    /etc/exim.conf или /etc/exim/config в большинстве дистрибутивов Linux, или /usr/lib/exim/config в старых версиях. Вы можете выяснить, где искать файл конфигурации командой:

    $ exim -bP configure_file
    Вам, вероятно, придется редактировать файл конфигурации, чтобы внести в него значения, специфические для Вашего сайта. В наиболее общих конфигурациях изменить надо очень мало, a рабочую конфигурацию редко придется изменять.
    По умолчанию Exim обрабатывает и доставляет всю входящую почту немедленно. Если Вы имеете значительный трафик, Вы можете настроить Exim, чтобы собирал сообщения в очередь и обрабатывал их только в определенные интервалы.
    Когда почта ходит внутри TCP/IP-сети, Exim часто выполняется в режиме daemon: при загрузке системы он вызывается из
    /etc/init.d/exim и помещает себя в фоновый режим, где ждет входящие TCP-подключения на порте SMTP (обычно порт 25). Это полезно, когда Вы ожидаете большой трафик, потому что Exim не должен запускаться для каждого входящего подключения. Альтернативно, inetd мог бы контролировать порт SMTP и порождать Exim всякий раз, когда имеется подключение на этом порте. Эта конфигурация могла бы быть полезна, когда Вы ограничены в памяти и имеете небольшой трафик почты.
    Exim имеет сложный набор параметров командной строки, многие из которых соответствуют таким же параметрам sendmail. Вместо поиска нужных параметров можно выполнять многие общие действия, вызывая соответствующие команды, например, rmail или rsmtp. Они являются символическими связями с Exim. Когда Вы выполняете одну из команд, Exim проверяет имя, которое Вы используете, чтобы вызвать его, и устанавливает соответствующие параметры самостоятельно.
    Имеются две связи с Exim, которые Вы должны иметь при любых обстоятельствах: /usr/bin/rmail и
    /usr/sbin/sendmail. Когда Вы составляете и посылаете сообщение почты пользовательским агентом, подобным elm, оно направляется по каналу к sendmail или rmail для доставки. Именно поэтому /usr/sbin/sendmail и /usr/bin/rmail должны указывать на Exim. Список получателей сообщения будет передан Exim в командной строке. То же самое случается с почтой, приходящей через UUCP. Вы можете устанавливать требуемые имена пути, чтобы указать на Exim, печатая следующее в ответ на приглашение оболочки:

    $ ln -s /usr/sbin/exim /usr/bin/rmail
    $ ln -s /usr/sbin/exim /usr/sbin/sendmail
    Если Вы хотите детально изучить настройку Exim, Вы должны ознакомиться с полной спецификацией Exim. Если она не входит в Ваш дистрибутив Linux, ее можно получить на сайте Exim по адресу
    http://www.exim.org.


    На английском языке есть прекрасная


    На английском языке есть прекрасная книга (трехтомник) о TCP/IP Internetworking with TCP/IP, автор Douglas R. Comer (издательство Prentice Hall). Более подробно сети a TCP/IP рассмотрены в книге TCP/IP Network Administration, автор Craig Hunt (издательство O'Reilly).

    C-News Локальное оглавление


    C-News хранит файлы настроек в /etc/news, большинство исполняемых модулей лежит в иерархии
    /usr/lib/news. Статьи хранятся в иерархии
    /var/spool/news. Все файлы в этих каталогах должны принадлежать пользователю news или группе news. Большинство проблем возникает из-за того, что C-News не имеет прав доступа к своим файлам. Прежде чем что-то править в них, используйте команду su, чтобы стать пользователем news. Исключением является программа setnewsids, которая используется для установки реального user ID для программ работы с новостями. Она должна принадлежать пользователю root и иметь бит setuid.
    В этой главе я подробно опишу все файлы конфигурации C-News и покажу, что именно нужно делать для поддержания пакета в рабочем состоянии.


    Internet News Локальное


    Сервер INN включает ряд компонентов, каждый с их собственными файлами конфигурации, которые мы обсудим в свое время. Конфигурация INN довольно сложна, но я рассмотрю ее детально.


    Настройка программ работы


    Один из наиболее эффективных newsreaders это:

    $ find /var/spool/news -name '[0-9]*' -exec cat {} \;|more
    Это способ, которым Unix читает новости.
    Большая часть newsreaders, однако, является намного более сложной. Они обычно предлагают полноэкранный интерфейс с отдельными уровнями для отображения всех групп, на которые пользователь подписался, для отображения краткого обзора всех статей в одной группе и для индивидуальных статей.
    В уровне newsgroup большинство newsreaders отображает список статей, показывая их темы и авторов. В больших группах невозможно для пользователя уследить за связями всех статей друг с другом, хотя возможно идентифицировать ответы на более ранние статьи.
    Тема ответа обычно повторяет тему исходной статьи, начинаясь с Re:. Дополнительно в поле References: заголовка включается message ID статьи, на которую текущая статья является ответом. Сортировка статей по теме и связям создает деревья статей, именуемые потоками (threads). Одна из задач при написании newsreader, создание эффективной схемы построения потоков (threading), потому что время, требуемое для этого, является пропорциональным квадрату числа статей.
    Здесь мы не будем детализировать то, как интерфейсы пользователя сформированы. Все newsreaders, в настоящее время доступные для Linux, имеют хорошую функцию справки, так что Вы должны исследовать их сами.
    В следующих разделах мы будем иметь дело только с административными задачами. Большинство их касается создания баз данных и учета.


    Настройка сетевого оборудования


    Во-первых, конечно, имеются непосредственно аппаратные средства, например, Ethernet-карта: пластина из эпоксидной смолы, усыпанная большим количеством крошечных чипов с номерами на них, и воткнутая в слот Вашего компьютера. Это то, что мы обычно называем устройством.
    Для того чтобы использовать Ethernet-карту, необходимы специальные функции, расположенные в ядре Linux, которые знают, как работать с этим устройством. Это так называемые драйверы устройств. Например, Linux имеет драйверы устройства для нескольких марок плат Ethernet, которые очень похожи по выполняемым функциям. Они известны как "Becker Series Drivers", и называются так по имени их автора, Donald Becker. Другой пример: драйвер D-link, который работает с адаптером пакетов D-link, присоединяемым к параллельному порту. Linux имет драйверы для разных интерфейсов сетевых карт: ISA, PCI, MCA, EISA, Parallel port, PCMCIA, не так давно появились и адаптеры на USB.
    Но что мы подразумиваем, когда говорим, что драйвер управляет устройством? Давайте вернемся к плате Ethernet, которую мы уже упоминали. Драйвер должен быть способен работать с переферией этой платы: он должен посылать команды и данные плате, в то время как плата должна передавать полученные данные драйверу.
    В PC-компьютерах эта связь устанавливается через область памяти ввода-вывода, которая является отображением регистров платы и т.п. Все команды и данные, которые ядро посылает плате, проходят через эти регистры. Память ввода-вывода описывается указанием начального адреса (base address). Типичные основные адреса для Ethernet-плат 0x280 или 0x300. Сетевые карты на интерфейсе PCI обычно получают адрес ввода-вывода автоматически.
    Обычно можно не беспокоиться о проблемах аппаратных средств, типа адреса ввода-вывода потому, что ядро делает попытку во время загрузки обнаружить местоположение платы. Это называется autoprobing
    (автопоиск), который означает, что ядро во время загрузки считывает несколько участков памяти и сравнивает считанные данные с теми, которые должны быть получены, если установлена плата Ethernet. Однако, существуют Ethernet-платы, которые ядро не может автоматически обнаружить. Это часто случается с дешевыми картами Ethernet.



    Другой параметр, который Вы могли бы сообщить ядру, interrupt request channel (канал запроса прерывания). Компоненты аппаратных средств обычно прерывают ядро, когда они нуждаются во внимании, например, когда прибыли данные или произошли другие события. В PC прерывание может происходить на одном из каналов (0, 1, 3 и до 15). Номер прерывания, назначенный компоненту аппаратных средств называется interrupt request number или IRQ.
    Как описано в главе 2, ядро обращается к устройствам через так называемый интерфейс. Интерфейсы предлагают абстрактный набор функций, которые являются стандартными для всех типов аппаратных средств, типа посылки или получения пакетов данных.
    Интерфейсы идентифицируются посредством имен. Эти имена определены внутри ядра, это файлы устройств в каталоге /dev. Если ввести команду ls -las /dev/, Вы увидите много файлов. В колонке прав доступа Вы увидите, что первым символом прав доступа здесь является не такой символ, как для обычных имен файлов. Он показывает тип интерфейса. Символ b задает блочное (block) устройство. Символ c
    задает символьное (character) устройство, которое обрабатывает данные посимвольно, а не блоками. В поле длины файла Вы увидите два числа, которые называются старшим и младшим номерами устройства.
    Каждый драйвер имеет уникальный старший номер в ядре. Каждая копия драйвера (по одной на устройство) имеет свой младший номер. Интерфейсы tty с именами /dev/tty* являются символьными, и имеют первый символ в правах доступа c”, все они имеют общий старший номер 4, но младшие номера у каждого свои: /dev/tty1 имеет младший номер 1 и /dev/tty2 имеет 2.
    Наиболее типичные имена перечислены в разделе
    "Обзор сетевых устройств в Linux". Типичные имена для интерфейсов Ethernet: eth0, eth1 и т.д. Назначение интерфейсов для определенных устройств обычно зависит от способа, которым устройства сконфигурированы. Например, первая установленная Ethernet-плата станет eth0, следующая eth1 и так далее. Исключение из этого правила: интерфейсы SLIP, которые назначаются динамически, То есть: всякий раз, когда устанавливается SLIP-связь, последовательному порту назначается интерфейс.


    При загрузке ядро показывает, какие интерфейсы установлены и устройства найдены. Вот образец типичного сообщения при загрузке:

    . . This processor honors the WP bit even when in supervisor mode./ Good. Swansea University Computer Society NET3.035 for Linux 2.0 NET3: Unix domain sockets 0.13 for Linux NET3.035. Swansea University Computer Society TCP/IP for NET3.034 IP Protocols: IGMP,ICMP, UDP, TCP Swansea University Computer Society IPX 0.34 for NET3.035 IPX Portions Copyright (c) 1995 Caldera, Inc. Serial driver version 4.13 with no serial options enabled tty00 at 0x03f8 (irq = 4) is a 16550A tty01 at 0x02f8 (irq = 3) is a 16550A CSLIP: code copyright 1989 Regents of the University of California PPP: Version 2.2.0 (dynamic channel allocation) PPP Dynamic channel allocation code copyright 1995 Caldera, Inc. PPP line discipline registered. eth0: 3c509 at 0x300 tag 1, 10baseT port, address 00 a0 24 0e e4 e0,/ IRQ 10. 3c509.c:1.12 6/4/97 becker@cesdis.gsfc.nasa.gov Linux Version 2.0.32 (root@perf) (gcc Version 2.7.2.1) #1 Tue Oct 21 15:30:44 EST 1997 . .
    Этот пример показывает, что ядро построено с поддержкой сетевого протокола TCP/IP и включает драйверы для SLIP, CSLIP и PPP. Третья строка снизу говорит об обнаружении платы 3C509 Ethernet и установке ее интерфейса eth0. Если у Вас другой тип сетевой карты, будет выведена соответствующая строка, обычно с ее названием. Например, для адаптера D-Link используется имя dl0. А вот если сетевая карта есть, а сообщения о ней нет, тогда плохо дело. Ядро не нашло карту при загрузке. Эта ситуация будет рассмотрена позже.

    Настройка сети TCP/IP


    Большинство работ, охваченных этой главой, Вы должны сделать только один раз. Впоследствии, Вы будете изменять конфигурационные файлы только в случае добавления новой системы к сети, или когда Вы повторно полностью переконфигурируете систему. Некоторые из команд конфигурирования TCP/IP, однако, должны выполнятся каждый раз, когда загружается система. Это обычно делают скрипты /etc/rc*.
    Обычно специфическая сетевая часть загрузки системы содержится в скрипте rc.net или rc.inet. Иногда Вы увидете два скрипта rc.inet1 и rc.inet2. В таких случаях вышеупомянутый скрипт инициализирует сетевую часть ядра в то время, как последние запускают основные сетевые приложения. Дальше я буду твердо придерживаться этой концепции. В новых дистрибутивах скрипты семейства rc структурированы иначе: они лежат в каталоге
    /etc/init.d/ (или /etc/rc.d/init.d/).


    TCP/IP Firewall Локальное


    Недобросовестный человек может предполагать пароли системы или эксплуатировать ошибки и особое поведение некоторых программ, чтобы получить доступ к Вашей машине. А получив доступ, сделать можно немало. Есть люди, которые изучают и меняют систему, просто из любви к совершенству. Как ни странно, даже в России в наше время, таких хватает. Но есть и хулиганы. Есть люди, которым очень нужна информация с Вашей машины, и тут никогда не знаешь, что им может понадобиться.
    Самый безопасный способ избежать такого широко распространенного явления состоит в том, чтобы предотвратить получение несанкционированного сетевого доступа к машине. Именно этим занимается firewall.

    Построение безопасного firewall является искусством. Это включает хорошее понимание технологии, но одинаково важно понимание философии проектов firewall. Я при всем желании не смогу изложить в этой книге все по этому вопросу: он слишком велик. Возможно, когда-нибудь я посвящу ему отдельную книгу. Я настоятельно рекомендую ознакомиться с дополнительной литературой по этому вопросу.
    Увы, на русском языке такой литературы до обидного мало. Есть очень хорошие книги на английском и, возможно, они со временем выйдут и на русском. Назову основные:
    Building Internet Firewalls
    Авторы: D. Chapman и E. Zwicky (издательство O'Reilly). Это полная энциклопедия по созданию и использованию firewall для Unix, Linux и даже Windows NT. Рассмотрены также вопросы о том, как настроить службы Internet для работы через firewall.
    Firewalls and Internet Security
    Авторы: W. Cheswick и S. Bellovin (издательство Addison Wesley). Книга скорее о философии построения firewall, чем о конкретных программах, но в ней есть немало ценного по реализации этой философии.
    В этой главе я ориентируюсь на специфичные для Linux технические проблемы и методы. В конце главы я приведу пример конфигурации firewall, который является неплохой базой для Ваших опытов.


    Глобальные опции elm


    В глобальном файле elm.rc, Вы должны установить опции, которые относятся к имени Вашей машины. Например, в Virtual Brewery у пользователя vlager файл содержал бы следующее:
    Предупреждение

    # # The local hostname hostname = vlager # # Domain name hostdomain = .vbrew.com # # Fully qualified domain name hostfullname = vlager.vbrew.com
    Глобальные опции elm
    В глобальном файле elm.rc, Вы должны установить опции, которые относятся к имени Вашей машины. Например, в Virtual Brewery у пользователя vlager файл содержал бы следующее:

    # # The local hostname hostname = vlager # # Domain name hostdomain = .vbrew.com # # Fully qualified domain name hostfullname = vlager.vbrew.com



    Этот набор опций ориентирует elm относительно имени локальной машины. Хотя эта информация редко используется, Вы должны установить эти опции. Заметьте, что эти опции не будут работать в частном файле elmrc.


    ICMP-расширения: использование с опциями -m icmp -p icmp


    - -icmp-type [!] typename
    Указывает подходящие этому правилу сообщения ICMP. Типы сообщений можно задать номерами или именами. Допустимые имена: echo-request, echo-reply, source-quench, time-exceeded, destination-unreachable, network-unreachable, host-unreachable, protocol-unreachable и port-unreachable.

    ICMP-расширения: использование с опциями -m icmp -p icmp
    - -icmp-type [!] typename
    Указывает подходящие этому правилу сообщения ICMP. Типы сообщений можно задать номерами или именами. Допустимые имена: echo-request, echo-reply, source-quench, time-exceeded, destination-unreachable, network-unreachable, host-unreachable, protocol-unreachable и port-unreachable.




    Имена переменных


    dip понимает только предопределенное множество переменных. Имя переменной всегда начинается с символа доллара и должно быть написано в нижнем регистре.

    Имена переменных
    dip понимает только предопределенное множество переменных. Имя переменной всегда начинается с символа доллара и должно быть написано в нижнем регистре.


    Переменные $local и $locip хранят имя и IP-адрес локальной машины. При сохранении в $local канонического имени, dip автоматически преобразует его в IP-адрес и запишет результат в переменную $locip. То же самое, но в обратном порядке произойдет при записи в $locip : dip получит имя для этого адреса и запишет его в переменную $local.
    Переменные $remote и $rmtip делают то же самое для удаленной машины. $mtu хранит значение MTU для связи.
    Эти пять переменных единственые, которые могут быть заданы непосредственно, используя команду get. Другие переменные могут быть установлены только через соответствующие команды, но можно использовать и операторы print ; это $modem, $port и $speed .
    $errlvl переменная, через которую Вы можете обращаться к результату последней выполненой команды. Уровень ошибки 0 указывает на успех, в то время, как ненулевое значение, обозначает ошибку.


    Имена сайтов


    Как и при работе с сетями TCP/IP, Ваш компьютер должен иметь имя для UUCP-сетей. Пока Вы просто хотите использовать UUCP для передачи файлов, это имя не должно удовлетворять никаким стандартам. Единственое ограничение в том, что имя не должно быть больше, чем 7 символов, чтобы не путать машину с файловыми системами, которые накладывают ограничения на имя файла.

    Имена сайтов
    Как и при работе с сетями TCP/IP, Ваш компьютер должен иметь имя для UUCP-сетей. Пока Вы просто хотите использовать UUCP для передачи файлов, это имя не должно удовлетворять никаким стандартам. Единственое ограничение в том, что имя не должно быть больше, чем 7 символов, чтобы не путать машину с файловыми системами, которые накладывают ограничения на имя файла.


    Однако, если Вы используете UUCP для почты или новостей, Вы должны подумать о наличии имени, зарегистрированного в UUCP Mapping project. UUCP Mapping project описан в главе 17. Даже если Вы делите домен с кем-то, Вы можете получить официальное имя UUCP для своего участка сети.
    Часто люди выбирают свое UUCP имя так, чтобы соответствовать первому компоненту имени домена. Предположим, что адрес Вашего домена swim.twobirds.com, тогда имя главной машины UUCP было бы swim. Обычно именно так и бывает. Конечно, Вы можете также использовать любое UUCP имя.
    Однако, не стоит использовать имя в адресе почты, пока Вы не зарегистрировали его как Ваше официальное имя UUCP. В лучшем случае, почта на незарегистрированную машину UUCP отправится в мусорную корзину. Если Вы используете имя, уже присвоенное некоторому другому сайту, эта почта не будет направлена ему и причинит администратору почты много проблем.
    По умолчанию, набор программ UUCP использует hostname как имя UUCP. Это имя обычно устанавливается в скрипте rc и хранится в /etc/hostname. Если ваше имя UUCP отлично от того, что Вы устанавливаете в качестве имени своей машины, Вы должны использовать опцию hostname в файле config, чтобы сообщить uucico о Вашем имени UUCP. Это будет рассмотрено чуть позже.


    Имя системы


    Команда system задает имя удаленной системы. Вы должны определить правильное имя удаленной системы, не псевдоним, потому что uucico сравнит это значение с ответом системы.

    Имя системы
    Команда system задает имя удаленной системы. Вы должны определить правильное имя удаленной системы, не псевдоним, потому что uucico сравнит это значение с ответом системы.


    Каждое имя системы может появляться только один раз. Если Вы хотите использовать несколько наборов конфигураций для той же самой системы (различные номера телефонов, которые uucico должен пробовать по очереди), Вы можете определять альтернативы (alternates). Альтернативы описаны ниже.


    Интерфейс PLIP


    При использовании PLIP-связи для соединения двух машин существуют лишь небольшие отличия от того, что вы должны сделать при использовании Ethernet. Вышеупомянутая связь называется point-to-point (точка с точкой), потому что она соединяет только два хоста ("точки") в противоположность широковещательным (broadcast) сетям.
    Интерфейс PLIP
    При использовании PLIP-связи для соединения двух машин существуют лишь небольшие отличия от того, что вы должны сделать при использовании Ethernet. Вышеупомянутая связь называется point-to-point (точка с точкой), потому что она соединяет только два хоста ("точки") в противоположность широковещательным (broadcast) сетям.


    PLIP предоставляет мобильную связь между машинами. Как пример рассмотрим laptop-компьютер служащего Virtual Brewery, который связан с vlager через PLIP. Laptop назван vlite и имеет только один параллельный порт. Во время загрузки, этот порт будет регистрироваться как
    plip1. Чтобы сформировать связь, Вы должны отконфигурировать интерфейс plip1, используя следующие команды:

    # ifconfig plip1 vlite pointopoint vlager
    # route add default gw vlager
    Первая команда конфигурирует интерфейс, сообщая ядру, что это point-to-point связь с удаленной машиной vlager . Вторая устанавливает маршрут по умолчанию, используя vlager как gateway. На vlager подобная команда
    ifconfig необходима, чтобы активизировать связь (route здесь не нужен):

    # ifconfig plip1 vlager pointopoint vlite
    Интересно, что интерфейс plip1 на vlager не обязан иметь отдельный IP-адрес, но если хочется, можете дать ему адрес 172.16.1.1 .
    Теперь мы отконфигурировали маршрутизацию от laptop до сети Brewery, но все еще отсутствует маршрут от любого из хостов Brewery к vlite. Очень тяжелый путь: добавлять определенный маршрут к таблице маршрутизации каждого хоста, который объявит vlager как gateway к vlite:

    # route add vlite gw vlager
    Гораздо лучше иметь дело с временными маршрутами, используя динамическую маршрутизацию. Один из способов сделать это состoит в запуске демона gated, который вы должны установить на каждом хосте в сети, чтобы он распространял информацию о маршрутах динамически. Самый легкий путь, однако, состoит в том, чтобы использовать
    proxy ARP. С proxy ARP vlager будет отвечать на любой ARP-запрос для vlite, посылая собственный Ethernet-адрес. Результат: все пакеты для vlite будут закачивать на vlager, который будет передавать их на laptop. Мы будем возвращаться к proxy ARP позже.
    Текущие версии net-tools имеют утилиту plipconfig, которая позволяет настроить параметры PLIP timing. IRQ для порта принтера можно задать командой
    ifconfig.


    Интерфейсы Ethernet


    Конфигурирование интерфейса Ethernet, идет почти также, как и интерфейса loopback, он только требует больше параметров когда вы используете подсети.

    Интерфейсы Ethernet
    Конфигурирование интерфейса Ethernet, идет почти также, как и интерфейса loopback, он только требует больше параметров когда вы используете подсети.


    В Virtual Brewery мы с вами разбивали на подсети IP-сеть, которая была первоначально класса B на сети калсса С. При установке интерфейса для нее требовалось написать:

    # ifconfig eth0 vstout netmask 255.255.255.0
    Эта запись назначает интерфейсу eth0 IP-адрес vstout (172.16.1.2 ). Если бы мы опустили netmask, ifconfig вывел бы netmask из класса сети, что привело бы к неправильной маске подсети 255.255.0.0. Теперь быстренько проверим:

    # ifconfig eth0
    eth0 Link encap 10Mps Ethernet HWaddr 00:00:C0:90:B3:42 inet addr 172.16.1.2 Bcast 172.16.1.255 Mask 255.255.255.0 UP BROADCAST RUNNING MTU 1500 Metric 1 RX packets 0 errors 0 dropped 0 overrun 0 TX packets 0 errors 0 dropped 0 overrun 0
    Вы можете видеть, что ifconfig автоматически устанавливает широковещательный адрес (поле Bcast ), равный обычному значению, которое является номером сети с битами хоста, равными 1. Также размер передаваемых сообщений (для данного интерфейса устанавливается максимальный размер Ethernet-пакета) был установлен равным максимальному значению в 1500 байт. Все эти значения могут быть исправлены специальными опциями, которые описаны ниже.
    Также как в случае с loopback, вы должны теперь установить маршрутизационную запись, которая сообщает ядру о сети, которая может быть достигнута через eth0. Для Virtual Brewery, это:

    # route add -net 172.16.1.0
    Сначала это смотрится как волшебство, потому что, действительно, не очевидно, как route обнаруживает, какие сети с какими интерфейсами связаны. Однако, уловка довольно проста: ядро проверяет все интерфейсы, которые были отконфигурированы, и сравнивает адрес места назначения (в этом случае (172.16.1.0) с сетевой частью адреса интерфейса. Единственный интерфейс, который соответствует данному адресу, eth0.



    Теперь подумаем, что такое опция -net? Она используется, потому что route может работать с маршрутами к сетям и с маршрутам к отдельным машинам (как вы видели в localhost). Когда route получает адрес в стандарте с точками, он пытается предположить, принадлежит ли этот адрес сети или машине, проверяя биты части машины. Если эта часть адреса ноль, route предполагает, что он обозначает сеть, в противном случае, что адрес машины. Поэтому route решил бы, что 172.16.1.0 означает адрес машины: он не может знать, что мы используем подсети. Поэтому мы должны явно сообщить, что это адрес сети, что делается опцией -net.

    Конечно, вышеупомянутая команда немного утомительна для набора и дает много ошибок. Более удобный подход: использование сетевых имен, которые определены в /etc/networks.. Это делает команду более удобочитаемой. Даже опция -net может быть опущена, потому что route теперь знает, что 172.16.1.0 обозначает сеть:

    # route add brew-net

    Теперь, когда вы закончили основные шаги конфигурации, надо удостовериться, что Ваш Ethernet-интерфейс, действительно, работает правильно. Выберите машину в вашей Ethernet-сети, например, vlager, и наберите:

    # ping vlager

    PING vlager: 64 byte packets 64 bytes from 172.16.1.1: icmp_seq=0. time=11. ms 64 bytes from 172.16.1.1: icmp_seq=1. time=7. ms 64 bytes from 172.16.1.1: icmp_seq=2. time=12. ms 64 bytes from 172.16.1.1: icmp_seq=3. time=3. ms ^C ----vstout.vbrew.com PING Statistics---- 4 packets transmitted, 4 packets received, 0 round-trip (ms) min/avg/max = 3/8/12

    Если вы не видите подобный вывод, значит что-то не так. Если вы сталкиваетесь с необычным количеством потерянных пакетов, это означает проблему аппаратных средств, типа плохого или отсутствующего терминатора и т.д.. Если вы не получаете пакеты вообще, вы должны проверить конфигурацию интерфейса с помощью netstat (описана ниже). Пакетная статистика, показанная ifconfig, должна сообщить, были ли вообще посланы какие-то пакеты. Если у вас есть доступ к удаленной машине, вы должны сходить к той машине и проверить там статистику интерфейса. Таким образом, вы можете точно решить, где пропали пакеты. Кроме того, вы должны посмотреть маршрутизационную информацию с помощью route, чтобы выяснить, имеют ли обе машины правильные записи в таблице маршрутов. route печатает всю таблицу маршрутизации, если его вызвать без аргументов (опция (-n указывает печа- тать вместо адресов имена машин):

    # route -n

    Kernel routing table Destination Gateway Genmask Flags Metric Ref Use Iface 127.0.0.1 * 255.255.255.255 UH 1 0 112 lo 172.16.1.0 * 255.255.255.0 U 1 0 10 eth0

    Детальное значение этих полей объясняется ниже. Колонка Flags содержит список флагов, устанавливаемых для каждого интерфейса. U всегда установлен для активных интерфейсов, а H сообщает, что адрес места назначения обозначает машину (хост). Если флаг H установлен для маршрута, который вы считаете сетевым маршрутом, тогда вы должны использовать опцию -net с командой route. Чтобы проверить, используется ли маршрут, который вы ввели, посмотрите на поле Use, которое находится между двумя сообщениями ping.


    Интерфейсы SLIP и PPP


    Хотя SLIP и PPP всего лишь простые point-to-point связи, подобные PLIP-соединениям, о них есть дополнительная информация. Обычно при установке SLIP-соединения требуется дозвониться до удаленной машины через модем и отрегулировать последовательную линию для SLIP. PPP используется подобным образом. Инструменты, требуемые для создания SLIP или PPP-связи, будут описаны в главе 7 и главе 8.
    Интерфейсы SLIP и PPP
    Хотя SLIP и PPP всего лишь простые point-to-point связи, подобные PLIP-соединениям, о них есть дополнительная информация. Обычно при установке SLIP-соединения требуется дозвониться до удаленной машины через модем и отрегулировать последовательную линию для SLIP. PPP используется подобным образом. Инструменты, требуемые для создания SLIP или PPP-связи, будут описаны в главе 7 и главе 8.




    Internet Control Message Protocol


    ICMP-протокол обеспечивает несколько различных сообщений, многие из которых имеют дело с условиями ошибки. Однако, имеется очень интересное сообщение, названное Redirect. Оно генерируется модулем маршрутизации, когда он обнаруживает, что другой компьютер использует его как шлюз, несмотря на наличие намного более короткого маршрута. Например, после загрузки таблица маршрутизации sophus не была завершена. Она могла бы содержать маршруты к сети Mathematics network, к каналу FDDI и заданному по умолчанию маршруту, указывающему на Groucho Computing Center (gcc1). Таким образом, пакеты для quark были бы посланы gcc1, а не niels, шлюзу кафедры физики. При получении такого пакета gcc1 обратит внимание, что это неправильная маршрутизация и передаст пакет на niels , одновременно возвращая сообщение ICMP Redirect на sophus.
    Это, кажется, очень умный способ избежать настройки маршрутов, кроме базисных, вручную. Однако помните, что доверять сообщениям Redirect протоколов RIP и ICMP можно не всегда! ICMP Redirect и RIP не дают возможности проверить подлинность информации. Эта ситуация позволяет злонамеренному человеку сделать очень многое. Код работы с сетями Linux обрабатывает сообщения Network Redirect, как будто они были сообщениями Host Redirects. Это минимизирует повреждение при нападении, ограничивая их одной машиной, а не целой сетью.


    IP-адреса Как сказано в главе


    Для более легкого чтения, IP-адреса разбивают на четыре 8-битовых числа, названных octets. Например, quark.physics.groucho.edu имеет IP-адрес 0x954C0C04, который записывается как 149.76.12.4. Этот формат часто называют dotted quad notation (запись с точками-разделителями).
    Другая причина такой записи в том, что IP-адреса разбиваются на адрес сети (network), который написан в первых octets, и адрес машины (хоста, host), который является остатком. При обращении к NIC за адресами, вы не получаете адрес для каждого отдельного хоста, который вы планируете поставить. Вместо этого Вам дают сетевой адрес и позволяют назначать машинам любые IP-адреса из заданного таким образом диапазона.
    В зависимости от размера сети машинная часть адреса может быть меньшей или большей. В зависимости от различных потребностей имеются несколько классов сетей, определяющих различное разбиение IP-адресов:
    Класс A
    Класс A включает сети от 1.0.0.0 до 127.0.0.0. Сетевой адрес содержится в первом octet, что предусматривает 24-разрядную хост-часть, сеть приблизительно из 1.6 миллиона хостов. Большая.
    Класс B
    Класс B содержит сети от 128.0.0.0 до 191.255.0.0. Сетевой адрес находится в первых двух octets. Это предполагает 16320 подсетей с 65024 хостами в каждой.
    Класс C
    Класс C включает диапазон сетей от 192.0.0.0 до 223.255.255.0. Адрес сети содержится в первых трех octets. Это предполагает почти 2 миллиона подсетей по 254 хоста каждая.
    Классы D, E и F
    Адреса в диапазоне от 224.0.0.0 до 254.0.0.0 являются экспериментальными или сохранены для будущего использования и не определяют какую-либо сеть. IP Multicast, сервис, который позволяет транслировать в internet данные из одной точки на несколько, может быть связан с этим диапазоном.
    Если мы вернемся к примеру в главе 1, увидим, что 149.76.12.4, адрес quark, относится к хосту 12.4 в сети 149.76.0.0 класса B.
    Вы можете заметить, что в вышеупомянутом списке для каждого octet в части хоста возможны не все значения. Это потому, что адреса хоста со всеми octets равными 0 и 255 сохранены для специальных целей. Адрес, в котором все биты хост-части выставлены в 0, относится ко всей сети, а адрес, где все биты хост-части выставлены в 1, назван



    broadcast address (широковещательным адресом). Он относится ко всем хостам указанной сети. Таким образом, 149.76.255.255 не существующий адрес хоста, он относится ко всем хостам сети 149.76.0.0.

    Имеются еще два зарезервированных адреса: 0.0.0.0 и 127.0.0.0. Первый назван default route (путь по умолчанию), последний loopback address (кольцевой адрес). default route используется при маршрутизации IP-пакетов, с которым мы будет иметь дело чуть позже.

    Сеть 127.0.0.0 сохранена для работы IP внутри хоста. Обычно адрес 127.0.0.1 будет назначен специальному интерфейсу на вашем хосте, так называемому интерфейсу loopback interface, который действует подобно кольцу. Любой IP-пакет, переданный ему от TCP или UDP, будет возвращен к ним, как будто он только что прибыл из некоторой сети. Это позволяет тестировать сетевое программное обеспечение без использования реальной сети. Также он полезен, когда вы хотите использовать сетевое программное обеспечение на автономном компьютере (в терминах сети, хосте). Например, большое количество UUCP-участков не имеют IP связи вообще, но все же хотят управлять системой новостей INN. Однако для правильной работы под Linux, INN требует интерфейса loopback.

    Некоторые диапазоны адресов каждого из сетевых классов были отложены и обозначены “reserved” или “private”. Эти адреса зарезервированы для использования частными сетями и не направлены на Internet. Они обычно используются организациями, формирующими их собственный intranet (локальные сети с архитектурой и логикой Internet), но даже маленькие сети часто находят их полезными. Зарезервированные сетевые адреса показаны в таблице 2-1 .


    IP Firewall Chains (ядра 2.2)


    IP Firewall Chains разработан Paul Russell и Michael Neuling. Paul описал IP Firewall Chains в IPCHAINS-HOWTO.
    IP Firewall Chains позволяет Вам разрабатывать классы правил firewall, к которым Вы можете затем добавлять и удалять компьютеры или сети. Такой подход может улучшать эффективность firewall в конфигурациях, в которых имеется большое количество правил.
    IP Firewall Chains поддерживается серией ядер 2.2 и доступен как патч для серии 2.0.* ядер. HOWTO описывает, где получить патч и дает большое количество полезных советов относительно того, как использовать утилиту конфигурации ipchains.


    IP-псевдонимы (IP-Alias)


    Новые ядра поддерживают свойство, которое может полностью заменить dummy-интерфейс, и имеет другие полезные функции. IP Alias позволяет конфигурировать много IP-адресов на одно физическое устройство. В самом простом случае Вы могли бы копировать функцию dummy-интерфейса, конфигурируя адрес как псевдоним для loopback, и полностью избежать применения интерфейса dummy. В более сложных случаях Вы могли бы конфигурировать ваш компьютер, чтобы он выглядел как несколько машин с разными IP-адресами. Эта конфигурация иногда называется "Virtual Hosting".
    IP-псевдонимы (IP-Alias)
    Новые ядра поддерживают свойство, которое может полностью заменить dummy-интерфейс, и имеет другие полезные функции. IP Alias позволяет конфигурировать много IP-адресов на одно физическое устройство. В самом простом случае Вы могли бы копировать функцию dummy-интерфейса, конфигурируя адрес как псевдоним для loopback, и полностью избежать применения интерфейса dummy. В более сложных случаях Вы могли бы конфигурировать ваш компьютер, чтобы он выглядел как несколько машин с разными IP-адресами. Эта конфигурация иногда называется "Virtual Hosting".


    Чтобы конфигурировать псевдоним для интерфейса, вы должны сначала гарантировать что ядро компилировалось с поддержкой для IP Alias (проверьте файл /proc/net/ip_alias, если его нет, ядро придется перестроить). Конфигурация IP-псевдонима фактически идентична конфигурированию реального сетевого устройства. Вы используете специальное имя, чтобы указать, что это псевдоним. Например:

    # ifconfig lo:0 172.16.1.1
    Эта команда создаст псевдоним для кольцевого интерфейса с адресом 172.16.1.1. IP aliases используют переменную n для каждого устройства, где "n" является целым числом. В нашем примере сетевое устройство, на котором мы создаем псевдоним, lo и создается псевдоним номер ноль для него. Этим путем одно физическое устройство может поддерживать ряд псевдонимов.
    Каждый псевдоним может обрабатываться как отдельное устройство, однако, оно будет совместно использовать аппаратные средства с другим интерфейсом.


    IP-сети


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

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


    IP-сети построены подобным образом. Весь Inetrnet состоит из набора сетей, названных автономными системами (autonomous systems). Каждая такая система производит всю маршрутизацию между своими членами так, что задача посылки пакетов сведена к обнаружению пути к сети с требуемым хостом. Это означает, что как только пакет вручен любому хосту, который находится в нужной сети, обработка выполняется исключительно данной сетью.


    Использование dip Хотелось бы


    dip это сокращение от Dialup IP. Она написана Fred van Kempen, и исправлена большим количеством людей. На сегодняшний день с большинством дистрибутивов Linux поставляется версия dip337p-uri, которая также доступна на FTP-архиве metalab.unc.edu.
    dip обеспечивает интерпретатор простого языка, который обрабатывает модем, переводя линию в SLIP-режим и конфигурируя сеть. Этот язык довольно примитивен и ограничен, но вполне подходит для большинства случаев.
    Чтобы сконфигурировать SLIP-интерфейс, dip требует привелегий root. Соблазнительно сделать dip
    setuid к root, чтобы Все пользователи могли соединиться с некоторым сервером SLIP без необходимости предоставления им root-доступа. Это очень опасно, потому что при установке фиктивных интерфейсов и заданных по умолчанию маршрутов dip
    может разрушить маршрутизацию в Вашей сети. Даже еще хуже, это даст пользователям приоритет на подсоединение к любым SLIP-серверам и начать атаку на Вашу сеть. Так, если Вы хотите позволить Вашим пользователям запустить SLIP-связь, напишите маленькие программки для каждого предполагаемого SLIP-сервера и вызовите dip с соответствующим скриптом, который установит связь. Эти программы могут быть безопасно сделаны setuid root. В качестве альтерантивы предлагается команда sudo.


    Использование ipchains


    Имеются два пути, которыми Вы можете использовать
    ipchains. Первый путь состоит в том, чтобы использовать скрипт ipfwadm-wrapper, который является заменой ipfwadm, управляющий программой
    ipchains в фоновом режиме. Если Вы хотите сделать именно это, то не читайте дальнейшее описание, а вернитесь к описанию
    ipfwadm, и подставьте везде ipfwadm-wrapper. Это будет работать, но нет никакой гарантии, что скрипт будет поддерживаться, и Вы не будете пользоваться каким-либо из продвинутых свойств, которые может предложить IP Firewall Chains.

    Использование ipchains
    Имеются два пути, которыми Вы можете использовать
    ipchains. Первый путь состоит в том, чтобы использовать скрипт ipfwadm-wrapper, который является заменой ipfwadm, управляющий программой
    ipchains в фоновом режиме. Если Вы хотите сделать именно это, то не читайте дальнейшее описание, а вернитесь к описанию
    ipfwadm, и подставьте везде ipfwadm-wrapper. Это будет работать, но нет никакой гарантии, что скрипт будет поддерживаться, и Вы не будете пользоваться каким-либо из продвинутых свойств, которые может предложить IP Firewall Chains.


    Второй способ использовать ipchains состоит в том, чтобы узнать новый синтаксис и изменить любые существующие конфигурации. Вы должны использовать новый синтаксис вместо старого. При ближайшем изучении выяснится, что при переписывании конфигурации, ее можно оптимизировать. Синтаксис в ipchains проще, чем был у ipfwadm, так что это хорошая идея.
    ipfwadm управлял тремя наборами (цепочками) правил с целью конфигурирования firewall. В IP Firewall Chains Вы можете создавать произвольные наборы (цепочки), связанные друг с другом, но имеется три предопределенных набора. Это прямые эквиваленты тех, которые использовались в ipfwadm, за исключением того, что они имеют имена: input, forward и output.
    Давайте сначала рассматривать общий синтаксис команды
    ipchains, затем рассмотрим, как использовать ipchains вместо ipfwadm без проблем с каким-либо из продвинутых свойств формирования цепочки. Будем делать это, повторно рассматривая предыдущие примеры.


    Использование iptables


    Утилита iptables используется для настройки правил netfilter. Синтаксис заимствован у ipchains, но имеет важное отличие: он расширяемый. Это означает, что функциональные возможности могут быть расширены без перекомпиляции пакета. Для этого используются разделяемые библиотеки. Имеются стандартные расширения, ряд которых мы сейчас изучим.

    Использование iptables
    Утилита iptables используется для настройки правил netfilter. Синтаксис заимствован у ipchains, но имеет важное отличие: он расширяемый. Это означает, что функциональные возможности могут быть расширены без перекомпиляции пакета. Для этого используются разделяемые библиотеки. Имеются стандартные расширения, ряд которых мы сейчас изучим.


    Перед использованием команды iptables Вы должны загрузить модуль ядра netfilter, который позволяет ей работать. Проще всего сделать это командой modprobe:

    # modprobe ip_tables
    Команда iptables используется для настройки IP filter и Network Address Translation. Для этого используются две таблицы: filter и nat. Если не задана опция -t, используется таблица filter. Доступны пять встроенных цепочек (наборов правил): INPUT и FORWARD для таблицы filter, PREROUTING и POSTROUTING
    для таблицы nat и OUTPUT
    для всех таблиц. В этой главе я расскажу только о таблице
    filter, таблица nat описана в главе 11.
    Синтаксис команд iptables в общем виде таков:

    iptables command rule-specification extensions
    Теперь мы будем рассмотрим некоторые параметры подробно, после чего перейдем к примерам.


    Использование nprint с Line Printer Daemon


    Раньше я упомянул, что опция -c программы ncpmount полезна для печати.

    Использование nprint с Line Printer Daemon
    Раньше я упомянул, что опция -c программы ncpmount полезна для печати.


    Linux обычно использует программное обеспечение принтера BSD-стиля. Line printer daemon (lpd) является демоном, который проверяет локальный каталог буфера в поисках поставленных в очередь работ, которые должны быть напечатаны. Пакет lpd читает имя принтера и некоторые другие параметры из указанного файла форматирования и пишет данные на принтер, факультативно передавая данные через фильтр, чтобы трансформировать их или управлять печатью.
    Демон lpd использует простую базу данных, названную /etc/printcap, чтобы сохранить конфигурацию принтера, включая то, какие фильтры должны выполняться. lpd обычно выполняется с правами специального системного пользователя lp.
    Вы могли бы конфигурировать nprint как фильтр для lpd, который позволяет пользователям Вашей Linux-машины выводить данные непосредственно на удаленные принтеры, которые установлены на сервере NetWare. Чтобы сделать это, пользователь lp должен быть способен писать запросы на NCP-подключение к серверу.
    Простой способ достичь этого: определить lp как владельца подключения, установленного другим пользователем. Полный пример того, как устанавливать Linux-печать, чтобы обработать задания по выводу на печать клиентов NetWare состоит из трех шагов:

    Написать скрипт-обертку (wrapper script).
    Файл /etc/printcap не разрешает передавать параметры фильтрам. Следовательно, Вы должны написать короткий скрипт, вызывающий команду, которую Вы хотите выполнить, с нужными параметрами:

    #!/bin/sh # p2pslaser - simple script to redirect stdin to the # PSLASER queue on the REDS01 server # /usr/bin/nprint -S REDS01 -U stuart -q PSLASER #
    Сохраните его в файле /usr/local/bin/p2pslaser.
  • Введите новую запись в /etc/printcap.

  • Мы будем должны конфигурировать p2pslaser как выходной фильтр в /etc/printcap. Это делается так:

    pslaser|Postscript Laser Printer hosted by NetWare server:\ :lp=/dev/null:\ :sd=/var/spool/lpd/pslaser:\ :if=/usr/local/bin/p2pslaser:\ :af=/var/log/lp-acct:\ :lf=/var/log/lp-errs:\ :pl#66:\ :pw#80:\ :pc#150:\ :mx#0:\ :sh:
  • Добавьте опцию -c к команде ncpmount.


  • ncpmount -S REDS01 .... -c lp ....
    Наш локальный пользователь stuart должен определить пользователя lp как владельца подключения, когда он устанавливает связь с сервером NetWare.
    Теперь любой пользователь Linux может указать pslaser как имя принтера при вызове lp. Задание по выводу на печать будет послано на указанный сервер NetWare и помещено в очередь для печати.


    Использование прямого соединения


    Допустим, что Вы используете прямое соединение своей системы vstout с системой tiny. Как и в случае с модемом, Вы должны описать вход в систему в файле sys. Команда port
    идентифицирует последовательный порт tiny.

    system tiny time Any port direct1 speed 38400 chat ogin: cathcart word: catch22

    Использование прямого соединения
    Допустим, что Вы используете прямое соединение своей системы vstout с системой tiny. Как и в случае с модемом, Вы должны описать вход в систему в файле sys. Команда port
    идентифицирует последовательный порт tiny.

    system tiny time Any port direct1 speed 38400 chat ogin: cathcart word: catch22



    В файле port Вы должны описать последовательный порт для прямого соединения. Описание программы набора номера (dialer) не нужно, так как нет никакой потребности в наборе.

    port direct1 type direct speed 38400 device /dev/ttyS1


    История Usenet Идея сетевых новостей


    Первоначально трафик обрабатывался рядом команд оболочки (позже переписанных на C), но они никогда не были выпущены как пакет. Вместо этого их быстро заменили на A-News, первый публичный выпуск программного обеспечения новостей.
    A-News не был разработан, чтобы обработать больше, чем несколько статей на группу в день. Когда объем вырос, пакет был переписан Мark Horton и Matt Glickman и назван B-News. Впервые B-News (версия 2.1) был опубликован в 1982. Он непрерывно расширялся с добавлением отдельных новых возможностей. Текущая версия B-News 2.11. Она медленно устаревает.
    Geoff Collyer и Henry Spencer переписали B-News и опубликовали свою разработку в 1987. Она называется C-News. Все выпуски до C-News прежде всего направлены на сети UUCP, хотя они могут использоваться в других средах также. Эффективная передача новостей по сетям TCP/IP и DECNet требует новой схемы. Это было причиной, по которой в 1986 появился сетевой протокол передачи новостей (Network News Transfer Protocol, NNTP). Он основан на сетевых соединениях и определяет ряд команд, чтобы в интерактивном режиме передавать статьи. Мы поговорим о C-News подробно в главе 21.
    Имеется ряд NNTP-программ, доступных из Сети. Одна из них пакет nntpd (авторы Brian Barber и Phil Lapsley), который Вы можете использовать, чтобы обеспечить сервис новостей на компьютерах в локальной сети. Пакет nntpd был разработан, чтобы дополнить пакеты новостей, подобные B-News или C-News, дать им свойства NNTP. Если Вы хотите использовать NNTP с сервером C-News, Вы должны прочитать главу 22, которая объясняет, как конфигурировать nntpd daemon и использовать его с C-News.
    Альтернативный пакет, обеспечивающий NNTP, INN или Internet News. Это не только внешний интерфейс, а своя система новостей. Он включает сложные новости и демон передачи, который может эффективно поддерживать несколько параллельных связей NNTP. Подробно он будет описан в главе 23.


    Энциклопедия сетевого администратора



    Энциклопедия сетевого администратора Linux
    версия 2.0
    (LNAGR, Linux Network Administrators Guide Russian)


    Как обычно, Вы можете загрузить архив
    или перейти к оглавлению для чтения в он-лайн.
    Вы можете также заказать книгу
    Руководство сетевого администратора ОС Linux, которая представляет собой это руководство, но переработанное с учетом российской специфики.


    Как доставляется почта? Вообще


    Локальное получение почты, конечно, больше чем присоединение входящего сообщения к mailbox получателя. Обычно локальный MTA поймет совмещение имен (установка локальных адресов получателя, указывающих на другие адреса), и пересылку (переназначение почты пользователя другому адресату). Также сообщения, которые не могут быть переданы, должны обычно быть bounced, то есть возвращены отправителю с сообщением об ошибке.
    Для удаленного получения используемое программное обеспечение зависит от характера связи. Если почта должна быть передана по сети, используя TCP/IP, обычно используется SMTP. SMTP (Simple Mail Transfer Protocol) определен в RFC 821. SMTP обычно соединяется с машиной получателя непосредственно.
    В UUCP-сетях почта обычно не будет передана непосредственно, а будет послана на машину адресата рядом промежуточных систем. Чтобы послать сообщение по UUCP, MTA будет обычно выполнять rmail на системе пересылки, используя uux с подачей письма на стандартный ввод программы.
    Так как команда uux выполняется для каждого сообщения отдельно, этот подход может вызвать значительную загрузку главного узлового хаба почты, также как сотни малых файлов, занимающих непропорциональное количество дискового пространства. Некоторые MTA позволяют Вам собирать отдельные сообщения для удаленной системы в одном файле. Командный файл содержит команды SMTP, которые локальная машина выдала бы, если бы использовалось прямое SMTP-соединение. Это называется BSMTP или пакетирование (batched) SMTP. Пакет передается программе rsmtp или bsmtp на удаленной системе, которая будет работать, как будто бы произошло нормальное SMTP-соединение.


    Как набирать номер: файл dial


    Файл dial описывает способ, которым используются различные программы набора номера. Традиционно, переговоры программ набора номера UUCP быстрее, чем модемы, потому что раньше было обычной практикой иметь одно (дорогое) автоматическое устройство набора, обслуживающее целый набор модемов. Сегодня большинство модемов имеют встроенную поддержку набора, так что это различие становится более размытым.

    Как набирать номер: файл dial
    Файл dial описывает способ, которым используются различные программы набора номера. Традиционно, переговоры программ набора номера UUCP быстрее, чем модемы, потому что раньше было обычной практикой иметь одно (дорогое) автоматическое устройство набора, обслуживающее целый набор модемов. Сегодня большинство модемов имеют встроенную поддержку набора, так что это различие становится более размытым.


    Однако различные программы набора номера или модемы могут требовать различной настройки. Вы можете описать каждый из них в файле dial. Куски в файле dial
    начинаются с команды dialer, которая определяет имя программы набора номера (звонилки).
    Наиболее важная часть, скрипт модема (modem chat), определяется командой chat. Подобно скрипту входа в систему (login chat), он состоит из последовательности строк uucico, посылаемых программе набора номера и ответов, которые требуется получить. Они обычно используются, чтобы сбросить модем к известному состоянию, и набирать номер. Вот пример для Hayes-совместимого модема:

    # NakWell modem; connect at high speed dialer nakwell # dialer name chat "" AT&F OK\r ATH1E0Q0 OK\r ATDT\T CONNECT chat-fail BUSY chat-fail ERROR chat-fail NO\sCARRIER dtr-toggle true
    Скрипт модема начинается с "", пустой ожидаемой строки. Cледовательно, uucico пошлет команду (AT&F) сразу же. Команда Hayes
    AT&F нужна для сброса модема. Затем uucico
    ждет, пока модем не пошлет OK, и посылает следующую команду, которая выключает локальное эхо, и т.п. После того, как модем снова возвращает OK, uucico
    посылает команду набора ATDT (для России ATDP). Escape-последовательность



    \T в этой строке заменяется на номер телефона, получаемый из файла sys. Затем uucico ждет, пока модем не возвратит CONNECT, который говорит о том, что соединение с удаленным модемом было установлено успешно.

    Часто модем будет не в состоянии соединиться с удаленной системой, например, если другая система общается с кем-то еще, и линия занята. В этом случае модем вернет сообщение об ошибке, указывающее на причину отказа. Скрипт модема не способен обнаружить такие сообщения;

    uucico будет ждать требуемую строку, пока не выйдет время ожидания. В файле регистрации UUCP (log file) будет записано "timed out in chat script" вместо истинной причины.

    Однако, Taylor UUCP позволяет Вам поставить в известность uucico об этих сообщениях, используя команду chat-fail, как показано выше. Когда uucico обнаруживает строку chat-file при выполнении скрипта модема, то прерывает обращение и регистрирует сообщение об ошибках в файле регистрации UUCP (log файле).

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


    Как работает DNS DNS организует


    Так возникает древовидная структура. Запись в корне этого дерева, которая обозначена единственной точкой, весьма точно названа корневым доменом (root domain), и она связана со всеми другими доменами. Чтобы показать, что в данном месте пишется полное имя хоста, а не имя относительно локальной области, иногда после имени ставят точку. Это значит, что последний компонент имени принадлежит корневому домену.
    В зависимости от местоположения в иерархии имени, домен может быть назван top-level, second-level или third-level (верхнего уровня, второго уровня или третьего уровня). Большее количество уровней встречается относительно редко. Вот несколько верхних областей, которые вы можете часто увидеть:

    Домне Описание
    Образовательные учреждения, подобные университетам (главным образом США, хотя регистрироваться в этом домене могут ВУЗы любой страны).
    Коммерческие организации, компании. В Москве много таких доменов.
    Некоммерческие организации. Часто частные UUCP-сети находятся в этом домене. К конкретной стране не привязан.
    Шлюзы и другие административные хосты в сети. Часто сетевые сервисы, справочники и т.п. Например, автор данной работы в свое время хотел зарегистрировать домен RussianLDP.net и отказался от этого лишь из-за оплаты домена. Но в последнее время в нем стало можно регистрировать имена за рекламу, так что, может, еще и соберусь...
    Американские военные учреждения.
    Американские правительственные учреждения (хотя в последнее время наметились сдвиги в плане того, чтобы сделать этот домен международным правительственным).
    Официально, все имена сайтов, прежде используемые как UUCP-имена без доменов, были перемещены в этот домен.
    Российский национальный домен. Все машины с этим доменом находятся в России.
    Технически первые четыре из них принадлежат американской части Internet, но там встречаются и не американские сайты. Это особенно верно для доменов .net и .org. Однако, .mil и .gov пока используются исключительно в США. Сейчас идут бурные дебаты о международных доменах.



    Вне США каждая страна использует собственный домен, названный по имени страны и состоящий из двух букв определенных в ISO-3166. Финляндия, например, использует домен fi, fr используется Францией, de Германией, au Австралией и т.д.. Ниже этого высокопоставленного домена, NIC каждой страны может свободно раздавать имена хостам. Австралия, например, имеет домены второго уровня подобные международным доменам, названные com.au и edu.au . Другие, подобно Германии, не используют этот дополнительный уровень, но используют довольно длинные имена, которые непосредственно относятся к организациям, управляющим специфическим доменом, например, ftp.informatik.uni-erlangen.de.

    Конечно, эти национальные домены (кроме России) не подразумевают, что хост, расположенный ниже, фактически расположен в той же стране. Это только сигнализирует, что хост регистрировался в NIC этой страны. Шведский изготовитель мог бы иметь отделение в Австралии, и все же регистрировать все хосты в домене se.

    Теперь организация пространства имен в виде иерархии имен доменов приятно решает проблему уникальности имен: с DNS, имя хоста должно быть уникально только в пределах одной области (домена). Кроме того, полностью квалифицированные имена весьма легко запомнить. Но DNS делает не только это: он позволяет вам передать работу с подобластями местным администраторам. Например, администратор в вычислительном центре Groucho мог бы создать поддомен для каждого отдела: мы уже столкнулись с подобластями физиков и математиков. Когда он решит, что сеть в отделе физики слишком большая и хаотичная, чтобы справиться с ней, он может просто передать контроль над physics.groucho.edu администраторам этой сети, пусть у них головы поболят. Тогда они свободны использовать любые имена хостов и назначать их IP-адреса в пределах подсети без всякого вмешательства сверху.

    Таким образом, пространство имен раздроблено на зоны (

    zones), каждая из которых управляется своим доменом. Обратите внимание на различие между зоной (zone) и доменом (domain): домен groucho.edu затрагивает все машины в университете Groucho Marx, в то время как зона groucho.edu включает только хосты, которые работают в непосредственно компьютерном центре, например в отделе математики. Хост в отделе физики принадлежат другой зоне, а именно physics.groucho.edu.


    Как работает INN Основная программа


    Другое важное свойство INN: всегда имеется только один экземпляр innd. Это также сильно повышает эффективность потому, что daemon может обрабатывать все статьи без необходимости синхронизации внутренних переменных с другими копиями. Поскольку важно, чтобы входящие новости были обработаны настолько быстро, насколько возможно, недопустимо, чтобы сервер занимался всякими побочными задачами, например, предоставлением доступа клиентам по NNTP или распаковкой пакетов новостей с каналов UUCP. Следовательно, эти задачи вынесены в отдельные программы поддержки.
    Сегодня NNTP наиболее общее средство транспортировки статей, и innd непосредственно не поддерживает другие протоколы. Это означает, что innd ждет соединений по TCP (порт 119) и принимает статьи, использующие протокол ihave.
    Статьи, прибывающие транспортом, отличным от NNTP, поддержаны косвенно при наличии другого процесса, принимающего статьи и передающего их innd по NNTP. Новости, поступающие по UUCP, например, традиционно обрабатываются программой rnews. Версия rnews из INN распаковывает пакет в случае необходимости, делит его на индивидуальные статьи, а затем передает innd.
    Программы работы с новостями (newsreaders) могут доставлять новости, когда пользователь посылает статью. Так как обработка newsreaders заслуживает особого внимания, мы возвратимся к этому немного позже.
    При получении статьи innd сначала ищет идентификатор сообщения (message ID) в файле history . Дубликаты статей игнорируются. То же произойдет со старыми статьями или статьями с неправильным заголовком. Если innd
    находит, что статья приемлема, он рассматривает строку заголовка Newsgroups:, чтобы выяснить, в какой группе эта статья должна быть сохранена. Если группа или группы найдены в файле active, статья записывается на диск. Иначе, она попадает в спецгруппу junk.
    Индивидуальные статьи сохраняются ниже каталога
    /var/spool/news, также называемого news spool. Каждая группа новостей имеет отдельный каталог, в котором каждая статья будет сохранена в отдельном файле. Имена файлов представляют собой последовательные числа. Например, статья в группе comp.risks может иметь имя файла comp/risks/217. Если каталог, в котором требуется сохранить статью не существует, он будет создан автоматически innd.



    Кроме сохранения статей Вы можете также передавать их своим подписчикам. Это управляется файлом newsfeeds, который вносит в список всех подписчиков наряду с группами новостей, которые должны быть посланы к ним.

    Обработка исходящих новостей выполняется отдельным интерфейсом. Вместо того, чтобы делать всю транспортную обработку непосредственно, innd полагается на различные программы, которые управляют передачей статей на другие серверы новостей. Такие средства названы каналами (channels). В зависимости от цели канал может иметь различные атрибуты, которые определяют точно, какая информация проходит к этому кналу от innd.

    Для исходящего трафика NNTP innd может порождать несколько процессов innxmit. Каждой копии этой программы передается имя файла статьи, ее размер и message ID через стандартный ввод. Для исходящего трафика UUCP данные о статье вносятся в файл протокола, обрабатываемый затем программой, которая собирает статьи в пакеты, сжимает их и отсылает по назначению.

    Помимо этих двух примеров, имеются другие типы каналов. Они используются, например, при архивировании групп новостей или при подготовке краткого обзора. Информация краткого обзора предназначена, чтобы помочь программам работы с новостями обрабатывать потоки новостей. Раньше такая программа должна была просмотреть все статьи, чтобы получить информацию заголовка, требуемую для создания потоков. Это перегружало сервер новостей, особенно при использовании NNTP. Кроме того, этот подход был очень медленным. Механизм краткого обзора облегчает эту задачу, сохраняя все подходящие заголовки в отдельном файле (.overview) для каждой группы. Эта информация может быть поднята программой чтения новостей из каталога spool или командой XOVER протокола NNTP.


    Как работает маршрутизация почты?


    Имеется большое различие между способом маршрутизации дескрипторов пункта UUCP и способом маршрутизации в Internet. В Internet, основная работа направления данных на машину получателя (если только известен адрес IP) выполнен IP уровнем работы с сетями, в то время как в зоне UUCP, маршрут должен быть задан пользователем или сгенерирован средством передачи почты.


    Как сказать UUCP о других системах: файл sys


    Файл sys описывает системы, о которых Ваша машина знает. Запись представляется ключевым словом system; затем до следующей директивы system следуют детальные параметры, специфические для этой системы. Обычно, сведения системы определяют номер телефона, login chat и другие подобные параметры входа в систему.

    Как сказать UUCP о других системах: файл sys
    Файл sys описывает системы, о которых Ваша машина знает. Запись представляется ключевым словом system; затем до следующей директивы system следуют детальные параметры, специфические для этой системы. Обычно, сведения системы определяют номер телефона, login chat и другие подобные параметры входа в систему.


    Параметры перед самой первой записью system задают значения по умолчанию для всех систем.
    Наиболее важные элементы записи подробней описаны ниже.


    Как скрыть пароль для логина NetWare


    Указывать пароль в командной строке ncpmount
    опасно. Например, его можно увидеть командами top или ps. Чтобы уменьшить риск, ncpmount может читать данные из файла в домашнем каталоге пользователя. Этот файл хранит имя входа пользователя в систему и пароль, связанный с каждым из файловых серверов. Файл называется /.nwclient и должен иметь права доступа 0600, чтобы гарантировать, что другие пользователи не могут его читать. Если права доступа заданы неправильно, ncpmount откажется использовать его.

    Как скрыть пароль для логина NetWare
    Указывать пароль в командной строке ncpmount
    опасно. Например, его можно увидеть командами top или ps. Чтобы уменьшить риск, ncpmount может читать данные из файла в домашнем каталоге пользователя. Этот файл хранит имя входа пользователя в систему и пароль, связанный с каждым из файловых серверов. Файл называется /.nwclient и должен иметь права доступа 0600, чтобы гарантировать, что другие пользователи не могут его читать. Если права доступа заданы неправильно, ncpmount откажется использовать его.


    Файл имеет очень простой синтаксис. Любые строки, начинающиеся символом #, обрабатываются как комментарии и игнорируются. Остальные строки имеют синтаксис:
    edu
    com
    org
    net
    mil
    gov
    uucp
    ru

    fileserver/userid password
    Здесь fileserver задает имя сервера файлов, userid имя входа в систему на этом сервере, password задает пароль и может отсутствовать. Если этого поля нет, ncpmount
    запросит пароль при монтировании. Если поле password определено как -, пароль не используется, это эквивалентно параметру -n
    командной строки.
    Вы можете задать сколько угодно записей, но поле имени сервера должно быть уникальным. Первая запись задает сервер по умолчанию. Команда ncpmount использует для задания сервера, с которым надо связаться, параметр командной строки -S. Он задает то, какую запись в /.nwclient ++-¦ гL¦¦¦+-¦++L+. хL¦г + -S ++ -T+-++ L+T++T, гL¦¦¦+--+LLT -+-+++-¦ ¦¦ -=¦¦¦++гL.


    Как в Usenet обрабатывают новости?


    Новости распространяются по сети различными транспортами. Как историческая среда используется UUCP, но сегодня основной трафик несет Internet. Используемый алгоритм маршрутизации называется лавинной (flooding) маршрутизацией. Каждый сайт поддерживает ряд связей с другими абонентами. Любая статья, сгенерированная или полученная локальной системой новостей будет послана к ним (это называется подпиткой новостями, news feeds).
    Чтобы отличать статьи и распознавать дубликаты, Usenet-статьи должны нести ID сообщения (заданный в поле заголовка Message-Id:), которое объединяет имя пункта регистрации и серийный номер в виде serial
    @site. Для каждой обработанной статьи, система новостей регистрирует ее ID в файле history, в котором проверяются все прибывающие статьи.
    Поток между любыми двумя сайтами может быть ограничен в соответствии с двумя критериями. Во-первых, статье назначается область распространения (в поле заголовка Distribution:), которая может использоваться, чтобы ограничить рассылку некоторой группой сайтов. С другой стороны обмен новостями может быть ограничен системами получения и передачи. Набор групп новостей (конференций) и областей рассылки обычно хранится в файле sys.
    Реальное число статей обычно требует, чтобы к вышеупомянутой схеме были сделаны уточнения. На сетях UUCP обычно статьи за некоторый период времени объединяются в один файл, который сжимается и посылается удаленному сайту. Это вызывается пакетированием (batching).
    Альтернативная методика: протокол ihave/sendme, который не дает пересылась статьи дважды. Вместо того, чтобы помещать все статьи в пакетные файлы и посылать их, только ID сообщений будут объединены в сообщении "ihave" и посланы. Удаленный сайт читает это сообщение, сравнивает с файлом history и возвращает список статей, которые ему нужны в сообщении "sendme". Только запрошенные статьи будут посланы.
    Конечно, ihave/sendme имеет смысл только, если это включает два больших сайта, которые получают новости из нескольких независимых источников каждый и опрашивают друг друга достаточно часто для эффективного потока новостей.



    Сайты, которые находятся в Internet, полагаются на TCP/ IP программное обеспечение, которое использует Network News Transfer Protocol (NNTP). NNTP описан в RFC-977. Он отвечает за передачу новостей между серверами новостей и обеспечивает Usenet-доступ одиночным пользователям.

    NNTP знает три различных способа передать новости. Первый: версия ihave/sendme в реальном масштабе времени, также упоминаемого как выталкивание (pushing) новостей. Вторая методика названа pulling. Здесь пользователь запрашивает список статей в данной группе новостей (newsgroup) или иерархии, которые достигли сервера после определенной даты, и выбирает те, которых у него нет. Третья методика предназначена для интерактивных программ работы с новостями (newsreader). Она позволяет Вам или Вашему newsreader отыскивать статьи из определенных newgroups и передавать статьи с незавершенной информацией заголовка.

    На кааждом сайте новости хранятся в иерархии каталога /var/spool/news, каждая статья в отдельном файле, и каждая newsgroup в отдельном каталоге. Имя каталога составлено из имени newsgroup с компонентами пути. Таким образом, статьи comp.os.linux.misc сохраняются в /var/spool/news/comp/os/linux/misc. Статьи получают номера в порядке поступления. Эти номера служат именами файлов. Диапазон номеров статей в настоящее время интерактивно сохраняется в файле active, который в то же время служит как список newsgroups, известных Вашему сайту.

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

    Вы теперь имеете достаточно информации, чтобы выбрать, что читать дальше. Пользователи UUCP должны читать о C-News в главе 21. Если Вы используете TCP/IP сеть, читайте о NNTP в главе 22 . Если Вы должны передавать умеренные количества новостей по TCP/IP, сервера, описанного в этой главе может быть достаточно для Вас. Чтобы установить сверхпрочный сервер новостей, который может обрабатывать огромные объемы, прочитайте о InterNet News в главе 23.


    Клиентская сторона NIS Если Вы


    NIS-реализация этих функций изменяет это поведение и использует обращение RPC к серверу NIS, который ищет логин или user ID. Функция может обрабатывать NIS-данные, как если бы они были добавлены к оригинальному файлу passwd, так что оба набора информации доступны прикладной программе и будут использованы. Есть второй вариант: информация в локальном passwd игнорируется вообще, и используются только NIS-данные.
    Для традиционных реализаций NIS имелись некоторые соглашения на предмет того, какие карты как обрабатывать. Но иногда это позволяло модифицировать файл passwd и открывало дыры в защите. Для обхода этих ловушек NYS и GNU libc используют общую схему конфигурации, которая определяет, использует ли специфический набор функций пользователя оригинальные файлы, NIS или NIS+, а также в каком порядке. Эта схема будет рассмотрена чуть ниже.


    Кольцевой интерфейс (Loopback)


    Самый первый интерфейс, который нужно сформировать и активизировать, это интерфейс loopback:

    # ifconfig lo 127.0.0.1

    Кольцевой интерфейс (Loopback)
    Самый первый интерфейс, который нужно сформировать и активизировать, это интерфейс loopback:

    # ifconfig lo 127.0.0.1



    Иногда Вы будете видеть фиктивное имя localhost, используемое вместо IP-адреса. ifconfig будет искать имя в файле hosts, где должна быть запись, объявляющая его как имя для адреса 127.0.0.1:

    # Sample /etc/hosts entry for localhost localhost 127.0.0.1
    Чтобы просмотреть информацию о конфигурации интерфейса, Вы можете вызвать ifconfig, передав как аргумент имя интерфейса:

    $ ifconfig lo
    lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:3924 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 Collisions:0
    Как Вы можете видеть, интерфейс loopback получил сетевую маску 255.0.0.0, так как адрес 127.0.0.1 принадлежит к классу A.
    Теперь Вы можете начать работать с вашей мини-"сетью". Единственное, чего не хватает, это записи в таблице маршрутизации, которая говорит IP, что этот интерфейс можно использовать как маршрут к месту назначения 127.0.0.1. Это делается с помощью команды:

    # route add 127.0.0.1
    Здесь тоже можно использовать localhost вместо IP-адреса, если он задан в файле /etc/hosts.
    Затем вы должны проверить правильность работы, например, используя ping. ping сетевой эквивалент звукового устройства и используется для проверки того, доступен ли IP-адрес и измерения интервала времени между посылкой пакета и получением ответа. Время, требуемое для этого, часто называется round-trip time:

    # ping localhost
    PING localhost (127.0.0.1): 56 data bytes 64 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=0.4 ms 64 bytes from 127.0.0.1: icmp_seq=1 ttl=255 time=0.4 ms 64 bytes from 127.0.0.1: icmp_seq=2 ttl=255 time=0.4 ms ^C --- localhost ping statistics --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 0.4/0.4/0.4 ms
    <



    /p>

    При вызове ping он будет испускать пакеты, пока пользователь его не остановит. ^C отмечает место, где я нажал Ctrl-C для прерывания.

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

    Если вывод который вы получаете от ping не походит на показанный выше, вы нарвались на неприятности. Проверьте ошибки в установочных файлах. Проверьте чтобы ifconfig и route, которые вы используете, были совместимы с ядром, которым Вы пользуетесь, и что ядро вообще компилировалось с разрешенной сетью (если сеть запрещена, вы увидите это по отсутствию каталога /proc/net). Если Вы получаете сообщение об ошибке, "Network unreachable", значит вы неправильно использовали команду route. Удостоверьтесь, что используете тот же самый адрес, что дали ifconfig.

    Описанных выше шагов достаточно, чтобы использовать сетевые приложения на автономном компьютере. После добавления вышеупомянутых строк к скрипту запуска, вы можете перезагрузить вашу машину и попытаться использовать различные приложения. Например, telnet localhost

    должен установить telnet-соединение с вашей машиной и вывести приглашение login:.

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


    Команда echo


    Команда echo служит как помощь в отладке. Использование echo on просит dip пересылать копию диалога с последовательным устройством на консоль. Эхо можно выключить командой echo off.

    Команда echo
    Команда echo служит как помощь в отладке. Использование echo on просит dip пересылать копию диалога с последовательным устройством на консоль. Эхо можно выключить командой echo off.


    dipтакже позволяет Вам временно выключить режим скрипта и выйти в режим терминала. В этом режиме Вы можете использовать dip точно так же, как и обычную программу-терминал, пишущую в последовательную линию и читающую из нее. Чтобы выйти из этого режима, введите Ctrl-].


    Команда get


    Команда get представляет собой способ установки переменных в dip. Самая простая форма: установить переменную как константу, как это делалось в вышеупомянутом примере. Вы можете также спросить значение у пользователя, определяя ключевое слово ask вместо значения:

    DIP> get $local ask
    Enter the value for $local:

    Команда get
    Команда get представляет собой способ установки переменных в dip. Самая простая форма: установить переменную как константу, как это делалось в вышеупомянутом примере. Вы можете также спросить значение у пользователя, определяя ключевое слово ask вместо значения:

    DIP> get $local ask
    Enter the value for $local:



    Третий метод состоит в том, чтобы попробовать получить значение с удаленного хоста. Причудливо на первый взгляд, но это очень полезно в некоторых случаях: некоторые серверы-SLIP не позволяют Вам использовать Ваш собственный IP-адрес на SLIP-связи, а будут приписывать Вам один из своих адресов всякий раз, когда Вы набираете номер, печатая сообщение, которое информирует Вас относительно адреса, который был назначен. Если есть сообщение вроде "Your address: 192.168.5.74", то следующий фрагмент кода dip его примет в Вашей системе:

    # finish login wait address: 10 get $locip remote


    Команда ipx_configure


    Каждый интерфейс IPX должен знать, к которой IPX-сети принадлежит, и какой тип пакета использовать для IPX. Каждый компьютер, обеспечивающий IPX, имеет по крайней мере один интерфейс, известный как первичный (primary), который остальная часть сети использует, чтобы обратиться к нему. IPX-поддержка ядра Linux обеспечивает средства автонастройки их параметров. Команда ipx_configure
    включает или выключает это автоматическое свойство конфигурации.
    Команда ipx_configure
    Каждый интерфейс IPX должен знать, к которой IPX-сети принадлежит, и какой тип пакета использовать для IPX. Каждый компьютер, обеспечивающий IPX, имеет по крайней мере один интерфейс, известный как первичный (primary), который остальная часть сети использует, чтобы обратиться к нему. IPX-поддержка ядра Linux обеспечивает средства автонастройки их параметров. Команда ipx_configure
    включает или выключает это автоматическое свойство конфигурации.


    Без параметров ipx_configure отображает текущие настройки флажков автоконфигурации:

    # ipx_configure
    Auto Primary Select is OFF Auto Interface Create is OFF
    Флажки Auto Primary и Auto Interface по умолчанию выключены. Для их включения и запуска автоконфигурации, задайте параметры:

    # ipx_configure --auto_interface=on --auto_primary=on
    Когда параметр --auto_primary установлен в on, ядро автоматически гарантирует, что как минимум один активный интерфейс функционирует как первичный интерфейс для компьютера.
    Когда параметр --auto_interface установлен в on, IPX-драйвер ядра будет слушать все пакеты, полученные на активных сетевых интерфейсах, и пытаться определить сетевой адрес IPX и используемый тип пакета.
    Механизм автоматического определения работает хорошо на правильно управляемых сетях. Есть примеры настройки сети IPX так, чтобы по Ethernet шли пакеты разных типов, что технически недопустимо. Настроенный как 802.2 компьютер не может непосредственно связываться с сетью Ethernet-II и, следовательно, не может быть в той же самой IPX-сети. Linux IPX-поддержка слушает на сегменте IPX-пакеты. Из них она пытается вычислить адрес и тип пакета, если типы пакетов разные, или они идут на несколько интерфейсов сразу, это будет понято как сетевая проверка на пересечение адреса. Определить правильный тип пакета в такой ситуации едва ли получится. В файле протокола в такой ситуации появится нечто вроде:

    IPX: Network number collision 0x3901ab00 eth0 etherII and eth0 802.3
    Если Вы видите эту проблему, отключите автоматическое определение и настройте интерфейсы вручную, используя команду ipx_interface, как сказано ниже.


    Команда ipx_interface


    Команда ipx_interface используется, чтобы вручную добавить, изменить и удалить параметры IPX существующего устройства сети. Вы должны использовать ipx_interface, когда автоматический метод конфигурации не работает. ipx_interface позволяет определять сетевой адрес IPX, первичное состояние интерфейса и тип пакета IPX, который это сетевое устройство использует. Если Вы создаете несколько IPX-интерфейсов, Вы нуждаетесь в одной команде ipx_interface для каждого.
    Команда ipx_interface
    Команда ipx_interface используется, чтобы вручную добавить, изменить и удалить параметры IPX существующего устройства сети. Вы должны использовать ipx_interface, когда автоматический метод конфигурации не работает. ipx_interface позволяет определять сетевой адрес IPX, первичное состояние интерфейса и тип пакета IPX, который это сетевое устройство использует. Если Вы создаете несколько IPX-интерфейсов, Вы нуждаетесь в одной команде ipx_interface для каждого.


    Синтаксис команды, чтобы добавить IPX на существующее устройство Ethernet:

    # ipx_interface add -p eth0 etherII 0x32a10103
    Параметры означают: -p
    Определяет, что этот интерфейс должен быть первичным интерфейсом. Этот параметр факультативный
    eth0
    Имя сетевого устройства, на которое мы добавляем поддержку IPX.
    etherII
    Тип пакета, в даноом случае Ethernet-II. Это значение также может быть кодировано как 802.2, 802.3
    или SNAP.
    0x32a10103
    Сетевой адрес IPX, которому этот интерфейс принадлежит.
    Следующая команда удаляет IPX из интерфейса:

    # ipx_interface del eth0 etherII
    Наконец, чтобы отобразить текущую конфигурацию IPX для сетевого устройства используйте:

    # ipx_interface check eth0 etherII
    Команда ipx_interface подробно описана на ее man-странице.


    Команда print


    Отображает текст на консоли из dip. Любые переменные dip могут быть использованы в таких командах. Например:

    DIP> print Using port $port at speed $speed
    Using port ttyS3 at speed 38400

    Команда print
    Отображает текст на консоли из dip. Любые переменные dip могут быть использованы в таких командах. Например:

    DIP> print Using port $port at speed $speed
    Using port ttyS3 at speed 38400





    Команда setserial


    Ядро при запуске само пытается определить настройки устройств, но из-за их большого разнообразия это не всегда возможно. Хороший пример того, где это является проблемой, внутренние модемы, о которых мы говорили ранее. UART, который они используют, имеет 16-байтовый буфер FIFO, но он похож на UART 16450. Если мы определенно не сообщаем драйверу, что этот порт является устройством UART 16550, ядро не будет использовать расширенный буфер. Еще одним примером являются четырехпотровые карты, которые позволяют поделить один IRQ между несколькими устройствами. Нам, вероятно, придется сообщать ядру, который IRQ-порт предполагается использовать, и что IRQ может быть разделен несколькими устройствами.
    Команда setserial
    Ядро при запуске само пытается определить настройки устройств, но из-за их большого разнообразия это не всегда возможно. Хороший пример того, где это является проблемой, внутренние модемы, о которых мы говорили ранее. UART, который они используют, имеет 16-байтовый буфер FIFO, но он похож на UART 16450. Если мы определенно не сообщаем драйверу, что этот порт является устройством UART 16550, ядро не будет использовать расширенный буфер. Еще одним примером являются четырехпотровые карты, которые позволяют поделить один IRQ между несколькими устройствами. Нам, вероятно, придется сообщать ядру, который IRQ-порт предполагается использовать, и что IRQ может быть разделен несколькими устройствами.


    setserial была создана, чтобы конфигурировать последовательный драйвер во время выполнения. Команда
    setserial обычно выполняется при начальной загрузке из скрипта, который в одних дистрибутивах называется 0setserial, а в других rc.serial. Этот скрипт обязан инициализировать последовательный драйвер, чтобы разместить любые нестандартные или необычные последовательные аппаратные средства в машине.
    Общий синтаксис для команды setserial:

    setserial device [parameters]
    Здесь device является одним из последовательных устройств, типа ttyS0.
    Команда setserial имеет большое количество параметров. Наиболее важные из них описаны в таблице 4-1. Остальные можно найти на man-странице по setserial.


    Команда stty


    Имя stty, возможно, произошло от сокращения "set tty", но команда stty может также использоваться, чтобы отобразить конфигурацию терминала. Возможно, даже больше, чем setserial, команда stty
    обеспечивает изумительное число характеристик, которые Вы можете легко настроить. stty обычно используется, чтобы конфигурировать параметры терминала, типа того, будут ли символы отображены на экране, или какая клавиша должна генерировать сигнал прерывания. Мы объяснили ранее, что последовательные устройства являются tty-устройствами, а значит, команда stty применима к ним.
    Команда stty
    Имя stty, возможно, произошло от сокращения "set tty", но команда stty может также использоваться, чтобы отобразить конфигурацию терминала. Возможно, даже больше, чем setserial, команда stty
    обеспечивает изумительное число характеристик, которые Вы можете легко настроить. stty обычно используется, чтобы конфигурировать параметры терминала, типа того, будут ли символы отображены на экране, или какая клавиша должна генерировать сигнал прерывания. Мы объяснили ранее, что последовательные устройства являются tty-устройствами, а значит, команда stty применима к ним.


    Одно из важнейших применений stty заключается в управлении аппаратным подтверждением связи на устройстве. Мы кратко говорили ранее относительно аппаратного подтверждения связи. Значение по умолчанию конфигурация для последовательных устройств: аппаратное подтверждение заблокировано. Эта установка позволяет работать последовательным кабелям “three wire”. Они не поддерживают необходимые сигналы для аппаратного подтверждения связи, и если оно включено по умолчанию, они будут не способны передать сигнал, чтобы изменить это.
    Удивительно, но некоторые программы не допускают аппаратное подтверждение связи, так что если Ваш модем эту функцию поддерживает, Вы должны конфигу- рировать его так, чтобы ее использовать (проверьте руководство по модему, чтобы узнать, какую команду применить) и сконфигурировать последовательное устройство, чтобы учитывать это подтверждение. Команда stty имеет параметр crtscts, который включает аппаратное подтверждение связи на устройстве. Вам придется использовать его. Команда лучше всего должна быть выдана из rc.serial файла (или его эквивалента) при начальной загрузке. Образец показан в примере 4-3.


    Команды dip


    В этом разделе мы рассмотрим команды языка скриптов dip . Вы можете получить краткий обзор всех команд, вызывая dip в тестовом режиме и вводя команду help. Для того, чтобы выяснить синтаксис конкрентой команды, Вы можете набрать команду без каких-либо аргументов; увы, это не сработает с командами, которым не нужны аргументы. Ниже показано действие команды help:
    Команды dip
    В этом разделе мы рассмотрим команды языка скриптов dip . Вы можете получить краткий обзор всех команд, вызывая dip в тестовом режиме и вводя команду help. Для того, чтобы выяснить синтаксис конкрентой команды, Вы можете набрать команду без каких-либо аргументов; увы, это не сработает с командами, которым не нужны аргументы. Ниже показано действие команды help:



    # dip -t
    DIP: Dialup IP Protocol Driver version 3.3.7p-uri (25 Dec 96) Written by Fred N. van Kempen, MicroWalt Corporation. Debian version 3.3.7p-2 (debian).
    DIP> help
    DIP knows about the following commands:
    beep bootp break chatkey config databits dec default dial echo flush get goto help if inc init mode modem netmask onexit parity password proxyarp print psend port quit reset securidfixed securid send shell skey sleep speed stopbits term timeout wait
    DIP> echo
    Usage: echo on|off DIP>
    Во всех примерах, в которых есть приглашение DIP>, имеется в виду ввод команды в тестовом режиме. Примеры, в которых такого приглашения нет, показывают скрипты.


    Команды if и goto


    Команда if полноценная команда if, без которой нет ни одного языка программирования. Ее синтаксис:

    if var op number goto label

    Команды if и goto
    Команда if полноценная команда if, без которой нет ни одного языка программирования. Ее синтаксис:

    if var op number goto label



    где выражение должно быть простым сравнением с одной из переменных $errlvl, $locip и$rmtip.
    var должен быть целым числом; оператор op может быть одним из ==, !=, , >, и >=.
    Команда goto передает управление на строку с меткой label. Метка должна быть первым словом в строке и оканчиваться двоеточием.


    Команды модема


    dip имеет ряд команд для настройки последовательной линии и модема. Некоторые из них очевидны, например, port выбирает последовательный порт, speed, databits , stopbits и parity, которые задают соответствующие параметры линии. Команда modem задает тип модема. Пока поддерживается только HAYES (именно БОЛЬШИМИ буквами!). Вы должны сообщить dip тип модема, иначе он не будет выполнять команды dial и reset. Команда reset посылает в модем строку рестарта. Для Hayes-совместимых модемов это ATZ.

    Команды модема
    dip имеет ряд команд для настройки последовательной линии и модема. Некоторые из них очевидны, например, port выбирает последовательный порт, speed, databits , stopbits и parity, которые задают соответствующие параметры линии. Команда modem задает тип модема. Пока поддерживается только HAYES (именно БОЛЬШИМИ буквами!). Вы должны сообщить dip тип модема, иначе он не будет выполнять команды dial и reset. Команда reset посылает в модем строку рестарта. Для Hayes-совместимых модемов это ATZ.


    Код flush может использоваться для того, чтобы убрать все реакции, которые модем посылает в ответ на команды. Иначе скрипт после reset может запутаться потому, что он читает OK реакции на более ранние команды модема.
    Команда init посылает в модем строку инициализации перед дозвоном. Для Hayes-модемов это обычно "ATE0Q0V1X1".
    Команда dial звонит на удаленную машину. Для Hayes-модемов это обычно ATD.


    Команды


    Команды позволяют управлять правилами и наборами правил iptables. К IP firewall относятся:
    -A chain
    Добавляет одно или большее количество правил к концу назначенной цепочки. Если имя машины задано для источника или адресата, и оно соответствует нескольким IP-адресам, правило будет добавлен для каждого адреса.

    Команды
    Команды позволяют управлять правилами и наборами правил iptables. К IP firewall относятся:
    -A chain
    Добавляет одно или большее количество правил к концу назначенной цепочки. Если имя машины задано для источника или адресата, и оно соответствует нескольким IP-адресам, правило будет добавлен для каждого адреса.


    -I chain rulenum
    Добавляет одно или большее количество правил в начало назначенной цепочки. Если имя машины задано для источника или адресата, и оно соответствует нескольким IP-адресам, правило будет добавлен для каждого адреса.
    -D chain
    Удаляет одно или несколько правил из определенной цепочки, которая соответствует заданной спецификации правил.
    -D chain rulenum
    Удаляет правило в позиции rulenum
    указанной цепочки. Нумерация начинается с 1.
    -R chain rulenum
    Заменяет правило в позиции rulenum
    указанной цепочки заданным правилом.
    -C chain
    Проверяет пакет спецификацией правила по заданной цепочке. Эта команда возвратит сообщение, описывающее, как пакет обработан цепочкой. Это очень полезно для тестирования Вашей конфигурации firewall, и мы рассмотрим это подробно чуть позже.
    -L [chain]
    Выведет список правил в наборе, или всех правил, если конкретный набор не задан.
    -F [chain]
    Стирает правила в наборе или во всех наборах, если конкретный набор не задан.
    -Z [chain]
    Обнуляет счетчикик пакетов и байтов для всех правил в наборе или для всех наборов, если конкретный набор не задан.
    -N chain
    Создает новую цепочку с заданным именем. Таким способом создаются задаваемые пользователем цепочки.
    -X [chain]
    Удаляет определенную пользовательскую цепочку или все цепочки, если никакая конкретная цепочка не задана. На удаляемую цепочку не должно быть ссылок из других цепочек, иначе она не будет удалена.
    -P chain policy
    Задает стратегию по умолчанию для указанной цепочки. Допустимые стратегии: ACCEPT, DROP, QUEUE и RETURN. ACCEPT пропускает пакет. DROP отбрасывает пакет. QUEUE передает пакет пользовательской цепочке для дальнейшей обработки. RETURN заставляет IP firewall вернуться к цепочке, правило которой вызвало эту ситуацию, и предписывает продолжить ее обработку со следующего правила.


    Краевые эффекты IP masquerade


    Ни один из компьютеров в сети позади маршрутизатора masquerade никогда не проявится в сети непосредственно. Следовательно, вы нуждаетесь только в одном реальном адресе IP, чтобы позволить всем компьютерам делать сетевые подключения в Internet. Это имеет и плохую сторону: ни один из этих компьютеров не видим из Internet, и вы не можете непосредственно соединяться с ними из Internet. Единственный компьютер, видимый в masquerade-сети, это машина, которая обеспечивает masquerade. Это важно, когда используются услуги типа почты или FTP. Этот факт помогает определять то, что услуги нужно обеспечить masquerade-компьютером.
    Второй момент: поскольку внутренние компьютеры ни при каких обстоятельствах не будут видны из внешней сети, резко падают требования к их защите, иногда на шлюзе даже не нужен firewall! Однако, лучше его все же использовать, поскольку надежность всей сети определяется надежностью шлюза.
    Третье, IP masquerade будет иметь некоторое воздействие на эффективность вашей работы с сетями. При большом числе машин такое явление начнет проявляться. IP masquerade должен делать много работы для каждого пакета. Так что ставьте на шлюз машину помощнее.
    Наконец, некоторые сетевые сервисы либо вообще не работают через masquerade, либо требуют немало работы по их настройке. Обычно это сервисы, которым нужны входящие соединения: Direct Communications Channels (DCC), IRC, разные видео и аудио трансляций. Некоторые из этих услуг имеют модули для своей работы в такой ситуации, другие вообще не могут быть использованы.


    Login chat


    Выше мы уже сталкивались со скриптом входа в систему (login chat script), который сообщает uucico, как регистрироваться в удаленной системе. Он состоит из списка лексем, определяя строки, ожидаемые и посланные локальным процессом uucico. Проблема состоит в том, чтобы заставить uucico ждать, пока удаленная машина не пошлет приглашение входа в систему, затем послать имя входа в систему, ждать, пока удаленная система пошлет приглашение на ввод пароля, и посылать пароль. Ожидание и посылка строки чередуются. uucico автоматически добавляет символ возврата каретки (\r) к любой посылаемой строке. Таким образом, простой скрипт похож на:

    ogin: vstout ssword: catch22

    login chat
    Выше мы уже сталкивались со скриптом входа в систему (login chat script), который сообщает uucico, как регистрироваться в удаленной системе. Он состоит из списка лексем, определяя строки, ожидаемые и посланные локальным процессом uucico. Проблема состоит в том, чтобы заставить uucico ждать, пока удаленная машина не пошлет приглашение входа в систему, затем послать имя входа в систему, ждать, пока удаленная система пошлет приглашение на ввод пароля, и посылать пароль. Ожидание и посылка строки чередуются. uucico автоматически добавляет символ возврата каретки (\r) к любой посылаемой строке. Таким образом, простой скрипт похож на:

    ogin: vstout ssword: catch22



    Обратите внимание, что поля записи не содержат текста приглашений. Удостоерьтесь, что вы войдете в систему , даже если система посылает Login: вместо login:.
    uucico также учитывает некоторые виды условного выполнения, например, в случае, если getty удаленной машины должен быть сброшен перед посылкой приглашения. Для этого Вы можете присоединить под-дружескую (sub-chat) беседу к ожидающейся строке. Sub-chat выполняется только, если основное соединение не удалось, то есть произошла блокировка по времени. Один из способов использовать эту возможность состоит в том, чтобы послать BREAK, если удаленная система не отображает приглашение входа в систему. Следующий пример дает всесторонний скрипт дружеской беседы, который должен работать и в случае, если Вы должны нажать Enter прежде, чем войти в систему. Пустая строка ("") говорит UUCP ничего не ждать и продолжать посылать следующую строку немедленно.



    "" \n\r\d\r\n\c ogin:-BREAK-ogin: vstout ssword: catch22

    Имеется несколько специальных строк и ESC-символов, которые могут включаться в скрипт:

    ""

    Пустая строка сообщает, чтобы uucico не ждал ничего, а продолжил посылать следующую.

    \t

    Табуляция.

    \r

    Перевод каретки.

    \s

    Пробел. Вы нуждаетесь в нем, чтобы включить пробел в строку регистрации в скрипте.

    \n

    Перевод строки. В unix-системах понятия перевода (возврата) каретки и перевода строки разделены в отличие от DOS/Windows-систем.

    \\

    Обратный слэш (\).

    В посылаемой строке в дополнение к вышеупомянутым допустимы следующие ESC-символы и последовательности:

    EOT

    Конец передачи (^D).

    BREAK

    Прерывание (Break).

    \c

    Возврат каретки в конце строки.

    \d

    Пауза в 1 секунду.

    \E

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

    \e

    Выключить эхо-контроль.

    \K

    Аналогично BREAK.

    \p

    Пауза на половину секунды.


    Локальные пользователи


    Локальный адрес обычно обозначает почтовый ящик пользователя. Ящик обычно размещается в /var/spool/mail и имеет имя пользователя, которому принадлежит файл. Если файл не существует, Exim его создаст сам.

    Локальные пользователи
    Локальный адрес обычно обозначает почтовый ящик пользователя. Ящик обычно размещается в /var/spool/mail и имеет имя пользователя, которому принадлежит файл. Если файл не существует, Exim его создаст сам.


    В некоторых конфигурациях группа будет установлена в группу пользователя, а режим доступа к файлу в 0600. В этих случаях процессы доставки будут выполнены от имени пользователя, и пользователь может удалить почтовый ящик полностью. В других конфигурациях группа почтового ящика mail, режим доступа 660. Процессы доставки будут выполнены под системным uid и группой mail , пользователи не смогут удалять файлы почтовых ящиков, хотя они могут освобождать их.
    Обратите внимание, что хотя в настоящее время стандартное место для размещения файлов почтовых ящиков /var/spool/mail, некоторое программное обеспечение почты может компилироваться, чтобы использовать другие места, например, /usr/spool/mail . Если доставка пользователям на Вашей машине терпит неудачу, попробуйте создать ссылку на /var/spool/mail.
    Адреса MAILER-DAEMON и postmaster должны обычно появляться в Вашем файле псевдонимов, расширяясь в email-адрес администратора системы. MAILER-DAEMON используется Exim как адрес отправителя в сообщениях об ошибках. Также рекомендуется, чтобы root был установлен как псевдоним для администратора, особенно, когда доставки выполняются согласно правам пользователей-получателей, чтобы избежать доставок с правами root.


    MAC-расширения: использование с опциями -m mac


    - -mac-source [!] address
    Задает, с какого адреса в сети Ethernet должен придти пакет для этого правила. Это имеет смысл только в правилах input или forward, поскольку любой передаваемый нами пакет должен соответствовать правилам output.

    MAC-расширения: использование с опциями -m mac
    - -mac-source [!] address
    Задает, с какого адреса в сети Ethernet должен придти пакет для этого правила. Это имеет смысл только в правилах input или forward, поскольку любой передаваемый нами пакет должен соответствовать правилам output.




    Маршрутизация через PPP-линию


    После установки сетевого интерфейса, pppd установит маршрут только к своему серверу. Если удаленный хост находится в локальной сети (LAN), вы обязательно захотите соединяться с хостами в ней, то есть должен быть установлен сетевой маршрут.

    Маршрутизация через PPP-линию
    После установки сетевого интерфейса, pppd установит маршрут только к своему серверу. Если удаленный хост находится в локальной сети (LAN), вы обязательно захотите соединяться с хостами в ней, то есть должен быть установлен сетевой маршрут.


    Мы уже видели, что pppd можно попросить уствновить заданный по умолчанию маршрут, используя опцию
    defaultroute. Эта опция очень полезна, если PPP-сервер, с которым вы связались, будет действовать как Internet-шлюз.
    Обратный случай является относительно простым: ваша система действует как шлюз для единственного хоста. Например, возьмите некоторых служащих в Virtual Brewery, чья локальная машина называется oneshot. При соединении с vlager через PPP, она использует адрес в подсети Brewery. В vlager мы можем теперь дать pppd опцию proxyarp, которая установит ARP-запись для oneshot. Это автоматически сделает oneshot доступным для всех в Brewery и в Winery.
    Однако, вещи далеко не всегда так просты, как иногда кажется, например, когда Вы соединяете две LAN-сети. Это обычно требует добавления специального сетевого маршрута, потому что эти сети могут иметь свой маршрут по умолчанию. Кроме того, если на обоих машинах использование связи PPP задано как маршрут по умолчанию, получится цикл, где блоки к неизвестным адресатам будут перебрасываться между машинами до окончания их времени жизни.
    Как пример, предположим, что Virtual Brewery открывает ветвь в каком-нибудь другом городе. Подразделение запускает собственную сеть Ethernet, используя сетевой адрес 172.16.3.0, который является подсетью 3 сети Brewery класса B. Они хотят соединиться с Brewery Ethernet по PPP для того, чтобы модифицировать базы данных заказчиков и т.п. Снова vlager действует как шлюз, другая машина называется vbourbon и имеет IP-адрес 172.16.3.1. Такая сеть показана в приложении A.



    Когда vbourbon соединится с vlager, она примет заданный по умолчанию маршрут к vlager как обычно. На vlager мы должны установить сетевой маршрут для подсети 3, который проходит к vbourbon. Для этого мы используем особенность pppd, которая еще не обсуждалась: команду ip-up. Это программа, размещенная в /etc/ppp, которая будет выполнена после того, как PPP интерфейс будет сконфигурирован. Когда он существует, эта программа вызывается со следующими параметрами

    ip-up iface device speed local_addr remote_addr

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

    Аргумент Имя

    Описание

    Используемый сетевой интерфейс, например ppp0

    Имя используемого последовательного устройства (если используется stdin/stdout, это будет /dev/tty)

    Скорость устройства бит в секунду

    Локальный адрес IP

    remote_addr

    Удаленный адрес IP

    В нашем случае, скрипт ip-up может содержать следующий фрагмент кода:
    $1
    iface
    $2
    device
    $3
    speed
    $4
    local_addr
    $5
    #!/bin/sh case $5 in 172.16.3.1) # this is vbourbon route add -net 172.16.3.0 gw 172.16.3.1;; ... esac exit 0

    В подобном режиме /etc/ppp/ip-down используется для того, чтобы отменить все действия ip-up после того, как связь PPP была завершена. В нашем скрипте

    /etc/ppp/ip-down следует иметь команду route, которая отменит маршрут, созданный /etc/ppp/ip-up.

    Однако схема матшрутов еще не полна. Мы установили записи таблицы маршрутов на оба PPP-хоста, но пока все другие хосты в обеих сетях не знают ничего относительно связи PPP. Это небольшая проблема, если все хосты в подразделении имеют свои, заданные по умолчанию маршруты в vbourbon, и все хосты в Brewery направляются по умолчанию на vlager. Если это не так, то ваш единственный выход в использованни демона динамической маршрутизации, например,gated. После создания сетевого маршрута на vlager он передаст новый маршрут всем хостам присоединенной подсети.


    Маршрутизация через шлюз (Gateway)


    В предыдущем разделе я рассмотрел только случай введения хоста с единственным Ethernet-интерфейсом. Достаточно часто приходится сталкиваться с сетями, соединенными с помощью gateway. Этот gateway может просто связывать два или больше Ethernet, а может обеспечивать связь с внешним миром (например, с Internet). Чтобы использовать сервис gateway, вы должны обеспечить сетевому уровню дополнительную информацию о маршрутизации.

    Маршрутизация через шлюз (Gateway)
    В предыдущем разделе я рассмотрел только случай введения хоста с единственным Ethernet-интерфейсом. Достаточно часто приходится сталкиваться с сетями, соединенными с помощью gateway. Этот gateway может просто связывать два или больше Ethernet, а может обеспечивать связь с внешним миром (например, с Internet). Чтобы использовать сервис gateway, вы должны обеспечить сетевому уровню дополнительную информацию о маршрутизации.


    Например, Ethernet-сети Virtual Brewery и Virtual Winery связаны через такой gateway, а именно хост vlager. Предположим, что vlager уже был отконфигурирован, и нам осталось только добавить новую запись в таблицу маршрутизации vstout, которая сообщает его ядру, что он может достичь всех хостов сети Winery через vlager. Соответствующее описание маршрута показано ниже. Ключевое слово gw сообщает, что следующий аргумент обозначает gateway:

    # route add wine-net gw vlager
    Конечно, любой хост в сети Winery, с которым вы желаете работать должен иметь соответствующую запись в таблице маршрутизации для сети Brewery, иначе вы сможете только послать данные, но ответа не получите.
    Этот пример описывает gateway, который только переключает пакеты между двумя изолированными Ethernet-сетями. Теперь предположим, что vlager также имеет соединение с Internet (работающее через дополнительную SLIP-связь). Тогда хотелось бы, чтобы пакеты для любой сети, отличной от Brewery, передавались vlager. Это может быть выполнено с помощью установки gateway по умолчанию для vstout:

    # route add default gw vlager
    Сетевое имя default (по умолчанию) связано с адресом 0.0.0.0, что обозначает маршрут, установленный по умолчанию. Вы не должны добавлять это имя к /etc/networks, потому что это построено в route.
    Если используя ping, вы обнаружили большой процент потерь пакетов при их проходе через несколько gateway, это может говорить об очень большой нагрузке на сеть. Потеря пакетов в основном происходит не из-за технических проблем, а скорее, благодаря временной избыточной нагрузке на направляющие хосты, которые из-за этого задерживают или даже выбрасывают поступающие пакеты.


    Маршрутизация и доставка почты


    Маршрутизаторы находят удаленные адреса, определяя, на который компьютер должно быть послано сообщение, и какой транспорт должен использоваться. В связанных Internet компьютерах часто имеется только один маршрутизатор, который ищет домены в DNS. Может иметься один маршрутизатор, который обрабатывает адреса, предназначенные для компьютеров в локальной сети и передавать любые адреса удаленному "умному хосту", например, почтовому серверу провайдера.
    Локальные адреса дают редиректорам, которых имеется обычно несколько, обрабатывать совмещение имен и пересылку также как и идентификацию локальных почтовых ящиков. Списки адресатов могут быть обработаны редиректорами пересылки или совмещением имен. Если адрес имеет псевдоним или перенаправление на другой (forward) любые сгенерированные адреса будут обработаны маршрутизаторами или редиректорами независимо по мере необходимости. Более общим случаем будет доставка в почтовоый ящик, но сообщения также могут быть пересланы в команду или добавлены к файлу, отличному от заданного по умолчанию почтового ящика.
    Транспорт ответственен за реализацию метода доставки; например, при посылке сообщения через подключение SMTP или при добавлении его к специфическому почтовому ящику. Маршрутизаторы и редиректоры выбирают, какой транспорт использовать для каждого адреса получателя. Если есть транспортные сбои, Exim генерирует сообщение об ошибке или задерживает адрес для более позднего повторения.
    С Exim Вы имеете много свободы в конфигурировании этих задач. Для каждой из них доступен ряд драйверов, из которого Вы можете выбирать те, в которых нуждаетесь. Вы описываете их Exim в различных разделах файла конфигурации. Транспорты определяются первыми, за ними редиректоры, а в конце маршрутизаторы. Нет никаких встроенных значений по умолчанию, хотя Exim распространяется с заданным по умолчанию файлом конфигурации, который охватывает простые случаи. Если Вы хотите изменить стратегию маршрутизации или изменить транспорт, самое простое начать с заданной по умолчанию конфигурации и делать изменения.


    Маршрутизация почты в Internet


    В Internet от машины адресата зависит полностью, выполняется ли любая специфическая маршрутизация почты вообще. По умолчанию сообщение должно быть передано машине адресата непосредственно, что оставляет фактическую маршрутизацию данных транспортому уровню IP.
    Маршрутизация почты в Internet
    В Internet от машины адресата зависит полностью, выполняется ли любая специфическая маршрутизация почты вообще. По умолчанию сообщение должно быть передано машине адресата непосредственно, что оставляет фактическую маршрутизацию данных транспортому уровню IP.


    Большинство машин будет обычно направлять всю почту доступному серверу почты, который способен обработать все это движение. Чтобы объявить это обслуживание, сервер создает так называемую запись MX для их локальной области в базе данных DNS. MX замещает обменник почты (
    Mail Exchanger) и заявляет, что серверная машина желает действовать как механизм продвижения данных почты для всех машин в этой области. MX-записи могут также использоваться, чтобы обработать трафик для машин, которые не соединены с Internet напрямую, подобно UUCP сетям или сетям компаний с машинами, хранящими конфиденциальную информацию.
    MX-записи также имеют приоритет (preference), связанный с ними. Это положительное целое число, которое позволяет определить очередность посылки почты. Если для одной машины доступны несколько почтовых серверов, обмен будет производиться через тот, приоритет которого меньше. Сервер с большим приоритетом будет задействован только в случае неудачи. Если машина сама является почтовым сервером, она не будет посылать письма серверам с приоритетом выше, чем у нее. Такой подход позволяет избежать зацикливания передачи почты.
    Предположим, что организация Foobar Inc хочет всю свою почту обрабатывать своей машиной mailhub. Они будут иметь примерно такую MX-запись в базе данных DNS:

    green.foobar.com. IN MX 5 mailhub.foobar.com.
    Это объявляет mailhub.foobar.com как обработчик почты для домена green.foobar.com со значением приоритета 5. Машина, которая хочет передать сообщение joe@green.foobar.com, проверит DNS и найдет MX-запись, указывающую на mailhub. Если нет никакого MX с приоритетом меньше, чем 5, сообщение будет передано на mailhub.
    Дальнейшую информацию по маршрутизации почты (например, для случаев, когда не работают MX-записи) рекомендую посмотреть в RFC-974.


    Маршрутизация почты в UUCP


    Маршрутизация почты в UUCP-сетях намного более сложна, чем в Internet, потому что транспортное программное обеспечение не выполняет никакой маршрутизации. В более ранние времена вся почта должна была быть адресована, используя пути bang. Они определяли список машин для передачи сообщения, отделяемые метками восклицания, и с последующим именем пользователя. Чтобы адресовать письмо пользователю Janet на машине moria, Вы использовали бы путь eek!swim!moria!janet. Это послало бы почту с Вашей системы на eek, оттуда на swim и в заключение на moria.
    Маршрутизация почты в UUCP
    Маршрутизация почты в UUCP-сетях намного более сложна, чем в Internet, потому что транспортное программное обеспечение не выполняет никакой маршрутизации. В более ранние времена вся почта должна была быть адресована, используя пути bang. Они определяли список машин для передачи сообщения, отделяемые метками восклицания, и с последующим именем пользователя. Чтобы адресовать письмо пользователю Janet на машине moria, Вы использовали бы путь eek!swim!moria!janet. Это послало бы почту с Вашей системы на eek, оттуда на swim и в заключение на moria.


    Очевидный недостаток этой методики состоит в том, что требуется, чтобы Вы помнили многое о сетевой топологии. Намного хуже то, что изменения в сетевой топологии, подобные удаляемым связям или удаляемым машинам, могут привести к прекращению хождения почты просто потому, что Вы не знали об изменении. И в заключение, в случае, если Вы посылаете письма в различные места, Вы должны модифицировать все эти маршруты.
    Первым шагом в идентификации имен машин было основание The UUCP Mapping Project. Он размещен в Rutgers University и регистрирует все официальные UUCP-имена, наряду с информацией относительно их соседей UUCP и их географическего расположения, создавая уверенность, что никакой hostname не используется дважды. Информация, собранная Mapping Project, издана как Usenet Maps, которые распространяются регулярно через Usenet. Типичная запись в карте (при удалении комментариев) походит на это:



    moria bert(DAILY/2), swim(WEEKLY)

    Эта запись говорит, что moria имеет связь с bert, которую она вызывает дважды в день, и со swim, которую она вызывает еженедельно. Мы вернемся к формату файлов карты позже.

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

    paths, также называемом базой данных pathalias. Если карты устанавливают, что Вы можете достигать bert через ernie, то запись pathalias для moria, сгенерированная из отрывка карты выше, выглядит следующим образом:

    moria ernie!bert!moria!%s

    Если Вы теперь дадите адрес janet@moria.uucp Вашему MTA, он выберет маршрут, показанный выше, и пошлет сообщение на ernie с адресом bert!moria!janet.

    Формирование файла paths из полных карт Usenet не очень хорошая идея. Информация в них обычно искажается и иногда устаревает. Следовательно, только ряд систем использует полные всемирные карты-UUCP, чтобы формировать свой файл paths. Многие сайты хранят только данные о своем окружении и посылают данные системам с более полными картами сети для дальнейшей передачи. Такая схема называется smart-host routing.


    Маршрутизация почты


    Когда дан адрес назначения, Exim сначала проверяет, является ли домен тем, который будет обработан на локальном компьютере, согласовывая адрес со списком в переменной конфигурации local_domains. Если эта опция не установлена, локальное имя используется как единственный локальный домен. Если домен локальный, адрес будет вручен редиректорам. Иначе адрес попадет к маршрутизаторам для выяснения пути, по которому письмо должно проследовать к адресату.
    Маршрутизация почты
    Когда дан адрес назначения, Exim сначала проверяет, является ли домен тем, который будет обработан на локальном компьютере, согласовывая адрес со списком в переменной конфигурации local_domains. Если эта опция не установлена, локальное имя используется как единственный локальный домен. Если домен локальный, адрес будет вручен редиректорам. Иначе адрес попадет к маршрутизаторам для выяснения пути, по которому письмо должно проследовать к адресату.




    Методы атаки Важно, что Вы, как


    Несанкционированный доступ
    Это значит, что к Вашим системам подключается тот, кому делать этого не следует. Например, кто-то пытается смонтировать Ваши каталоги NFS.
    Имеются различные способы избежать этого нападения. Тщательно определяя, кто может получать доступ через эти услуги, Вы можете предотвращать сетевой доступ кого угодно, за исключением допущенных пользователей.
    Эксплуатация известных слабостей в программах
    Некоторые программы и сетевые услуги первоначально не были разработаны с сильной защитой. Пример этого: BSD remote services (rlogin, rexec и другие r-сервисы). Термин "эксплойт" появился как раз из этого вида атак.
    Самый лучший способ защищать себя против этого типа нападения состоит в том, чтобы отключить любые уязвимые услуги или поискать их поздние версии, в которых такие ошибки часто исправлены.
    Denial of service
    Так называемые Denial of service attacks (атаки отрицания обслуживания) заставляют сервис или программу перестать работать или не дают другим их использовать. Они могут выполняться в сетевом уровне, посылкой тщательно подготовленных пакетов, которые сервис обработать не сможет. Они могут также выполняться в уровне прикладной программы, где тщательно подготовленные команды должны перегрузить избранный сервис.
    Предотвращение подозрительного сетевого трафика и подозрительных команд программ, это самые лучшие пути уменьшения риска таких атак. Полезно знать детали метода нападения, так что Вы должны изучать новые разработки в этой области. Сайты хакерской ориентации весьма популярны среди администраторов сетей именно по этой причине.
    Spoofing
    Этот тип нападения заставляет компьютер или прикладную программу работать не так, как от него ожидается. Например, во многих защитах используется проверка по IP-адресу. Вражеский компьютер прекрасно может выдать себя за машину с правильным адресом, что позволит пакетам с него проникнуть в Вашу систему. Например, такой тактики придерживается хорошо известный эксплойт для сервиса BSD rlogin.
    Защита против этого типа атак проста: надо тщательно отслеживать, откуда на самом деле пришел пакет, и соответствует ли его внутренняя информация тому окружению, которое ему сопутствует.
    Eavesdropping
    Это самый простой тип нападения. Некий компьютер сконфигурирован так, чтобы "слушать" и собирать данные, не принадлежащие ему. Грамотно написанный шпион может получить имя пользователя и его пароль для входа в систему. Широковещательные сети, например Ethernet, очень подвержены этой атаке, ведь в них все пакеты проходят через все машины в сети, а выбором нужных ей пакетов занимается каждая конкретная машина.
    Здесь помогает шифрование трафика.
    IP firewall очень полезен в предотвращении или уменьшении несанкционированного доступа, атак отрицания обслуживания и IP spoofing. Он не очень полезен в уходе от эксплуатации слабостей в сетевых сервисах или программах, а также при защите от подслушивания.


    Метрические значения


    Динамическая маршрутизация, основанная на RIP, выбирает самый лучший маршрут к некоторому хосту или сети, основываясь на наборе hops (переходов), то есть пакетов, рассылаемых перед передачей основной информации. Чем более короткий маршрут, тем лучше RIP его оценивает. Очень длинные маршруты с 16 или больше hops рассматриваются как неподходящие и отвергаются.
    Метрические значения
    Динамическая маршрутизация, основанная на RIP, выбирает самый лучший маршрут к некоторому хосту или сети, основываясь на наборе hops (переходов), то есть пакетов, рассылаемых перед передачей основной информации. Чем более короткий маршрут, тем лучше RIP его оценивает. Очень длинные маршруты с 16 или больше hops рассматриваются как неподходящие и отвергаются.


    Чтобы использовать RIP для управления информацией, маршрутизируемой внутри вашей сети, вы должны запустить gated на всех хостах. Во время загрузки gated проверяет все активные сетевые интерфейсы. Если имеется больше одного активного интерфейса (не считая loopback), он предполагает, что хост передает пакеты между несколькими сетями и будет активно обмениваться маршрутной информацией. Иначе, он будет только пассивно получать RIP-пакеты и модернизировать локальную таблицу маршрутизации.
    Получив информацию из локальной таблицы маршрутизации,
    gated вычисляет длину маршрута по так называемому метрическому значению (metric value), связанному с записью в таблице. Это метрическое значение задается администратором системы при конфигурировании маршрута и должно отражать фактическую трудоемкость использования этого маршрута. Поэтому размер маршрута к подсети, с которой хост непосредственно связан, должен всегда быть установлен в ноль, в то время как маршрут, проходящий через два шлюза, должен иметь размер два. Обратите внимание на то, что Вы не должны беспокоиться относительно метрического значения, когда не используете RIP или gated.


    Mode и default


    Эти команды нужны для того, чтобы переключить последовательную линию в SLIP-режим и сконфигурировать интерфейс.

    mode и default
    Эти команды нужны для того, чтобы переключить последовательную линию в SLIP-режим и сконфигурировать интерфейс.


    Команда mode является последней выполняемой dip перед переходом в режим демона. Она ничего не возвращает до появления ошибки.
    mode принимает как аргумент имя протокола. dip сейчас распознает SLIP , CSLIP, SLIP6, CSLIP6, PPP и TERM как имена протоколов. Текущая версия dip не понимает adaptive SLIP.
    После запуска на последовательной линии режима SLIP dip выполняет ifconfig для настройки интерфейса и вызывает route для установки маршрутизации на удаленную машину.
    Если скрипт выполняет команду default перед командой mode, dip создает маршрут по умолчанию для SLIP-связи.


    Модем не соединяется


    Если модем не указывает, что DTR-линия была установлена, когда uucico вызывает удаленный сайт, возможно, Вы задали неправильное устройство для uucico. Если модем распознает DTR, сверьтесь с программой терминала, которой Вы можете записывать данные в модем. Если она работает, включите отображение на экране командой \E в начале скрипта модема. Если это не отображает команды в скрипте модема, проверьте, правильно ли настроен модем. Если Вы видите копии команд, проверьте, отключили ли Вы ответы модема, или устанавливаете их к кодам числа. Проверьте правильность скрипта модема. Не забудьте, что Вы должны записать две наклонных черты влево, чтобы послать одну такую черту модему.

    Модем не соединяется
    Если модем не указывает, что DTR-линия была установлена, когда uucico вызывает удаленный сайт, возможно, Вы задали неправильное устройство для uucico. Если модем распознает DTR, сверьтесь с программой терминала, которой Вы можете записывать данные в модем. Если она работает, включите отображение на экране командой \E в начале скрипта модема. Если это не отображает команды в скрипте модема, проверьте, правильно ли настроен модем. Если Вы видите копии команд, проверьте, отключили ли Вы ответы модема, или устанавливаете их к кодам числа. Проверьте правильность скрипта модема. Не забудьте, что Вы должны записать две наклонных черты влево, чтобы послать одну такую черту модему.




    Модем пробует соединятся, но не может


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

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




    Монтирование файловой системы


    Файловая система proc (или
    procfs) обычно монтируется во время загрузки в
    /proc. Самый лучший метод состoит в том, чтобы добавить следующую строку в файл /etc/fstab:

    # procfs mount point: none /proc proc defaults
    Затем надо выполнить mount /proc в скрипте /etc/rc.
    Сейчас procfs имеется в большинство ядер по умолчанию. Если procfs в Вашем ядре нет, Вы получите сообщение вида: mount: fs type procfs not supported by kernel. Придется перестроить с ответом “yes” на вопрос о поддержке procfs.


    Монтирование тома NFS Монтирование


    Параметр nfs_volume имеет вид remote_host:remote_dir. Он указаывает определенную файловую систему NFS, причем можно опустить параметр -t nfs.
    Имеется ряд дополнительных опций, которые Вы можете определить в команде mount. Они могут быть заданы переключателем -o в командной строке или в области опций файла /etc/fstab. В обоих случаях составные опции отделяются друг от друга запятыми. Опции, определенные в командной строке, всегда отменяют те, что были заданы в файле fstab.
    Типовая запись в /etc/fstab могла бы быть такой:

    # volume mount point type options news:/var/spool/news /var/spool/news nfs timeo=14,intr
    Этот значение затем может быть использовано при монтировании:

    # mount news:/var/spool/news
    В отсутствии записи в fstab, NFS устанавливает большинство параметров mount по умолчанию. Например, предположим, что Вы монтируете home-каталоги Ваших пользователей с машины moonshot, которая использует заданный по умолчанию размер блока, равный 4k, для операции чтения-записи. Вы могли бы уменьшить размер блока до 2k, чтобы подойти под размер Linux-пакетов, введя следующую команду:

    # mount moonshot:/home /home -o rsize=8192,wsize=8192
    Список всех допустимых опций есть на man-странице по
    nfs(5). Ниже приведен список наиболее популярных опций:
    rsize=n и wsize=n
    Точно определяют размер пакетов, используемый NFS-клиентами при чтении и записи запросов, соответственно. В настоящее время они определены по умолчанию в зависимости от версии ядра, но обычно это 1024 байта, из-за предела на размер UDP-пакета.
    timeo=n
    Устанавливает время (в десятых долях секунды), которое NFS-клиент будет ждать запрос, чтобы завершить работу. Значение по умолчанию 7 (0.7 секунды). Что произойдет после окончания времени ожидания зависит от того, используете Вы опцию hard или
    soft.
    hard
    Отмечает этот том как hard-смонтированный. Задано по умолчанию. Эта опция предписывает серверу выдать сообщение на консоль при окончании времени ожидания и продолжать попытки смонтировать том.
    soft



    Противоположность hard. В случае окончания времени ожидания процесс, который пытается выполнить действие с файловой системой, получит ошибку ввода-вывода.

    intr

    Разрешает прервать обращение к NFS. Удобно в случае недоступности сервера.

    Кроме rsize и wsize, все эти опции обращаются к клиенту, если сервер стал временно недостижим. Они работают вместе следующим способом: всякий раз, когда клиент посылает запрос к NFS-серверу, он ожидает, что операция закончится после заданного интервала времени (точно установленного в опции блокировки по времени, timeout). Если никакого подтверждения не получено в этот промежуток времени, то появится так называемая незначительная остановка по времени (minor timeout), и операция повторится, но уже с интервалом блокировки по времени вдвое большим. После достижения максимальной блокировки по времени (60 секунд), происходит глобальная блокировка по времени (major timeout). Вот тут-то и срабатывают опции hard или soft .

    По умолчанию, глобальная блокировка по времени заставит клиента напечатать сообщение на консоль и начать все снова. В принципе это может продолжаться вечно. Значения, которые упрямо повторяют операцию до тех пор, пока сервер не становится доступным, называются hard-mounted. В противоположность им значения soft-mounted генерируют ошибку ввода-вывода для процесса всякий раз, когда происходит глобальная блокировка по времени. Из-за того, что write-behind вводится буферным кэшем, это условие ошибки не распространяется непосредственно на процесс прежде, чем он вызовет функцию write в следующий раз. Дело в том, что иначе программа никогда не сможет убедиться в том, что операция записи в ресурс, помеченный как soft-mounted, имела место вообще.

    Поставили ли Вы hard или soft-mount значение, это не только вопрос вкуса, но также и то, что Вы должны сделать с той информацией, которую хотите получить от этого значения. Например, если Вы монтируете Ваши Х-программы NFS, Вы конечно не хотели бы, чтобы ваш X-сеанс рухнул только потому, что кто-то свалил сеть, запустив семь копий xv в одно и тоже время, или скажем, вытащив Ethernet-разъем. Используя hard-mounting, Вы удостоверитесь в том, что компьютер будет ждать, пока не появится возможность заново восстановить контакт с nfs-сервером. С другой стороны, некритические данные типа новостей или FTP-архив могут быть soft-mounted, так что это не повесит сеанс в случае, если удаленная машина должна стать временно недосягаемой или просто выключенной. Если сетевая связь с сервером медленная или проходит через программу маршрутизации, то Вы можете также увеличить начальную блокировку по времени, используя опцию timeo или значение hard-mount, но разрешите прерывание вызова NFS, так чтобы Вы могли прервать любое действие с файлами.



    Hard- mount представляют проблему, потому что, по умолчанию, операции с файлами не прерываются. Таким образом, если процесс пытается, например, записать файл на удаленной машине, а она недоступна, программа пользователя висит, а пользователь бегает вокруг нее, не в состоянии прервать процесс записи. Если Вы используете опцию intr при hard mount, сигналы процессу прервут NFS-вызов, так что пользователь все же сможет продолжать работу.

    Обычно daemon rpc.mountd будет следить, какие каталоги какими хостами были смонтированы. Эта информация может быть отображена при использовании программы showmount, которая также включена в пакет сервера NFS:

    # showmount -e moonshot

    Export list for localhost: /home # showmount -d moonshot

    Directories on localhost: /home # showmount -a moonshot

    All mount points on localhost: localhost:/home


    Монтирование удаленных томов NetWare


    В среде NFS мы использовали бы команду mount в Linux, чтобы смонтировать удаленную файловую систему. К сожалению NCP имеет уникальные требования, которые делают непрактичным встраивание в нормальный mount. Linux имеет команду ncpmount, которую мы используем вместо этого. Команда ncpmount одно из инструментальных средств в пакете ncpfs, который доступен в откомпилированном виде или в исходных кодах с ftp.gwdg.de/pub/linux/misc/ncpfs. На момент написания книги текущей была версия 2.2.0.
    Прежде, чем Вы сможете монтировать тома NetWare, Вы должны гарантировать, что сетевой интерфейс IPX конфигурирован правильно (как описано ранее). Затем, Вы должны знать детали входа в систему относительно сервера NetWare: имя пользователя и пароль. Наконец, Вы должны знать, какой том и в какой локальный каталог надо смонтировать.


    Национальный набор символов


    Имелись предложения исправить стандарт RFC-822, чтобы поддерживать различные типы сообщений: простые текстовые, двоичные данные, файлы Postscript и т.д. Набор стандартов и RFC, покрывающий эти аспекты, обычно упоминается как MIME, или многоцелевые расширения почты Internet. Между прочим, это также позволяет получателю узнать, использовался ли набор символов, отличный от стандартного ASCII, при написании сообщения. Это до некоторой степени обеспечивается elm.
    Национальный набор символов
    Имелись предложения исправить стандарт RFC-822, чтобы поддерживать различные типы сообщений: простые текстовые, двоичные данные, файлы Postscript и т.д. Набор стандартов и RFC, покрывающий эти аспекты, обычно упоминается как MIME, или многоцелевые расширения почты Internet. Между прочим, это также позволяет получателю узнать, использовался ли набор символов, отличный от стандартного ASCII, при написании сообщения. Это до некоторой степени обеспечивается elm.


    Набор символов, используемый Linux, чтобы представить символы, обычно упоминается как ISO-8859-1, что является именем стандарта, которому он соответствует. Это также известно как Latin-1. В России принят кириллический стандарт KOI-8R. Любые символы в сообщении из этого набора символов должны иметь следующую строку в заголовке:

    Content-Type: text/plain; charset=iso-8859-1
    Для кириллицы это будет:

    Content-Type: text/plain; charset=KOI-8R
    Система получателя должна распознать это поле и принять соответствующие меры при отображении сообщения. Значение по умолчанию для текстовых (text/plain) сообщений us-ascii.
    .
    Чтобы отображать сообщения с набором символов, отличным от ASCII, elm должен знать, как печатать эти символы. По умолчанию, когда elm получает сообщение с полем charset, отличным от us-ascii, она пробует отображать сообщение, используя команду metamail. Сообщения, которые требуют использования metamail, отображаются с меткой M в самом первом столбце в экране краткого обзора.
    Так как набор символов Linux ISO-8859-1, вызов metamail не требуется для отображения сообщения, использующего этот набор символов. Если elm знает, что дисплей понимает ISO-8859-1, она не будет использовать metamail, а отобразит сообщение непосредственно. Это может быть выполнено установкой следующей опции в глобальном файле elm.rc:



    displaycharset = iso-8859-1

    Обратите внимание, что Вы должны установить эти опции даже, когда Вы никогда не собираетесь посылать или получать сообщения, которые фактически содержат символы, отличные от ASCII. Это потому, что люди, которые посылают такие сообщения обычно конфигурируют их своей почтовой программой, чтобы поместить соответствующее поле Content-Type: в заголовке письма. Для России следует задать поддержку кириллицы:

    displaycharset = KOI-8R

    Однако, установки этой опции в elm.rc

    недостаточно. Проблема состоит в том, что при отображении сообщения, elm вызывает библиотечную функцию для каждого символа, чтобы определить, является ли он печатаемым или нет. По умолчанию, эта функция распознает только символы ASCII, и отображает все другие символы как ^?. Вы можете преодолеть это, устанавливая переменную среды LC_CTYPE как ISO-8859-1. Это сообщает, что библиотека приняла символы Latin-1 как печатаемые. Для России надо задать LC_CTYPE как KOI-8R. Поддержка этой и ряда других возможностей появилась в стандартной библиотеке Linux, начиная с библиотек версии 4.5.8.

    При посылке сообщений, которые содержат специальные символы из ISO-8859-1, Вы должны удостовериться, что установлены еще две переменные в файле elm.rc:

    charset = iso-8859-1 textencoding = 8bit

    Это заставит elm сообщить набор символов как ISO-8859-1 в заголовке почты и посылать это письмо как 8 битовое (по умолчанию все символы имеют 7 бит). Для России это очень важно, поскольку по умолчанию elm срезает верхний (восьмой) бит каждого символа, а для кириллицы этого допустить нельзя!

    Конечно, любая из этих опций может также быть установлена в частном файле elmrcc вместо глобального.


    Написание главных (Master) файлов


    Примеры 6-10, 6-11, 6-12 и 6-13 дают типовые файлы для сервера имен сети brewery, размещенного на машине vlager. Это довольно простая конфигурация для одиночной локальной сети.

    Написание главных (Master) файлов
    Примеры 6-10, 6-11, 6-12 и 6-13 дают типовые файлы для сервера имен сети brewery, размещенного на машине vlager. Это довольно простая конфигурация для одиночной локальной сети.


    Файл кэша named.ca в примере 6-10
    показывает типовые записи корневого сервера имен. Типичный файл кэша обычно описывает около десятка серверов. Вы можете получать текущий список серверов для корневого домена с помощью команды nslookup. Она описана чуть ниже.


    Настройка elm elm является сокращением


    Теоретически, Вы можете выполнять неконфигурированный
    elm, и все работает хорошо, если Вы очень удачливы. Но имеются несколько опций, которые должны быть установлены.
    При запуске elm читает набор переменных конфигурации из файла elm.rc в /etc/elm. Затем, она будет пытаться читать файл .elm/elmrc в Вашем домашнем каталоге. Вы обычно не должны менять этот файл самостоятельно. Он создается, когда Вы выбираете "Save new options" в меню опций elm.
    Набор опций для частного файла elmrc также доступен в глобальном файле elm.rc. Большинство установок в Вашем частном файле elmrc меняют соответствующие параметры из глобального файла.


    Настройка интерфейса для IP После


    ifconfig используется, чтобы сделать интерфейс доступным для ядра, что включает в себя назначение IP-адреса и других параметров и активизацию интерфейса. Активизация означает, что ядро будет посылать и получать IP-пакеты через интерфейс. Самый простой путь установки:

    ifconfig interface ip-address
    Эта команда связывает адрес ip-address
    с интерфейсом interface и активизирует его. Все остальные параметры устанавливаются по умолчанию. Например, маска подсети по умолчанию получена из сетевого класса IP-адреса (255.255.0.0 для класса B). ifconfig описан более подробно в конце этой главы.
    route позволяет Вам добавлять или удалять маршруты из таблицы маршрутизации. Это может быть использовано так:

    route [add|del] [-net|-host] target [if]
    Аргументы add и del
    определяют добавлять или удалять маршрут target. Аргументы -net и -host определяют тип маршрута: к сети или к компьютеру (второй вариант принимается по умолчанию). Аргумент if определяет, к какому сетевому интерфейсу относится команда.


    Настройка IP Accounting Поскольку


    Общий синтаксис для IP accounting с ipfwadm:

    # ipfwadm -A [direction] [command] [parameters]
    Появился новый параметр direction. Он принимает значения in, out или both. Все значения считаются с точки зрения linux-машины, так что in задает входящий трафик, out задает исходящий трафик, а
    both оба типа сразу.
    Общий синтаксис для ipchains и
    iptables:

    # ipchains -A chain rule-specification
    # iptables -A chain rule-specification
    Команды ipchains и iptables
    позволяют Вам определять направление в стиле, больше похожем на определения правил. IP Firewall Chains не позволяет настроить правила для обоих направлений сразу, но позволяет настроить правила в наборе forward, чего старая реализация не умела.
    Команды очень похожи на свои аналоги для правил firewall за исключением того, что стратегии здесь не применяются. Мы можем добавлять, вставлять, удалять и просматривать список правил учета. В случае
    ipchains и iptables, все имеющие силу правила считаются правилами для учета, и любая команда, которая не определяет опцию -j, выполняет только учет.
    Параметры спецификации правила для учета IP такие же, как и для IP firewall.


    Настройка IP Masquerade Если Вы


    Правила masquerade представляют собой специальный класс правил фильтрации. Вы можете обеспечить masquerade только пакетов, которые получены на одном интерфейсе и будут направлены другому интерфейсу. Чтобы настроить masquerade надо создать правило, очень похожее на правило пересылки firewall, но со специальными параметрами, которые сообщают ядру, что надо использовать masquerade пакетов. Команда ipfwadm использует опцию -m, ipchains использует -j MASQ, а в iptables есть опция -j MASQUERADE, чтобы указать, что пакеты, соответствующие спецификации правила, должны быть masqueraded.
    Давайте рассмотрим пример. Допустим, у студента университета Groucho Marx дома есть несколько машин, объединенных в маленькую сеточку Ethernet. Она использует один из зарезервированных частных сетевых адресов. Сеть доступна и другим студентам, которые имеют интерес в использовании Internet. Для доступа в Internet используется простое соединение dial-up PPP.
    Студенты настраивают Linux-машину для поддержки связи dial-up и работы в качестве маршрутизатора сети. Ее IP-адрес при модемном соединении не важен. Linux-маршрутизатор конфигурируется с поддержкой IP masquerade и использует один из частных сетевых адресов для локальной сети:
    192.168.1.0. При этом гарантируется, что каждый из компьютеров в этой сети имеет заданный по умолчанию маршрут, указывающий на Linux-маршрутизатор.
    Чтобы запустить эту конфигурацию с помощью ipfwadm, надо только скомандовать:

    # ipfwadm -F -p deny
    # ipfwadm -F -a accept -m -S 192.168.1.0/24 -D 0/0
    или с ipchains:

    # ipchains -P forward -j deny
    # ipchains -A forward -s 192.168.1.0/24 -d 0/0 -j MASQ
    или с iptables:

    # iptables -t nat -P POSTROUTING DROP
    # iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
    Теперь всякий раз, когда любой из компьютеров сети пробует соединяться с сервисом на удаленном компьютере, их пакеты будет автоматически masqueraded Linux-маршрутизатором. Первое правило в каждом примере запрещает маршрутизацию любого другого пакета и добавляет некоторую защиту.



    Чтобы посмотреть созданные правила masquerade, используйте параметр -l команды ipfwadm.

    Чтобы отобразить только что созданные правила, введите:
    # ipfwadm -F -l -e

    вывод будет напоминать следующее:
    # ipfwadm -F -l -e

    IP firewall forward rules, default policy: accept pkts bytes type prot opt tosa tosx ifname ifaddress 0 0 acc/m all ---- 0xFF 0x00 any any

    Здесь /m указывает, что это правило masquerade.

    Посмотреть правила командой ipchains можно с опцией -L. Аналогично предыдущему примеру с ipchains:
    # ipchains -L

    Chain input (policy ACCEPT): Chain forward (policy ACCEPT): target prot opt source destination ports MASQ all ------ 192.168.1.0/24 anywhere n/a

    Chain output (policy ACCEPT):

    Все правила с адресатом MASQ являются правилами masquerade.

    Наконец, то же самое можно сделать командой iptables :
    # iptables -t nat -L

    Chain PREROUTING (policy ACCEPT) target prot opt source destination

    Chain POSTROUTING (policy DROP) target prot opt source destination MASQUERADE all -- anywhere anywhere MASQUERADE

    Chain OUTPUT (policy ACCEPT) target prot opt source destination

    Правила masquerade появляются с адресатом MASQUERADE .


    Настройка ядра для IP Accounting


    Чтобы активизировать Linux IP accounting, Вы должны сначала проверить сконфигурировано ли Ваше ядро Linux для этого. Проверьте, существует ли файл /proc/net/ip_acct. Если да, Ваше ядро уже поддерживает IP accounting. Если нет, придется построить новое ядро, гарантируя, что Вы отвечаете “Y” для следующих опций (в версиях 2.0 и 2.2 ядра):

    Networking options ---> [*] Network firewalls [*] TCP/IP networking [*] IP: accounting
    или в версии 2.4 ядра:

    Networking options ---> [*] Network packet filtering (replaces ipchains)


    Настройка ядра для IP Firewall


    Ядро Linux надо настроить на поддержку IP firewall. Для этого нужно просто указать параметры при настройке ядра, например, командой
    make menuconfig. Подробно настройка ядра описана в главе 3. В ядрах 2.2 надо выбрать следующие опции:

    Networking options ---> [*] Network firewalls [*] TCP/IP networking [*] IP: firewalling [*] IP: firewall packet logging
    Настройка ядра для IP Firewall
    Ядро Linux надо настроить на поддержку IP firewall. Для этого нужно просто указать параметры при настройке ядра, например, командой
    make menuconfig. Подробно настройка ядра описана в главе 3. В ядрах 2.2 надо выбрать следующие опции:

    Networking options ---> [*] Network firewalls [*] TCP/IP networking [*] IP: firewalling [*] IP: firewall packet logging



    В ядрах серий 2.4.0 и старше надо выбрать гораздо больше опций:

    Networking options ---> [*] Network packet filtering (replaces ipchains) IP: Netfilter Configuration ---> . Userspace queueing via NETLINK (EXPERIMENTAL) IP tables support (required for filtering/masq/NAT) limit match support MAC address match support netfilter MARK match support Multiple port match support TOS match support Connection state match support Unclean match support (EXPERIMENTAL) Owner match support (EXPERIMENTAL) Packet filtering REJECT target support MIRROR target support (EXPERIMENTAL) Packet mangling TOS target support MARK target support LOG target support ipchains (2.2-style) support ipfwadm (2.0-style) support


    Настройка ядра для IP Masquerade


    Ядра ряда 2.4 больше не предлагают поддержку IP masquerade как опцию при сборке ядра. Вместо этого, Вы должны выбрать фильтрацию сетевых пакетов:

    Networking options ---> [M] Network packet filtering (replaces ipchains)
    В ядрах серии 2.2 будет создан ряд специфических для протоколов модулей в течение сборки ядра. Некоторые протоколы начинаются с исходящего запроса на одном порте, а затем ожидают входящее подключение на другом. Обычно они не могут быть masqueraded, так как нет способа логически связать оба соединения без работы напрямую с пакетами и понимания логики протокола. Модули делают именно это: они фактически смотрят внутрь пакетов и позволяют masquerading работать для поддержанных протоколов. Такие модули называют также модулями-помощниками. Поддерживаемые протоколы:

    Модуль Протокол
    Вы должны загрузить эти модули вручную, используя команду insmod, чтобы выполнить их. Обратите внимание, что эти модули не могут быть загружены демоном kerneld. Каждый из модулей принимает параметр определяющий, на каких портах он будет слушать. Для модуля RealAudio Вы могли бы использовать:
    ip_masq_ftp
    FTP
    ip_masq_irc
    IRC
    ip_masq_raudio
    RealAudio
    ip_masq_cuseeme
    CU-See-Me
    ip_masq_vdolive
    For VDO Live
    ip_masq_quake
    IdSoftware's Quake

    # insmod ip_masq_raudio.o ports=7070,7071,7072
    Порты, которые Вы должны определить, зависят от протокола. IP masquerade mini-HOWTO (автор: Ambrose Au) объясняет подробности о модулях IP masquerade и как конфигурировать их.
    Пакет netfilter включает модули, которые выполняют подобные функции. Например, чтобы обеспечить работу сеансов FTP, используйте модули ip_conntrack_ftp и
    ip_nat_ftp.o.


    Настройка ядра для IPX и NCPFS


    Следующие параметры должны быть выбраны, если вы хотите иметь в Linux поддержку протокола IPX:

    General setup ---> [*] Networking support
    Networking options ---> The IPX protocol
    Network device support ---> [*] Ethernet (10 or 100Mbit) ... and appropriate Ethernet device drivers
    Если вы хотите, чтобы Linux поддерживала файловую систему NCP, чтобы монтировать удаленные тома NetWare, вы должны дополнительно выбрать параметры:

    Filesystems ---> [*] /proc filesystem support NCP filesystem support (to mount NetWare volumes)
    Когда вы откомпилируете и установите ваше новое ядро, поддержка протокола IPX и файловой системы NCP будет доступна.


    Настройка ядра Все дистрибутивы


    В любом случае при работе с Linux-системой Вы должны быть знакомы с формированием ядра. Это не так сложно! В данном руководстве рассмотрены только параметры конфигурации, которые воздействуют на работу с сетями.
    Очень важна версия ядра. Ядра Linux нумеруются по следущей схеме: 2.2.14. Первая цифра показывает
    старший номер версии. Эта цифра изменяется, когда вносятся значительные изменения. Старший номер версии сменился с 1 на 2, когда ядро было перенесено на другие платформы (не Intel). Второе число определяет младший номер версии. Разработчики Linux договорились о том, что четный младший номер версии показывает production (готовую) или stable (стабильную) версию ядра, а нечетный показывает development (разрабатываемую) или unstable (нестабильную) версию. Вы должны использовать на машине, которая является важной, стабильные ядра потому, что они надежны настолько, насколько вообще может быть надежна программа. Можно использовать нестабильные ядра, если нужны некоторые экспериментальные возможности Linux, но они не отлажены до конца. Они надежней, чем Windows, но все же ниже того минимума, который позволителен в Linux. Третье число показывает номер редакции версии ядра. Система развивается, в ней устраняются небольшие ошибки, появляются новые возможности, что и отражается этим номером.
    При запуске программы make menuconfig Вы получите текстовое меню с опциями настройки ядра. На вопрос о поддержке сетей TCP/IP надо ответить "y" для ее включения.


    Настройка mgetty Daemon


    mgetty daemon доступен в исходных кодах с ftp://alpha.greenie.net/pub/mgetty/source и почти во всех дистрибутивах Linux. Демон mgetty
    отличается от большинства других версий getty, которые были разработаны для Hayes-совместимых модемов. Он поддерживает прямые подключения терминала, но лучше всего подходит для dialup прикладных программ. Вместо DCD-линии для определения входного подключения, эта версия слушает сообщение RING, генерируемое современными модемами, когда они обнаруживают входящее обращение и не сконфигурированы для автоответа.
    Настройка mgetty Daemon
    mgetty daemon доступен в исходных кодах с ftp://alpha.greenie.net/pub/mgetty/source и почти во всех дистрибутивах Linux. Демон mgetty
    отличается от большинства других версий getty, которые были разработаны для Hayes-совместимых модемов. Он поддерживает прямые подключения терминала, но лучше всего подходит для dialup прикладных программ. Вместо DCD-линии для определения входного подключения, эта версия слушает сообщение RING, генерируемое современными модемами, когда они обнаруживают входящее обращение и не сконфигурированы для автоответа.


    Главный исполняемый модуль назван /usr/sbin/mgetty , а основной файл настройки
    /etc/mgetty/mgetty.config. Имеется ряд других программ и файлов конфигурации, которые покрывают другие свойства mgetty .
    Для большинства инсталляций настройка сводится к правке /etc/mgetty/mgetty.config и добавлении соответствующих записей в файл /etc/inittab, чтобы выполнять mgetty автоматически.
    Пример 4-6 показывает очень простой файл настройки mgetty. Этот пример определяет два последовательных устройства. Первое,
    /dev/ttyS0, поддерживает Hayes-модем со скоростью 38,400 bps. Второе, /dev/ttyS0, поддерживает терминал прямого доступа VT100 со скоростью 19,200 bps.


    Настройка сервера только для кэширования


    Это особая конфигурация named. Такой сервер в действительности не обслуживает домен, а просто осуществляет переброску всех запросов DNS, произведенных на Ваш компьютер. Преимущество этой схемы в том, что она создает кэш. Так что только первый запрос для специфического компьютера фактически будет послан серверу имен в Internet. Любой повторный запрос будет обработан из кэша. Такая схема названа caching-only. Это удобно при работе с Internet по модему, как описано в главе 7 и главе 8.

    Настройка сервера только для кэширования
    Это особая конфигурация named. Такой сервер в действительности не обслуживает домен, а просто осуществляет переброску всех запросов DNS, произведенных на Ваш компьютер. Преимущество этой схемы в том, что она создает кэш. Так что только первый запрос для специфического компьютера фактически будет послан серверу имен в Internet. Любой повторный запрос будет обработан из кэша. Такая схема названа caching-only. Это удобно при работе с Internet по модему, как описано в главе 7 и главе 8.


    Файл named.boot для caching-only сервера имен выглядит примерно так:

    ; named.boot file for caching-only server directory /var/named primary 0.0.127.in-addr.arpa named.local ; localhost network cache . named.ca ; root servers
    В дополнение к этому файлу named.boot, Вы должны установить файл named.ca со списком корневых серверов имен. Вы можете копировать и использовать для этой цели пример 6-10. Другие файлы не требуются.


    Настройка шлюза


    Отконфигурировать машину для передачи пакетов между двумя сетями Ethernet довольно просто. Вернемся к vlager, который оборудован двумя Ethernet-платами, каждая из них связана с одной из двух сетей. Все, что вы должны сделать, это сконфигурировать оба интерфейса отдельно, дав им их IP-адреса.

    Настройка шлюза
    Отконфигурировать машину для передачи пакетов между двумя сетями Ethernet довольно просто. Вернемся к vlager, который оборудован двумя Ethernet-платами, каждая из них связана с одной из двух сетей. Все, что вы должны сделать, это сконфигурировать оба интерфейса отдельно, дав им их IP-адреса.


    Весьма полезно добавлять информацию относительно двух интерфейсов к файлу hosts путем показанным ниже так, чтобы иметь удобные имена для них:

    172.16.1.1 vlager.vbrew.com vlager vlager-if1 172.16.2.1 vlager-if2
    Последовательность команд для создания двух интерфейсов:

    # ifconfig eth0 vlager-if1
    # route add brew-net
    # ifconfig eth1 vlager-if2
    # route add wine-net
    Если эта последовательность не работает, проверьте, включена ли в ядре поддержка IP forwarding. Для этого посмотрите первое число во второй строке файла /proc/net/snmp, оно должна быть 1.


    Настройка tin Наиболее универсальный


    На 486DX50 ему нужно приблизительно 30 секунд, чтобы найти 1000 статей, при чтении непосредственно с диска. При обращении по NNTP к загруженному серверу новостей это займет более 5 минут. Вы можете уточнить это, регулярно модифицируя индексный файл с опцией -u или вызывая tin с опцией -U.
    Обычно tin формирует дамп баз данных в домашнем каталоге пользователя ниже иерархии .tin/index. Это может быть дорого в терминах ресурсов, так что иногда стоит хранить одну копию. Это может быть достигнуто объявлением tin как setuid, например, к пользователю news. Тогда tin будет хранить все базы данных в /var/spool/news/.index.
    Версия tin, включенная в некоторые дистрибутивы Linux, не имеет поддержки NNTP. При вызове как rtin
    или с опцией -r tin пробует соединяться с NNTP-сервером, заданным в файле /etc/nntpservernntpserver просто содержит имя сервера в одной строке.


    Netfilter и таблицы IP (ядра 2.4)


    Внимание: во время подготовки этой книги проект netfilter еще не был стабильным. Я надеюсь, что Вы простите ошибки в описании
    netfilter или связанных с пакетом инструментальных средств конфигурации, которые следуют из изменений, происшедших после подготовки этого материала. Если возникают сомнения, обратитесь к документам HOWTO в сети. Я постарался описать netfilter максимально точно.
    Так, что было неправильно с IP chains? Они значительно улучшили эффективность и управление правилами firewall. Но они все равно обрабатывали пакеты очень длинным путем, особенно в связке с другими возможностями firewall, например, IP masquerade (описан в главе 11) и другими формами трансляции адреса. Часть этой проблемы существовала потому, что IP masquerade (маскировка IP) и Network Address Translation (сетевая трансляция адресов) были разработаны независимо от IP firewall и интегрированы в него позже.
    Однако, имелись другие проблемы. В частности, набор правил input описывал весь входной поток уровня IP как одно целое. Этот набор воздействовал как на пакеты, которые предназначены для этого компьютера, так и на те, которые будут переданы им далее. Это было неправильно потому, что такой подход спутал функцию цепочки input с функцией цепочки forward, которая применялась только к исходящим пакетам. Возникали весьма замысловатые конфигурации для разной обработки входящих и транслируемых пакетов.
    Еще одной проблемой было то, что механизм фильтрации находился прямо в ядре системы, и изменить логику его работы было невозможно без коренной переработки всего ядра. Так возник netfilter, который позволяет встраивать в ядро дополнительные модули с другой логикой фильтрации и имеет более простую схему настройки.
    Ключевыми различиями стало удаление из ядра кода для маскировки IP и изменение в логике работы наборов правил input и output. Появился новый расширяемый инструмент конфигурации iptables.
    В IP chains набор правил input применяется ко всем пакетам, полученным компьютером, независимо от того, предназначены ли они для локального компьютера или направлены на другой компьютер. В



    netfilter набор правил input применяется только к пакетам, предназначенным для локального компьютера. Цепочка forward теперь применяется исключительно к пакетам, предназначенным для передачи другому компьютеру. В IP Сhains набор правил output применяется ко всем пакетам, исходящим с компьютера, независимо от того, сгенерированы ли они на локальном компьютере. В

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

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

    netfilter.

    Рассмотрим случай конфигурации, в которой по умолчанию для input, forward и output задана стратегия deny. В IP chains для пропуска всех пакетов потребовалось бы шесть правил.

    В netfilter эта сложность исчезает полностью. Для сервисов, которые должны проходить через firewall, но не завершаются на локальном компьютере, требуются только два правила: по одному для прямого и обратного прохода в наборе правил forward.

    Документ PACKET-FILTERING-HOWTO предлагает очень подробный список изменений, которые были сделаны. Поэтому давайте сосредоточимся на более практических аспектах.


    Newgroup и rmgroup


    Два сообщения имеют дело с созданием или удалением newsgroups: это newgroup и rmgroup . Newsgroups ниже "обычной" иерархии могут быть созданы только после того, как среди читателей Usenet было проведено обсуждение и утверждение. Правила для иерархии alt представляют собой что-то близкое к анархии. Для подробной информации см. регулярные регистрации в news.announce.newusers и news.announce.newgroups. Никогда не посылайте сообщение newgroup или rmgroup самостоятельно, если Вы определенно не знаете, что Вам позволено.
    newgroup и rmgroup
    Два сообщения имеют дело с созданием или удалением newsgroups: это newgroup и rmgroup . Newsgroups ниже "обычной" иерархии могут быть созданы только после того, как среди читателей Usenet было проведено обсуждение и утверждение. Правила для иерархии alt представляют собой что-то близкое к анархии. Для подробной информации см. регулярные регистрации в news.announce.newusers и news.announce.newgroups. Никогда не посылайте сообщение newgroup или rmgroup самостоятельно, если Вы определенно не знаете, что Вам позволено.




    NFS Daemons Если нужно предоставить


    Информация о владельце файла передается демоном NFS клиентам только, как числа user и group ID. Если на клиенте и сервере имена пользователя и группы совпадают, получается разделение пространства uid/gid. Например, такая ситуация возникает при использовании NIS для распространения информации из passwd по сети.
    Часто такого совпадения нет. Вместо модификации uid и gid для приведения их в соответствие можно использовать демон отображения
    rpc.ugidd, чтобы обойти несовпадение. Ниже будет объяснено использование опции map_daemon. Можно указать, чтобы rpc.nfsd отобразил пространство uid/gid сервера на пространство uid/gid клиента при помощи rpc.ugidd на клиенте. К сожалению, rpc.ugidd есть далеко не во всех дистрибутивах, так что если он нужен, придется найти исходные тексты и откомпилировать их.
    rpc.ugidd является RPC-сервером, который запускается из сетевого скрипта загрузки аналогично
    rpc.nfsd и rpc.mountd:

    if [ -x /usr/sbin/rpc.ugidd ]; then /usr/sbin/rpc.ugidd; echo -n " ugidd" fi


    Номер телефона


    Если связь с удаленной системой достигается по телефонной линии, поле phone определяет номер, который модем должен набрать для связи. Он может содержать отдельные лексемы, интерпретируемые процедурой набора uucico. Знак равенства (=) означает ждать вторичный тон набора кода, тире (-) генерирует паузу в одну секунду. Например, некоторые телефонные станции сбрасывают номер, если Вы не делаете паузу между набором префиксного кода и номера телефона. Я не знаю соответствующий термин для этого, но Вы знаете, что иногда на внутренней телефонной станции Вы должны набрать 0 или 9, чтобы получить выход наружу.

    Номер телефона
    Если связь с удаленной системой достигается по телефонной линии, поле phone определяет номер, который модем должен набрать для связи. Он может содержать отдельные лексемы, интерпретируемые процедурой набора uucico. Знак равенства (=) означает ждать вторичный тон набора кода, тире (-) генерирует паузу в одну секунду. Например, некоторые телефонные станции сбрасывают номер, если Вы не делаете паузу между набором префиксного кода и номера телефона. Я не знаю соответствующий термин для этого, но Вы знаете, что иногда на внутренней телефонной станции Вы должны набрать 0 или 9, чтобы получить выход наружу.


    Любая встроенная символьная строка может использоваться, чтобы скрыть местную информацию (например, код области). Любая такая строка транслируется с помощью файла dialcode. Предположим, что Вы имеете следующий файл dialcode:

    # /usr/lib/uucp/dialcode - dialcode translation Bogoham 024881 Coxton 035119
    С такими определениями Вы можете использовать номер телефона Bogoham7732 в файле sys , что делает работу немного проще.


    Нуль-модемный кабель Последовательный


    Вы, возможно, видели другие схемы таких кабелей, но этот позволяет Вам использовать аппаратное управление потоком данных, что гораздо лучше XON/XOFF управления данными. Конфигурация кабеля показана на рисунке B-2:
    Снова, если Вы имеете экранировку, Вы должны подключить ее к первому штырьку только на одном конце.


    Обратная совместимость с ipfwadm и ipchains


    Замечательная гибкость Linux netfilter
    иллюстрируется способностью подражать интерфейсам ipfwadm и ipchains. Эмуляция делает переход к новому поколению программного обеспечения firewall немного проще.

    Обратная совместимость с ipfwadm и ipchains
    Замечательная гибкость Linux netfilter
    иллюстрируется способностью подражать интерфейсам ipfwadm и ipchains. Эмуляция делает переход к новому поколению программного обеспечения firewall немного проще.


    Два модуля ядра из netfilter с именами ipfwadm.o и ipchains.o
    обеспечивают обратную совместимость с ipfwadm и ipchains. Можно загрузить одновременно только один из этих модулей и использовать его только при условии, что модуль ip_tables.o не загружен. Когда соответствующий модуль загружен, netfilter работает аналогично заданной реализации firewall.
    Чтобы netfilter копировал интерфейс ipchains скомандуйте:

    # rmmod ip_tables
    # modprobe ipchains
    # ipchains
    ...


    Обратный поиск


    После обнаружения IP-адреса, принадлежащего хосту, иногда желательно выяснить каноническое имя хоста, соответствующее данному адресу. Это называется reverse mapping (обратное отображение) и используется несколькими сервисами, чтобы проверить идентичность клиента. При использовании файла hosts, обратный поиск заключается просто в проверке этого файла. В DNS, конечно, не проводится просмотр всего адресного пространсва. Вместо этого создана специальная область in-addr.arpa, она содержит IP-адреса всех хостов в перевернутой записи. Например, IP-адрес 149.76.12.4 соответствует имени 4.12.76.149.in-addr.arpa. Тип записи ресурса, связывающий это имя с каноническим именем, называется PTR.
    Обратный поиск
    После обнаружения IP-адреса, принадлежащего хосту, иногда желательно выяснить каноническое имя хоста, соответствующее данному адресу. Это называется reverse mapping (обратное отображение) и используется несколькими сервисами, чтобы проверить идентичность клиента. При использовании файла hosts, обратный поиск заключается просто в проверке этого файла. В DNS, конечно, не проводится просмотр всего адресного пространсва. Вместо этого создана специальная область in-addr.arpa, она содержит IP-адреса всех хостов в перевернутой записи. Например, IP-адрес 149.76.12.4 соответствует имени 4.12.76.149.in-addr.arpa. Тип записи ресурса, связывающий это имя с каноническим именем, называется PTR.


    Создание зоны полномочий обычно означает, что ее администраторам дают полный контроль над тем, как назначать адреса и имена хостов. Так как они обычно управляют одной или более IP-сетями или подсетями, одна зона DNS может охватывать несколько IP-сетей. Отдел физики, например, включает подсети 149.76.8.0, 149.76.12.0 и 149.76.14.0.
    Как следствие, новые зоны должны быть записаны в in-addr.arpa домена: 8.76.149.in-addr.arpa , 12.76.149.in-addr.arpa и 14.76.149.in-addr.arpa. Иначе, установка нового хоста в лаборатории Collider требовала бы обращения к родительской области, чтобы отметиться в ее файле in-addr.arpa . Зональная база данных для подсети 12 показана в примере 6-6. Соответствующие склеенные записи в базе данных зоны родителя показаны в примере 6-7.


    Общие опции настройки: файл config


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

    # /usr/lib/uucp/config - UUCP main configuration file hostname vstout

    Общие опции настройки: файл config
    Скорее всего Вы вообще не будете использовать этот файл, чтобы описать UUCP hostname. По умолчанию, UUCP использует имя, которое Вы устанавливаете командой hostname, но вообще хорошая идея установить имя UUCP явно. Типовой файл config показан ниже:

    # /usr/lib/uucp/config - UUCP main configuration file hostname vstout



    Здесь можно задать еще ряд параметров, например, имя каталога для буфера. Эти параметры будут рассмотрены позже в разделе “Анонимный UUCP.”


    Обзор сетевых устройств в Linux


    В Linux имеется ряд стандартных имен интерфейсов, которые описаны ниже. Большинство драйверов поддерживают больше, чем один интерфейс, тогда интерфейсы перечисляются как eth0 и eth1:
    lo
    Локальный интерфейс для loopback. Он используется для отладки, а также рядом сетевых приложений. Он работает подобно замкнутому циклу, возвращая все пакеты, переданные ему, сетевому уровню того же хоста. В ядре имеется всего одно loopback-устройство, и нет большого смысла в наличии меньшего или большего количества.
    eth0, eth1, ethn
    n-ая Ethernet-карта. Это имя интерфейса генерируется для большинства Ethernet-плат.
    tr0, tr1, trn
    Карты сети Token Ring. Имена используются большинством карт Token Ring, включая не-IBM карты.
    sl0, sl1, sln
    n-ый SLIP-интерфейс. Первая последовательная линия, отконфигурированная под SLIP становится sl0, и т.д.
    ppp0, ppp1, pppn
    n-ый PPP-интерфейс. Подобно SLIP-интерфейсам, PPP-интерфейс связан с последовательной линией, если только она отконфигурирована для PPP.
    plip0, plip1, plipn
    n-ый PLIP-интерфейс. PLIP-транспортирует IP-пакеты по параллельным линиям. Они устанавливаются PLIP-драйвером при загрузке системы и отображают параллельные порты. В ядрах 2.0.x имеется прямая связь между именем устройства и адресом ввода-вывода параллельного порта, но в более поздних ядрах имена устройства распределены последовательно точно, как для SLIP и PPP.
    ax0, ax1, axn
    n-ый интерфейс AX.25. AX.25 является главным протоколом операторов amateur radio. Интерфейсы AX.25 распределяются аналогично интерфейсам SLIP.
    Есть еще немало разных интерфейсов для сетевых драйверов. Я перечислил лишь самые распространенные.
    В следующих разделах мы будем обсуждать детали использования драйверов, описанных выше. Много полезного по настройке сетевых устройств можно узнать в Networking HOWTO, а AX25 HOWTO подробно описывает настройку сетевых устройств Amateur Radio.


    Ограничение времени вызова


    Taylor UUCP реализует ряд способов, обеспечивающих ограничение времени обращения к удаленной системе. Вам потребуется сделать это или из-за ограничений, которые удаленная система накладывает на услуги в течение рабочих часов или просто, чтобы избегать времени с высокими ценами за услуги. Обратите внимание, что всегда возможно отменить ограничения времени обращения, запустив uucico с опцией –S или –f.

    Ограничение времени вызова
    Taylor UUCP реализует ряд способов, обеспечивающих ограничение времени обращения к удаленной системе. Вам потребуется сделать это или из-за ограничений, которые удаленная система накладывает на услуги в течение рабочих часов или просто, чтобы избегать времени с высокими ценами за услуги. Обратите внимание, что всегда возможно отменить ограничения времени обращения, запустив uucico с опцией –S или –f.


    По умолчанию, Taylor UUCP отвергнет соединения в любое время, так что Вы должны использовать некоторый вид спецификации времени в файле sys. Если Вы не очень заботитесь об ограничении времени обращения, Вы можете определить опцию time со значением Any (любой) в файле sys.
    Самый простой способ ограничить время обращения, поле time, которое сопровождается строкой, состоящей из дня и подполя времени. День может быть комбинацией Mo, Tu, We, Th, Fr, Sa, Su, Any (любой), Never (никогда) или Wk для выходных дней. Время состоит из двух значений часов (в 24-часовом формате), отделяемых тире. Они определяют диапазон, в течение которого обращения допустимы. Комбинация этих лексем пишется без интервалов. Можно задать несколько интервалов, разделяя их запятыми. Например, MoWe0300-0730, Fr1805-2000 допускает обращение в понедельник и среду с 3 до 7.30 утра и в пятницу с 18.05 до 20.00. Когда поле time охватывает полночь, и написано Mo1830-0600, это фактически означает понедельник, между полуночью и 6.00 утра и между 18.30 пополудни и полуночью понедельника.
    Taylor UUCP также имеет специальные лексемы, которые можно использовать в строке времени: NonPeak и Night. Они эквивалентны Any2300-0800,SaSu0800-1700 и Any1800-0700,SaSu соответственно.



    Команда time задает параметр, который описывает время повтора в минутах. Когда попытка установить соединение не удалась, uucico не допустит другой попытки вызвать удаленный компьютер в течение некоторого интервала. По умолчанию, используется схема backoff, где интервал повтора увеличивается с каждым последующим отказом. Например, когда Вы определяете время повторения в 5 минут, uucico откажется вызывать удаленную систему в течение 5-ти минут после последнего отказа.

    Команда timegrade позволяет Вaм настраивать приоритет буферизации. Допустим, что Вы имеете следующие команды timegrade в записи системы:

    timegrade N Wk1900-0700,SaSu timegrade C Any

    Это допускает задачи с приоритетом буферизации (spoolgrade) C и выше (обычно почта имеет степень B или C), они будут приняты всякий раз, когда соединение установлено, в то время, как новости (обычно ставятся в очередь со степенью N) будут переданы только ночью и в выходные.

    Точно так же, как команда time, команда timegrade берет интервал повторения в минутах как дополнительный третий параметр.

    Однако есть и недостатки высоких приоритетов буферизации: опция timegrade применяется только к тому, что посылает Ваша система; удаленная система может передать все, что угодно. Вы можете использовать опцию call-timegrade, чтобы явно запросить послать только работы выше некоторой степени буферизации, но нет никакой гарантии, что удаленная система так и поступит.

    Аналогично, поле timegrade не проверяется, когда удаленная система вызывает Вашу и любые работы, поставленные в очередь для системы вызова будут ей посланы. Однако, удаленная система может явно запрашивать Ваш uucico, чтобы ограничить себя некоторым приоритетом задач.


    Опции ядра в Linux 2.0 и выше


    Здесь в главном меню задаются параметры для основных возможностей системы, например, поддержки SCSI или звуковых карт. Вы можете нажать ? для получения подробного описания опции. Чтобы включить поддержку некой возможности в ядро постоянно, надо ответить y. Можно ответить m, тогда соответствующий драйвер будет включен в ядро как модуль и загружаться по мере необходимости. При всем своем удобстве модули не могут загружаться при начальной инициализации ядра, так что все необходимое для его загрузки должно быть встроено прямо в ядро без модулей. Наконец, если некая возможность не нужна, от нее можно отказаться ответом n.

    Опции ядра в Linux 2.0 и выше
    Здесь в главном меню задаются параметры для основных возможностей системы, например, поддержки SCSI или звуковых карт. Вы можете нажать ? для получения подробного описания опции. Чтобы включить поддержку некой возможности в ядро постоянно, надо ответить y. Можно ответить m, тогда соответствующий драйвер будет включен в ядро как модуль и загружаться по мере необходимости. При всем своем удобстве модули не могут загружаться при начальной инициализации ядра, так что все необходимое для его загрузки должно быть встроено прямо в ядро без модулей. Наконец, если некая возможность не нужна, от нее можно отказаться ответом n.


    Меню настройки имеет иерархический вид. Например, чтобы настроить сеть, Вам сначала нужно подвердить, что Вы вообще включаете ее поддержку, и только потом будут заданы вопросы о том, в чем именно эта поддержка должна выражаться. В ядрах серий 2.0 и 2.1 первый вопрос о сети такой:

    * * Network device support * Network device support (CONFIG_NETDEVICES) [Y/n/?]
    Вы должны ответить y, чтобы использовать любые типы сетевых интерфейсов: Ethernet, SLIP, PPP или другие. При ответе y поддержка устройств Ethernet включается автоматически. После этого система проведет опрос о конкретных возможностях:

    PLIP (parallel port) support (CONFIG_PLIP) [N/y/m/?] y PPP (point-to-point) support (CONFIG_PPP) [N/y/m/?] y * * CCP compressors for PPP are only built as modules. * SLIP (serial line) support (CONFIG_SLIP) [N/y/m/?] m CSLIP compressed headers (CONFIG_SLIP_COMPRESSED) [N/y/?] (NEW) y Keepalive and linefill (CONFIG_SLIP_SMART) [N/y/?] (NEW) y Six bit SLIP encapsulation (CONFIG_SLIP_MODE_SLIP6) [N/y/?] (NEW) y
    <



    /p>

    Эти вопросы касаются различных протоколов уровня связи, которые Linux поддерживает. PPP и SLIP позволяют Вам передавать пакеты IP по последовательной линии связи. PPP не ограничен передачей пакетов TCP/IP, он может передавать пакеты IPX.

    Если Вы отвечаете y или m на вопрос о поддержке SLIP, Вам придется ответить на три вопроса, которые появляются после этого. Опция "CSLIP compressed headers" позволяет сжимать заголовки пакетов TCP/IP. Заметьте, что эта опция лишь обеспечивает возможность работы с такими заголовками, но не заставляет работать с ними в обязательном порядке! Опция Keepalive and linefill

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

    Six bit SLIP encapsulation позволяет Вам выполнять SLIP на линиях, которые не способны к передаче 8-битных данных в чистом виде.

    PLIP обеспечивает способ послать IP-пакеты через параллельный порт. Это обычно используется, чтобы связаться с машинами, работающими в DOS. На типичных аппаратных средствах PLIP может быть быстрее, чем PPP или SLIP, но он требует намного большей нагрузки на CPU.

    Следующие вопросы касаются драйверов для разных сетевых карт. Можно задать не один драйвер, а несколько, если машина имеет несколько сетевых карт разных фирм:

    . . Ethernet (10 or 100Mbit) (CONFIG_NET_ETHERNET) [Y/n/?] 3COM cards (CONFIG_NET_VENDOR_3COM) [Y/n/?] 3c501 support (CONFIG_EL1) [N/y/m/?] 3c503 support (CONFIG_EL2) [N/y/m/?] 3c509/3c579 support (CONFIG_EL3) [Y/m/n/?] 3c590/3c900 series (592/595/597/900/905) "Vortex/Boomerang" support/ (CONFIG_VORTEX) [N/y/m/?] AMD LANCE and PCnet (AT1500 and NE2100) support (CONFIG_LANCE) [N/y/?] AMD PCInet32 (VLB and PCI) support (CONFIG_LANCE32) [N/y/?] (NEW) Western Digital/SMC cards (CONFIG_NET_VENDOR_SMC) [N/y/?] WD80*3 support (CONFIG_WD80x3) [N/y/m/?] (NEW) SMC Ultra support (CONFIG_ULTRA) [N/y/m/?] (NEW) SMC Ultra32 support (CONFIG_ULTRA32) [N/y/m/?] (NEW) SMC 9194 support (CONFIG_SMC9194) [N/y/m/?] (NEW) Other ISA cards (CONFIG_NET_ISA) [N/y/?] Cabletron E21xx support (CONFIG_E2100) [N/y/m/?] (NEW) DEPCA, DE10x, DE200, DE201, DE202, DE422 support (CONFIG_DEPCA) [N/y/m/?]/ (NEW) EtherWORKS 3 (DE203, DE204, DE205) support (CONFIG_EWRK3) [N/y/m/?] (NEW) EtherExpress 16 support (CONFIG_EEXPRESS) [N/y/m/?] (NEW) HP PCLAN+ (27247B and 27252A) support (CONFIG_HPLAN_PLUS) [N/y/m/?] (NEW) HP PCLAN (27245 and other 27xxx series) support (CONFIG_HPLAN) [N/y/m/?]/ (NEW) HP 10/100VG PCLAN (ISA, EISA, PCI) support (CONFIG_HP100) [N/y/m/?] (NEW) NE2000/NE1000 support (CONFIG_NE2000) [N/y/m/?] (NEW) SK_G16 support (CONFIG_SK_G16) [N/y/?] (NEW) EISA, VLB, PCI and on card controllers (CONFIG_NET_EISA) [N/y/?] Apricot Xen-II on card ethernet (CONFIG_APRICOT) [N/y/m/?] (NEW) Intel EtherExpress/Pro 100B support (CONFIG_EEXPRESS_PRO100B) [N/y/m/?]/ (NEW) DE425, DE434, DE435, DE450, DE500 support (CONFIG_DE4X5) [N/y/m/?] (NEW) DECchip Tulip (dc21x4x) PCI support (CONFIG_DEC_ELCP) [N/y/m/?] (NEW) Digi Intl. RightSwitch SE-X support (CONFIG_DGRS) [N/y/m/?] (NEW) Pocket and portable adaptors (CONFIG_NET_POCKET) [N/y/?] AT-LAN-TEC/RealTek pocket adaptor support (CONFIG_ATP) [N/y/?] (NEW) D-Link DE600 pocket adaptor support (CONFIG_DE600) [N/y/m/?] (NEW) D-Link DE620 pocket adaptor support (CONFIG_DE620) [N/y/m/?] (NEW) Token Ring driver support (CONFIG_TR) [N/y/?] IBM Tropic chipset based adaptor support (CONFIG_IBMTR) [N/y/m/?] (NEW) FDDI driver support (CONFIG_FDDI) [N/y/?] Digital DEFEA and DEFPA adapter support (CONFIG_DEFXX) [N/y/?] (NEW) ARCnet support (CONFIG_ARCNET) [N/y/m/?] Enable arc0e (ARCnet "Ether-Encap" packet format) (CONFIG_ARCNET_ETH)/ [N/y/?] (NEW) Enable arc0s (ARCnet RFC1051 packet format) (CONFIG_ARCNET_1051)/ [N/y/?] (NEW) . .

    Наконец, в секции файловых систем, Вас спросят о необходимости поддержки сетевой файловой системы NFS. NFS позволяет обращаться по сети к дискам и каталогам удаленной машины, как к своим собственным:

    NFS file system support (CONFIG_NFS_FS) [y]

    NFS детально описана в главе 14.


    Опции настройки Имеются несколько


    return_size_limit
    Установка этой опции ограничивает размер входящих сообщений, которые Exim возвращает как часть сообщений об ошибках.
    deliver_load_max
    Если загрузка системы превышает значение, заданное для этой опции, вся доставка почты будет приостановлена, хотя сообщения все еще принимаются.
    smtp_accept_max
    Это максимальное число одновременных входящих вызовов SMTP, которые принимает Exim.
    log_level
    Это средство управления количеством информации, которая будет записана в файл регистрации. Имеются также другие параметры с именами, начинающимися на log_, которые управляют регистрацией специфической информации.


    Опции настройки IP (IPCP) IРCP


    pppd дает много возможностей управления, относительно опций IPCP, которые будут пытаться вести переговоры. Вы можете все настроить через различные опции командных строк, которые мы обсудим ниже.


    Опции


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

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


    -v
    Предписывает iptables выдавать подробную информацию.
    -n
    Предписывает iptables использовать IP-адреса и порты, не пытаясь преобразовать их в имена.
    -x
    Любые числа в выводе iptables будут точными (округление не используется).
    - -line-numbers
    Задает номера строк, которые нужно отобразить при распечатке наборов правил. Номер строки будет соответствовать позиции правила внутри цепочки.


    Описание устройств: файл port


    Файл port сообщает uucico
    о доступных портах. Это могут быть порты модема, другие типы последовательных соединений и сокеты TCP.

    Описание устройств: файл port
    Файл port сообщает uucico
    о доступных портах. Это могут быть порты модема, другие типы последовательных соединений и сокеты TCP.


    Подобно файлу sys, port состоит из отдельных кусков, начинающихся с ключевого слова port, сопровождаемым именем порта. Это имя может использоваться в описании порта в файле sys. Нет потребности в уникальности имени; если существуют порты с одним и тем же именем, uucico перепробует все по очереди, пока не найдет тот, который в настоящее время не используется.
    Команда port должна обязательно сопровождаться именем, которое задает, какой порт описан. Допустимые типы: modem, direct для прямых соединений и tcp для сокетов TCP. Если команда port отсутствует, по умолчанию тип порта принимает значение modem.
    В этом разделе я опишу лишь порты модема. Сокеты TCP и прямые соединения будут обсуждаться позже.
    Для модема и прямого соединения Вы должны определить файл для вызова устройства напрямую. Обычно это имя специального файла устройства в каталоге /dev (подобно /dev/ttyS1).
    В случае использования модема, port также определяет, какой модем соединен с портом. Различные типы модемов должны быть настроены по-разному. Следовательно, Вы должны сообщить uucico, как инициализировать Ваш модем и как соединяться с требуемым номером. Taylor UUCP хранит описания всех программ набора номера в файле dial . Чтобы использовать любую из них, Вы должны определить имя программы набора номера, используя команду dialer.
    Иногда Вам потребуется использовать модем различными способами в зависимости от системы, которую Вы вызываете. Например, некоторые старые модемы не понимают, когда быстрый модем пытается соединяться на скорости 56 kbps; они просто пропускают строку вместо того, чтобы вести переговоры на скорости в 9600 bps. Если Вы знаете, что некоторые машины используют такой "немой" модем, для вызова их Вы должны настраивать свой модем иначе. Для этого Вам нужно добавить строку port в файл port, которая определит другую программу набора номера. Теперь Вы можете задать новому порту другое имя, типа serial1-slow, и использовать директиву port в описании системы в файле sys.



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

    # NakWell modem; connect at high speed port serial1 # port name type modem # modem port device /dev/ttyS1 # this is COM2 speed 115200 # supported speed dialer nakwell # normal dialer # NakWell modem; connect at low speed port serial1 # port name type modem # modem port device /dev/ttyS1 # this is COM2 speed 9600 # supported speed dialer nakwell-slow # don't attempt fast connect
    Системная запись для машины drop получает для использования порт serial1, но в случае запроса на использование скорости 9,600 bps uucico
    автоматически использует вторую запись порта. Все остальные сайты, которые работают со скоростью 115,200 будут вызываться с использованием первой записи port. По умолчанию используется первая запись с подходящей скоростью.

    Определяемые пользователем цепочки


    Три набора правил традиционного IP firewall обеспечивают механизм формирования конфигураций firewall, которые были довольно просты в понимании и пригодны для маленьких сетей с простыми требованиями к firewall. Однако, в больших сетях неизбежно возникают большие проблемы и требовавния. Наборы правил растут как снежный ком, управлять ими становится очень сложно. Хуже всего то, что с ростом числа правил падает эффективность IP firewall: ведь программе приходится сравнивать каждый пакет со все большим числом правил. Кроме того, нельзя безопасно отключать наборы правил целиком. Вместо этого, Вы вынуждены выключить некий набор, а пока Вы его перестраиваете, доступ в сеть оказывается открыт всем желающим!

    Определяемые пользователем цепочки
    Три набора правил традиционного IP firewall обеспечивают механизм формирования конфигураций firewall, которые были довольно просты в понимании и пригодны для маленьких сетей с простыми требованиями к firewall. Однако, в больших сетях неизбежно возникают большие проблемы и требовавния. Наборы правил растут как снежный ком, управлять ими становится очень сложно. Хуже всего то, что с ростом числа правил падает эффективность IP firewall: ведь программе приходится сравнивать каждый пакет со все большим числом правил. Кроме того, нельзя безопасно отключать наборы правил целиком. Вместо этого, Вы вынуждены выключить некий набор, а пока Вы его перестраиваете, доступ в сеть оказывается открыт всем желающим!


    Создание своих цепочек IP Firewall позволит решить почти все эти проблемы. Каждая такая цепочка может использоваться наравне со встроенными. Вы можете использовать параметр -N команды
    ipchains, чтобы создать новую цепочку с именем не более 8 символов. Ограничение имени символами только нижнего регистра, может быть, неплохая мысль. Опция -j позволяет задать реакцию на соответствие пакета данному правилу. Она может определять, что если пакет подходит под правило, дальше он должен тестироваться по заданному пользователем набору правил. Рассмотрим команды ipchains :



    ipchains -P input DENY ipchains -N tcpin ipchains -A tcpin -s ! 172.16.0.0/16 ipchains -A tcpin -p tcp -d 172.16.0.0/16 ssh -j ACCEPT ipchains -A tcpin -p tcp -d 172.16.0.0/16 www -j ACCEPT ipchains -A input -p tcp -j tcpin ipchains -A input -p all

    Мы задали реакцию по умолчанию deny для набора правил input. Вторая команда создает определенную пользователем цепочку tcpin, которая соответствует любому пакету, пришедшему снаружи нашей локальной сети. Третья команда добавляет в нее правило, которое пока не выполняет никаких действий. Это правило нужно для учета и подробно рассмотрено в главе 10. Следующие два правила соответствуют любому пакету, который предназначен для нашей локальной сети и любого из портов ssh или www , такие пакеты будут приняты. Следующее правило как раз то, когда реально начинается волшебство ipchains. Оно вызывает firewall для проверки всех пакетов протокола TCP по набору правил, заданному пользователем. Наконец, мы добавляем правило к нашему набору input, которое соответствует любому пакету. Это еще одно правило учета.

    Наши наборы правил input и

    tcpin заполняются нашими правилами. Процесс обработки пакета всегда начинается в одной из встроенных цепочек. Наша собственная цепочка вступает в дело по команде из одной из встроенных цепочек. Сначала, давайте рассмотрим, что происходит, когда для одного из наших компьютеров получен пакет UDP.

    Пакет на приеме попадает в цепочку input. Первые два правила его игнорируют, поскольку они соответствуют ICMP и TCP. Пакет соответствует третьему правилу в input, но оно не определяет адресата, так как просто модифицирует счетчики байтов и пакетов, и не выполняет никакого действия непосредственно с пакетом. Он достигает конца input, встречается с заданной по умолчанию стратегией для input и отклоняется.

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

    На это раз второе правило в цепочке input



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

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

    У определяемых пользователем цепочек нет заданной по умолчанию реакции на внешние раздражители. Когда все правила в определяемой пользователем цепочке будут проверены, и ни одно не соответствует ситуации, firewall действует, как если бы правило было задано правило RETURN. В нашем примере проверка вернется к набору input. В конечном счете мы достигаем конца цепочки input, которая имеет заданную по умолчанию стратегию, и пакет будет отклонен.

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

    # Set default forwarding policy to REJECT ipchains -P forward REJECT # # create our user-defined chains ipchains -N sshin ipchains -N sshout ipchains -N wwwin ipchains -N wwwout # # Ensure we reject connections coming the wrong way ipchains -A wwwin -p tcp -s 172.16.0.0/16 -y -j REJECT ipchains -A wwwout -p tcp -d 172.16.0.0/16 -y -j REJECT ipchains -A sshin -p tcp -s 172.16.0.0/16 -y -j REJECT ipchains -A sshout -p tcp -d 172.16.0.0/16 -y -j REJECT # # Ensure that anything reaching the end of a user-defined chain is rejected. ipchains -A sshin -j REJECT ipchains -A sshout -j REJECT ipchains -A wwwin -j REJECT ipchains -A wwwout -j REJECT # # divert www and ssh services to the relevant user-defined chain ipchains -A forward -p tcp -d 172.16.0.0/16 ssh -b -j sshin ipchains -A forward -p tcp -s 172.16.0.0/16 -d 0/0 ssh -b -j sshout ipchains -A forward -p tcp -d 172.16.0.0/16 www -b -j wwwin ipchains -A forward -p tcp -s 172.16.0.0/16 -d 0/0 www -b -j wwwout # # Insert our rules to match hosts at position two in our user-defined chains. ipchains -I wwwin 2 -d 172.16.1.2 -b -j ACCEPT ipchains -I wwwout 2 -s 172.16.1.0/24 -b -j ACCEPT ipchains -I sshin 2 -d 172.16.1.4 -b -j ACCEPT ipchains -I sshout 2 -s 172.16.1.4 -b -j ACCEPT ipchains -I sshout 2 -s 172.16.1.6 -b -j ACCEPT

    <



    /p>

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

    Наш пример создает определяемые пользователем цепочки для сервисов ssh и www в каждом направлении подключения. Есть цепочка wwwout, в ней мы помещаем правила для компьютеров, имеющих право создавать исходящие подключения World Wide Web, и цепочка sshin, хранящая правила для машин, которым можно приинимать входящие подключения ssh. Допустим, нам надо гибко задавать эти разрешения для каждого компьютера в нашей сети. Упрощение происходит, потому что определяемые пользователем цепочки позволяют нам аккуратно группировать правила для прав доступа входящих и исходящих пакетов с компьютеров. Рост эффективности происходит потому, что для любого пакета мы уменьшили среднее число тестов, требуемых для поиска адресата. Если бы мы не использовали определяемые пользователем цепочки, нам бы пришлось искать целый список правил, чтобы узнать какое действие выполнить с каждым пакетом. Даже при условии равномерности поступления пакетов в среднем мы просматривали бы половину списка. Определяемые пользователем цепочки позволяют нам избегать проверки большого числа правил, если проверяемый пакет не соответствует простому правилу во встроенной цепочке, которая вызывает наши цепочки.


    Отображение соединений


    netstat поддерживает множество опций для отображения активных и пассивных соединений. Опции -t, -u, -w и -x показывают активные TCP, UDP, RAW или UNIX соединения. Если вы зададите параметр -a, сокеты, которые ждут соединения (то есть, слушают сеть), также показываются. Это даст вам список всех серверов, которые в настоящее время работают в вашей системе.
    Отображение соединений
    netstat поддерживает множество опций для отображения активных и пассивных соединений. Опции -t, -u, -w и -x показывают активные TCP, UDP, RAW или UNIX соединения. Если вы зададите параметр -a, сокеты, которые ждут соединения (то есть, слушают сеть), также показываются. Это даст вам список всех серверов, которые в настоящее время работают в вашей системе.


    Вызов netstat -ta на vlager даст:

    $ netstat -ta
    Active Internet Connections Proto Recv-Q Send-Q Local Address Foreign Address (State) tcp 0 0 *:domain *:* LISTEN tcp 0 0 *:time *:* LISTEN tcp 0 0 *:smtp *:* LISTEN tcp 0 0 vlager:smtp vstout:1040 ESTABLISHED tcp 0 0 *:telnet *:* LISTEN tcp 0 0 localhost:1046 vbardolino:telnet ESTABLISHED tcp 0 0 *:chargen *:* LISTEN tcp 0 0 *:daytime *:* LISTEN tcp 0 0 *:discard *:* LISTEN tcp 0 0 *:echo *:* LISTEN tcp 0 0 *:shell *:* LISTEN tcp 0 0 *:login *:* LISTEN
    Видно, что больше всего серверов просто ждут соединения. Однако, четвертая строка говорит о SMTP-соединении с vstout, а шестая сообщает о telnet-соединении с vbardolino.
    При использовании параметра -a будут отображаться все сокеты всех семейств сразу.


    Отображение статистики интерфейса


    Когда netstat вызывается с параметром -i, он показывает статистику для сетевых интерфейсов. Если, кроме того, дается опция -a, он будет печатать все интерфейсы, представленные в ядре, а не только те, которые были отконфигурированы в настоящее время. На vstout вывод netstat
    будет напоминать это:

    # netstat -i
    Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flags lo 0 0 3185 0 0 0 3185 0 0 0 BLRU eth0 1500 0 972633 17 20 120 628711 217 0 0 BRU
    Отображение статистики интерфейса
    Когда netstat вызывается с параметром -i, он показывает статистику для сетевых интерфейсов. Если, кроме того, дается опция -a, он будет печатать все интерфейсы, представленные в ядре, а не только те, которые были отконфигурированы в настоящее время. На vstout вывод netstat
    будет напоминать это:

    # netstat -i
    Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flags lo 0 0 3185 0 0 0 3185 0 0 0 BLRU eth0 1500 0 972633 17 20 120 628711 217 0 0 BRU



    Поля MTU и Met
    показывают текущий MTU и метрическое значение для этого интерфейса. Колонки RX и TX показывают сколько пакетов были получены или переданы без ошибок (RX-OK
    /TX-OK), повредились (RX-ERR /TX-ERR), сколько было потеряно (RX-DRP/TX-DRP) и сколько было потеряно из-за переполнения (RX-OVR/ TX-OVR).
    Последняя колонка показывает флаги, установленные для этого интерфейса. Здесь используется односимвольная версия флагов, которые печатает ifconfig:
    B
    Установлен широковещательный адрес.
    L
    Этот интерфейс задает устройство loopback.
    M
    Интерфайс получает все пакеты (режим promiscuous).
    O
    ARP выключен для этого интерфейса.
    P
    Это соединение point-to-point.
    R
    Интерфейс работает.
    U
    Интерфейс активен.


    Отображение таблицы маршрутизации


    При вызове netstat с параметром
    -r, он показывает таблицу маршрутизации ядра, подготовленную с помощью route. На vstout он выдаст:

    # netstat -nr
    Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 127.0.0.1 * 255.255.255.255 UH 0 0 0 lo 172.16.1.0 * 255.255.255.0 U 0 0 0 eth0 172.16.2.0 172.16.1.1 255.255.255.0 UG 0 0 0 eth0
    Отображение таблицы маршрутизации
    При вызове netstat с параметром
    -r, он показывает таблицу маршрутизации ядра, подготовленную с помощью route. На vstout он выдаст:

    # netstat -nr
    Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 127.0.0.1 * 255.255.255.255 UH 0 0 0 lo 172.16.1.0 * 255.255.255.0 U 0 0 0 eth0 172.16.2.0 172.16.1.1 255.255.255.0 UG 0 0 0 eth0



    Опйия -n заставляет netstat
    печатать IP-адреса вместо имен хостов и сетей. Это особенно полезно, когда вы хотите избежать поисков адреса по сети (например, через DNS или NIS-сервер).
    Вторая колонка вывода netstat показывает маршрутизационную запись gateway. Если шлюз не используется, печатается звездочка. Третья колонка показывает сетевую маску (Genmask) маршрута. Когда дается IP-адрес, чтобы найти подходящий маршрут для него, ядро просматривает все записи таблицы маршрутизации, берет побитовое AND адреса и genmask и лишь затем сравнивает результат с целью маршрута.
    G
    маршрут использует шлюз (gateway).
    U
    интерфейс, который нужно использовать, работает.
    H
    только отдельный хост может быть достигнут через данный маршрут (не сеть!). Например, для записи loopback 127.0.0.1 .
    D
    устанавливается, если запись таблицы была произведена по приходу перенаправляемого сообщения ICMP (см. раздел Internet Control Message Protocol главы 2), или если запись таблицы была создана демоном динамической маршрутизации, наподобие
    gated.
    M
    устанавливается, если запись таблицы была изменена перенапавляемым сообщением ICMP.
    !
    путь неверен (закрыт), все пакеты будут отброшены.
    Еще три колонки показывают MSS, Window и irtt, применяемые для соединений TCP через этот маршрут. MSS (Maximum Segment Size) определяет максимальный размер пакета для этого маршрута. Window задает максимальное количество данных, которое система примет в одном пакете с удаленного компьютера. irtt означает "initial round trip time". TCP протокол гарантирует, что данные будут надежно доставлены между компьютерами, повторно передавая пакеты, если они были потеряны. При этом ведется счетчик времени: сколько можно ждать, пока пакет дойдет до машины назначения, и оттуда придет подтверждение. Если время вышло, пакет будет послан еще раз. Этот процесс называется round-trip time. initial round-trip time задает значение, которое используется при установке подключения. Для большинства сетей подходит значение по умолчанию, но для некоторых медленных сетей (особенно ряд типов пакетного радио) время слишком короткое, что вызывает ненужные повторы. Параметр irtt может быть установлен, используя команду route. По умолчанию в этом поле ноль.
    Последнее поле показывает, к какому сетевому интерфейсу относится маршрут.


    Параметры определения правил


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

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


    -p [!]protocol
    Указывает протокол, соответствующий правилу. Допустимы имена протоколов tcp, udp, icmp. Можно задать номер протокола для протоколов, которые здесь не определены. Например, 4 для протокола ipip. Если задан префикс !, правило превращается в отрицательное, и принимаются все пакеты, не соответствующие этому протоколу. Значение по умолчанию: все протоколы.
    -s [!]address[/mask]
    Указывает исходный адрес и порт, с которого пришел пакет. Адрес может задавать имя машины, имя сети или IP-адрес. Опция mask задает сетевую маску. Она может быть задана в обычной форме (например, /255.255.255.0) или в новой (например, /24). Опция port задает порт TCP или UDP, или тип пакетов ICMP. Вы можете задать спецификацию порта только, если Вы задали параметр -p
    с одним из протоколов tcp, udp или icmp. Порты могут быть определены как диапазон, определяя верхние и нижние границы диапазона с двоеточием в качестве разделителя. Например, 20:25 определяет порты с 20 по 25 включительно. Символ ! превращает правило в его противоположность.
    -d [!]address[/mask]
    Задает адрес и порт назначения. Во всем остальном аналогичен параметру -s.
    -j target
    Указывает, что делать при срабатывании правила. Допустимые действия: ACCEPT, DROP, QUEUE и RETURN. Ранее я уже описал значение каждого действия. Однако, Вы можете также задать имя определяемой пользователем цепочки, в которой продолжится обработка. Если этот параметр опущен, будут только изменены данные пакетов и счетчиков, но ничего с этим пакетом сделано не будет.
    -i [!]interface-name
    Задает интерфейс, с которого пришел пакет, или через который пакет будет передан. Символ ! переворачивает результат сравнения. Если имя интерфейса кончается на +, ему будут соответствовать все интерфейсы, имена которых начинаются на заданную строку. Например, -i ppp+ совпадает со всеми PPP-интерфейсами, а -i ! eth+ соответствует всем интерфейсам, кроме Ethernet.
    -o [!]interface-name
    Указывает, что пакеты будут передаваться через этот интерфейс. В остальном аналогично -i.
    [!] -f
    Указывает, что это правило применяется ко второму и последующим, но не к первому, фрагментам пакета.


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


    Даже в русскоязычной среде больше прижился термин forwarding, чем пересылка, так что я использую оба термина. Вообще следует отметить огромное количество английских терминов в данной области. Поэтому я стараюсь приводить как русский, так и английский варианты. Пользователи могут переназначать свою почту альтернативным адресам, создавая в своем домашнем каталоге файл .forward. Он содержит список получателей, отделяемых запятыми и/или символами перевода строки. Особое внимание надо уделить тому, что обрабатываются все строки файла, а не только первая. Почему-то очень распространено мнение, что переслать можно только на один адрес. На самом деле пересылать можно на много адресов, причем допустимы все типы адресов. Пример файла .forward:

    janet, "|vacation"
    В некоторых описаниях файлов .forward можно встретить имя пользователя, которое начинается с наклонной черты влево. Это нужно для старых MTA (почтовых программ), которые иногда зацикливались при обработке таких файлов. Exim умеет обходить циклы адресов сам.
    Однако, наклонная черта влево разрешается и фактически делает различие в конфигурациях, где сразу обрабатывается несколько доменов. Без наклонной черты влево краткое имя пользователя будет связано с доменом по умолчанию. С наклонной чертой сохранится входящий домен.

    Пересылка (forwarding)
    Даже в русскоязычной среде больше прижился термин forwarding, чем пересылка, так что я использую оба термина. Вообще следует отметить огромное количество английских терминов в данной области. Поэтому я стараюсь приводить как русский, так и английский варианты. Пользователи могут переназначать свою почту альтернативным адресам, создавая в своем домашнем каталоге файл .forward. Он содержит список получателей, отделяемых запятыми и/или символами перевода строки. Особое внимание надо уделить тому, что обрабатываются все строки файла, а не только первая. Почему-то очень распространено мнение, что переслать можно только на один адрес. На самом деле пересылать можно на много адресов, причем допустимы все типы адресов. Пример файла .forward:



    janet, "|vacation"

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

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

    Первый адрес в файле forward доставляет сообщение в почтовый ящик janet, а команда vacation

    вернет краткий ответ отправителю.

    В дополнение к поддерживаемым "традиционным" файлам пересылки Exim может быть конфигурирован, чтобы использовать более сложные файлы, названные фильтрами (filters). Вместо простого списка адресов фильтры могут содержать тесты на содержание входящего сообщения, чтобы, например, сообщения посылались только, если тема содержала строку "срочно". Администратор системы должен решить, позволять ли пользователям такую гибкость.


    Поддержка серверов NFS v2 NFS


    Ядро 2.2.0 поддерживает экспериментальный сервер NFS уровня ядра, разработанный Olaf Kirch, H.J. Lu, G. Allan Morris и Trond Myklebust. Поддержка NFS ядром обеспечивает значительное увеличение эффективности.
    В текущих дистрибутивах инструментальные средства сервера доступны в откомпилированном виде. Если их не оказалось в вашем дистрибутиве, они доступны для скачивания на http://csua.berkeley.edu/gam3/knfsd. Вы должны формировать ядро 2.2.0 с поддержкой NFS демона уровня ядра, чтобы использовать инструментальные средства. Вы можете узнать имеет ли ваше ядро NFS daemon, проверив существование файла /proc/sys/sunrpc/nfsd_debug. Если файла нет, вам, вероятно, придется загружать модуль
    rpc.nfsd, используя утилиту modprobe.
    Ядерный демон NFS использует стандартный файл конфигурации /etc/exports. Пакет обеспечивает новые версии демонов rpc.mountd и rpc.nfsd, так что в плане администрирования мало что изменилось , а производительность сервера существенно выросла.


    Поддержка серверов NFS v3 Наиболее


    Olaf Kirch и Trond Myklebust разрабатывают экспериментальный сервер NFSv3. Он появился в ядре версии 2.3 и доступен как патч для ядра 2.2. Он создан на базе демона ядерного уровня NFS v2.
    Патч доступен на страничке Linux Kernel based NFS по адресу http://csua.berkeley.edu/gam3/knfsd.


    Подробно о команде ncpmount


    Команда ncpmount имеет большое количество параметров командной строки. Это позволяет Вам гибко управлять томами NCP. Наиболее важные из них описаны в таблице 15-2.

    Подробно о команде ncpmount
    Команда ncpmount имеет большое количество параметров командной строки. Это позволяет Вам гибко управлять томами NCP. Наиболее важные из них описаны в таблице 15-2.




    Подсети


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

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


    Имеет смысл предложить подобную схему также и внутри сети, так как она может состоять из набора сотен меньших сетей, где самыми маленькими единицами являются физические сети типа Ethernet. Поэтому IP позволяет поделить IP-сеть на несколько подсетей (subnets).
    Подсеть принимает ответственность за доставку пакетов для определенного диапазона IP-адресов. Как с классами A, B или C она идентифицируется сетевой частью IP-адресов. Однако, сетевая часть теперь расширена, чтобы включить некоторые биты части хоста. Число битов, которые интерпретируются как номер в подсети, задается так называемой маской подсети (subnet mask) или netmask. Это 32-разрядное число, которое определяет разрядную маску для сетевой части IP-адреса.
    Сеть университета Groucho Marx является примером такой сети. Она имеет класс B с сетевым адресом 149.76.0.0 и netmask, поэтому равна 255.255.0.0.
    Внутри сеть GMU состоит из нескольких меньших сетей типа локальных сетей различных отделов. Так что диапазон IP-адресов разбит на 254 подсети: от 149.76.1.0 до 149.76.254.0. Например, отдел теоретической физики имеет адрес 149.76.12.0. Университетский оптиковолоконный кабель тоже является сетью с собственным адресом 149.76.1.0. Эти подсети имеют одинаковый сетевой IP-адрес, в то время как третья часть адреса (octet) используется, чтобы различать их между собой. Таким образом, они будут использовать сетевую маску 255.255.255.0.
    Стоит заметить, что subnetting (техника создания подсетей) чисто внутреннее дело сети. Подсети создаются сетевым владельцем (или администратором). Часто подсети создаются, чтобы отразить существующие границы, будь они физические (две сети Ethernet), административные (между двумя отделами) или географические. Однако, эта структура воздействует только на внутреннее поведение сети и полностью невидима для внешнего мира.


    Поиск имени с помощью DNS


    На первый взгляд, вся эта суета с областями и зонами кажется делает поиск адреса ужасно сложным делом. В конце концов, если нет центрального органа, контролирующего, какие имена с каким адресом связаны, тогда как скромное приложение должно его узнавать?!
    Поиск имени с помощью DNS
    На первый взгляд, вся эта суета с областями и зонами кажется делает поиск адреса ужасно сложным делом. В конце концов, если нет центрального органа, контролирующего, какие имена с каким адресом связаны, тогда как скромное приложение должно его узнавать?!


    Фактически, DNS гигантская распределенная база данных. Это осуществлено посредством так называемых серверов имен (name server), которые снабжают всех информацией о данном домене или нескольких доменах сразу. Для каждой зоны имеются по крайней мере два сервера имен, которые содержат всю информацию относительно хостов в этой зоне. Чтобы получить IP-адрес erdos, все что вы должны сделать, это обратится к серверу имен зоны groucho.edu, который и передаст вам требуемые данные.
    Легко сказать, а как это сделать? Как найти сервер имен в Groucho Marx? В случае если ваш компьютер не оборудован программой преобразования адресов, DNS также обеспечивает это. Когда ваше приложение хочет найти информацию относительно erdos, оно входит в контакт с местным сервером имен, который проводит так называемый итерационный опрос. Сначала он посылает запрос серверу имен корневого домена, спрашивая об адресе erdos.maths.groucho.edu. Сервер имен корня сообщает, что это имя не принадлежит зоне его полномочий, но вместо этого отсылает к домену edu. Таким образом, он предлагает вам войти в контакт с сервером имен edu для получения большего количества информации и прилагает список всех серверов имен edu вместе с их адресами. Ваш местный сервер имен пошлет запрос одному из них, например, a.isi.edu. Также как серверу имен корня, a.isi.edu знает, что люди groucho.edu управляют своей зоной сами, и направит вас на их сервера. Местный сервер имен запросит один из них, который, наконец, распознает имя, как принадлежащее к его зоне, и вернет IP-адрес.
    Кажется, что для поиска одного IP-адреса тратится слишком много ресурсов, но это несравнимо меньше, чем при прежней схеме с файлом HOSTS.TXT. Но все еще имеются места для усовершенствования этой схемы.
    Чтобы уменьшить время ответа для будущих запросов, сервер имен хранит полученную раньше информацию в кэше (cache). Так что в следующий раз, когда любой другой компьютер из вашей локальной сети захочет найти адрес хоста в домене groucho.edu, ваш сервер имен не проведет все снова, а будет сразу обращаться к серверу имен groucho.edu.
    Конечно, сервер имен не будет хранить эту информацию всегда, а отбросит ее через некоторое время. Этот интервал времени назван time to live, (временем жизни) или TTL. TTL задается администратором каждой конкретной зоны.


    Поиск неисправностей Этот раздел


    В любом случае включите отладку опцией -xall и смотрите на вывод в файле Debug в каталоге spool. Это поможет быстро распознть, где происходит сбой. Также иногда полезно включить динамик модема, когда соединение не удается установить. С Hayes-совместимыми модемами это можно сделать, добавив
    ATL1M1 к скрипту модема в файле dial.
    Первым делом стоит проверить, все ли права доступа к файлам установлены правильно. Исполняемый модуль uucico должен принадлежать uucp, а все файлы в /usr/lib/uucp, /var/spool/uucp и /var/spool/uucppublic должны принадлежать uucp. Имеются также некоторые скрытые файлы в каталоге spool, которые также должны принадлежать uucp.


    Port и speed


    Опции port и speed используются, чтобы выбрать устройство, используемое для вызова удаленной системы и установки максимального быстродействия. Запись system может использовать одну или обе опцию сразу. При поиске подходящего устройства в файле port могут быть выбраны только те порты, которые соответствуют имени порта и (или) диапазону скоростей.

    port и speed
    Опции port и speed используются, чтобы выбрать устройство, используемое для вызова удаленной системы и установки максимального быстродействия. Запись system может использовать одну или обе опцию сразу. При поиске подходящего устройства в файле port могут быть выбраны только те порты, которые соответствуют имени порта и (или) диапазону скоростей.


    Вообще, при использовании опции speed есть ограничение. Если в файле port определено только одно устройство, uucico всегда использует его, так что Вам остается только задать желаемую скорость. Если Вы имеете несколько модемов, подключенных к Вашей системе, uucico пробует все подходящие, пока не найдет неиспользуемый в данный момент. В этом случае задавать порт не следует: если порт указан, никакого поиска вообще не будет.


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


    Термин getty сокращение от "get tty" Программа getty открывает последовательное устройство, конфигурирует его, факультативно конфигурирует модем и ждет подключение, которое будет сделано. Активное подключение на последовательном устройстве обычно указывается Data Carrier Detect (DCD) штырьком в последовательном шнуре. Когда происходит соединение, getty выдает приглашение login: и затем вызывает программу login, чтобы обработать вход в систему. Каждый из виртуальных терминалов (устройств /dev/tty1) в Linux имеет свою копию программы getty, запущенную именно для него.
    Имеется ряд различных версий getty, каждая разработанная, чтобы удовлетворить некоторые конфигурации лучше, чем другие. Версия getty, которую я опишу, названа mgetty. Она ориентирована на работу с модемами, что и принесло ей солидную популярность, включая поддержку для автоматических факсимильных программ и речевых модемов. При конфигурировании mgetty я сконцентрируюсь на ответах на стандартные вызовы для обмена данными.


    Правильное использование цепочек


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




    Предоставление UUCP-доступа


    Вы должны установить имена пользователей, которые разрешают удаленной системе регистрацию в Вашей системе и устанавливают соединение UUCP. Вообще, необходимо дать отдельное имя каждой системе, которая взаимодействует с Вами. При установке имени для системы pablo, Вы (например) можете дать ей имя Upablo, как имя пользователя.
    Предоставление UUCP-доступа
    Вы должны установить имена пользователей, которые разрешают удаленной системе регистрацию в Вашей системе и устанавливают соединение UUCP. Вообще, необходимо дать отдельное имя каждой системе, которая взаимодействует с Вами. При установке имени для системы pablo, Вы (например) можете дать ей имя Upablo, как имя пользователя.


    Для систем, которые подключаются через последовательный порт, Вы должны добавить эти имена в файл паролей системы, /etc/passwd . Хорошим вкусом считается поместить все имена UUCP в специальную группу типа uuguest. Домашний каталог такого пользователя должен находиться в общем каталоге
    /var/spool/uucppublic, оболочка входа в систему
    uucico.
    Для обслуживания систем UUCP, которые связываются с Вашим сайтом через TCP, нужно настроить на их обработку inetd. Он должен быть нацелен на порт uucp добавлением следующей строки к файлу /etc/inetd.conf:

    uucp stream tcp nowait root /usr/sbin/tcpd /usr/lib/uucp/uucico -l
    С опцией Опция –l uucico выполняет собственную проверку на вход в систему. Она запросит имя и пароль также, как и стандартная программа login, но положится на собственный файл паролей вместо /etc/passwd . Этот файл паролей называется /etc/uucp/passwd и содержит пары имен входа в систему и паролей:

    Upablo IslaNegra Ulorca co'rdoba
    Конечно, этот файл должен принадлежать пользователю uucp и иметь права доступа 600.
    Если эта база данных так хороша, почему бы не использовать ее на нормальных последовательных входах в систему? Хорошо, в некоторых случаях Вы можете это устроить. Сначала Вам понадобится getty, которой Вы можете сообщить вызвать uucico вместо обычного /bin/login для Ваших UUCP-пользователей. Вызов uucico выглядит так:

    /usr/lib/uucp/uucico -l -u user
    Опция -u предписывает использовать переданное имя пользователя, а не запрашивать его.
    Для защиты пользователей UUCP от тех, кто мог бы давать неправильное имя системы и обрушить их почту, Вы должны добавить команду called-login для каждой системной записи в файле sys. Это описано ниже.


    Преобразование адресов Теперь


    Необходим механизм, чтобы отобразить адреса IP на адреса основной сети. Используемый механизм Address Resolution Protocol
    (ARP, протокол преобразования адресов). Фактически, ARP не ограничен сетями Ethernet или Token Ring, он используется и на других типах сетей, типа любительского радио протокола AX.25. Идея, лежащая в основе ARP, точно такая, какую большинство людей использует, когда они должны найти человека X в толпе из 150 людей: человек, который хочет его видеть, зовет достаточно громко, чтобы каждый в толпе мог его услышать, а тот, кого зовут, отвечает. Когда он отвечает, мы узнаем, который человек нам нужен.
    Когда ARP хочет найти адрес Ethernet, соответствующий данному IP-адресу, он использует свойство Ethernet под названием
    broadcasting, в котором пакеты адресуются всем машинам в сети одновременно. Пакет, который посылает ARP, содержит запрос IP-адреса. Каждый компьютер, получивший запрос, сравнивает его содержимое с собственным IP-адресом и, если он совпадает с указанным в запросе, возвращает ответ. Запрашивающий компьютер может теперь извлекать адрес Ethernet из ответа.
    Возникает проблема: как обратиться к Internet-адресу, который может быть в другой сети в другом полушарии? Ответ на этот вопрос называется routing, а именно нахождение физического расположения компьютера в сети. Мы обсудим эту проблему в следующем разделе.
    Давайте поговорим немного более подробно относительно ARP. Как только компьютер обнаружил адрес Ethernet, он сохраняет этот адрес в кэше ARP так, чтобы не делать запрос снова, когда в следующий раз потребуется послать пакет рассматриваемому компьютеру. Однако, неблагоразумно хранить эту информацию всегда; плата Ethernet удаленного компьютера может быть заменена из-за технических проблем, так что ARP-запись становится недопустимой. Следовательно, записи в кэше ARP будут сброшены через некоторое время, чтобы вызвать другой запрос для поиска IP-адреса.
    Иногда необходимо найти адрес IP, связанный с данным адресом Ethernet. Это случается, когда машина без диска хочет загружаться с сервера по сети, что является частой ситуацией в локальных сетях. Клиент без диска, однако, не имеет фактически никакой информации относительно себя, кроме адреса Ethernet! Так что он передает сообщение, содержащее запрос к серверу начальной загрузки, чтобы обеспечить себя адресом IP. Имеется другой протокол для этой ситуации Reverse Address Resolution Protocol (RARP, протокол обратного преобразования адреса). Наряду с протоколом BOOTP он служит, чтобы определить процедуру начальной загрузки клиентов без диска по сети.


    Преобразование имен машин Как


    Приложение, которое хочет найти IP-адрес по заданному имени хоста, не должно пытаться сделать это собственными силами. Вместо этого оно обращается к библиотечным функциям, которые для этого и написаны, они называются gethostbyname(3) и
    gethostbyaddr(3). Традиционно эти и ряд других процедур были сгруппированы в отдельной библиотеке, названной
    resolverlibrary. В Linux это часть стандартной
    libc. Настройка преобразователя имен детально описана в главе 6.
    В маленькой сети, подобной Ethernet, или даже на нескольких, не очень трудно поддерживать таблицу, сопоставляющую имена хоста с IP-адресами. Эта информация обычно хранится в файле /etc/hosts. При добавлении или перемещении хоста, или при переназначении адресов, все что вы должны сделать, это изменить файл hosts на всех хостах. Очевидно, что это будет достаточно трудно в сетях с большим количеством машин.
    Одно из решений этой проблемы: сетевая информационная система (Network Information System, NIS), разработанная Sun Microsystems, также известная как YP или желтые страницы. NIS хранит файл hosts и другую информацию в базе данных на главном хосте, с которого клиенты могут восстановить свои файлы, если это необходимо. Этот способ подходит только для сетей среднего размера, потому что он требует поддерживать полную базу данных как на центральной машине, так и на всех остальных. Установка и настройка NIS подробно рассмотрены в главе 13.
    В Internet информация об адресах первоначально хранилась в единственном файле HOSTS.TXT. Этот файл поддерживался в NIC (Network Information Center) и должен был загружаться всеми участвующими сайтами. Когда сеть выросла, возникло несколько проблем. Постоянное обновление и постоянная перекачка файла
    HOSTS.TXT требовали все больше ресурсов, нагрузка на сервер, который этим занимался, стала слишком высока. Но еще большей проблемой стало придумывание новых (не совпадающих с прежними) имен.
    Вот почему в 1984 г. была введена новая схема Domain Name System (DNS), разработанная Paul Mockapetris и решившая обе проблемы одновременно. Domain Name System подробно обсуждается в
    главе 6.


    Типовой файл etc inetd.conf


    Пример 12-1. Типовой файл /etc/inetd.conf



    # # inetd services ftp stream tcp nowait root /usr/sbin/ftpd in.ftpd -l telnet stream tcp nowait root /usr/sbin/telnetd in.telnetd -b/etc/issue #finger stream tcp nowait bin /usr/sbin/fingerd in.fingerd #tftp dgram udp wait nobody /usr/sbin/tftpd in.tftpd #tftp dgram udp wait nobody /usr/sbin/tftpd in.tftpd /boot/diskless #login stream tcp nowait root /usr/sbin/rlogind in.rlogind #shell stream tcp nowait root /usr/sbin/rshd in.rshd #exec stream tcp nowait root /usr/sbin/rexecd in.rexecd # # inetd internal services # daytime stream tcp nowait root internal daytime dgram udp nowait root internal time stream tcp nowait root internal time dgram udp nowait root internal echo stream tcp nowait root internal echo dgram udp nowait root internal discard stream tcp nowait root internal discard dgram udp nowait root internal chargen stream tcp nowait root internal chargen dgram udp nowait root internal
    tftp также закомментирован. tftp осуществляет примитивный протокол передачи файлов (
    Trivial File Transfer Protocol), который позволяет передавать любые общедоступные файлы из Вашей системы без пароля. Это особенно вредно для файла /etc/passwd, даже более того, когда Вы не используете теневой пароль.
    TFTP обычно используется бездисковыми клиентами и X-терминалами при загрузке их кода с сервера при начальной загрузке. Если Вы должны запустить tftpd, удостоверьтесь, что область доступа к директориям клиентов будет строго ограничена. Это показано во второй строке для tftp, в примере.


    Образец файла rc.serial


    Пример 4-1. Образец файла rc.serial



    # /etc/rc.serial - serial line configuration script. # # Configure serial devices /sbin/setserial /dev/ttyS0 auto_irq skip_test autoconfig /sbin/setserial /dev/ttyS1 auto_irq skip_test autoconfig /sbin/setserial /dev/ttyS2 auto_irq skip_test autoconfig /sbin/setserial /dev/ttyS3 auto_irq skip_test autoconfig # # Display serial device configuration /sbin/setserial -bg /dev/ttyS*
    Команда /sbin/setserial -bg /dev/ttyS* в последней строке будет печатать аккуратно форматируемое резюме аппаратной конфигурации всех активных последовательных устройств. Образец такого вывода показан в примере 4-2 .


    Вывод команды setserial -bg /dev/ttyS Command


    Пример 4-2. Вывод команды setserial -bg /dev/ttyS Command



    /dev/ttyS0 at 0x03f8 (irq = 4) is a 16550A /dev/ttyS1 at 0x02f8 (irq = 3) is a 16550A


    Файл rc.serial с командами stty


    Пример 4-3. Файл rc.serial с командами stty



    # stty crtscts < /dev/ttyS0 stty crtscts < /dev/ttyS1 stty crtscts < /dev/ttyS2 stty crtscts < /dev/ttyS3 #
    Команда stty работает на текущем терминале, но используя переадресацию ввода ("stty управлять любым tty-устройством. Про символы "" регулярно забывают. Новые версии stty имеют более удачный синтаксис для таких задач. Чтобы использовать новый синтаксис, я переписал мой пример настройки. Новую его версию можно посмотреть в примере 4-4.


    Файл rc.serial с командами stty (новый синтаксис)


    Пример 4-4. Файл rc.serial с командами stty (новый синтаксис)



    # stty crtscts -F /dev/ttyS0 stty crtscts -F /dev/ttyS1 stty crtscts -F /dev/ttyS2 stty crtscts -F /dev/ttyS3 #
    Я упомянул, что команда stty может использоваться, чтобы отобразить параметры конфигурации терминала tty-устройства. Чтобы отобразить все активные параметры настройки на tty-устройстве, скомандуйте:

    $ stty -a -F /dev/ttyS1
    Вывод этой команды показан в примере 4-5, Он дает Вам состояние всех параметров для этого устройства. Параметр, показанный с предшествующим минусом, как в -crtscts, означает, что данное свойство выключено.


    Вывод команды stty -a


    Пример 4-5. Вывод команды stty -a



    speed 19200 baud; rows 0; columns 0; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ; eol2 = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0; -parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel -opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 -isig -icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
    Описание наиболее важных из этих параметров дано в таблице 4-2. Каждый параметр может быть включен командой stty или выключен командой stty с символом - перед этим параметром. Таким образом, чтобы отключить аппаратное подтверждение связи на ttyS0, используется:

    $ stty -crtscts -F /dev/ttyS0


    Простой файл /etc/mgetty/mgetty.config


    Пример 4-6. Простой файл /etc/mgetty/mgetty.config



    # mgetty configuration file # # this is a sample configuration file, see mgetty.info for details # comment lines start with a "#", empty lines are ignored # # ----- global section ----- # In this section, you put the global defaults, per-port stuff is below # # access the modem(s) with 38400 bps speed 38400 # # set the global debug level to "4" (default from policy.h) debug 4 # # ----- port specific section ----- # # Here you can put things that are valid only for one line, not the others # # # Hayes modem connected to ttyS0: don't do fax, less logging # port ttyS0 debug 3 data-only y # # direct connection of a VT100 terminal which doesn't like DTR drops # port ttyS1 direct y speed 19200 toggle-dtr n
    Файл конфигурации поддерживает глобальные и специфические для порта параметры. В нашем примере мы использовали глобальную опцию, чтобы установить быстродействие в 38,400 bps. Это значение унаследовано портом ttyS0. mgetty применяет именно это значение, если в секции специфической информации для порта не задано другое, как это сделано для ttyS1.
    Ключевое слово debug управляет уровнем детализации отчетов mgetty. Ключевое слово data-only в конфигурации ttyS0 предписывает mgetty игнорировать любые свойства факс-модема, чтобы функционировать только как модем данных. Ключеове слово direct в конфигурации ttyS1 предписывает mgetty не делать попытку инициализации модема на этом порте. Наконец, toggle-dtr предписывает mgetty не делать попытку повесить трубку при получении на линии сигнала DTR (Data Terminal Ready).
    Вы можете также оставить пустым файл mgetty.config и использовать параметры командной строки, чтобы определить те же самые параметры. Документация, сопровождающая программу, включает полное описание параметров командной строки и файла конфигурации mgetty .
    Мы должны добавить две записи в файл /etc/inittab , чтобы активизировать эту конфигурацию. Файл
    inittab файл конфигурации команды init. Команда init является ответственной за инициализацию системы. Она автоматически выполняет программы при начальной загрузке и перезапускает их, когда они завершаются. Это идеально для целей работы программы getty.




    T0:23:respawn:/sbin/mgetty ttyS0 T1:23:respawn:/sbin/mgetty ttyS1
    Каждая строка файла /etc/inittab содержит 4 поля, разделяемые двоеточиями. Первое поле является идентификатором. Оно уникально маркирует запись в файле. Традиционно это два символа, но современные версии позволяют четыре. Второе поле содержит список уровней выполнения, на которых эта запись должна быть активна. Уровни выполнения являются средством обеспечения альтернативных конфигураций системы. Они связаны с наборами скриптов в каталогах /etc/rc1.d, /etc/rc2.d и т.д. Третье поле описывает, когда принять меры. Для работы программы getty оно должно быть определено как respawn. Это означает, что при завершении программы, она будет запущена вновь. Имеется еще несколько параметров, но они не важны для наших целей в данный момент. Четвертое поле задает команду, которая будет выполнена. Именно здесь надо определить команду mgetty и все необходимые ее параметры. В нашем простом примере мы запускаем и перезапускаем mgetty, когда система действует на уровнях выполнения 2 или 3 и передаем в качестве аргумента только имя устройства для работы. Команда mgetty подразумевает каталог /dev, так что задавать его явно в имени устройства не нужно.
    Эта глава дает только общее представлдение о mgetty. Подробные сведения можно найти в Serial-HOWTO.
    После правки файла конфигурации, надо перезапустить процесс init, чтобы изменения вступили в силу. Пошлите сигнал hangup процессу init. Он всегда имеет ID процесса равный единице, так что можно использовать команду:

    # kill -HUP 1
    Только не забудьте параметр -HUP! Иначе получите останов системы со страшным скрежетом.

    Файл named.ca


    Пример 6-10. Файл named.ca



    ; /var/named/named.ca Cache file for the brewery. ; We're not on the Internet, so we don't need ; any root servers. To activate these ; records, remove the semicolons. ; ;. 3600000 IN NS A.ROOT-SERVERS.NET. ;A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4 ;. 3600000 NS B.ROOT-SERVERS.NET. ;B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107 ;. 3600000 NS C.ROOT-SERVERS.NET. ;C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12 ;. 3600000 NS D.ROOT-SERVERS.NET. ;D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90 ;. 3600000 NS E.ROOT-SERVERS.NET. ;E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10 ;. 3600000 NS F.ROOT-SERVERS.NET. ;F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241 ;. 3600000 NS G.ROOT-SERVERS.NET. ;G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4 ;. 3600000 NS H.ROOT-SERVERS.NET. ;H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53 ;. 3600000 NS I.ROOT-SERVERS.NET. ;I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17 ;. 3600000 NS J.ROOT-SERVERS.NET. ;J.ROOT-SERVERS.NET. 3600000 A 198.41.0.10 ;. 3600000 NS K.ROOT-SERVERS.NET. ;K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129 ;. 3600000 NS L.ROOT-SERVERS.NET. ;L.ROOT-SERVERS.NET. 3600000 A 198.32.64.12 ;. 3600000 NS M.ROOT-SERVERS.NET. ;M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33


    Файл named.hosts


    Пример 6-11. Файл named.hosts



    ; /var/named/named.hosts Local hosts at the brewery ; Origin is vbrew.com ; @ IN SOA vlager.vbrew.com. janet.vbrew.com. ( 2000012601 ; serial 86400 ; refresh: once per day 3600 ; retry: one hour 3600000 ; expire: 42 days 604800 ; minimum: 1 week ) IN NS vlager.vbrew.com. ; ; local mail is distributed on vlager IN MX 10 vlager ; ; loopback address localhost. IN A 127.0.0.1 ; ; Virtual Brewery Ethernet vlager IN A 172.16.1.1 vlager-if1 IN CNAME vlager ; vlager is also news server news IN CNAME vlager vstout IN A 172.16.1.2 vale IN A 172.16.1.3 ; ; Virtual Winery Ethernet vlager-if2 IN A 172.16.2.1 vbardolino IN A 172.16.2.2 vchianti IN A 172.16.2.3 vbeaujolais IN A 172.16.2.4 ; ; Virtual Spirits (subsidiary) Ethernet vbourbon IN A 172.16.3.1 vbourbon-if1 IN CNAME vbourbon


    Файл named.local


    Пример 6-12. Файл named.local



    ; /var/named/named.local Reverse mapping of 127.0.0 ; Origin is 0.0.127.in-addr.arpa. ; @ IN SOA vlager.vbrew.com. joe.vbrew.com. ( 1 ; serial 360000 ; refresh: 100 hrs 3600 ; retry: one hour 3600000 ; expire: 42 days 360000 ; minimum: 100 hrs ) IN NS vlager.vbrew.com. 1 IN PTR localhost.


    Файл named.rev


    Пример 6-13. Файл named.rev



    ; /var/named/named.rev Reverse mapping of our IP addresses ; Origin is 16.172.in-addr.arpa. ; @ IN SOA vlager.vbrew.com. joe.vbrew.com. ( 16 ; serial 86400 ; refresh: once per day 3600 ; retry: one hour 3600000 ; expire: 42 days 604800 ; minimum: 1 week ) IN NS vlager.vbrew.com. ; brewery 1.1 IN PTR vlager.vbrew.com. 2.1 IN PTR vstout.vbrew.com. 3.1 IN PTR vale.vbrew.com. ; winery 1.2 IN PTR vlager-if2.vbrew.com. 2.2 IN PTR vbardolino.vbrew.com. 3.2 IN PTR vchianti.vbrew.com. 4.2 IN PTR vbeaujolais.vbrew.com.


    Выдержка из файла named.hosts для отдела физики


    Пример 6-4. Выдержка из файла named.hosts для отдела физики



    ; Authoritative Information on physics.groucho.edu. @ IN SOA niels.physics.groucho.edu. janet.niels.physics.groucho.edu. { 1999090200 ; serial no 360000 ; refresh 3600 ; retry 3600000 ; expire 3600 ; default ttl } ; ; Name servers IN NS niels IN NS gauss.maths.groucho.edu. gauss.maths.groucho.edu. IN A 149.76.4.23 ; ; Theoretical Physics (subnet 12) niels IN A 149.76.12.1 IN A 149.76.1.12 name server IN CNAME niels otto IN A 149.76.12.2 quark IN A 149.76.12.4 down IN A 149.76.12.5 strange IN A 149.76.12.6 ... ; Collider Lab. (subnet 14) boson IN A 149.76.14.1 muon IN A 149.76.14.7 bogon IN A 149.76.14.12 ...
    Кроме записей A и CNAME, Вы можете видеть специальную, занимающую несколько строк запись вверху файла. Это SOA-запись ресурса расшифровывается как Start of Authority (начало авторитета), которая содержит общую информацию относительно зоны, для которой этот сервер является авторитетным. Она включает, например, время жизни для всех записей.
    Обратите внимание, что все имена в файле с примером, которые не заканчиваются точкой, интерпретируются относительно physics.groucho.edu. Специальное имя (@ ), используемое в записи SOA при обращении к имени данного домена.
    Мы видели, что сервера имен для groucho.edu так или иначе должны знать хоть что-то относительно зоны физиков так, чтобы направлять запросы серверам имен. Это обычно достигается парой записей: NS-запись дает FQDN, и А-запись, ассоциирующая его имя с IP-адресом. Так как эти записи появляются вместе, они часто называются склеенными записями (glue records). Это фактически единственный случаи записи, в которой родительская зона держит информацию относительно хостов в зоне подчиненного. Склеенные записи, указывающие на сервера имен для physics.groucho.edu, показаны в примере 6-5.


    Выдержка из файла named.hosts для GMU


    Пример 6-5. Выдержка из файла named.hosts для GMU



    ; Zone data for the groucho.edu zone. @ IN SOA vax12.gcc.groucho.edu. joe.vax12.gcc.groucho.edu. { 1999070100 ; serial no 360000 ; refresh 3600 ; retry 3600000 ; expire 3600 ; default ttl } .... ; ; Glue records for the physics.groucho.edu zone physics IN NS niels.physics.groucho.edu. IN NS gauss.maths.groucho.edu. niels.physics IN A 149.76.12.1 gauss.maths IN A 149.76.4.23 ...


    Выдержка из файла named.rev


    Пример 6-6. Выдержка из файла named.rev для подсети 12

    ; the 12.76.149.in-addr.arpa domain. @ IN SOA niels.physics.groucho.edu. janet.niels.physics.groucho.edu. { 1999090200 360000 3600 3600000 3600 } 2 IN PTR otto.physics.groucho.edu. 4 IN PTR quark.physics.groucho.edu. 5 IN PTR down.physics.groucho.edu. 6 IN PTR strange.physics.groucho.edu.


    для сети 149.76


    Пример 6-7. Выдержка из файла named.rev для сети 149.76

    ; the 76.149.in-addr.arpa domain. @ IN SOA vax12.gcc.groucho.edu. joe.vax12.gcc.groucho.edu. { 1999070100 360000 3600 3600000 3600 } ... ; subnet 4: Mathematics Dept. 1.4 IN PTR sophus.maths.groucho.edu. 17.4 IN PTR erdos.maths.groucho.edu. 23.4 IN PTR gauss.maths.groucho.edu. ... ; subnet 12: Physics Dept, separate zone 12 IN NS niels.physics.groucho.edu. IN NS gauss.maths.groucho.edu. niels.physics.groucho.edu. IN A 149.76.12.1 gauss.maths.groucho.edu. IN A 149.76.4.23 ...

    Одно важное следствие этого то, что зоны могут создаваться только как наборы IP-сетей и даже более того, количество нулевых битов в маске подсети должно быть кратно 8. Все подсети в университете Groucho Marx имеют сетевую маску 255.255.255.0, так что зона in-addr.arpa может быть создана для каждой подсети. Однако, если сетевая маска будет 255.255.255.128, создание зон для подсети 149.76.12.128 будет невозможно, потому что нет никакого способа сообщить DNS, что область 12.76.149.in-addr.arpa была раздроблена на две зоны с именами хостов от 1 до 127 и от 128 до 255 соответственно.


    Файл named.boot для vlager


    Пример 6-8. Файл named.boot для vlager



    ; ; /etc/named.boot file for vlager.vbrew.com ; directory /var/named ; ; domain file ;----------------- cache . named.ca primary vbrew.com named.hosts primary 0.0.127.in-addr.arpa named.local primary 16.172.in-addr.arpa named.rev
    Рассмотрим каждую инструкцию индивидуально. Ключевое слово directory сообщает named , что все имена файлов, упоминаемых позже в этом файле, например, зональные файлы, размещены в каталоге /var/named.
    Ключевое слово primary загружает информацию в named. Эта информация принимается из главных (master) файлов, определенных как последние параметры. Эти файлы представляют DNS-записи ресурсов, которые мы рассмотрим позже.
    В этом примере мы конфигурируем named как первичный (primary) сервер имен для трех доменов, как обозначено тремя инструкциями primary. Первая из них предписывает named действовать как первичный сервер для vbrew.com, принимая зональные данные из файла named.hosts.
    Ключевое слово cache должно присутствовать фактически на всех машинах, управляющих сервером имен. Оно инструктирует named использовать кэш и загружать имена (root name server hints) из определенного файла кэша (в нашем примере named.ca). Это будет рассмотрено чуть позже.
    Вот список наиболее важных параметров, которые Вы можете использовать в named.boot:
    directory
    Опция определяет каталог, в котором расположены зональные файлы. Имена файлов в других параметрах могут быть даны относительно этого каталога. Несколько каталогов могут быть определены несколькими словами directory. Стандарт файловой системы Linux предполагает, что это /var/named.
    primary
    Эта опция берет имя домена и имя файла как параметры, объявляя локальный сервер авторитетным для заданного домена. Как первичный сервер named загружает зональную информацую из данного главного файла.
    Всегда будет по крайней мере одна запись primary в каждом файле boot, используемая для обратного отображения сети 127.0.0.0, которая является кольцевым интерфейсом (loopback).
    secondary



    Инструкция берет имя домена, список адресов и имя файла как параметры. Это объявляет локальный сервер вторичным главным (secondary master) сервером для заданного домена.
    Вторичный сервер хранит авторитетные данные относительно домена, но не собирает их из файлов. Вместо этого он пробует загружать их с первичного сервера. IP-адрес по крайней мере одного первичного сервера должен быть передан named в списке адресов. Локальный сервер входит в контакт с каждыми из них до успешного получения зональной базы данных, которая затем будет сохранена в резервном файле заданном как третий параметр. Если ни один из первичных серверов не отвечает, зональные данные будут восстановлены из резервного файла.
    Затем named пытается обновить зональные данные с регулярными интервалами. Этот процесс объясняется позже в связи с типом записи ресурса SOA.
    cache
    Эта опция берет имя домена и имя файла как параметры. Этот файл содержит root server hints, который является списком записей, указывающих на корневые серверы имен. Будут распознаны только записи NS и A. Параметр domain должен быть именем корневого домена.
    Эта информация критична для named. Если инструкции cache нет в файле boot,
    named не будет использовать локальный кэш вообще. Эта ситуация резко ухудшит эффективность и увеличит сетевую загрузку, если следующий сервер сделает запрос не о машине в локальной сети. Кроме того,
    named не будет обращаться к корневым серверам, а значит, не сможет преобразовать никакие адреса кроме тех, которые авторитетны для него. Исключение из этого правила: сервера пересылки (см. ниже опцию forwarders).
    forwarders
    Инструкция берет список адресов, разделенных пробелами как параметр. Адреса IP в этом списке определяют список серверов имен, которые named может спросить, если не может найти адрес сам в локальном кэше.
    slave
    Инструкция делает сервер имен подчиненным (slave ). Он никогда не выполняет рекурсивные запросы самостоятельно, а только пересылает их на серверы, определенные в инструкции forwarders.
    Есть два параметра, которые мы не будем описывать здесь: sortlist и domain . Еще две директивы могут также использоваться внутри этих файлов базы данных: $INCLUDE и $ORIGIN. Так как они редко нужны, мы не будем рассматривать их сейчас.

    Файл для BIND 8, эквивалентный файлу named.conf для vlager


    Пример 6-9. Файл для BIND 8, эквивалентный файлу named.conf для vlager



    // // /etc/named.boot file for vlager.vbrew.com options { directory "/var/named"; };
    zone "." { type hint; file "named.ca"; };
    zone "vbrew.com" { type master; file "named.hosts"; };
    zone "0.0.127.in-addr.arpa" { type master; file "named.local"; };
    zone "16.172.in-addr.arpa" { type master; file "named.rev"; };
    Если Вы внимательно его рассмотрите, то обратите внимание на то, что каждая из инструкций named.boot превратилась в C-инструкцию, взятую в фигурные скобки "{ }".
    Комментарии, которые в файле named.boot
    начинались с точки с запятой (;), теперь обозначены как //.
    Инструкция directory превратилась в параграф options с предложением directory.
    Команды cache и primary преобразованы в зональные параграфы (zone) с типами ( type) предложений hint и master, соответственно.
    Зональные файлы не должны измениться: их синтаксис остается неизменным. Новый синтаксис конфигурации учитывает много новых параметров, которые мы еще не рассмотрели.


    Простой скрипт для dip


    Пример 7-1. Простой скрипт для dip



    # Sample dip script for dialing up cowslip # Set local and remote name and address get $local vlager-slip get $remote cowslip port ttyS3 # choose a serial port speed 38400 # set speed to max modem HAYES # set modem type reset # reset modem and tty flush # flush out modem response # Prepare for dialing. send ATQ0V1E1X1\r wait OK 2 if $errlvl != 0 goto error dial 41988 if $errlvl != 0 goto error wait CONNECT 60 if $errlvl != 0 goto error # Okay, we're connected now sleep 3 send \r\n\r\n wait ogin: 10 if $errlvl != 0 goto error send Svlager\n wait ssword: 5 if $errlvl != 0 goto error send knockknock\n wait running 30 if $errlvl != 0 goto error # We have logged in, and the remote side is firing up SLIP. print Connected to $remote with address $rmtip default # Make this link our default route mode SLIP # We go to SLIP mode, too # fall through in case of error error: print SLIP to $remote failed.
    После установления связи с cowslip и запуска протокола SLIP dip отсоединится от терминала и перейдет в фоновый режим. Вы сможете использовать обычные сетевые услуги на SLIP-связи. Чтобы завершить связь, просто вызовите dip
    c опцией -k. Это пошлет сигнал hangup процессу dip, используя запись id dip в /etc/dip.pid:

    # dip -k
    В языке скриптов dip, ключевые слова с префиксом $ обозначают различные имена. dip имеет предопределенное множество переменных, которые будут перечислены ниже. Например, $remote и $local содержат имена удаленной и локальной машин.
    Первые два оператора в типовом скрипте команды get, которые являются способом установки переменных в dip. Здесь имена локальной и удаленной машин установлены соответственно в vlager и cowslip .
    Следующие пять операторов устанавливают линию терминала и модем. Команда reset посылает reset-строку модему (для Hayes-совместимых модемов, это ATZ). Следующий оператор игнорирует реакцию модема так, чтобы login chat на последовательных линиях работал правильно. Сhat довольно прост: он набирает номер 41988, номер телефона cowslip, и подсоединяется под именем Svlager через пароль knockknock. Команда wait заставит dip
    ждать строку, заданную как его первый аргумент. Число, заданное в секундах, как второй аргумент, определяет, сколько времени надо ждать, если строка не была получена. Команды if разбросаны в процедуре входа в систему и проверяют то, что никакие ошибки не появились при выполнении этой команды.
    Итоговые (final) команды выполняются после регистрации. Они заданы в default, и заставят SLIP связать заданный по умолчанию маршрут со всеми хостами и режимом (mode ), который включает SLIP на линии и конфигурирует интерфейс и таблицу маршрутов (routing tables).


    Пример конфигурации Firewall Мы


    Конфигурация в этом примере была разработана, чтобы быть легко расширенной и настроенной. Мы обеспечили три версии. Первая версия выполнена, используя команду ipfwadm (или скрипт
    ipfwadm-wrapper), вторая использует ipchains и третья использует iptables. Пример не пытается использовать определяемые пользователем цепочки, но покажет Вам сходства и различия между старыми и новыми инструментами конфигурации firewall:

    #!/bin/bash ########################################################################## # IPFWADM VERSION # This sample configuration is for a single host firewall configuration # with no services supported by the firewall machine itself. ##########################################################################
    # USER CONFIGURABLE SECTION
    # The name and location of the ipfwadm utility. Use ipfwadm-wrapper for # 2.2.* kernels. IPFWADM=ipfwadm
    # The path to the ipfwadm executable. PATH="/sbin"
    # Our internal network address space and its supporting network device. OURNET="172.29.16.0/24" OURBCAST="172.29.16.255" OURDEV="eth0"
    # The outside address and the network device that supports it. ANYADDR="0/0" ANYDEV="eth1"
    # The TCP services we wish to allow to pass - "" empty means all ports # note: space separated TCPIN="smtp www" TCPOUT="smtp www ftp ftp-data irc"
    # The UDP services we wish to allow to pass - "" empty means all ports # note: space separated UDPIN="domain" UDPOUT="domain"
    # The ICMP services we wish to allow to pass - "" empty means all types # ref: /usr/include/netinet/ip_icmp.h for type numbers # note: space separated ICMPIN="0 3 11" ICMPOUT="8 3 11"
    # Logging; uncomment the following line to enable logging of datagrams # that are blocked by the firewall. # LOGGING=1
    # END USER CONFIGURABLE SECTION ########################################################################### # Flush the Incoming table rules $IPFWADM -I -f
    # We want to deny incoming access by default. $IPFWADM -I -p deny
    # SPOOFING # We should not accept any datagrams with a source address matching ours # from the outside, so we deny them. $IPFWADM -I -a deny -S $OURNET -W $ANYDEV
    # SMURF # Disallow ICMP to our broadcast address to prevent "Smurf" style attack. $IPFWADM -I -a deny -P icmp -W $ANYDEV -D $OURBCAST
    # TCP # We will accept all TCP datagrams belonging to an existing connection # (i.e. having the ACK bit set) for the TCP ports we're allowing through. # This should catch more than 95 % of all valid TCP packets. $IPFWADM -I -a accept -P tcp -D $OURNET $TCPIN -k -b
    # TCP - INCOMING CONNECTIONS # We will accept connection requests from the outside only on the # allowed TCP ports. $IPFWADM -I -a accept -P tcp -W $ANYDEV -D $OURNET $TCPIN -y
    # TCP - OUTGOING CONNECTIONS # We accept all outgoing tcp connection requests on allowed TCP ports. $IPFWADM -I -a accept -P tcp -W $OURDEV -D $ANYADDR $TCPOUT -y
    # UDP - INCOMING # We will allow UDP datagrams in on the allowed ports. $IPFWADM -I -a accept -P udp -W $ANYDEV -D $OURNET $UDPIN
    # UDP - OUTGOING # We will allow UDP datagrams out on the allowed ports. $IPFWADM -I -a accept -P udp -W $OURDEV -D $ANYADDR $UDPOUT
    # ICMP - INCOMING # We will allow ICMP datagrams in of the allowed types. $IPFWADM -I -a accept -P icmp -W $ANYDEV -D $OURNET $UDPIN
    # ICMP - OUTGOING # We will allow ICMP datagrams out of the allowed types. $IPFWADM -I -a accept -P icmp -W $OURDEV -D $ANYADDR $UDPOUT
    # DEFAULT and LOGGING # All remaining datagrams fall through to the default # rule and are dropped. They will be logged if you've # configured the LOGGING variable above. # if [ "$LOGGING" ] then # Log barred TCP $IPFWADM -I -a reject -P tcp -o
    # Log barred UDP $IPFWADM -I -a reject -P udp -o
    # Log barred ICMP $IPFWADM -I -a reject -P icmp -o fi # # end.
    <



    /p>
    Теперь мы повторно выполним это, используя команду
    ipchains:

    #!/bin/bash ########################################################################## # IPCHAINS VERSION # This sample configuration is for a single host firewall configuration # with no services supported by the firewall machine itself. ##########################################################################
    # USER CONFIGURABLE SECTION
    # The name and location of the ipchains utility. IPCHAINS=ipchains
    # The path to the ipchains executable. PATH="/sbin"
    # Our internal network address space and its supporting network device. OURNET="172.29.16.0/24" OURBCAST="172.29.16.255" OURDEV="eth0"
    # The outside address and the network device that supports it. ANYADDR="0/0" ANYDEV="eth1"
    # The TCP services we wish to allow to pass - "" empty means all ports # note: space separated TCPIN="smtp www" TCPOUT="smtp www ftp ftp-data irc"
    # The UDP services we wish to allow to pass - "" empty means all ports # note: space separated UDPIN="domain" UDPOUT="domain"
    # The ICMP services we wish to allow to pass - "" empty means all types # ref: /usr/include/netinet/ip_icmp.h for type numbers # note: space separated ICMPIN="0 3 11" ICMPOUT="8 3 11"
    # Logging; uncomment the following line to enable logging of datagrams # that are blocked by the firewall. # LOGGING=1
    # END USER CONFIGURABLE SECTION ########################################################################## # Flush the Input table rules $IPCHAINS -F input
    # We want to deny incoming access by default. $IPCHAINS -P input deny
    # SPOOFING # We should not accept any datagrams with a source address matching ours # from the outside, so we deny them. $IPCHAINS -A input -s $OURNET -i $ANYDEV -j deny
    # SMURF # Disallow ICMP to our broadcast address to prevent "Smurf" style attack. $IPCHAINS -A input -p icmp -w $ANYDEV -d $OURBCAST -j deny
    # We should accept fragments, in ipchains we must do this explicitly. $IPCHAINS -A input -f -j accept
    # TCP # We will accept all TCP datagrams belonging to an existing connection # (i.e. having the ACK bit set) for the TCP ports we're allowing through. # This should catch more than 95 % of all valid TCP packets. $IPCHAINS -A input -p tcp -d $OURNET $TCPIN ! -y -b -j accept
    # TCP - INCOMING CONNECTIONS # We will accept connection requests from the outside only on the # allowed TCP ports. $IPCHAINS -A input -p tcp -i $ANYDEV -d $OURNET $TCPIN -y -j accept
    # TCP - OUTGOING CONNECTIONS # We accept all outgoing TCP connection requests on allowed TCP ports. $IPCHAINS -A input -p tcp -i $OURDEV -d $ANYADDR $TCPOUT -y -j accept
    # UDP - INCOMING # We will allow UDP datagrams in on the allowed ports. $IPCHAINS -A input -p udp -i $ANYDEV -d $OURNET $UDPIN -j accept
    # UDP - OUTGOING # We will allow UDP datagrams out on the allowed ports. $IPCHAINS -A input -p udp -i $OURDEV -d $ANYADDR $UDPOUT -j accept
    # ICMP - INCOMING # We will allow ICMP datagrams in of the allowed types. $IPCHAINS -A input -p icmp -w $ANYDEV -d $OURNET $UDPIN -j accept
    # ICMP - OUTGOING # We will allow ICMP datagrams out of the allowed types. $IPCHAINS -A input -p icmp -i $OURDEV -d $ANYADDR $UDPOUT -j accept
    # DEFAULT and LOGGING # All remaining datagrams fall through to the default # rule and are dropped. They will be logged if you've # configured the LOGGING variable above. # if [ "$LOGGING" ] then # Log barred TCP $IPCHAINS -A input -p tcp -l -j reject
    # Log barred UDP $IPCHAINS -A input -p udp -l -j reject
    # Log barred ICMP $IPCHAINS -A input -p icmp -l -j reject fi # # end.
    <


    /p>
    В нашем примере для iptables мы включили использование набор правил FORWARD из-за различий в реализации набора правил INPUT в netfilter. Это имеет значение: такое отличие означает, что ни одно из правил не защищает firewall главный компьютер непосредственно. Точно подражая примеру с ipchains, мы скопировали каждое из наших правил в INPUT. Для ясности, мы пропустили все входящие пакеты (datagrams), полученные из нашего внешнего интерфейса.

    #!/bin/bash ########################################################################## # IPTABLES VERSION # This sample configuration is for a single host firewall configuration # with no services supported by the firewall machine itself. ########################################################################## # USER CONFIGURABLE SECTION
    # The name and location of the ipchains utility. IPTABLES=iptables
    # The path to the ipchains executable. PATH="/sbin"
    # Our internal network address space and its supporting network device. OURNET="172.29.16.0/24" OURBCAST="172.29.16.255" OURDEV="eth0"
    # The outside address and the network device that supports it. ANYADDR="0/0" ANYDEV="eth1"
    # The TCP services we wish to allow to pass - "" empty means all ports # note: comma separated TCPIN="smtp,www" TCPOUT="smtp,www,ftp,ftp-data,irc"
    # The UDP services we wish to allow to pass - "" empty means all ports # note: comma separated UDPIN="domain" UDPOUT="domain"
    # The ICMP services we wish to allow to pass - "" empty means all types # ref: /usr/include/netinet/ip_icmp.h for type numbers # note: comma separated ICMPIN="0,3,11" ICMPOUT="8,3,11"
    # Logging; uncomment the following line to enable logging of datagrams # that are blocked by the firewall. # LOGGING=1
    # END USER CONFIGURABLE SECTION ########################################################################### # Flush the Input table rules $IPTABLES -F FORWARD
    # We want to deny incoming access by default. $IPTABLES -P FORWARD deny
    # Drop all datagrams destined for this host received from outside. $IPTABLES -A INPUT -i $ANYDEV -j DROP
    # SPOOFING # We should not accept any datagrams with a source address matching ours # from the outside, so we deny them. $IPTABLES -A FORWARD -s $OURNET -i $ANYDEV -j DROP
    # SMURF # Disallow ICMP to our broadcast address to prevent "Smurf" style attack. $IPTABLES -A FORWARD -m multiport -p icmp -i $ANYDEV -d $OURNET -j DENY
    # We should accept fragments, in iptables we must do this explicitly. $IPTABLES -A FORWARD -f -j ACCEPT
    # TCP # We will accept all TCP datagrams belonging to an existing connection # (i.e. having the ACK bit set) for the TCP ports we're allowing through. # This should catch more than 95 % of all valid TCP packets. $IPTABLES -A FORWARD -m multiport -p tcp -d $OURNET --dports $TCPIN / ! --tcp-flags SYN,ACK ACK -j ACCEPT $IPTABLES -A FORWARD -m multiport -p tcp -s $OURNET --sports $TCPIN / ! --tcp-flags SYN,ACK ACK -j ACCEPT
    # TCP - INCOMING CONNECTIONS # We will accept connection requests from the outside only on the # allowed TCP ports. $IPTABLES -A FORWARD -m multiport -p tcp -i $ANYDEV -d $OURNET $TCPIN / --syn -j ACCEPT
    # TCP - OUTGOING CONNECTIONS # We will accept all outgoing tcp connection requests on the allowed / TCP ports. $IPTABLES -A FORWARD -m multiport -p tcp -i $OURDEV -d $ANYADDR / --dports $TCPOUT --syn -j ACCEPT # UDP - INCOMING # We will allow UDP datagrams in on the allowed ports and back. $IPTABLES -A FORWARD -m multiport -p udp -i $ANYDEV -d $OURNET / --dports $UDPIN -j ACCEPT $IPTABLES -A FORWARD -m multiport -p udp -i $ANYDEV -s $OURNET / --sports $UDPIN -j ACCEPT # UDP - OUTGOING # We will allow UDP datagrams out to the allowed ports and back. $IPTABLES -A FORWARD -m multiport -p udp -i $OURDEV -d $ANYADDR / --dports $UDPOUT -j ACCEPT $IPTABLES -A FORWARD -m multiport -p udp -i $OURDEV -s $ANYADDR / --sports $UDPOUT -j ACCEPT # ICMP - INCOMING # We will allow ICMP datagrams in of the allowed types. $IPTABLES -A FORWARD -m multiport -p icmp -i $ANYDEV -d $OURNET / --dports $ICMPIN -j ACCEPT # ICMP - OUTGOING # We will allow ICMP datagrams out of the allowed types. $IPTABLES -A FORWARD -m multiport -p icmp -i $OURDEV -d $ANYADDR / --dports $ICMPOUT -j ACCEPT # DEFAULT and LOGGING # All remaining datagrams fall through to the default # rule and are dropped. They will be logged if you've # configured the LOGGING variable above. # if [ "$LOGGING" ] then # Log barred TCP $IPTABLES -A FORWARD -m tcp -p tcp -j LOG # Log barred UDP $IPTABLES -A FORWARD -m udp -p udp -j LOG # Log barred ICMP $IPTABLES -A FORWARD -m udp -p icmp -j LOG fi # # end.
    Во многих простых случаях все, что надо сделать для конкретного применения этого примера, это поправить в начале файла блок, помеченный “USER CONFIGURABLE section” для указания, какие протоколы и пакеты надо пропускать. Для более сложных конфигураций надо поправить этот раздел целиком. Помните, что это простой пример, так что очень тщательно исследуйте его, чтобы гарантировать, что он делает именно то, что Вы хотите.

    Прочие файлы Имеется ряд файлов


    newsgroups
    Это файл, дополняющий active, который содержит список имен newsgroup, наряду с кратким описанием темы. Этот файл автоматически модифицируется, когда C-News получает сообщение управления checknews.
    localgroups
    Если Вы имеете ряд локальных групп таких, что Вы не хотите, чтобы C-News сообщал о них каждый раз, когда Вы получаете сообщение checkgroups, поместите их имена и описания в этом файле точно так же, как они появились бы в newsgroups .
    mailpaths
    Этот файл содержит адрес модератора для каждой модерируемой группы. Каждая строка содержит имя группы, сопровождаемое адресом email модератора (через табуляцию).
    Две специальных записи используются как значения по умолчанию. Это backbone и internet . Обе в форме bang-path являются путем к самому близкому базовому серверу и серверу, который понимает адреса RFC 822 ( user@host). По умолчанию это:

    internet backbone
    Вы не должны изменять запись internet, если Вы имеете exim или sendmail потому, что они понимают адресацию RFC 822.
    Запись backbone используется всякий раз, когда пользователь отправляет по почте статью в модерируемую группу, чей модератор не перечислен явно. Если имя newsgroup alt.sewer, и запись backbone содержит path!%s, C-News отправит по почте статью на path!alt-sewer, надеясь, что базовая машина способна передать статью кому надо. Чтобы выяснить, какой путь использовать, спросите администратора новостей сервера, который передает Вам. Вы можете также использовать uunet.uu.net!%s.
    distributions
    Этот файл не является файлом C-News, но он используется некоторыми newsreaders и nntpd. Он содержит список областей распространения, распознаваемых Вашим сервером, и описание встроенных возможностей. Например, Virtual Brewery имеет следующий файл:

    world everywhere in the world local Only local to this site nl Netherlands only mugnet MUGNET only fr France only de Germany only brewery Virtual Brewery only
    log
    Этот файл содержит протокол всех действий C-News. Он вызывается регулярно, выполнением newsdaily. Копии старых регистрационных файлов сохраняются в log.o, log.oo и т.д.
    errlog
    Это файл регистрации всех сообщений об ошибках C-News. Он не включает плохие статьи. Этот файл будет отправлен по почте newsmaster (usenet по умолчанию) автоматически с помощью newsdaily, если он не пуст. Файл
    errlog очищается newsdaily. Старые копии сохраняются в errlog.o и т.д.
    batchlog
    Регистрирует все выполнения sendbatches. Он обычно мало интересен. Также зависит от newsdaily.
    watchtime
    Это пустой файл, создаваемый каждый раз при выполнении newswatch.


    Просмотр и управление данными bindery


    Каждый файловый сервер NetWare поддерживает базу данных пользователей и конфигурации. Эта база данных называется bindery. Linux поддерживает набор инструментальных средств, которые позволяют читать эти записи, и если вы имеете разрешения супервизора на сервере, то менять и удалять эти данные. Резюме этих инструментальных средств перечислено в таблице 15-3.

    Просмотр и управление данными bindery
    Каждый файловый сервер NetWare поддерживает базу данных пользователей и конфигурации. Эта база данных называется bindery. Linux поддерживает набор инструментальных средств, которые позволяют читать эти записи, и если вы имеете разрешения супервизора на сервере, то менять и удалять эти данные. Резюме этих инструментальных средств перечислено в таблице 15-3.




    Просмотр наших правил в ipchains


    Чтобы перечислить наши правила в команде ipchains, используется параметр -L argument. Точно как с ipfwadm, там могут быть заданы аргументы, которые позволят детализировать вывод. В простейшем случае
    ipchains выведет нечто вроде:

    # ipchains -L -n
    Chain input (policy ACCEPT): Chain forward (policy DENY): target prot opt source destination ports DENY tcp -y---- 0.0.0.0/0 172.16.1.0/24 80 -> * ACCEPT tcp ------ 172.16.1.0/24 0.0.0.0/0 * -> 80 ACCEPT tcp ------ 0.0.0.0/0 172.16.1.0/24 80 -> * ACCEPT tcp ------ 172.16.1.0/24 0.0.0.0/0 * -> 20 ACCEPT tcp ------ 0.0.0.0/0 172.16.1.0/24 20 -> * ACCEPT tcp ------ 172.16.1.0/24 0.0.0.0/0 * -> 21 ACCEPT tcp ------ 0.0.0.0/0 172.16.1.0/24 21 -> *
    Chain output (policy ACCEPT):

    Просмотр наших правил в ipchains
    Чтобы перечислить наши правила в команде ipchains, используется параметр -L argument. Точно как с ipfwadm, там могут быть заданы аргументы, которые позволят детализировать вывод. В простейшем случае
    ipchains выведет нечто вроде:

    # ipchains -L -n
    Chain input (policy ACCEPT): Chain forward (policy DENY): target prot opt source destination ports DENY tcp -y---- 0.0.0.0/0 172.16.1.0/24 80 -> * ACCEPT tcp ------ 172.16.1.0/24 0.0.0.0/0 * -> 80 ACCEPT tcp ------ 0.0.0.0/0 172.16.1.0/24 80 -> * ACCEPT tcp ------ 172.16.1.0/24 0.0.0.0/0 * -> 20 ACCEPT tcp ------ 0.0.0.0/0 172.16.1.0/24 20 -> * ACCEPT tcp ------ 172.16.1.0/24 0.0.0.0/0 * -> 21 ACCEPT tcp ------ 0.0.0.0/0 172.16.1.0/24 21 -> *
    Chain output (policy ACCEPT):



    Если Вы не указали имя цепочки, ipchains выведет все правила из всех цепочек. В нашем примере параметр -n сообщает ipchains, чтобы тот не преобразовал любой адрес или порт в имя.
    Подробная форма, вызываемая опцией -u, обеспечивает намного больше деталей. Вывод добавляет поля для пакетов и счетчиков байтов, Type of Service AND и XOR масок, имени интерфейса и значения меток.
    Все правила, созданные ipchains имеют пакеты и счетчики байтов, связанные с ними. Это важно для IP Accounting и будет подробно рассмотрено в главе 10. По умолчанию эти счетчики используются в округленной форме, использующей суффиксы K и M для представления тысячи и миллиона соответственно. Если задан аргумент -x , счетчики работают без округления.


    Простой пример ncpmount


    Программа ncpmount используется так:

    # ncpmount -S ALES_F1 -U rick -P d00-b-gud /mnt/brewery
    Эта команда смонтирует все тома сервера ALES_F1 в иерархии /mnt/brewery под NetWare-логином rick с паролем d00-b-gud.

    Простой пример ncpmount
    Программа ncpmount используется так:

    # ncpmount -S ALES_F1 -U rick -P d00-b-gud /mnt/brewery
    Эта команда смонтирует все тома сервера ALES_F1 в иерархии /mnt/brewery под NetWare-логином rick с паролем d00-b-gud.


    Команда ncpmount обычно объявлена как setuid к root и может использоваться любым пользователем Linux. По умолчанию этот пользователь владеет подключением, и только он или пользователь root могут его размонтировать.
    NetWare реализует понятие тома (volume), который аналогичен файлововй системе Linux. Том NetWare является логическим представлением файловой системы NetWare. По умолчанию Linux NCPFS обрабатывает тома как подкаталоги больших логических файловых систем, представляемых файловым сервером. Команда ncpmount
    представляет каждый том NetWare как каталог в иерархии под каталогом монтирования. Это удобно, если Вы хотите доступ к целому серверу, но по сложным техническим причинам Вы не сможете реэкспортировать эти каталоги, используя NFS. Чуть позже мы рассмотрим, как это обойти.


    Простой скрипт


    Допустим, Вы написали скрипт для связи через dip с машиной cowslip и назвали его cowslip.dip. Теперь запустите
    dip и передайте ему имя скрипта как аргумент командной строки:

    # dip cowslip.dip
    DIP: Dialup IP Protocol Driver version 3.3.7 (12/13/93) Written by Fred N. van Kempen, MicroWalt Corporation. connected to cowslip.moo.com with addr 192.168.5.74 #
    Простой скрипт
    Допустим, Вы написали скрипт для связи через dip с машиной cowslip и назвали его cowslip.dip. Теперь запустите
    dip и передайте ему имя скрипта как аргумент командной строки:

    # dip cowslip.dip
    DIP: Dialup IP Protocol Driver version 3.3.7 (12/13/93) Written by Fred N. van Kempen, MicroWalt Corporation. connected to cowslip.moo.com with addr 192.168.5.74 #



    Сам скрипт показан в примере 7-1 .


    Проверка конфигурации Firewall


    Более быстрый и простой метод доступен в реализации Linux firewall. Он позволяет Вам вручную генерировать тесты и выполнять их через firewall точно так, как если бы Вы проверяли их с фактическими пакетами. Все варианты поддержки firewall ядром Linux (ipfwadm, ipchains и iptables) обеспечивают поддержку для этого стиля тестирования. Реализация включает использование соответствующей команды check.
    Общая процедура теста следующая:

    Выберите тип firewall для использования: ipfwadm, ipchains или iptables.

  • Разработайте ряд тестов, которые определят, работает ли ваш firewall так, как нужно. Для этих тестов Вы можете использовать любой источник или адрес отправителя, так что выберите комбинации адресов, которые должны быть приняты и другие, которые должны быть отвергнуты. Если Вы принимаете или отвергаете только некоторые диапазоны адресов, хорошей идеей будет проверить адреса с обеих сторон границы диапазона: по одному внутри границы и снаружи. Это будет гарантировать, что Вы имеете правильные границы, потому что иногда просто определить неправильную маску подсети в конфигурации. Если Вы фильтруете в соответствии с протоколом и номером порта, тесты должны также проверить все важные комбинации этих параметров. Например, если Вы предполагаете принимать только TCP-пакеты, проверьте, что UDP-пакеты отклоняются.

  • Разработайте правила для ipfwadm, ipchains или iptables, чтобы выполнить каждый тест. Вероятно, стоит записать все правила в скрипт, так что Вы можете проверять и перепроверять все без проблем по мере исправления ошибок или изменений проекта. Тесты используют почти тот же самый синтаксис, поскольку определяют правила, но в качестве параметров берут немного другие значения. Например, исходный параметр адреса в спецификации правила определяет исходный адрес, с которого должен придти пакет, который будет соответствовать этому правилу. Исходный параметр адреса в синтаксисе теста, напротив определяет исходный адрес тестового пакета, который будет сгенерирован. Для ipfwadm Вы должны использовать опцию -c, чтобы определить, что эта команда является тестом, в то время как для ipchains и iptables Вы должны использовать опцию -C. Во всех случаях Вы должны всегда определять исходный адрес, адрес получателя, протокол и интерфейс, которые нужно использовать для теста. Другие параметры, типа номера порта или битов TOS, являются факультативными.





  • Выполните каждую команду теста и обратите внимание на вывод. Вывод каждого теста будет одним словом, указывающим конечного адресата пакета после его прохождения через firewall. Для ipchains и iptables определенные пользователем цепочки будут проверены в дополнение к встроенным.



  • Сравните вывод каждого теста с желательным результатом. Если имеются расхождения, Вы будете должны анализировать набор правил чтобы определить, где вы сделали ошибку. Если Вы записали команды теста в файл скрипта, Вы сможете легко повторно выполнить тест после исправления ошибок в конфигурации firewall. Это гарантирует, что активная конфигурация, которую Вы проверяете фактически, отражает набор команд в скрипте конфигурации.

    А теперь практика! Напишем тест правил для ipchains. Наша локальная сеть в примере имеет адрес 172.16.1.0 с маской сети 255.255.255.0. Мы разрешаем внешние TCP-соединения с нашими web-серверами. Ничего больше не должно работать напрямую. Начнем с передачи, которая точно должна работать (из нашей локальной сети):

    # ipchains -C forward -p tcp -s 172.16.1.0 1025 -d 44.136.8.2 80 -i eth0 accepted

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

    Теперь попробуйте другой тест, на сей раз с исходным адресом, который не принадлежит нашей сети. Этот должен быть отклонен:
    # ipchains -C forward -p tcp -s 172.16.2.0 1025 -d 44.136.8.2 80 -i eth0 denied

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

    # ipchains -C forward -p udp -s 172.16.1.0 1025 -d 44.136.8.2 80 -i eth0 denied # ipchains -C forward -p icmp -s 172.16.1.0 1025 -d 44.136.8.2 80 -i eth0 denied

    Попробуйте другой порт адресата, снова ожидая, что этот пакет должен быть отклонен:

    # ipchains -C forward -p tcp -s 172.16.1.0 1025 -d 44.136.8.2 23 -i eth0 denied

    Конечно, полная проверка дело трудное и долгое, порой столь же трудное, как и разработка правильной конфигурации firewall, но зато защита будет действительно надежной!


    Проверка настроек сервера имен


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

    $ nslookup hostname
    Проверка настроек сервера имен
    Программа nslookup отличный инструмент для проверки работы сервера имен. Она может использоваться в интерактивном режиме с приглашением или как одиночная команда с непосредственным выводом. В последнем случае Вы просто вызываете ее как:

    $ nslookup hostname



    Программа nslookup делает запрос сервера имен, определенного в файле resolv.conf для hostname. Если этих серверов много, nslookup выбирает один случайным образом.
    Интерактивный режим является намного более удобным. Помимо поиска машин Вы можете сделать запрос для любого типа записи DNS и передачи всей зональной информации для домена.
    При вызове без параметров nslookup отображает имя используемого сервера и входит в интерактивный режим. На приглашение > Вы можете указать любое имя домена, о котором хотите сделать запрос. По умолчанию посылается запрос для записей класса A, содержащих IP-адрес, связанный с именем домена.
    Вы можете искать типы записи:

    > set type=type
    Здесь type является одним из описанных имен записи ресурса или ANY.
    Пример сеанса работы с nslookup:

    $ nslookup
    Default Server: tao.linux.org.au Address: 203.41.101.121
    > metalab.unc.edu
    Server: tao.linux.org.au Address: 203.41.101.121
    Name: metalab.unc.edu Address: 152.2.254.81
    >
    Сначала отображаются данные о сервере DNS, затем результат запроса.
    Если Вы пробуете сделать запрос для имени, которое не имеет никакого адреса IP, связанного с ним, но другие записи для него были найдены в базе данных DNS, nslookup выдаст сообщение об ошибке No type A records found. Вы можете заставить программу сделать запрос для записей, отличных от A, командой set type. Для получения SOA-записей из unc.edu введите:

    > unc.edu
    Server: tao.linux.org.au Address: 203.41.101.121
    *** No address (A) records available for unc.edu > set type=SOA
    > unc.edu
    Server: tao.linux.org.au Address: 203.41.101.121
    unc.edu origin = ns.unc.edu mail addr = host-reg.ns.unc.edu serial = 1998111011 refresh = 14400 (4H) retry = 3600 (1H) expire = 1209600 (2W) minimum ttl = 86400 (1D) unc.edu name server = ns2.unc.edu unc.edu name server = ncnoc.ncren.net unc.edu name server = ns.unc.edu ns2.unc.edu internet address = 152.2.253.100 ncnoc.ncren.net internet address = 192.101.21.1 ncnoc.ncren.net internet address = 128.109.193.1 ns.unc.edu internet address = 152.2.21.1
    <



    /p>

    Аналогично Вы можете сделать запрос для записей MX:
    > set type=MX

    > unc.edu

    Server: tao.linux.org.au Address: 203.41.101.121

    unc.edu preference = 0, mail exchanger = conga.oit.unc.edu unc.edu preference = 10, mail exchanger = imsety.oit.unc.edu unc.edu name server = ns.unc.edu unc.edu name server = ns2.unc.edu unc.edu name server = ncnoc.ncren.net conga.oit.unc.edu internet address = 152.2.22.21 imsety.oit.unc.edu internet address = 152.2.21.99 ns.unc.edu internet address = 152.2.21.1 ns2.unc.edu internet address = 152.2.253.100 ncnoc.ncren.net internet address = 192.101.21.1 ncnoc.ncren.net internet address = 128.109.193.1

    Используйте тип ANY, чтобы получить все записи ресурса, связанные с данным именем.

    Практически программа nslookup помимо отладки позволяет получать текущий список корневых серверов имен. Вы можете получать этот список запросом всех записей NS, связанных с корневым доменом:
    > set type=NS

    > .

    Server: tao.linux.org.au Address: 203.41.101.121

    Non-authoritative answer: (root) name server = A.ROOT-SERVERS.NET (root) name server = H.ROOT-SERVERS.NET (root) name server = B.ROOT-SERVERS.NET (root) name server = C.ROOT-SERVERS.NET (root) name server = D.ROOT-SERVERS.NET (root) name server = E.ROOT-SERVERS.NET (root) name server = I.ROOT-SERVERS.NET (root) name server = F.ROOT-SERVERS.NET (root) name server = G.ROOT-SERVERS.NET (root) name server = J.ROOT-SERVERS.NET (root) name server = K.ROOT-SERVERS.NET (root) name server = L.ROOT-SERVERS.NET (root) name server = M.ROOT-SERVERS.NET

    Authoritative answers can be found from: A.ROOT-SERVERS.NET internet address = 198.41.0.4 H.ROOT-SERVERS.NET internet address = 128.63.2.53 B.ROOT-SERVERS.NET internet address = 128.9.0.107 C.ROOT-SERVERS.NET internet address = 192.33.4.12 D.ROOT-SERVERS.NET internet address = 128.8.10.90 E.ROOT-SERVERS.NET internet address = 192.203.230.10 I.ROOT-SERVERS.NET internet address = 192.36.148.17 F.ROOT-SERVERS.NET internet address = 192.5.5.241 G.ROOT-SERVERS.NET internet address = 192.112.36.4 J.ROOT-SERVERS.NET internet address = 198.41.0.10 K.ROOT-SERVERS.NET internet address = 193.0.14.129 L.ROOT-SERVERS.NET internet address = 198.32.64.12 M.ROOT-SERVERS.NET internet address = 202.12.27.33

    Для просмотра списка всех команд введите help в nslookup.


    Расширения (Extensions)


    Ранее мы рассматривали, что iptables расширяется с помощью модулей. Имеется стандарт расширений, который обеспечивает некоторые из свойств ipchains. Чтобы использовать расширение, Вы должны определить имя через параметр -m name в iptables. Следующий список показывает опции -m и -p, которые устанавливают расширения контекста.

    Расширения (Extensions)
    Ранее мы рассматривали, что iptables расширяется с помощью модулей. Имеется стандарт расширений, который обеспечивает некоторые из свойств ipchains. Чтобы использовать расширение, Вы должны определить имя через параметр -m name в iptables. Следующий список показывает опции -m и -p, которые устанавливают расширения контекста.




    Рассылка сообщений пользователям NetWare


    NetWare поддерживает механизм, чтобы послать сообщения всем работающим в данный момент пользователям. Команда nsend
    осуществляет это свойство в Linux. Вы должны войти на сервер, чтобы послать сообщения, так что вы должны указать имя сервера и детали входа в командной строке вместе с адресатом и сообщением:

    Рассылка сообщений пользователям NetWare
    NetWare поддерживает механизм, чтобы послать сообщения всем работающим в данный момент пользователям. Команда nsend
    осуществляет это свойство в Linux. Вы должны войти на сервер, чтобы послать сообщения, так что вы должны указать имя сервера и детали входа в командной строке вместе с адресатом и сообщением:



    # nsend -S vbrew_f1 -U gary -P j0yj0y supervisor “Join me for a lager before we do the print queues!”
    Здесь пользователь gary посылает оповещение человеку, использующему логин supervisor на сервере ALES_F1. По умолчанию используются ваши параметры входа в систему и имя сервера.


    Абоненты Internet твердо придерживаются стандарта


    Абоненты Internet твердо придерживаются стандарта RFC-822, который требует записи user@host.domain, где host.domain задает полное доменное имя машины назначения. В середине знак @. Поскольку эта запись не включает маршрут до машины адресата, но дает взамен уникальное hostname (имя машины), она называется абсолютным адресом.

    RFC-822

    Абоненты Internet твердо придерживаются стандарта RFC-822, который требует записи user@host.domain, где host.domain задает полное доменное имя машины назначения. В середине знак @. Поскольку эта запись не включает маршрут до машины адресата, но дает взамен уникальное hostname (имя машины), она называется абсолютным адресом.

    Вы увидете, что в Internet использование RFC-822 распространяется не только на почту, а также проникает в другие услуги, например новости. Мы обсудим как RFC-822 используется для новостей в главе 20.


    Send, wait и sleep


    Эти команды выполняют простые встроенные скрипты в dip . send выводит свои аргументы в последовательную линию. Он не поддерживает переменные, но понимает все C-подобные символы со слэшем, типа \n для новой строки и \b для стирания предыдущего символа. Знак тильды (~) используется как сокращение для возврата каретки с переводом строки.

    send, wait и sleep
    Эти команды выполняют простые встроенные скрипты в dip . send выводит свои аргументы в последовательную линию. Он не поддерживает переменные, но понимает все C-подобные символы со слэшем, типа \n для новой строки и \b для стирания предыдущего символа. Знак тильды (~) используется как сокращение для возврата каретки с переводом строки.


    Команда wait принимает слово в качестве аргумента и читает весь вход с последовательной линии до его появления. Слово не может содержать пробелов. Вы можете дать wait ограничение по времени как второй аргумент. Если ожидаемое слово не будет получено в течении заданного времени, команда завершится со значением $errlvl равным 1.
    Команда sleep ожидает заданное время. Интервал задается в секундах.


    Sendsys, version и senduuname


    В заключение, имеются три сообщения, которые могут использоваться, чтобы выяснить топологию сети. Это sendsys, version и senduuname . Они заставляют C-News возвращать отправителю файл sys, версию программного обеспечения и вывод uuname, соответственно. C-News очень лаконичен относительно сообщения version; он возвращает просто C.
    sendsys, version и senduuname
    В заключение, имеются три сообщения, которые могут использоваться, чтобы выяснить топологию сети. Это sendsys, version и senduuname . Они заставляют C-News возвращать отправителю файл sys, версию программного обеспечения и вывод uuname, соответственно. C-News очень лаконичен относительно сообщения version; он возвращает просто C.


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


    Сетевые интерфейсы Чтобы скрыть


    Для каждого переферийного устройства, которое вы хотите использовать, в ядре должен быть представлен соответствующий интерфейс. Например, Ethernet-интерфейсы в Linux названы eth0 и eth1, интерфейсы PPP (обсуждаются в главе 8) ppp0 и ppp1, а FDDI-интерфейсы fddi0 и fddi1. Эти названия интерфейса используются при конфигурировании, когда вы хотите определить ядру специфическое физическое устройство. Они не имеют никакого назначения кроме этого.
    Чтобы работать в сети TCP/IP, интерфейсу должен быть назначен IP-адрес, который служит как идентификатор при общении с остальным миром. Этот адрес различен в зависимости от названия интерфейса: если вы сравниваете интерфейс с дверью, тогда адрес подобен пластине с именем, прикрепленной на ней.
    Конечно, имеются и другие параметры устройства которые необходимо отрегулировать. Один из них, максимальный размер пакета, который может быть обработан данной частью аппаратуры, также называемый
    Maximum Transfer Unit (MTU). Другие параметры будут представлены позже.


    Сетевые опции в ядре Linux 2.2.0 и выше


    Linux 2.2.0 отмечена серьезными изменениями в сетевой части ядра. Появилось много новых опций, а также поддержка протокола IPX. Большая часть этих опций нужна только в особых конфигурациях, так что я их не описываю. Подробно с ними можно ознакомиться в Networking HOWTO. Я перечислю наиболее часто используемые опции:

    Сетевые опции в ядре Linux 2.2.0 и выше
    Linux 2.2.0 отмечена серьезными изменениями в сетевой части ядра. Появилось много новых опций, а также поддержка протокола IPX. Большая часть этих опций нужна только в особых конфигурациях, так что я их не описываю. Подробно с ними можно ознакомиться в Networking HOWTO. Я перечислю наиболее часто используемые опции:


    Basics
    Нужна для работы с протколом TCP/IP, если ответите n, лишитесь этого протокола, но протокол IPX останется доступен:

    Networking options ---> [*] TCP/IP networking
    Gateways
    Если машина используется как шлюз между сетями или между LAN и SLIP-связью (или в других подобных ситуациях), включите эту опцию. А вот если Вы используете свою машину как firewall, выключите ее! Firewall называется машина, которая связана с двумя сетями, но передает информацию между ними по сложному алгоритму. Эта система используется, чтобы внутренние машины могли выйти в Internet, но внешние машины не могли попасть во внутреннюю сеть (подробно firewall рассматриваются в главе 9):

    [*] IP: forwarding/gatewaying
    Virtual hosting
    Эта опция позволяет иметь более одного сетевого адреса на интерфейс, что полезно при создании виртуальных сайтов, то есть когда одна машина представлена в сети под разными именами. Псевдонимы в IP-адресах будут рассмотрены чуть ниже:

    [*] Network aliasing IP: aliasing support
    Accounting
    Эта опция позволяет собирать информацию о IP-трафике этой машины (вопрос детально обсуждается в главе 10):

    [*] IP: accounting
    PC hug
    Эта опция дает возможность обойти несовместимость с некоторыми версиями PC/TCP и коммерческими версиями TCP/IP для DOS-машин. При включении этой опции работа с нормальными Unix-машинами будет возможна, хотя скорость несколько упадет:



    --- ( it is safe to leave these untouched) [*] IP: PC/TCP compatibility mode

    Diskless booting

    Включает Reverse Address Resolution Protocol

    (RARP). RARP используется бездисковыми терминалами и X-ьерминалами для запроса своего IP-адреса при загрузке. Если у Вас есть такие клиенты, RARP Вам понадобится. Маленькая программа rarp, которая входит в стандартный сетевой пакет, используется для управления записями в таблице RARP ядра:

    IP: Reverse ARP

    MTU

    При передаче данных по TCP, ядро разделяет поток данных на блоки для передачи по IP. Размер блока называется Maximum Transmission Unit или MTU. Для машин в сети Ethernet MTU обычно большой и составляет максимальную длину пакетов Ethernet (1500 байт). Но при работе с модемом стоит подобрать нужное значение. Ядро может само определить минимальный размер пакетов и соответственно настроить TCP. Это можно отменить ответом y на этот вопрос.

    Если нужно маленькие пакеты для отдельных систем, например, при работе с протоколом SLIP, используйте опцию mss команды route, которая обсуждается в следующей главе:

    [ ] IP: Disable Path MTU Discovery (normally enabled)

    Security feature

    Протокол IP поддерживает сервис Source Routing. Он позволяет Вам определять маршрут по которому пакет должен проследовать, программируя маршрут в пакете непосредственно. Это было полезно до появления протоколов RIP и OSPF. Но сегодня это рассматривается как угроза безопасности системы, потому что эта функция может обеспечивать нападающих путем обхода некоторых типов защиты firewall, за счет обхода таблицы маршрутизатора. При фильтрации пакетов ничего страшного в ней нет:

    [*] IP: Drop source routed frames

    Novell support

    Включает поддержку IPX, транспортного протокола Novell Networking. Linux будет функционировать как IPX маршрутизатор. Эта поддержка полезна в средах, где Вы имеете файловый сервер Novell. Файловая система NCP также требует поддержки IPX. Она понадобится, если нужно монтировать по сети файловые системы фирмы Novell (я подробно рассмотрю IPX и файловую систему NCP в главе 15):



    The IPX protocol

    Amateur radio

    Эта опция включает поддержку Linux протоколов Amateur Radio: AX.25, NetRom и Rose (они подробно описаны в AX25 HOWTO):

    Amateur Radio AX.25 Level 2 Amateur Radio NET/ROM Amateur Radio X.25 PLP (Rose)

    Linux поддерживает еще один тип драйверов: тупой драйвер. Следующий вопрос появляется в начале раздела драйверов устройств:

    Dummy net driver support

    Такой драйвер маскирует кольцевой интерфейс и очень полезен на отдельной или PPP/SLIP машине. На машинах только с интерфейсом PPP/SLIP он будет обеспечивать передачу трафика IP. Подробно он рассмотрен в разделе Dummy Interface

    в главе 5. Обратите внимание, что сегодня Вы можете достичь того же самого результата, используя IP псевдоним и конфигурируя свой адрес IP как псевдоним на кольцевом интерфейсе.


    Сетевые устройства с поддержкой IPX


    Протокол IPX считает, что любая совокупность компьютеров, которые могут передать пакеты друг другу без маршрутизации, принадлежит одной и той же IPX-сети. Все компьютеры, принадлежащие к одиночному сегменту сети Ethernet будут принадлежать к одной IPX-сети. Аналогично, оба компьютера, обеспечивающие PPP-связь, должны принадлежать IPX-сети, которая непосредственно является последовательной связью. В среде Ethernet имеется ряд различных типов пакетов, которые могут использоваться, чтобы нести пакеты IPX. Типы пакетов представляют различные протоколы сети Ethernet и описывают отличающиеся пути переноса протоколов. Наиболее общие типы пакетов, с которыми вы столкнетесь: 802.2 и ethernet_II.

    Сетевые устройства с поддержкой IPX
    Протокол IPX считает, что любая совокупность компьютеров, которые могут передать пакеты друг другу без маршрутизации, принадлежит одной и той же IPX-сети. Все компьютеры, принадлежащие к одиночному сегменту сети Ethernet будут принадлежать к одной IPX-сети. Аналогично, оба компьютера, обеспечивающие PPP-связь, должны принадлежать IPX-сети, которая непосредственно является последовательной связью. В среде Ethernet имеется ряд различных типов пакетов, которые могут использоваться, чтобы нести пакеты IPX. Типы пакетов представляют различные протоколы сети Ethernet и описывают отличающиеся пути переноса протоколов. Наиболее общие типы пакетов, с которыми вы столкнетесь: 802.2 и ethernet_II.


    Сетевые устройства Linux, которые в настоящее время поддерживают протокол IPX: Ethernet и PPP. Ethernet или PPP интерфейс должен быть активен до настройки для использования IPX. Обычно, Вы конфигурируете устройство Ethernet для IP и IPX, так что устройство уже существует, но если ваша сеть только для IPX, вы должны использовать ifconfig, чтобы изменить состояние устройства на следующее:

    # ifconfig eth0 up


    Синтаксис команды ipchains


    Синтаксис команды ipchains прост. В общем виде он выглядит так:

    ipchains command rule-specification options

    Синтаксис команды ipchains
    Синтаксис команды ipchains прост. В общем виде он выглядит так:

    ipchains command rule-specification options





    Скрипты поддержки ipchains


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

    Скрипты поддержки ipchains
    Пакет ipchains имеет три скрипта поддержки. Первый из них мы уже кратко обсудили, другие два обеспечивает простые и удобные средства сохранения и восстановления Вашей конфигурации firewall.


    Скрипт ipfwadm-wrapper эмулирует синтаксис командной строки команды ipfwadm, но на самом деле вызывает команду ipchains, чтобы формировать правила firewall. Это удобный способ переноса Вашей существующей конфигурации firewall на новое ядро или изучения синтаксиса ipchains . Скрипт ipfwadm-wrapper ведет себя не так, как команда ipfwadm в двух деталях. Во-первых, поскольку ipchains не поддерживает спецификацию интерфейса по адресу, ipfwadm-wrapper принимает параметр -V, но пытается преобразовать его в ipchains аналог -W поиском имени интерфейса с заданным адресом. Скрипт
    ipfwadm-wrapper будет всегда выдавать предупреждение, когда Вы используете опцию -V. Во-вторых, фрагменты правила учета не транслируются правильно.
    Скрипты ipchains-save и
    ipchains-restore делают формирование и изменение конфигурации firewall много проще. Команда ipchains-save читает текущую конфигурацию firewall и пишет упрощенную форму в стандартный вывод. Команда ipchains-restore читает данные в выходном формате команды ipchains-save и задает конфигурацию IP firewall в соответствии с этими правилами. Преимущество использования этих скриптов в том, что можно динамически менять конфигурацию, а потом ее сохранить в файле.
    Чтобы использовать скрипты, введите:


    ipchains-save >/var/state/ipchains/firewall.state
    для сохранения текущих настроек firewall. Во время загрузки можно их восстановить командой:


    ipchains-restore
    Скрипт ipchains-restore проверяет существование всех определяемых пользователем цепочек. Если задан параметр -f, он автоматически удалит все правила из пользовательских наборов перед настройкой. По умолчанию, Вам будет задан вопрос, очищать ли эту цепочку.


    Сообщение cancel


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




    Сообщение checkgroups


    Сообщения checkgroups посылаются администраторами новостей, чтобы для всех абонентов внутри сети синхронизировать их файлы active с фактическим положением дел в Usenet. Например, коммерческие поставщики услуг Internet могли бы выпускать такое сообщение к своим абонентам. Один раз в месяц "официальное" сообщение checkgroups для главных иерархий отсылается в comp.announce.newgroups их модератором. Однако оно зарегистрировано как обычная статья, а не как управляющее сообщение. Чтобы выполнить операцию checkgroups, сохраните эту статью в файле, скажем, /tmp/check, удалите все до начала сообщения управления и передайте его скрипту checkgroups , используя следующую команду:

    # su news -c "/usr/lib/news/ctl/checkgroups" < /tmp/check

    Сообщение checkgroups
    Сообщения checkgroups посылаются администраторами новостей, чтобы для всех абонентов внутри сети синхронизировать их файлы active с фактическим положением дел в Usenet. Например, коммерческие поставщики услуг Internet могли бы выпускать такое сообщение к своим абонентам. Один раз в месяц "официальное" сообщение checkgroups для главных иерархий отсылается в comp.announce.newgroups их модератором. Однако оно зарегистрировано как обычная статья, а не как управляющее сообщение. Чтобы выполнить операцию checkgroups, сохраните эту статью в файле, скажем, /tmp/check, удалите все до начала сообщения управления и передайте его скрипту checkgroups , используя следующую команду:

    # su news -c "/usr/lib/news/ctl/checkgroups" < /tmp/check



    Это модифицирует Ваш файл newsgroups, добавляя группы, перечисленные в localgroups. Старый файл newsgroups будет перемещаться в newsgroups.bac. Обратите внимание, что регистрация сообщения локально редко будет работать, потому что inews отказывается принимать это как статью.
    Если C-News находит несоответствия между списком checkgroups и файлом active, он выдаст список команд, которые модернизируют Ваш сервер и сообщат это администратору новостей. Вывод обычно походит на это:

    From news Sun Jan 30 16:18:11 1994 Date: Sun, 30 Jan 94 16:18 MET From: news (News Subsystem) To: usenet Subject: Problems with your active file The following newsgroups are not valid and should be removed. alt.ascii-art bionet.molbio.gene-org comp.windows.x.intrisics de.answers You can do this by executing the commands: /usr/lib/news/maint/delgroup alt.ascii-art /usr/lib/news/maint/delgroup bionet.molbio.gene-org /usr/lib/news/maint/delgroup comp.windows.x.intrisics /usr/lib/news/maint/delgroup de.answers The following newsgroups were missing. comp.binaries.cbm comp.databases.rdb comp.os.geos comp.os.qnx comp.unix.user-friendly misc.legal.moderated news.newsites soc.culture.scientists talk.politics.crypto talk.politics.tibet
    <



    /p>

    Когда Вы получаете такое сообщение от вашей системы новостей, не отбрасывайте его вслепую. В зависимости от того, кто послал сообщение checkgroups, оно может испытывать недостаток нескольких групп или даже всех иерархий; так что Вы должны быть осторожны относительно удаления любых групп. Если Вы находите группы, перечисленные как отсутствующие, и Вы хотите иметь их на сервере, Вы должны добавить их, используя скрипт addgroup. Сохраните список отсутствующих групп в файле и передайте его следующему небольшому скрипту:

    #!/bin/sh # WHOIAM=`whoami` if [ "$WHOIAM" != "news" ] then echo "You must run $0 as user 'news'" >&2 exit 1 fi # cd /usr/lib/news while read group; do if grep -si "^$group[[:space:]].*moderated" newsgroup; then mod=m else mod=y fi /usr/lib/news/maint/addgroup $group $mod done


    Сообщение uucico "Wrong Time to Call"


    Это может значить, что в файле sys Вы не определили команду time, которая задает, когда удаленная система может вызываться, то есть фактически запретили вход в текущее время. Если время обращения не задано, uucico
    считает, что система никогда не может вызываться.

    Сообщение uucico "Wrong Time to Call"
    Это может значить, что в файле sys Вы не определили команду time, которая задает, когда удаленная система может вызываться, то есть фактически запретили вход в текущее время. Если время обращения не задано, uucico
    считает, что система никогда не может вызываться.




    Сообщения Control Протокол новостей


    Большинство из них выполнит свое действие автоматически во время обработки статьи C-News, без уведомления newsmaster. По умолчанию только сообщения checkgroups будут вручены newsmaster, но Вы можете изменить это, редактируя скрипты.


    Списки рассылки


    Вместо файла псевдонимов списки адресатов могут также управляться средствами редиректора forwardfile. Списки хранятся в одном каталоге, например, /etc/exim/lists, и список рассылки nag-bugs будет описан файлом lists/nag-bugs. Он должен содержать разделенный запятыми или переводами строки список адресатов. Строки, начинающиеся с символа #, являются комментариями. Простой редиректор для такой обработки:

    lists: driver = forwardfile file = /etc/exim/lists/${local_part} no_check_local_user errors_to = ${local_part}-request
    При выполнении этого редиректора вместо опций file и errors_to будут подставлены соответствующие значения. Это называется расширением опций. Простейший вариант расширения заключается в подстановке соответствующих значений, что здесь и происходит. Подстрока ${local_part} будет заменена значением $local_part, которое является локальной частью адреса, который сейчас обрабатывается.

    Списки рассылки
    Вместо файла псевдонимов списки адресатов могут также управляться средствами редиректора forwardfile. Списки хранятся в одном каталоге, например, /etc/exim/lists, и список рассылки nag-bugs будет описан файлом lists/nag-bugs. Он должен содержать разделенный запятыми или переводами строки список адресатов. Строки, начинающиеся с символа #, являются комментариями. Простой редиректор для такой обработки:

    lists: driver = forwardfile file = /etc/exim/lists/${local_part} no_check_local_user errors_to = ${local_part}-request
    При выполнении этого редиректора вместо опций file и errors_to будут подставлены соответствующие значения. Это называется расширением опций. Простейший вариант расширения заключается в подстановке соответствующих значений, что здесь и происходит. Подстрока ${local_part} будет заменена значением $local_part, которое является локальной частью адреса, который сейчас обрабатывается.


    Для каждого списка рассылки должен быть пользователь (или псевдоним, или список рассылки) с именем listname-request
    . На него присылаются все сообщения об ошибках обработки списка или доставки почты.


    Список серверов


    Команда slist перечисляет все серверы файлов доступные для этого компьютера. Информация будет получена из самого близкого IPX-маршрутизатора. Эта команда была, вероятно, первоначально предназначена, чтобы позволить пользователям видеть, что серверы файлов доступны для монтирования. Но это стало полезным как сетевой инструмент диагностики, позволяя сетевым администраторам видеть, где информация SAP размножается:

    Список серверов
    Команда slist перечисляет все серверы файлов доступные для этого компьютера. Информация будет получена из самого близкого IPX-маршрутизатора. Эта команда была, вероятно, первоначально предназначена, чтобы позволить пользователям видеть, что серверы файлов доступны для монтирования. Но это стало полезным как сетевой инструмент диагностики, позволяя сетевым администраторам видеть, где информация SAP размножается:



    $ slist NPPWR-31-CD01 23A91330 000000000001 V242X-14-F02 A3062DB0 000000000001 QITG_284ELI05_F4 78A20430 000000000001 QRWMA-04-F16 B2030D6A 000000000001 VWPDE-02-F08 35540430 000000000001 NMCS_33PARK08_F2 248B0530 000000000001 NCCRD-00-CD01 21790430 000000000001 NWGNG-F07 53171D02 000000000001 QCON_7TOMLI04_F7 72760630 000000000001 W639W-F04 D1014D0E 000000000001 QCON_481GYM0G_F1 77690130 000000000001 VITG_SOE-MAIL_F4R 33200C30 000000000001
    slist не принимает параметры. В выводе будут: имя сервера файлов, IPX-адрес сети и адрес машины.


    Средства и задачи администрирования


    Если не установлено иное, эти команды расположены в /usr/lib/news/maint. Обратите внимание, что Вы должны стать пользователем news перед вызовом этих команд. При выполнении их от имени супер-пользователя файлы могут стать недоступными C-News.
    newsdaily
    Имя уже говорит, что это выполняется один раз в день. Это важная команда, которая помогает Вам хранить регистрационные файлы маленькими, сохраняя копии каждого из последних трех выполнявшихся. Она также пробует считывать любые аномалии, подобно несвежим пакетам во входящих и исходящих каталогах, регистрации в неизветных группах и т.д. Возникающие в результате сообщения об ошибках будут отправлены по почте newsmaster.
    newswatch
    Это команда, которая должна быть выполнена регулярно, чтобы искать аномалии в системе новостей, один раз в час или около этого. Она предназначена обнаруживать проблемы, которые будут непосредственно влиять на эффективность Вашей системы новостей и отправлять по почте отчет о проблемах newsmaster. Отмечаемые вещи включают несвежие файлы блокировки, которые не удалены, забытые входные пакеты и недостаток дискового пространства.
    addgroup
    Добавляет группу к Вашему серверу локально. Соответствующий вызов:

    addgroup groupname y|n|m|=realgroup
    Второй аргумент имеет то же самое значение, что и флаг в файле active: любой может посылать статью в группу (y), никто не может посылать статью (n), группа модерируемая (m), или что она является псевдонимом (alias) для другой группы (= realgroup). Вы можете также использовать addgroup, когда первые статьи в недавно созданной группе прибывают раньше, чем сообщение управления newgroup, которое предназначено, чтобы создать ее.
    delgroup
    Позволяет Вам удалять группу локально. Вызовите ее как:

    delgroup groupname
    Вы должны удалить статьи, которые остаются в каталоге spool. В качестве альтернативы, Вы могли бы оставить это обычному ходу событий (то есть, Expire).
    addmissing
    Добавляет отсутствующие статьи к файлу history . Выполните эту команду, когда имеются статьи, которые, кажется, зависают навсегда.
    newsboot
    Эта команда должна быть выполнена при начальной загрузке системы. Она удаляет любые файлы блокировки, оставленные, когда обработчики новостей уничтожались при закрытии системы, закрывает и выполняет любые пакеты, оставленные от NNTP-соединений, которые были завершены при закрытии системы.
    newsrunning
    Постоянно находится в /usr/lib/news/input и может использоваться, чтобы отключить распакетирование входящих новостей, например, в течение рабочего времени, дабы не перегружать систему. Вы можете выключить распакетирование вызовом:

    /usr/lib/news/input/newsrunning off
    Или включить, подставив on вместо off.


    Суперсервер inetd


    Таким образом, почти все версии Un*x запускают "суперсервер", который создает сокеты для ряда услуг и слушает их одновременно при использовании системного вызова select(2). Когда отдаленный хост запрашивает одну из услуг, суперсервер замечает это и порождает другой сервер, установленный для этого порта, а сам продолжает слушать соединения.
    Обычно используется суперсервер inetd, Internet Daemon. Он запускается при начальной загрузке системы и берет список услуг, к которым он обращается из файла запуска /etc/inetd.conf . В дополнение к вызываемым серверам там есть ряд тривиальных услуг, которые являются внутренними сервисами inetd. Они включают chargen, который просто генерирует ряд знаков и daytime, который возвращает время.
    Каждая запись в файле /etc/inetd.conf состоит из единственной строки, состоящей из следующих полей:

    service type protocol wait user server cmdline
    Значения полей:
    service Задает имя сервиса. Service name должно быть переведено в номер порта с помощью файла /etc/services . Этот файл будет описан в соответствующем разделе.
    type
    Определяет тип сокета: stream (для протоколов, ориентированных на соединение) или dgram (для датаграмных протоколов). TCP-сервисы должны всегда использовать stream, в то время как UDP-услуги должны всегда использовать dgram.
    protocol Задает транспортный протокол для этого сервиса. Это поле должно быть подходящим названием протокола, найденным в файле protocols.
    wait Эта опция применяется только на dgram. Это может быть wait или nowait. Если определен wait, то inetd
    выполняет одновременно только один сервер для порта. Иначе после запуска сервера он немедленно продолжит слушать порт. Это полезно для серверов, которые читают все входящие датаграммы и завершают работу. Большинство RPC-серверов имеет этот тип и должны определять wait . Противоположный тип, "многопоточные" серверы, могут быть запущены в нескольких копиях, но это редко используется. Эти серверы должны определять nowait. Сокеты stream должны всегда использовать nowait.



    user Это поле является идентификатором пользователя, от имени которого работает сервис. Часто это будет root, но некоторые сервисы могут применять различных пользователей. Это очень хорошая идея применения принципа наименьшего количества привилегий, который заявляет, что Вы не должны запускать команду от имени привилегированного пользователя, если программа не требует этого для функционирования. Для примера, NNTP (сервер новостей) будет запущен от имени news, а сервисы, вызывающие возможное нарушение защиты (tftp или finger), будут работать как nobody.

    server Задает полный путь к программе сервера, который будет выполнен. Внутренние сервисы помечаются ключевым словом internal.

    cmdline Командная строка, которую нужно выполнить на сервере. Она включает аргумент 0, который является именем команды. Обычно это не будет именем программы сервера, если программа ведет себя по-разному, когда вызывается с различными именами. Это поле пусто для внутренних сервисов.

    Пример файла inetd.conf показан в примере 12-1.

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


    Т¦¦++ L¦¦г+-¦ ¦Tг=+T ncpmount


    ++¦+¦+ L¦--+-г= ¦T¦LL¦¦ ¦+¦¦ /.nwclient:

    # NetWare login details for the Virtual Brewery and Winery # # Brewery Login ALES_F1/MATT staoic1 # # Winery Login REDS01/MATT staoic1
    Правильно выставим права доступа к нему:

    $ chmod 600 /.nwclient

    т¦¦++ L¦¦г+-¦ ¦Tг=+T ncpmount
    ++¦+¦+ L¦--+-г= ¦T¦LL¦¦ ¦+¦¦ /.nwclient:

    # NetWare login details for the Virtual Brewery and Winery # # Brewery Login ALES_F1/MATT staoic1 # # Winery Login REDS01/MATT staoic1
    Правильно выставим права доступа к нему:

    $ chmod 600 /.nwclient



    Смонтируем один том с сервера Winery с указанием прав доступа к каталогам и файлам:

    $ ncpmount -S REDS01 -V RESEARCH -f 0664 -d 0775 /usr/share/winery/data
    Эта команда в комбинации с файлом /.nwclient
    смонтирует том RESEARCH сервера REDS01 в каталог /usr/share/winery/data под логином NetWare MATT и паролем из файла /.nwclient. Права для смонтированных файлов 0664, а для каталогов 0775.


    Стандартные карты NIS и соответствующие им файлы


    Таблица 13-1. Стандартные карты NIS и соответствующие им файлы



    Файл Карта (карты)
    Описание
    hosts.byname, hosts.byaddr
    Соответствие IP-адресов именам машин
    networks.byname, networks.byaddr
    Соответствие IP-адресов именам сетей
    /etc/passwd
    passwd.byname, passwd.byuid
    Пароли пользователей и их логины
    /etc/group
    group.byname, group.bygid
    Идентификаторы групп (Group ID) и имена групп в системе
    /etc/services
    services.byname, services.bynumber
    Описание сервисов и их имена
    rpc.byname, rpc.bynumber
    Номера сервисов Sun RPC и их имена
    protocols.byname, protocols.bynumber
    Номера протоколов и их имена
    Почтовые псевдонимы с именами
    Вы можете найти поддержку иных файлов и карт в других NIS пакетах. Они обычно содержат информацию для прикладных программ, не обсуждаемых в этой книге, типа карты bootparams, которая используется сервером Sun bootparamd.
    Для некоторых карт обычно используют прозвища (nicknames), которые короче и, следовательно, их проще напечатать. Обратите внимание, что эти прозвища понятны только ypcat и ypmatch, двум инструментальным средствам для проверки Вашей конфигурации NIS. Чтобы получить полный список прозвищ, понятных этим инструментальным средствам, выполните следующую команду:
    /etc/hosts
    /etc/networks
    /etc/rpc
    /etc/protocols
    /usr/lib/aliases
    mail.aliases

    $ ypcat -x
    Use "passwd" for "passwd.byname" Use "group" for "group.byname" Use "networks" for "networks.byaddr" Use "hosts" for "hosts.byaddr" Use "protocols" for "protocols.bynumber" Use "services" for "services.byname" Use "aliases" for "mail.aliases" Use "ethers" for "ethers.byname"
    Сервер NIS традиционно назван ypserv. Для средней сети один сервер обычно достаточен, большие сети могут выполнить несколько серверов на различных машинах и в разных сегментах сети, чтобы уменьшить загрузку на серверы и маршрутизаторы. Эти серверы должны быть синхронизированы объявлением одного из них главным (master server), а остальных подчиненными (slave servers). Карты создаются только на главном. Оттуда они распределяются на все подчиненные.



    До сих пор мы очень неопределенно говорили относительно "сети". Имеется в виду особый термин в NIS: все хосты, разделяющие часть системных настроек по NIS: так называемый домен NIS (NIS domain). К сожалению, домены NIS не имеют абсолютно ничего общего с доменами, с которыми мы столкнулись в DNS. Во избежание неоднозначности мы будем всегда определять, какой тип домена имеется в виду.
    NIS-домены имеют административную функцию. Они обычно невидимы для пользователей, за исключением совместного использования паролей всеми машинами в домене. Следовательно, имя, данное NIS-домену, нужно только администраторам. Обычно любое имя несет определенную смысловую нагрузку в сети. Например, администратор Virtual Brewery может создать два домена NIS: один для Brewery, второй для сети Winery, с именами brewery и winery соответственно. Можно и просто использовать имя DNS-домена и для NIS.
    Чтобы устанавливать и отображать имя домена NIS Вашей машины, используйте команду domainname. Когда она вызывается без параметров, отображает текущее имя. Чтобы задать имя домена, надо задать его в качестве параметра. Введите от имени администратора:

    # domainname brewery
    NIS-домены определяют, к какому серверу NIS сделает запрос прикладная программа. Например, программа login на хосте в сети Winery должна опрашивать только NIS-сервер Winery (или одни из них, если там есть несколько) для получения информации о пароле пользователя, в то время как прикладная программа на машине в сети Brewery должна обращаться к серверу Brewery.
    Возникает вопрос: а как клиент найдет, к какому серверу обращаться? Самое простое решение сводится к файлу конфигурации с указанием в нем имени нужной машины. Такой подход пригоден в сетях с одним сервером, но если несколько, клиент не сможет динамически запрашивать разные серверы (понятно, из одного домена) в зависимости от их доступности. Следовательно, реализации NIS полагаются на специальный daemon по имени ypbind, чтобы обнаружить подходящий сервер NIS в своем домене. Перед выполнением любого NIS-запроса, прикладная программа сначала выясняет у ypbind, какой сервер использовать.
    ypbind исследует серверы, посылая широковещательные запросы в локальную IP-сеть. Первый ответивший сервер считается самым быстрым и используется во всех последующих запросах NIS. После того, как пройдет некоторый интервал, или если сервер становится недоступным, ypbind снова проводит поиск активных серверов.
    Динамическое связывание полезно только, когда сеть обеспечивает больше, чем один сервер NIS. Динамическое связывание также представляет проблему защиты: ypbind просто верит, кто бы не отвечал. Так что если вместо сервера NIS ответит хакер, его ответ будет воспринят без тени недоверия. Само собой разумеется, это становится особенно ненадежным, если Вы управляете базами данных паролей по NIS. Чтобы принимать меры против этого, Linux ypbind обеспечивает два способа работы: либо обычный опрос локальной сети в поисках сервера NIS, либо указание имен машин с серверами NIS в своем файле настроек.

    Связи протоколов XNS, Novell и TCP/IP


    Таблица 15-1. Связи протоколов XNS, Novell и TCP/IP



    XNS Novell
    TCP/IP
    Функция


    Параметры команды ncpmount


    Таблица 15-2. Параметры команды ncpmount


    IDP
    IPX UDP/IP Связь, ненадежная передача
    SPP
    SPX TCP Надежная передача
    Нет
    NCP NFS Файловый сервис
    Нет
    RIP RIP Обмен информацией маршрутизации
    Нет
    SAP Нет, а жаль Сервисный обмен информации доступности

    Параметр Описание
    -S server
    Имя сервера для монтирования.
    -U
    user_name
    Логин пользователя NetWare для регистрации на сервере.
    -P
    password
    Пароль для логина NetWare.
    Вход без пароля (открытый ресурс).
    Отключает автоматическое преобразование паролей к верхнему регистру.
    client_name
    Позволяет Вам определять, кто владеет подключением к серверу файлов. Это полезно для печати из NetWare.
    Идентификатор пользователя Linux, который должен использоваться в качестве владельца файлов в смонтированном каталоге. Если не задан, используется идентификатор пользователя, смонтировавшего каталог.
    Аналогично -u, но для групп.
    file_mode
    Указывает режим доступа к файлам (permissions), используемый для доступа к файлам в смонтированном томе. Значение должно быть восьмеричным числом, например, 0664. Реальные права доступа вычисляются из заданного значения и Ваших прав в системе NetWare. Значение по умолчанию берется из текущего значения umask.
    dir_mode
    Аналогично -f, но для каталогов.
    volume
    Позволяет Вам определять имя тома для монтирования, вместо монтирования всех томов. Эта опция необходима, если Вы желаете реэкспортировать том NetWare, используя NFS.
    time_out
    Позволяет Вам определять время, которо клиент NCPFS будет ждать ответ с сервера. Значение по умолчанию 60mS, время ожидания определяется в сотых долях секунды. Если Вы испытываете любые проблемы стабильности NCP, попробуйте увеличить это значение.
    retry_count
    Клиент NCP пытается посылать пакеты на сервер несколько раз, прежде чем придет к выводу, что подключение не работает. Эта опция позволяет задать, сколько раз будут выполняться такие повторы. Значение по умолчанию 5.


    Утилиты Linux для работы с Bindery


    Таблица 15-3. Утилиты Linux для работы с Bindery


    -n
    -C
    -c
    -u uid
    -g gid
    -f
    -d
    -V
    -t
    -r

    Имя команды Описание
    nwfstime
    Отображает или меняет дату и время на сервере NetWare
    Список пользователей, в данный момент работающих с сервером NetWare
    Данные о томах NetWare
    Создать объект NetWare bindery
    Перечислить объекты NetWare bindery
    Перечислить свойства объекта NetWare bindery
    Удалить объект NetWare bindery
    Создать свойство NetWare bindery
    Вывести содержимое свойства NetWare bindery
    Задать содержимое свойства NetWare bindery
    Удалить свойство NetWare bindery


    Опции команды nprint


    Таблица 15-4. Опции команды nprint


    nwuserlist
    nwvolinfo
    nwbocreate
    nwbols
    nwboprops
    nwborm
    nwbpcreate
    nwbpvalues
    nwbpadd
    nwbprm

    Опция Описание
    Имя сервера печати. Удобно иметь соответствующую запись в файле /.nwclient. Она обязательна. queue_name
    Очередь печати, в которую надо послать задание по выводу на печать. Эта опция обязательна.
    job_description
    Текст, который появится в консоли печати при показе списка поставленных в очередь работ.
    lines
    Число строк на страницу. По умолчанию 66.
    columns
    Число столбцов на страницу. По умолчанию 80.
    copies
    Число копий работы, которая будет напечатана. Значение по умолчанию 1.
    Простой пример использования nprint:
    -S server_name
    -q
    -d
    -l
    -r
    -c

    $ nprint -S REDS01 -q PSLASER -c 2 /home/matt/ethylene.ps
    Эта команда напечатает две копии файла /home/matt/ethylene.ps на принтере PSLASER на сервере REDS01, используя имя пользователя и пароль из файла /.nwclient.


    Диапазоны IP-адресов, зарезервированных для частных сетей


    Таблица 2-1. Диапазоны IP-адресов, зарезервированных для частных сетей



    Класс Сети


    Параметры командной строки для setserial


    Таблица 4-1. Параметры командной строки для setserial


    A
    от 10.0.0.0 до 10.255.255.255
    B
    от 172.16.0.0 до 172.31.0.0
    C
    от 192.168.0.0 до 192.168.255.0

    Параметр Описание
    port_number
    Определяет адрес порта ввода-вывода последовательного устройства. Должен быть определен в шестнадцатеричной записи, например, 0x2f8.
    num
    Определяет прерывание, используемое последовательным устройством.
    uart_type
    Определяет тип UART последовательного устройства. Общие значения 16450, 16550 и т.д. Установка этого значение в none не отключит это последовательное устройство.
    Задание этого параметра инструктирует последовательный драйвер ядра, что этот порт является одним из портов платы AST Fourport.
    Предписывает UART использовать быстродействие 57.6 kbps, когда процесс запрашивает 38.4 kbps.
    Предписывает UART использовать быстродействие 115 kbps, когда процесс запрашивает 38.4 kbps.
    Предписывает UART использовать заданное по умолчанию быстродействие 38.4 kbps, когда запрашивается. Этот параметр используется, чтобы отменить эффект spd_hi
    или spd_vhi на определенном последовательном устройстве.
    Этот параметр заставит ядро сделать попытку автоматически определить IRQ определенного устройства. Эта попытка не может быть полностью надежной, так что, вероятно, лучше думать об этом как о просьбе к ядру предположить IRQ. Если Вы знаете IRQ этого устройства, Вы должны определить его, используя параметр irq.
    Это параметр должен быть определен вместе с параметром port. Когда этот параметр задан, setserial инструктирует ядро сделать попытку автоматически определить тип UART на порте с заданным адресом. Если параметр auto_irq также задан, ядро попытается автоматически определить IRQ.
    Отменяет автоопределение типа UART. Полезен, если ядро определяет его неправильно.
    Типичный и простой файл rc для настройки Ваших последовательных портов при начальной загрузке показан в примере 4-1. Большинство дистрибутивов Linux включают более сложные файлы.


    Параметры stty для настройки последовательных устройств


    Таблица 4-2. Параметры stty для настройки последовательных устройств


    port
    irq
    uart
    fourport
    spd_hi
    spd_vhi
    spd_normal
    auto_irq
    autoconfig
    skip_test

    Параметр Назначение
    Устанавливает быстродействие линии в N бит в секунду.
    Включить/выключить аппаратное подтверждение связи.
    Включить/выключить XON/XOFF управление потоком.
    Включить/выключить сигналы управления модема типа DTR/DTS и DCD. Это необходимо, если Вы используете последовательный кабель "three wire", поскольку он не обеспечивает эти сигналы.
    Установить число бит данных соответственно в 5, 6, 7 или 8.
    Включить проверку на нечетность. Отключение этого параметра включает проверку на четность.
    Включить проверку четности. Когда этот параметр выключен, контроль четности или нечетности не используется.
    Включить использование двух стоп-бит на символ. Когда этот параметр выключен, используется один стоп-бит на символ.
    Включить/выключить повторение полученных символов обратно отправителю.
    Следующий пример объединяет некоторые из этих параметров и устанавливает устройство ttyS0 на 19,200 bps, 8 бит данных, без контроля четности, но с аппаратным подтверждением связи с заблокированным ECHO-отбражением:
    N
    crtsdts
    ixon
    clocal
    cs5 cs6 cs7 cs8
    parodd
    parenb
    cstopb
    echo

    $ stty 19200 cs8 -parenb crtscts -echo -F /dev/ttyS0


    Таблица маршрутов (Routing Table)


    Теперь сосредоточим наше внимание на том, как IP выбирает gateway при доставке пакетов определенной сети.
    Таблица маршрутов (Routing Table)
    Теперь сосредоточим наше внимание на том, как IP выбирает gateway при доставке пакетов определенной сети.


    Как мы видели раньше, erdos, когда передавал пакеты для quark, проверил место назначения и нашел, что его нет в местной сети. Поэтому он посылает пакет gateway sophus, который теперь сталкивается с той же самой задачей. Машина sophus определяет, что quark не находится в сетях, с которыми он непосредственно связан, так что он передает этот пакет другому gateway, чтобы он перенаправил его дальше. Правильный выбор был бы niels (gateway отдела физики). Но шлюзовая машина sophus нуждается в некоторой информации, чтобы определить подходящий gateway.
    Для этого используется таблица маршрутизации IP, которая определяет какие сети присоединены с помощью каких gateways. Обязательно должен быть указан маршрут по умолчанию (default route), по которому будут направляться все пакеты с адресами в неизвестных сетях. Этот gateway связан с сетью 0.0.0.0. На sophus эта таблица могла бы напоминать эту:

    Сеть Netmask
    Gateway
    Интерфейс
    Маршруты к сетям, с которыми sophus связан непосредственно, обозначаются знаком "-" в столбце gateway.
    Таблицы маршрутизации могут быть построены различными средствами. Для маленькой сети наиболее эффективно строить их вручную и передавать их IP, используя команду route во время загрузки системы (см. главу 5). Для больших сетей они строятся и регулируются во время работы маршрутизирующих демонов; они запускаются на центральном хосте и обмениваются информацией с другими компьютерами для вычисления оптимального маршрута между членами сетей.



    Процесс определения правильного маршрута прост, но требует знания логики и двоичной арифметики: маршрут совпадает с пунктом назначения, если (адрес сети AND netmask)=(адрес назначения AND netmask).
    Это означает, что маршрут правильный, если числу бит адреса сети, указанное netmask (начиная с левого бита) соответствует то же самое число битов в адресе назначения.
    Когда реализация IP ищет самый лучший маршрут к адресату, может найтись ряд записей маршрутизации, которые соответствуют целевому адресу. Например, мы знаем, что заданный по умолчанию маршрут соответствует каждому адресату, но пакеты, предназначенные для местных сетей, будут соответствовать и их локальному маршруту. Как узнать, какой маршрут использовать? Здесь netmask играет важную роль. В то время как оба маршрута соответствуют адресату, один из маршрутов имеет большую netmask, чем другой. Я уже упомянул, что netmask используется, чтобы разбить наше адресное пространство на меньшие сети. Больший netmask более определенно задает целевой адрес, значит, при маршрутизации мы должны всегда выбирать маршрут, который имеет самую большую netmask. Заданный по умолчанию маршрут имеет netmask из нулевых битов, и в конфигурации, приведенной выше, местные сети имеют 24-разрядный netmask. Если пакет соответствует местной сети, он будет направлено на соответствующее устройство, а не на заданный по умолчанию маршрут, потому что локальный сетевой маршрут соответствует netmask с большим числом битов. Единственный пакет, который будет направлен через заданный по умолчанию маршрут это тот, который не соответствует вообще никакому другому маршруту.
    В зависимости от размера сети используются различные протоколы маршрутизации. Для маршрутизации в автономной системе (типа университетского городка) лучше подходит внутренний протокол маршрутизации (internal routing protocols), например, RIP (Routing Information Protocol, протокол маршрутной информации), который предложен в демоне BSD routed. Для маршрутизации между автономными системами используются внешние протоколы маршрутизации (external routing protocols) типа EGP (External Gateway Protocol) или BGP (Border Gateway Protocol). Они были предложены в демоне gated (разработка University of Cornell's).

    TCP-расширения: использование с опциями -m tcp -p tcp


    - -sport [!] [port[:port]]
    Определяет порт, который должен использовать источник пакетов, чтобы соответствовать этому правилу. Можно задать диапазон, указав верхние и нижние границы, например: 20:25 задает все порты с 20 по 25 включительно. Символ ! переворачивает значение.

    TCP-расширения: использование с опциями -m tcp -p tcp
    - -sport [!] [port[:port]]
    Определяет порт, который должен использовать источник пакетов, чтобы соответствовать этому правилу. Можно задать диапазон, указав верхние и нижние границы, например: 20:25 задает все порты с 20 по 25 включительно. Символ ! переворачивает значение.


    - -dport [!] [port[:port]]
    Задает порт, который должны использовать исходящие пакеты. В остальном аналогичен - -sport.
    - -tcp-flags [!] mask comp
    Определяет, что это правило должно работать, когда флажки в TCP-пакете соответствуют определениям mask и comp. mask
    задает (через запятую) перечень флажков, а
    comp указывает их состояние. Допустимы флажки: SYN, ACK, FIN, RST, URG, PSH, ALL или NONE. Это сложный параметр: ознакомьтесь со значением флажков в каком-нибудь хорошем описании протокола TCP, например, в RFC-793. Действие символа ! обычное для всех правил: он переворачивает значение.
    [!] - -syn
    Устанавливает, что у пакета должны быть выставлены в 1 флажок SYN и в 0 флажки ACK и FIN. Пакет с этими параметрами используется для создания TCP-соединения, и эту опцию можно использовать для отлова запросов подключения. Эта опция эквивалент для:
    149.76.1.0
    255.255.255.0 - fddi0
    149.76.2.0
    255.255.255.0 149.76.1.2 fddi0
    149.76.3.0
    255.255.255.0 149.76.1.3 fddi0
    149.76.4.0
    255.255.255.0 - eth0
    149.76.5.0
    255.255.255.0 149.76.1.5 fddi0
    0.0.0.0
    0.0.0.0 149.76.1.2 fddi0

    - -tcp-flags SYN,RST,ACK SYN
    Когда Вы используете оператор отрицания, правило будет соответствовать всем пакетам, флажки SYN и ACK
    которых вместе не установлены в 1.


    Типы серверов имен


    Сервера имен, которые содержат всю информацию относительно хостов в пределах данной зоны, названы авторитетными для этой зоны и иногда упоминаются как authoritative или master name servers. Любой запрос относительно хоста в пределах этой зоны будет в конце концов передан одному из этих серверов.

    Типы серверов имен
    Сервера имен, которые содержат всю информацию относительно хостов в пределах данной зоны, названы авторитетными для этой зоны и иногда упоминаются как authoritative или master name servers. Любой запрос относительно хоста в пределах этой зоны будет в конце концов передан одному из этих серверов.


    Чтобы обеспечить адекватную картину зоны, эти сервера должны быть хорошо синхронизированы. Это достигается с помощью создания одного главного (первичного, primary) сервера, который загружает зональную информацию из файлов данных, а другие (вторичные, secondary) сервера через равные интервалы времени качают эти данные с главного сервера.
    Одна из причин наличия нескольких серверов имен состoит в том, чтобы распределить груз работы, другая в надежности. Когда одна машина с сервером имен ломается, все запросы будут посылаться другим серверам. Конечно, эта схема не защищает Вас от сбоев сервера, при которых он отсылает неправильные ответы на все запросы DNS, например, от ошибок в программе сервера.
    Конечно, вы можете также создать сервер имени, который не будет авторитетным для любого домена. Этот тип серверов используется, чтобы проверять запросы от местных приложений и кэшировать ответы. Поэтому его называют caching-only сервером.


    Три способа фильтрации Рассмотрим



    (1) IP-пакет откуда-то пришел.

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

  • (2) Если он для этой машины, то обработан в местном масштабе.

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

  • (4) Пакеты из локальных процессов будут посланы программному обеспечению маршрутизации для пересылки к соответствующему интерфейсу.

  • Исходящий IP-пакет будет исследован, чтобы определить, есть ли имеющий силу маршрут для него, если нет, он будет пропущен.

  • (5) IP-пакет куда-то отправится.
    В этой схеме поток 1-3-5 представляет нашу машину, направляющую данные между компьютером в нашей сети Ethernet на другой доступный компьютер через какую-то связь (в дальнейших примерах это будет PPP). Потоки 1-2 и 4-5 представляют ввод данных и выходные потоки сетевой программы, работающей на нашем локальном компьютере. Поток 4-3-2 представляет передачу данных по кольцевому внутреннему интерфейсу (loopback connection).
    IP firewall ядра Linux способен к применению фильтрации на различных стадиях в этом процессе. То есть, Вы можете фильтровать IP-пакеты, которые приходят Вашей машине, те, которые ходят внутри нее и те, которые предназначены для отправки во внешний мир.
    В ipfwadm и ipchains
    правило Input применяется к потоку 1, правило Forwarding к потоку 3 и правило Output к потоку 5. Позже, при обсуждении netfilter, мы увидим, какие точки перехвата изменились так, чтобы правило Input применилось в потоке 2 и правило Output в потоке 4. Это имеет важное значение для того, как Вы структурируете свой набор правил, но общий принцип остается верным для всех версий Linux firewall.
    Это может сначала казаться излишне сложным, но это обеспечивает гибкость, которая позволяет создать очень сложные и мощные конфигурации.


    Тупой (Dummy) интерфейс


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


    Проблема автономных хостов в том, что они имеют только одно активное сетевое устройство, loopback, которому обычно назначен адрес 127.0.0.1. Но в некоторых случаях, вы должны послать данные к "официальному" IP-адресу локального хоста. Например, рассмотрим laptop vlite, который был отсоединен от сети. Приложение на vlite может понадобиться послать данные другому приложению на том же самом хосте. Поиск vlite в файле /etc/hosts выдает IP-адрес 172.16.1.65, таким образом приложение пытается послать данные этому адресу. Поскольку интерфейс loopback в настоящее время единственный активный интерфейс на машине, ядро не имеет никаких идей относительно этого адреса! Как следствие, ядро отказывается от пакета и возвращает приложению ошибку.
    В этот момент просто необходимо фиктивное устройство. Оно решает эту проблему так же, как loopback. В случае vlite , вы просто даете ему адрес 172.16.1.65 и добавляете новый маршрут, указывающий на него. Каждый пакет для 172.16.1.65 будет рассматривается локально. Требуемые действия:

    # ifconfig dummy vlite
    # route add vlite


    Учет по адресам


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


    Допустим, у нас есть Linux-роутер, который обслуживает два департамента Virtual Brewery. Он имеет два устройства Ethernet, eth0 и eth1, по одному на департамент, и одно устройство PPP, ppp0, для связи через быстродействующую последовательную связь с университетским городком Groucho Marx University.
    Для составления счетов мы хотим знать общее количество трафика, сгенерированного каждым из отделов по последовательной связи, и для целей управления мы хотим знать общий трафик между двумя отделами.
    Следующая таблица показывает используемые нами адреса и интерфейсы:

    Интерфейс Адрес
    Сетевая маска
    Для ответа на вопрос, сколько данных каждый отдел передает по PPP, мы могли бы использовать правило, которое напоминает:
    eth0
    172.16.3.0 255.255.255.0
    eth1
    172.16.4.0 255.255.255.0

    # ipfwadm -A both -a -W ppp0 -S 172.16.3.0/24 -b
    # ipfwadm -A both -a -W ppp0 -S 172.16.4.0/24 -b
    или:

    # ipchains -A input -i ppp0 -d 172.16.3.0/24
    # ipchains -A output -i ppp0 -s 172.16.3.0/24
    # ipchains -A input -i ppp0 -d 172.16.4.0/24
    # ipchains -A output -i ppp0 -s 172.16.4.0/24
    или с iptables:

    # iptables -A FORWARD -i ppp0 -d 172.16.3.0/24
    # iptables -A FORWARD -o ppp0 -s 172.16.3.0/24
    # iptables -A FORWARD -i ppp0 -d 172.16.4.0/24
    # iptables -A FORWARD -o ppp0 -s 172.16.4.0/24
    Первая половина каждого набора правил задает подсчет всех данных, передаваемых по интерфейсу ppp0 с исходным адресом или адресом назначения 172.16.3.0/24. Здесь полезна опция -b в ipfwadm и iptables. Вторая половина каждого набора правил задает то же самое, но для второй сети Ethernet.
    Для ответа на вопрос, сколько трафика проходит между департаментами, нужно правило, которое выглядит следующим образом:

    # ipfwadm -A both -a -S 172.16.3.0/24 -D 172.16.4.0/24 -b
    или:

    # ipchains -A forward -s 172.16.3.0/24 -d 172.16.4.0/24 -b
    или:

    # iptables -A FORWARD -s 172.16.3.0/24 -d 172.16.4.0/24
    # iptables -A FORWARD -s 172.16.4.0/24 -d 172.16.3.0/24
    Эти правила будут считать все пакеты с исходящими адресами сети одного департамента и адресом назначения в сети другого.


    Учет по пакетам ICMP


    Протокол ICMP не использует сервисные номера портов, так что сбор статистики по нему труднее. ICMP использует ряд различных типов пакетов. Многие из их безобидны и нормальны, в то время, как другие появляются только при специальных обстоятельствах. Иногда пытаются обвалить систему, посылая огромное число пакетов ICMP. Эта атака называется ping flooding. Против такой атаки хорош IP firewall, а IP accounting позволит узнать, кто это сделал.
    Учет по пакетам ICMP
    Протокол ICMP не использует сервисные номера портов, так что сбор статистики по нему труднее. ICMP использует ряд различных типов пакетов. Многие из их безобидны и нормальны, в то время, как другие появляются только при специальных обстоятельствах. Иногда пытаются обвалить систему, посылая огромное число пакетов ICMP. Эта атака называется ping flooding. Против такой атаки хорош IP firewall, а IP accounting позволит узнать, кто это сделал.


    ICMP не использует порты в отличие от TCP и UDP. Вместо них используются типы сообщений ICMP. Мы можем создать правила, чтобы учитывать каждый тип сообщений ICMP. Для этого нужно определить тип сообщения ICMP вместо номера порта в команде ipfwadm. Типы сообщений перечислены в разделе "Типы пакетов ICMP" главы 9.
    Для сбора данных о передаче пакетов ICMP по всем типам сообщений используйте правило:

    # ipfwadm -A both -a -P icmp -S 0/0 8
    # ipfwadm -A both -a -P icmp -S 0/0 0
    # ipfwadm -A both -a -P icmp -S 0/0 0xff
    или в ipchains:

    # ipchains -A forward -p icmp -s 0/0 8
    # ipchains -A forward -p icmp -s 0/0 0
    # ipchains -A forward -p icmp -s 0/0 -f
    или в iptables:

    # iptables -A FORWARD -m icmp -p icmp --sports echo-request
    # iptables -A FORWARD -m icmp -p icmp --sports echo-reply
    # iptables -A FORWARD -m icmp -p icmp -f
    Первое правило собирает информацию относительно пакетов ICMP Echo Request (ping requests), второе правило собирает информацию относительно пакетов ICMP Echo Reply (ping replies). Третье правило собирает информацию относительно фрагментированных пакетов ICMP. Этот прием подобен описанному для фрагментированных пакетов TCP и UDP.
    Если Вы определяете источник и/или адресата в ваших правилах, Вы можете следить, откуда приходят пакеты, изнутри сети или снаружи.


    Учет по портам сервисов


    Предположим, мы хотим также знать, какой именно трафик преобладает на связи через PPP. Например, надо выяснить, сколько данных проходит по протоколам FTP, smtp и World Wide Web.
    Учет по портам сервисов
    Предположим, мы хотим также знать, какой именно трафик преобладает на связи через PPP. Например, надо выяснить, сколько данных проходит по протоколам FTP, smtp и World Wide Web.


    Для сбора этой информации пригоден такой скрипт с правилами:

    #!/bin/sh # Collect FTP, smtp and www volume statistics for data carried on our # PPP link using ipfwadm # ipfwadm -A both -a -W ppp0 -P tcp -S 0/0 ftp ftp-data ipfwadm -A both -a -W ppp0 -P tcp -S 0/0 smtp ipfwadm -A both -a -W ppp0 -P tcp -S 0/0 www
    или:

    #!/bin/sh # Collect ftp, smtp and www volume statistics for data carried on our # PPP link using ipchains # ipchains -A input -i ppp0 -p tcp -s 0/0 ftp-data:ftp ipchains -A output -i ppp0 -p tcp -d 0/0 ftp-data:ftp ipchains -A input -i ppp0 -p tcp -s 0/0 smtp ipchains -A output -i ppp0 -p tcp -d 0/0 smtp ipchains -A input -i ppp0 -p tcp -s 0/0 www ipchains -A output -i ppp0 -p tcp -d 0/0 www
    или:

    #!/bin/sh # Collect ftp, smtp and www volume statistics for data carried on our # PPP link using iptables. # iptables -A FORWARD -i ppp0 -m tcp -p tcp --sport ftp-data:ftp iptables -A FORWARD -o ppp0 -m tcp -p tcp --dport ftp-data:ftp iptables -A FORWARD -i ppp0 -m tcp -p tcp --sport smtp iptables -A FORWARD -o ppp0 -m tcp -p tcp --dport smtp iptables -A FORWARD -i ppp0 -m tcp -p tcp --sport www iptables -A FORWARD -o ppp0 -m tcp -p tcp --dport www
    Здесь есть пара интересных свойств. Во-первых, мы определили протокол. Когда мы определяем порты в наших правилах, мы должны также определить протокол потому, что TCP и UDP имеют отдельные наборы портов. Так как все эти услуги основаны на TCP, мы определяем именно этот протокол. Во-вторых, мы определили два сервиса, ftp и
    ftp-data в одной команде. ipfwadm позволяет определять одиночные порты, диапазоны портов или произвольные списки портов. Команда ipchains позволяет определять любой одиночный порт или диапазон портов. Запись "ftp-data:ftp" означает "порты с ftp-data (20) по ftp (21)", так можно кодировать порты в ipchains и iptables. Когда вы имеете список портов в правиле учета, это означает, что любые данные для любого из портов в списке будут добавлены к общему количеству для этой записи. Поскольку FTP использует два порта, команды и данные, мы добавили их вместе к общему трафику FTP. Наконец, мы определили исходный адрес как 0/0, что соответствует всем адресам и требуется ipfwadm и ipchains для определения портов.



    Теперь нас интересует соотношение полезного трафика по FTP, SMTP и World Wide Web к трафику по другим протоколам. Для этого зададим такие правила:
    # ipfwadm -A both -a -W ppp0 -P tcp -S 0/0 ftp ftp-data smtp www

    # ipfwadm -A both -a -W ppp0 -P tcp -S 0/0 1:19 22:24 26:79 81:32767

    Если вы уже исследовали ваш файл /etc/services, вы увидите, что второе правило покрывает все порты за исключением (ftp, ftp-data, smtp и www).

    Как сделать это с командами ipchains или iptables, ведь они позволяют только один параметр в спецификации порта? Мы можем эксплуатировать определяемые пользователем цепочки в учете так же легко, как в правилах firewall. Рассмотрим следующий подход:

    # ipchains -N a-essent

    # ipchains -N a-noness

    # ipchains -A a-essent -j ACCEPT

    # ipchains -A a-noness -j ACCEPT

    # ipchains -A forward -i ppp0 -p tcp -s 0/0 ftp-data:ftp -j a-essent

    # ipchains -A forward -i ppp0 -p tcp -s 0/0 smtp -j a-essent

    # ipchains -A forward -i ppp0 -p tcp -s 0/0 www -j a-essent

    # ipchains -A forward -j a-noness

    Здесь мы создаем две определяемых пользователем цепочки: a-essent, где мы фиксируем данные для полезного трафика и a-noness, где мы собираем данные для всего остального. Затем добавим правила к цепочке forward, которые соответствуют полезным сервисам и задают переход в цепочку a-essent , которая только считает трафик. Последнее правило в нашей цепочке forward задает переход к цепочке a-noness, где тоже есть только одно правило, считающее трафик. Правило, которое переходит к цепочке a-noness, не будет достигнуто любым пакетом из полезных сервисов, поскольку они будут приняты в их собственной цепочке. Наши счетчики для полезных и остальных услуг будут доступны только в правилах внутри тех цепочек. Это только один подход, который вы могли бы избрать. Реализация того же самого подхода для iptables:

    # iptables -N a-essent

    # iptables -N a-noness

    # iptables -A a-essent -j ACCEPT

    # iptables -A a-noness -j ACCEPT

    # iptables -A FORWARD -i ppp0 -m tcp -p tcp --sport ftp-data:ftp -j a-essent

    # iptables -A FORWARD -i ppp0 -m tcp -p tcp --sport smtp -j a-essent

    # iptables -A FORWARD -i ppp0 -m tcp -p tcp --sport www -j a-essent

    # iptables -A FORWARD -j a-noness

    <



    /p>

    Это выглядит достаточно простым. К сожалению, имеется маленькая, но неизбежная проблема при попытке делать учет сервисным типом. Мы обсуждали в одной из предыдущих глав роль MTU в работе с сетями TCP/IP. MTU определяет самый большой пакет, который будет передан на сетевое устройство. Когда пакет получен маршрутизатором, и этот пакет больше, чем MTU интерфейса, который должен его передать, маршрутизатор выполняет фрагментацию (fragmentation). Маршрутизатор разбивает большой пакет на маленькие части не больше, чем MTU интерфейса, и затем передает эти части. Маршрутизатор формирует новые заголовки для получившихся пакетов, по которым получатель сможет восстановить исходный пакет. К сожалению, в течение фрагментации значение порта будет потеряно для всего, кроме первого фрагмента. Это означает, что учет IP не может правильно считать фрагментированные пакеты, а только первые фрагменты или нефрагментированные пакеты. Имеется маленькая хитрость ipfwadm, которая позволяет считать пакеты, даже не зная порт второго и последующих фрагментов. Первая версия программного обеспечения Linux accounting назначала фрагментам поддельный номер порта 0xFFFF, который мы могли перехватывать для учета. Мы фиксируем вторые и последующие фрагменты, используя правило:

    # ipfwadm -A both -a -W ppp0 -P tcp -S 0/0 0xFFFF

    Реализация IP chains имеет немного более сложное решение, но результат тот же самый. При использовании команды ipchains надо использовать правило:
    # ipchains -A forward -i ppp0 -p tcp -f

    Для iptables подойдет правило:
    # iptables -A FORWARD -i ppp0 -m tcp -p tcp -f

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

    В ядрах 2.2 вы можете выбирать при настройке ядра опцию, которая решает эту проблему, если ваша Linux-машина действует как одиночная точка доступа к сети. Если вы включили при построении ядра опцию IP: always defragment, все пакеты будут повторно собраны маршрутизатором Linux перед маршрутизацией и передачей. Эта операция выполняется перед firewall, и учетный блок видит пакеты. Таким образом, фрагментов просто не будет. В ядрах 2.4 откомпилируйте и загрузите netfilter с модулем forward-fragment.


    Учет по протоколам


    Допустим, нам интересно, какие протоколы используются нашим трафиком: TCP, UDP или ICMP. Тут нам поможет правило:

    # ipfwadm -A both -a -W ppp0 -P tcp -D 0/0
    # ipfwadm -A both -a -W ppp0 -P udp -D 0/0
    # ipfwadm -A both -a -W ppp0 -P icmp -D 0/0
    или:

    # ipchains -A forward -i ppp0 -p tcp -d 0/0
    # ipchains -A forward -i ppp0 -p udp -d 0/0
    # ipchains -A forward -i ppp0 -p icmp -d 0/0
    или:

    # iptables -A FORWARD -i ppp0 -m tcp -p tcp
    # iptables -A FORWARD -o ppp0 -m tcp -p tcp
    # iptables -A FORWARD -i ppp0 -m udp -p udp
    # iptables -A FORWARD -o ppp0 -m udp -p udp
    # iptables -A FORWARD -i ppp0 -m icmp -p icmp
    # iptables -A FORWARD -o ppp0 -m icmp -p icmp
    С этими правилами трафик через интерфейс ppp0 будет проанализирован, чтобы определить тип протокола: TCP, UDP или IMCP, и соответствующие счетчики будут модифицированы для каждого пакета.

    Учет по протоколам
    Допустим, нам интересно, какие протоколы используются нашим трафиком: TCP, UDP или ICMP. Тут нам поможет правило:

    # ipfwadm -A both -a -W ppp0 -P tcp -D 0/0
    # ipfwadm -A both -a -W ppp0 -P udp -D 0/0
    # ipfwadm -A both -a -W ppp0 -P icmp -D 0/0
    или:

    # ipchains -A forward -i ppp0 -p tcp -d 0/0
    # ipchains -A forward -i ppp0 -p udp -d 0/0
    # ipchains -A forward -i ppp0 -p icmp -d 0/0
    или:

    # iptables -A FORWARD -i ppp0 -m tcp -p tcp
    # iptables -A FORWARD -o ppp0 -m tcp -p tcp
    # iptables -A FORWARD -i ppp0 -m udp -p udp
    # iptables -A FORWARD -o ppp0 -m udp -p udp
    # iptables -A FORWARD -i ppp0 -m icmp -p icmp
    # iptables -A FORWARD -o ppp0 -m icmp -p icmp
    С этими правилами трафик через интерфейс ppp0 будет проанализирован, чтобы определить тип протокола: TCP, UDP или IMCP, и соответствующие счетчики будут модифицированы для каждого пакета.




    Удаление набора правил Одна последняя


    Параметр -f в команде ipfwadm удалит все правила заданного типа. ipchains
    использует параметр -F, который делает то же самое:

    # ipfwadm -A -f
    или:

    # ipchains -F
    или:

    # iptables -F
    Это удаляет все Ваши правила, избавляя от необходимости убирать каждое в отдельности. Обратите внимание, что в ipchains эта операция не уничтожает заданных пользовательских цепочек, а только вычищает из них правила.


    UDP-расширения: использование с опциями -m udp -p udp


    - -sport [!] [port[:port]]
    Определяет порт, который должен использовать источник пакетов, чтобы соответствовать этому правилу. Можно задать диапазон, указав верхние и нижние границы, например: 20:25 задает все порты с 20 по 25 включительно. Символ ! переворачивает значение.

    UDP-расширения: использование с опциями -m udp -p udp
    - -sport [!] [port[:port]]
    Определяет порт, который должен использовать источник пакетов, чтобы соответствовать этому правилу. Можно задать диапазон, указав верхние и нижние границы, например: 20:25 задает все порты с 20 по 25 включительно. Символ ! переворачивает значение.


    - -dport [!] [port[:port]]
    Задает порт, который должны использовать исходящие пакеты. В остальном аналогичен - -sport.


    Упаковка статей Упаковщик новостей


    count
    Где count задает число байтов в статье. Когда используется пакетное сжатие, возникающий в результате файл сжат в целом и содержать другую строку в соответствии c сообщением, которое нужно использовать для распаковки. Стандартное средство сжатия compress, которое отмечен как

    #! cunbatch
    Иногда при необходимости посылать пакеты через программное обеспечение почты, которое удаляет восьмой бит всех данных, сжатый пакет может быть защищен, используя c7-encoding;; эти пакеты будут отмечены как c7unbatch.
    Когда пакет приходит на удаленную машину, rnews
    проверяет эти маркеры и обрабатывает пакет соответственно. Некоторые абоненты также используют другие инструментальные средства сжатия, подобные gzip. Такие файлы будут помечены как zunbatch. C-News не распознает подобные ненормативные заголовки; Вы должны изменить исходный код, чтобы поддерживать их.
    В C-News пакетирование статьи выполняется командой /usr/lib/news/batch/sendbatches, которая берет список статей из файла site/togo и помещает их в отдельный newsbatches. Это должно быть выполнено раз в час или даже более часто, в зависимости от объема трафика. Операция управляется файлом batchparms в /var/lib/news . Этот файл описывает максимальный размер пакета для каждого сервера, программу пакетирования, необязательную программу сжатия и транспорт для доставки к этому удаленному серверу. Вы можете определять параметры пакетирования, также как набор заданных по умолчанию параметров для абонента.
    При установке C-News Вы, вероятно, найдете файл
    batchparms, который содержит приемлемые заданные по умолчанию записи в дистрибутиве, так что есть хорошая возможность не изменять файл. На всякий случай я описываю его формат. Каждая строка состоит из шести полей, отделяемых пробелами или метками табуляции:

    site size max batcher muncher transport
    site
    site
    имя сервера, для которого применяется запись. Файл togo для этого сервера должен постоянно находится в out.going/togo. Имя /default/ обозначает заданный по умолчанию сервер.
    size



    size

    максимальный размер созданных пакетов статей (перед сжатием). Для одиночных статей больших, чем этот размер, C-News делает исключение и помещает их в одиночный пакет.

    max

    max

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

    C-News определяет число поставленных в очередь пакетов, используя скрипт queuelen в /usr/lib/news . Если вы установили C-News в формате prepackaged, скрипт не должен нуждаться в редактировании, но если Вы должны использовать другую разновидность spool-каталогов, например, Taylor UUCP, Вам может быть необходимо написать Ваш собственный. Если Вы не заботитесь относительно числа spool-файлов (например, Вы единственный пользователь данного компьютера, и Вы не пишете статьи по мегабайту каждая), Вы можете заменить содержимое скрипта просто на команду exit 0.

    batcher

    Поле batcher

    содержит команду, используемую для создания пакета из списка статей в файле togo. Обычно это batcher. Для других целей можно использовать альтернативные команды. Например, протокол ihave/sendme требует, чтобы список статей был превращен в сообщения управления ihave или sendme, которые зарегистрированы в группе новостей to.site . Это выполняется batchih и

    batchsm.

    muncher

    Поле muncher

    определяет команду, используемую для сжатия. Обычно это compcun, команда, которая создает сжатый пакет. В качестве альтернативы, Вы могли бы использовать muncher, который использует gzip, скажем

    gzipcun. Вы должны удостовериться, что распаковщик на удаленном сервере исправлен так, чтобы распознать файлы, сжатые gzip .

    Если удаленный сайт не имеет команды распаковки

    uncompress, Вы можете определить nocomp, который не выполняет сжатие.

    transport

    Последнее поле, transport, описывает транспорт, который нужно использовать. Доступно несколько стандартных команд для различных транспортов, чьи имена начинаются с via. sendbatches передает им имя машины адресата в командной строке. Если запись



    batchparms не /default/, sendbatches получает имя машины из поля site, удаляя все последующее, включая первую точку или наклонную черту вправо. Если запись batchparms была /default/, используются имена каталогов в

    out.going.

    Чтобы выполнять пакетирование для специфического сервера, Вы вызываете это как:

    # su news -c "/usr/lib/news/batch/sendbatches site"

    Когда вызов происходит без аргументов, sendbatches

    обрабатывает все пакетные очереди. Интерпретация понятия “все” зависит от присутствия заданной по умолчанию записи в

    batchparms. Если она найдена, проверяются все каталоги в /var/spool/news/out.going, иначе циклически просматриваются все записи в batchparms. Обратите внимание, что sendbatches при просмотре каталога out.going берет только те каталоги, которые не содержат точку или знак @ как имя сервера.

    Имеются две команды, которые используют uux, чтобы выполнить rnews на удаленной системе; viauux и viauuxz. Последняя устанавливает флаг –z для того, чтобы отменить сообщения об успехе для каждой переданной статьи. Другая команда, viamail, посылает пакеты статей пользователю rnews в удаленной системе по почте. Полный список транспорта есть на man-странице newsbatch.

    Все команды из последних трех полей нужно расположть или в out.going/site, или в

    /usr/lib/news/batch. Большинство их сделаны так, чтобы Вы могли легко приспосабливать новые инструментальные средства для Ваших потребностей. Они вызываются как канал. Список статей подается дозатору на стандартном вводе, который создает пакет на стандартном выводе. Он канально передается в muncher и так далее.

    Пример файла:

    # batchparms file for the brewery # site | size |max |batcher |muncher |transport #-------------+--------+-------+---------+-----------+----------- /default/ 100000 22 batcher compcun viauux swim 10000 10 batcher nocomp viauux


    Управление очередями печати


    Команда pqlist показывает все очереди печати, доступные Вам на указанном сервере. Если Вы не определяете сервер в командной строке, используя опцию -S или логин с паролем, они будут приниматься из заданной по умолчанию записи в файле /.nwclient:

    Управление очередями печати
    Команда pqlist показывает все очереди печати, доступные Вам на указанном сервере. Если Вы не определяете сервер в командной строке, используя опцию -S или логин с паролем, они будут приниматься из заданной по умолчанию записи в файле /.nwclient:



    # pqlist -S vbrew_f1 -U guest -n
    Server: ALES_F1 Print queue name Queue ID --------------------------- TEST AA02009E Q2 EF0200D9 NPI223761_P1 DA03007C Q1 F1060004 I-DATA 0D0A003B NPI223761_P3 D80A0031
    Пример показывает список очередей печати, доступных пользователю guest на сервере ALES_F1.
    Чтобы посмотреть задания по выводу на печать в очереди, используйте команду pqstat. Требуется имя очереди как параметр, и выводятся все работы в очереди. Вы можете факультативно задать другой параметр, указывающий сколько работ в очереди хотели бы внести в список. Следующий типовой вывод немного сжат, чтобы поместиться на странице:

    $ pqstat -S ALES_F1 NPI223761_P1
    Server: ALES_F1 Queue: NPI223761_P1 Queue ID: 6A0E000C Seq Name Description Status Form Job ID ---------------------------------------------------------------------- 1 TOTRAN LyX document - proposal.lyx Active 0 02660001
    Вы может видеть только одно задание по выводу на печать в очереди, принадлежащей пользователю TOTRAN. Остальная часть параметров включает описание работы, состояние и идентификатор работы.
    Команда pqrm используется, чтобы удалить задания по выводу на печать из определенной очереди печати. Чтобы удалить работу в очереди, скомандуйте:

    $ pqrm -S ALES_F1 NPI223761_P1 02660001
    Команда довольно проста, но неуклюжая для того, чтобы использовать ее в спешке. Было бы неплохо написать скрипт, чтобы упростить эту операцию.


    Установка Ethernet Сейчас Linux


    Когда-то раньше в руководствах по Linux пытались перечислить все допустимые карты. Сейчас такой список займет слишком много места. К счастью, Paul Gortmaker поддерживает Ethernet HOWTO, в котором есть список всех карт и информация о том, как заставить их работать в Linux. Документ рассылается в группу новостей comp.os.linux.answers и доступен на зеркалах Linux Documentation Project.
    Даже если Вы уверены, что знаете, как установить специфический тип платы Ethernet на своей машине, все равно стоит ознакомиться с Ethernet HOWTO на предмет возможных хитростей. Это поможет сэкономить немало сил для DMA-карт Ethernet, которые используют тот же канал DMA, что и контроллер Adaptec 1542 SCSI. Если их не разделить, Вы получите карту Ethernet, записывающую данные пакетов в произвольное место на Вашем жестком диске.
    Чтобы использовать любую из поддержанных плат Ethernet с Linux, Вы можете использовать готовое ядро из одного из дистрибутивов Linux. Они вообще имеют модули для всех поддерживаемых драйверов, и процесс установки обычно позволяет Вам выбирать, какие драйверы Вы хотите загружать. Однако, лучше формировать собственное ядро и компилировать только те драйверы, в которых Вы фактически нуждаетесь: это сохраняет дисковое пространство и память.


    Установка Hostname Большинство


    Обычной практикой является использование локального имени (без имени домена). Например, машины Virtual Brewery (описаны в
    приложении A) могут иметь имена vale.vbrew.com и vlager.vbrew.com. Эти имена полные, то есть с именем домена (fully qualified domain names, FQDNs. Их локальные имена будут первыми компонентами полных, например, vale. Однако, поскольку локальные имена часто используется, чтобы искать IP-адрес компьютера, Вы должны удостовериться, что сервер имен способен найти адрес по имени. Это обычно означает, что Вы должны внести имя в файл /etc/hosts.
    Некоторые люди предлагают использовать команду
    domainname, чтобы сообщить ядру оставшуюся часть FQDN. Этим путем Вы могли бы объединять вывод из hostname и domainname для получения FQDN. Однако, это в самом лучшем случае только наполовину верно. domainname
    вообще используется, чтобы установить домен NIS, который может полностью отличаться от домена DNS, к которому компьютер принадлежит. Вместо этого, чтобы гарантировать, что короткая форма пригодна к использованию в поиске, все новые версии hostname добавляют соответствующую запись в сервер имен или пишут полное доменное имя в файл /etc/hosts. Затем можно использовать параметр --fqdn в команде
    hostname для получения полного имени.


    Установка IP-адресов Если Вы конфигурируете


    Дела немного более сложны с реальными сетями, подобными Ethernet. Если Вы хотите подключить Ваш компьютер к существующей сети, Вы должны просить, чтобы администраторы дали Вам IP-адрес в этой сети. Если сеть строите сами, можете назначать IP-адреса лично.
    Компьютеры в локальной сети обычно должны совместно использовать адреса из той же самой логической IP-сети. Следовательно, Вы должны назначить сетевой адрес IP. Если Вы имеете несколько физических сетей, Вы должны назначить им различные сетевые адреса или использовать подсети, чтобы разделить адресный интервал IP на несколько подсетей. Последний способ подробно рассмотрен в разделе "Создание подсетей".
    При выборе сетевого IP-адреса многое зависит от того, предполагаете ли Вы выходить в Internet в ближайшем будущем. Если да, получите официальный IP-адрес сейчас, чтобы потом не перенастраивать систему. Попросите, чтобы Ваш провайдер помог Вам. Если Вы хотите получить сетевой адрес на всякий случай, запросите Сетевое Заявление: анкету адреса с hostmaster@internic.net или Network Information Center Вашей страны, если он имеется.
    Если Ваша сеть не связана с Internet и не будет связана в ближайшем будущем, Вы свободны выбрать любой допустимый сетевой адрес. Только убедитесь, что никакие пакеты не могут из Вашей сети попасть в Internet! Чтобы быть уверенным в том, что даже в случае их попадания в Internet, они не создадут проблем, используйте один из сетевых адресов, зарезервированных для частного использования. Internet Assigned Numbers Authority (IANA) отложил несколько сетевых адресов из классов A, B и C, которые Вы можете использовать без регистрации. Эти адреса имеют силу только внутри частной сети и непригодны для сетевого взаимодействия в Internet. Они определены в RFC 1597 и перечислены в
    таблице 2-1 в главе 2. Обратите внимание, что вторые и третьи блоки содержат 16 и 256 подсетей соответственно.
    Выбор адресов из одной из этих подсетей не только полезен для сетей, полностью не связанных с Internet; Вы можете выполнять немного более ограниченный доступ, использующий одну машину как шлюз. Вашей локальной сети шлюз доступен по внутреннему IP-адресу в то время, как внешний мир знает их официально зарегистрированный адрес (назначенный Вам провайдером). Мы вернемся к этому понятию на описании подключения с IP masquerade в главе 11.
    В дальнейшем мы предполагаем, что используется сеть класса B, скажем 172.16.0.0. Конечно, сети класса C определенно удовлетворит почти всех, но я использую именно сеть класса B ради простоты; это сделает примеры подсетей в следующем разделе этой главы немного более интуитивными.


    Установка исполняемых модулей


    Если Вы хотите компилировать и устанавливать сетевые прикладные программы стандарта TCP/IP самостоятельно, Вы можете получать их исходные тексты с большинства Linux FTP серверов. Все современные дистрибутивы Linux включают богатый набор сетевых прикладных программ TCP/IP, например, браузеры World Wide Web, программы telnet и ftp и второстепенные сетевые утилиты, вроде talk. Все это компилируется довольно просто, при условии пунктуального следования инструкциям в пакете исходного кода.


    Установка параметров синхронизации для IP Masquerade


    Когда новое подключение установлено, программное обеспечение IP masquerade создает ассоциацию в памяти между компьютерами, связанными с подключением. Вы можете рассматривать эти ассоциации в любое время в файле /proc/net/ip_masquerade Эти ассоциации имеют время ожидания бездеятельности. После окончания этого времени связь удаляется.
    Установка параметров синхронизации для IP Masquerade
    Когда новое подключение установлено, программное обеспечение IP masquerade создает ассоциацию в памяти между компьютерами, связанными с подключением. Вы можете рассматривать эти ассоциации в любое время в файле /proc/net/ip_masquerade Эти ассоциации имеют время ожидания бездеятельности. После окончания этого времени связь удаляется.


    Вы можете устанавливать время ожидания, используя
    ipfwadm. Синтаксис в общем виде такой:

    ipfwadm -M -s
    Для ipchains:

    ipchains -M -S
    Реализация iptables использует намного более длинные значения по умолчанию для таймеров и не позволяет Вам устанавливать их. Каждое из этих значений представляет таймер, используемый программным обеспечением IP masquerade. Следующая таблица описывает таймеры и их назначение:

    Имя Описание
    Время ожидания сеанса TCP. Задает как долго TCP-подключение может оставаться неактивным до того, как ассоциация для него удалится.
    Время ожидания TCP после FIN. Как долго ассоциация останется после того, как TCP-подключение было разъединено.
    Время ожидания сеанса UDP. Как долго UDP-подключение может оставаться неактивным перед тем, как ассоциация для него удалится.


    Устаревшие новости В Bnews, устаревание


    Иногда Вы хотите сохранять статьи из некоторых групп даже после того, как они устарели; например, программы, зарегистрированные в comp.sources.unix. Это называется архивированием. Файл explist разрешает Вам отмечать группы для архивирования.
    Записи в explist имеют следующий формат:
    tcp
    tcpfin
    udp

    grouplist perm times archive
    grouplist представляет собой разделенный запятыми список newsgroups (групп новостей), к которым применяется эта запись. Иерархии могут быть определены префиксом имени группы, необязательно добавляется ключ all. Например, для записи, обращающейся ко всем группам ниже иерархии comp.os, Вы могли бы ввести comp.os или
    comp.os.all.
    При устаревании новости из группы, имя будет проверено для всех записей в explist в данном порядке. Применяется первая соответствующая запись. Например, чтобы отбросить большую часть comp через четыре дня, кроме comp.os.linux.announce, которую Вы хотите хранить в течение недели, Вы просто должны иметь запись для comp.os.linux.announce, которая определяет семидневный период хранения, сопровождаемую записью для comp, которая определяет четыре дня.
    Поле perm задает детали, если запись применяется к модерируемой или другой группе с особым статусом. Оно может принимать значения m, u или x, которые обозначают модерируемый, немодерируемый или любой тип.
    Третье поле, times, обычно содержит только одно число. Это число дней, после которых статьи будут устаревать, если им не были назначены особые даты в поле Expires: в заголовке статьи. Обратите внимание, что это число дней подсчитывается с момента поступления
    на Вашу машину, а не с даты отправки статьи в группу!
    Поле times может быть и более сложным. Оно может быть комбинацией до трех чисел, отделяемых от друг друга тире. Первое обозначает число дней, которые должны пройти прежде, чем статья будет рассматривается кандидатом на устаревание. Использовать значение отличное от нуля редко бывает нужно. Второе поле определяет вышеупомянутое заданное по умолчанию число дней, после которых статья будет устаревать. Третья часть определяет число дней, после которых статья устареет безоговорочно независимо от того, имеет ли она поле Expires: или нет. Если задано только среднее число, другие два принимают значения по умолчанию. Они могут быть определены, используя специальную запись /bounds/, которая описана ниже.



    Четвертое поле, archive, обозначает, должна ли newsgroup быть заархивирована и, если да, то где. Если никакого архивирования не нужно, должно использоваться тире. Иначе Вы либо используете полное имя (указывающее на каталог), либо знак (@). Знак обозначает заданный по умолчанию каталог архивов, который должен быть задан doexpire, используя параметр

    –a в командной строке. Каталог архивов должен принадлежать news. Когда doexpire

    архивирует статью из, скажем, comp.sources.unix , он сохраняет ее в подкаталоге comp/sources/unix в каталоге архивов, создавая его если он не существует. Но сам каталог архивов не будет создан автоматически.

    Имеется две специальных записи в файле explist, на которые полагается doexpire. Вместо списка newsgroups, они имеют ключевые слова /bounds/ и /expired/. Запись /bounds/ содержит значения по умолчанию для трех значений поля times, описанного выше.

    Поле /expired/ определяет, как долго C-News будет хранить строки в файле хронологии. Это необходимо, потому что C-News не будет удалять строку из файла хронологии, если соответствующая статья устарела, но будет хранить ее в случае, если дубликат должен прибыть после этой даты. Если Вы подпитываетесь новостями с одного сайта, можете задать небольшое значение. Иначе установите порядка двух недель, в зависимости от времени хранения статей (особенно в UUCP-сетях).

    Простой файл explist воспроизведен ниже:
    # keep history lines for two weeks. No article gets more than three months /expired/ x 14 - /bounds/ x 0-1-90 - # groups we want to keep longer than the rest comp.os.linux.announce m 10 - comp.os.linux x 5 - alt.folklore.computers u 10 - rec.humor.oracle m 10 - soc.feminism m 10 - # Archive *.sources groups comp.sources,alt.sources x 5 @ # defaults for tech groups comp,sci x 7 - # enough for a long weekend misc,talk x 4 - # throw away junk quickly junk x 1 - # control messages are of scant interest, too control x 1 - # catch-all entry for the rest of it all x 2 -

    С устареванием в C News имеется ряд потенциальных проблем при чистке. Например, Ваша программа чтения новостей (newsreader) могла бы полагаться на третье поле файла active, которое содержит номер самой старой статьи. При устаревании статьи C-News не модифицирует это поле. Если Вы хотите, чтобы это поле представляло реальную ситуацию, Вы должны выполнить программу, называемую updatemin, после каждого выполнения doexpire. В старых версиях C-News аналогичные задачи возложены на скрипт upact.

    Кроме того, C-News не сканирует каталоги новостей в поисках устаревших. Вместо этого он анализирует файл хронологии (файл

    history). А ведь совсем не факт, что этот файл соответствует реальному положению дел! Например, если он оказался неправильным, на диске появятся "вечные" статьи, которые не удалятся никогда, а вот место занимать будут. Для борьбы с ними есть скрпт addmissing в каталоге /usr/lib/news/maint, который добавляет потерянные статьи в файл, или mkhistory, который просто заново создает файл history. Эти команды должны выполняться от имени пользователя news, иначе Вы получите еще худшую ситуацию, когда C-News вообще не может прочитать или обновить файл history.


    Утилита ipchains


    Аналогично ipfwadm, утилита
    ipchains может несколько сбивать с толку, пока к ней не привыкнешь. Она обеспечивает всю гибкость ipfwadm с упрощенным синтаксисом и дополнительно обеспечивает механизм наборов или цепочек (“chaining”), который позволяет Вам управлять множеством правил и связывать их друг с другом. Я рассмотрю формирование цепочки правил в отдельном разделе чуть позже.

    Утилита ipchains
    Аналогично ipfwadm, утилита
    ipchains может несколько сбивать с толку, пока к ней не привыкнешь. Она обеспечивает всю гибкость ipfwadm с упрощенным синтаксисом и дополнительно обеспечивает механизм наборов или цепочек (“chaining”), который позволяет Вам управлять множеством правил и связывать их друг с другом. Я рассмотрю формирование цепочки правил в отдельном разделе чуть позже.


    Команда ipchains появилась в дистрибутивах Linux на ядрах серии 2.2. Исходники можно взять на
    http://www.rustcorp.com/linux/ipchains. В этот пакет исходников входит скрипт ipfwadm-wrapper, который имитирует работу ipfwadm, используя возможности
    ipchains. Это существенно упрощает к новой версии firewall.


    Утилита ipfwadm


    Утилита ipfwadm (IP Firewall Administration) нужна для управления правилами в ядрах до версии 2.2.0. Ее синтаксис очень сложен, но я приведу несколько наиболее простых примеров.
    Утилита ipfwadm
    Утилита ipfwadm (IP Firewall Administration) нужна для управления правилами в ядрах до версии 2.2.0. Ее синтаксис очень сложен, но я приведу несколько наиболее простых примеров.


    Утилита ipfwadm есть во всех современных дистрибутивах Linux, но, возможно, не ставится по умолчанию. Может иметься специальный сетевой пакет, который надо поставить отдельно. Найти исходный код можно на ftp.xos.nl в каталоге /pub/linux/ipfwadm.


    Утилита iptables


    Синтаксис iptables очень похож на синтаксис ipchains. Разница в поддержке модулей расширения и ряде новшеств в фильтрации пакетов. Разумеется, я приведу пример и для iptables, так что Вы сможете сравнить эти две утилиты.

    Утилита iptables
    Синтаксис iptables очень похож на синтаксис ipchains. Разница в поддержке модулей расширения и ряде новшеств в фильтрации пакетов. Разумеется, я приведу пример и для iptables, так что Вы сможете сравнить эти две утилиты.


    Утилита iptables входит в пакет netfilter, исходники которого можно скачать с http://www.samba.org/netfilter. Она также входит в дистрибутивы Linux на ядре 2.4. Правда, поскольку это ядро еще находится на стадии тестирования, я пока не встречал дистрибутивов на нем.
    Мы будем говорить относительно огромного шага вперед, сделанного netfilter, в соответствующем разделе этой главы чуть позже.


    Утилиты настройки интерфейса IPX


    Greg Page разработал набор утилит настройки IPX, который является обычным пакетом в современных дистрибутивах и может быть также получен в исходной форме по anonymous FTP с http://metalab.unc.edu/
    (файл /pub/Linux/system/filesystems/ncpfs/ipx.tgz).

    Утилиты настройки интерфейса IPX
    Greg Page разработал набор утилит настройки IPX, который является обычным пакетом в современных дистрибутивах и может быть также получен в исходной форме по anonymous FTP с http://metalab.unc.edu/
    (файл /pub/Linux/system/filesystems/ncpfs/ipx.tgz).


    Скрипт rc обычно выполняет инструментальные средства IPX при загрузке.


    Uucico сообщает, что сайт уже заблокирован


    Это означает, что uucico обнаружил файл блокировки для удаленной системы в /var/spool/uucp. Файл блокировки может остаться от прошлого обращения к системе, если ее работа была прервана некорректно. Однако, также правдоподобно, что есть другой процесс uucico, который пробует вызвать удаленную систему, но по какой-то причине связь пока не установил. Если этот процесс не преуспел в соединение с удаленной системой, уничтожьте его и удалите все файлы блокировки, которые он оставил.

    Uucico сообщает, что сайт уже заблокирован
    Это означает, что uucico обнаружил файл блокировки для удаленной системы в /var/spool/uucp. Файл блокировки может остаться от прошлого обращения к системе, если ее работа была прервана некорректно. Однако, также правдоподобно, что есть другой процесс uucico, который пробует вызвать удаленную систему, но по какой-то причине связь пока не установил. Если этот процесс не преуспел в соединение с удаленной системой, уничтожьте его и удалите все файлы блокировки, которые он оставил.




    Самое лучшее решение проблем маршрутизации


    Самое лучшее решение проблем маршрутизации почты в UUCP-сетях: принятие системы имен доменов в UUCP-сетях. Конечно, Вы не можете сделать запрос серверу преобразования имен по UUCP. Однако, многие UUCP-абоненты сформировали малые домены, которые внутренне координируют маршрутизацию. В картах эти области объявляют одну или две машины как их шлюз почты так, чтобы не было записи карты для каждой машины в области. Шлюз обрабатывает всю почту области. Схема маршрутизации внутри области (домена) полностью невидима для внешнего мира.

    UUCP и RFC-822

    Самое лучшее решение проблем маршрутизации почты в UUCP-сетях: принятие системы имен доменов в UUCP-сетях. Конечно, Вы не можете сделать запрос серверу преобразования имен по UUCP. Однако, многие UUCP-абоненты сформировали малые домены, которые внутренне координируют маршрутизацию. В картах эти области объявляют одну или две машины как их шлюз почты так, чтобы не было записи карты для каждой машины в области. Шлюз обрабатывает всю почту области. Схема маршрутизации внутри области (домена) полностью невидима для внешнего мира.

    Это очень хорошо работает со схемой smart-host routing

    маршрутизации, описанной выше. Глобальная информация маршрутизации поддерживается шлюзом, а машины внутри области получают только маленький файл paths, который перечисляет маршруты внутри их области и маршрут к хабу почты. Даже шлюз почты не должен иметь информации маршрутизации для каждой UUCP-машины в мире. Например, запись pathalias, показанная ниже направляет всю почту для абонента в домене sub.org на машину smurf:

    .sub.org swim!smurf!%s

    Любая почта, адресованная claire@jones.sub.org будет послана на машину swim с адресом smurf!jones!claire.

    Иерархическая организация области имен позволяет серверам почты смешивать более специфические маршруты с менее специфическими. Например, система во Франции может иметь специфические маршруты для подобластей fr, но направлять любую почту для машин в области США на некоторую систему в США. Таким образом, основанная на областях маршрутизация значительно уменьшает размер баз данных маршрутизации и административные затраты.



    Основная польза от применения имен области в UUCP-среде в том, что согласие с RFC 822 разрешает простой переход между UUCP-сетями и Internet. Многие UUCP области в настоящее время имеют связь со шлюзами Internet, которые действуют как их smart-host routing. Посылка сообщений через Internet быстрее, и информация маршрутизации намного более надежна, потому что машины Internet могут использовать DNS вместо карт Usenet.

    Чтобы быть доступными из Internet, uucp-домены обычно имеют шлюз в Internet и объявляют запись MX для них (MX-записи были описаны выше). Например, допустим, что moria принадлежит к домену orcnet.org. Машина gcc2.groucho.edu действует как шлюз в Internet. Следовательно, moria использовала бы gcc2 как smart-host так, чтобы вся почта для иностранных областей была передана через Internet. С другой стороны, gcc2 объявил бы запись MX для *.orcnet.org и передавал всю входящую почту для абонентов orcnet через машину moria.

    Единственая остающаяся проблема состоит в том, что транспортные программы UUCP не могут иметь дело с именами области. Большинство UUCP программ было разработано, чтобы справиться с именами длиной до восьми символов. Использование не алфавитно-цифровых символов, например, точек, полностью вне правил.

    Следовательно, некоторое отображение между именами RFC 822 и UUCP hostname необходимо. Один общий способ отображения FQDN на имена UUCP состоит в том, чтобы использовать для этого файл pathalias:

    moria.orcnet.org ernie!bert!moria!%s

    Это создаст чистый путь uucp-стиля из адреса, который определяет имя домена. Некоторые почтовые программы имеют для этого специальные файлы: sendmail, например, использует

    uucpxtable.

    Обратное преобразование (domainizing)) иногда требуется при посылке почты из UUCP-сети в Internet. Как только отправитель почты использует имя домена в адресе назначения, этой проблемы можно избежать. не удаляя имя области из адреса конверта при пересылке сообщения на smart-host. Однако, все еще есть абоненты UUCP, которые не являются частью домена. Они обычно определяются добавлением псевдодомена uucp.



    База данных pathalias обеспечивает направляющую информацию в uucp-сетях. Типичная запись походит на эту (имя сервера и путь отделяются метками табуляции):

    moria.orcnet.org ernie!bert!moria!%s moria ernie!bert!moria!%s

    Это направляет любое сообщение к moria через ernie и bert . Полное доменное имя moria и его имя в UUCP должны быть заданы, если почтовая программа не имеет отдельного способа связи имен.

    Если Вы хотите направлять все сообщения на машины внутри некоторой области на сервер почты, Вы можете также определять путь в базе данных pathalias, давая имя области как целевой с предшествующей точкой. Например, если все машины в sub.org могут быть достигнуты через swim!smurf, запись pathalias могла бы выглядеть следующим образом:

    .sub.org swim!smurf!%s

    Запись в файл pathalias является допустимой только, когда Вы имеете сервер, который не должен делать много маршрутизации. Если Вы должны делать маршрутизацию для большого количества машин, лучший способ использовать команду pathalias, чтобы создать файл из файлов карты. Карты могут поддерживаться намного проще, потому что Вы можете просто добавлять или удалять систему, редактируя запись карты системы, и вновь создавать файл карты. Хотя карты, изданные Usenet Mapping Project, не очень хороши для маршрутизации, UUCP-сети могут обеспечивать информацию маршрутизации в их собственном наборе карт.

    Файл карты в основном состоит из списка абонентов, печатая абонентов каждого опроса системы. Имя системы начинается в первом столбце и сопровождается отделенным запятой списком связей. Список может быть продолжен через символ перевода строки, если следующая строка начинается с метки табуляции. Каждая связь состоит из имени машины, сопровождаемого стоимостью, данной в скобках. Доступность определяется выражением, состоящим из чисел с ключевыми словами, например, DAILY или WEEKLY. Строки, начинающиеся знаком #, игнорируются.

    Например, рассмотрим moria, который опрашивает swim.twobirds.com два раза в день, и bert.sesame.com только раз в неделю. Кроме того, связь с bert использует медленный модем на 2400bps. Машина moria издаст следующую запись карты:



    moria.orcnet.org bert.sesame.com(DAILY/2), swim.twobirds.com(WEEKLY+LOW) moria.orcnet.org = moria

    Последняя строка делает moria известной под именем UUCP. Обратите внимание, что для этой связи должно быть DAILY/2, при вызове два раза в день.

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

    Команда pathalias обеспечивает пару других возможностей, подобно скрывающемуся пункту (то есть абонент, доступный только через шлюз) и т.д. См. man-страницу pathalias для уточнения, а также для полного списка издержек связи.

    Комментарии в файле карты содержат дополнительную информацию относительно абонента, описанного в нем. Имеется жесткий формат, чтобы определить эти комментарии так, чтобы данные про абонента могли быть восстановлены из карт. Например, программа, называемая uuwho, использует базу данных, созданную из файлов карты, чтобы отобразить эту информацию приятным способом. Когда Вы регистрируете свой сайт в организации, которая распространяет файлы карты, Вы вообще должны заполнить такую запись карты. Ниже приведена типовая запись карты (фактически, это запись для моей машины):

    #N monad, monad.swb.de, monad.swb.sub.org #S AT 486DX50; Linux 0.99 #O private #C Olaf Kirch #E okir@monad.swb.de #P Kattreinstr. 38, D-64295 Darmstadt, FRG #L 49 52 03 N / 08 38 40 E #U brewhq #W okir@monad.swb.de (Olaf Kirch); Sun Jul 25 16:59:32 MET DST 1993 # monad brewhq(DAILY/2) # Domains monad = monad.swb.de monad = monad.swb.sub.org

    Незаполненное пространство после первых двух символов представляет собой метку табуляции. Значение большинства полей довольно очевидно; Вы получите детализированное описание в любой области, в которой Вы регистрируетесь. Поле L наиболее забавно: оно задает Вашу географическую позицию в latitude/longitude и используется, чтобы рисовать карты postscript, которые показывают всех абонентов для каждой страны.


    UUCP поверх TCP


    В первый момент это может показаться абсурдом, но на самом деле UUCP поверх TCP не такая уж плохая идея, особенно при пересылке большого количества данных, типа новостей Usenet. На TCP-узлах новостями в основном обмениваются, используя NNTP протокол, в котором статьи запрашиваются и посылаются индивидуально, без сжатия и прочей оптимизации. Хотя и подходящая для больших узлов с большим объемом новостей, эта методика не подходит для небольших участков сети, которые получают новости медленным соединением типа ISDN. Им удобней объединить качества TCP с преимуществами посылки новостей в больших пакетах, которые могут быть сжаты и таким образом перемещаться с очень низкими затратами. Стандартный способ передать эти пакеты состоит в том, чтобы использовать UUCP поверх TCP.

    UUCP поверх TCP
    В первый момент это может показаться абсурдом, но на самом деле UUCP поверх TCP не такая уж плохая идея, особенно при пересылке большого количества данных, типа новостей Usenet. На TCP-узлах новостями в основном обмениваются, используя NNTP протокол, в котором статьи запрашиваются и посылаются индивидуально, без сжатия и прочей оптимизации. Хотя и подходящая для больших узлов с большим объемом новостей, эта методика не подходит для небольших участков сети, которые получают новости медленным соединением типа ISDN. Им удобней объединить качества TCP с преимуществами посылки новостей в больших пакетах, которые могут быть сжаты и таким образом перемещаться с очень низкими затратами. Стандартный способ передать эти пакеты состоит в том, чтобы использовать UUCP поверх TCP.


    В файле sys Вы определяете систему, которую нужно вызвать через TCP.

    system gmu address news.groucho.edu time Any port tcp-conn chat ogin: vstout word: clouseau
    Команда address задает IP-адрес машины или ее полное доменное имя. Соответствующий участок файла port выглядел бы так:

    port tcp-conn type tcp service 540
    Этот пример говорит, что TCP-соединение должно использоваться, когда файл sys ссылается на tcp-conn , и что uucico должен пытаться соединяться с TCP-портом 540 на удаленной машине. Это заданный по умолчанию номер порта для обслуживания UUCP. Вместо номера порта, Вы можете также давать символическое имя порта командой service. Номер порта, соответствующий этому имени будет найден в файле
    /etc/services. Общее имя для UUCP-сервиса uucpd .


    Вернемся к нашему примеру


    Снова предположим, что мы имеем сеть в нашей организации, и используем Linux firewall для предоставления доступа к нашим серверам WWW из Internet, но при этом хотим блокировать любой другой трафик.

    Вернемся к нашему примеру
    Снова предположим, что мы имеем сеть в нашей организации, и используем Linux firewall для предоставления доступа к нашим серверам WWW из Internet, но при этом хотим блокировать любой другой трафик.


    Если наша сеть имеет 24-битную маску подсети (класс C) и имеет сетевой адрес 172.16.1.0, следует использовать такое правило
    ipchains:

    # ipchains -F forward
    # ipchains -P forward DENY
    # ipchains -A forward -s 0/0 80 -d 172.16.1.0/24 -p tcp -y -j DENY # ipchains -A forward -s 172.16.1.0/24 -d 0/0 80 -p tcp -b -j ACCEPT
    Первая команда удаляет все правила из набора forward , вторая устнавливает действие по умолчанию для
    forward в DENY. Третья и четвертая команды делают специфическую фильтрацию, которую мы хотим. Четвертая команда разрешает доступ к web-серверам, а третья запрещает входящие TCP-подключения с порта 80.
    Если мы теперь хотим добавить правила, которые предоставят только пассивный режим доступа к FTP-серверу снаружи сети, мы добавим правила:

    # ipchains -A forward -s 0/0 20 -d 172.16.1.0/24 -p tcp -y -j DENY # ipchains -A forward -s 172.16.1.0/24 -d 0/0 20 -p tcp -b -j ACCEPT # ipchains -A forward -s 0/0 21 -d 172.16.1.0/24 -p tcp -y -j DENY # ipchains -A forward -s 172.16.1.0/24 -d 0/0 21 -p tcp -b -j ACCEPT


    Вернемся к нашим примерам


    Теперь используя netfilter, Вы могли бы просто загружать модуль ipchains.o и работать с ним, как с ipchains. Вместо этого, мы повторно напишем наши правила, используя iptables.

    Вернемся к нашим примерам
    Теперь используя netfilter, Вы могли бы просто загружать модуль ipchains.o и работать с ним, как с ipchains. Вместо этого, мы повторно напишем наши правила, используя iptables.


    Как и раньше, мы предполагаем, что есть сеть некоей организации, на Linux-машине запущен firewall. Все внутренние пользователи имеют доступ к WWW-серверам в Internet, но и только.
    Если сеть использует сетевую маску в 24 бита (класс C) и имеет адрес сети 172.16.1.0, нужно использовать правила iptables:

    # modprobe ip_tables # iptables -F FORWARD # iptables -P FORWARD DROP # iptables -A FORWARD -m tcp -p tcp -s 0/0 --sport 80 -d 172.16.1.0/24 / --syn -j DROP # iptables -A FORWARD -m tcp -p tcp -s 172.16.1.0/24 --sport / 80 -d 0/0 -j ACCEPT # iptables -A FORWARD -m tcp -p tcp -d 172.16.1.0/24 --dport 80 -s 0/0 -j / ACCEPT
    В этом примере iptables работает точно как команда ipchains. Вся разница в том, что надо предварительно загрузить модуль ip_tables.o. Обратите внимание, что iptables не поддерживает опцию
    -b, так что мы должны отдельно задать правило для каждого направления.


    Все про ifconfig Имеются еще несколько


    interface имя интерфейса и address IP-адрес, который требуется назначить интерфейсу. Это может быть IP-адрес или имя, которое ifconfig будет искать в файле /etc/hosts.
    Если ifconfig используется только с именем интерфейса, он показывает конфигурацию этого интерфейса. Когда он вызывается без параметров, он показывает все интерфейсы, которые Вы отконфигурировали; опция –a вынуждает его показать и бездействующие. Вывод для Ethernet-интерфейса eth0
    может напоминать это:

    # ifconfig eth0
    eth0 Link encap 10Mbps Ethernet HWaddr 00:00:C0:90:B3:42 inet addr 172.16.1.2 Bcast 172.16.1.255 Mask 255.255.255.0 UP BROADCAST RUNNING MTU 1500 Metric 0 RX packets 3136 errors 217 dropped 7 overrun 26 TX packets 1752 errors 25 dropped 0 overrun 0
    Поля MTU и Metric
    показывают текущее MTU и метрическое значение для этого интерфейса. Метрическое значение традиционно используется некоторыми операционными системами, чтобы вычислить сложность маршрута. Linux не использует это значение, но определяет его для совместимости.
    Строки RX и TX
    показывают, сколько пакетов были получены или переданы без ошибок, сколько произошло ошибок, сколько пакетов были потеряны, вероятно, из-за нехватки памяти и сколько были потеряны из-за переполнения. Переполнение приемника обычно случается, когда пакеты ходят быстрее, чем ядро может их обслужить. Значения флагов, выводимые ifconfig, передают дополнительную информацию об именах и опциях командной строки, они будут объяснены ниже.
    Следующий список параметров используется ifconfig с соответствующими названиями флагов, заданными в скобках. Опция которая просто включает некоторую возможность, также позволяет ее выключать, если названию опции предшествует тире (-).
    up
    Эта опция делает интерфейс доступным для IP-уровня. Она подразумевается, когда задается IP-адрес. Также используется для перезапуска интерфейса, который временно выключен опцией down.
    Соответствует флагам UP и
    RUNNING.
    down
    Она делает интерфейс недоступным IP-уровню. Эффективно отключает любой IP-трафик через интерфейс. Обратите внимание, что она не удаляет все маршрутизационные записи, которые используют этот интерфейс. Если Вы постоянно выключаете некий интерфейс, Вы должны удалить эти записи сами и предоставить, если возможно, альтернативные маршруты.
    netmask mask



    Назначает маску подсети для использования интерфейсом. Здесь можно задавать как любое шестнадцатиричное число с 32 битами, которому предшествует 0x, так и десятичные числа, разделенные точками.

    pointopoint address

    Эта опция используется для point-to-point IP-соединений. Необходима, чтобы отконфигурировать, например, SLIP или PLIP интерфейсы. Если адрес для point-to-point был установлен, ifconfig показывает флаг POINTOPOINT.

    broadcast address

    Широковещательный адрес обычно создается из сетевого адреса установкой всех бит части машины. Некоторые реализации IP используют другую схему, эта опция помогает приспособиться к этим странным средам. Если широковещательный (broadcast) адрес был установлен, ifconfig показывает флаг BROADCAST .

    irq

    Задает номер IRQ для устройства. Обычно используется для PLIP, но может пригодиться и для некоторых карт Ethernet.

    metric number

    Эта опция может использоваться для назначения метрического значения записи таблицы маршрутизации, созданной для интерфейса. Эта метрика используется в RIP для построения таблиц маршрутизации. Установленное по умолчанию значение равно нулю. Если Вы не используете RIP-демон, Вы не нуждаетесь в этой опции вообще; если используете, Вы редко должны будете изменять это значение.

    mtu bytes

    Эта опция устанавливает Maximum Transmission Unit (максимальную длину передаваемого пакета). Для Ethernet MTU по умолчанию 1500, для SLIP интерфейсов 296.

    arp

    Это опция определена для широковещательных сетей типа пакетного радио или Ethernet. Она позволяет использовать ARP, протокола поиска адреса, используемый для определения физического адреса машины, включенной в сеть. Для широковещательных сетей, включен по умолчанию. Если ARP выключен, ifconfig отобразит флаг NOARP.

    -arp

    Запрещает использование ARP на этом интерфейсе.

    promisc

    Помещает интерфейс в состояние promiscuous. В широковещательной сети это заставляет интерфейс получать все пакеты независимо от того, были ли они предназначены для этой машины или нет. Это позволяет, используя фильтры пакетов, анализировать сетевой трафик. Обычно, это хорошая техника охоты на сетевые проблемы, которые иначе трудно отловить. Здесь весьма полезна утилита tcpdump. С другой стороны, это позволяет хакерам исследовать движение паролей по сети и делать другие черные дела. Одна защита против этого типа нападения: не позволять присоединяться к сети чужим компьютерам. Другой способ: использовать безопасные опознавательные протоколы, типа Kerberos, или SRA login. Эта опция соответствует флагу PROMISC.

    –promisc

    Запрещает режим promiscuous.

    allmulti

    Multicast-адреса представляют собой особый подвид широковещательных адресов позволяющих обращаться к группе машин, которые не обязательно должны быть в той же самой подсети. Они весьма полезны при сетевых голосовых переговорах и видеоконференциях. Поддерживаются многими, но не всеми картами Ethernet. Эта опция соответствует флагу ALLMULTI.

    -allmulti

    Запрещает multicast-адреса.


    Введение в Taylor UUCP


    Сказать, что конфигурация UUCP является тяжелой, было бы замалчиванием фактов. Это, действительно, запутанная тема, и иногда краткий формат файлов конфигурации не делает вещи проще (хотя формат Talyor читается очень просто по сравнению с более старыми форматами в HDB или Version 2).

    Введение в Taylor UUCP
    Сказать, что конфигурация UUCP является тяжелой, было бы замалчиванием фактов. Это, действительно, запутанная тема, и иногда краткий формат файлов конфигурации не делает вещи проще (хотя формат Talyor читается очень просто по сравнению с более старыми форматами в HDB или Version 2).


    Чтобы дать Вам понять, как взаимодействуют все эти файлы, представим наиболее важное и будем просматривать типовые записи этих файлов. Мы не будем объяснять все подробно; более точные сведения даны в отдельных разделах ниже. Если Вы хотите установить на Вашу машину UUCP, лучше всего начать с типовых файлов и адаптировать их постепенно. Вы можете выбирать из предложенного ниже набора примеров или того, что есть в Вашем дистрибутиве Linux.
    Все файлы, описанные в этом разделе хранятся в
    /etc/uucp или в его подкаталогах. Некоторые дистрибутивы Linux содержат код UUCP, который поддерживает HDB и Taylor конфигурации, и используют различные подкаталоги для каждого набора файлов конфигурации. Обычно есть файл README в каталоге
    /usr/lib/uucp.
    Чтобы UUCP работал правильно, эти файлы должны принадлежать пользователю uucp. Некоторые из них содержат пароли и номера телефона, и следовательно, должны иметь права доступа 600. Обратите внимание, что хотя большинство команд UUCP должно иметь бит setuid на имя uucp, Вы должны удостовериться, что программа uuchk такого бита не имеет. Иначе, пользователи будут способны отобразить пароли системы даже при том, что файлы имеют режим доступа 600.
    Центральный файл конфигурации UUCP называется
    /etc/uucp/config. Он используется, чтобы установить общие параметры. Наиболее важный из них (и теперь единственный), является именем UUCP Вашей системы. Для нашей модельной сети Virtual Brewery использован vstout в качестве шлюза UUCP:




    # /etc/uucp/config - UUCP main configuration file nodename vstout
    Следующий важный файл конфигурации называется sys . Он содержит всю системно-специфическую информацию об участках сети, с которыми Вы связаны. Она включает имя участка и информацию относительно связи, например, номера телефонов при использовании связи по модему. Типичный скрипт для модемной связи с машиной pablo:

    # /usr/lib/uucp/sys - name UUCP neighbors # system: pablo system pablo time Any phone 555-22112 port serial1 speed 38400 chat ogin: vstout ssword: lorca
    Ключевое слово port задает порт, который нужно использовать, time определяет время, в которое система может вызываться. chat описывает сценарии входа в систему: последовательность строк, которыми нужно обменяться, чтобы uucico зарегистрировали на pablo. Мы опишем сценарий входа позже. Команда port не называет конкретный файл устройства, например, /dev/cua1, она указывает на файл с соответсвующими записями. Вы можете назначить любое походящее имя.
    Файл port содержит информацию о связи непосредственно. Для модемной связи он описывает специальный файл устройства, который нужно использовать, скорость и тип оборудования, соединенного с портом. Пример ниже описывает /dev/ttyS1 (он же COM2), с которым соединен модем NakWell способный к передаче на скорости до 38400bps. Имя порта должно соответствовать имени, заданному в файле sys.

    # /etc/uucp/port - UUCP ports # /dev/ttyS1 (COM2) port serial1 type modem device /dev/ttyS1 speed 38400 dialer nakwell
    Информация, имеющая отношение к программам набора номера, cохраняется в другом файле, называемом dial. Для каждого типа программы набора номера он содержит последовательность команд, которые требуются, чтобы вызвать удаленную машину по номеру телефона. Все это называется chat script (сценарий дружеской системы). Пример для вышеупомянутого NakWell мог бы выглядеть следующим образом:

    # /etc/uucp/dial - per-dialer information # NakWell modems dialer nakwell chat "" AT&F OK ATDT\T CONNECT
    <


    /p>
    Строка, начинающаяся с chat, определяет скрипт модема, который является последовательностью команд, посланных и полученных от модема, чтобы инициализировать его и набрать желательный номер. Последовательность \T будет заменена на номер телефона uucico.
    Чтобы в общем показать Вам, как uucico работает с этими файлами конфигурации, предположим, что Вы дали команду:

    $ uucico -s pablo
    Первым делом uucico ищет pablo в файле sys. Из строки в файле sys для pablo она видит, что должна использовать порт serial1 для установки соединения. Файл port сообщает uucico, что serial1 является портом модема, и что есть подключенный модем NakWell.
    uucico теперь ищет запись dial , описывающую модем NakWell, и найдя первую такую запись, открывает последовательный порт /dev/cua1 и выполняет "дружескую беседу" программы набора номера. То есть, посылает AT&F, ждет в ответ OK и т.д. При столкновении со строкой \T, она заменяет эту строку на номер телефона (555-22112), извлеченный из файла sys.
    После того, как соединение будет установлено (модем вернет CONNECT), uucico возвращается к файлу sys и выполняет дружескую беседу входа в систему (login chat). В нашем примере она ждет приглашения login: затем посылает имя пользователя (vstout), ждет приглашения password: и посылает пароль (lorca).
    После завершения авторизации удаленная система активизирует собственный uucico. Две копии uucico
    проводят фазу рукопожатия (handshake phase), описанную в предыдущем разделе. Я прекрасно понимаю, что термины "фаза рукопожатия" и "дружеская беседа входа в систему" звучат не очень удачно, но эквивалентная русская терминология в этой области отсутствует.

    Вы можете соединиться с удаленной системой, но происходит сбой скрипта регистрации


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

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




    Вы регистрируетесь, но происходит сбой авторизации


    Может быть ряд проблем. Посмотрите, какими протоколами пользуется удаленная система (она посылает строку P protlist
    в течение авторизации). Обе стороны должны поддерживать по крайней мере один общий протокол, так что проверьте, что они делают.

    Вы регистрируетесь, но происходит сбой авторизации
    Может быть ряд проблем. Посмотрите, какими протоколами пользуется удаленная система (она посылает строку P protlist
    в течение авторизации). Обе стороны должны поддерживать по крайней мере один общий протокол, так что проверьте, что они делают.


    Если удаленная система посылает RLCK, имеется просроченный lockfile (файл блокировки) для Вас на удаленной системе. Если Вы еще не соединены с удаленной системой на другой линии, попросите удалить его.
    Если удаленная система посылает RBADSEQ, она проверила Ваш логин, но числа опознания не совпали. Если она посылает RLOGIN, Вам не разрешили входить в систему под этим идентификатором.


    Выбор IP-адресов


    Все IP-интерфейсы требуют назначения им IP-адресов. Поэтому устройство PPP тоже должно иметь IP-адрес. Протокол PPP предоставляет механизм, который позволяет автоматически присваивать IP-адреса PPP-интерфейсам.

    Выбор IP-адресов
    Все IP-интерфейсы требуют назначения им IP-адресов. Поэтому устройство PPP тоже должно иметь IP-адрес. Протокол PPP предоставляет механизм, который позволяет автоматически присваивать IP-адреса PPP-интерфейсам.


    Некоторые PPP-серверы, которые обрабатывают множество клиентов, приписывают адреса динамически: адреса назначены системам только, когда существует обращение и освобождаются после того, как сеанс связи закончен. Это позволяет ограничить число требуемых адресов числом линий dialup. В то время, как ограничение удобно для администраторов PPP dialup-сервера, оно часто куда менее удобно для пользователей. Мы обсуждали путь, которым имена преобразуются в адреса, в главе 6. Когда происходит соединение с таким сервером, вы должны удостовериться, что pppd не запрашивает какой-либо IP-адрес с него, но когда адрес будет выдан, сервер попросит вас, чтобы вы использовали именно его. Это означает, что если кто-то пытается связаться с вашим компьютером, он должен будет знать его текущий адрес, а обеспечить это не так-то просто.
    В примере выше, у нас был pppd, связывающейся с c3po и устанавливающий IP-связь. Никакие условия не принимались для того, чтобы выбрать частный адрес IP на любом конце связи. Взамен мы выбрали адрес vlager как локальный адрес IP и позволили c3po обеспечить себя собственным. Иногда полезно иметь контроль над тем, какой адрес используется на одном или другом конце связи.
    Чтобы просить о частных адресах, вы вызываете pppd
    со следующеми опциями:

    local_addr:remote_addr
    local_addr и remote_addr могут быть определены в dotted quad notation или как имена машин. Это заставит
    pppd попытаться использовать первый адрес как собственный адрес IP, а второй как адрес удаленной машины. Если удаленная машина отклоняет любой из них в течение IPCP-переговоров, связь IP не будет установлена.
    Если вы звоните на сервер и ожидаете, что он назначит вам IP-адрес, надо гарантировать отсутствие неожиданных инициатив со стороны
    pppd. Чтобы сделать это, используйте опцию noipdefault и оставьте поле local_addr пустым. Опция noipdefault избавит от попытки pppd использовать адрес IP, связанный с именем машины как локальный адрес.
    Если Вы хотите устанавливать только локальный адрес, но удаленный адрес примете любой, просто не указывайте remote_addr . Чтобы vlager использовал IP-адрес 130.83.4.27 вместо своего, укажите 130.83.4.27: в командной строке. Точно так же, чтобы установить только удаленный адрес, оставьте пустым поле local_addr. По умолчанию pppd использует адрес, связанный с вашим именем машины (hostname).


    Выполнение заданий NetWare на


    Единственная требуемая опция для nprint имя файла для печати. Если имя файла не задано, nprint примет задание по выводу на печать из stdin. Наиболее важные параметры nprint определяют сервер и очередь. Таблица 15-4
    перечисляет наиболее важные параметры.


    Взаимодействие nntpd и C-News


    Чтобы правильно выполнить протокол ihave/sendme, nntpd должен обратиться к файлу history. Во время компиляции, Вы должны удостовериться, что путь установлен правильно. Вы должны также удостовериться, что C-news и nntpd
    договорятся о формате вашего файла history. C-news использует dbm-функции, чтобы обратиться к нему, однако, имеются несовместимые реализаций библиотеки dbm . Если C-news был связан с одной библиотекой dbm , а ваша библиотека libc с другой, они точно передерутся. Значит, Вы должны пересобрать nntpd с правильной библиотекой.
    Типичный признак того что nntpd и C-news не соглашаются относительно формата базы данных, это сообщения об ошибках в файле регистрации системы о том, что nntpd не может открыть его правильно, или двойные статьи, полученные через NNTP. Хороший тест: выбрать статью из вашей области spool, сделать telnet к порту nntp и попробовать обратиться к
    nntpd как показано в примере ниже. Конечно, вы должны заменить msg@id на ID-сообщение статьи, которую хотите передать nntpd:

    $ telnet localhost nntp
    Trying 127.0.0.1... Connected to localhost Escape characters is '^ ]'. 201 vstout NNTP[auth] server version 1.5.11t (16 November 1991) ready at Sun Feb 6 16:02:32 1194 (no posting)
    IHAVE msg@id
    435 Got it. QUIT
    Этот диалог показывает реакцию nntpd. Сообщение Got it покажет, что эта статья уже имеется. Если вы получаете сообщение 335 Ok, поиск в файле history потерпел неудачу. Завершите диалог нажатием Ctrl-D. Вы можете проверять, что пошло неправильно, проверяя файл регистрации системы:
    nntpd регистрирует все виды сообщений в syslog. Несовместимая библиотека dbm обычно проявляется в сообщении о том, что dbminit потерпел неудачу.


    Xerox, Novell и немного истории


    Novell Corporation создала свой набор протоколов на основе протоколов XNS. Novell слегка расширила IDP и SPP и переименовала их соответственно в IPX (Internet Packet eXchange) и SPX (Sequenced Packet eXchange). Novell добавила новые протоколы, типа NetWare Core Protocol (NCP), который обеспечил свойства разделения файлов и принтеров по сети IPX, и Service Advertisement Protocol (SAP), который давал возможность компьютерам в Novell-сети знать, который компьютер какие услуги обеспечивает.
    Таблица 15-1 показывает связь между наборами XNS, Novell и TCP/IP в терминах функций. Связи только приблизительные, но они должны помочь вам понять, что там происходит, когда мы займемся этими протоколами позже.


    Запуск Exim Для запуска Exim


    Любой режим работы Вы выбираете для каждого компьютера индивидуально. Вы должны удостовериться, что имеете следующую запись в файле /etc/services:

    smtp 25/tcp # Simple Mail Transfer Protocol
    Это определяет номер порта TCP для протокола SMTP. Он определен как 25 в "Assigned Numbers" RFC (RFC-1700).
    При запуске в режиме демона Exim переходит в фоновый режим и ждет соединений через SMTP-порт. Когда подключение происходит, он разветвляется, и порожденный процесс проводит сеанс связи SMTP с таким же процессом на удаленной машине. Exim daemon обычно вызывается из rc скрипта при загрузке командой:

    /usr/sbin/exim -bd -q15m
    Параметр –bd включает режим daemon, а –q15m заставляет обрабатывать любые сообщения, накопленные в очереди сообщений, каждые 15 минут.
    Если нужно использовать inetd, впишите в файл /etc/inetd.conf такую строку:

    smtp stream tcp nowait root /usr/sbin/exim in.exim -bs
    Помните, что после изменений этого файла нужно сообщить inetd, чтобы он перечитал
    inetd.conf. Для этого после внесения изменений пошлите ему сигнал HUP.
    Режимы daemon и inetd взаимоисключающие. Если Вы запускаете Exim в режиме daemon, удостоверьтесь, что в
    inetd.conf закомментированы все строки для протокола smtp. Аналогично, при запуске Exim через inetd проверьте, чтобы в скриптах rc не было команды на загрузку Exim как daemon.
    Вы можете проверять, что Exim правильно установлен для получения входящих SMTP-сообщений, соединяясь программой telnet с SMTP-портом на Вашей машине. При нормальной работе системы Вы увидите примерно следующее:

    $ telnet localhost smtp
    Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 richard.vbrew.com ESMTP Exim 3.13 #1 Sun, 30 Jan 2000 16:23:55 +0600 quit
    221 richard.brew.com closing connection Connection closed by foreign host.
    Если этот тест не выдаст приглашение SMTP (строка, начинающаяся с кода 220), проверьте правильно ли запущен Exim. Если все в порядке, смотрите протоколы Exim (описаны ниже) в случае, если имеется ошибка в файле конфигурации Exim.


    Запуск named Пакет named обеспечивает


    Этот раздел требует понимания принципов работы DNS. Если такого понимания нет, обратитесь к разделу "Как работает DNS".
    Пакет named обычно запускается при начальной загрузке системы. Реализации BIND до Version 8 берут информацию из файла конфигурации /etc/named.boot и различных файлов, которые отображают имена домена к адресам. Последние называются зональными файлами (zone files). Версии BIND после Version 8 используют /etc/named.conf вместо /etc/named.boot.
    Для запуска named скомандуйте:

    # /usr/sbin/named
    Пакет named запустится и прочитает named.boot и заданные в нем зональные файлы. Он пишет свой process ID в файл /var/run/named.pid в ASCII, загружает все зональные файлы с первичного сервера и начинает слушать порт 53 в ожидании запросов DNS.


    Запуск NFS Прежде, чем Вы сможете


    Если nfs отсутствует в этом списке, Вы должны скомпилировать собственное ядро с включенным NFS. Конфигурирование сетевых опций ядра объяснено в разделе "Настройка ядра" главы 3.


    Защита от перехватчиков почты


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

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


    Вы должны принять меры против самозванцев! Для этого необходимо потребовать, чтобы каждая система использовала имя входа в Вашу систему, заданное called-login в sys. Например:

    system pablo ... usual options ... called-login Upablo
    В результате этого всякий раз, когда система говорит, что она pablo, uucico
    проверит, регистрировалась ли она как Upablo. Если нет, вызов будет отвергнут, а соединение разорвано. Вы должны сделать привычкой добавлять команду called-login к каждой записи системы, которую Вы добавляете к Вашему файлу sys . Важно, что Вы делаете это для всех систем, независимо от того, будут ли они когда-либо вызывать Вас или нет. Для тех машин, которые никогда не вызывают Вас, Вы, возможно, должны установить called-login на некоторое полностью поддельное имя пользователя, типа neverlogsin , дабы никто точно не мог зайти.
    .


    Знакомство с NIS NIS хранит информацию


    Карты обычно генерируются из текстовых файлов типа /etc/hosts или /etc/passwd . Для некоторых файлов будет создано несколько карт, по одной для каждого типа ключа поиска. Например, Вы можете искать в файле hosts имя машины или ее IP-адрес. Соответственно, из этого файла будут получены две NIS-карты hosts.byname и hosts.byaddr . Таблица 13-1 перечисляет наиболее распространенные карты и файлы, из которых они сгенерированы.


    

        Базы данных: Разработка - Управление - Excel