назад Оглавление вперед

Безопасность Samba

Microsoft Windows не хранит и не передает пароли в виде открытого текста. Вместо этого он использует хеш пароля пользователя для проверки подлинности. Суть алгоритмяа хеширования в том, что часть данных (пароль) преобразуется математической формулой (алгоритм хэширования). В Microsoft Windows реализованы три из этих алгоритмов:

  • LAN Manager ( "LM", "LAN MAN") (самый безопасный, самый совместимый). Пароль делится на две 7-символьных строки в верхнем регистре, затем каждая строка шифруется 56-битный DES ключом со строкой ”KGS!@#$%” (без кавычек), потом результаты объединяются.
  • NT LAN Manager версии 2 ( "NTLMv2") (самый безопасный и наименее совместимый)

Windows NT и более поздние версии не используют первый алгоритм (LM), но хранят локально эти небезопасные хэши паролей в дополнение к безопасной версии, для обратной совместимости. Стоит отметить, что так как хранятся как LMHash так и NTLM хэши, то это ослабляет безопасность. Даже самый сложный пароль сводится к простому семизначному одно регистровому паролю. Если ваша сеть не включает компьютеров с Windows 9x/ME, настоятельно рекомендуется отключить аутентификацию LM на сервере Samba, и увеличить минимальный протокол, используя следующую глобальную конфигурацию в файле smb.conf. Обратите внимание, что это только адреса запросов паролей на сервер, ничего не хранится локально на клиентской стороне.

lanman auth = no
lm announce = no
min protocol = NT1

Фильтрация TCP/IP

Во первых, не запускайте Samba небезопасно, с публичным доступом к интернету. Это способ нарваться на неприятности. Мы можем конечно сделать ограничения как ниже:

# Разрешить подключения с IP Адресов
hosts allow = 192.168.0.0/16 127.0.0.1
# Все остальные отклоняем
hosts deny = ALL
# Если на компьютере более одного Интернет адреса можно ограничить
# подсеть которую будет прослушивать Samba.
interfaces = 192.168.0.0/24 127.0.0.1
bind interfaces only = Yes

Дополнительно можно отфильтровать трафик, например используя iptables:

# Разрешить доступ к Samba из определенной подсети
iptables -A INPUT -p icmp -s 192.168.0.0/16 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.0.0/16 –dport 137:138 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.0.0/16 -m multiport –dports 139,445 -j ACCEPT
# Регистрировать попытки несанкционированного доступа...
iptables -A INPUT -p udp –dport 137:138 -m limit -j LOG
iptables -A INPUT -p tcp -m multiport –dports 139,445 -m limit -j LOG
# ...пресечь попытки несанкционированного доступа
iptables -A INPUT -p udp –dport 137:138 -j REJECT –reject-with icmp-port-unreachable
iptables -A INPUT -p tcp -m multiport –dports 139,445 -j REJECT –reject-with tcp-reset

Шифрование SSL

Хорошо это или плохо, но поддержка SSL прошла свой путь dodo и была удалена из Samba версии 3. Разработчики Samba пришли к соглашению, что поддержку SSL в Samba лучше осуществлять внешними утилитами. Добавление неподдерживаемого и в основном неиспользуемого кода привело в итоге к удалению SSL из Samba. Последнее сообщение об удалении SSL Шифрования датируется маем 2002 года:

Предупреждаем: –with-ssl умер.

Хорошо, как это не печально, но общее мнение разработчиков samba по опции –with-ssl что это была не очень хорошая идея, и лучше использовать внешние утилиты. Так что же с опцией –with-ssl? И кто ее убил? Опция –with-ssl позволяет серверу Samba туннелировать протокол SMB внутри соединения SSL. К сожалению для реализации этого существует только два клиента: smbclient и sharity. Клиенты Windows просто не знают как использовать SSL. Так почему убили? Поддержка SSL была бы полезна комунибудь? Некоторое маленькое количество пользователей могло бы воспользоваться поддержкой SSL, но большинство дистрибьютеров Samba она только смущает.А пользователи использующие данную возможность могут достичь того же результата, воспользовавшись программой ’stunnel’ запускаемой из как ‘LIBSMB_PROG’ программа. Ну и наконец, код был громозкий и уродливый с большими #ifdef вставками там где должен быть простой код.

Шифрование SSH

Желание работать с сервисами SMB/CIFS через WAN и глобальную сеть несколько выше моего понимания. Одним из методов шифрования SMB трафика по сети является “tunnel” SMB через SSH, используя метод известный как перенаправление портов. Это один из частых вопросов, задаваемых системными администраторами, желающими безопасно передавать SMB трафик. Хотя это и возможно, но не лишено недостатков, которые мы рассмотрим. Нужно понимать что использование SMB без SSH через линию диалап со скоростью 56k — это очень медленно и может привести вас к разочарованию. При отсутствии более скоростного подключения, даже имея терпение вы вероятно не захотите использовать туннелирование через SSH. Есть еще разочарования, из за ограничений в GUI API Windows 9x/ME, вы не сможете туннелировать окно MS-DOS. Как только вы захотите взаимодействовать с удаленным сервером через GUI, компьютер зависнет на 30-60 секунд, а потом получите ошибку что путь не найден или недоступен. Одна извозможных причин такого поведения это16/32 разрядный тип ОС Windows, однако подтверждения об этом нет ни от Microsoft, ни от сообщества Samba. В 32 разрядных системах Windows нет таких проблем. Это как говорится хорошая новость, тунелирование SMB поверх SSH возможно. Сервис имен или другие сервисы использующие протокол UDP не могут быть перенаправлены через SSH, ограничение перенаправляемых портов в SSH (только TCP). Поэтому сосредоточимся только на перенаправлении TCP/port 139. Так как тунелирование невозможно придется сначала настроить разрешение имен с помощью WINS/broadcast.

Windows содержит два различных файла, HOSTS и LMHOSTS. Первый для преобразования Имени хоста в IP адрес (по аналогии с DNS), и второй для преобразования NetBIOS имени в IP адрес(по аналогии с WINS). LMHOSTS изначально заменял “LAN Manager”. Эти файлы испоьзуются как резерв при недоступности служб DNS или WINS. Так как запрос на разрешение имен NetBIOS выполняется по протоколу UDP, и не может быть туннелирован через SSH, первым делом отредактируем файл LMHOSTS:

REM This is c:\windows\system32\drivers\etc\LMHOSTS
127.0.0.1       FAKENAME        #PRE

FAKENAME это фиктивное NetBIOS имя которое мы будем использовать для нашего сервера Samba. Поле #PRE вынудит Windows закешировать имя в памяти, иначе оно не всегда будет доступно. Файл LMHOSTS не будет обработан Windows до перезагрузки или пока вы не выполните команду, которая обновит NetBIOS кеш имен (-R должно быть в верхнем регистре):

NBTSTAT -R

Настройте своего клиента SSH для перенаправления порта 139/TCP на порт localhost 139/TCP сервера, и установите соединение через SSH. После этого в командной строке введите следующие команды:

NET VIEW \\127.0.0.1
NET VIEW \\FAKENAME

Вуаля! Обе команды работают и вы можете удостовериться в шифровании, посмотрев логи пакетного фильтра.

 

назад Оглавление вперед