
- •2. Версии iPv4 и iPv6
- •3. Пакеты и их инкапсуляция
- •4. Адресация пакетов
- •Глава 14. Сети tcp/ip 505
- •6. Cidr: протокол бесклассовой междоменной маршрутизации
- •7. Частные адреса и система nat
- •8. Маршрутизация
- •9. Таблицы маршрутизации
- •10. Arp: протокол преобразования адресов
- •11. Dhcp: протокол динамического конфигурирования узлов
- •12. Ррр: протокол двухточечного соединения
- •13. Команда ifconfig: конфигурирование сетевых интерфейсов
- •14. Демоны маршрутизации
- •Глава 15. Маршрутизация 571
- •15. Основные протоколы маршрутизации
- •Глава 15. Маршрутизация 567
- •16. Технология Ethernet: сетевая панацея
- •17. Беспроводной стандарт: локальная сеть для кочевников
- •18. Dsl и кабельные модемы: “последняя миля” 8
- •Глава 16. Сетевые аппаратные средства 593
- •20. Основные задачи системы dns
- •Глава 18. Сетевой протокол Network File System 737
- •22. Серверная часть протокола nfs
- •Глава 18. Сетевой протокол Network File System 745
- •23. Клиентская часть протокола nfs
- •Глава 18. Сетевой протокол Network File System 753
- •24. Ldap: упрощенный протокол доступа к каталогам
- •25. Структура данных ldap
- •Глава 19. Совместное использование системных файлов 775
- •26. Nis: Сетевая информационная служба
- •27. Системы электронной почты
- •Глава 20. Электронная почта 789
- •28. Протоколы smtp, pop3.
- •30. Почтовые серверы
- •Часть II. Работа в сети
- •31. Cпам и вредоносные программы
- •Глава 20. Электронная почта 813 ip range
- •32. Фильтрация почты
- •33. Почтовый агент sendmail
- •34. Почтовый агент Postfix
- •Глава 20. Электронная почта 877
- •35. Поиск неисправностей в сетях
- •Глава 21. Управление сетями 911
- •36. Kоманда traceroute: трассировка ip-пакетов
- •Глава 21. Управление сетями 915
- •37. Команда netstat: получение информации о состоянии сети
- •Глава 21. Управление сетями 919
- •39. Snmp: простой протокол управления сетями
- •40. Протокол NetFlow: мониторинг соединений
- •Глава 21. Управление сетями 939
- •41. Ключевые аспекты безопасности
- •Глава 22. Безопасность 951
- •42. Пароли и учетные записи пользователей
- •43. Эффективное использование команды chroot
- •44. Команда nmap: сканирование сетевых портов
- •45. Bro: программная система для распознавания вторжения в сеть
- •Глава 22. Безопасность 967
- •46. Мандатное управление доступом
- •47. Ssh: безопасная оболочка
- •48. Брандмауэры
- •Глава 22. Безопасность 983
- •49. Функциональный стек lamp
- •50. Обнаружение ресурсов в сети веб
- •Глава 23. Веб-хостинг 1003
- •51. Принцип работы http
- •52. Конфигурирование сервера Apache
- •Глава 23. Веб-хостинг 1011
- •53. Виртуальные интерфейсы
- •54. Протокол Secure Sockets Layes
- •Глава 23. Веб-хостинг 1017
Глава 22. Безопасность 967
страционные журналы, события, декодеры, основные варианты конфигурации, а также записи об аудите системы для всей сети. Менеджер может соединяться с любым агентом OSSEC, независимо от его операционной системы. Менеджер также может отслеживать работу определенных устройств, которые не имеют специального агента OSSEC.
Агенты работают в системах, которые подвергаются мониторингу, и сообщают ин формацию менеджеру. Они имеют маленькую зону обслуживания и оперируют неболь шим объемом привилегий. Большую часть конфигурации агент получает от менеджера. Соединение между сервером и агентом зашифровано и аутентифицировано. Для каждо го агента менеджер должен создать отдельный ключ аутентификации.
Система OSSEC классифицирует серьезность сигналов по уровням от 0 до 15; число 15 соответствует высшему уровню опасности.
46. Мандатное управление доступом
Мандатное управление доступом (Mandatory Access Control — MAC) представляет собой альтернативу традиционному механизму управления доступом в системе UNIX, который передает управление всеми разрешениями в руки администратора по безопас ности. В противоположность стандартной модели, описанной в главах 4 и 6, система MAC не позволяет пользователям модифицировать никакие разрешения, даже для своих собственных объектов.
Стратегия безопасности в системе MAC управляет доступом в соответствии со степе нью конфиденциальности управляемого ресурса. Пользователям присваиваются опреде ленные уровни доступа, образующие структурную иерархию. Пользователи могут читать и записывать информацию, относящуюся к их уровню доступа или более низкому, но не имеют доступа к объектам, имеющим более высокую степень конфиденциальности. Например, пользователь с уровнем доступа “секретный” не может читать документа, классифицированные как совершенно секретные.
Хорошо реализованная стратегия системы MAC основывается на принципе мини мальных привилегий (т.е. разрешает доступ только при необходимости), точно так как правильно спроектированные брандмауэры пропускают только знакомые службы и кли ентов. Система MAC может предотвратить взлом системы через уязвимое программное обеспечение (например, из-за переполнения буфера), ограничивая область их влияния лишь несколькими конкретными ресурсами, необходимыми для данной программы.
Очевидно, что для реализации механизма MAC в операционных системах UNIX и Linux необходимо внести изменения в ядро. В рассмотренных нами системах семейства UNIX (Solaris, HP-UX и AIX) версии с внедренным механизмом MAC предоставляют ся за дополнительную плату. Эти версии называются Solaris Trusted Extensions (бывшая Trusted Solaris), HP-UX Security Containment и Trusted AIX соответственно.
Если вы не работаете с секретными правительственными документами, то вряд ли вам понадобятся эти версии.
47. Ssh: безопасная оболочка
Система SSH (Secure Shell) является безопасной заменой утилит rlogin, rcp и telnet. Она использует криптографическую аутентификацию для подтверждения личности пользователя и шифрует любые соединения между двумя компьютерами. Протокол, используемый системой SSH, разрабатывался для противодействия ряду воз можных атак. Он уже подробно описан в документах RFC4250-4256 и предложен орга низацией IETF в качестве стандарта.

Глава 22. Безопасность 973
Пакет SSH трансформировался из свободно распространяемой открытой системы (SSH1) в коммерческий продукт с немного иным (более надежным) протоколом (SSH2). К счастью, сообщество разработчиков открытых систем взяло ситуацию под контроль и выпустило пакет OpenSSH (поддерживаемый операционной системой OpenBSD), в ко тором реализованы оба протокола.
Основными компонентами пакета SSH являются серверный демон sshd и две ути литы пользовательского уровня: ssh предназначена для удаленной регистрации и scp — для копирования файлов. Среди остальных компонентов отметим команду ssh-keygen, генерирующую пары открытых ключей, и несколько утилит, необходимых для поддерж ки безопасных серверов X Windows.
Демон sshd способен аутентифицировать пользователей различными способами. Выбор остается за администратором.
• Метод А. Если имя удаленного компьютера, с которого регистрируется пользо ватель, указано в файле ~ / .rhosts, ~/.shosts, /etc/hosts.equiv или /etc/ shosts.equiv, то пользователь автоматически получает доступ в систему без про верки пароля. Подобная схема моделирует работу старого демона rlogind и, по нашему мнению, неприемлема для широкого применения.
• Метод Б. В дополнение к методу А, демон sshd может применять шифрование с открытым ключом для проверки адреса удаленного компьютера. Для того что бы это произошло, открытый ключ компьютера (генерируется при инсталляции пакета) должен находиться в файле /etc/ssh_known_hosts локального узла или в файле ~/.ssh/known_hosts пользователя. Если удаленный компьютер предо ставляет соответствующий секретный ключ (обычно хранится в файле /etc/ssh_ host_key, который недоступен для чтения рядовым пользователям), то пользова телю разрешается войти в систему без проверки пароля.
Мы полагаем, что данный метод сильнее, чем метод А, но все же недостаточно безопасен. Если удаленный компьютер взломан, локальная система также окажет ся под угрозой.
• Метод В. Демон sshd может применять шифрование с открытым ключом для идентификации самого пользователя. На этапе регистрации пользователь должен иметь доступ к файлу своего секретного ключа и предоставить пароль для его де шифровки. Ключ можно также создать без пароля, что является разумным реше нием для автоматической регистрации из удаленных систем.
•
Этот метод самый безопасный, но он утомляет пользователей. Кроме того, он де лает невозможной регистрацию в системе мобильных пользователей, если толь ко они не возят с собой копию файла с секретным ключом (возможно, на USB- ключе, который должен быть зашифрован).
Если вы решили использовать пару ключей, широко используйте команду ssh -v в процессе поиска ошибок.
Метод Г. Наконец, демон sshd может просто попросить пользователя ввести свой регистрационный пароль. Это напоминает утилиту telnet, за исключением того, что пароль и все данные, передаваемые в ходе сеанса, подвергаются шифрованию. Основной недостаток этого метода заключается в том, что пароли оказываются относительно слабыми (часто их длина ограничена 8 символами) и есть готовые программы (например, crack) для взлома таких паролей. Тем не менее этот метод, как правило, лучше всего подходит для повседневного использования.
974 Часть II. Работа в сети
Правила аутентификации задаются в файле /etc/sshd_config. Он уже заполнен разного рода конфигурационным, “мусором”, большую часть которого можно проигно рировать. Параметры, касающиеся аутентификации, перечислены в табл. 22.2.
Таблица 22.2. Параметры аутентификации, задаваемые в файле /etc/sshd_config
Параметр Метода По умол Назначение чанию
RhostsAuthentication A no Разрешает регистрацию через файлы ~/.shosts, /etc/shosts.equiv и т.п.
RhostsRSAAuthentication Б yes Разрешает регистрацию через файл ~/.shosts и другие, но также требует от компьютера предо
ставить ключ
IgnoreRhosts А, Б no Задает игнорирование файлов ~/.rhosts и hosts.equivб
IgnoreRootRhosts А, Б noB
Запрещает аутентификацию пользователя root через файлы .rhosts и .shosts
RSAAuthentication В yes Разрешает аутентификацию пользователей по ме тоду шифрования с открытым ключом
PasswordAuthentication Г yes Разрешает использование обычных регистрацион ных паролей
а Методы аутентификации, к которым относится параметр.
6 Файлы ~/.shosts и shosts.equiv продолжают использоваться. в По умолчанию равен значению параметра ignoreRhosts.
Рекомендуемая нами конфигурация, в которой разрешаются методы В и Г, но не А и Б, такова.
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication yes
Никогда не следует разрешать суперпользователю регистрироваться в удаленном ре жиме. Доступ суперпользователя должен осуществляться только с помощью команды sudo. Для того чтобы установить этот режим, используйте следующий параметр.
PermitRootLogin no
Когда вы впервые устанавливаете соединение с новой системой посредством прото кола SSH, вам предложат принять открытый ключ для доступа к удаленному узлу (ко торый обычно генерируется в процессе инсталляции системы OpenSSH или сразу по сле этого). Настоящий параноик может проверить его вручную, но большинство из нас слепо доверяют этому ключу и сохраняют его в файле ~/.ssh/known_hosts. Протокол SSH больше не вспоминает о серверном ключе, пока он не изменится. К сожалению, не брежность пользователей по отношению к ключам новых систем делает их уязвимыми для атак злоумышленников, если ключ на самом деле был предоставлен системой хакера.
Для устранения этого недостатка была изобретена запись DNS, получившая название SSHFP. В ее основе лежит предположение, что серверный ключ хранится в виде записи DNS. Когда клиент соединяется с неизвестной системой, протокол SSH ищет запись SSHFP, чтобы самостоятельно проверить ключ сервера, а не полагаться на пользователя.
Утилита sshfp, доступная на сайте xelerance.com/software/sshfp, генериру ет записи SSHFP DNS, либо сканируя удаленный сервер, либо выполняя анализ ранее
Глава 22. Безопасность
975
принятого ключа из файла known_hosts. (Разумеется, в любом случае предполагает ся, что источник ключа известен и заслуживает доверия.) Использование этой утили ты не представляет трудностей: для генерирования ключа на основе сканирования сети применяется флаг -s, а для анализа файла known_hosts — флаг -k (по умолчанию). Например, следующая команда генерирует BIND-совместимую запись SSHFP для до мена solaris.booklab.atrust.com.
solaris$ sshfp solaris.booklab.atrust.com
solaris.booklab.atrust.com IN SSHFP 1 1 94a26278ee713a37f6a78110flad9bd... solaris.booklab.atrust.com IN SSHFP 2 1 7cf72d02e3d3fa947712bc56fd0e0a3i...
Добавьте эти записи в зонный файл домена (будьте осторожны с именами и коман дой $ORIGIN), перезагрузите домен и примените команду dig для верификации ключа.
solaris$ dig solaris.booklab.atrust.com. IN SSHFP | grep SSHFP
; <<>> DiG 9.5.1-P2 <<>> solaris.booklab.atrust.com. IN SSHFP
; solaris.booklab.atrust.com. IN SSHFP
solaris.booklab.atrust.com. 38400 IN SSHFP 1 1 94a26278ee713a37f6a78110f... solaris.booklab.atrust.com. 38400 IN SSHFP 2 1 7cf72d02e3d3fa947712bc56f...
По умолчанию утилита ssh не проверяет записи SSHFP. Для того чтобы заставить ее сделать это, добавьте параметр VerifyHostKeyDNS в файл конфигурации /etc/ssh/ ssh_config. Как и в большинстве случаев, связанных с использованием параметров клиента SSH, при первом обращении к системе вы можете также указать в командной строке аргумент -о "VerifyHostKeyDNS yes".
Утилита SSH имеет много вспомогательных функций, полезных для системных ад министраторов. Одна из них позволяет безопасно туннелировать соединения TCP с по мощью зашифрованного канала SSH, тем самым разрешая устанавливать соединения с небезопасными или защищенными брандмауэрами службами на удаленных сайтах. Эта функциональная возможность повсеместно предоставляется клиентам протокола и допу скает простое конфигурирование. На рис. 22.1 показано типичное использование тунне ля SSH. Этот рисунок должен помочь разобраться в принципах его функционирования.
Рис. 22.1. Туннель SSH для RDP-соединения
В этом сценарии удаленный пользователь желает установить RDP-соединение (уда ленная настольная система) с системой Windows, входящей в корпоративную сеть. Доступ к этому узлу или порту 3389 блокируется брандмауэром, но поскольку пользо ватель имеет доступ по протоколу SSH, он может маршрутизировать свое соединение через сервер SSH.
976 Часть II. Работа в сети
Для того чтобы установить соединение через сервер SSH, пользователь должен заре гистрироваться на удаленном сервере SSH с помощью команды ssh. В командной строке ssh он должен указать произвольный, но конкретный локальный порт (в данном случае 9989), на который утилита ssh должна перенаправить безопасный туннель к порту 3389 удаленной Windows-машины. (В стандартной реализации системы OpenSSH для этого до статочно задать аргумент -L локальный_порт :удаленный_узел :удаленный_порт.) Все порты источника в данном примере помечены как случайные, потому что выбор произвольного порта, с которым необходимо установить соединение, производится программой.
Для доступа к настольной Windows-машине пользователь должен открыть удаленного настольного клиента (в данном случае rdesktop) и ввести localhost:9989 как адрес серве ра, с которым он хочет установить соединение. Локальная утилита ssh получит соедине ние с портом 9989 и туннелирует трафик по существующему соединению через удаленный сервер sshd. В свою очередь, сервер sshd направляет соединение на узел Windows.
Разумеется, туннели, подобные этим, также могут оказаться преднамеренными или непреднамеренными лазейками. Системные администраторы должны использовать тун нели с осторожностью и обязаны следить за неавторизованным и неправильным ис пользованием этой возможности пользователями.
В последние годы протокол SSH стал целью регулярных атак на пароли методом перебора. Хакеры выполняют повторяющиеся попытки аутентификации как обычные пользователи, такие как root, joe или admin. Свидетельством таких атак являются реги страционные записи о сотнях и тысячах неудачных попыток зарегистрироваться. Для защиты от этих атак лучше всего отключить аутентификацию паролей. Пока, похоже, хакеры сосредоточились на порте 22, поэтому эффективной контрмерой является пере нос сервера SSH на другой порт. Однако история показывает, что защита по принципу “безопасность через неясность” (“security through obscurity”) редко бывает долговремен ной. Проверка на ваших системах может выявить слабые пароли, которые могут быть взломаны с помощью прямого перебора.