• Трафик, связанный с Web-сервером. Web-сервер, выполняющийся на компьютере, должен принимать обращения от любого узла сети, поэтому в правилах, регламентирующих обмен с Web-сервером, не указывается IP-адрес. Для того чтобы противодействовать перехвату соединения, в этих правилах задана проверка пакетов с учетом состояния.
• Трафик, связанный с сервером SSH. Правила, определяющие взаимодействие с сервером SSH, во многом напоминают правила для Web-сервера, но в них указаны IP-адреса. В результате эти правила разрешают обращение к SSH-серверу только с компьютеров локальной сети.
• Трафик обратной петли. Для решения ряда системных задач, связанных с организацией работы системы, Linux использует интерфейс обратной петли (lo). Правила брандмауэра разрешают передачу данных через этот интерфейс. Проверка пакетов с учетом состояния не выполняется, так как трафик, направленный через интерфейс lo, поступает только по адресу 127.0.0.1.
Создание NAT-преобразователя с помощью iptables
Брандмауэры являются чрезвычайно полезными инструментами, но возможности iptables не ограничиваются созданием брандмауэров. В некоторых ситуациях большую помощь могут оказать NAT-преобразователи, которые также создаются посредством iptables. Протокол NAT позволяет модифицировать некоторые элементы TCP- и IP-пакетов, расширяя тем самым возможности адресации. Средства NAT настраиваются достаточно просто, но прежде чем приступить к настройке, следует выяснить, что такое NAT и какие возможности предоставляет этот инструмент.
Средства NAT позволяют изменять в процессе маршрутизации содержимое TCP- и IP-пакетов. В частности, при NAT-преобразовании изменяется IP-адрес источника и назначения в составе пакета. Ниже описаны ситуации, в которых оправданы подобные изменения адреса.
• Установление соответствия между внешними и внутренними адресами. Возможно, что, получив в свое распоряжение блок IP-адресов, вы не захотите перенастраивать сеть и будете использовать адреса, предназначенные для внутреннего пользования. Используя средства NAT, вы можете установить взаимно-однозначное соответствие между обычными Internet-адресами, выделенными для вашей сети, и адресами, которые реально присвоены вашим компьютерам.
• Временное изменение адресов. Средства NAT можно использовать для перенаправления запросов, адресованных некоторой системе, на другой компьютер. Предположим, например, что ваш Web-сервер вышел из строя и вы временно разместили его на другом компьютере. Проблему перенаправления запросов можно решить, изменяя конфигурацию сервера DNS, но средства NAT позволяют сделать это гораздо быстрее.
• Распределение нагрузки. С помощью NAT можно поставить в соответствие одному IP-адресу два компьютера внутренней сети и переключаться между ними при передаче запросов. Такая форма распределения нагрузки считается очень грубой, но если один сервер не справляется со своей задачей, можно использовать подобное решение. Следует, однако помнить, что существуют более совершенные способы распределения нагрузки, не связанные с использованием NAT.
• Расширение адресного пространства. Если в вашем распоряжении имеется лишь ограниченное число IP-адресов, вы можете "спрятать" несколько компьютеров за одним IP-адресом. Такая возможность обычно используется в небольших сетях, подключенных к Internet по коммутируемой линии либо через соединение с широкой полосой пропускания. Если провайдер выделил для сети лишь один адрес, с помощью NAT-преобразования можно обеспечить работу всех компьютеров сети.
Расширение адресного пространства является наиболее частым применением NAT. Данная разновидность NAT-преобразования называется IP-маскировкой. В этом разделе будет рассматриваться именно этот способ использования NAT.
Средства NAT применяются совместно со средствами маршрутизации. В роли маршрутизатора, поддерживающего NAT, может выступать компьютер под управлением Linux. Настройка ядра системы производится с помощью программы iptables. Обычно компьютер, предназначенный для выполнения NAT-преобразования, содержит два сетевых интерфейса: посредством одного из них компьютер подключается к Internet, а с помощью другого соединяется с внутренней сетью.
На заметку
Внешние узлы не должны идентифицировать компьютер, выполняющий NAT-преобразование, как маршрутизатор. В этом состоит одно из отличий NAT-маршрутизатора от обычного маршрутизатора.
Для того чтобы лучше понять работу NAT, рассмотрим процесс преобразования адреса с помощью NAT-маршрутизатора. Взаимодействие с сервером, расположенным в Internet, начинается по инициативе клиента (например, Web-броузера), который находится в сети, защищенной с помощью NAT-маршрутизатора. Предположим, что этот клиент пытается обратиться к Web-броузеру по адресу 172.18.127.45. Он генерирует HTTP-запрос; в пакетах, содержащих этот запрос, указывается локальный IP-адрес клиента (предположим, 192.168.9.32). Клиент передает запрос компьютеру, выполняющему роль локального шлюза; этот компьютер осуществляет NAT-преобразование. Получив пакет с запросом к Web- серверу, NAT-маршрутизатор анализирует его содержимое, заменяет IP-адрес источника на свой IP-адрес (допустим, что его адрес 10.34.176.7) и передает пакет по назначению. Web-сервер считает, что пакет поступил с компьютера, выполняющего функции NAT-маршрутизатора, поэтому направляет ему ответ. Получив ответ сервера, NAT-маршрутизатор распознает его как ответ на запрос, переданный с компьютера 192.168.9.32, выполняет обратное преобразование, заменяя адрес назначения в пакете, а затем передает пакет, содержащий ответ, клиенту. Рис. 25.3 иллюстрирует этот процесс. При этом ни клиент, ни сервер не знают о том, что адрес был преобразован средствами NAT, поэтому при использовании NAT-маршрутизатора не требуется изменять конфигурацию компьютеров в сети.
Рис. 25.3. NAT-маршрутизатор изменяет IP-адреса в пакетах
NAT-преобразование, а в особенности IP-маскировка, автоматически обеспечивает защиту компьютеров в локальной сети. Поскольку внешним компьютерам доступен только один IP-адрес, они не могут установить непосредственное соединение с внутренним компьютером. В локальную сеть извне передаются только ответы на запросы, отправленные ими. По этой причине продукты NAT часто называют брандмауэрами, хотя между этими инструментами имеются существенные различия.
Помимо преимуществ, NAT имеет существенные недостатки.
• Автоматически создаваемая защита затрудняет размещение сервера во внутренней сети, расположенной за NAT-маршрутизатором, и обеспечение внешнего доступа к этому серверу. Чтобы доступ к серверу извне стал возможен, надо использовать перенаправление портов.
• Не все протоколы нормально взаимодействуют с NAT. Иногда IP-адреса используются для обработки содержимого пакетов, в других случаях на обоих концах соединения могут работать серверы. Средства, реализующие NAT в системе Linux, обеспечивают поддержку некоторых протоколов, но если вы используете видеоконференции или средства шифрования, то при обмене с Internet через NAT-маршрутизатор могут возникнуть проблемы.
• Несмотря на то что NAT защищает компьютеры локальной сети, не следует думать, что их безопасность гарантирована. Угрозу для ваших компьютеров могут представлять также вирусы и программы типа "троянский конь", попадающие в систему по другим каналам.
Опции iptables для осуществления NAT-преобразования
Средства поддержки NAT в системе Linux содержатся в таблице nat, которая уже упоминалась выше. Подобно таблице filter, nat содержит три цепочки: PREROUTING, POSTROUTING и OUTPUT. Несмотря на совпадение имен, цепочка OUTPUT в таблице nat отличается от одноименной цепочки в таблице filter. Для активизации средств NAT надо вызвать две следующие команды:
# iptables -t nat -A POSTROUTING -о внешний_интерфейс -j
MASQUERADE
# echo "1" > /proc/sys/net/ipv4/ip_forward
На заметку
Для загрузки NAT-модуля ядра перед вызовом iptables может потребоваться выполнение команды modprobe iptable_nat.
В качестве внешнего интерфейса в первой из двух приведенных команд указывается интерфейс, посредством которого осуществляется соединение с Internet, например ррр0 или eth1. Эта команда указывает Linux на то, что для всего сетевого трафика, проходящего через маршрутизатор, надо выполнить IP-маскировку. Вторая команда разрешает ядру Linux осуществить маршрутизацию (эта команда используется также в маршрутизаторах, не поддерживающих NAT).