| Текст предоставил Chern Lee. Обновлено для FreeBSD 6.1-RELEASEПроект документации FreeBSD. inetd(8) иногда называют также ''супер-сервером Интернет'', потому что он управляет соединениями к многим сервисам. Когда inetd принимает соединение, он определяет, для какой программы предназначено соединение, запускает соответствующий процесс и предоставляет ему сокет, ссылка на который передается процессу в качестве стандартных устройств ввода, вывода и сообщения об ошибках. Для не слишком нагруженных серверов запуск через inetd может уменьшить общую нагрузку на систему по сравнению с запуском каждого даемона индивидуально в выделенном режиме. В первую очередь inetd используется для вызова других даемонов, но несколько простых протоколов, таких, как chargen, auth и daytime, обслуживаются непосредственно. Этот раздел посвящен основам настройки inetd посредством его параметров командной строки и его конфигурационного файла, /etc/inetd.conf. inetd инициализируется посредством системы rc(8). Параметр inetd_enable по умолчанию установлен в NO, однако может быть включен утилитой sysinstall в процессе установки. Указание
inetd_enable="YES"
или
inetd_enable="NO"
в файле /etc/rc.conf разрешит или запретит запуск inetd во время загрузки. Команда
/etc/rc.d/inetd rcvar
покажет текущие установки переменных, относящихся к inetd. Кроме того, через inetd_flags даемону inetd могут быть переданы различные параметры командной строки. Как и большинство даемонов, для inetd существует большое количество разнообразных опций, изменяющих его поведение. Полный из список таков; inetd [-d] [-l] [-w] [-W] [-c maximum] [-C rate] [-a address | hostname] [-p filename] [-R rate] [-s maximum] [configuration file] Опции могут передаваться inetd при помощи переменной inetd_flags файла /etc/rc.conf. По умолчанию переменная inetd_flags установлена в -wW -C 60, то есть включает обработку TCP wrapping и запрещает обращаться с одного IP-адреса к сервису более чем 60 раз в минуту. Начинающих пользователей порадует отсутствие необходимости менять эти параметры в стандартных случаях. Тем не менее, мы остановимся на опциях, ограничивающих количество и частоту соединений, поскольку они могут быть полезны для исключения массированных атак. Полный список опций можно найти на странице справочника inetd(8). - -c maximum
Определение максимального числа одновременных запусков каждой службы; по умолчание не ограничено. Может быть переопределено индивидуально для каждой службы при помощи параметра max-child . - -C rate
Определение по умолчанию максимального количества раз, которое служба может быть вызвана с одного IP-адреса в минуту; по умолчанию не ограничено. Может быть переопределено для каждой службы параметром max-connections-per-ip-per-minute . - -R rate
Определяет максимальное количество раз, которое служба может быть вызвана в минуту; по умолчанию 256. Частота, равная 0, не ограничивает число вызовов. - -s maximum
Задает максимальное количество процессов, одновременно обслуживающих один сервис для одного IP-адреса; по умолчанию не ограничено. Может переопределяться для каждой службы параметром max-child-per-ip .
Настройка inetd производится через файл /etc/inetd.conf. Если в файле /etc/inetd.conf делались изменения, то inetd можно заставить считать его конфигурационный файл повторно посредством команды Пример 25-1. Перезагрузка конфигурационного файла inetd
# /etc/rc.d/inetd reload
В каждой строке конфигурационного файла описывается отдельный даемон. Комментариям в файле предшествует знак ''#''. Строки в файле /etc/inetd.conf имеют такой формат:
service-name
socket-type
protocol
{wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]
user[:group][/login-class]
server-program
server-program-arguments
Пример записи для даемона ftpd(8), использующего IPv4:
ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
- service-name
Это имя сервиса, предоставляемого конкретным даемоном. Оно должно соответствовать сервису, указанному в файле /etc/services. Здесь определяется, какой порт должен обслуживать inetd. При создании нового сервиса он должен помещаться сначала в файл /etc/services. - socket-type
stream, dgram, raw либо seqpacket. stream должен использоваться для ориентированных на соединение даемонов TCP, когда как dgram используется для даемонов, использующих транспортный протокол UDP. - protocol
Одно из следующих: - {wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]
wait|nowait определяет, может ли даемон, вызванный из inetd, работать с собственным сокетом, или нет. Сокеты типа dgram должны использовать параметр wait , когда как даемоны с потоковыми сокетами, которые обычно многопоточны, должны использовать nowait . wait обычно передает много сокетов одному даемону, когда как nowait порождает даемон для каждого нового сокета.
Максимальное число порожденных даемонов, которых может создать inetd, может быть задано параметром max-child . Если нужно ограничение в десять экземпляров некоторого даемона, то после параметра nowait нужно задать /10. При задании /0 ограничения на количество экземпляров снимаются. Кроме max-child , могут быть задействованы два других параметра, ограничивающих максимальное число соединений от одного источника. max-connections-per-ip-per-minute ограничивает количество соединений от одного IP-адреса в течение минуты, так что значение, равное десяти, будет ограничивать любой заданный IP-адрес на выполнение десяти попыток подключения к некоторому сервису в минуту. Параметр max-child-per-ip ограничивает количество дочерних процессов, которые могут быть одновременно задействованы на обслуживание одного IP-адреса. Эти опции полезны для предотвращения намеренного или ненамеренного расходования ресурсов и атак типа Denial of Service (DoS) на машину. В этом поле одно из значений wait или nowait обязательны. max-child , max-connections-per-ip-per-minute и max-child-per-ip опциональны. Многопоточный даемон типа stream без ограничений max-child , max-connections-per-ip-per-minute или max-child-per-ip будет определен просто как nowait. Тот же самый даемон с ограничением в максимум десять даемонов будет определен так: nowait/10. Та же конфигурация с ограничением в двадцать соединений на IP-адрес в минуту и общим ограничением в максимум десять порожденных даемонов выглядит так: nowait/10/20. Эти параметры, используемые все со значениями по умолчанию даемоном fingerd(8), имеют такой вид:
finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s
Наконец, пример, описывающий ограничение на 100 даемонов в целом, при этом не более чем по 5 на один IP-адрес, будет выглядеть так: nowait/100/0/5. - user
Это имя пользователя, под которым должен работать соответствующий даемон. Чаще всего даемоны работают как пользователь root. Для обеспечения безопасности некоторые серверы запускаются как пользователь daemon или как пользователь с минимальными правами nobody. - server-program
Полный маршрут к даемону, который будет выполняться при установлении соединения. Если даемон является сервисом, предоставляемым самим inetd, то нужно задать ключевое слово internal . - server-program-arguments
Этот параметр работает вместе с параметром server-program , задавая параметры, начиная с argv[0], передаваемые даемону при запуске. Если в командной строке задано mydaemon -d, то mydaemon -d будет являться значением для server-program-arguments . И снова, если даемон является внутренней службой, то здесь нужно использовать internal .
В зависимости от выбранных при установке параметров, многие из служб inetd могут оказаться по умолчанию включенными. Если нет особой нужды в некотором даемоне, подумайте, не стоит ли его выключить? Поместите знак ''#'' перед ненужным даемоном в /etc/inetd.conf и пошлите сигнал для inetd. Некоторые даемоны, такие, как fingerd, вообще нежелательны, потому что они дают информацию, которая может оказаться полезной атакующему. Некоторые даемоны не заботятся о безопасности и имеют большие тайм-ауты для соединений или вообще их не имеют. Это позволяет атакующему неспешно устанавливать соединения к конкретному даемону, истощая имеющиеся ресурсы. Может оказаться полезным задать для некоторых даемонов ограничения max-connections-per-ip-per-minute , max-child и max-child-per-ip , особенно если вы обнаружите слишком большое число соединений. По умолчанию механизм TCP wrapping включен. Обратитесь к справочной странице по hosts_access(5) для получения более подробной информации о задании ограничений TCP для различных даемонов, запускаемых посредством inetd. daytime, time, echo, discard, chargen и auth все являются услугами, предоставляемыми самим inetd. Сервис auth предоставляет идентификационные сетевые услуги и поддается настройке; прочие сервисы ненастраиваемы. Обратитесь к справочной странице по inetd(8) для получения более подробной информации.
Этот, и другие документы, могут быть скачаны с ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ | | |