Библиотека сайта rus-linux.net
Приемы работы в Ubuntu.
Глава 7: Безопасность
Оригинал: "Ubuntu Hacks: Chapter 7 - Security"
Авторы: Кайл Ранкин, Джонатан Оксер, Билл Чайлдерс (Kyle Rankin, Jonathan Oxer, Bill Childers)
Дата публикации: June 2006
Перевод: Н.Ромоданов
Дата перевода: октябрь 2010 г.
Совет # 69: Защищаем свою сеть с помощью брандмауэра
Защитите свою сеть с помощью брандмауэра, управляемого с помощью настольного компьютера с Ubuntu.
В Linux есть отличная система управления сетевыми пакетами на уровне ядра, называемая iptables, которую можно настроить как непосредственно из командной строки, так и через разнообразные графические интерфейсы администрирования. Одним из наиболее мощных интерфейсов управления брандмауэром является система Firewall Builder, созданная для того, чтобы можно было отделить политику защиты от реализации защиты и чтобы можно было сосредоточиться на том, что вы хотите, чтобы делал брандмауэр, а не на том, как вы хотите, чтобы он это делал.
В интерфейсе Firewall Builder в качестве объектов используются хосты, маршрутизаторы, брандмауэры, сети и протоколы и вы можете с помощью мышки перетаскивать эти объекты, когда определяете политику вашего брандмауэра. Затем Firewall Builder скомпилирует вашу политику в фактические правила, которые необходимы для соблюдения этой политики, причем есть много компиляторов политики, которые предназначены для различных типов брандмауэров. Вы можете определить свою политику с помощью Firewall Builder, который работает на настольном компьютере с Ubuntu, а затем откомпилировать эту политику для брандмауэра, работающего с iptables на Linux, с ipfilter на BSD, или с приблизительно полудюжиной других технологий брандмауэров. Политика может определяться одним и тем же способом независимо от технологии, которая используется на целевом брандмауэре. И поскольку Firewall Builder может одновременно поддерживать несколько брандмауэров, вы можете использовать его в качестве центральной консоли управления для настройки различных брандмауэров и отдельных хостов всей вашей сети в качестве единого унифицированного интерфейса.
Вы можете, если захотите, запустить Firewall Builder непосредственно на вашем брандмауэре, но поскольку политика общая, хорошо, чтобы ваш брандмауэр минимально использовал возможности системы, так как лучше всего иметь в качестве брандмауэра отдельную машину, а Firewall Builder запустить на управляющей машине, которой может быть персональный компьютер или ноутбук. Затем, когда вы захотите обновить политику брандмауэра, вы можете запустить Firewall Builder на управляющей машине для создания новых правил и переноса их в брандмауэр.
Первоначальная настройка брандмауэра
Начните с настройки вашей машины с брандмауэром и установите минимальный вариант Ubuntu: запустите программу установки и установите сервер [Совет # 93], поскольку в этом случае будут установлены только основные пакеты. Также желательно установить хотя бы одну дополнительную карту Ethernet, что позволит отделить ненадежный трафик интернета от внутренней сети. При стандартном подходе на брандмауэре запускается три сетевых интерфейса: один к внутренней сети (или downstream), один для подключения к сети интернет (или upstream) и один к отдельной локальной сети, называемой демилитаризованной зоной (или DMZ), в которой вы можете разместить серверы, открытые для доступа из интернета. Сконфигурируйте сетевые интерфейсы под соответствующие сети, к которым они подключены, и, с помощью команды ping, проверьте, чтобы были доступны хосты каждой сети.
Теперь ваша машина, предназначенная для брандмауэра, настроена как шлюз между интернетом, вашей внутренней сетью, а также любыми серверами, которые вы захотите запускать, но еще неизвестно, как передавать данные из одной сети в другую так, чтобы все было эффективно изолировано. Для того, чтобы ваш брандмауэр передавал пакеты с одного сетевого интерфейса на другой и выполнял фильтрацию пакетов и трансляцию сетевых адресов / портов, вам нужно установить iptables, а также включить дистанционное управление брандмауэром, поэтому вам нужно установить SSH-сервер:
$ sudo apt-get install iptables ssh
Первоначальная настройка управляющей машины
Установите на вашей управляющей машине Firewall Builder, а также RCS и пакеты с документацией по Firewall Builder:
$ sudo apt-get install fwbuilder rcs fwbuilder-doc
Теперь вы готовы выполнить остальные шаги.
Создайте новый проект
Сначала запустите Firewall Builder:
$ fwbuilder
Выберите Create New Project File (Создать новый файл с проектом) и укажите место, где он будет сохранен. Будет хорошо, если вы создадите специальный директорий для хранения файла с проектом, поскольку Firewall Builder будет в том же самом директории создавать другие файлы и будет проще делать резервные копии настроек вашего брандмауэра, если все находится в одном месте.
После этого вы сможете активировать контроль версий проекта, а также настроить, чтобы проект автоматически открывался при запуске Firewall Builder. Включите обе эти возможности.
Возможность контроля версий требует от Firewall Builder сохранять конфигурационный файл в RCS, что позволит видеть всю историю файла, в том числе все его изменения, которые когда-либо были в нем сделаны. Эта возможность может быть очень полезной в случае, если в процессе настройки ваш брандмауэр выйдет из строя и вам потребуется вернуться к заведомо исправной рабочей конфигурации.
Firewall Builder начнет свою работу с пустой конфигурации, содержащей только ряд предопределенных сервисов из двух библиотек (см. рис.7-1). Библиотеки называются User (Пользовательская) и Standard (Стандартная) и вы можете переключаться между ними с помощью выпадающего меню, расположенного в левом верхнем углу окна. Библиотека Standard (Стандартная), поставляемая в комплекте с Firewall Builder, является библиотекой, из которой объекты можно только читать и в которой находятся предопределенные сервисы практически для любого сервиса TCP и UDP для типичных случаев их использования, а также предопределенные диапазоны сетевых адресов и интервалы времени. Библиотека User (Пользовательская) является библиотекой, в которой можно запоминать объекты, которые вы определили, в том числе брандмауэры, настроенные сервисы TCP и UDP, а также настроенные диапазоны сетевых адресов.
Рис.7-1. Управление политикой в Firewall Builder
Определяем новый брандмауэр
Убедитесь, что выбрана библиотека User (Пользователь), щелкните правой кнопкой мыши по директории Firewalls (Брандмауэры) и выберите вариант New Firewall (Новый брандмауэр). Откроется диалоговое окно New Firewall (Новый брандмауэр) так, как это показано на рис.7-2. Задайте для вашего брандмауэра имя, выберите программу, с помощью которой реализуется брандмауэр (как правило, "Iptables", если на машине с брандмауэром вы запускаете Linux), и выберите операционную систему вашего брандмауэра (Linux 2.4/2.6). Теперь видно, насколько гибок Firewall Builder и насколько много типов брандмауэров он поддерживает.
У вас также есть возможность использовать объекты с предварительно сконфигурированным шаблоном брандмауэра, что хорошо в случае, если вы только знакомитесь с Firewall Builder. Шаблоны позволяют очень легко начать работать с типичными сценариями брандмауэра, а не начинать с нуля с абсолютно пустой конфигурации. После того как вы сделаете свой выбор, нажмите кнопку Next (Далее).
Рис.7-2. Новый брандмауэр
Пощелкайте по именам всех шаблонов брандмауэров и посмотрите их схемы и краткие пояснения их работы. В большинстве малых сетей хорошо подойдет вариант "fw template 1", в котором задан типичный брандмауэр с динамическим внешним адресом, статическими внутренними адресами сети 192.168.1.0/24, неограниченным исходящим трафиком из сети и с доступом к самому брандмауэру только из внутренней сети через SSH. Вариант "fw template 2" похож на предыдущий, но в нем брандмауэр работает как сервер DHCP и DNS во внутренней сети.
После того, как вы выберете шаблон, вы вернетесь к основному окну Firewall Builder, предназначенному для управления политикой, но теперь у вас уже есть для вашего нового брандмауэра политика, определяемая по умолчанию. Firewall Builder отображает правила политики в виде списка, в котором правила упорядочены в порядке их использования, которые проверяются с самого верхнего правила и далее вниз до тех пор, пока не будет найдено соответствие (см. рис.7-3).
Рис.7-3. Управление политикой
С помощью вкладок, расположенных в верхней части списка, можно получить доступ к нескольким спискам правил. Главным списком является список Policy, в котором указаны правила, с помощью которых запрещаются и разрешаются действия для всего брандмауэра. Кроме того для каждого интерфейса брандмауэра имеется отдельный список правил, и, наконец, есть список NAT, который позволяет настраивать правила трансляции сетевых адресов Network Address Translation. Как правило, вам не следует беспокоиться об отдельных интерфейсах, большинство изменений будет касаться списков Policy и NAT.
Добавляем политику, относящуюся к конкретному хосту
Чтобы понять, как с помощью списков Policy и NAT осуществляется управление, попробуйте добавить конкретный сценарий, например, предоставьте доступ извне к внутреннему веб-серверу.
Сначала добавьте к серверу объект Host (Хост). Перейдите по дереву объектов User→Objects→Hosts (Пользователь → Объекты → Хосты), щелкните правой кнопкой мыши по Hosts (Хосты) и выберите New Host (Новый хост). Введите имя для вашего нового хоста, например, www.example.com, установите флажок на Use Preconfigured Template Host Objects (Использовать хост с предварительно сконфигурированным шаблоном), а затем нажмите кнопку Next (Далее).
Выберите шаблон "PC with 1 interface" и нажмите кнопку Finish ("Готово"). В ваш список хостов будет добавлен объект с предварительно определенным интерфейсом, так что перейдите по User→Objects→Hosts→<www.example.com>→eth0→<www.example.com> (Пользователь → Объекты → Хосты → <www.example.com> → eth0 → <www.example.com>, а затем дважды щелкните по www.example.com и отредактируйте значения, заданные в интерфейсе. Измените IP адрес так, чтобы он соответствовал фактическому внутреннему адресу вашего сервера, подтвердите сделанные изменения и закройте диалоговое окно.
Предположим, что у вас есть диапазон общедоступных статических IP-адресов, назначенных внешнему интерфейсу вашей сети. Щелкните правой кнопкой мыши по "eth0" и выберите пункт Add IP Address (Добавить IP-адрес). Введите общедоступный IP адрес и маску сети, подтвердите сделанные изменения и закройте окно.
Теперь для вашего сервера определены два IP адреса: реальный адрес, назначенный его интерфейсу, и общедоступный адрес, через который люди могут к нему осуществлять доступ.
Теперь щелкните по вкладке NAT, расположенной в верхней части списка правил. Добавьте новое пустое правило NAT либо при помощи щелчка правой кнопкой мыши по существующему правилу, либо выбрав в меню Rules→Add Rule Below (Правила → Добавить ниже правило).
Теперь с помощью перетаскивания иконок объектов в соответствующие места вы можете создать свое правило NAT. В правиле имеются следующие столбцы:
Original Src
Исходный адрес источника пакетов перед трансляцией
Original Dst
Исходное назначение пакетов перед трансляцией
Original Srv
Исходный сервис (порт), на который поступают пакеты
Translated Src
Новый исходный адрес пакетов, указывающий, что с него поступили пакеты
Translated Dst
Новый адрес назначения, используемый в пакетах
Translated Srv
Новый порт, на который направляются пакеты
Первое правило создано именно для того, чтобы транслировать пакеты, которые направлены от брандмауэра на сервер. Щелкните по иконке, представляющей внешний IP адрес сервера, и перетащите ее в поле Original Dst, а затем щелкните по иконке внутреннего IP адреса и перетащить ее в поле Translated Dst.
Теперь добавьте еще одно пустое правило и настройте его так, чтобы оно транслировало пакеты, направляемые от сервера во внешний мир. Щелкните по иконке с внутренним IP адресом и перетащите ее в поле Original Src, а иконку с внешним IP адресом перетащите в поле Translated Src.
Теперь у вас есть правила, в соответствии с которыми будут изменяться пакеты так, чтобы они перенаправлялись на сервер и с сервера через брандмауэр, но так, чтобы внешние компьютеры видели только внешний IP адрес (см. рис. 7-4).
Рис.7-4. Правила NAT
В этих примерах транслируются только IP адреса. Но вы также можете применить правила трансляции и к сервисам. Например, у вас может быть реверсный прокси сервер, который внутри сети работает как ускоритель доступа веб-серверу по внутреннему порту 8080, и вы хотите, чтобы внешние пользователи могли получать к нему доступ через стандартный порт HTTP - порт 80. С помощью перетаскивания сервисов в поля Original Srv и Translated Srv из библиотеки Standard (Стандартная) и, в случае необходимости, создания сервисов в библиотеке User (Пользовательская), вы можете выполнять трансляцию портов точно также, как и трансляцию адресов. С помощью Firewall Builder вы можете по собственному усмотрению преобразовывать адреса и порты источника пакетов и назначения пакетов, поэтому настраивайте правила NAT до тех пор, пока сетевой трафик не будет транслироваться так, как вы хотите.
Однако самих правил NAT не достаточно. Без соответствующего правила политики, пакеты не будут проходить через брандмауэр даже если они будут соответствовать правилам NAT. Хотя в правилах NAT определено, что может происходить, правила политики определяют, чему разрешено происходить. Последнее слово за правилами политики.
Щелкните по вкладке Policy (Политика) и, спускаясь по списку существующих правил, найдите подходящее место, куда можно добавить правила для вашего хоста. Скорее всего, это будет почти в конце списка перед общим сетевым правилом и правилом, запрещающим все, что не разрешено Deny All. Щелкните правой кнопкой мыши по колонке с номером правила и добавьте правило. Перетащите иконку с внешним IP адресом вашего веб сервера в поле Destination, а затем щелкните правой кнопкой мыши по иконке Deny (Запретить), расположенной в столбце Action (Действие) и замените ее на иконку Allow (Разрешить).
Если вы разрешаете извне вашей сети полный доступ к любому порту на вашем веб-сервереи, то это все, что нужно было сделать. Но безопаснее задать более конкретные правила и разрешать использовать только определенные сервисы, так что выберите из выпадающего меню User/Standard, находящегося в верхнем левом углу, библиотеку Standard (стандартная). Перейдите далее по Standard→Services→TCP→"http" (Стандартная → Сервисы → TCP → "http") и перетащите иконку этого протокола в поле Service вашего нового правила. Если вы также хотите разрешить соединение по SSL, вы можете в то же самое поле также перетащить иконку "https". Теперь у вас есть правило, которое явно разрешает подключения с любого хоста на ваш веб-сервер, но только на порты 80 и 443 (см. правило 5 на рис. 7-5).
Рис.7-5. Правила политик
Компилируем и устанавливаем политику
Как только вам все будет нравиться в политике, которую вы создали, ее следует применить к брандмауэру. С помощью Firewall Builder это делается в два этапа. Сначала политика компилируется в скрипт в соответствии с тем, какая программа используется в качестве брандмауэра, а затем скрипт переносится на брандмауэр и загружается.
Чтобы заставить Firewall Builder откомпилировать ваши правила, выберите Rules→Compile (Правила → Компилирование) или щелкните по иконке с изображением автомобильной коробки передач. Появится диалоговое окно, информирующее о ходе выполнения работы, а когда все завершится, у вас в рабочем директории, используемом Firewall Builder, вдобавок к файлу проекта будет находиться новый скрипт. Теперь вы можете через SSH скопировать этот скрипт на брандмауэр и, выполнив его, применить правила. Чтобы все было в порядке, создайте на брандмауэре новый директорий для хранения скрипта:
$ sudo mkdir /etc/firewall
Затем скопируйте скрипт в этот директорий и для того, чтобы его проверить, выполните его вручную. Несмотря на то, что этот скрипт имеет расширение .fw, это, на самом деле, простой шелл скрипт, который можно запустить обычным способом:
$ sudo /etc/firewall/ firewallname.fw
В Firewall Builder есть большое количество конфигурационных параметров, позволяющих для каждого брандмауэра управлять процессом генерации скрипта, так что если скрипт на брандмауэре не работает должным образом, вам, возможно, потребуется щелкнуть правой кнопкой мыши в дереве объектов по иконке брандмауэра, выбрать вариант Edit (Изменить), а затем щелкнуть по кнопке Firewall Settings (Настройки брандмауэра). С помощью вкладок, расположенные в верхней части, вы можете получить доступ к большому количеству параметров настроек, так что внимательно с ними ознакомьтесь и выберите те, которые применимы к вашему брандмауэру, а затем откомпилируйте правила и снова их проверьте.
Автоматический запуск политики
Скрипт брандмауэра должен запускаться каждый раз, когда загружается ваш брандмауэр, так что воспользуйтесь вашим любимым редактором для того, чтобы открыть файл /etc/rc.local и перед строкой exit 0
добавьте путь к скрипту. Конец файла /etc/rc.local должен выглядеть следующим образом:
/etc/firewall/firewallname.fw exit 0
Всякий раз, когда Ubuntu переходит на новый многопользовательский уровень, после выполнения всех других скриптов будет выполняться файл rc.local. Ссылка на ваш скрипт, указанная в нем, обеспечит, что скрипт будет запускаться после всех других сервисов, запускающих сеть, но при загрузке в однопользовательском режиме он запускаться не будет. Это удобно, если вы используете загрузку в однопользовательском режиме для исправления проблем с конфигурацией компьютера,.
Автоматическая установка политики
После того как вы убедитесь, что правила вашего брандмауэра генерируются правильно, на последующие обновления вы тратите меньше усилий, если настроите Firewall Builder так, чтобы он вместо вас выполнял установку и активацию скрипта. Выберите значок брандмауэра, который расположен в User→Firewalls (Пользователь → Брандмауэры), щелкните правой кнопкой мыши, выберите Edit (Изменить), в результате чего откроется диалоговое окно Firewall (Брандмауэр). Щелкните по Firewall Settings (Настройки брандмауэра) для того, чтобы вновь войти в диалоговое окно настройки брандмауэра. Щелкните по вкладке Installer (Инсталлятор), на которой указаны настройки, позволяющие выполнить скрипт, который установит и активирует правила брандмауэра. В нижней части диалогового окна имеются два текстовых поля ввода, в которых можно указать вызов любого внешнего скрипта или команды, которые вы захотите выполнить. Так, например, можно написать скрипт, который с помощью SCP скопирует скрипт на брандмауэр, а затем с помощью SSH выполнит его. В Firewall Builder есть пример такого скрипта, который установлен в /usr/bin/fwb_install и выполняет как раз то, что вам. Полная информация об использовании скрипта fwb_install приведена на странице его описания:
$ man fwb_install
В Firewall Builder также есть свой собственный механизм установки политики, которого вполне достаточно в большинстве случаев.
Чтобы автоматически устанавливать политику, сначала на брандмауэре создайте группу, например, fwadmin, а затем создайте пользователя и сделайте его членом этой группы:
$ sudo addgroup fwadmin $ sudo adduser fwadmin -G fwadmin
$ sudo mkdir -m 0770 /etc/firewall $ sudo chown fwadmin:fwadmin /etc/firewall
Сконфигурируйте sudo так, чтобы созданный пользователь мог без ввода пароля выполнять скрипт настройки брандмауэра. Для этого запустите
$ sudo visudo
и добавьте в конце файла /etc/sudoers следующую строку:
%fwadmin = NOPASSWD:/etc/firewall/firewallname.fw
Имя firewallname.fw следует заменить на имя реально существующего скрипта, который был сгенерирован для этого брандмауэра с помощью Firewall Builder.
Дополнительно вы можете настроить шифрование с открытым ключом для доступа на брандмауэре к учетной записи fwadmin.
В диалоговом окне Firewall Settings (Настройки брандмауэра) на вкладке Installer (Инсталлятор) укажите путь к директорию, который вы создали на брандмауэре, и имя пользователя, созданного вами (см. рис. 7-6).
Рис.7-6. Настроечные параметры установки политики
Указывать имя или адрес брандмауэра необязательно: Firewall Builder попытается автоматически определить IP-адрес, используемый для связи с брандмауэром, но если вы укажите адрес, он будет использовать только его.
Сохраните настройки и закройте диалоговое окно Firewall Settings (Настройки брандмауэра). Теперь вы можете устанавливать и активировать свою политику простым нажатием на иконку Install (Установить) или выбирая в меню вариант Rules→Install (Правила → Установить). Теперь любые обновления, которые вы сделаете, можно применить при помощи нажатия на кнопку Compile (Компилировать), а затем — на кнопку Install (Установить).
Если вы хотите узнать больше, то на официальном сайте Firewall Builder (http://www.fwbuilder.org) можете ознакомиться с подробной документацией и руководствами.
Назад | Оглавление | Вперед |