Варианты использования поддержки TCP Wrappers
Не все Internet-службы запускаются с помощью inetd или xinetd, яркий пример тому — SSH. В этом случае мы не можем использовать TCP Wrappers или xinetd для блокирования доступа хакеру. Даже если будет заблокирован доступ с помощью telnet и FTP, хакер удастся установить соединение по SSH. Поэтому для многих Internet-служб предусмотрена возможность компиляции с поддержкой TCP Wrappers. Кстати, OpenSSH — одна из таких программ. При компиляции SSH запустите программу configure с параметром -with-tcp-wrappers. Впоследствии в файл /etc/hosts.allow можно добавить следующую строку:
sshd: .example.com .trusted_network.org trusted_machine.example.org |
Наводим контакт с производителями программ
Если в интересующую программу не была добавлена возможность поддержки TCP Wrappers, то можно обратиться к поставщикам данной программы с соответствующей просьбой. К сожалению, это не всегда помогает. Но шансы повышаются во много раз, если самостоятельно определить, как добавить эту возможность и предоставить заплату поставщикам.
Ручное добавление в программу поддержки TCP Wrappers
Программу с открытым исходным кодом можно изменять самостоятельно, чтобы она соответствовала потребностям конкретного пользователя. Ниже представлен пример программного кода, который необходим для добавления поддержки TCP Wrappers в программу Web-службы. Для примера была использована программа stunnel (http://www.stunnel.org/ (см. www.stunnel.org)), что предполагает использование языка С и того, что для программы, использующейся в процессе компоновки, установлена переменная препроцессора USE_LIBWRAP.
Приведенный ниже файл заголовка необходимо разместить в начале своей С-программы:
/* TCP wrappers */ #ifdef USE_LIBWRAP #include int allow_severity=LOG_NOTICE; int deny_severity=LOG_WARNING; #endif |
В функции, которая управляет соединением, добавим следующую строку при объявлении переменной:
#ifdef USE_LIBWRAP struct request_info request; #endif |
Затем, после установки соединения, но перед выполнением каких-либо действий с данными используем функцию hosts_access библиотеки TCP Wrappers для определения того, следует ли обработать данные или немедленно оборвать соединение:
#ifdef USE_LIBWRAP request_init (&request, RQ_DAEMON, options.servname, RQ_FILE, local, 0); fromhost (&request); if (!hosts_access(&request)) { log (LOG_WARNING, "Connection from %s:%d REFUSED by libwrap", inet_ntoa (addr.sin_addr), ntohs (addr.sin_port)); /*место для программного кода, предназначенного для разрыва соединения*/; } #endif |
Спасибо, как-раз то, что искал. Сайт прекрасен! =)
Спасибо большое за статью, качественно написанна и содержит много полезной информации. Несмотря на то, что данная тема достаточно часто обсуждается в сети, понастоящему стоещего ресурса нет. Буду ждать новых статей.
Полезная информация. Теперь буду знать.
Спасибо за статью) как раз искал информацию по TCP Wrappers
Вот я прочел статью и понял что хак дело тонкое, спасибо за статью очень подробно написано!
Очень интересная информация.