Tcpserver

Материал из rrv-wiki
Перейти к навигации Перейти к поиску

tcpserver наблюдает за входящими TCP-соединениями

Синтаксис:

tcpserver [ opts ] host port prog opts - cерия опций host - единственный аргумент port - единственный аргумент prog может состоять из одного или более tcpserver ожидает соединений от клиентов tcp. Для каждого такого соединения будет запущен процесс prog, при этом дескриптор 0 используется для чтения из сети, а дескриптор 1 - для выдачи данных в сеть. Также используюся переменные окружения. Адрес сервера передаётся через параметры host и port. Параметр port может быть задан в форме имени из /etc/services или числом; если этот параметр равен 0, tcpserver выбирает свободный порт TCP. Парметр host может также быть равным 0, что позволяет соединения с любого локального IP адреса, либо может быть ip-адресом в десятичной нотации, что допускает соединение только с указанного адреса, либо символическим именем хоста, что позволяет соединения с первого ip-адреса данного хоста. Имена хостов проходят через квалифицирование с использованием утилиты dns_4_qualify. tcpserver прекращает исполнение при получении сигнала SIGTERM.

Опции

Опции общего назначения:

-q: Quiet. Не печатать сообщения об ошибках.
-Q: (по умолчанию) Печатать сообщения об ошибках.
-v: Verbose. Печатать сообщения об ошибках и статусные сообщения.

Опции, влияющие на соединения:

-c n: Не поддерживать более чем n одновременных соединений. Если одновременно запущено n копий процесса prog, ожидание нового соединения приостанавливается до тех пор, пока одна из копий завершится. n должно быть целым положительным числом. Значение по умолчанию: 40.
-x cdb: Следовать правилам, скомпилированным в cdb из tcprules. Эти правила могут устанавливать переменные окружения или сбрасывать соединения из плохих источников. Вы можете перезапускать tcprules (перекомпилировать базу данных) во время исполнения tcpserver.
-X: С помощью -x cdb можно допустить соединения, если база данных cdb отсутствует. Обычно tcpserver сбрасывает соединения, если cdb не существует.
-B banner: Записывает banner в сеть непосредственно после того, как соединение установлено. tcpserver записывает banner перед тем, как проанализирует $TCPREMOTEHOST, перед тем, как обработает $TCPREMOTEINFO, и перед проверкой cdb. Эта опция может использоваться для уменьшения латентности протокола, когда клиент ожидает приглашения с сервера.
-g gid: Переключает идентификатор группы в gid после подготовки к приему соединения. gid должно быть положительным целым.
-u uid: Переключает ID пользователя в значение uid после подготовки к приёму соединений. uid должно быть положительным целым.
-U: То же самое, что и -g $GID -u $UID. Обычно $GID и $UID устанавливаются программой envuidgid.
-1: После подготовки к приёму соединений, печатает номер локального порта в стандартный поток вывода.
-b n: Обеспечивает обратную трассировку n TCP SYNков. На накоторых системах, n ограничено 5. На системах, поддерживающих SYN cookies, the backlog is irrelevant.
-o: Оставляет все IP опции. Если клиент посылает пакет, содержащий IP source route, ответные пакеты будут посланы по тому же маршруту.
-O: (По умолчанию.) Уничтожает опции IP. Клиент все равно может использовать source routing для соединения и для посылки данных, но пакеты пойдут к нему по маршруту, предусмотренному по умолчанию.
-d: Задерживает посылку данных на долю секунды в случае, когда удаленный хост медленно отвечает. Эта опция включена по умолчанию в настоящее время, но может быть выключена в будущем; если хотите, установите эту опцию уже сейчас.
-D: Никогда не задерживать посылаемые данные; управляется TCP_NODELAY.

Опции, влияющие на сбор данных=

-h: (По умолчанию) Обращаться для разрешения имени хоста к DNS чтобы установить переменную окружения $TCPREMOTEHOST. -H: Не обращаться к DNS для опеределения имени хоста; убрать переменную окружения $TCPREMOTEHOST. Чтобы избежать зацикливание, вы обязаны использовать эту опцию для серверов с TCP по порту 53. -p: Paranoid. После разрешения имени хоста через DNS, произвести обратную сверку IP адресов в DNS для этого имени хоста, и удалить переменную окружения $TCPREMOTEHOST если ни один из адресов не совпадает с IP клиента. -P: (По умолчанию) Not paranoid. -l localname: Не далать резольвинг локальных имен через DNS; localname используется для установки переменной окружения $TCPLOCALHOST. Обычный выбор для localname величина 0. Чтобы предотвратить зацикливание, вы обязаны использовать эту опцию для сереров, работающих по TCP порту 53. -r: (По умолчанию) Пытаться получить $TCPREMOTEINFO от удаленного хоста. -R: Не пытаться получить $TCPREMOTEINFO с удаленного хоста. Чтобы избежать зацикливания, вы обязаны использовать эту опцию для серверов, работающих по TCP портам 53 и 113. -t n: Отказаться от попыток получения $TCPREMOTEINFO через n секунд. Значение по умолчанию: 26.

Чей то перевод man tcprules

Имя

tcprules - Программа предназначена для перевода в формат базы данных правил, используемых tcpserver.

Командная строка:

tcprules cdb tmp tcpserver по умолчанию следует правилам для определения, допустимо или нет данное TCP соединение. Например, правило: 18.23.0.32:deny запрещает любые соединения с IP адреса 18.23.0.32 tcprules читает правила со своего стандартного потока ввода и записывает их в cdb, в двоичном формате, используемом для быстрого их чтения tcpserverом. tcprules может использоваться во время работы tcpserver. Эта программа позаботится о безопасном обновлении cdb. Такой подход обеспечивается первоначальной записью правил в tmp, а затем перемещением tmp поверх cdb. Если tmp уже существует на момент записи, он будет уничтожен. Директории, в которых находятся tmp и cdb, должны быть доступны по записи для tcprules. Кроме того, эти директории должны находиться в пределах одной и той же файловой системы. Если при чтении исходных правил или при создании tmp наблюдаются какие-либо затруднения, tcprules не модифицирует cdb. Двоичный формат базы данных cdb переносим между машинами разных архитектур.

Формат правил.

Правило занимает одну строку. Файл, содержащий в себе правила, может содержать также комментарии: строки, начинающиеся с символа "#" игнорируются. Каждое правило состоит из адреса, двоеточия, и перечня инструкций, без дополнительных пробелов. Когда tcpserver получает запрос соединения с указанного адреса, он следует инструкциям. [править] Адреса.

Адреса для tcpserver могут быть заданы в следующих видах:

 1. $TCPREMOTEINFO@$TCPREMOTEIP, если переменная окружения $TCPREMOTEINFO определена.
 2. $TCPREMOTEINFO@=$TCPREMOTEIP, если определены обе переменные окружения: $TCPREMOTEINF и $TCPREMOTEIP.
 3. $TCPREMOTEIP;
 4. =$TCPREMOTEHOST, если переменная окружения $TCPREMOTEHOST определена.
 5. Сокращенные префиксы $TCPREMOTEIP, заканчивающиеся точкой.
 6. Сокращенные суффиксы $TCPREMOTEHOST, начинающиеся с точки, предваряемой знаком равенства, если переменная $TCPREMOTEHOST определена.
 7. =, если переменная $TCPREMOTEHOST определена.
 8. Пустая строка.

tcpserver использует только одно первое попавшееся по порядку, подходящее к IP адресу правило. Необходимо использовать опцию p, если вы уверены в переменной окружения $TCPREMOTEHOST. Например, допустим, имеются следующие правила:

   joe@127.0.0.1:first
   18.23.0.32:second
   :third
   127.:fourth

Если переменная $TCPREMOTEIP имеет значение 10.119.75.38, tcpserver будет следовать инструкции third. Если переменная $TCPREMOTEIP имеет значение 18.23.0.32, tcpserver будет следовать инструкции second. Если переменная $TCPREMOTEIP имеет значение 127.0.0.1, а $TCPREMOTEINFO имеет значение bill, tcpserver будет следовать инструкции fourth. Если переменная $TCPREMOTEIP имеет значение 127.0.0.1, а $TCPREMOTEINFO имеет значение joe, tcpserver будет следовать инструкции first. Для проверки того, как tcpserver интерпретирует правила в cdb, можно использовать программу tcprulescheck.

Диапазоны адресов

tcprules интерпретирует правило 1.2.3.37-53:ins как краткую форму инструкций 1.2.3.37:ins, 1.2.3.38:ins и так далее, вплоть до 1.2.3.53:ins. Точно так же, 10.2-3.:ins является сокращением для 10.2.:ins и 10.3.:ins Инструкции Инструкции в правиле могут начинаться либо с allow, либо с deny. Инструкция deny приказывает tcpserverу сбросить соединения, не вызывая соответствующий ему процесс. Например, инструкция

     :deny

заставит tcpserver сбрасывать все соединения, которые не управляются предшествующими этой строке правилами. Инструкции могут быть продолжены списком любых переменных окружения в форме var="xxx". tcpserver в этом случае добавит для запускаемого процесса переменную окружения $var со значением "xxx". Например

     10.0.:allow,RELAYCLIENT="@fix.me"

добавит переменную окружения $RELAYCLIENT со значением @fix.me. Кавычки могут быть заменены любым повторяющимся символом:

     10.0.:allow,RELAYCLIENT=\@fix.me\

Может быть перечислено любое количество переменных:

     127.0.0.1:allow,RELAYCLIENT="",TCPLOCALHOST="movie.edu"

tcprulescheck команда

     tcprulescheck cdb

покажет, что tcpserver будет делать при соединении с IP адреса $TCPREMOTEIP и именем хоста $TCPREMOTEHOST и информации о удаленном компьютере из $TCPREMOTEINFO, следуя правилам, скомпилированным в cdb программой tcprules. [править] Создание файла tcp.smtp.cdb

Создаем файл правил /etc/tcp.smtp, затем выполняем: