Владимир Попов
2008-04-10
Нижеследующее — результат компиляции переписки с коллегами-админами, как правило, весьма далёкими от BSD/Linux, но получившими (с подачи автора) этот самый SmoothWall Express 3.0 (Polar) в качестве файрвола локальной сети. Это, конечно, наложило свой отпечаток на предлагаемый материал: каким-то ["чистым"] пользователям это покажется слишком специальным, а многим unix-оидам — слишком примитивным. Ну, не взыщите. Круг общения определяет уровень дискуссии.
SmoothWall — сравнительно небольшая, но очень интернациональная (буквально: от Канады до Австралии) компания, специализирующаяся на вопросах сетевой безопасности. А SmoothWall Express — один из её файрволов, распространяемый под лицензией GPL. Open source, то есть. Далеко не единственный в своём классе, кстати. Глупо было бы утверждать, что лучший (да и как его, лучшего, определять?), но — заслуживающий внимания. Потому, что:
От "прародителей" SmoothWall Express ушёл уже так далеко, что иногда претендует на звание самостоятельного дистрибутива. Местами чуть-чуть угадывается сродство с rpm-based дистрибутивами, но в целом, для любителей прекомпилированных дистрибутивов SmoothWall — чужой. Не смогут они в его рамках воспользоваться богатством репозиториев Debian или RedHat. Зато приверженцы source-based дистрибутивов найдут его вполне "прозрачным".
Что же касается пользователей, далёких от Linux (и от вопросов онтогенеза его дистрибутивов), то они не должны быть разочарованы, поскольку первым требованием, из которого исходили разработчики, было "быть достаточно простым для использования домашним пользователем, не знакомым с Linux". Беглого взгляда на форум пользователей (среди которых, кстати, только зарегистрированных около 20-ти тысяч), достаточно, чтобы заметить, что в этом направлении авторы преуспели: значительной части участников ms windows явно ближе, чем Linux.
Похоже, налицо ещё одна "Linux-success-story", далеко не единичная в тех случаях, когда авторы ориентируются не на пользовательский десктоп, а на решение определённых задач (желательно: с минимальным участием оператора). Итак, познакомимся поближе...
Инсталляция SmoothWall — дело максимум десяти минут (а сколько может потребоваться для 69-ти мегабайтного дистрибутива?). Если Вы знаете, что такое ip-адрес, DNS, Default Gateway, и догадываетесь, доступ какого рода предоставляет Ваш Интернет-провайдер, то ни один из вопросов затруднений не вызовет. Если же не знаете... То откуда тогда решимость заняться сетевым администрированием?
Предупредить стоит лишь вот о чём:
Последний из перечисленных пунктов требует, пожалуй, некоторой детализации. С винчестерами проблемы встречаются редко (если только Вы не собираетесь отдать под файрвол компьютер с последним "писком" от Intel/AMD в качестве m/b), а вот сетевая карта может оказаться в вашем распоряжении совсем новая. И, чем новее — тем больше шансов на отсутствие её поддержки в ядре. Это — правда, что современные сетевые контроллеры, как правило, комплектуются драйверами под Linux. Фокус в том, что хороший драйвер под Linux — это драйвер в исходных кодах. Который нужно ещё компилировать (а для этого потребуется config, а то и ещё кое-что из исходников ядра). Короче: для малознакомых с Linux рекомендация сводится к предложению поменять сетевую карту, если инсталлятор её не обнаруживает.
Для знакомых же с Linux скажу, что помимо 69-ти мегабайтного инсталлятора на сайте можно взять 125-ти мегабайтный ISO "Developer Edition", включающий в себя всё необходимое для самостоятельной разработки. Но, об этом чуть ниже...
Собственно же инсталляция заканчивается предложением перезагрузить компьютер и дальнейшую настройку (если таковая требуется) производить посредством web-интерфейса. Перезагрузка заканчивается симпатичным "пилик!", а для доступа из локальной сети используется адрес http://your_firewall_ip_adress:81
Глядя на симпатичный интерфейс SmoothWall, сразу становится понятно, почему его приверженцы часто называют его smoothie (разг. галантный кавалер). "Полярный медведь" выглядит вполне презентабельно. Доступ к администрированию авторизован: в ходе инсталляции задаются пароли пользователей admin (полный доступ) и dial (ограниченный). А вот, вкратце, что нам предлагается:
Как видим, набор функций не исчерпывающий, но достаточно внушительный. Если принять во внимание бесплатность, нетребовательность к ресурсам и простоту установки — очень неплохо. Но это ещё не всё.
Удалённый доступ к файрволу — это, конечно, хорошо, но не достаточно. Администратору желательно иметь доступ к станциям локальной сети и такое желание вполне оправдано, если речь об администрировании хотя бы (5..50 x 20) хостов. Не ждите описания модификаций станции, обеспечивающих удалённый доступ к ней. Если речь о станциях под Win XP, то пусть лучше M$ объяснит, почему в 2008-м году к системам под управлением Win XP доступ получить едва ли не труднее, чем лет десять назад к win'95 через какую-нибудь PC Anywhere (о unix-ах я даже не говорю). Будем исходить из предположения, что станции возможность удалённого доступа предоставляют. А обеспечивается это RDP, VNC, RAdmin или NetSupport — Ваше дело.
Поскольку говорим мы об администрировании, то полноценный VPN-канал между администратором и удалённо администрируемой локальной сетью представляется некоторым излишеством. Поэтому возможность создания VPN-соединения, предоставляемую SmoothWall-ом тоже опускаем. Используемый для этого Openswan интересен, но... несколько неуместен в нашем случае. Предлагаю удовлетвориться SSH или, если быть точным (в рамках SmoothWall) — Open SSH. Клиенты SSH существуют практически для всех ОС, протокол экономичен, надёжен и прекрасно описан. В последнее время — даже на русском.
То, что нас интересует, называется Port Forwarding (точнее — C2S (Client To Server Port Forwarding)). Суть операции состоит в том, что при установлении ssh-соединения нужные порты хостов удалённой локальной сети ставятся в соответствие портам хоста, осуществляющего соединение (ssh-клиента). То есть, после определения форвардинга порта N станции локальной сети x.x.x.x на порт M ssh-клиента, обращение localhost:M даст тот же результат, что и обращение x.x.x.x:N, как если бы оно было выдано в пределах локальной сети. Правил форвардинга может быть множество. Единственное ограничение — они неизменны на время ssh-сессии. То есть: хотите — включите в конфиггурацию своего ssh-клиента столько правил, сколько соединений в рамках локальной сети Вам требуется, хотите — задавайте нужное правило перед установлением ssh-соединения.
Если вспомнить ещё и об sftp (SSH File Transfer Protocol), и о возможности использования ключевых файлов вместо паролей, то любые сомнения в целесообразности использования SSH окончательно исчезнут.
SSH, как сказано выше, прекрасно документирован, а для пользователей ms windows можно рекомендовать putty или Bitwise Tunnelier. Оба бесплатны для некоммерческого применения. В остальном: Google в помощь.
Обсуждая применение SmoothWall, мы поневоле сравнивали его с KFW (Kerio Winroute Firewall). Так вот, в отношении обеспечения удалённого доступа SmoothWall выглядит предпочтительнее. Даже если закрыть глаза на цену KFW, сравнение Kerio VPN клиента и наиболее популярных клиентов ssh явно в пользу последних. Это касается и размеров инсталляции, и ОС-независимости, и предоставляемых возможностей.
Не лишним будет ещё раз напомнить, что ssh-сервер Smoothwall использует не стандартный порт (222 вместо 22).
Перейдём к достоинствам SmoothWall, проистекающим из его open-source природы. Как и многие подобные проекты, SmoothWall "прирастает" своим community. Поскольку "скучно быть просто пользователем Linux" не одному Владимиру Водолазскому, то недостатка в желающих "расширить и улучшить" smoothie пока нет. На форуме сообщества целый раздел посвящён разработке усовершенствований (Customizations) файрвола. Такие дополнительные модули называются "модами" (Mods). И чего тут только нет... Перечислим наиболее интересные (ИМХО, разумеется).
Приступая к инсталляции мод, не лишним будет установить NotePad MOD PACK — собственный журнал изменений и использовать его по назначению, то есть: фиксировать в нём производимые действия. Моды можно инсталлировать и деинсталлировать, но поскольку они вполне могут оказаться "пересекающимися", то лучше придерживаться принципа LIFO (как при работе со стеком: "Last In — First Out" ("последним пришёл — первым на выход")). Сказанное справедливо и в отношении официальных upgrade-ов. Общим правилом считается деинсталляция всех мод перед апгрейдом и их последующая реинсталляция после него.
Для плохо переносящих командную строку можно рекомендовать ModCommander GUI, хотя, на мой взгляд, пользы от него немного.
Использование столь популярного несколько лет назад кэширующего web-proxy нычне подвергается сомнению. Действительно, при наличии быстрого и безлимитного доступа — зачем эти сложности (в виде дополнительной нагрузки на файвол)? Резонно. Но только до тех пор, пока у вас не появятся дополнительные пожелания по поводу учета трафика, авторизации доступа и т.п. Принцип прост: поскольку iptables (а именно они — "краеугольный" камень файрвола) не имеет никакого отношения к аутентификации пользователей, то требуется введение некоего промежуточного звена, которое такую аутентификацию осуществляло бы. Так почему бы не использовать в этом качестве web-proxy сервер? Только сразу рекомендуется перейти на Advanced Proxy и получить вместе с ним возможности аутентификации с использованием LDAP м RADIUS, контроля на основании ip и MAC-адресов, улучшенное управление кэшем, etc...
Если уж использовать web-proxy, то "сам Бог велел" дополнить его SARG-ом (Squid Analysis Report Generator), который успешно портирован в SmoothWall. SARG предоставляет практически неограниченные возможности анализа трафика и представления его результатов. В особенности, если Вы решитесь сами описывать задания для него. Ну, а решите удовлетвориться статистикой, предоставляемой SARG v. 2.2.3.1 (with GUI) — так и этого немало.
Представление статистики существенно может быть расширено инсталляцией Bandview PACK и Performance Graphs. Первый на одной странице покажет объём трафика суммарного и "по станциям" с начала месяца, а второй продемонстрирует, как за неделю менялись загрузка памяти, температура процессора и винчестера, количество "срабатываний" файрвола (firewall hits) и соединений, а также многое другое — в зависимости от состава запущенных сервисов.
Помимо температуры, неплохо бы контролировать и прочие S.M.A.R.T. (Self-Monitoring, Analysis and Reporting Technology) параметры винчестера. Такую возможность предоставляет S.M.A.R.T. Tools And Log Viewer.
Как только Вы инсталлируете моды, выполняющие операции регулярно, по таймеру, Вы сможете оценить удобство планировщика заданий — Crontool — Crontab File Editor.
При сравнительно малом винчестере (и использовании web-proxy) может пригодиться Clear Logs, а набор сетевых инструментов прекрасно дополнит Net Scanners MOD, включающая в себя NETBios и ARP-сканеры.
И так далее, как говорится в одной любимой книжке. Помимо упомянутой выше страницы наличных мод сообщества, аналогичная (но не идентичная) страничка есть и на Sourceforge.net. В общем: было бы желание разобраться во всём этом разнообразии. Но и это ещё не всё.
Более-менее знакомый с Linux, не утруждая себя расширением интерфейса SmoothWall, всегда может вмешаться в работу системы непосредственно (благо ssh-консоль всегда под рукой). Я, например, часто использую простенький нет-сканер с незатейливым названием nbtscan.
Для измерения реальной полосы пропускания на стороне файрвола можно запустить сервер (или клиент) iperf. Этот список можно продолжать сколь угодно долго. Ничто не препятствует "поднятию" на той же машине SMB-сервера, как это сделал и описал "новичок" Gangis. А "модератор" Aslak создал целую страничку своих любимых консольных утилит, которые он использует под SmoothWall. Здесь и браузер Lynx, и rsync, и Nmap. В общем: "кто во что горазд".
Разумное вмешательство в работу системы иногда может оказаться просто необходимым, поскольку всем требованиям, которые выдвигает перед администратором практика, ни один законченный программный продукт соответствовать не может в принципе. Так, однажды потребовалось объединение на уровне файрвола трёх логических подсетей. Скромные строки:
/sbin/ifconfig eth0:0 192.168.1.1
/sbin/ifconfig eth0:1 192.168.2.1
в /etc/rc.d/rc.sysinit решают эту задачу.
Знакомый с Apache может расширить список пользователей web-интерфейса, а модификация .htaccess позволит произвести тонкую настройку доступа. Возможны, правда, нюансы. Просьбу разрешить доступ пользователя dial к страничке SARG, например, осуществить не трудно, но та же страничка позволяет и модификацию настроек (что, вероятно, лишнее). Приходится "от греха" менять права доступа к /etc/sarg/sarg.conf.
Самые неожиданные пожелания могут возникнуть к правилам фильтрации сетевых пакетов. Всем интересующимся, после прочтения канонического Iptables Tutorial (чуть устаревшая версия, но по-русски — здесь) или, хотя бы, IPTABLES-quick HOWTO, можно рекомендовать познакомиться со SmoothWall-овским /etc/rc.d/rc.firewall.up — с одной стороны (начальные настройки iptables, до конфигурировани) и результатом вывода команды iptables-save — с другой (текущий набор правил, результат конфигурирования). Включая те или иные возможности файрвола и просматривая вывод iptables-save нетрудно понять, как реализуются QoS, timed access, все виды фильтрации и т.д.
Файл /etc/rc.d/rc.firewall.up достаточно хорошо документирован и именно в него нужно помещать правила (rules), если, ненароком, окажется, что Ваши пожелания выходят за пределы возможностей, предоставляемых web-интерфейсом. Здесь, правда, всё может оказаться не так просто (естественно: "дальше в лес — больше дров"). Помещая свои правила в /etc/rc.d/rc.firewall.up нужно принимать во внимание, что цепочки (chains), которыми оперирует web-интерфейс файрвола, сбрасываются и строятся заново при каждой модификации набора правил (практически: при любом реконфигурирования файрвола посредством web-интерфейса). То есть, существует только две возможности "ручного" расширения правил файрвола:
Последний вариант мне представляется более приемлемым. Модификация /etc/rc.d/rc.firewall.up в этом случае сводится к добавлению в него следующих строк:
# Создание собственной "эксклюзивной" цепочки: /sbin/iptables -N outgreenex # обеспечение "попадания" в неё всех исходящих пакетов: /sbin/iptables -A outbound -i $GREEN_DEV -j outgreenex # задание разрешения отправки на определённый SMTP-сервер # с ip-адресом, например, 100.1.2.3: /sbin/iptables -A outgreenex -p tcp -m tcp -d 100.1.2.3 --dport 25 -j ACCEPT # или разрешения связи с банком только для станции, # например, 10.0.0.11: /sbin/iptables -A outgreenex -p tcp -m tcp -s 10.0.0.11 --dport 123 -j ACCEPT
Место вставки строк определить не трудно, ориентируясь на строки цепочки outgreen. Таким образом, мы полагаемся на существующие правила SmoothWall до и после таблицы filter, но внутри её создаём цепочку, альтернативную управляемой web-интерфейсом цепочке outgreen.
Опять же: и так далее... "Поле" благоприятствует дерзаниям интересующихся.