Михаил Фленов СанктПетербург бхвпетербург 2010 удк 681 06 ббк 32. 973. 26018. 2 Ф69
Скачать 3.69 Mb.
|
Фильтрация в Linux Для фильтрации пакетов по определенным вами правилам в ядро Linux уже встроены все необходимые функции. Но это только основа, а нужен еще ин- струмент , который в удобной форме позволит управлять этими правилами. С ОС Linux поставляется сразу две программы — iptables и ipchains. На дан- ный момент ipchains уже практически никто не использует, а основной явля- ется iptables. В ядре Linux определены три основные цепочки правил: Input — для входящих пакетов; Output — для исходящих пакетов; Forward — для пакетов, предназначенных другой системе. Вы можете создавать свои цепочки, которые будут привязаны к определен- ной политике, но мы эту тему рассматривать не будем. ОС Linux проверяет все правила из цепочки, которая выбирается в зависимо- сти от направления передачи. Пакет последовательно обследуется на соот- ветствие каждому правилу из цепочки. Если найдено хотя бы одно совпаде- ние с описанием, то выполняются действия, указанные в данном правиле: DENY, REJECT или ACCEPT, то есть система решает, пропускать пакет дальше или нет. Цепочки несут в себе одну очень неприятную для новичков особенность. До- пустим , что на вашем сервере вы хотите открыть 21 порт только для себя. Для этого можно создать два правила: 1. Запретить все входящие пакеты на 21 порт сервера. 2. Разрешить пакеты на 21 порт с компьютера с адресом 192.168.1.1. На первый взгляд все верно, доступ запрещен для всех, а открыт только для одного IP-адреса. Проблема кроется в том, что если посылка будет с адреса 192.168.1.1, то проверка первого правила для параметров пакета даст поло- жительный результат, поэтому будет произведен запрет и пакет удалится, и второе правило не сработает никогда. Чтобы наша политика действовала верно, строки надо поменять местами. В этом случае сначала будет проверена запись "Разрешить пакеты на 21 порт с компьютера с адресом 192.168.1.1", контроль пройдет успешно, а значит, пакет будет пропущен. Для остальных IP-адресов это правило не подойдет, и проверка продолжится. И вот тогда сработает запрет доступа на 21 порт для всех пакетов. Пакеты , направленные на другие порты, не будут соответствовать правилам, значит , над ними будут выполняться действия по умолчанию. Управление доступом 151 4.10.3. Firewall — не панацея Установив Firewall, вы не получаете полной защиты, потому что существует множество вариантов взлома, особенно если сетевой экран настроен некор- ректно . Мало просто установить программу, ее нужно настроить, контроли- ровать и вовремя обновлять. Firewall — это всего лишь замок на двери парадного входа. Злоумышленник редко пользуется парадным входом, он будет проникать в систему через чер- ный или полезет в окно. Например, на рис. 4.2 показана защищенная сеть, а ее главная дверь — это выход в Интернет через сетевой кабель. Однако ес- ли на каком-нибудь клиентском компьютере стоит модем, то это уже черный ход , который не будет контролироваться сетевым экраном. Я видел серверы, в которых доступ в сеть разрешен только с IP-адресов, определенных списком. Администраторы верят, что такое правило позволит защититься от хакеров. Это не так, и мы уже говорили, что адрес можно под- делать или можно захватить доверенный компьютер. Однажды я работал в фирме, где выход в Интернет контролировался по IP- адресу . У меня было ограничение на получение 100 Мбайт информации в месяц, а на соседнем компьютере был полный доступ. Чтобы не тратить свой трафик на получение больших файлов со своего IP-адреса, я только смотрел WEB-страницы. Когда нужно было что-либо скачать, я выполнял следующие действия: 1. Дожидался , когда освободится нужный компьютер, например, когда хозя- ин уходил на обед. 2. Вытаскивал сетевой кабель на компьютере соседа, чтобы разорвать со- единение 3. Спокойно менял свой IP-адрес на соседский, и по безграничному трафику быстро качал все, что требовалось. 4. После скачивания возвращал IP-адрес и кабель на место. Таким образом я в течение месяца получал необходимую мне информацию. Дальше стало еще проще. Я установил прокси-сервер на соседний компьютер и стал его использовать. После этого мы всем отделом заходили в Интернет через один IP-адрес, имеющий неограниченный трафик. В современных сетевых экранах простая замена IP-адреса не позволит извне проникнуть в систему. Сейчас используются намного более сложные методы идентификации . С помощью подмены можно получить большие привиле- гии только в рамках сети, а не извне, да и то лишь при плохих настройках. Но хороший администратор даже внутри сети не допустит таких махинаций, потому что есть еще защита по MAC-адресу и пароли доступа. Глава 4 152 Сетевые экраны могут работать на компьютере с ОС (программные) или на каком -нибудь физическом устройстве (аппаратные). В любом случае это про- грамма , а ее пишут люди, которым свойственно ошибаться. Как и ОС, так и программу сетевого экрана нужно регулярно обновлять и исправлять по- грешности , которые есть всегда и везде. Рассмотрим защиту по портам. Допустим, что у вас есть WEB-сервер, кото- рый защищен сетевым экраном, и в нем разрешен только порт 80. А хакеру больше и не надо!!! Ведь это не значит, что нельзя будет использовать другие протоколы . Можно создать туннель, через который данные одного протокола передаются внутри другого. Так появилась знаменитая атака Loki, которая санкционирует передачу команды для выполнения на сервере через ICMP- сообщения Echo Request (эхо-запрос) и Echo Reply (эхо-ответ), подобно команде ping Сетевой экран помогает защищать данные, но основным блюстителем поряд- ка является администратор, который должен постоянно следить за безопас- ностью и выявлять атаки. Вновь разработанная атака сможет преодолеть се- тевой экран, и компьютер ничего не заподозрит, потому что руководствуется только заложенными в программу алгоритмами. Чтобы обработать нестан- дартную ситуацию, за системой должен наблюдать администратор, который будет реагировать на любые нештатные изменения основных параметров. Для того чтобы пройти через сетевой экран, зачастую требуется пароль или предъявление какого-нибудь устройства типа Touch Memory, Smart Card и др. Если пароль не защищен, то все затраченные на сетевой экран деньги окажутся потерянными зря. Хакер может подсмотреть пароль или подслу- шать его с помощью анализатора пакетов (сниффера) и предъявить подде- ланные параметры идентификации сетевому экрану. Так было взломано немало систем. Управление паролями должно быть четко регламентировано. Вы должны контролировать каждую учетную запись. Например, если уволился сотруд- ник , у которого были большие привилегии, то все сведения, определяющие его в ОС, необходимо тут же заблокировать и изменить все известные ему пароли Однажды мне пришлось восстанавливать данные на сервере после того, как фирма выгнала администратора. Он посчитал увольнение несправедливым и через несколько дней без особого труда уничтожил на главном компьютере всю информацию. Не спас даже хорошо настроенный сетевой экран. В дан- ном случае все произошло быстро, потому что взломщик сам занимался установкой параметров. Такого не должно быть, необходимо конфигуриро- вать Firewall так, чтобы его не взломал даже бывший администратор. Управление доступом 153 Я всегда рекомендую своим клиентам, чтобы пароль с основными привиле- гиями на сетевой экран был известен только одному человеку, например, на- чальнику информационного отдела, но никак не рядовому специалисту. Администраторы меняются достаточно часто, и после каждого их увольнения можно забыть поменять какой-нибудь пароль. 4.10.4. Firewall как панацея Может сложиться впечатление, что Firewall — это пустое развлечение и тра- та денег. Это не так. Если он хорошо настроен, постоянно контролируется, а в системе используются защищенные пароли, то сетевой экран может пре- дотвратить большинство проблем. Хороший экран имеет множество уровней проверки прав доступа, и нельзя использовать только один из них. Если вы ограничиваете доступ к Интер- нету исключительно по IP-адресу, то приготовьтесь оплачивать большой трафик . Но если при проверке прав доступа используется IP-адрес в соче- тании с MAC-адресом и паролем, то такую систему взломать уже намного сложнее . Да, и MAC-, и IP-адрес легко подделать, но можно для полной надежности подключить к системе защиты и порты на коммутаторе. В этом случае , даже если хакер будет знать пароль, то для его использования нуж- но сидеть именно за тем компьютером, за которым он закреплен. А это уже не просто. Защита может и должна быть многоуровневой. Если у вас есть данные, кото- рые нужно оградить от посторонних, то используйте максимальное количе- ство уровней. Помните, что лишней защиты не бывает. Представьте себе банк. У входа обязательно стоит охранник, который спасет от воров и мелких грабителей. Но если подъехать к такой организации на танке , то эта охрана не поможет. Сетевой экран — это как охрана на дверях, защищает от мелких хакеров, ко- торых подавляющее большинство. Но если банком займется профессионал, то он может добиться успеха. Я не говорю, что обязательно добьется, но вполне возможно. Помимо охраны у входа, деньги в банке всегда хранятся в сейфе. Финансо- вые сбережения для банка — это как секретная информация для сервера, и они должны быть максимально защищены. Именно поэтому устанавливают сейфы со сложными механизмами защиты, и если вор не знает, как их обой- ти , он потратит на вскрытие замка драгоценное время, и успеет приехать милиция Глава 4 154 В случае с сервером в роли сейфа может выступать шифрование, которое по- вышает гарантию сохранности данных. Даже если хакер проникнет на сервер, минуя сетевой экран, ему понадобится слишком много времени, чтобы рас- шифровать данные. Вы успеете заметить и вычислить злоумышленника. Ну а если взломщик скачал зашифрованные данные и пытается их расшифровать на своем компьютере, то с большой вероятностью можно утверждать, что информация раньше устареет, чем хакер сможет ее прочитать. Главное, что- бы алгоритм шифрования и ключ были максимально сложными. 4.10.5. Конфигурирование Firewall Самый простой способ настроить сетевой экран — использовать графиче- скую утилиту. В Mandriva 2008 для этого используется уже знакомая нам утилита Центр управления. В ней нужно перейти в раздел Безопасность и щелкнуть по иконке Set up your personal firewall (рис. 4.3) или Настроить персональный сетевой экран. Рис . 4.3. Окно запуска графической утилиты конфигурирования сетевого экрана Управление доступом 155 Рис . 4.4. Выбор сервисов , к которым должен быть предоставлен доступ Рис . 4.5. Запуск центра управления в KDE Глава 4 156 Визуальную настройку упростили, дальше просто некуда. Запустите утилиту конфигурирования , перед вами появится окно (рис. 4.4), в котором достаточ- но выбрать, к каким сервисам, установленным на компьютере, необходимо разрешить доступ по сети. Самый опасный пункт — первый. Если вы выбе- рите его, значит, вы абсолютно ничего не поняли из того, что я пытался рас- сказать в этой книге ранее. Кстати , я все это время говорю, как работать с GNOME, но до сих пор не по- казал , где находится утилита конфигурирования в другой распространенной графической оболочке Linux — KDE. Здесь центр управления запрятан в Меню | Утилиты | Системные | Настройка компьютера (рис. 4.5). Если вы не настраивали никаких правил во время установки Linux, то сове- тую проскочить сейчас взглядом по списку сервисов и разрешить доступ только к тому, что реально будет использоваться по сети. 4.11. ipchains Данный сетевой экран был стандартом де-факто лет десять назад, но за по- следние четыре года он потерял в популярности, потому что появилась хо- рошая альтернатива, предоставляющая более надежную защиту — iptables. Именно поэтому из третьего издания данный раздел удален. Но если вас все же интересует эта тема, вы можете почитать достаточно под- робное руководство по использованию ipchains. Его вы найдете в директории Doc на прилагаемом компакт-диске. А чтобы не тратить лишнее время, давайте перейдем к следующему разделу, где будет рассматриваться совре- менный iptables. 4.12. iptables Сетевая система ядра Linux называется netfilter и предоставляет нам фильт- рацию пакетов с сохранением состояния и без него, а также NAT и IP Mas- querading. Для управления сетевым ядром используется утилита командной строки iptables, а для управления IP 6-й версии используется утилита ip6tables. Эта утилита схожа по синтаксису с ipchains, но предоставляет нам больше возможностей, например, журналирование. Если сервис iptables у вас еще не запущен, то следует сделать это сейчас. Для этого выполните команду: service iptables start Для остановки сервиса необходимо заменить последнее слово в команде на stop Управление доступом 157 Чтобы заставить сервис запускаться автоматически при старте системы, сле- дует выполнить команду: chkconfig -level 345 iptables on Сама команда имеет в простейшем случае такой вид: iptables команда [ключи] Команда в большинстве случаев включает в себя указание цепочки, то есть набора правил, которые применяются в определенных случаях. В систему встроены несколько цепочек, которые постоянны и не могут быть удалены. Вот основные из них: INPUT — входные данные; OUTPUT — выходные данные; FORWARD — перенаправление. Давайте посмотрим на пример, который разрешает любой трафик на локаль- ном интерфейсе loopback. Этот интерфейс есть на каждом компьютере, и указывает на вашу машину. Он безопасен, ибо по сети этот интерфейс ни- кто не видит, поэтому на нем можно разрешить все. Итак, команда выглядит следующим образом: iptables -I INPUT 1 -i lo -p all -j ACCEPT Ничего не понятно? Страшно аж жуть? Если вы впервые видите команды управления сетевым экраном Linux, то только такие чувства могут вызывать на первых парах параметры утилиты iptables . Но ничего, хороший мануал и немного практики, и вы не будете бояться этих правил. Я надеюсь, что дан- ная книга станет для вас хорошим мануалом, а практика придет со временем. Давайте сделаем паузу, скушаем "твикс" и пока не будем рассматривать команды , а погрузимся в теорию и изучим, какие параметры может прини- мать команда iptables 4.12.1. Основные возможности iptables Вот список основных параметров, которые можно передавать команде iptables : -A цепочка правило — добавить правило в конец цепочки. В каче- стве параметров указывается имя цепочки ( INPUT , OUTPUT или FORWARD ) и правило; -D цепочка номер — удалить правило с указанным номером из задан- ной цепочки; -R цепочка номер правило — заменить правило с указанным номером в цепочке; Глава 4 158 -I цепочка номер правило — вставить правило в указанную первым аргументом цепочку, под номером, заданным во втором параметре. Если номер равен 1 , то правило станет первым в цепочке; -L цепочка — просмотреть содержимое указанной цепочки; -F цепочка — удалить все правила из цепочки; -p протокол — определяет протокол, на который воздействует правило; -i интерфейс — определяет сетевой интерфейс, с которого данные были получены . Этот параметр можно использовать только с цепочками INPUT , FORWARD или PREROUTING ; -o интерфейс — задает интерфейс, на который направляется пакет. Этот параметр можно использовать только с цепочками OUTPUT , FORWARD или POSTROUTING ; -j действие — операция, которая должна быть выполнена над пакетом. В качестве аргументов можно указать следующие значения (рассмотрим только основные): • LOG — поместить в журнал запись о получении пакета; • REJECT — отправителю будет направлено сообщение об ошибке; • DROP — удалить пакет без информирования отправителя; • BLOCK — блокировать пакеты; -s адрес — IP-адрес отправителя пакета. После адреса можно задавать маску через косую черту (/), а перед адресом — знак отрицания ! , что бу- дет соответствовать любым адресам, кроме указанных; -d адрес — адрес назначения пакета. Если вы знакомы с ipchains, то должны были заметить невероятное сходство. Но есть и очень существенные отличия. Например, с помощью ключей -o и -i очень просто указывать, с какого и на какой интерфейс направляется пакет. Сразу же необходимо заметить, что для сохранения цепочек iptables нужно выполнить команду: service iptables save Если не сохранить правила, то они будут действовать только до первой пере- загрузки , после которой настройки будут сброшены, и все придется настраи- вать заново. А оно вам нужно? Теперь пора переходить к практическим примерам конфигурирования сете- вого экрана. Ключ -P используется для указания значения по умолчанию. А что должно быть по умолчанию для максимальной защиты? Конечно же, Управление доступом 159 запрет . Чтобы запретить любые входящие, исходящие и переадресуемые па- кеты , выполняем команды: iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP Рассмотрим эти команды подробнее. После имени команды идет ключ, кото- рый указывает, что мы делаем. Ключ -P говорит, что мы задаем значение по умолчанию . После этого должно идти имя цепочки, куда добавляется правило. В первом случае это цепочка INPUT , а значит, правило будет действовать на входящие данные. Во втором — OUTPUT , то есть исходящие данные, а в третьем случае — FORWARD . Последний параметр говорит о том, что нужно делать с пакетами, удовлетворяющими условиям, которые мы перечислили. Слово DROP говорит о необходимости удаления. Давайте сделаем небольшое лирическое отступление, дабы понять разницу меж- ду REJECT и DROP . В качестве последнего параметра (действия) можно указать вместо DROP значение REJECT , что тоже будет являться запретом. Разница в том, что в случае REJECT отправитель запроса получит уведомление о том, что запро- шенный доступ для него запрещен. Это не есть хорошо: ведь это лишняя инфор- мация , которую хакеру не нужно знать. При ключе DROP полученный запрещен- ный пакет будет просто удален без каких-либо уведомлений и предупреждений. Если стоит выбор между REJECT и DROP , а вы не знаете что выбрать, я реко- мендую выбирать второе. Некоторые специалисты по безопасности рекомендуют журналировать об- ращения , добавив в сетевой экран фильтр: iptables —A INPUT —j LOG Я бы не рекомендовал это делать. У публичных серверов за день происходит несколько сотен, а то и тысяч сканирований портов. Если обращать внимание на каждую такую попытку, вам придется устанавливать на сервер слишком большие жесткие диски для хранения журналов. А ведь если диск будет за- полнен , то система выйдет из строя. Таким образом, хакер может просто на- править бесконечные обращения на запрещенный порт и через некоторое время добиться удачно завершенной DoS-атаки. Чтобы лучше понять работу фильтрации, желательно увидеть как можно больше примеров, поэтому дальше будем много практиковаться. Для начала посмотрим классический пример указания прав доступа, необходимых лю- бому WEB-серверу, то есть разрешение обращений к 80-му порту нашего компьютера и возврат данных от нашего компьютера: iptables -A INPUT -p tcp -m tcp --sport 80 -j ACCEPT iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT Глава 4 160 В первой строке мы добавляем новое правило в цепочку INPUT . Правило дей- ствует на протокол TCP, о чем говорит значение tcp ключа -m . WEB-сервер использует как раз этот протокол для передачи данных. С помощью ключа --sport указываем порт источника данных: 80 . И, наконец, последний пара- метр –j ACCEPT указывает, что если пакет соответствует всем правилам, то нужно пропустить и обработать пакет. Сложно ? Другими словами, первая строка разрешает любые входящие паке- ты по протоколу TCP, в которых происходит подключение на порт 80. Вто- рая строка разрешает передавать ответы от сервера. Для того чтобы разрешить подключения по https, нужно добавить следующие две строки: iptables -A INPUT -p tcp -m tcp --sport 443 -j ACCEPT iptables -A OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT Здесь делается то же самое, только разрешается работа с портом 443. Следующий пример разрешает подключения по SSH: iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A OUTPUT -p udp --sport 22 -j ACCEPT Следующая команда создает фильтр, по которому запрещается принимать Echo-запросы от любых компьютеров: iptables -A INPUT -s 0/0 -d localhost \ –p icmp --icmp-type echo-request -j DROP Здесь –s 0/0 указывает, что правило относится ко всем адресам отправителя. Как и всегда, символ \ указывает на то, что следующая строка является про- должением команды. Вы можете убрать этот символ и записать все в одну строку Следующая команда запрещает доступ к FTP-порту: iptables -A INPUT -s 0/0 -d localhost -p tcp --dport 21 -j DROP Чтобы запретить доступ с определенного интерфейса, добавим ключ -i и укажем интерфейс eth0: iptables —A INPUT —i eth0 —s 0/0 —d localhost –p tcp --dport 21 —j DROP Теперь запретим исходящие пакеты с 21 порта. Для этого используем команду: iptables —A OUTPUT —i eth0 —s localhost —d 0/0 –p tcp --dport 21 —j DROP Очень мощной особенностью iptables является возможность проверки содер- жимого пакетов. Это очень удобно, например, для фильтрации WEB- запросов . Можно разрешить доступ к порту 80, но контролировать, чтобы пакеты содержали только допустимые параметры. К безопасности WEB- сервера мы вернемся в главе 7 и познакомимся с разными способами защиты. А сейчас рассмотрим простой, но универсальный. Управление доступом 161 Допустим , что мы хотим разрешить доступ к FTP-серверу, но при этом быть уверенными , что пользователь не сможет обратиться к файлам /etc/passwd и /etc/shadow. Для этого можно запретить пакеты, в которых есть этот текст. Если хакер попытается послать запрос, содержащий ссылки на эти файлы, то такой пакет будет отклонен. Следующие команды запрещают доступ к этим файлам по протоколам FTP и WWW: iptables -A INPUT -m string --string "/etc/passwd" \ –s 0/0 -d localhost -p tcp --dport 21 -j DROP iptables -A INPUT -m string --string "/etc/shadow" \ –s 0/0 -d localhost -p tcp --dport 21 -j DROP iptables -A INPUT -m string --string "/etc/passwd" \ –s 0/0 -d localhost -p tcp --dport 80 -j DROP iptables -A INPUT -m string --string "/etc/shadow" \ –s 0/0 -d localhost -p tcp --dport 80 -j DROP Надо также учесть аспект защиты информации. Допустим, что у вас есть сер- вер , который принимает закодированный трафик с помощью stunnel (Security Tunnel, безопасный туннель: создание шифрованного канала между двумя машинами , которое мы будем рассматривать в разд. 5.2), расшифровывает и передает его на другую машину. В этом случае во входящих пакетах сете- вой экран не может найти такие строки. А вот исходящие пакеты идут уже декодированными и содержат открытый текст команд. В такой конфигурации необходимо контролировать оба потока. Даже если у вас stunnel передает расшифрованный трафик на другой порт внутри одного компьютера, можно включить контроль любых пакетов на всех интерфейсах, чтобы они проверялись после расшифровки. |