Настройка и работа в Linux
adb5321d

Настройка сети


"Барышня, дайте срочно Смольный!"

Для начала настроим простую рабочую станцию. Имеется локальная сеть Ethernet с протоколом TCP/IP. Первоначально требуется скомпилировать ядро с соответствующими драйверами. Первоначально требуется поставить в соответствии IP?адресу имя компьютера (если у вашего компьютера оно есть), для в файле /etc/hosts требуется добавить строку

#IP полное имя псевдоним 127.0.0.1 localhost.localdomain localhost 195.14.21.11 blade.hell.com blade

Первая строка это комментарий, вторая это описание loopback и третья это добавленная нами строка для сети. Дальнейшее конфигурирование происходит при помощи команды ifconfig, она предназначена для сопоставления сетевого интерфейса и IP?адреса. Она имеет следующий синтаксис ifconfig <interface> [[-net -host] <address> [parameters]]

Интерфейсы для Ethernet устройств называются как eth0, eth1, и т.д. Адрес сопоставляемый интерфейсу берется либо из файла /etc/hosts (ключ -host) или из /etc/network (ключ -network). Файл /etc/network является аналогом файла /etc/hosts и предназначен для сопоставления адреса и имени для сегмента сети. parameters может принимать следующие значения



up Включение интерфейса (ставится по умолчанию).
down Выключение, обратно параметру up.
netmask <mask> Присваивает маску подсети, по умолчанию ставится равной классу подсети, в данном случае 255.255.255.0.
pointopoint <address> Используется только для интерфейсов "точка-точка", например PLIP или SLIP.
broadcast <address> Для установки широковещательного адреса, отличного от стандартного.
metric <address> Предназначен для установлении ненулевой метрики, имеет смысл ставить только для роутера.
mtu <bytes> Максимальная единица передачи данных. Для Ethernet по умолчанию равна 1500, хотя при плохой или загруженной линии ее можно уменьшить.
arp Включает ARP (Address Resolution Protocol) для обратного сопоставления имени по IP, обычно не нужен.
-arp Выключает ARP.
promisc Режим захвата ВСЕХ пакетов, мечта всякого хакера.
-promisc Выключает режим захвата.
<
После этого следует добавить маршрут в таблицу маршрутизации, для этого предназначена команда route. Ее синтаксис имеет вид route [add del] [-net -host] <target> [parameters]

Параметр <target> обозначает сеть (при ключе -net) и может браться из файла /etc/network. Если настраивать маршрутизацию на отдельный компьютер, то следует использовать ключ -host. А parameters может принимать значения аналогичные параметрам ifconfig, с дополнением параметра gw (gateway).

Следующим этапом настройки, является установка шлюза. Шлюз предназначен для соединения различных сетей. Если в вашей сети этим компьютером является компьютер с именем shield и адресом 195.14.21.13, то следует добавить в список hosts его характеристики, а затем использовать команду route с параметром gw. Например route add -net 199.221.14.0 gw shield

После всего написанного стало простым настроить шлюз, для этого нужно только настроить два интерфейса по отдельности и присвоить им уникальные IP-адреса. Полезно так же добавить оба в /etc/hosts.

Если вы все это настроили один раз, то после перезагрузки все настройки потеряются. Для это чтобы избежать этого следует включать команды ifconfig и route в сценарий загрузки сети rc.inet1 точно также как вы только что их набирали. Однако способ, когда в каждом компьютере приходится создавать один и тот же файл, не является изящным. Более удобные средства предоставляют демон gated (это аналог демона Максвелла) и метод proxy ARP (Address Resolution Protocol). Демон gated занимается тем, что динамически создает таблицу маршрутов в системе. Он необходим для больших сетей и работы с линиями "точка-точка", которые меняются динамически.

Самым мощным по сей день средством обеспечения безопасности служит так называемый firewall. Это компьютер или просто программа, которая закрывает доступ к сетевым службам и протоколам тем кому не положено. Для этого имеется минимум 2 управляющих файла: /etc/hosts.deny и /etc/hosts.allow. Структура этих файлов очень проста, в каждом только 2 столбца: сервис и хост (если вы умеете программировать консоль, то можно добавить третий столбец, но ТОЛЬКО ЕСЛИ УМЕЕТЕ). Для любого компьютера, который не служит сервером в Интернете, файл /etc/hosts.deny имеет очень простой вид ALL:ALL



После этого можно добавить нужные адреса в файл /etc/hosts.allow.

Для проверки служит команда netstat. Она имеет следующие ключи

-r таблица маршрутизации ядра
-n при отображении заменяются имена IP-адресами
-i статистические данные используемых интерфейсов
-a полные данные всех известных интерфейсов, включая ненастроенные
-t, -u, -w, -x активные сокеты TCP, UDP, RAW или UNIX
Так же для проверки служат команды ping и traceroute. Они посылают пакеты на компьютер указанный вами в значении параметров, а затем отображают статистику.

Однако простой установкой сокета мало кто ограничивается. Нужно еще настроить сетевых демонов. Для помощи в продвижении демонологии служит файл /etc/inetd.conf, это управляющий файл суперсервера демонов Интернета. С точки зрения демонологии словом "Интернет" называют самое большое из известных скопление демонов, как диких, так и домашних. Все записи в этом файле имеют вид

#service type protocol wait user server cmdline
#Внеш
login stream tcp nowait root /usr/sbin/rlogin in.rlogin
telnet stream tcp nowait root /usr/sbin/telnetd in.telnetd
ftp stream tcp nowait root /usr/sbin/ftpd in.ftpd
#tftp dgram udp wait nobody /usr/sbin/tftpd in.tfpd
#И т.д.
#Внут
daytime stream tcp nowait root internal
time stream tcp nowait root internal #И т.п.
Теперь пояснения.

service Название службы, все названия содержатся в файле /etc/services
type Тип сокета, однозначно связан с протоколом, stream для tcp, dgram для udp (User Datagram Protocol, для некоторых служб гораздо удобнее TCP).
protocols Название протокола, требуется установленный драйвер в ядре и запись в файле /etc/protocols
wait Режим приема-передачи. Обычно ставится nowait для дуплексного режима приема-передачи дейтаграмм, но для некоторых сервисов требуется wait. Для сокетов типа stream следует всегда указывать nowait.
user Под этим именем будет запущен соответствующий сервис. Не следует запускать сетевую службу под более высокой, чем требуемая, привилегией. Например, службу tftp ВСЕГДА следует запускать как nobody.
server Полное имя программы. Если сервис внутренний, то следует указать intelrnal. Внутренние сервисы служат для взаимодействия программ внутри компьютера. Кроме того, ОЧЕНЬ ПОЛЕЗНО для всех сервисов на протоколе TCP/IP использовать единый демон /usr/sbin/tcpd. Это несколько увеличит нагрузку на процессор, но значительно улучшит безопасность. (в примере не так)
cmdline Командная строка запуска, обычно просто ссылка на файл с этой строкой. Для внутренних сервисов строка не требуется.
<


Файл этот достаточно большой, и я не написал и четверти его строк. Но если вы откроете его, то увидите, что большинство строк закомментированы. Это связано с соображениями безопасности. Ни для кого (кроме разработчиков очередного "безопасного" продукта из Micro$oft) не секрет, что есть сетевые сервисы, которые содержат дыры и есть сервисы, которые даже без дыр не способны хоть что-то засекретить. Среди программистов и root'ов существует поверье, что известных дыр не содержит только самая последняя версия сервиса. Однако бывает что это не верно. Например, я специально привел строку с сервисом tftp (Trivial FTP), он предназначен для загрузки бездисковых рабочих станций, а на деле являет собой незатыкаемую дыру. Обычно, для того чтобы он корректно и относительно безопасно работал, сеть, в которой он устанавливается, делают полностью закрытой от внешнего мира файерволом. На самом загрузочном компьютере создают специальный дисковый раздел, в который только tftp и сможет адресоваться. Затем присваивают ему категорию nobody, а номера ethernet карточек фиксируют. Также опасным является сервис finger, поскольку он предоставляет информацию о работе компьютера всему миру. Нешифрованные авторизуемые службы ftp и telnet это вообще целая песнь хакера, их не ловит только ленивый.

Работа сетевого демона несколько отличается от работы обычного демона. Обычный домашний демон большую часть своей жизни спит и просыпается только для совершения необходимой работы при получении сигнала от ядра. Демон же сетевой спит редко и мониторит подотчетный ему сетевой интерфейс. При поступлении на этот интерфейс требования о соединении, демон немедленно раздваивается. Одна его локальная копия продолжает мониторить интерфейс, а другая обрабатывает соединение. После закрытия соединения локальная копия уничтожается. Исходя из этого следует строить политику запуска сетевых демонов. Службы, запуск которых обрабатывается редко, следует поручить демону tcpd, а специфическим демонам - часто используемые службы. Например, служба telnet даже в самом активно посещаемом MUD'е запускается не чаще одного - двух раз в минуту, а служба http на www-сервере средней нагрузке обрабатывает несколько десятков, а то и сотен, запросов в минуту.

Записывать все известные компьютеры в файл /etc/hosts занятие неблагодарное, а потому его полезно перепоручить компьютеру. Обычно этим занимается демон named. На самом деле это не самостоятельный демон, а часть большой библиотеки, называемой библиотекой резолвера. Задачей этой библиотеки является выполнение двух функций языка C - gethostbyname() и getnamebyhost(). Очень полезно иметь этого демона не только на сервере имен всей сети, но и на каждом компьютере, поскольку локальный демон named позволяет кешировать работу общего и разгружает сеть. Местный резолвер управляется несколькими файла, самый простой и самый важный из них - /etc/host.conf. Число его параметров очень ограничено



order Порядок опроса служб разрешения имен. Может иметь только 3 значения bind (запросить сервер DNS), hosts (искать в файле /etc/hosts) и nis (поиск в базе NIS). Может принимать все три значения одновременно.
multi Имеет значения on или off. Если стоит on, то хосты из списка /etc/hosts могут иметь несколько IP-адресов.
nospoof Тоже имеет два значения on и off, позволяет бороться с подложными именами хостов.
alert Употребляется после включения антиспуфинга в предыдущем пункте.
trim Необязательный параметр, значение которого имя домена. Полезен, если хост является членом нескольких доменов.
Для того чтобы использовать удаленный сервер имен DNS (параметр order имеет значение bind), необходимо указать, где этот сервер находится. Для этого служит файл /etc/resolv.conf, в котором только 2 параметра domain и nameserver. Значением domain является домен, в котором работает хост. А значением nameserver является IP-адрес сервера имен. Можно указывать не более трех серверов имен, причем порядок их просмотра определяется их положением в списке. Если этот файл отсутствует, то предполагается что сервер имен работает локально.

Локальный демон named управляется несколько нестандартным файлом /etc/named.boot (в нем коментарии обозначаются ;). Для примера

;/etc/named.boot для blade.hell.net directory /tmp/named ;порядок домен файл cache . named.ca primary hell.net. named.hosts primary 0.0.127.in-addr.arpa. named.local primary 14.195.in-addr.arpa. named.rev ;и т.д.

Перед описанием параметров обратите внимание как здесь пишутся имена, задом наперед, вместо неизвестной части ставится .in-addr.arpa., причем ОБЯЗАТЕЛЬНО заканчивается на точку. В этом файле ВСЕГДА должна присутствовать строка о loopback интерфейсе 127.0.0.1, как о primary, иначе многие ваши внутренние программы полезут наружу и никогда не вернутся. Теперь остальные параметры

directory Определяет каталог в который будут складываться данные, можно указать несколько.
primary Информация о зоне этого домена загружается из указанного файла.
secondary Параметров всегда три, имя домена, имя файла и имя первичного (primary) сервера. Сначала просматривается файл, затем идет обращение к первичному серверу. После получения информации, она заносится в указанный файл. Первичных серверов можно указать несколько, порядок их опроса определяется порядком записи.
cache Обязательно должен присутствовать, в качестве параметров идут имя домена и имя файла. Причем в качестве одного из доменов всегда должна быть указана точка (.).
forwarders Список серверов, к которым можно перенаправить запрос.
slave Если указан этот параметр, то named только перенаправляет запросы.
<


Получить информацию с другого компьютера в сети можно только с помощью обычных сетевых протоколов. Для этого служит еще и RPC (Remote Procedure Call). Основных применения для RPC два - это NIS (Network Information Service) и NFS (Network File System). Есть еще два побочных, понятно последствия творчества Microsoft, IIS (Internet Information Service) и SMB (сервер NetBIOS для сетей UNIX). NIS (и IIS) служит для получения информации по сети, например, с его помощью можно организовать общие пароли для всех компьютеров в локальной сети. А NFS (и SMB) служит для получения доступа к удаленным каталогам, как к локальным. Локальная сеть, организованная на NIS и NFS, очень легка для администрирования и работы, пользователь даже не должен знать, где расположен компьютер с его личным каталогом, а где с необходимой программой, он просто садится за ближайший. К сожалению, та версия NIS, с которой имел дело я, была сильно устаревшей, не обеспечивала режима теневых паролей, шифрованных соединений и надежной авторизации. Потому я напишу только об NFS.

Для того чтобы можно было начинать работу с томами (здесь это слово аналогично "удаленная файловая система") NFS, следует запустить демона NFS и установить поддержку NFS в ядре. Демоны NFS запускаются не через суперсервер демонов Интернета, а самостоятельно, через сценарий загрузки. Для этого в файле /etc/rc.d/rc.inet2 должна быть запись

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

Первый блок запускает монтировщика (он обычно включен по умолчанию), второй - NFS (он обычно закомментирован), третий - демона имен и групп ugidd.

Для управления подключением клиентов, на сервере создается управляющий файл /etc/exports. Только прописанные в этом файле клиенты имеют доступ к тому NFS на сервере. Обычно он имеет следующий вид



#/etc/exports на сервере blade /home/users bow(rw, kerberos), arrow(rw, kerberos), riposte(rw, kerberos) /usr/games bow(ro), arrow(ro), riposte(ro), blaze(ro)

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

rw Доступ для чтения и записи.
ro Доступ только для чтения. По умолчанию установлен.
kerberos Требования авторизации протоколом kerberos.
insecure Не требуется авторизации.
rpc-secure Использование стандарта закрытого RPC.
root_squash Отменяет права root'а, очень полезный флажок.
no_root_squash Обратный к предыдущему. Обратите внимание, что на большинстве систем стоит по умолчанию, представляя собой колоссальную дыру в безопасности.
unix-rpc Требование авторизации в рамках домена.
map_identify Этот режим оставляет без изменения цифровые gid и uid. Обычно включен по умолчанию.
map_deamon Обратный к предыдущему. Позволяет иметь различные gid и uid на клиенте и сервере, требует запущенного демона ugidd.
Следующие 2 параметра управляют линками на смонтированном удаленном томе. Какой из них у вас включен по умолчанию, обычно заранее сказать нельзя, просто проверьте.
link_relative Конвертирует линки из абсолютных в относительные, например линк /usr/games/q3a/quake.x86, находящийся в каталоге /usr/games/links/, превратится в ../q3a/quake.x86, если монтируется /usr/games/. После этого измененный линк будет работать в подмонтированном каталоге.
link_absolute Линки остаются без изменений, на деле требуется достаточно редко.
Теперь можно приступить к монтированию тома NFS клиентом. Для этого используется уже знакомый файл /etc/fstab. В него следует внести строки вида

#том точка монтирования тип параметры
blade:/home/users /home/users nfs hard, timeo=20
blade:/usr/games /games nfs intr, timeo=12
<


Где параметры могут быть следующими

rsize=n, wsize=n Размер пакетов клиента NFS, по умолчанию равен 1024. Менять не рекомендуется.
timeo=n Время ожидания запроса клиентом в долях секунды. По умолчанию равно 7.
hard Том монтируется жестко. Если на таком томе превышено время ожидания, то на консоль выдается предупреждение, а монтировщик будет по-прежнему пытаться установить связь.
soft Противоположен предыдущему, после достижения предельного времени том размонтируется.
intr Прерывает вызовы клиента, если сервер долгое время не доступен. Используется с параметром hard.
После этого можно монтировать том вручную или посредством автомонтировщика autofs.

Я описал лишь малую часть работы демонов Интернета и демонов RPC. Например, в последнее время стали повсеместно использоваться алгоритмы шифрования и надежной авторизации, устойчивые к перехвату пакетов хакером. Это демоны sshd (Secured SHell), slogind (Secured LOGIN) и другие. Так же я не коснулся такого вопроса как организация Интернет-сервера с демоном httpd, сервером Apache и других Интернет-служб. Не ограничиваются описанными и применения RPC, это очень мощная система, которая позволяет легко (например, одной командой export DISPLAY=blade) устанавливать достаточно сложные соединения, вроде Remote Desktop Connection из арсенала Windows2000. При этом не требуется передавать все содержимое рабочего стола, если вам требуется лишь запустить одну программу. В общем, это самостоятельное творчество, которому могут помочь только собственные усилия.

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

Если соединение осуществляется с помощью протокола PPP (а сегодня это почти всегда так), то этим соединением управляет демон pppd. Это необычный демон, он отличается от всех предыдущих тем, что ЛЮБОЙ пользователь может им управлять (даже guest). Осуществляется управление с помощью аргументов командной строки и управляющих файлов. Этих файлов может быть много, один основной, и по одному на каждого юзера. Основной файл называется /etc/ppp/options, а пользовательские файлы .rcppp, и содержатся они в домашних каталогах. Правило здесь следующее: параметры для всех файлов одинаковые, но в первую очередь просматриваются параметры из основного файла, затем из пользовательских. Параметры основного файла общедоступны и общеприняты, т.е. каждый пользователь их употребляет, но не может изменить. Параметры же пользовательских файлов личные, т.е. только владелец их знает и может изменять. Таким образом, пароли следует хранить в пользовательских файлах, а настройки модема - в общем.



/dev/ttyS0 Имя модема, если модем единственный, то следует писать в основной файл, если модемов несколько, то можно оставить на усмотрение пользователей.
crtscts Включает аппаратное разрешение передачи, без этого режима скорость будет ограничена до 9600. Пишите в основной.
defaultroute Включает маршрут PPP в качестве маршрута по умолчанию. Можно оставить на произвол пользователей, только если вы уверены в их знаниях.
auth Требует авторизации при подключении к вашему компьютеру. Обязательно следует указывать в основном файле.
lock Блокирует используемый канал. Тоже обязательно следует указывать в основном файле.
domain Имя домена. Необходим для авторизации по протоколу CHAP, который для простого соединения с Интернетом через провайдера не используется.
modem Указывает демону на работу именно с модемом, пользователи ВСЕГДА забывают это слово.
-detach Демон после соединения переходит в фоновый режим, указывайте в основном файле.
noipdefault Демон pppd в присутствии этого параметра обязан назначить для соединения тот IP, который ему предложит удаленный компьютер. Оставьте на усмотрение пользователям, только если уверены, что они не забудут его указать.
silent После указания этого параметра демон pppd будет работать в режиме сервера, т.е. после установления физического соединения будет ждать, когда с клиента поступит первый пакет. connect "сценарий" Параметр, который обязан принимать какое-либо значение. Каждый сценарий содержит номер телефона, имя и пароль пользователя. Эту строку ОБЯЗАН задавать пользователь.
Так же в качестве параметров при желании можно указать требуемую скорость соединения, IP-адрес своего хоста и IP-адрес удаленного. Последние параметры частично противоречат параметру noipdefault, и записываются как local_addr:remote_addr. Кроме того для работы в режиме сервера требуется настроить последовательный порт таким образом, что бы он не отсылал полученные команды назад, как эхо. Для этого следует отдать следующие команды для порта



mesg n stty -echo

Таким образом для дозвона до провайдера можно использовать следующий сценарий (если все необходимые параметры находятся в /etc/ppp/options)

pppd connect "my_scenario"

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

demand Параметр "дозвона по требованию", соединение ppp0 будет создано, но connect запустится лишь после того как он потребуется.
active_filter Значение этого параметра управляет настройками трафика, без него демон будет реагировать на каждый исходящий бит.
holdoff <t> Время в секундах между дозвонами.
idle <t> Время через которое демон повесит трубку при отсутствии трафика.
Есть еще 2 файла, которые управляют демоном pppd, они называются /etc/ppp/ip-up и /etc/ppp/ip-down. Их назначение это маршрутизация в удаленную сеть при помощи протокола PPP. Они используют те же параметры, что и описанные файлы, и если вы используете PPP только для связи с Интернетом, то их можно оставить как есть.

Тогда для пользователя основным станет создание и запуск сценария его соединения. Этот процесс давно автоматизирован с помощью специальных программ, которые разные в разных дистрибутивах Linux. Но иногда может возникнуть необходимость создания или запуска сценария вручную. Для следует создать файл с названием вроде my_scenario. А для параметра connect указать значение "chat -f my_scenario". chat это программа общения с модемом по принципу диалога, ключ -f означает, что этот диалог берется из файла. Пример части такого файла

ATZ OK ATDT3208080 CONNECT ' ' ogin: ghoort word: forget

При его запуске на модем посылается команда ATZ (инициализация), затем он ожидает ответа OK. После его получения, программа chat высылает телефонный номер ATDT3208080 в импульсном наборе, и ждет ответа CONNECT. После получения ответа, она не делает ничего, на что указывает пустая строка. Получение приглашения ogin: приводит к ответу ghoort, причем такой вид не ошибка, это требуется, поскольку буквы L и l здесь различаются. Затем вводится пароль.

Зная команды, используемые вашим модемом, можно написать значительно более сложные сценарии, с ветвлением и использованием нестандартных команд.


Содержание раздела