Что?
Мост - это интеллектуальное соединение между двумя сетевыми картами. Firewall - это интеллектуальный изолятор.
Дополнительная маршрутизация
Я еще выяснил, что мне пришлось переключить вторую карту в режим, в котором она смогла отвечать на запросы большого маршрутизатора, какие машины я прячу в моей локальной сети.
Дополнительные проверки
Проверьте, различается ли трафик на интерфейсах:
tcpdump -i eth0 (в одном окне) tcpdump -i eth1 (в другом окне) |
Вы должны привыкнуть использовать tcpdump, чтобы искать то, чего не должно быть или искать отсутствие того, что быть должно.
Последите за пакетами, идущими, например, через мост на вторую карту из внутренней сети. Ниже я слежу за пакетами, идущими от машины с адресом .22:
tcpdump -i eth1 -e host 192.168.2.22 |
Затем выполните команду ping от хоста .22 к маршрутизатору. Вы должны увидеть пакеты в окне tcpdump.
На этот момент у вас должен быть настроен и работать мост с двумя адресами. Проверьте возможность ping на них снаружи и изнутри сети, затем испробуйте telnet, ftp и т.п. с разных сторон.
Исключения для адресов
Все исключения этому общему отрицанию я должен поместить до установки основного правила.
Машина, работающая в качестве firewall во внутренней сети, будет иметь некоторые привилегии. Без особого разрешения будет запрещено входить в машину, использующую firewall, но с этим разрешением им можно общаться с внешним миром.
Исключения для протоколов
Я буду облегчать правила протокол за протоколом. Первое, что я хочу сделать - разрешить ping снаружи внутрь и получать ответ, поэтому я добавлю правило:
Испытания
Если у вас до сих пор все работает и ничего не сломалось, испробуйте свой конфигурационный скрипт - выключите обе карты и запустите скрипт:
Как?
Я начал с устройства мостов на сетевых картах в машине с firewall-ом и затем выключил firewall, не отключая мост. Все работало вроде нормально и оказалось более гибким, чем поодиночке. Я могу отключать firewall и оставить мост или наоборот, по мере необходимости.
Я предполагаю, что код для мостов лежит чуть выше, чем уровень драйвера физического устройства, а код firewall-ов лежит еще выше, поэтому мосты и firewall-ы могут эффективно работать, потому что "соединены последовательно", а не "параллельно" (ох)!). Диаграмма:
-> Вход моста -> Вход firewall -> Ядро -> Выход firewall -> Выход моста -> |
Не существует другого приемлемого способа объяснить, как машина может быть и "проводником" и "изолятором" одновременно. Существуют, однако, некоторые хитрости, о которых я скажу немного позже. В общих словах - вы хотите маршрутизировать пакеты, которые должны обрабатываться к тому же и firewall-ом. В любом случае, у меня все это работало прекрасно. Вот, что вам надо сделать...
Конфигурация моста
Вставьте в ваш конфигурационный скрипт строку, разрешающую работу моста:
Конфигурация загрузки
В литературе, упомянутой выше, вы прочтете, что вам надо подготовить ядро к обнаружению второй сетевой карты в процессе загрузки, добавив в ваш файл /etc/lilo.conf, и затем перезапустив lilo:
Литература для предварительного прочтения.
Прочтите HOWTO: Несколько Ethernet-карт, и вы найдете там несколько советов о том, как заставить работать несколько сетевых карт одновременно.
Более подробные советы по "магии загрузки системы", которая может понадобиться, вы найдете в HOWTO: Приглашение системы при загрузке.
Конечно можно обойтись без чтения HOWTO: Сеть-2, хотя это очень хороший и объемный труд, и вы сможете почерпнуть из него все необходимые детали.
Мини-HOWTO: Совместное использование мостов и Firewall в Linux
Peter Breuer
ptb@it.uc3m.es
Перевод: Станислав Рогин, ASPLinux
Настройка сетевых карт
Достаточно сетевых настроек, но, так как мы устроили мост, то необходимо воспринимать на обеих картах пакеты, которые направлены не нам. Следующие строки необходимо поместить в файл настройки сети.
Основное правило
Я хочу отрезать внешний мир от моей сети и не более того, поэтому мое последнее (воспринимаемое по умолчанию) правило будет следующим - firewall должен игнорировать любые пакеты, идущие из внутренней сети во внешний мир. Я поместил все правила в файл /etc/rc.d/rc.firewall и запускаю его из /etc/rc.d/rc.local в процессе загрузки.
Почему?
Мост вам может понадобиться, если у вас имеется несколько компьютеров, и вы хотите:
сэкономить на покупке хаба, если у вас есть еще одна запасная сетевая карта.
избавиться от проблем с изучением IP-переадресации и других хитростей, если у вас есть две сетевых карты в компьютере.
избежать проблем с поддержкой в будущем, когда все изменится!
"Несколько компьютеров" - это минимум 3 рабочих станции, которые занимаются маршрутизацией, мостами, или просто часто переносятся из одной комнаты в другую! Вам может также понадобиться мост, если вам просто интересно, что же он на самом деле делает. Мне мост потребовался по 2-ой причине.
Если у вас действительно возникла 1-ая проблема, то вы один из немногих. Прочтите Howto: Сеть-2 и HOWTO: Последовательные порты, и вы, возможно, найдете там советы получше.
Firewall может вам понадобиться, если:
Вы пытаетесь защитить сеть от доступа извне, или
Вы хотите запретить доступ к внешнему миру изнутри.
Как ни странно, здесь меня также заинтересовал второй аспект. В нашем университете существуют правила: мы не должны быть провайдером интернета для студентов.
Предварительные проверки
Вы уже собрали IP-переадресацию и маскарадинг в ядро, поэтому проверьте, находится ли firewall в его стандартном (разрешающем) состоянии командой
Программы
Возьмите утилиту настройки мостов с домашних страниц Alan Cox. Это та же ссылка, что и в документе Chris. Я просто не знал, что это ftp, а не http URL ...
Программы и дополнительная литература
Вы должны прочитать HOWTO: Firewall.
Там сказано, что вам понадобится утилита ipfwadm, если у вас ее еще нет. Существуют, правда, и другие, но как я начал использовать ipfwadm, так на нем и остановился. Он достаточно удобен и прост! Вы всегда знаете, что конкретно он делает.
Проверка
Вам, наверное, надо будет проверить работу telnet, rlogin и ping снаружи. Изнутри вы должны смочь произвести ping наружу. Вы также должны иметь возможность команды telnet на firewall-машину изнутри сети, а на самой этой машине должно быть возможно все.
Вот и все. Далее вам, наверно, стоит узнать подробнее про rpc/Yellow Pages и работу с файлом паролей. Сеть с firewall должна работать так, чтобы обычные пользователи не могли войти в firewall (если они смогут зайти в него, они смогут выбраться наружу). Хороших вам HOWTO!
Сетевая маршрутизация
Вот здесь как раз и всплывает подводный камень схемы мост+firewall: нельзя отфильтровывать пакеты, которые не прошли через маршрутизацию. Нет маршрутизации - нет firewall. По крайней мере, это так в ядре версии 2.0.30 и более новых. Фильтры firewall очень близки и пересекаются с кодом ip-переадресации.
Это, однако, не означает, что мост не будет работать. Вы можете устроить мост между двумя картами и отфильтровывать потоки с третьей. Вы можете иметь, например, две карты и включить фильтры firewall-а на обе, обрабатывая пакеты с внешнего IP, например, ближайшего маршрутизатора, если он направляет все пакеты только на одну вашу карту.
Другими словами, чтобы настроить firewall, необходимо точно знать и контролировать назначение конкретных пакетов.
У меня имеется небольшая сеть с машинами, подключенных к хабу, включенному в мой eth0, поэтому конфигурируем эту сеть:
Сетевые адреса
Chris говорит, что мост не должен иметь IP-адреса, но я опишу прямо противоположный вариант.
Если вы собираетесь использовать свою машину для подключения к сети, то вам понадобится IP-адрес. Необходимо проверить, нормально ли настроено устройство обратной петли, чтобы программы могли общаться с тем, с чем они предполагают это общение возможным. Если устройство обратной петли выключено, то DNSили другие сетевые сервисы могут отказать. Прочтите "HOWTO: Сеть-2", но скорее всего, у вас эта часть стандартной конфигурации должна уже присутствовать: