Міграція з inetd на xinetd
Xinetd - це альтернатива традиційному супер-сервера inetd. процесу, керуючому запуском і зупинкою мережевих серверів, котрі мають потреби перебувати в постійно запущеному стані. Xinetd є не просто заміною, він вміє виконувати набагато більше, ніж простий запуск і останов демонів у відповідь на вхідні TCP і UDP з'єднання. Найбільш значущим перевагою xientd є його відмінна конфігурованість, включаючи списки контролю доступу (ACL), обмеження швидкості, обмеження доступу за часом і перенаправлення потоків.

Пакети з xinetd присутні практично у всіх популярних дистрибутивах Linux, так що ви без праці повинні встановити його у вашій системі, використовуючи менеджер пакетів. Якщо такий спосіб вам з якихось причин не підходить, ви можете завантажити вихідні з xinetd.org і зібрати супер-сервер традиційним способом. Xinetd при складанні не вимагає якихось екзотичних залежностей. Природно, зверніть увагу, щоб у вашій системі вже не було встановлено з пакетів xinetd. якщо будете збирати його з вихідних кодів. І не забудьте зберегти /etc/inetd.conf перед тим, як починати.
основи конфігурування
Файл конфігурації inetd складається з рядків, кожна з яких описує одну службу. Рядок складається з:
- імені служби (так, як це ім'я описано в / etc / services);
- типу сокета (stream для TCP і dgram для UDP);
- імені протоколу;
- директиви wait або nowait (вказує супер-серверу, чи потрібно чекати завершення запущеного раніше демона, перш ніж запускати наступний при новому підключенні);
- імені користувача, від імені якого необхідно запускати демон;
- шляху до виконуваного файлу демона і аргументів, переданих йому під час запуску.
Для прикладу, фрагмент файлу конфігурації inetd:
imap stream tcp nowait root / usr / sbin / tcpd imapd
sane - port stream tcp nowait saned. saned / usr / sbin / saned saned
Перший рядок запускає IMAP-сервер щоразу при вхідному підключенні на TCP-порт 220. У другому рядку описаний запуск сервера Sane. надає поділ доступу до сканера.
Формат конфігураційних файлів xinetd має іншу структуру. Тут кожен сервіс описується групою опцій, поміщених в фігурні дужки. Кожен опис сервісу починається зі слова service. за яким слідує ім'я сервісу, а потім опис параметрів, укладену в фігурних дужках. наприклад:
Перші кілька рядків наведеного прикладу описують те саме, що і приклад конфігурації inetd. представлений вище: TCP, stream, nowait, root. А ось що залишилися рядки - це вже можливості, що надаються тільки xinetd. Параметр only_from дозволяє визначити список хостів, розділених пробілами, з яких дозволені вхідні підключення. У значенні параметра banner_fail вказується шлях до текстового файлу, що містить повідомлення, передане клієнтові в разі, якщо підключення заборонено. Ви також можете скористатися атрибутом banner_success. щоб відправляти повідомлення в разі успішних підключень, і banner. якщо хочете відправляти повідомлення незалежно від того, успішним чи невдалим було підключення.
Значення параметра log_on_failure визначає, яка інформація буде заноситися в лог, в разі невдалих підключень. Зверніть увагу на використовуваний оператор «+ =» замість «=» - при його використанні USERIDбудет доданий до існуючої інформації, яка відправляється в лог за замовчуванням. Як ви, напевно, здогадалися, параметр log_on_success теж доступний. Існують різні варіанти інформації, яку xinetd може протоколювати, як, наприклад, ім'я віддаленого хоста і кількість трафіку.
Ви можете заштовхати всю конфігурацію xinetd в один-єдиний файл /etc/xinetd.conf. а можете розбити її на кілька дрібних файлів, наприклад, по одному сервісу в кожен файл. Щоб зробити це, скористайтеся директивою includedir. розміщеної в кінці файлу основний конфігурації. Як аргумент директиві необхідно передати шлях до каталогу, який містить файли конфігурації сервісів. Всі файли, імена яких не починаються з точки або тильди, буду оброблені xinetd. як файли конфігурації. У деяких дистрибутивах подібна схема реалізована за замовчуванням, а каталогом для зберігання файлів конфігурації є /etc/xinetd.d.
У разі, якщо ви використовуєте таку розділену конфігурацію, у вас, скоріш за все, є запис «default» в файлі /etc/xinetd.conf. Це спеціальний запис, в якій описуються атрибути, які буду застосовані до всіх інших записах, в яких вони не буду виявлені. Звичайно, такі атрибути, як server і socket_type не мають сенсу в «глобальному» їх застосуванні, однак є ряд атрибутів, які можуть бути однаковими для всіх або майже всіх записів. Ви можете заощадити собі трохи часу, визначивши такі атрибути в defaults. наприклад:
Контроль доступу
Крім опцій, представлених в прикладах вище, xinetd володіє додатковими опціями, визначення яких може збільшити рівень безпеки вашої мережі, а також запобігти деякі види атак.
Директива access_times дозволяє управляти доступом до сервісу на підставі системного часу. Визначаючи цю директиву, ви задаєте проміжок часу, протягом якого буде дозволений доступ до сервісу, в форматі «гг: мм-чч: мм». наприклад
access _ times 05. 00 - 11. 30 13. 00 - 16. 30
Залишає сервіс доступним з 5 до 11 ранку, потім закриває його «на обід» до першої години дня, потім знову відкриває до 16:30. Як бачите, можна вказувати послідовності часових інтервалів. Якщо ж вам необхідно управляти не дозволом, а забороною доступу за часом, використовуйте опцію deny_time.
Наведені вище параметри контролю доступу можна комбінувати з «адаптивними» настройками, налаштувавши які, можна зробити так, щоб сервіс ставав недоступним після настання певних обставин. Наприклад, атрибут per_source. приймає в якості аргументу ціле число, дозволяє обмежувати кількість одночасних підключень до сервісу. Така можливо може бути використана, наприклад, щоб обмежити кількість одночасних з'єднань до SMTP-сервер у разі, якщо у вашій мережі десь завівся спам-бот.
Атрибут cps дозволяє вам обмежувати частоту вхідних з'єднань протягом однієї секунди, при перевищенні цієї частоти сервіс буде недоступний протягом певного часу, яке ви вкажете. Використання подібної функції може допомогти запобігати DoS-атаки. Наприклад, якщо ви визначите:
то при досягненні 81 підключення за секунду, сервіс буде відключений на 60 секунд, після чого продовжить приймати вхідні підключення.
Також, ви можете визначити поріг відключення сервісу для таких параметрів, як:
Хости і інтерфейси
Атрибут redirect дозволяє перенаправляти весь TCP-трафік (але не UDP!) До іншого хосту. Синтаксис атрибута дуже простий:
redirect = хост порт
Коли xinetd приймає вхідне підключення до сервісу, в описі якого є цей атрибут, супер-сервер відкриває TCP-з'єднання до хосту, вказаному в параметрі атрибута, і «прокидає» до нього входить TCP-з'єднання на налаштованому порту.
Більшу частину функціоналу, пропонованого xinetd. можна реалізувати і за допомогою інших програм, таких як inetd. TCP Wrapper. iptables і т. п. Однак в цьому випадку ви втрачаєте єдиного інструменту управління всім цим «господарством».
