Next Previous Contents

3. Я запутался! Маршрутизация, маскарадинг, форвардинг портов, ipautofw ...

Этот HOWTO рассказывает о фильтрации пакетов. Это значит, что принимается решение, нужно ли пакету позволить пройти или нет. Однако, так как Linux является детской песочницей для хакера, то вы вероятно захотите сделать больше, чем только это.

Одна проблема состоит в том, что один и тот же инструмент (``ipchains ") используется для управления и маскарадингом, и прозрачным прокси, хотя они и не имеют к пакетной фильтрации совершенно никакого отношения (текущая реализация Linux создает впечатление, что они близко связаны).

Маскарадинг и прокси объясняются в отдельных HOWTO, а автоматический форвардинг и форвардинг портов управляются отдельными инструментальными средствами, но так как много людей спрашивает меня о них, я включу набор общих сценариев и укажу, когда каждый из них должен примениться. Качество защиты каждой установки здесь не обсуждаются.

3.1 Трехстрочное руководство Русти по маскарадингу

Подразумевается, что ваш внешний интерфейс называется ppp0. Проверьте это утилитой ifconfig и отредактируйте по вкусу:

       # ipchains -P forward DENY
       # ipchains -A forward -i ppp0 -j MASQ
       # echo 1 > /proc/sys/net/ipv4/ip_forward

3.2 Безвозмездная поддержка: правила WatchGuard

Вы можете купить off-the-shelf файерволы. Отличный выбор - один из WatchGuard FireBox. Отличный потому, что он мне нравится, он безопасен, основан на Linux, и потому что они финансируют сопровождение ipchains, также как и нового файерволльного кода (в 2.3). Короче говоря, WatchGuard оплачивает за меня еду, в то время как я работаю для вас. Так что пожалуйста посмотрите, что они предлагают.

                      http://www.watchguard.com 

3.3 Общие Firewall-ные установки

У вас есть домен littlecorp.com. У вас есть внутренняя сеть, и одно подключение к Internet по коммутируемому каналу (PPP) (firewall.littlecorp.com с адресом 1.2.3.4). Ваша локальная сеть построена на ethernet, а ваша персональная машина называется "myhost".

В этом разделе приводятся различные соглашения, которые являются общими. Тщательно изучите их, потому что они имеют тонкие различия.

Частная сеть: традиционные прокси

В этом сценарии, пакеты из частной сети никогда не выходят в Internet, и наоборот. Адреса IP частной сети должны быть назначены по RFC1597 Private Network Allocations (то есть, 10.*.*.*, 172.16.*.* или 192.168.*.*).

Единственный способ подсоединиться к Internet - через firewall, который является единственной машиной в обеих сетях, которая перераспределяет соединения. Вы запускаете программу (на firewall), называемую proxy, которая все это делает (имеются прокси для FTP, web, telnet, RealAudio, Usenet и других услуг). См. Firewall HOWTO.

Любые услуги Интернет, которые вам потребовались, должны быть на firewall.

(Однако см. ``Ограниченные внутренние услуги" ниже).

Пример: Разрешить доступ из частной сети к web-сервису Интернет.

  1. Частной сети назначены адреса 192.168.1.*, myhost имеет адрес 192.168.1.100, а ethernet интерфейс firewall'а 192.168.1.1.
  2. Web proxy (напр. "Squid") установлен и сконфигурирован на firewall, скажем, на порту 8080.
  3. Netscape в частной сети сконфигурирован для использования firewall порта 8080 в качестве прокси.
  4. DNS в частной сети не нужно настраивать.
  5. DNS должен быть настроен на firewall.
  6. В частной сети маршрут по умолчанию (он же - гейт) не нужно настраивать.
Netscape на myhost обращается к http://slashdot.org.
  1. Netscape соединяется с firewall портом 8080, используя порт 1050 на myhost. Он запрашивает страницу web "http://slashdot.org".
  2. Proxy переводит имя "slashdot.org" в IP адрес, и получает 207.218.152.131. Затем он открывает соединение с этим адресом IP (используя порт 1025 на внешнем интерфейсе firewall'а), и запрашивает у web-сервера (порт 80) страницу web.
  3. Как только он получит страницу web через соединение с сервером web, он скопирует данные в соединение с Netscape.
  4. Netscape отображает страницу.
То есть, с точки зрения slashdot.org, было создано соединение между адресом 1.2.3.4 (интерфейсом PPP firewall'а) порт 1025 и адресом 207.218.152.131 (slashdot.org) порт 80. С точки зрения myhost, соединение создано с 192.168.1.100 (myhost) порт 1050 и 192.168.1.1 (ethernet интерфейс firewall'а) порт 8080.

Частная сеть: прозрачные прокси

В этом сценарии, пакеты из частной сети никогда не выходят в Internet, и наоборот. Адреса IP частной сети должны быть назначены по RFC1597 Private Network Allocations (то есть, 10.*.*.*, 172.16.*.* или 192.168.*.*).

Единственный способ подсоединиться к Internet - через firewall, который является единственной машиной в обеих сетях, которая перераспределяет соединения. Вы запускаете программу (на firewall), называемую прозрачный proxy, которая все это делает; ядро пересылает пакеты прокси вместо того, чтобы отправить их наружу (то есть, это похоже на маршрутизацию).

Прозрачный прокси означает, что клиенты не должны знать, что в сети работает прокси.

Любые услуги Интернет, которые вам потребовались, должны быть на firewall.

(Однако см. ``Ограниченные внутренние услуги" ниже).

Пример: Разрешить доступ из частной сети к web-сервису Интернет.

  1. Частной сети назначены адреса 192.168.1.*, myhost имеет адрес 192.168.1.100, а ethernet интерфейс firewall'а 192.168.1.1.
  2. Прозрачный прокси (я полагаю, что это патчи к squid, или "transproxy") установлен и настроен на firewall, скажем, на порту 8080.
  3. Ядру сообщают, что надо переназначать соединения с портом 80 на прокси, используя ipchains.
  4. Netscape в частной сети настроен на прямое подключение.
  5. В частной сети должен быть настроен DNS (то есть вы должны запустить DNS сервер как прокси на firewall).
  6. В частной сети должен быть настроен маршрут по умолчанию (aka гейт), чтобы пакеты посылались на firewall.
Netscape на myhost обращается к http://slashdot.org.
  1. Netscape запрашивает страницу web "http://slashdot.org" и получает 207.218.152.131. Он открывает соединение с этим IP адресом, используя локальный порт 1050 и запрашивает на web-сервере (порт 80) страницу web.
  2. Поскольку пакеты из myhost (порт 1050) к slashdot.org (порт 80) проходят через firewall, они переназначаются ждущему прозрачному прокси на порту 8080. Прозрачный прокси открывает соединение (используя локальный порт 1025) с 207.218.152.131 порт 80 (которому предназначались первоначальные пакеты).
  3. Как только прокси получит страницу web из соединения с сервером web, он копирует данные на соединение с Netscape.
  4. Netscape отображает страницу.
То есть с точки зрения slashdot.org, соединение установлено между 1.2.3.4 (интерфейс PPP firewall'а) порт 1025 и 207.218.152.131 (slashdot.org) порт 80. С точки зрения myhost соединение установлено между 192.168.1.100 (myhost) порт 1050 и 207.218.152.131 (slashdot.org) порт 80, но фактически обмен информацией совершает прозрачный прокси.

Частная сеть: маскарадинг

В этом сценарии, пакеты из частной сети никогда не выходят в Internet без специальной обработки, и наоборот. Адреса IP частной сети должны быть назначены по RFC1597 Private Network Allocations (то есть, 10.*.*.*, 172.16.*.* или 192.168.*.*).

Вместо использования прокси, мы используем специальное средство ядра, называемое "маскарадинг". Маскарадинг перезаписывает пакеты, когда они проходят через firewall, так, чтобы казалось, что они всегда исходят от firewall непосредственно. Затем он перезаписывает ответы так, чтобы было похоже, что они пришли от первоначального получателя.

Маскарадинг имеет отдельные модули для обработки "сложных" протоколов, типа FTP, RealAudio, Quake и т.д. Для действительно тяжелых в обработке протоколов применяется "автофорвардинг", который может обработать некоторые из них автоматической установкой форвардинга портов для соответствующих номеров портов: см. `` ipportfw" (ядра 2.0) или ``ipmasqadm" (ядра 2.1).

Любые услуги Интернет, которые вам нужны, должны быть на firewall.

(Однако см. ``Ограниченные внутренние услуги" ниже).

Пример: Разрешить доступ из частной сети к web-сервису Интернет.

  1. Частной сети назначены адреса 192.168.1.*, myhost имеет адрес 192.168.1.100, а ethernet интерфейс firewall'а 192.168.1.1.
  2. Firewall установлен на подмену любых пакетов, исходящих из частной сети и идущих на порт 80 хоста в Интернет.
  3. Netscape сконфигурирован для непосредственного соединения.
  4. DNS в частной сети должен быть правильно сконфигурирован.
  5. Firewall должен быть маршрутом заданным по умолчанию (aka гейтом) для частной сети.
Netscape на myhost обращается к http://slashdot.org.
  1. Netscape запрашивает страницу web "http://slashdot.org" и получает 207.218.152.131. Он открывает соединение с этим IP адресом, используя локальный порт 1050 и запрашивает на web-сервере (порт 80) страницу web.
  2. Поскольку пакеты от myhost (порт 1050) к slashdot.org (порт 80) проходят через firewall, они перезаписываются так, чтобы выходить с интерфейса PPP firewall порт 65000. Firewall имеет допустимый Internet адрес (1.2.3.4), так что ответные пакеты от slashdot.org нормально приходят на firewall.
  3. По прибытию пакеты от slashdot.org (порт 80) на firewall.littlecorp.com (порт 65000) перезаписываются так, чтобы идти на myhost порт 1050. В этом и состоит фокус маскарадинга: он помнит, когда он перезаписал исходящие пакеты, и может переписывать их обратно, когда приходят ответы на них.
  4. Netscape отображает страницу.
то есть с точки зрения slashdot.org соединение было сделано между 1.2.3.4 (интерфейс PPP firewall'а) порт 65000 и 207.218.152.131 (slashdot.org) порт 80. С точки зрения myhost соединение было сделано между 192.168.1.100 (myhost) порт 1050 и 207.218.152.131 (slashdot.org) порт 80.

Общедоступная сеть

В этом сценарии, ваша персональная сеть - часть Internet: пакеты могут течь без изменения из одной сети в другую. Адреса IP внутренней сети должны быть назначены из выделенного блока адресов IP, так что остальная часть сети будет знать, как получить пакеты, адресованные вам. Подразумевается постоянное соединение.

В этом случае, фильтрация пакетов используется для ограничений пакетов, пересылаемых между вашей сетью и остальной частью Internet, т.е. ограничить только доступ остальной части Internet к вашим внутренним серверам web.

Пример: Разрешить доступ из частной сети к web-сервису Интернет.

  1. В вашей внутренней сети адреса назначены согласно выделенному блоку IP адресов (скажем 1.2.3.*).
  2. Установки firewall позволяют весь трафик.
  3. Netscape настроен для непосредственного соединения.
  4. В вашей сети должен быть правильно настроен DNS.
  5. Firewall должен быть маршрутом заданным по умолчанию (aka гейтом) для частной сети.
Netscape на myhost обращается к http://slashdot.org.
  1. Netscape запрашивает страницу web "http://slashdot.org" и получает 207.218.152.131. Он открывает соединение с этим IP адресом, используя локальный порт 1050 и запрашивает на web-сервере (порт 80) страницу web.
  2. Пакеты проходят через ваш firewall также, как они проходят через несколько маршрутизаторов между вами и slashdot.org.
  3. Netscape отображает страницу.
то есть имеется только одно соединение: между 1.2.3.100 (myhost) порт 1050 и 207.218.152.131 (slashdot.org) порт 80.

Ограничение внутренних услуг

Кроме firewall существуют и другие способы обеспечить доступ из Интернет к вашим внутренним ресурсам. Эти способы основаны на принципах проксирования или маскарадинга для внешних соединений.

Самый простой подход состоит в запуске "перенаправителя(redirector)", который является подвидом прокси, который ждет соединение на данном порте, и затем открывает соединение на фиксированном внутреннем хосте и порту, и копирует данные между двумя соединениями. Пример такой программы - "redir". С точки зрения Internet соединение установлено c вашим firewall. С точки зрения вашего внутреннего сервера, соединение установлено от внутреннего интерфейса firewall к серверу.

Другой подход (для него требуется ядро 2.0, с пропатченным ipportfw, или версии ядра 2.1 или более поздние) состоит в использовании форвардинга портов в ядре. Он делает ту же самую работу, что и "redir", но другим способом: ядро перезаписывает проходящие пакеты, заменяя их адрес и порт назначения на адрес и порт внутреннего хоста. С точки зрения Internet, соединение установлено с вашим firewall. С точки зрения вашего внутреннего сервера, это прямое соединение от хоста Internet до сервера.

3.4 Подробная информация о маскарадинге

Дэвид Ранч написал превосходный новый HOWTO о маскарадинге, который во многом пересекается с этим HOWTO. Вы можете найти его на http://www.ecst.csuchico.edu/~dranch/LINUX/index-LINUX.html#ipmasq Подробности о маскарадинге.

Я думаю, что скоро этот документ будет входить в состав Linux Documentation Project на http://www.metalab.unc.edu/LDP

Официальная страница маскарадинга - http://ipmasq.cjb.net


Next Previous Contents