Linux mini-HOWTO

         

Конфигурация ядра


Вам придется собрать свое ядро с применением включенной опции "Мост" и патча фильтрования моста (а также firewall-а, сети и т.п., если у вас еще это не встроено). Вам, как минимум, потребуются следующие опции ядра:



Литература


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

"Мини-Howto: Мосты"

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

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

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

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



Мини-HOWTO: Мост + Firewall + DSL


Derek Ney
derek@hipgraphics.com


Перевод: Станислав Рогин, ASPLinux

Настройка моста+firewall на Linux-системе, использующей DSL-соединение



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


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

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



Настройка




Полная настройка состоит из следующих шагов:

Настройка оборудования (и проверка того, что оно работает)

Патч и конфигурирование ядра

Настройка сети (ifconfig, маршрутизация, мост)

Настройка firewall



Настройка Firewall


Вы все еще не настроили firewall (если таковой вам нужен) для предотвращения неавторизованного доступа к локальной сети. Патч "Фильтрование моста"

, который вы установили, позволяет вам использовать новое встроенное правило "bridgein" в команде ipchains. Это правило используется, когда пакет передается по мосту от eth0 к eth1, или наоборот. Это правило не используется, когда пакет назначается самому firewall-у; вместо этого вам надо использовать правило input. Я не буду углубляться в детали настройки firewall; для этого читайте Howto: ipchains.



Настройка локальных машин


На каждой локальной машине вам надо просто правильно настроить IP-адрес, маску сети и использовать DSL-маршрутизатор в качестве шлюза по умолчанию. Firewall/мост будет направлять пакеты к DSL-маршрутизатору и от него.



Настройка моста


Вам понадобится утилита конфигурирования моста (автор Alan Cox) - она позволит контролировать работу моста, встроенного в ядро при включенной опции CONFIG_BRIDGE. BRCFG распространяется в виде исходных текстов и заранее скомпилированных исполняемых файлов. Я не знаю, с каким ядром были собраны эти файлы, но у меня все несколько разошлось, когда я попытался собрать их с include-файлами моего ядра (2.2.13). Поэтому, к сожалению, эти исходные тексты пришлось немного подправить. Ниже приведен сам патч:



Настройка оборудования


Вам понадобятся две сетевые карты. Самая большая проблема, с которой я столкнулся, возникла после того, как я выбрал первый попавшийся PCI-слот для второй карты на материнской плате, и оказалось, что этот слот использовал то же прерывание, что и первая карта. Я вообще не знал, что из-за этого могут возникнуть проблемы (на этот предмет не было никакой информации, и я думал, что все будет нормально работать). Обе карты тихо умерли (без индикации каких-либо ошибок) и перестали вообще передавать и принимать пакеты. Обычно, когда вы пытаетесь изменить конфигурацию, последнее, что делаете - меняете слоты карт. Я не знаю, существует ли эта проблема для всех сетевых карт, или только для наших, но я бы никому не советовал использовать общие прерывания. Драйвер, который мы будем использовать, выдает на экран IRQ каждой сетевой карты при загрузке системы. Существует большое количество советов, как заставить ядро обнаружить несколько сетевых карт (смотрите "Howto: Ethernet" , раздел Использование нескольких сетевых карт на одной машине); однако, мне это не понадобилось (мое ядро обнаруживало обе карты без каких-либо аргументов).

Затем вам надо подключить вторую карту к DSL-модему (или к тому, что соединяет вас с внешним миром) и убедиться, что это соединение работает. Вы должны дать команду ifconfig для второй карты с соответствующим IP-адресом и увидеть работающий ping до маршрутизатора на дальнем конце подключения к глобальной сети. Таким образом вы проверите, можно ли вы посылать пакеты по DSL-соединению. Например, в нашей сети нужно сделать следующее:

ifconfig eth1 192.168.2.130 netmask 255.255.255.192 broadcast 192.168.2.191

чтобы настроить вторую карту. А затем



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


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

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

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



Пример конфигурации


В процессе описания настроек я буду предполагать, что у вас установлены две сетевых карты, имеется внешнее DSL-соединение (DSL-модем подключен к одной из сетевых карт), и локальная сеть, подключенная ко второй сетевой карте. Я называю карту, подключенную к DSL-модему "eth1", а карту локальной сети - "eth0". Имена карт в системе зависят от того, в какой слот они включены.

Я также предполагаю, что вам выделена подсеть IP-адресов 192.168.2.128-191, т.е маска сети будет - 255.255.255.192, а DSL-маршрутизатор имеет адрес 192.168.2.129. Все эти значение - фиктивные, они здесь приведены исключительно для иллюстрации сути настройки. Я буду использовать IP-адрес 192.168.2.130 для firewall-машины (на обеих сетевых картах), хотя я выяснил, что можно иметь и различные адреса для сетевых карт, если вам это необходимо.



изолировать локальную сеть от глобальной


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

Маршрутизация пакетов между глобальной и локальной сетями (мост)

Фильтрация ненужных, неразрешенных и опасных пакетов (firewall)

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

Соединяем все вместе


Итак, теперь у нас имеются две сетевые карты, вновь собранное ядро и установленный пакет brcfg. Теперь вам понадобится стартовый скрипт, запускающий все это при загрузке системы. Я использовал загрузочные скрипты в стиле RedHat (/etc/rc.d). Специфические данные: сетевые адреса и маски я поместил в файл /etc/sysconfig/network:



Совместное использование прерываний


Как я уже упоминал в разделе "Настройка оборудования", нежелательно использовать одно и тоже прерывание для обеих сетевых карт, как, наверно, и нежелательно разделять их IRQ и с другими устройствами.



Странные сообщения команды ipchains -X


Те изменения, котрые мы внесли в ядро патчем "Фильтрование моста" приводят к тому, что команда ipchains -X, выдает следующую ошибку:



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


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