Мосты, Firewall-ы, и DSL-соединения

До недавних пор наша сеть была подключена к Интернету, при помощи модема и протокола PPP. Я установил на шлюз сети firewall, используя IPChains (cмотрите "Мини-HOWTO: IPChains"), и все работало прекрасно. Недавно мы перешли на использование DSL-соединения. Я думал, что все будет очень просто - переключить firewall на DSL-соединение, и все будет работать, как раньше, однако я ошибался. На полную настройку и запуск мне понадобилось три дня. Я прочел огромный объем сопутствующей информации в сети, которая порой противоречила одна другой. Этот документ был создан потому, что, как я предполагаю, в будущем DSL станет значительно более распространен, и мои советы могут понадобиться многим. Я надеюсь, при помощи этого Мини-HOWTO, вы сможете сэкономить значительное время.

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

Суть проблемы

Передо мной встала следующая проблема: настроить систему так, чтобы код firewall-а в ядре (управляемый ipchains) мог быть использован для фильтрации пакетов, идущих между глобальной и локальной сетью. Мне также требовалось, чтобы локальные машины были "видны" в глобальной сети (не исключая работы firewall). Вроде, казалось, IP-маскарадинг (смотрите HOWTO: IP-маскарадинг) - наиболее простое решение в моей ситуации. Но все оказалось не так просто.

Решение

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

Настройка системы состоит из двух частей, выполняющих разные задачи:

В "Мини-Howto: Мосты" приведены подробные инструкции, решающие первую проблему - маршрутизацию пакетов между двумя сторонами сети (локальной и глобальной). Это проделывается следующим способом: обе карты переводятся в режим "promisc", в котором они обрабатывают все пакеты, проходящие по сети, и передают пакеты на другую сторону моста, если там находится их получатель. Эта процедура прозрачна для сети - другие компьютеры даже не видят мост, потому что он даже не имеет IP-адреса. Но это - неполное решение проблемы. Мне нужно, чтобы firewall имел IP-адрес (для административных функций, если не более), и, что гораздо важнее, код моста в ядре перехватывает и передает пакеты до того, как они попадут в firewall, и поэтому в этой ситуации firewall не работает.

Выяснилось, что возможно одновременно назначить IP-адреса сетевым картам и использовать их в качестве моста. Несмотря на то, что в "Мини-Howto: Мосты" это не делается (ну, на самом деле, там используются внутренние адреса) - все прекрасно работает. Это полностью разрешает первую проблему. Чтобы решить вторую, мы установим патч ядра (он находится по адресу http://ac2i.tzo.com/bridge_filter/), который позволяет применять правила firewall к пакетам, проходящим через сеть, добавляя в таблицу firewall новое правило "bridgein".

Общий обзор настроек

Этот мини-HOWTO предназначен для ситуаций, когда ваш Linux является шлюзом/firewall. В системе установлены две сетевых карты. Одна из карт подключена к внешнему миру (в нашем случае это DSL-модем), и ничто больше к нему не подключено. Вторая карта находится в нашей локальной сети.

Заметьте, что я описываю все с моих позиций: машина i386 (ABIT BP6 MOBO, с 2-мя Celeron-ами), RedHat 6.0 с ядром версии 2.2.13, и DSL-модем, подключенный к маршрутизатору, и две сетевых карты Netgear FA310TX. В вашем случае все может отличаться.

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

Литература

Я прочитал достаточно большой объем информации до того, как пришел к полностью работающему варианту. Часть информации оказалась полезной, но не совсем корректной.

"Мини-Howto: Мосты" был первым инструментом, примененным в настройках. К сожалению, его использование не включает в себя firewall.

"Мини-Howto: Мост+Firewall" вначале казался именно тем, что мне нужно. Однако теперь я считаю, что этот документ не совсем корректен. При помощи этого документа у меня вроде бы все заработало, но, в конце концов, я понял, что совсем не нужно разделять свою подсеть на две половины, как советует этот мини-HOWTO, и потом отказался от этого метода. Если вы все-таки будете читать этот документ, то отнеситесь к нему с изрядной долей критики.

Патч "Фильтр моста" - ключ к запуску всего. Как ни странно, информация на сайте предлагает вам использовать советы "Мини-Howto: Мост+Firewall" . Чтобы все запустить, вам эти советы не понадобятся. Понадобится лишь этот патч.

"Howto: IPCHAINS" бесценен при настройке собственно firewall. Я не пытаюсь в этом документе детально описывать настройку firewall - лишь упомяну о вещах, которые отличаются, в связи с использованием моста, описанного здесь.