Javi Polo Об авторе: Мне 18 лет и я многострадальный учащийся с экзаменами по каталанскому языку в сентябре. Моей страстью являются компьютеры, и я надеюсь поступить в UIB со специализацией в телекоммуникационных системах и основной специализацией в компьютерных науках. Мне нравится hardcore и я участвую в музыкальной группе Niko-Chan's Kingdom. Кроме этого мало что можно сказать, разве что у меня отличная подруга Xiska 0:) Написать автору |
Используем IPFWADM для управления TCPD и брандмауэрамиАннотация: В этой статье очень кратко описывается процесс конфигурации сервисов inetd, позволяющий улучшить безопасность вашей системы. В качестве основного средства администрирования и настройки сервисов inetd рассматривается IPFWADM. Прежде чем начать, хотелось бы пояснить, что такое inetd. В самых общих словах это демон, который управляет сервисами, предоставляемыми системой хостам, подключенным через сеть. Может оказаться, что в какой-нибудь системе inetd не сконфигурирован на управление всеми сервисами по умолчанию, поэтому прежде всего нужно посмотреть /etc/inetd.conf и узнать, какими сервисами он управляет (строки, которые начинаются не с символа "#"). Самым первым советом будет не включать больше сервисов, чем действительно требуется, поскольку это самый лучший способ предотвратить атаки, основанные на ошибках в демонах, которые мы не используем. Я предполагаю, что у читателя есть под рукой копия его inetd.conf, поэтому хотел бы объяснить, что означают некоторые вещи. Например, строка:ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a Первое слово -- это имя предлагаемого сервиса (в этом случае "ftp", и мы можем проверить файл /etc/services, к какому порту он подключен). Второе поле -- тип открытого сокета, могут быть: stream (как в этом примере), dgram, raw, rdm и seqpacket. Следующее поле представляет собой используемый протокол. Он должен быть объявлен в файле /etc/protocols, как в нашем первом примере, где протокол TCP должен быть уже объявлен в этом файле. После протокола идет поле wait/nowait. Оно всегда должно быть nowait, за исключением типа сокета datagram (dgram). Для последнего типа сокетов мы должны указать nowait в случае, если сервер поддерживает множественные триды (threads) или wait, если сервер поддерживает один трид. Причина заключается в том, что в мультитридовых системах сервер, получивший запрос, запускает новый процесс, затем освобождает сокет с тем, чтобы inetd мог продолжать прием новых запросов, поэтому используется nowait. В случае однотридовой системы мы должны указать wait потому, что сервер всегда висит на одном и том же сокете и не может запускать соединения отдельными процессами. Более того, существует один вариант, когда мы должны указать nowait.50 -- 50 означает максимальное количество демонов, которые могут быть запущены (или запросов, которые могут быть приняты, с какой точки зрения посмотреть) за одну минуту. По умолчанию стоит 40. Пятое поле указывает имя пользователя, который запускает демона, в этом примере ftp запущен пользователем root. Шестое и дальнейшие поля являются запускаемыми программами, за которыми следуют параметры, передаваемые программе. В приведенном примере запускается демон tcpd и в качестве аргумента демон in.ftpd и параметры -l -a. Далее идет самая интересная часть этого раздела, рассмотрение TCPD. Начнем. tcpd -- это демон, который фильтрует запросы и выполнняет те или иные действия в зависимости от того, какой демон необходимо запустить в ответ на запрос сервиса с IP адреса. Эти решения основаны на конфигурационных файлах /etc/hosts.allow и /etc/hosts.deny. В принципе, /etc/hosts.deny используется для указания тех, кому отказано в праве пользоваться сервисами сервера и в /etc/hosts.allow указываются те, кто имеет доступ к сервисам. Формат обоих файлов следующий:ДЕМОН: IP[: ОПЦИЯ1 [: ОПЦИЯ2 ]] где ДЕМОН может быть демоном, который необходимо запустить, как указанный в примере in.ftpd, или это может быть предопределенная константа ALL, означающая всех демонов. IP может быть или определеным IP адресом, URL, диапазоном IP адресов (или URL), или могут быть указаны любые обобщенные образцы, о которых я расскажу позже. Чтобы указать диапазон IP адресов, мы можем написать: `123.32.' Такая запись означает все адреса 123.32.XXX.XXX; точно также можно указать диапазон URL как `.ml.org', который означает все поддомены ml.org Более традиционной формой задания IP адресов является АДРЕС/МАСКА. В этом случае, например диапазон от 127.0.0.0 до 127.0.255.255 задается как 127.0.0.0/255.255.0.0. Теперь обобщенные образцы:
Последние две опции позволяют использовать символы расширения, применяемые для tcpd, то есть:
Уже при таком объяснении и приведенных опциях вы можете много что сделать, например я знаю кое-кого, кто атоматически посылает teardrop при любой попыткой зайти телнетом в его систему :) ЗАМЕЧАНИЕ: teardrop -- это DoS (Denial of Service (отказ в обслуживании), атака, которая приводит к перезагрузке или переинициализации системы). Она основана на ошибке при дефрагментации TCP пакетов, которая существует в большинстве операционных систем (или скорее существовала, поскольку в большинстве ядер она уже была исправлена). При пересылке информации по Интернет используется протокол TCP/IP (этот протокол существует и в других сетях, например в intranet), хотя на самом деле это два протокола: TCP занимается разделением ифномрации на пакеты и передаче их по протоколу IP, который посылает их машине-получателю; как только они достигнут получающей стороны, протокол TCP проверяет наличие всех пакетов и восстанавливает исходную информацию. Эта атака (и многие другие, основанные на ней) использует тот факт, что многие операционные системы перед дефрагментацией не проверяют размер пакетов, и если они были слишком малы, машина допускает ошибку при их сборке. Я не вполне уверен в полноте объяснения, поэтому буду рад любому совету или критике. Продолжим после краткого объяснения... Примеры:#hosts.allow ALL: 127.0.0.1 # localhost имеет доступ ко всему in.ftpd: ALL: spawn (wavplay /usr/share/sounds/intruder.wav & ) # по ftp может войти любой, но при этом воспроизводится # wav-файл (чтобы я знал) in.telnetd: ALL: twist ( teardrop %h %h ) # посылать teardrop любому, кто # попытается зайти телнетом #fin #hosts.deny ALL: `.bsa.org' # с домена bsa.org никто не может зайти in.fingerd: ALL # сервис fingerd запрещен для всех :) #fin Это все, что я хотел рассказать про tcpd, как я уже говорил, не так уж много я и знаю. Могу порекомендовать поэкспериметировать с конфигурацией и почитать справочные страницы ( tcpd, host_access(5) ), я уверен, из них читатель узнает гораздо больше, чем я смогу научить. Теперь давайте рассмотрим IPFWADMСамым первым условием является поддержка ядром IP Firewalling ( Networking -> Network firewalls + IP: firewalling ). Затем, после компиляции и переинициализации системы, мы можем его использовать. IPFWADM позволяет нам помимо прочего управлять прохождением пакетов TCP, UDP и ICMP (в этой статье я буду обсуждать только эти приложения). Если кратко, администратор может указать, какие пакеты могут входить, даже задать адрес или диапазон IP адресов, по какому порту, по какому конкретному протоколу и все возможные комбинации этих вариантов... Аналогично достигается тот же самый административный контроль над исходящими пакетами. ipfwadm обладает несколькими основными параметрами:
В этой статье я расскажу только про параметры -I и -O. Оба параметра подчиняются одному и тому же синтаксису. Опции для этих параметров:
В общем-то, это все фундаментальные параметры, поэтому, чтобы разрешить все фреймы с моей системы на мою систему, я добаляю правило: ipfwadm -I -i a -S 127.0.0.1и запретить пакеты, приходящие с 123.34.22.XXX : ipfwadm -I -a d -S 123.34.22.0/255.255.255.0тогда, если я хочу отказать ЛЮБОМУ в доступе к порту netbios, исключая IP адрес 111.222.123.221: ipfwadm -I -a a -P tcp -S 111.222.123.221 139ipfwadm -I -a d -P tcp -D 0.0.0.0/0 139 Что же, думаю на этом статья закончена, немного маловато, но и знания мои ограничены O:) Перевод на английский: Miguel Angel Sepulveda Перевод на русский: Владимир Попов |
This website is maintained by Miguel Angel Sepulveda © Javi Polo 1998 LinuxFocus 1998 |