Изучаем Linux, 302 (смешанные среды): Безопасность Samba

Защита Samba на уровне брандмауэра и на уровне демона

Эта статья поможет вам подготовиться к сдаче экзамена LPI-302. Она посвящена системе безопасности Samba и устранению проблем, связанных с безопасностью.

Шон Уолберг, старший сетевой инженер, P.Eng

Шон Уолберг работал с Linux- и UNIX-системами с 1994 года в академических, корпоративных и "провайдерских" кругах. Он широко освещает вопросы системного администрирования в течение нескольких последних лет. С ним можно связаться по адресу sean@ertw.com.



23.10.2012

Об этой серии

Эта серия статьей поможет вам освоить администрирование операционной системы Linux. Вы можете использовать материалы этих статей для подготовки к экзаменам программы LPIC третьего уровня (LPIC-3).

Чтобы посмотреть описания статей этой серии и получить ссылки на них, обратитесь к нашему перечню материалов для подготовки к экзаменам LPIC-3. Этот перечень постоянно дополняется новыми статьями по мере их готовности и содержит текущие (по состоянию на ноябрь 2010 года) цели экзаменов сертификации LPIC-3.

В этой статье рассматриваются следующие темы:

  • Настройка доступа к серверу Samba на уровне брандмауэра.
  • Поиск и устранение проблем, связанных с безопасностью Samba.

Эта статья поможет вам подготовиться к сдаче экзамена LPI 302 (специализация "Смешанные среды") и содержит материалы цели 315.2 темы 315. Цель имеет вес 2.

Предварительные требования

Чтобы извлечь наибольшую пользу из наших статей, необходимы продвинутые знания о Linux и работоспособный компьютер с Linux, на котором можно будет выполнять все встречающиеся команды. Кроме того, вам потребуется доступ к Windows-окружению для проверки параметров безопасности, о которых будет идти речь в этой статье.


Брандмауэры

О факультативном экзамене LPI-302

Как и многие другие программы, программа сертификации Linux Professional Institute (LPIC) предусматривает различные уровни сертификации, где для получения каждого последующего уровня необходимо обладать более глубокими знаниями и практическим опытом. Экзамен LPI-302 – это факультативный экзамен третьего уровня программы LPIC, требующий продвинутых знаний в области системного администрирования Linux.

Для получения сертификата LPIC третьего уровня (LPIC-3) необходимо успешно сдать два экзамена первого уровня (101 и 102), два экзамена второго уровня (201 и 202), а также базовый экзамен 301 третьего уровня (LPIC-3). Если вы получили сертификат третьего уровня, вы можете сдавать факультативные экзамены по определенным специализациям, например, экзамен LPI-302.

В Samba имеется множество возможностей для ограничения доступа к общим ресурсам – это разрешение доступа только для определенных пользователей, установка паролей, проверка членства в группах и фильтрация на сетевом уровне. Параметры последней группы, например, allow hosts и smb ports работают на уровне IP-адресов и портов UDP/TCP, позволяя указывать, каким компьютерам разрешено подключаться к серверу Samba.

Контроль на сетевом уровне осуществляется тогда, когда можно определить, какие устройства будут подключаться к серверу – например, устройства локальной сети или подсети или группы серверов. Это первая линия обороны: если злоумышленник не может подключиться к устройству, значит, оно уже как-то защищено.

Управление сетевым доступом через демон Samba может показаться идеальным решением, однако это не самый лучший способ. Чтобы определить, является ли удаленное подключение доверенным, Samba должна сначала разрешить его, поскольку невозможно получить никакой информации о подключении, которое еще не установлено. Если защита строится на том, чтобы запретить определенному кругу лиц подключаться к Samba, то было бы благоразумнее сделать так, чтобы Samba вообще не видела этих подключений. Любые настройки внутри Samba касаются только Samba, и при таком способе защиты необходимо искать решения для защиты других демонов, например, для Web- и файловых серверов.

Как правило, в большинстве случаев за безопасность сети отвечает не системный администратор, а другие сотрудники ИТ-подразделений. Управление доступом на уровне хоста, а не на уровне приложения позволяет разделять проблемы и снижает количество ошибок, вызванных внесением изменений в файл smb.conf.

Знакомство с iptables

Создайте ваш собственный канал

Вы можете создать ваш собственный RSS, Atom или HTML канал обновлений и получать уведомления о новых или обновленных статьях нашего сайта. Для этого перейдите на страницу developerWorks RSS feeds, выберите зону Linux, установите флажок Статьи и введите в качестве ключевой фразы Linux Professional Institute, после чего выберите требуемый тип канала.

В Linux имеется надежный брандмауэр уровня хоста под названием iptables. Этот брандмауэр может проверять входящие, исходящие или промежуточные пакеты, передаваемые через Linux-устройство. Название iptables может означать встроенную в ядро Linux систему фильтрации пакетов либо имя команды, используемой для управления сетевыми фильтрами. Система фильтрации пакетов ядра развивалась на протяжении многих лет, превратившись из простого механизма сравнения пакетов в надежный брандмауэр с поддержкой динамической загрузки подключаемых модулей. Таким образом, настройка iptables может оказаться достаточно сложной задачей, если не ограничиваться использованием типовых конфигураций.

Первая важная идея iptables заключается в идее самих таблиц. Таблица – это независимый список правил и действий. Если ядро Linux должно отфильтровать пакет, то оно обращается к таблице filter. Если выполняется трансляция сетевых адресов (NAT), то используется таблица nat. В зависимости от того, какие сетевые функции были загружены в ядро, могут использоваться различные таблицы. Пакеты могут передаваться между несколькими таблицами, например, при выполнении фильтрации пакета до выполнения трансляции сетевого адреса.

Внутри каждой таблицы содержится набор цепочек. В каждой таблице есть несколько предопределенных цепочек, к которым можно добавлять собственные цепочки. Предопределенные цепочки используются на различных этапах жизненного цикла пакетов. Например, в таблице filter есть три предопределенные цепочки:

  • INPUT. Используется для определения того, что делать с пакетами, предназначенными для самого хоста.
  • OUTPUT. Применяется к пакетам, созданным хостом.
  • FORWARD. Работает только с пакетами, передающимися с одного сетевого интерфейса на другой, например, когда хост выступает в качестве маршрутизатора.

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

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

Примечание. Для выполнения действий, описанных в этой статье, используется только таблица filter.

Защита Samba с помощью брандмауэра

Существует множество различных способов настройки политики брандмауэра для Samba, реализуемых в зависимости от топологии сети и от того, кто должен иметь доступ к серверу Samba. С самого начала нужно решить, будет обеспечен защитой весь хост целиком или же только Samba.

Если вы решили защищать весь хост, то не имеет значения, какие порты использует Samba. В следующем примере показана простая политика, позволяющая локальному серверу принимать трафик только от клиентов частной сети 10.0.0.0/8.

iptables -A INPUT -s 10.0.0.0/8 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP

Первая команда добавляет правило в цепочку INPUT путем его добавления в текущий список правил. Это правило говорит о том, что для любого трафика, приходящего из сети-источника (-s) 10.0.0.0/8, будет выполняться действие ACCEPT, разрешающее получение пакетов. Вторая команда разрешает получение пакетов, приходящих при уже установленном соединении – за это отвечает вызов matcher state (оператор проверки соответствия состояния -m state). Этот matcher state следит за тем, какие подключения покидают хост. Ответные исходящие пакеты считаются установленными или связанными (established или related), поэтому остальные правила пропускают эти пакеты.

Последняя команда определяют политику по умолчанию цепочки INPUT, сбрасывающую пакеты. Если пакет не пришел из сети 10.0.0.0/8 или не является пакетом установленного хостом соединения, то он сбрасывается.

Можно настроить более тонкую фильтрацию на уровне портов. В предыдущем примере пакеты фильтруются только на основе адреса сети-источника, поэтому несоответствующий трафик блокируется для всех служб. Если же, например, на вашем хосте запущен Web-сервер, который должен быть доступен всем пользователям Интернета, то в этом случае предыдущая политика уже не подходит.

Вспомним статью "Изучаем Linux, 302 (смешанные среды): конфигурация Samba", в которой говорилось о том, что Samba использует четыре различных порта:

  • 137 UDP. Службы имен NetBIOS.
  • 138 UDP. Службы датаграмм NetBIOS.
  • 139 TCP. Службы сеансов NetBIOS.
  • 445 TCP. Прямая передача (CIFS over TCP).

В листинге 1 показана политика, разрешающая подключения к Samba только из сети 10.0.0.0/8 и подключения к Web-серверу без каких-либо ограничений.

Листинг 1. Политика, работающая на уровне портов
iptables -A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW --dport 443 -j ACCEPT
iptables -A INPUT -p udp -s 10.0.0.0/8 --dport 137 -j ACCEPT
iptables -A INPUT -p udp -s 10.0.0.0/8 --dport 138 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -s 10.0.0.0/8 --dport 139 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -s 10.0.0.0/8 --dport 445 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP

Политика в листинге 1 сложнее предыдущей политики, поскольку в ней определяются несколько различных приложений, для каждого из которых применяются свои правила. Первые два правила соответствуют любым входящим TCP-пакетам (-p tcp), являющимся частью нового подключения (-m state --state NEW) и отправляемым на порты 80 или 443 (--dport 80, --dport 443). Никаких ограничений на адрес источника нет, поэтому принимаются любые пакеты.

Следующие две строки соответствуют UDP-пакетам (-p udp), приходящим из внутренней сети (-s 10.0.0.0/8) на порты 137 и 138 (--dport 137, --dport 138). UDP является протоколом без запоминания состояния (stateless), поэтому нет необходимости выяснять, новое это подключение или уже установленное.

Строки 5 и 6 объединяют команду сопоставления состояния с фильтром адресов источников, разрешая только новые подключения к портам 139 и 445, если пакеты приходят из внутренней сети.

Наконец, последние две строки работают так же, как и в предыдущей политики. Если пакет относится к уже установленному соединению, то он принимается. Весь остальной трафик отбрасывается.


Поиск и устранение проблем, связанных с брандмауэром

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

Просмотр политики

Для просмотра политики используется команда unexpected. Опция -L выводит содержимое политики, а опция -v позволяет выводить дополнительную информацию, например, счетчики пакетов. В листинге 2 показано содержимое политики из листинга 1.

Листинг 2. Подробный просмотр содержимого политики
# iptables -L -v
Chain INPUT (policy DROP 47 packets, 5125 bytes)
 pkts bytes target  prot opt in   out  source      destination
    0     0 ACCEPT  tcp  --  any  any  anywhere    anywhere     state NEW tcp dpt:http
    0     0 ACCEPT  tcp  --  any  any  anywhere    anywhere     state NEW tcp dpt:https
    0     0 ACCEPT  udp  --  any  any  10.0.0.0/8  anywhere     udp dpt:netbios-ns
    0     0 ACCEPT  udp  --  any  any  10.0.0.0/8  anywhere     udp dpt:netbios-dgm
    0     0 ACCEPT  tcp  --  any  any  10.0.0.0/8  anywhere     state NEW tcp dpt:139
    0     0 ACCEPT  tcp  --  any  any  10.0.0.0/8  anywhere     state NEW tcp dpt:445
  214 15216 ACCEPT  all  --  any  any  anywhere    anywhere     state RELATED,ESTABLISHED

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 292 packets, 35009 bytes)
 pkts bytes target     prot opt in     out     source               destination

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

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

Одна из типичных ошибок – это ситуация, когда более общее правило предшествует более конкретному правилу. Во избежание проблем самые детализированные правила следует помещать в самое начало политики, чтобы исключения обрабатывались в первую очередь. Тем не менее, этот подход не всегда решает проблему, и вы можете обнаружить, что не все пользователи могут подключаться к вашему серверу.

В листинге 3 показана политика сервера, расположенного в сети Engineering. Пользователи этой сети не могут подключаться к службе.

Листинг 3. Политика, содержащая перекрывающиеся правила
# iptables -L -v
Chain INPUT (policy DROP 21 packets, 2967 bytes)
target   prot opt in   out  source       destination
ACCEPT   tcp  --  any  any  anywhere     anywhere      state NEW tcp dpt:http
ACCEPT   tcp  --  any  any  anywhere     anywhere      state NEW tcp dpt:https
DROP     tcp  --  any  any  10.0.0.0/8   anywhere
ACCEPT   udp  --  any  any  10.2.3.0/24  anywhere      udp dpt:netbios-ns
ACCEPT   udp  --  any  any  10.2.3.0/24  anywhere      udp dpt:netbios-dgm
ACCEPT   tcp  --  any  any  10.2.3.0/24  anywhere      state NEW tcp dpt:netbios-ssn
ACCEPT   tcp  --  any  any  10.2.3.0/24  anywhere      state NEW tcp dpt:microsoft-ds
ACCEPT   all  --  any  any  anywhere     anywhere      state RELATED,ESTABLISHED

В этом примере сервер находится в сети Engineering с адресом 10.2.3.0/24. Доступ для остальных пользователей компании, находящихся в сети 10.0.0.0/8, должен быть заблокирован. Поскольку сеть 10.2.3.0/24 является частью сети 10.0.0.0/8, а правило, полностью блокирующее всю сеть 10.0.0.0/8 указано перед правилами, относящимися к SMB, то для пользователей сети Engineering будет срабатывать правило DROP, поскольку в iptables используется принцип первого совпадения, а не наилучшего.

Решением этой проблемы является перемещение правила блокирования корпоративной сети вниз чтобы оно стояло после более конкретных правил. Тогда прием пакетов сети Engineering сервером будет разрешен.

Продвинутые инструменты диагностики и устранения проблем

Часто нельзя точно определить, является ли брандмауэр источником проблем сетевого соединения. Самый простой способ проверить это – отключить брандмауэр и посмотреть, установится ли соединение, или нет. Однако это не всегда возможно, поэтому если вы не можете отключить брандмауэр, то проверьте, приходят ли пакеты на сервер.

Сетевые пакеты, которые видит сервер (даже если брандмауэр блокирует их), может показать утилита tcpdump. Если утилита показывает попытки установления соединения сервером, значит, пакеты доходят до него. Это означает, что пакеты блокируются брандмауэром (при условии, что служба запущена). В листинге 4 показана работа утилиты tcpdump.

Листинг 4. Трассировка пакетов заблокированного SMB-подключения
# tcpdump -i eth0 tcp port 445
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
20:24:18.392106 IP CLIENT.search > SERVER.microsoft-ds: S ...
20:24:21.358458 IP CLIENT.search > SERVER.microsoft-ds: S ...
20:24:27.393604 IP CLIENT.search > SERVER.microsoft-ds: S ...

Утилита tcpdump была запущена со следующими опциями:

  • -i eth0. Прослушивать сетевой интерфейс eth0.
  • tcp port 445. Отслеживать пакеты на TCP-порту 445.

В листинге 4 мы видим три пакета, пришедшие на сервер. Стрелка означает направление потока: эти три пакета пришли с клиента на порт сервера microsoft-ds (порт с номером 445). Символ S в конце строки означает попытку подключения, а отсутствие ответа означает, что сервер не отвечает.

Другим признаком ошибки соединения является увеличивающийся временной интервал между успешно принятыми пакетами. Метка времени слева показывает нам, что второй пакет был получен примерно через 3 секунды после получения первого пакета, а третий пакет – через 6 секунд после получения предыдущего. В большинстве сетевых протоколов реализована экспоненциальная задержка передачи, т. е. время между успешными попытками каждый раз удваивается.

Ресурсы

Научиться

Получить продукты и технологии

  • Графический менеджер политик брандмауэра Firewall Builder (EN) позволяет легко управлять правилами iptables.
  • Посетите домашнюю страницу iptables, Web-сайт Netfilter.org (EN), где вы найдете дополнительную документацию и список модулей, расширяющих функциональность этого брандмауэра.

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Linux
ArticleID=842312
ArticleTitle=Изучаем Linux, 302 (смешанные среды): Безопасность Samba
publish-date=10232012