Колисниченко Д.Н. - Linux-сервер своими руками (1077324), страница 78
Текст из файла (страница 78)
Я бы вам порекомендовал использовать программу kniail.которая входит в состав KDE. Данная программа поддерживает несколькоучетных записей электронной почты, в том числе и локальный ящик, отправкусообщений с помощью SMTP и локального агента МТА (sendmail), а такжесообщения в формате HTML, что является немаловажным, когда пользователиOutlook забывают включить текстовый формат для исходящих сообщений.332Бастионы1414.1. Применение IPChainsДля начала небольшое вступление.
Читатель, скорее всего, знает, чтовесь трафик в сети состоит из пакетов. Каждый пакет состоит из двухчастей: заголовка и тела. В заголовке пакета находится информация обисточнике, адресате, типе пакета, а также прочая информация, котораяхарактерна для пакетов определенных типов. В теле пакета передается таинформация, которую мы хотим передать. Более подробно об этом былосказано в гл.
1 данной книги.Протокол TCP, в отличие от UDP, перед началом передачи данныхтребует установки соединения. Перед установкой соединения производитсяобмен специальными пакетами, а после этого передаются обычные пакеты,содержащие данные.Бастион (firewall, брандмауэр) — это системный компонент (фильтр),обеспечивающий защиту сети от несанкционированного доступа. IPChainsпредставляет собой пакетный фильтр. Пакетный фильтр просматривает заголовок каждого пакета, который проходит через него, а потом решает, чтоделать со всем пакетом. Фильтрация пакетов встроена в ядро ОС Linux.Обычно IPChains используется на шлюзах, соединяющих две сети, например, локальную и Интернет. При этом вы имеете право разрешитьпередавать или принимать какие-либо пакеты. Это позволяет обеспечитьдолжный уровень безопасности и экономии.С помощью IPChains можно ограничить свою хорошо организованнуюсеть от хаоса Интернет.
Применение IPChains может решить такие виды атак,как пинг смерти, атака на отказ, IP-спуфинг, фрагментация пакетов. В этойглаве будут описаны способы защиты от перечисленных атак на ваш сервер, атакже будут приведены рекомендации по выявлению источника атак.Для поддержки IPChains вам необходимо перекомпилировать ядро. Отом, как это сделать рассказано в гл. 18. При этом вам нужно включитьопции ядра IP:firewalling и IP:firewall packet.
Я также рекомендую включить333Бастионыопции IP: masquerading и IP: always defragment. Скорее всего, они также вампонадобятся. Также вам следует включить IP-Forwarding (если вы еще это несделали) командой:echo "1" > /proc/sys/net/ipv4/ip_forwardЕсли же вам нужна поддержка динамических IP-адресов (например, дляDHCP — см. гл. 8), включите ее с помощью команды:echo "1" > /proc/sys/net/ipv4/ip_dynaddr74.2. Настройка IPChainsНастройку IPChains лучше всего рассматривать на практических примерах. Но прежде, чем это сделать попробуем разобраться, как ядро фильтруетпакеты.Ядро стартует с тремя списками правил: input, forward, output.
Этиправила называются firewall-цепочками или просто цепочками. Когда выполучаете новый пакет, ядро использует цепочку input (входная цепочка).Перед этим пакет проверяется: не был ли он поврежден при пересылке?Поврежденные пакеты отвергаются. Если с пакетом все в порядке, пакетпроходит проверку целостности: не запутает ли пакет правила фильтрации?Если пакет не проходит проверку целостности, он отвергается.Если фильтр пропускает пакет, то ядро решает, куда его направитьдальше. Это называется маршрутизацией. Если пакет предназначен длядругой машины, то пакет должен пройти через цепочку forward.
Если пакетпроходит через фильтр forward, то удаленная машина получит этот пакет.Что делать с этим пакетом дальше, будет решать уже получившая егомашина и для нас это не представляет интереса.Если пакет предназначен для нашей машины, пакетный фильтр определяет, на какой интерфейс его следует переслать. Пакет, предназначенныйдля интерфейса 1о (обратная петля), сначала проходит выходную цепочку, апотом попадает во входную цепочку интерфейса 1о. Если пакет созданлокальным процессом, который запущен на бастионе, он попадает в цепочку перенаправления (forward). Цепочка перенаправления применяется ковсем пакетам, проходящим сквозь бастион на другие машины.Прежде чем пакет выйдет из сетевого интерфейса, он должен пройтицепочку output.Цепочка — это список правил.
Каждое правило можно сформулировать примерно так: «если заголовок пакета удовлетворяет такому-то условию, то поступить с ним так-то». Если первое правило не применимо кэтому пакету, то рассматривается следующее правило в цепочке. Если ниодно правило не применимо к пакету, пакет, скорее всего, будет отвергнут. Если какой-нибудь пакет отвергается, в журнале syslog появляетсясоответствующее сообщение.Программу ipchains можно вызывать со множеством параметров. Однипараметры создают новые цепочки, другие добавляют правила в цепочки(см. табл.
14.1).334БастионыПараметры программы ipchainsТаблица 14ЛПараметрОписание-NСоздать новую цепочку-X-РУдалить пустую цепочкуИзменить стратегию для пустой цепочки-LВывести правила цепочки-FУдалить все правила из цепочки-ZОбнулить счетчики пакетов и байтов во всех правилах цепочки-АДобавить новое правило к цепочке-IВставить новое правило в определенную позицию-R-DУдалить правило, удовлетворяющее какому-нибудь условиюЗаменить правилоОдин из примеров использования IPChains мы уже рассматривали вглаве 8. Напомню, в той главе нужно было организовать маршрутизациюсредствами IPChains. При этом использовались следующие команды:ipchains -P forward DENYipchains -A forward -s 192.168.1.0/24 -d 1 9 2 . 1 6 8 . 2 .
0 / 2 4 -j ACCEPTipchains -A forward -s 1 9 2 . 1 6 8 . 2 . 0 / 2 4 -d 1 9 2 . 1 6 8 . 1 . 0 / 2 4 -j ACCEPTПервая команда изменяет стратегию для пустой цепочки forward, котораяиспользуется именно для маршрутизации. Вторая команда перенаправляетпакеты из сети 192.168.1.0 в сеть 192.168.2.0. Опция -s означает источник(source), а опция -d означает назначение (destination). Опция -j определяетдействие. В том случае, если вы должны принять пакет, используется параметр ACCEPT. Если вам нужно отбросить пакет, используйте параметр DENY.Адреса источника и пункта назначения можно указывать четырьмя способами:1.
Просто указать IP-адрес, например, 192.168.1.1.2. Указать имя компьютера, например, www.host.ru.3. Указать целую группу IP-адресов, например, 192.168.1.0/24.4. Указать группу адресов и маску сети, например, 192.168.1.0/255.255.255.0.Для формирования правил также используются опции, представленные втабл. 14.2.Все эти опции могут иметь предшествующий параметру символ «!». Каки в некоторых языках программирования, этот символ обозначает отрицание. Например, правило -s! localhost определяет любой пакет, не исходящийиз компьютера localhost.Таблица 14.2Опции формирования правилОписаниеПараметрВ-d-i-РИсточник (IP-адрес или URL-адрес)Назначение (IP-адрес или URL-адрес)ИнтерфейсПротокол335БастионыУказать протокол можно с помощью опции -р.
Например, для указанияпротокола TCP служит правило -р TCP. Иногда нужно указать порт соединения TCP или UDP. Это можно сделать так:IP-addr/ports_range.Диапазон портов определяется параметром ports_range. Диапазон указывается через двоеточие, например, 0:1023. Нижний предел диапазона равенО, а верхний — 1023. Если нижний предел не задан, принимается значениепо умолчанию — 0. Если не задан верхний предел, считается, что он равен65535, то есть максимальному числу поддерживаемых портов.Указать интерфейс можно с помощью опции -i.
Например, -i pppO. Еслиу вас несколько интерфейсов, названия которых начинаются символамиррр, указать их всех вы можете опцией -i ppp+. Под интерфейсом понимается физическое устройство, на (из) который приходит (уходит) пакет. Длятого, чтобы просмотреть список доступных в текущий момент интерфейсов,используйте команду if con fig.Теперь рассмотрим пару полезных примеров. Возможно, вы захотите запретить использование telnet извне. Это можно сделать с помощью команды:ipchains -A prov -p tcp —destination-port 23 -j REJECTЧерез цепочку prov проходит весь трафик, идущий от провайдера. Ееможно создать командами:ipchains -N provipchains -A input -i pppO -j provПредполагается, что вы подключаетесь к провайдеру через интерфейс рррО.Скорее всего, в вашей сети найдутся несколько машин, которые работаютпод управлением ОС Windows и имеют общие ресурсы.
Возможно, вы даженастроили протокол SMB на сервере. Чтобы протокол 8MB не был заметенизвне, что очень нежелательно, воспользуйтесь следующими командами:ipchains -A prov -p tcp —destination-port 137 -j REJECTipchains -A prov -p udp —destination-port 137 -j REJECTipchains -A prov -p tcp —destination-port 138 -j REJECTipchains -A prov -p udp —destination-port 138 -j REJECTipchains -A prov -p tcp —destination-port 139 -j REJECTipchains -A prov -p udp —destination-port 139 -j REJECTМожно запретить локальным процессам получать пакеты от определенных узлов. Например, я не хочу, чтобы мой Netscape тратил время наполучения баннеров от машины с адресом 911.111.111.111. Для этого, возможно, удобнее было бы воспользоваться прокси-сервером, но сейчас нужно продемонстрировать, как это можно сделать с помощью IPChains.ipchains -A output -d 911.111.111.111 -j REJECTВ примере я специально привел несуществующий IP-адрес, чтобы несоздать антирекламу какому-нибудь узлу Сети.Для того, чтобы ваши правила были постоянными (при перезагрузкемашины правила IPChains теряются), используйте сценарии ipchains-save иipchains-restore.
Настройте свои правила, затем выполните команду:# ipchains-save > / e t c / i p c h a i n s . r u l e s336БастионыВ листинге 14.1 представлен сценарий, управляющий пакетной фильтрацией.Листинг 14.1. Сценарий управления пакетной фильтрацией#! / b i n / s h# Сценарий управления пакетной фильтрацией.,# Если правил нет, то ничего не делать.[ -f /etc/ipchains.rules ] || exit 0case "51" instart)echo -n "Включение пакетной фильтрации:"/sbin/ipchains-restore < /etc/ipchains.rules || exit 1echo 1 > /proc/sys/net/ipv4/ip_forwardecho " . " ; ;stop)echo -n "Отключение пакетной фильтрации:"echo 0 > /proc/sys/net/ipv4/ip_forward/sbin/ipchains -X/sbin/ipchains -F/sbin/ipchains -P input ACCEPT/sbin/ipchains -P output ACCEPT/sbin/ipchains -P forward ACCEPTecho " .
" ; ;*)echo "Использование: / e t c / i n i t . d / p a c k e t f l i t e r { s t a r t | s t o p } "exit 1 ; ;esacexit 0Этот сценарий нужно добавить в сценарии загрузки системы.14.3. Различные примерыВ этом пункте представлены несколько примеров для обеспечения безопасности вашей сети.14.3.1. Пакеты SYNПакеты SYN используются для запроса на установку соединения. Выможете отвергать эти пакеты для того, чтобы прервать попытки установитьсоединение.Иногда это необходимо, если вы хотите получать пакеты только в одномнаправлении, например, рабочая станция должна соединяться с сервером,но сервер не должен соединяться с рабочей станцией.Для фильтрации пакетов SYN нужно использовать опцию -у.