Установка и кофигурирование xinetd
xinetd это очень хорошая замена inetd, интернет сервис демона.
1. УСТАНОВКА
./configure
Опции configure:
--with-libwrap : демон будет использовать tcp wrappers.
При этом у вас уже должны быть установлены libwrap. с этой опцией xinetd будет сперва проверять
ваши /etc/hosts.allow и /etc/hosts.deny файлы, и только после этого запускает свой механизм
контроля доступа.
--with-loadavg : этот флаг позволит скомпилировать xinetd с поддержкой max_load опции.
Это опция остановит сервис, если загрузка достигла определенного уровня.
--with-inet6 : поддержка IPv6. Когда xinetd собран с поддержкой IPv6,
все сокеты становятся IPv6 сокетами. При этом будут приниматься как IPv4 запросы, так и IPv6,
но IPv4 сменятся на IPv6 адреса. Например, 127.0.0.1 в IPv4 будет выглядеть как
::ffff:127.0.0.1 в IPv6.
make
make install
2. НАСТРОЙКА
Файл конфигурации xinetd - /etc/xinetd.conf (по умолчанию) отличается по синтаксису от файла
конфигурации inetd. Если Вам лень писать файл заново, вы можете воспользоваться программой,
которая сделает это автоматически. Она находится в пакете с xinetd.
Синтаксис xinetd.conf:
service < service_name>
{
<атрибут> <присваювающий_оператор> <значение> <значение> ...
...
}
Присвающий оператор может быть одним из следующих: '=', '+=', '-='. Большинство атрибутов может
работать только с оператором '='.
'=' - присвоить значение атрибуту
'+=' - добавить еще одно значение (атрибут может иметь несколько значений, которые записаны через пробел)
'-=' - удалить значение
service_name - это имя сервиса (login, shell, telnet, ftp, pop3 и т.д.)
attribute:
id - используется, если сервисы используют разные протоколы, например echo-stream и echo-dgram
По умолчанию совпадает с именем сервиса.
type - может быть использована любая комбинация из следующих значений:
- RPC - если это rpc сервис
- INTERNAL - если xinetd представляет этот сервис. (для echo, time, daytime, chargen,
и discard)
- UNLISTED - если сервис не описан в файле /etc/rpc для rpc сервисов или в /etc/services для
не rpc.
flags - в качестве значения может быть использована любая комбинация из следующих значений:
- REUSE - установить флаг SO_REUSEADDR на сокет сервера
- INTERCEPT - перехватывать пакеты или принимать соединения по порядку проверяя что они
приходят из нужных мест
- NORETRY - избегать повторные попытки в случаи неудачи
- IDONLY - соединение будет приниматься только от идентифицированных пользователей. На
удаленной машине должен работать identification сервер.
- NODELAY - для tcp сервиса будет установлен сокет флаг - TCP_NODELAY. Для не tcp серисов
никакого эффекта не будет.
- DISABLE - сделать сервис недоступным
- KEEPALIVE - установка сокет флага SO_KEEPALIVE только для tcp сервисов
disabled - может принимать 2 значения, "yes" и "no". При значенни yes сервис не будет запускаться
socket_type - возможные значения:
stream - stream сокет
dgram - dgram сокет
raw - сервисы, требующие прмой доступ к IP
seqpacket - сервисы, требующие надежную последовательную пересылку дайтаграмм
protocol - определяет протокол, по которому будет работать сервер (tcp, udp, ...)
wait - имеет 2 значения: 'yes' и 'no'. Значение 'yes' устанавливается только на stream сокетах.
Если установлено 'yes', то выполняется только один сервер для точно определенного порта.
При значении 'no' xinetd немедленно продолжает слушать порт.
user - определяет gid серверного процесса. Имена групп должны быть в файле /etc/group
server - путь к программе-сервера
server_args - аргументы, с которыми будет запускаться серверная программа
only_from - удаленные хосты, которым будет доступен сервис. В качестве значения принимает
список хостов, IP адресов или сетей (из /etc/networks)
no_access - хосты, котрым данный сервис не будет доступен. Значения такие же как и у only_from.
Если не один из атрибутов (only_from и no_access) не указан, то сервис будет доступен всем.
access_times - интервалы времени в форме hour:min-hour:min, в которых сервис будет доступен.
(Часы от 0 до 23 и минуты от 0 до 59.) Например: 9:00-12:00
log_type - определяет куда сервис будет посылать логи. Значения:
SYSLOG syslog_facility [syslog_level] - логи будт посылаться syslog демону
FILE file [soft_limit [hard_limit]] - логи будут писаться в указанный файл.
log_on_success - определяет какя информация будет писаться в лог. Можно комбинировать
любые из следующих значений:
- PID - серверный процесс
- HOST - адресс удаленного хоста
- EXIT - каким образом был произведен выход
- DURATION - продолжительность сессии
log_on_failure - определяет куда сервис будет посылать логи если сервис по каким либо причинам
не запустился:
- HOST - адресс удаленного хоста
- USERID - USERID удаленного пользователя
- ATTEMPT - логировать неудачные попытки
- RECORD - записывать лог в случаи невозможности запуска.
rpc_version - определяет версию rpc сервиса. Верия может быть представлена как номер или диапазон
rpc_number - определяет номер rpc сервиса
env - значение атрибуте - это список строк типа: 'name=value'. Эти будт добавлены в окружение
перед тем как сервер будет запущен.
passenv - значение атрибута - это список переменных окружения из окружения xinetd, которые могут быть переданы серверу.
port - определяет порт сервиса. Если он указан в файле /etc/services то он должен совпадать с ним
redirect - позволяет tcp сервису делать редирект на другой хост. Значение - host:port
bind - устанавливает интерфейс на котором будет работать сервис. Синтаксис: bind=(ip address of interface)
interface - синоним для bind
banner - имя файла, котрый будет показываться при коннекте к севису
banner_success - имя файла, котрый будет показываться при удачном коннекте
banner_fail - имя файла, котрый будет показываться при неудачном коннекте
cps - атрибут имеет 2 аргумента. Первый устанавоивает количество коннектов в секунду.
Если это число будет привышено, сервис будет временно недоступен. Второй - число
секунд, после которых сервис снова будет доступен
max_load - загрузка. При достижении максимума, сервер перестает принимать запросы на соединение. Знчение - число типа float
groups - принимаеи значениая "yes" или "no". если значение атрибута "yes" - то сервер запуститься
с доступом к группам, котрые имеют effective UID сервера. При значении "no" сервер
запустиься без привелегий групп. Атрибут должен иметь значение "yes" для польшинста BSD
систем. Этот отрибут может быть устновлен в секции default
instances - определяет число серверов, которые может быть активны одновременно для сервиса.
(по умолчанию лимита нет). Значением этого атрибута может быть число, либо - UNLIMITED
nice - устанавливает приоритет сервиса. Смотрите man nice 3 для более точной информации.
enabled - список имен задействованных сервисов
Вам не обязательно указывать все эти атрибуты для каждого сервиса. Можно указать только необходимые:
- socket_type
- user
- server
- wait
- protocol (только для RPC сервисов и для всех, которые не описаны в /etc/services)
- rpc_version (только для RPC сервисов)
- rpc_number (только для RPC сервисов, которых нет в /etc/rpc)
- port (тлько для не-RPC сервисов, которые не описаны в /etc/services)
Следующие атрибуты поддерживают все операторы присвивания:
- only_from
- no_access
- log_on_success
- log_on_failure
- passenv
- env (не поддерживает оператор '-=')
Эти арибуты также могут принимать разные значения в разных service секциях.
Файл конфигурации может содержать секцию default, в которой описаны отрибуты по умолчанию.
Они будут одинаковы для всех сервисов. Возможные атрибуты по умолчанию:
- log_type
- log_on_success
- log_on_failure
- only_from
- no_access
- passenv
- instances
- disabled
- enabled
3. ПРИМЕР
defaults
{
instances = 25
log_type = FILE /var/log/servicelog
log_on_success = HOST PID
log_on_failure = HOST RECORD
only_from = 128.138.193.0 128.138.204.0 128.138.209.0 128.138.243.0
only_from = localhost 192.231.139.0/24
disabled = tftp
}
service login
{
flags = REUSE
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/etc/in.rlogind
log_type = SYSLOG local4 info
}
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
}
service telnet
{
flags = REUSE
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 = -l
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
}
service tftp
{
socket_type = dgram
wait = yes
user = root
server = /usr/etc/in.tftpd
server_args = -s /tftpboot
}
service finger
{
socket_type = stream
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
flags = INTERCEPT
rpc_version = 2-4
socket_type = dgram
protocol = udp
server = /usr/etc/rpc.rstatd
wait = yes
user = root
}
4. ЗАПУСК xinetd.
ОПЦИИ:
- -d debug mode
- -syslog syslog_facility Эта опция устанвливает syslog логирование использую специальные syslog facility.
Поддерживаються следующие facility имена : daemon, auth, user, local[0-7] (смотрите man syslog.conf 5 для более подробной
информации). Это опция не эффективно при использовании debug mode, т.к. все сообщения будут выводиться не терминал.
- -filelog logfile все xinetd сообщения будут записаться в указанный файл. Если указанного
файла не сужествует. то он будет создан. Как и предыдущая опция,
не эффективана при debug mode.
- -f config_file путь к конфиг файлу. По умолчанию - /etc/xinetd.conf.
- -pidfile pid_file файл с записью идентификатора процесса. Не эффективана при debug mode.
- -stayalive если не один сервис не описан, то xinetd все равно будет запущен.
- -loop rate устанавливает количество коннектов в секунду. При увеличенни скорости сервис будет недуступным.
- -reuse если испоьзуется эта опция, xinetd установит опцию сокета SO_REUSEADDR перед тем как связать
сокет сервиса с интернет адресом.
- -limit proc_limit устанавливет предел одновременно запущенных процессов.
- -logprocs limit устанавливет предел одновременно запущенных процессов, для удаленной установки userid
-shutdownprocs limit устанавливет предел одновременно запущенных процессов, для shutdown'а сервиса
5. КОНТРОЛИРОВАНИЕ xinetd.
xinetd выполняет опредленное действие при получении опредленный сигналов. Каждое деайствие связано с
определенным, сигналом. Они могут быть переопределены, путем редактирование файла config.h и перекомпилцией.
- SIGUSR1 xinetd перечитает файл конфигурации.
- SIGQUIT остановка демона
- SIGTERM остановка всех запущенных сервисов, перед остановкой xinetd
xinetd FAQ
- Что такое xinetd?
- Совместим ли он с inetd?
- Почему я должен использовать xinetd?
- Кто ответственный за програму?
- Я не имею прав администратора; могу ли я использовать xinetd?
- Где я могу найти последнию версюю?
- Как заставить работать qmail через xinetd?
- На каких платформах работает xinetd?
- xinetd не хочет нормально работат с RPC. Что мне делать?
- Как использовать itox?
- Поддерживает ли xinetd libwrap (tcpwrappers)?
- Поддерживает ли xinetd IPv6?
- Ни один сервис не запускается с IPv6! В чем дело?
- Что такое setgroups(0, NULL) error?
- Почему telnetd не может нормально запуститься в Linux?
Q. Что такое xinetd
A. xinetd это замена для inetd, интернет сервис демона.
Q: Я не имею прав администратора; могу ли я использовать xinetd?
A: Каждый может использовать его для запуска сервисов, которые не требуют
привелегированных портов, потому что xinetd не требует чтобы сервисы в его файле конфигурации
были описаны в /etc/services.
Q. Совместим ли он с inetd?
A. Нет, его конфигурационный файл имеет другой формат и сам демон понимает другие сигналы.
Однако назначение сигналов может быть измено. Так же в пакете имееться программа для
конвертирования inetd.conf в xinetd.conf.
Q. Почему я должен использовать xinetd?
A. Потому что он намного лучше inetd. Ниже приведены приимущества:
- 1) Демон может контролировать доступ ко всем сервисам через:
- a. адрес удаленного хоста
- b. время доступа
- c. имя удаленного хоста
- d. доменное имя удаленного хоста
- 2) Демон предостовляет серьезную реконфигурацию:
- a. убивает серверы, сервисы которых не прописаны в файле конфигурации
- b. убивает серверы которые не удовлетворяют критериям контроля доступа
- 3) демон продотвращает DoS атаки следующими способами:
- a. устанавливается предел количеста серверов для каждого сервиса
(избежание переполнения таблицы процессов)
- b. устанавливается верхний предел количества fork процессов
- c. устанавливается предел размера лог файла, который создает демон
- d. устанавливается предел числа соединений с одного и того же хоста
- e. устанавливается предел частоты входящих соединений
- f. прекращается обслуживание если загрузка превосходит определенный лимит
- 4) Широкие возможности в ведении логов:
- a. для каждого сервиса демон может логировать:
- i) время старта сервера
- ii) адресс удаленного хоста
- iii) информацию об удаленном пользователе
- iv) как давно сервер был запущен
-
- b. для некоторых сервисов, он может записывать информацию о неудачных попытках
доступа (например, он может записать имя пользователя и команду для rsh сервиса)
- 5) нет лимита на количество аргументов для сервера
- 6) Вы можете связать определенные сервисы с определенными IP адресами
Q. Кто ответственный за програму?
A. panos@cs.colorado.edu перовоначально написал это програму, но
Я отвечаю за bug report в данный момент.
Q. Где я могу найти последнюю версию?
A. Тут:
http://www.synack.net/xinetd
Q. Как заставить работать qmail через xinetd?
A. Вот так:
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
}
Q. На каких платформах работает xinetd?
A. Solaris 2.6 (sparc and x86), Linux, BSDi, и IRIX 5.3 и 6.2.
Q. Как мне поставить chroot для сервиса?
A. Так:
service telnet_chroot
{
log_on_success = HOST PID DURATION USERID
log_on_failure = HOST RECORD USERID
no_access = 152.30.11.93
socket_type = stream
protocol = tcp
port = 8000
wait = no
user = root
server = /usr/sbin/chroot
server_args = /var/public/servers /usr/libexec/telnetd
}
Q. xinetd не хочет нормально работать с RPC. Что мне делать?
A. xinetd и inetd могут нормально работать вместе. Запускайте RPC сервисы через
inetd (удалите все отальное кроме RPC из inetd.conf), а через xinetd все остальные сервисы.
Q. Как использовать itox?
A. itox читает файл inetd.conf с stdin и записывает xinetd.conf
в stdout. Используйте следующию команду:
itox < /etc/inetd.conf > /etc/xinetd.conf
Если ваш inetd.conf не имеет полных путей для каждого демона
Вы должны использовать опцию
-daemon_dir. Предположим все ваши демоны находяться в
/usr/sbin, тогда используйте следующую команду:
itox -daemon_dir=/usr/sbin < /etc/inetd.conf > /etc/xinetd.conf
Q. Поддерживает ли xinetd libwrap (tcpwrappers)?
A. Да. xinetd может быть скомпилирован с поддержкой libwrap.
--with-libwrap опия для
configure.
Когда xinetd компилируется с поддержкой libwrap, все сервисы могут использовать файлы
/etc/host.allow и
/etc/host.deny для контроля доступа.
xinetd также может быть собран для использования tcpd в стиле inetd.
Это потребует использования флага NAMEINARGS, а имя демона будет записано как server_args.
Пример для использования telnet с tcpd:
service telnet
{
flags = REUSE NAMEINARGS
protocol = tcp
socket_type = stream
wait = no
user = telnetd
server = /usr/sbin/tcpd
server_args = /usr/sbin/in.telnetd
}
Q. Поддерживает ли xinetd IPv6?
A. Да. xinetd может быть скомпилирован с поддержкой IPv6. Для этого нужно указать параметр
--with-inet6 для
configure.
Q. Ни один сервис не запускается с IPv6! В чем дело?
A. Когда вы скомпилировали программу с поддержкой IPv6, все сокеты стали IPv6 сокетами.
Если Ваше ядро не поддерживает IPv6 сокеты, то все попытки создать такой сокет будут
неудачными. Компилируйте xinetd с поддержкой IPv6, только если ваше ядро поддерживает IPv6.
Q. Что такое setgroups(0, NULL) error?
A. Для избежания этой ошибки, установите
groups = yes.
Q. Почему telnetd не может нормально запуститься в Linux?
A. Используйте
groups = yes для telnet сервиса.
--
Serega[Linux]
mailto:linux@ihgroup.ru
http://ihgroup.ru