Колисниченко Д.Н. - Linux-сервер своими руками (1077324), страница 79
Текст из файла (страница 79)
Например,попытки соединения по протоколу TCP от узла 192.168.1.34 указываются так:-р TCP -s 1 9 2 . 1 6 8 . 1 . 3 4 -у14.3.2. Фрагментация пакетовИногда передаваемый пакет слишком большой, чтобы его можно былобы передавать за один раз. Если такое происходит, то пакет делится на337Бастионыфрагменты, и эти фрагменты пересылаются. Компьютер, которому этотпакет предназначен, собирает эти фрагменты в один пакет.Ядро должно анализировать начало пакета, которое содержится в первомфрагменте. Ведь только в первом фрагменте находится заголовок исходногопакета. Для решения этой проблемы вам нужно перекомпилировать ядро свключенной опцией IP: always defragment.В результате любое правило фильтрации не будет работать для фрагментированных пакетов.
При этом только первый фрагмент будет обработан какпакет, а остальные не будут обрабатываться. Однако можно определитьправило специально для фрагментированных пакетов. Это можно сделать спомощью опции -f. Эту опцию нельзя применять при указании портовпротоколов TCP или UDP, кода ICMP или пакетов SYN.Следующая команда отбросит все фрагменты, приходящие на компьютерserver.domain.com:# ipchains -A output -f -d 192.168.1.1 -j DENY14.3.3. Пинг смертиЕсть хорошая новость по этому поводу: ОС Limax невосприимчива кпингу смерти. Напомню, что пинг смерти заключается в посылке большого пакета ICMP, который переполняет буферы стека TCP на компьютере-получателе .14.3.4.
1Р-спуфингIP-спуфинг — это отправление пакетов с поддельным IP-адресом источника. Так как фильтрация пакета принимает решения на основании адресаисточника, то IP-спуфинг используется, чтобы ввести пакетный фильтр взаблуждение.Для решения этой проблемы мы можем использовать Проверку АдресаИсточника (Source Address Verification) или использовать следующие команды IPChains:ipchains -A prov -s 1 9 2 .
1 6 8 . 1 . 1 / 1 6 -1 -j DENYipchains -A prov -s 1 2 7 . 0 . 0 . 1 / 8 -1 -j DENYВторая команда нужна для ядер версий 2.0.x, но если мы ее укажем,явно хуже не будет. Опция -1 позволяет протоколировать «плохие» пакеты.Файлом протокола является /var/log/messages. Ядра версий 2.1.x автоматически отклоняют пакеты, приходящие с адресов 127.*, которые зарезерви- рованы для локального интерфейса.Для включения проверки адреса источника можно воспользоваться сценарием, представленном в листинге 14.2.Листинг 14.2.
Запрещение 1Р-спуфшга# Наилучший способ: включить Source Address Verification и защитить# от спуфинга все текущие и будущие интерфейсы.if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] ; then338Бастионыecho -n "Установка защиты от спуфинга... "f o r f in / p r o c / s y s / n e t / i p v 4 / c o n f / * / r p _ f l i t e r ; doecho 1 > $fdoneecho "готово."elseecho ПРОБЛЕМЫ ПРИ ПОПЫТКЕ ВКЛЮЧИТЬ ЗАЩИТУ ОТ СПУФИНГА.echo "Нажмите CONTROL-D для выхода в shell и продолжения сист. загрузки."echo#, Запуск однопользовательской оболочки на консоли/ s b i n / s u l o g i n $CONSOLEfiЗащита с использованием проверки адреса источника является болеенадежной.14.3.5.
Фильтрация фрагментированных бомбИногда возникает такая ситуация, когда на машину приходят не всефрагменты. Такое бывает при очень большом количестве фрагментов. Обычно при использовании ОС Linux данная проблема вообще отпадает, но всетаки некоторые администраторы предпочитают «перестраховаться».Для решения этой проблемы вам нужно всего лишь перекомпилироватьядро с включенной опцией IP: always defragment. При этом нужно учитывать, чтобы ваш шлюз был единственным маршрутом для пакетов. Вторымспособом является фильтрация фрагментов, но это может отразиться нанормальных пакетах. Честно говоря, я не особо забочусь об этой проблемепри настройке своего сервера.1гШТ<14.4.
Практический примерА теперь рассмотрим более серьезный пример. Этот пример частичнопозаимствован мною из руководства DNS-HOWTO. Но прежде чем перейтинепосредственно к практике, попробую объяснить некоторые термины, которые будут встречаться ниже.Прежде всего, определимся, что называется маскарадингом. Объяснениея приведу на сугубо формальном языке. Маскарадинг перезаписывает заголовки пакетов, когда они проходят через шлюз так, чтобы казалось, что онивсегда исходят от шлюза непосредственно.
Затем он перезаписывает ответытак, чтобы клиенту казалось, что они пришли от первоначального получателя. Например, у вас есть шлюз и одна небольшая локальная сеть. Шлюзобладает реальным IP-адресом 1.1.1.1, а адрес вашей локальной сети —192.168.1.0. Клиент с IP-адресом 192.168.1.5 пытается обратиться к узлуhttp://www.romb.net. IP-адрес этого узла 62.244.59.193. Пакет клиента проходит через шлюз. IP-адрес шлюза в локальной сети — 192.168.1.1. Шлюзперезаписывает заголовок пакета и устанавливает вместо адреса клиентасвой собственный адрес, то есть 1.1.1.1.
После получения ответа, он перед339БастионыРис.отправлением пакета клиенту опять перезаписывает заголовок пакета иизменяет свой адрес 1.1.1.1 на адрес узла www.romb.net — 62.244.59.193. Сточки зрения узла www.romb.net соединение было установлено между адресами 1.1.1.1 и 62.244.59.193. С точки зрения клиента соединение произошломежду интерфейсами с адресами 192.168.1.5 и 62.244.59.193.Итак, приступим к рассмотрению практического примера.Предположим, у нас имеется соединение с Интернет и две подсеСеть 192,168.2.0ти. Интерфейсу рррО назначен реальный IP-адрес — 111.1.1.1, инСервер DNS [192.168.2.99JСервер POP/SMTP [192.168.2.98]терфейсуethO назначен IP-адресСервер WWW [192.168.2.97]внутренней сети — 192.168.2.1, аинтерфейсу ethl - 192.168.1.1.(см.
рис. 14.1).Нам нужно обеспечить маршрутизацию между тремя сетями:Интернет, 192.168.2.0 и 192.168.1.0.14.1. Структура сетиДругими словами, требуется такимобразом настроить пакетную фильтрацию, чтобы можно было пропинговатьлюбую сеть или выполнить трассировку пакетов через любую сеть. Пинговатьсеть будем, естественно, с помощью программы ping, а выполнять трассировку будем программой traceroute. В ОС Windows NT те же операции можновыполнить с помощью программ ping и tracer! соответственно.Нам также нужно, чтобы сервер WWW обрабатывал как запросы извнутренних сетей, так и запросы пользователей Internet. Сервер SMTPдолжен принимать внутренние и внешние соединения, а также отправлятьпочту в Internet.
Получать почту по протоколу РОРЗ могут только пользователи внутренних сетей. Сервер DNS также должен обрабатывать запросыот всех сетей.Еще раз определим, к чему будут иметь доступ пользователи Интернет:1. Наш внутренний сервер WWW.2. Наш сервер FTP.3. Наш сервер DNS.4. Сервер SMTP.Пользователи локальных сетей будут иметь доступ к:1. Серверу WWW нашей сети.2. Серверу FTP нашей сети.3. Серверу SMTP для отправки почты, как пользователям локальной сети, таки пользователям Интернет.4. Серверу DNS нашей сети, а также к серверам DNS сети Интернет.5.
Серверу РОРЗ для получения почты.6. Серверам WWW сети Интернет.7. Серверам FTP сети Интернет.340БастионыНаши пользователи также должны иметь возможность использовать программы ping, traceroute, ssh. Чуть не забыл! Нам же нужно также обеспечитьнормальную работу клиента ICQ. Эта программа стала уже стандартом, какNetscape или Internet Explorer.Прежде, чем настраивать пакетный фильтр, убедимся, что мы запретилиIP-спуфинг и правильно настроили все сетевые интерфейсы. В этой главеуже приводился более подробный пример запрещения IP-спуфинга (листинг 14.2).
Эту задачу можно попробовать решить одной командой (при этомвы должны использовать интерпретатор bash):for f in /proc/sys/net/ipv4/conf/*/rp_fliter; do echo 1 > $f; doneТеперь установим правила, которые запрещают любые пакеты, кромепакетов обратной петли (loopback):# ipchains -A input -i ! lo -j DENY# ipchains -A output -i ! lo -j DENY# ipchains -A forward -j DENYОбратите внимание, что запрет IP-спуфинга и любого трафика, кромелокального, должен быть выполнен до инициализации интерфейсов. В противном случае существует вероятность того, что сквозь наш «бастион» проникнут пакеты.Очень желательно вставить модуль ip_masq_ftp для макарадинга сервераFTP. Благодаря этому наш внутренний FTP-сервер сможет работать в активном и пассивном режимах.Теперь создадим несколько цепочек. Все они будут отфильтровыватьпроходящие пакеты, то есть будут аналогичны цепочке forward.
Названиекаждой из них определяется направлением передачи пакетов, например,netl-net2 — по этой цепочке пакеты будут передаваться от сети 192.168.1.0 ксети 192.168.2.0.т :ipchains -N netl-net2'• IT'ipchains -N netl-inetipchains -N net2-netlipchains -N net2-inetipchains -N inet-net2ipchians -N inet-netlТакже создадим цепочку для приема ICMP-сообщений:ipchains -N icmpВ цепочке forward мы знаем только исходящий интерфейс, а для выяснения входящего интерфейса, то есть того, из которого пришел пакет, мыиспользуем адрес источника. Подделать этот адрес невозможно, так как мызапретили IP-спуфинг. Выполним следующие команды:ipchains -A forward -s 192. 168.