Linux. Полное руководство.

11.3.3. Запуск xinetd.

Я надеюсь, что с настройкой все более-менее понятно. Если нет, то немного ниже вы найдете пример файла /etc/xinetd.conf. Сейчас же займемся запуском только что откомпилированного и настроенного суперсервера. А запускать его можно с ключами, самые нужные из которых приведены в таблице 11.3. За списком остальных обращайтесь к man-странице.

Ключи запуска xinetd Таблица 11.3.

Ключ Назначение
-f файл Устанавливает альтернативный файл конфигурации, который должен использоваться вместо стандартного файла /etc/xinetd.conf
-pidfile pid_файл Файл, в который будет записан PID процесса
-stayalive Даже если ни один сервис не прописан, демон должен выполняться («остаться в живых»)
-d режим отладки (debug mode)
-limit число Ограничение на количество одновременно запущенных процессов

Как и любой демон, xinetd управляется сигналами:

♦ SIGHUP заставит xinetd перечитать файлы конфигурации и остановить службы, с этого момента отключенные;

♦ SIGQUIT остановит xinetd;

♦ SIGTERM остановит xinetd, остановив предварительно все запущенные им серверы;

♦ SIGUSR1 выведет дамп состояния в файл /var/run/xinetd.dump.

11.3.3.1. Защита xinetd.

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

# chmod 400 /etc/xinetd.conf.

Чтобы никто не смог изменить, удалить, переименовать этот файл, установите ему атрибут «i» (только на файловой системе ext2 или ext3):

# chattr +i /etc/xinetd.conf.

11.3.3.2. Пример файла конфигурации /etc/xinetd.

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

Листинг 11.1. Фрагмент файла конфигурации /etc/xinetd.

# Параметры по умолчанию для всех возможных сервисов.

Defaults.

{

 # Число серверов, которые могут быть активны одновременно.

 instances = 25.

 # Параметры протоколирования.

 log_type = FILE /var/log/servicelog.

 log_on_success = HOST PID.

 log_on_failure = HOST RECORD.

 # Параметры доступа.

 only_from = 111.11.111.0 111.111.112.0.

 only_from = localhost 192.168.1.0/32.

 # Отключенные сервисы.

 disables = tftp.

}

Service login {

 flags = REUSE.

 socket_type = stream.

 protocol = tcp.

 wait = no.

 user = root.

 server = /usr/etc/in.rlogind.

 log_type = SYSLOG local4 info.

}

# Сервис telnet - эмуляция терминала удаленных систем.

# для интерфейса обратной петли.

Service telnet {

 flags = REUSE.

 socket_type = stream.

 wait = no.

 user = root.

 server = /usr/etc/in.telnetd.

 bind = 127.0.0.1.

 log_on_failure += USERID.

}

# Сервис telnet — эмуляция терминала удаленных систем.

Service telnet {

 flags = REUSE.

 disable = yes.

 socket_type = stream.

 wait = no.

 user = root.

 server = /usr/etc/in.telnetd.

 bind = 192.231.139.175.

 redirect = 128.138.202.20 23.

 log_on_failure += USERID.

}

Service ftp {

 socket_type = stream.

 wait = no.

 user = root.

 server = /usr/etc/in.ftpd.

 server_args = -1.

 instances = 4.

 log_on_success += DURATION USERID.

 log_on_failure += USERID.

 access_times = 2:00-8:59 12:00-23:59.

 nice = 10.

}

Service name {

 socket_type = dgram.

 wait = yes.

 user = root.

 server = /usr/etc/in.tnamed.

}

# Поддержка протокола TFTP (Trivial FTP). Этот протокол.

# используется для обмена информацией между интеллектуальными.

# маршрутизаторами и, скорее всего, вы не будете его.

# использовать.

Service tftp {

 socket_type = dgram.

 wait = yes.

 user = root.

 server = /usr/etc/in.tftpd.

 server_args = -s /tftpboot.

}

# SMTP-сервис Qmail. Конфигурируется для запуска по.

# требованию суперсервера xinetd.

Service smtp {

 socket_type = stream.

 protocol = tcp.

 wait = no.

 user = qmaild.

 id = smtp.

 server = /var/qmail/bin/tcp-env.

 server_args = /var/qmail/bin/qmail-smtpd.

 log_on_success -= DURATION USERID PID HOST EXIT.

 log_on_failure -= USERID HOST ATTEMPT RECORD.

}

# Сервис finger, позволяющий узнать общедоступную информацию о.

# пользователях системы, записанную в /etc/passwd.

Service finger {

 socket_type = stream.

 disable = yes.

 wait = no.

 user = nobody.

 server = /usr/etc/in.fingerd.

}

Service echo {

 type = INTERNAL.

 id = echo-stream.

 socket_type = stream.

 protocol = tcp.

 user = root.

 wait = no.

}

Service echo {

 type = INTERNAL.

 id = echo-dgram.

 socket_type = dgram.

 protocol = udp.

 user = root.

 wait = yes.

}

Service rstatd {

 type = RPC.

 disabled = no.

 flags = INTERCEPT.

 rpc_version = 2-4.

 socket_type = dgram.

 protocol = udp.

 server = /usr/etc/rpc.rstatd.

 wait = yes.

 user = root.

}

Как видно из примера, я сконфигурировал лишь самые необходимые сервисы. Доступ к сервисам в рассматриваемом примере могут получать только клиенты из сетей 111.111.111.0 111.111.112.0 и 192.168.1.0. Можно также указывать адрес и маску подсети, например, 192.168.1.0/32. Вместо sendmail я использовал qmail. Можно было бы запускать qmail в режиме standalone, но так как я не очень часто пользуюсь услугами 25-го порта, то мне удобнее запускать сервис smtp через xinetd. Из соображений безопасности я отключил некоторые сервисы: finger, telnet.