Все о Linux. LinuxRSP.Ru


Cвежие новости Linux и BSD, анонсы статей и книг прямо в почтовый ящик!
Подписаться письмом


 Сегодняшние новости:

25 лет исполнилось ядру Linux

Релиз KDevelop 5.0

Oracle открывает код JDK9 для ARM

Выпущен Timewarrior 1.0.0

Релиз Android 7.0

Percona Memory Engine для MongoDB на базе WiredTiger

PowerShell открыт и доступен для Linux

Форк TrueCrypt: VeraCrypt 1.18

Релиз Snapcraft 2.14

Релиз Go 1.7

Стабильный выпуск рабочего стола Lumina

Вышла первая версия аналога OpenCV - DCV 0.1

Выпуск минималистичной программы для мониторинга jsonmon 3

В MIT разработали новый язык программирования

Первый релиз Qt5Gtk2

Godot 2.1 - новая версия открытого игрового движка

Свободная цифровая станция звукозаписи: Ardour 5.0

Обновление SkypeWeb Plugin for Pidgin

Вышла версия 3.0 Android File Transfer для Linux (и для OS X)

Программный аналог MIDI-контроллера для создания музыки: Launchpadd v1.3

Mozilla спонсирует поддержку Python 3.5 в PyPy

Ef 0.08 - программа для моделирования динамики заряженных частиц

Обновление текстового редактора TEA до версии 42.0.0

Релиз OpenOrienteering Mapper 0.6.4

Вышли Guix и GuixSD 0.11

Релиз Opera 39

Выпуск LibreOffice 5.2

В OpenSSH обнаружены и устранены некоторые уязвимости

Эмулятор FCEUX 2.2.3

Компания Билайн переходит на российскую СУБД с открытым исходным кодом Tarantool

Google

 Новые статьи :

Утилиты для восстановления потерянных данных в Linux

Лучшие файловые менеджеры для Android

20 лучших бесплатных книг о Linux

Как сгенерировать открытый/закрытый SSH-ключ в Linux

Grive - клиент Google Drive для Linux с открытым исходным кодом

Протокол IPv6: варианты подключения

Сервер из образа: DHCP + TFTP + Initrd + OpenVZ

Обзор веб-панелей управления хостингом

Приёмы работы с Vim

Nginx как Reverse Proxy для сайта, использующего SSL

Разработка модулей ядра Linux

Мониторинг нагрузки http-сервера Apache 2

Перевод комментариев к файлу конфигурации Squid

Решение проблем при использовании "1c предприятие" 8.2 в Linux

Advanced Bash-Scripting Guide Искусство программирования на языке сценариев командной оболочки







Rambler's Top100





 
 

Установка и кофигурирование 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


      

Связь | О проекте LinuxRSP | Реклама | О Linux
© 1999-2016 LinuxRSP