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

         

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


Вы уже знаете, что команда 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.



Образец файла 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.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, соответственно.

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



Файл 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.



Простой скрипт для 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).



Типовой файл 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, в примере.



Пример конфигурации 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.



Диапазоны IP-адресов, зарезервированных для частных сетей


Таблица 2-1. Диапазоны IP-адресов, зарезервированных для частных сетей

Класс

Сети










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