Linux-сервер своими руками
Шрифт:
in.ftpd — аргумент, то есть программа, которую должен выполнить tcpd после проверки некоторой информации (о ней немного позже).
Еще вы можете написать и так, для прямого вызова службы ftp (ProFTP):
В данном случае сразу будет вызван демон ProFTP. Запись in.proftpd является ссылкой на proftpd. Если будете использовать такой вызов ProFTP, позаботьтесь о том, чтобы proftpd имел тип inetd, а не standalone.
8.1.2. Настройка tcpd
Демон inetd является довольно удобным в использовании средством для организации работы Интернет-сервера. И все было бы замечательно, если бы не одно «но». А это «но» заключается в том, что разработчики inetd очень мало уделили внимания защите, что является недопустимым в нашей суровой Интернет-действительности. Восполнить этот недочет призван демон tcpd (система TCP-Wrappers). Так что давайте теперь разберемся, что же представляет из себя демон tcpd, который является еще одним барьером в системе безопасности.
Демон tcpd аутентифицирует удаленных пользователей и проверяет корректность их запросов. С помощью этого демона можно ограничить запросы с удаленных компьютеров.
Файл hosts.allow содержит список хостов, которым разрешено
В листинге 8.4 доступ к http и ftp разрешен всем, но доступ ко ВСЕМ сервисам разрешен только компьютеру server.dhsilabs.com.
8.1.3. Протокол IPv6
Думаю, что основной момент настройки понятен, и теперь переходим к протоколу IPv6. Схема 32-разрядной адресации протокола IPv4 привела к дефициту IP-адресов. В новой версии протокола IP (IPv6, ранее именовавшегося IPng — IP next generation) адрес состоит из 16-ти октетов и изображается в виде восьми пар октетов, разделенных двоеточиями. В версии 6 используется 128-разрядные адреса получателей и отправителей (это в 4 раза больше, чем в 4-ой версии). Адрес в формате IPv6 может выглядеть так:
Заголовок 1Ру6-пакета разработан таким образом, чтобы минимизировать содержащуюся в нем информацию. Поля параметров и поля, которые не являются необходимыми, вынесены за пределы заголовка.
Протокол IPv6 подробно описан в RFC 1883, а IPv4 — в RFC 791.
8.1.4. Установкаx inetd
Суперсервер xinetd является достойной заменой inetd. Этот суперсервер, помимо всего прочего, обладает встроенными механизмами защиты, которые для inetd выполняет специальный демон tcpd. К тому же xinetd, в отличии от inetd, поддерживает IPv6. Даже если вы пока не планируете переходить на IPv6, установка xinetd будет очень полезной из-за расширенных функций суперсервера. Сам xinetd появился в Red Hat начиная с 7-ой версии и обычно устанавливается во время установки системы. Если у вас он еще не установлен, сейчас самое время это сделать.
При этом рекомендую пойти по пути наименьшего сопротивления и установить xinetd из RPM-пакета, а можно и выкачать из Интернет последнюю версию xinetd по адресуи установить его из исходных кодов.
После того, как вы распакуете исходники, введите ./configure, перейдя предварительно в каталог с исходниками (при этом желательно иметь права root). Для сценария configure вы можете использовать параметры, представленные в табл. 8.1.
Параметры сценария configure Таблица 8.1
Параметр | Описание |
---|---|
– -with-libwrap | Демон будет использовать tcp wrappers. При этом у вас уже должен быть установлен libwrap. С этой опцией xinetd будет сперва проверять ваши /etc/hosts.allow и /etc/hosts.deny файлы, и только после этого запускает свой механизм контроля доступа |
– -with-loadavg | Компилирует xinetd с опцией max_load. Этот параметр остановит сервис, когда нагрузка достигнет определенного уровня |
– -wilh-inet6 | Включает поддержку IPv6 |
Внимание! При включении IPv6 все IPv4-сокеты становятся IPv6-сокетами и соответственно ядро (это прежде всего) и все программы должны поддерживать IPv6. Поэтому будьте готовы к тому, что вам понадобится перекомпилировать свое ядро с поддержкой IPv6. Если ваше ядро не поддерживает IPv6, выкачайте последнюю версию ядра по адресуТем не менее, и после включения IPv6 запросы IPv4 также будут обрабатываться. Так что никакой аварийной ситуации не будет.
Возвращаясь к настройке: теперь введите make, а затем — make install.
Файл конфигурации xinetd — /etc/xinetd.conf отличается по синтаксису от файла конфигурации inetd. Но если inetd у вас уже настроен и вам лень настраивать все заново, воспользуйтесь программой itox: itox < /etc/inetd.conf > /etc/xinetd.conf
Такое использование команды itox верно при условии, что файлом конфигурации inetd является файл /etc/inetd.conf, a xinetd –/etc/xinetd.conf. Но в любом случае, вам не помешает разобраться с форматом xinetd.conf.
Рис. 8.1. Автозапуск суперсервера
После установки суперсервера из RPM-пакета или его сборки из исходных текстов, xinetd (или inetd) добавляется в сценарий автозагрузки системы. Напомню, что включить или отключить запуск xinetd (inetd) или любого другого сервиса всегда можно с помощью конфигуратора drakxservices в Linux Mandrake или setup в Linux Red Hat (см. рис. 8.1).
8.1.5. Настройка xinetd
Синтаксис файла xinetd.conf такой:
Service_name – это имя сервиса (login, shell, telnet, ftp, pop3 и т.д). Оператор присваивания может быть одним из следующих: «=», «+=», «-=». Большинство атрибутов может работать только с оператором «=» (равно). Назначение операторов следующее:
«=» — присвоить значение атрибуту;
«+=» — добавить еще одно значение;
«-=» — удалить значение.
Атрибут может иметь несколько значений, указанных через пробел. Некоторые параметры очень похожи на параметры inetd. Список всех атрибутов приведен в табл. 8.2.
Атрибуты сервиса для сервера xinetd Таблица 8.2
Атрибут | Описание |
---|---|
Id | Используется, если сервисы используют разные протоколы. Обычно совпадает с именем сервиса |
Туре | Может быть использована любая комбинация из следующих значений: RPC — если это сервис RPC (Remote Procedure Call). UNLISTED — если сервис не описан в файле /etc/rpc для rpc-сервисов или в /etc/services для не rpc. INTERNAL — если xinetd представляет этот сервис (для echo, time, daytime, chargen, и discard). Если RPC-сервисы у вас работают некорректно после установки xinetd, вы можете использовать для них старый inetd — inetd и его новая версия xinetd прекрасно уживаются вместе. В файле /etc/inetd.confоставьте только rpc-сервисы, а остальное закомментируйте, а в /etc/xinetd.conf — наоборот |
Flags | В качестве значения может быть использована любая комбинация из следующих значений: NODELAY — для tcp-сервиса будет установлен флаг сокета — TCP_NODELAY. Только для TCP-сервисов! DISABLE — отключить сервис. KEEPALIVE — установка флага сокета SO_KEEPALIVE. Только для TCP-сервисов! REUSE — установить флаг SO_REUSEADDR на сокет сервера. INTERCEPT — перехватывать пакеты или принимать соединения по порядку, проверяя, что они приходят из нужных мест. NORETRY — избегать повторных попыток в случае неудачи. IDONLY — соединение будет приниматься только от идентифицированных пользователей. На удаленной машине должен работать identification-сервер |
disabled | Может принимать 2 значения, «yes» и «no». Если указать «yes», сервис запускаться не будет |
socket_type | Тип сокета. Может принимать следующие значения: stream — сокет stream, обычно используется службами, работающими на основе протокола TCP dgram — сокет dgram, обычно используется службами, работающими на основе протокола UDP raw — сокет raw для сервисов, требующих прямого доступа к IP seqpacket — сокет seqpacket для сервисов, требующих надежную последовательную пересылку дейтаграмм |
protocol | Задает протокол, по которому будет работать сервер (top, udp, …) |
wait | Задает статус ожидания и может принимать два значения: yes и no, которые соответствуют значениям wait и nowait для сервера inetd (см. выше). Значение yes обычно устанавливается на сокетах dgram, а значение no на сокетах stream |
user | Задает пользователя, от имени которого будет запущен сервер. Пользователь должен быть определен в файле /etc/passwd. По умолчанию сервер запускается от имени пользователя root |
server | Указывает абсолютный путь к запускаемому серверу |
server args | Определяет аргументы, которые будут переданы серверу |
log_on_failure | Определяет, какая информация будет писаться в файл отчета (протокол), если сервис по каким-либо причинам не запустился: HOST — записывать адрес удаленного хоста. USERID — если возможно, записывать идентификатор удаленного пользователя (используется протокол идентификации RFC 1413). ATTEMPT — записывать факт неудачной попытки. RECORD — записывать информацию с удаленного хоста, в случае невозможности запуска сервера |
log_on_success | Определяет, какая информация будет писаться в файл отчета (протокол) в случае удачного запуска сервиса. Можно комбинировать любые из следующих значений: PID — записывать идентификатор запущенного серверного процесса. HOST — записывать адрес удаленного хоста. USERID — если возможно, идентификатор удаленного пользователя (используется протокол идентификации RFC 1413). EXIT — записывать, каким образом был произведен выход. DURATION — записывать продолжительность сессии |
rpc_number | Определяет номер сервиса RPC |
rpc_version | Определяет версию сервиса RPC |
env | Задает значение атрибута. Атрибут представляет собой список строк типа: «name=value». Эти переменные будут добавлены в окружение перед тем, как сервер будет запущен |
passenv | Это список переменных окружения из окружения xinetd, которые могут быть переданы серверу |
port | Определяет порт сервиса. Если порт указан в файле /etc/services, то значение данного параметра должно совпадать с ним |
redirect | Позволяет tcp-сервису делать перенаправление на другой хост. Значение задается в виде host:port |
interface | Устанавливает интерфейс, на котором будет работать сервис. Синтаксис: interface=IP-адрес |
bind | Это синоним параметра interface |
banner | Определяет имя файла, который будет показываться при соединении с сервисом |
banner_success | Определяет имя файла, который будет показываться при удачном соединении |
banner_fail | Определяет имя файла, который будет показываться при неудачном соединении |
cps | Атрибут имеет два аргумента. Первый устанавливает количество соединений в секунду. Если это число будет превышено, сервис будет временно недоступен. Второй — число секунд, после которых сервис снова будет доступен |
max_load | Определяет максимальную загрузку. При достижении максимума, сервер перестает принимать запросы на соединение. Значение параметра — число типа float |
instances | Устанавливает число серверов, которые могут быть активны одновременно для сервиса (по умолчанию лимита нет). Значением этого атрибута может быть число, либо — UNLIMITED |
nice | Устанавливает приоритет сервиса |