17.5 Настройка xinetd и inetd (Configuring xinetd and inetd)¶
В этой части главы вы узнаете, как настраивать «супердемоны» (super-daemons) Linux. Большинство дистрибутивов устанавливают широкий набор сетевых служб в ходе установки системы. Многие из них, например Telnet, весьма удобны и обеспечивают важную функциональность. Однако большую часть времени они не нужны. Необходим механизм, позволяющий предоставлять эти службы по запросу и выгружать их, когда они не востребованы, — это экономит память, снижает загрузку процессора и повышает общую безопасность системы.
В зависимости от дистрибутива для этой цели доступны два варианта:
- Настройка xinetd
- Настройка inetd
Настройка xinetd (Configuring xinetd)¶
Многие дистрибутивы Linux включают специальный демон xinetd, предназначенный для управления различными сетевыми службами. В этой части главы вы научитесь настраивать и использовать xinetd. Будут рассмотрены следующие темы:
- Принцип работы xinetd
- Настройка сетевых служб xinetd
- Использование TCP Wrappers
Начнём с изучения того, как работает демон xinetd.
Принцип работы xinetd (How xinetd Works)¶
Демон xinetd является супердемоном. Он называется супердемоном потому, что выступает посредником (intermediary) между пользователем, запрашивающим сетевые службы, и демонами на системе, непосредственно предоставляющими эти службы. Это показано на рис. 17-26.
Когда в систему поступает запрос к одной из сетевых служб, находящихся под управлением xinetd, его принимает и обрабатывает xinetd, а не запрашиваемый сетевой демон. Затем xinetd запускает демон запрашиваемой службы и перенаправляет ему запрос. Когда запрос выполнен и сетевая служба больше не нужна, xinetd выгружает демон из памяти.

Рис. 17-26. Принцип работы xinetd
Среди сетевых служб, управляемых xinetd, можно выделить следующие:
chargendaytimeechoftppop3rsyncsmtptelnettftptimevnc
Рассмотрим, как настраивать службы, управляемые xinetd.
Настройка сетевых служб xinetd (Configuring xinetd Network Services)¶
Как и для всех сетевых служб, конфигурационные файлы xinetd хранятся в каталоге /etc. Сам демон xinetd настраивается с помощью файла /etc/xinetd.conf. Как правило, вносить изменения в этот файл не требуется — конфигурация по умолчанию работает хорошо. В конце файла есть директива:
Эта строка указывает демону xinetd использовать конфигурационные файлы из каталога /etc/xinetd.d. Они определяют, как xinetd должен запускать каждую службу по запросу. Каждый из этих файлов настраивает запуск отдельной службы, управляемой xinetd. Например, файл vsftpd в каталоге /etc/xinetd.d настраивает демон FTP-сервера vsftpd. Параметры конфигурации xinetd для vsftpd выглядят так:
service ftp
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/sbin/vsftpd
# server_args =
# log_on_success += DURATION USERID
# log_on_failure += USERID
# nice = 10
disable = yes
}
Этот файл не настраивает сам демон — он лишь сообщает xinetd, как его запускать. Фактический конфигурационный файл самого демона vsftpd находится в /etc/vsftpd.conf. Один из наиболее важных параметров в файле /etc/xinetd.d/vsftpd — директива disable. Она определяет, разрешено ли xinetd запускать данный демон по запросу. В приведённом примере директива установлена в yes, что означает: демон не будет запускаться по запросу. Запускаемый демон задаётся директивой server =. В примере xinetd запустит демон /usr/sbin/vsftpd. Чтобы активировать этот демон, откройте файл и измените значение параметра disable на no. После изменения любого из файлов в /etc/xinetd.d необходимо перезапустить демон xinetd с помощью его сценария инициализации в /etc/rc.d/init.d или /etc/init.d.
Совет
Если вы включаете службу, предоставляемую xinetd, необходимо создать исключение в межсетевом экране на уровне узла вашей Linux-системы, чтобы разрешить трафик на IP-порт, используемый данным демоном.
Использование TCP Wrappers (Using TCP Wrappers)¶
Если служба включена с помощью её конфигурационного файла в каталоге /etc/xinetd.d/, к ней через xinetd может подключиться любой узел. Однако в зависимости от того, как развёртывается система, может потребоваться ограничить доступ к этим сетевым службам. Возможно, нужно разрешить доступ только определённому набору узлов и запретить всем остальным. Для этого необходимо настроить использование TCP Wrappers — они применяются xinetd для запуска и управления сетевыми службами на основе набора конфигурационных файлов, задающих, кому разрешён или запрещён доступ к службе.
Чтобы использовать TCP Wrappers, сначала нужно включить соответствующую функциональность в конфигурационном файле каждой службы в каталоге /etc/xinetd.d. Выполните следующие шаги:
- Убедитесь, что пакет
tcpdустановлен в системе Linux. - Откройте соответствующий конфигурационный файл в текстовом редакторе.
- Закомментируйте существующую строку
server =. - Добавьте следующую строку:
Это заставит
xinetdзапускать демонtcpdвместо самого демона службы. - Добавьте следующую строку:
Это предписывает демону
tcpdзапустить запрошенный сетевой демон. В приведённом примере файл/etc/xinetd.d/telnetнастроен для запуска демонаvsftpdвнутри TCP Wrapper: - Сохраните файл и перезапустите демон
xinetd.
Затем необходимо создать правила управления доступом. Демон tcpd использует файлы /etc/hosts.allow и /etc/hosts.deny, чтобы определить, каким узлам разрешён доступ к управляемым им службам. Записи в /etc/hosts.allow — разрешены; записи в /etc/hosts.deny — запрещены. Синтаксис для обоих файлов одинаков:
При обработке файлов поиск останавливается, как только найдено совпадение. После этого остальные строки не проверяются. Шаги обработки выполняются в следующем порядке:
- Доступ разрешается, если совпадающая запись найдена в файле
/etc/hosts.allow. - Если нет — доступ запрещается, если совпадающая запись найдена в файле
/etc/hosts.deny. - Если ни то ни другое не выполнено — доступ разрешается.
Например, чтобы настроить файл /etc/hosts.allow так, чтобы доступ к демону vsftpd имели только несколько конкретных узлов, следующая запись разрешает доступ к службе vsftpd для узлов с IP-адресами 192.168.1.10 и 192.168.1.102:
В некоторых дистрибутивах вместо xinetd используется демон inetd. Этот демон работает примерно так же, как xinetd. Рассмотрим его принцип работы.
Настройка inetd (Configuring inetd)¶
Демон inetd является супердемоном, как и xinetd, но обычно применяется в более старых дистрибутивах Linux. Как и xinetd, демон inetd выступает посредником при обработке запросов на подключение к сетевым службам, работающим на Linux-узле. Он принимает запросы на подключение от клиентских систем, запускает запрошенную службу и затем перенаправляет запросы клиентов к только что запущенному демону. Когда транзакция завершена и соединение с клиентом разрывается, демон останавливается на Linux-узле.
Как и в случае с xinetd, управление сетевыми службами Linux-узла таким способом имеет преимущества и недостатки. Главное преимущество — экономия системной памяти и ресурсов процессора: сетевой демон запускается только тогда, когда он нужен, а когда не нужен — выгружается из памяти до следующего запроса. Однако это преимущество достигается за счёт латентности. Когда клиент запрашивает службу, ему приходится ждать короткое время, пока загружается необходимый демон и устанавливается соединение. Поэтому inetd (и xinetd) следует использовать только для управления сетевыми службами, которые задействуются в системе лишь изредка.
Демон inetd настраивается с помощью файла /etc/inetd.conf. В отличие от xinetd, все управляемые inetd службы настраиваются в одном конфигурационном файле. Каждая строка этого файла настраивает одну службу. Синтаксис, применяемый в inetd.conf, следующий:
Описание каждого параметра этой строки приведено в таблице 17-6.
Таблица 17-6. Параметры конфигурационного файла inetd
| Параметр конфигурации | Описание |
|---|---|
service_name |
Задаёт имя службы, как оно указано в файле /etc/services. Файл /etc/services отображает номера портов и протоколы на имена служб. Параметр service_name в inetd.conf сопоставляет одно из этих имён служб с конкретным демоном. По умолчанию inetd прослушивает запросы к указанной службе на всех активных сетевых интерфейсах. Чтобы ограничить доступ к службе только одним интерфейсом, добавьте IP-адрес этого интерфейса к имени службы через двоеточие. Например, чтобы ограничить запросы vsftp интерфейсом с IP-адресом 192.168.1.10, используйте имя службы 192.168.1.10:vsftpd. |
socket_type |
Задаёт тип сетевого сокета. Для большинства сетевых служб этот параметр обычно имеет значение stream. |
protocol |
Задаёт протокол, используемый запускаемым демоном, как указано в файле /etc/protocols. Для большинства сетевых служб это значение tcp или udp. |
flags |
Задаёт соответствующие флаги для указанного протокола. При протоколе TCP можно использовать значение nowait; при протоколе UDP — значение wait. |
user |
Задаёт пользователя и группу, от имени которых будет работать служба. Используется синтаксис user.group. |
executable |
Задаёт имя файла (включая полный путь) исполняемого файла, который inetd запускает при поступлении запроса на подключение к указанной службе. |
arguments |
Задаёт аргументы, которые будут переданы службе при её запуске через inetd. |
Пример записи в файле inetd.conf для демона vsftpd:
Обратите внимание: в этом примере с inetd также можно использовать TCP Wrappers — так же, как с xinetd. Когда клиент пытается установить FTP-соединение с Linux-узлом, демон inetd запускает демон tcpd и передаёт ему имя фактического запускаемого демона (vsftpd) в качестве аргумента сервера. Как и при использовании с xinetd, применение TCP Wrappers с inetd позволяет контролировать доступ к сетевым службам узла с помощью файлов /etc/hosts.allow и /etc/hosts.deny.
Попрактикуемся в настройке супердемонов в следующем упражнении.
Упражнение 17-3. Настройка xinetd
В этом упражнении вы попрактикуетесь в работе с xinetd, активировав одну из нескольких служб, управляемых этим супердемоном. Упражнение можно выполнить на виртуальной машине, прилагаемой к книге. Запустите снапшот 17-1 для правильно настроенной среды.
Видео. Посмотрите видео «Упражнение 17-3» для наглядной демонстрации выполнения задания.
Вы активируете службу time на своём Linux-узле через xinetd. После этого ваш Linux-узел сможет выступать поставщиком времени для клиентов. Выполните следующие шаги:
- Загрузите систему Linux и войдите как обычный пользователь.
- Откройте сеанс терминала.
- Переключитесь на учётную запись суперпользователя root, введя
su –, затем пароль пользователя root. - В командной строке с помощью команды
cdперейдите в каталог/etc/xinetd.d. - В командной строке введите
vi ./time-udp, чтобы открыть конфигурационный файлxinetdдля службыtime. Вы должны увидеть параметры конфигурации, аналогичные следующим:
Совет
Существуют два разных конфигурационных файла для службы time. Файл time настраивает её для работы по TCP, а time-udp — по UDP. Убедитесь, что редактируете нужную версию файла! Обратите внимание: параметр type указывает, что служба time является внутренней службой. Это означает, что она является частью самого демона xinetd — отдельного исполняемого файла для неё нет.
- Нажмите клавишу Insert, затем установите значение параметра
disableравнымno. - Нажмите Esc, затем введите
:exit, чтобы сохранить изменения в файле. - Перезапустите демон
xinetd, введя в командной строкеsystemctl restart xinetd.