Опыт организации граничных шлюзов на основе Linux
(тезисы доклада на конференции “open source forum ’05”)
Николай Малых
ЗАО BiLiM Systems
Санкт-Петербург
Современный бизнес практически немыслим без использования сетевых технологий хотя бы для получения доступа к информации через Internet. Следовательно для большинства организаций актуальна задача подключения своей локальной сети к внешним сетям. При организации такого подключения возникает необходимость установки на стыке сетей (периметре внутренней сети) специальных аппаратно-программных комплексов, которые будем называть далее шлюзами. В задачи граничного шлюза входит:
- маршрутизация трафика между внутренней сетью и одним или несколькими каналами связи с внешними сетями;
- контроль и учет трафика входящего в сеть и выходящего из него;
- трансляция адресов сетевого уровня (IP).
Для решения такого рода задач выпускается множество устройств, однако все эти устройства рассчитаны на массовые (типовые) варианты использования и далеко не всегда соответствуют потребностям конкретной организации. Показательным примером может служить автономная система, включающая сеть одной организации. Для этого случая требуется установить на границе сети шлюз, который поддерживает протокол BGP4 и обеспечивает функции сетевого экранирования (брандмауэр). Стоимость такого шлюза (маршрутизатора) общего назначения сегодня составляет около 15 тысяч долларов США.
Операционные системы семейства UNIX содержат все, что необходимо для организации такого шлюза, в своем составе или в числе прикладных программ. Мы выбрали для организации шлюза ОС RedHat, хотя в процессе его создания и последующего развития от исходного набора файлов RedHat мало что осталось, поскольку большая часть используемых пакетов была собрана из исходных кодов с внесением во многих случаях тех или иных изменений. В качестве аппаратной платформы используется ПК общего назначения с процессором Celeron 300 МГц, оперативной памятью размеров 512 Мбайт и дисковым накопителем размером 20 Гбайт. Очевидно, что рыночная стоимость такого ПК на сегодняшний день не превышает нескольких десятков долларов.
Шлюз используется для маршрутизации пакетов между четырьмя сегментами FastEthernet – 2 внешних канала, локальная сеть компании и сегмент публичных серверов (DMZ). Наша компания имеет зарегистрированную автономную систему, поэтому на шлюзе поддерживается протокол BGP4 для анонсирования наших префиксов и получения маршрутной информации от 2 провайдеров.
Ядро Linux собрано и оптимизировано с учетом использования компьютера в качестве маршрутизатора и межсетевого экрана, поэтому в нем отключены все ненужные компоненты и отключена поддержка загружаемых модулей (LKM). Монолитное ядро позволяет повысить производительность системы и предотвращает возможность неконтролируемой загрузки модулей (например, троянских программ, выполненных в форме LKM). В ядре также отключена поддержка функций, позволяющих осуществить несанкционированный локальный доступ к шлюзу (монитор, клавиатура, мышь, порты USB, LPT)
Для обеспечения маршрутизации используется пакет Zebra с незначительными доработками, который собран с поддержкой лишь реально используемых протоколов OSPF и BGP4. Фильтрация пакетов и учет трафика осуществляются на основе Netfilter/iptables с незначительными доработками по сравнению со стандартным набором, распространяемым в составе ядра, iptables и POM. Для мониторинга целостности файловой системы шлюза используется пакет samhain, а для проверки на наличие в системе враждебного кода набор утилит, включающий chkrootkit, rkhunter и др. Контроль записей в журнальных файлах осуществляется с помощью простой утилиты logcheck. Для обеспечения дополнительной надежности некоторые записи дублируются на сервере syslog, находящемся внутри сети компании. В качестве системы детектирования попыток вторжения или иных нежелательных действий (например сканирования портов) для шлюза и внутренних сетей используется стандартный пакет Snort. В нашем случае шлюз служит лишь в качестве набора датчиков Snort, собирающих информацию и передающих ее в базу данных на один из внутренних серверов. Кроме того, попытки входа в систему или проникновения в сеть регистрируются также с помощью утилиты hostsentry и набора правил iptables. Дополнительным детектором попыток сканирования служит утилита portsentry и набор правил iptables.
Перечислим набор функций, реализованных на шлюзе:
-
маршрутизация пакетов IP с поддержкой протоколов BGP4 и OSPF;
-
трансляция адресов для входящего и исходящего трафика;
-
межсетевое экранирование с учетом состояния соединений (stateful);
-
фильтрация пакетов, входящих в сеть и выходящих наружу:
-
ingress-фильтрация в соответствии с RFC 2267;
-
фильтрация спама на основе списков доступа;
-
фильтрация спама по частоте попыток подключения;
-
фильтрация попыток несанкционированного доступа к шлюзу по протоколу SSH;
-
фильтрация нежелательного трафика по протоколам, номерам портов и адресам IP;
-
управление полосой для исходящего трафика;
-
детектирование попыток сканирования или проникновения в сеть;
-
блокирование DoS-атак на шлюз и хосты внутренних сетей;
-
мониторинг работы сервера, включая уровень загрузки внешних каналов и процессора, целостность файловой системы;
-
удаленное управление с использованием SSH-соединений и Web-интерфейса;
-
детектирование попыток вторжения и сканирования для шлюза и внутренней сети;
-
детектирование и блокирование недопустимого исходящего трафика для предотвращения возможности организации атак из сети компании;
-
система мониторинга и оповещения администратора о сигналах тревоги по электронной почте или с помощью SMS;
-
учет трафика пользователей из внутренней сети;
-
система LookingGlass для проверки связности сети из удаленных точек.
Данный шлюз в описанной конфигурации используется с начала 2002 года и доказал свою надежность и эффективность.