Версия для печати

Архив документации на OpenNet.ru / Раздел "Документация для Linux" (Многостраничная версия)
Безопасность и оптимизация Linux.

Безопасность и оптимизация Linux.

Редакция для Red Hat.



Copyright 1999 - 2000 Gerhard Mourani, Open Network Architecture ╝ and OpenDocs Publishing


Title: Securing and Optimizing Linux:
Red Hat Edition
ISBN: 0-9700330-0-1
Author's: Gerhard Mourani
Mail: gmourani@openna.com
Page Count: 486
Version: 1.3
Last Revised: June 07, 2000
Перевод: Воскресенский Евгений
Оригинал перевода лежит на сервере Linux Park



От переводчика.

Ваши замечания и предложения по переводу этой книги я с удовольствием приму по почте. Примеры конфигурационных файлов, приведенные в этой книге, лежат, как на оригинальном сервере этой книги www.openna.com, так и на сервере "Linux Park". Вы можете свободно копировать перевод этой книги, но при этом обязательно нужно оставить ссылку на сервер "Linux Park", как место хранения его оригинала. Английскую версию книги можно получить на сервере www.openna.com или здесь.

Оглавление


Введение

   Кому предназначена эта книга
   На чем основываются все инструкции по инсталляции
   О программах представленных в книге
   Получение книги и файлов конфигурации
   Замечание об авторском праве
   Уведомление
   GPG Public Key для Gerhard Mourani

Часть I Рекомендации связанные с инсталляция

Глава 1 Введение в Linux

   Что такое Linux
   Несколько причин использовать Linux
   Позвольте рассеять несколько опасений и сомнений относительно Linux

Глава 2 Инсталляция вашего Linux сервера

   Определите ваше аппаратное обеспечение
   Создайте загрузочный и корневой диски
   Классы и методы инсталляции
   Разбиение диска (Disk Druid)
   Компоненты инсталляции (Выбор пакетов для инсталляции)
   Выбор индивидуальных пакетов
   Описания программ, которые должны быть деинсталлированы из соображений безопасности
   Как использовать команды RPM
   Запуск и остановка демонов
   Описание программы, которые должны быть удалены после инсталляции сервера
   Программы, которые должны быть установлены после инсталляции сервера
   Программы установленные на вашем сервере.
   Добавьте цветов на ваш терминал
   Обновление программ до их последних версий

Часть II Рекомендации связанные с безопасностью и оптимизацией

Глава 3 Общая системная безопасность

   Общие вопросы безопасности Linux

Глава 4 Общая системная оптимизация

   Общие вопросы оптимизации Linux

Глава 5 Конфигурирование и создание оптимизированных, безопасных ядер

   Создание аварийной загрузочной дискеты
   Безопасность ядра
   Компиляция ядра
   Инсталляция нового ядра
   Удаление программ, файлов и строк связанных с модулями
   Создание новой аварийной дискеты
   Создание аварийного загрузочного флоппи-диска
   Обновление "/dev" входов

Часть III Рекомендации связанные с сетью

Глава 6 Управление TCP/IP сетями

   Инсталляция более одной Ethernet карты на одной машине
   Файлы связанные с функционированием сети
   Настройка TCP/IP сети вручную из командной строки

Глава 7 Сетевой брандмауэр

   Linux IPCHAINS
   Создание ядра с поддержкой IPCHAINS
   Разъяснения некоторых правил используемых в скриптах настройки брандмауэра
   Скрипт для настройки брандмауэра
   Конфигурация скрипта "/etc/rc.d/init.d/firewall" для Веб сервера
   Конфигурация скрипта "/etc/rc.d/init.d/firewall" для Почтового сервера

Глава 8 Сетевой брандмауэр с поддержкой маскарадинга и форвардинга

   Маскарадинг и форвардинг в Linux
   Создание ядра с поддержкой маскарадинга и форвардинга.
   Конфигурация скрипта "/etc/rc.d/init.d/firewall" для Шлюза
   Запрещение доступа к некоторым адресам
   Административная утилита IPCHAINS

Часть IV Рекомендации связанные с программным обеспечением.

Глава 9 Функциональные возможности компилятора

   Необходимые пакеты
   Почему мы выбираем использование тарболов (tarballs)?
   Компиляция программного обеспечения на вашей системе
   Создание и инсталляция программ на вашей системе
   Редактирование файлов с vi
   Некоторые последние комментарии

Глава 10 Программы обеспечения безопасности (Утилиты контроля)

   Linux sXid
   Конфигурация
   Административная утилита sXid
   Linux Logcheck
   Конфигурация
   Linux PortSentry
   Конфигурация
   Запуск PortSentry

Глава 11 Программы обеспечения безопасности (Сетевые сервисы)

   Linux OpenSSH Клиент/Сервер
   Конфигурация
   Настройка OpenSSH для использования с TCP-Wrappers inetd супер сервером
   Конфигурирование OpenSSH для каждого пользователя
   Утилиты пользователя OpenSSH
   Linux SSH2 Клиент/Сервер
   Конфигурации
   Настройка SSH2 для использования с TCP-Wrappers inetd супер сервером
   Конфигурирование SSH2 для каждого пользователя
   Утилиты пользователя SSH2

Глава 12 Программы обеспечения безопасности (Целостность системы)

   Linux Tripwire 2.2.1
   Конфигурации
   Организация защиты Tripwire для Linux
   Команды
   Linux Tripwire ASR 1.3.1
   Конфигурации
   Организация защиты Tripwire
   Команды

Глава 13 Программы обеспечения безопасности (Управление и ограничения)

   Linux GnuPG
   Команды
   Установка поддержки квот на вашей Linux системе.
   Создание ядра с поддержкой квот
   Модификация файла "/etc/fstab"
   Создание файлов "quota.user" и "quota.group"
   Назначение квот для Пользователей и групп
   Команды

Глава 14 Серверное программное обеспечение (BIND/Сервис DNS)

   Конфигурации
   Кэширующий сервер имен
   Основной сервер имен
   Вторичный сервер имен
   Организация защиты ISC BIND/DNS
   Административные средства DNS
   Утилиты пользователя DNS

Глава 15 Серверное программное обеспечение (Почтовый сервис)

   Linux Sendmail сервер
   Конфигурации
   Организация защиты Sendmail
   Утилиты администратора Sendmail
   Утилиты пользователя Sendmail
   Linux Imap и Pop сервер
   Конфигурации
   Настройка Imap и POP для использования с TCP-Wrappers inetd супер сервером
   Организация защиты IMAP/POP

Глава 16 Серверное программное обеспечение (Сетевой сервис шифрования)

   Linux OPENSSL сервер
   Конфигурации
   Команды
   Организация защиты Openssl
   Linux FreeS/WAN VPN
   Настройка секретного ключа RSA
   Требования по настройки сети для IPSec
   Тестирование инсталляции

Глава 17 Серверное программное обеспечение (Сервис баз данных)

   Linux OpenLDAP сервер
   Конфигурации
   Организация защиты OpenLDAP
   Утилиты создания и поддержки OpenLDAP
   Утилиты пользователя OpenLDAP
   Netscape Address Book клиент для LDAP
   Linux PostgreSQL Database Server
   Создание и инсталляция базы данных из-под пользователя Postgres
   Конфигурации
   Команды

Глава 18 Серверное программное обеспечение (Прокси сервис)

   Linux Squid Proxy Server
   Использование библиотеки GNU malloc для улучшения производительности Squid
   Конфигурации
   Организация защиты Squid
   Оптимизация Squid
   Утилита cachemgr.cgi
   Конфигурация Netscape для работы с прокси сервером Squid

Глава 19 Серверное программное обеспечение (Веб сервис)

   Linux MM - библиотека совместно используемой памяти
   Веб-сервер Apache
   Конфигурации
   PHP4 - язык скриптов со стороны сервера
   Perl библиотека - CGI.pm
   Организация защиты Apache
   Запуск Apache с использованием chroot.
   Оптимизация Apache

Глава 20 Опциональные компоненты устанавливаемые с веб-сервером Apache

   Linux Webalizer
   Конфигурации
   Информирование Apache о выходном каталоге Webalizer
   Запуск Webalizer вручную в первый раз
   Запуск Webalizer автоматически при помощи cron
   Linux FAQ-O-Matic
   Информирование Apache о месте расположения файлов Faq-O-Matic
   Настройка вашей программы FAQ-O-Matic
   Linux Webmail IMP
   Установка PHPLib который требуется программе Horde из Webmail IMP
   Настройка и создание SQL базы данных Webmail IMP
   Настройка вашего конфигурационного файла "php.ini" из PHP4
   Настройка Apache на работу с Webmail IMP
   Настройка Webmail IMP из вашего веб-броузера

Глава 21 Серверное программное обеспечение (Файловый сервис)

   Linux Samba сервер
   Конфигурации
   Создание файла с шифрованными паролями для пользователей
   Организация защиты Samba
   Оптимизация Samba
   Административные средства Samba
   Утилиты пользователя Samba
   Linux FTP сервер
   Настройка бюджета пользователя FTP без shell-а
   Настройка окружения пользователя под chroot
   Конфигурации
   Настройка ftpd для использования с TCP-Wrappers inetd супер сервером
   Административные средства FTP
   Организация защиты FTP

Часть V Рекомендации связанные с резервным копированием

Глава 22 Процедуры резервирования и восстановления данных

   Резервное копирование и восстановление в Linux
   Программа резервного копирования tar
   Создание резервных копий с tar
   Автоматизация задачи резервного копирования с tar
   Восстановление файлов с tar
   Программа резервного копирования dump
   Создание резервных копий с dump
   Восстановление файлов с dump
   Резервное копирование и восстановление через сеть

Часть VI Приложение

Приложение A Советы, рекомендации и задачи администрирования
Приложение B Requests for Comments (RFC) упомянутые в книге

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

Часть I Рекомендации связанные с инсталляция

В этой части
Введение в Linux
Инсталляция вашего Linux сервера

Глава 1 Введение в Linux

Что такое Linux
Несколько причин использовать Linux
Позвольте рассеять несколько опасений и сомнений относительно Linux

Что такое Linux?

Linux это операционная система, которая изначально была создана как хобби молодого студента Линуса Торвальдса из Хельсинского университета в Финляндии. Линус интересовался Minix, небольшим вариантом UNIX, и решил разработать систему превосходящую Minix стандарт. Он начал свои работы в 1991 году, выпустив версию 0.02, и постоянно работал над ней до 1994 года, когда вышла версия 1.0 ядра Linux. Текущей версией ядра является 2.2 (выпущено 25 января 1999 года).

Linux распространяется под GNU General Public License и его исходные коды свободно доступны для всех желающих. Linux может использоваться как сетевая платформа, платформа для разработчиков и платформа для конечных пользователей. Linux часто считается как прекрасная и недорогая альтернатива других более дорогих операционных систем.

Несколько причин использовать Linux.

За него не надо выплачивать лицензионных или авторских отчислений. Даже если бы Линус Торвальдс и владел правом на торговую марку Linux, то ядро и сопутствующее ему программное обеспечение все равно бы распространялось под GNU General Public License. Это значит, что вы можете модифицировать исходные коды и продавать свои программы, но вы все равно должны предоставлять их исходные коды.

Хотя Linux наиболее популярен на платформе Intel, но он может запускаться на большем числе процессоров и различных платформах, чем другие ОС. Тенденции развития программного и аппаратного обеспечения в последнее время заставляют пользователей покупать компьютеры со все большим объемом памяти и размерами жесткого диска. Linux не следует этой тенденции и прекрасно работает на 486 машинах с ограниченным объемом RAM. Linux - это истинная многозадачная система, подобная своему брату UNIX. Она использует сложный, современный метод управления памятью для контроля за всеми системными процессами. Это означает, что если в какой-нибудь программе произойдет сбой, то вы ее просто "убьете" и продолжите работать дальше, как ни в чем не бывало.

Дополнительное преимуществом является то, что Linux свободен от огромного количества вирусов присущих другим ОС. Благодаря GNU GPL и Open Source, практически все программное обеспечение поставляется с исходными кодами.

Позвольте рассеять несколько опасений и сомнений относительно Linux.

Linux - это игрушка.

Linux все больше и больше используется для работы в компаниях входящих в список Fortune 500, в правительственных учреждениях и у других пользователей как чрезвычайно рентабельное решение. Спросите об этом у IBM, Compaq, Dell, Apple Computer, Burlington Coat Factory, Amtrak, Virginia Power, NASA и миллиона пользователей во всем мире.

Отсутствие поддержки.

Хотя и говорится, что Linux распространяется без поддержки, но в состав любого дистрибутива входит более 12 000 страниц документации. Коммерческие дистрибутивы Linux, такие как Red Hat Linux, Caldera, SuSE и OpenLinux, предлагают поддержку для зарегистрированных пользователей. Вам не придется по шесть месяцев ждать выхода исправлений. Большинство серьезных ошибок (в том числе связанных с проблемами безопасности) исправляются online сообществом Linux в течение часа.


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

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

Глава 10 Программы обеспечения безопасности (Утилиты контроля) - sXid

В этой главе
Linux sXid
Конфигурация
Административные средства sXid
Linux Logcheck
Конфигурация
Linux PortSentry
Конфигурация
Запуск PortSentry

Linux sXid

SUID/SGID файлы несут в себе риск для безопасности. Для уменьшения этого риска, мы убрали бит "s" с программ, владельцем которых является root, и которым эти полномочия не нужны, но возможно в будущем, на существующие программы может быть установлен этот бит без предупреждения. sXid - это программа для контроля за SUID/SGID программами, запеускаемая из cron. В основном, она отслеживает любые изменения в suid-ных программах и папках. Если появились новые файлы, или у существующих программ этот бит снят, или в них изменились биты или другие режимы, то sXid сообщит вам об этом по электронной почте или в командной строке в удобочитаемом формате. sXid автоматизирует задачу поиска всех SUID/SGID файлов на сервере и известит вас о них. После ее инсталляции вы можете забыть об этой работе, она сделает все за вас.

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
sXid версии 4.0.1

Пакеты.
FTP сервер: ftp://marcus.seva.net/pub/sxid/
Вы должны скачать: sxid_4.0.1.tar.gz

Тарболы.

Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции sXid и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,

До инсталляции:

find /* > sXid1

После инсталляции:

find /* > sXid2

Для получения списка установленных файлов:

diff sXid1 sXid2 > sXid-Installed

Раскройте тарбол:
[root@deep /]# cp sxid_version.tar.gz /var/tmp/
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf sxid_version.tar.gz

Компиляция и оптимизация.
Переместитесь в новый каталог sXid и выполните следующие команды:
[root@deep tmp]# cd sxid-4.0.1
[root@deep sxid-4.0.1]# make install

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

Очистка после работы.
[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf sxid-version/ sxid_version_tar.gz

Команда "rm", использованная выше, удалит все исходные коды, которые мы использовали при компиляции и инсталляции sXid. Она также удалит .tar.gz архив.

Конфигурации.

Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файл из архива и измените его под свои требования. Затем поместите его в соответствующее место на сервере, так как это показано ниже. Файл с конфигурациями вы можете скачать с адреса: http://www.openna.com/books/floppy.tgz

Для запуска sXid должен быть создан или скопирован файл sxid.conf в каталог /etc.

Настройка файла "/etc/sxid.conf".

Конфигурационный файл "/etc/sxid.conf" позволяет вам установить опции, которые управляют действиями программы.

Шаг 1.

Редактируйте файл sxid.conf file (vi /etc/sxid.conf) и измените все, что нужно:

# Конфигурационный файл для sXid
# Замечу, что все пути должны быть абсолютными без замыкающих /
# Где начинать поиск файлов
SEARCH = "/"
# Какие каталоги исключить из поиска
EXCLUDE = "/proc /mnt /cdrom /floppy"
# Кому посылать отчеты
EMAIL = "root"
# Всегда посылать отчеты, даже если нет изменений?
ALWAYS_NOTIFY = "no"
# Где хранить промежуточные логи. Они будут циклически ротироваться 'x' раз
# согласно KEEP_LOGS
LOG_FILE = "/var/log/sxid.log"
# Как много логов хранить
KEEP_LOGS = "5"
# Сдвигать логи когда не произошло изменений?
ALWAYS_ROTATE = "no"
# Каталоги, где +s запрещены (они проверяются даже
# если явно на прописнаы в SEARCH), правила EXCLUDE применяются
FORBIDDEN = "/home /tmp"
#  Удалять (-s) из файлов найденных в запрещенном каталоге?
ENFORCE = "yes"
# Это предполагает ALWAYS_NOTIFY. Будет посылаться полный список
# элементов наряду с изменениями
LISTALL = "no"
# Игнорировать элементы для каталогов в этом пути
# (Это означает, что файлы будут только регистрироваться, вы
# можете эффективно игнорировать все элементы каталогов
# установив это в "/"). По умолчанию - /home, так как 
# в некоторых системах /home имеет g+s.
IGNORE_DIRS = "/home"
# Файл, который содержит список (каждый в новой строке)
# других файлов, которые sxid должен проверять. Это полезно
# для файлов, не имеющих +s, но относящихся к целостности
# системы (tcpd, inetd, apache...).
# EXTRA_LIST = "/etc/sxid.list"
# Почтовая программа. Это опция изменяет определенную при компиляции
# почтовую программу для отчетов. Эта опция нужно только если вы изменили
# месторасположение по умолчанию и не хотите перекомпилировать sxid.
# MAIL_PROG = "/usr/bin/mail"
Шаг 2.

Поместите соответствующий элемент в crontab файл пользователя root, чтобы sXid выполнялся автоматически. sXid будет автоматически запускаться и будет отслеживать появление новых s[ug]id программ, изменений произошедших с существующими (снятие этого бита, изменение режима и пр.), их удаление, составляя вам отчет о произошедших событиях.

Для редактирования crontab введите следующую команду:

[root@deep /]# crontab -e

И добавьте следующую строку в crontab (запуск каждый день в 4 часа утра):

0 4 * * * /usr/bin/sxid

Дополнительная документация.

Для получения большей информации, читайте соответствующие man страницы:

$ man sxid.conf (5) - конфигурационные устаноки для sxid
$ man sxid (1) - проверяет изменения в s[ug]id файлах и каталогах

Административная утилита sXid.

Эта программа предназначена для запуска с помощью cron. Она должна запускаться один раз в день, но можно и два раза.

Для запуска sxid вручную введите команду:

[root@deep /]# sxid -k
sXid Vers : 4.0.1
Check run : Wed Dec 29 12:40:32 1999
This host : mail.openna.com
Spotcheck : /home/admin
Excluding : /proc /mnt /cdrom /floppy
Ignore Dirs: /home
Forbidden : /home /tmp
No changes found

Она проверяет изменения в текущем рабочем каталоге. Ротации файлов регистрации и отправки сообщений по почте не происходит. Все результаты выводятся в stdout.

Инсталлированные файлы.

> /etc/sxid.conf
> /usr/bin/sxid
> /usr/man/man1/sxid.1
> /usr/man/man5/sxid.conf.5

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

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

Глава 10 Программы обеспечения безопасности (Утилиты контроля) - Logcheck

В этой главе
Linux sXid
Конфигурация
Административные средства sXid
Linux Logcheck
Конфигурация
Linux PortSentry
Конфигурация
Запуск PortSentry

Linux Logcheck

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

В кратком обзоре Logcheck сказано:

Ревизия и регистрация системных событий чрезвычайно важна. Системный администратор должен знать о происходящих событиях, чтобы суметь предотвратить возникновение проблем, особенно если система подключена к Интернет. К сожалению, для большинства версий UNIX регистрация событий не имеет значение, так как лог файлы никто не просматривает. Это то, в чем вам может помочь Logcheck. Он автоматизирует ревизию зарегистрированных событий, отфильтровывая "нормальные" сообщения, чтобы вы могли концентрировано посмотреть на проблемы и на потенциальных нарушителей.

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

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
Logcheck версии 1.1.1

Пакеты.
Домашняя страница Logcheck: http://www.psionic.com/abacus/logcheck/
Вы должны скачать: logcheck-1.1.1.tar.gz

Тарбол.

Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции Logcheck и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,

До инсталляции:
find /* > Logcheck1

После инсталляции:
find /* > Logcheck2

Для получения списка установленных файлов:
diff Logcheck1 Logcheck2 > Logcheck-Installed

Раскрываем тарбол (tar.gz).
[root@deep /]# cp logcheck-version.tar.gz /var/tmp/
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf logcheck-version.tar.gz

Компиляция и оптимизация.

Вы должны редактировать файл "Makefile" Logcheck-а, чтобы определить инсталляционные пути, флаги компиляции и оптимизации для вашей системы. Место, куда будет установлен Logcheck должно соответствовать структуре расположения системных файлов Red Hat,а расположение скрипта Logcheck переменной окружения PATH.

Шаг 1.

Переместитесь в новый каталог Logcheck и выполните следующие команды:

Редактируйте файл Makefile (vi Makefile) и измените следующие строки:

CC = cc
Должна читаться:
CC = egcs

CFLAGS = -O
Должна читаться:
CFLAGS = -O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions

INSTALLDIR = /usr/local/etc
Должна читаться:
INSTALLDIR = /etc/logcheck

INSTALLDIR_BIN = /usr/local/bin
Должна читаться:
INSTALLDIR_BIN = /usr/bin

INSTALLDIR_SH = /usr/local/etc
Должна читаться:
INSTALLDIR_SH = /usr/bin

TMPDIR = /usr/local/etc/tmp
Должна читаться:
TMPDIR = /etc/logcheck/tmp

Вышеприведенные изменения настраивают на использование компилятора egcc, включают оптимизационные флаги подходящие для вашей системы и определяют месторасположение файлов Logcheck, соответствующее структуре размещения системных файлов Red Hat.

Шаг 2

Редактируйте файл Makefile (vi +67 Makefile) и измените следующую строку:

@if [ ! -d $(TMPDIR) ]; then /bin/mkdir $(TMPDIR); fi
Должна читаться:
@if [ ! -d $(TMPDIR) ]; then /bin/mkdir -p $(TMPDIR); fi

Вышеупомянутое изменение (-p) позволит инсталляционной программе создавать родительские каталоги, когда это необходимо.

Шаг 3.

Инсталляция Logcheck на вашей системе:

[root@deep logcheck-1.1.1]# make linux

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

Очистка после работы.
[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf logcheck-version/ logcheck-version_tar.gz

Команда "rm", использованная выше, будет удалять все исходные коды, которые мы использовали при компиляции и инсталляции Logcheck. Она также удалит .tar.gz архив из каталога /var/tmp.

Конфигурация.

Так как мы использовали альтернативное месторасположение файлов, нам необходимо изменить пути к "logcheck.hacking", "logcheck.violations", "logcheck.ignore", "logcheck.violations.ignore" и "logtail" в основном скрипте logcheck.sh. Скрипт файл для Logcheck "/usr/bin/logcheck.sh" позволяет настроить опции, которые модифицируют пути и действия программы. Он хорошо комментирован и очень прост.

Шаг 1.

Редактируйте файл logcheck.sh (vi /usr/bin/logcheck.sh) и измените следующее:

LOGTAIL=/usr/local/bin/logtail
Должна читаться:
LOGTAIL=/usr/bin/logtail

TMPDIR=/usr/local/etc/tmp
Должна читаться:
TMPDIR=/etc/logcheck/tmp

HACKING_FILE=/usr/local/etc/logcheck.hacking
Должна читаться:
HACKING_FILE=/etc/logcheck/logcheck.hacking

VIOLATIONS_FILE=/usr/local/etc/logcheck.violations
Должна читаться:
VIOLATIONS_FILE=/etc/logcheck/logcheck.violations

VIOLATIONS_IGNORE_FILE=/usr/local/etc/logcheck.violations.ignore
Должна читаться:
VIOLATIONS_IGNORE_FILE=/etc/logcheck/logcheck.violations.ignore

IGNORE_FILE=/usr/local/etc/logcheck.ignore
Должна читаться:
IGNORE_FILE=/etc/logcheck/logcheck.ignore

Шаг 2.

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

Для редактирования crontab введите следующую команду:

[root@deep /]# crontab -e
И добавьте следующую строку в crontab:
# Ежечасная проверка системных журналов на предмет
# нарушений защиты и необычной активности.
00 * * * * /usr/bin/logcheck.sh

ЗАМЕЧАНИЕ. Запомните, что Logcheck не присылает отчеты по электронной почте, если ему нечего сказать.

Проинсталлированные файлы.
> /etc/logcheck 
> /usr/bin/logcheck.sh
> /etc/logcheck/tmp
> /etc/logcheck/logcheck.hacking
> /etc/logcheck/logcheck.violations
> /etc/logcheck/logcheck.violations.ignore
> /etc/logcheck/logcheck.ignore
> /usr/bin/logtail
> /var/log/messages.offset
> /var/log/secure.offset
> /var/log/maillog.offset

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

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

Глава 10 Программы обеспечения безопасности (Утилиты контроля) - PortSentry

В этой главе
Linux sXid
Конфигурация
Административные средства sXid
Linux Logcheck
Конфигурация
Linux PortSentry
Конфигурация
Запуск PortSentry

Linux PortSentry

Краткий обзор.

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

Как сказано во введение к PortSentry:

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

Цель этой программы - дать администратору информацию о том, что их сервер исследуется.

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
PortSentry версии 1.0

Пакеты.
Домашняя страница Logcheck: http://www.psionic.com/abacus/portsentry/
Вы должны скачать: portsentry-1.0.tar.gz

Тарбол.

Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции PortSentry и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,

До инсталляции:
find /* > Portsentry1

После инсталляции:
find /* > Portsentry2

Для получения списка установленных файлов:
diff Portsentry1 Portsentry2 > Portsentry-Installed

Раскрываем тарбол (tar.gz).

[root@deep /]# cp portsentry-version.tar.gz /var/tmp/
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf portsentry-version.tar.gz

Компиляция и оптимизация.

Вы должны редактировать файл "Makefile" PortSentry, чтобы определить инсталляционные пути, флаги компиляции и оптимизации для вашей системы. Место, куда будет установлен PortSentry должно соответствовать структуре расположения системных файлов Red Hat.

Шаг 1.

Переместитесь в новый каталог PortSentry и выполните следующие команды:

Редактируйте файл Makefile (vi Makefile) и измените следующие строки:

CC = cc
Должна читаться:
CC = egcs

CFLAGS = -O
Должна читаться:
CFLAGS = -O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions -Wall

INSTALLDIR = /usr/local/psionic
Должна читаться:
INSTALLDIR = /usr/ psionic

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

Шаг 2.

Так как мы использовали альтернативное месторасположение файлов (не /usr/local/psionic), нужно изменить путь к конфигурационному файлу PortSentry в основном заголовочном файле "portsentry_config.h".

Перемещаемся в новый каталог PortSentry и редактируем файл portsentry_config.h (vi portsentry_config.h), изменяя следующие строки:

#define CONFIG_FILE "/usr/local/psionic/portsentry/portsentry.conf"
Должен читаться:
#define CONFIG_FILE "/usr/psionic/portsentry/portsentry.conf"

Шаг 3

Инсталируем Portsentry на вашей системе.

[root@deep portsentry-1.0]# make linux
[root@deep portsentry-1.0]# make install

Вышеприведенныя команды будут настраивать программу на операционную систему Linux, компилировать, создавать и в заключение инсталлировать файлы в заданное место.

Очистка после работы

[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf portsentry-version/ portsentry-version_tar.gz

Команда "rm", использованная выше, будет удалять все исходные коды, которые мы использовали при компиляции и инсталляции PortSentry. Она также удалит .tar.gz архив из каталога /var/tmp.

Конфигурации.

"/usr/psionic/portsentry/portsentry.conf" - это основной конфигурационный файл для PortSentry; вы можете определить какие порты нужно слушать, какие IP адреса отклонены, контролируются, игнорируются, для каких отключается автоматический ответ и т.д. Для большей информации читайте файл "README.install" в каталоге с исходными кодами PortSentry.

Редактируйте файл portsentry.conf (vi /usr/psionic/portsentry.conf) и проверьте/измените опции, которые вам нужны:

# Конфигурация PortSentry
#
# $Id: portsentry.conf,v 1.13 1999/11/09 02:45:42 crowland Exp crowland $
#
# ВАЖНОЕ ЗАМЕЧАНИЕ: Вы не можете добавить пробелы между номерами 
# портов.
#
# По умолчанию настройки портов позволяют захватывать большое количество
# основных проверок
#
# Все элементы должны быть в кавычках.
#######################
# Конфигурации портов  #
#######################
#
#
# Несколько примеров настроены для классического и основного Stealth 
#  режимов
#
# Я люблю всегда сохранить некоторые порты в нижнем конце диапазона.
# Это позволит быстро обнаружить последовательное сканирование портов 
# и обычно эти порты не используются (например, tcpmux порт 1)
#
# ** Пользователи X-Windows **: Если вы запускаете X на вашем сервере, вам
# нужно быть уверенным, что PortSentry не привязан к порту 6000 (или порту
# 2000 для пользователей OpenWindows).
# Сделав это вы обеспечите правильный старт X-клиента.
#
# Эти привязанные порты игнорируются для режима Advanced Stealth Scan
# Detection Mode.
#
# Раскомментируйте это для чрезвычайного анализа:
#TCP_PORTS="1,7,9,11,15,70,79,80,109,110,111,119,138,139,143,512,513,514,515
,540,635,1080,1524,2000,2001,4000,4001,5742,6000,6001,6667,12345,12346,20034,
30303,32771,32772,32773,32774,31337,40421,40425,49724,54320"
#UDP_PORTS="1,7,9,66,67,68,69,111,137,138,161,162,474,513,517,518,635,640,64
1,666,700,2049,32770,32771,32772,32773,32774,31337,54321"
#
# Используйте их, если вы только хотите знать:
TCP_PORTS="1,11,15,79,111,119,143,540,635,1080,1524,2000,5742,6667,12345,
12346,20034,31337,32771,32772,32773,32774,40421,49724,54320"
UDP_PORTS="1,7,9,69,161,162,513,635,640,641,700,32770,32771,32772,32773,3
2774,31337,54321"
#
# Используйте это только для bare-bones
#TCP_PORTS="1,11,15,110,111,143,540,635,1080,524,2000,12345,12346,20034,32
771,32772,32773,32774,49724,54320"
#UDP_PORTS="1,7,9,69,161,162,513,640,700,32770,32771,32772,32773,32774,313
37,54321"
###########################################
# Опции Advanced Stealth Scan Detection              #
###########################################
#
# Это номера портов, которые PortSentry должен контролировать в 
# Advanced mode.
# Любые порты "ниже" этого числа будут контролироваться. Оставьте это
# для контроля всего ниже 1023.
#
# На многих Linux системах нельзя привязать порты выше 61000. Это
# потому, что эти порты используются как часть IP маскарадинга. Я не 
# рекомендую вам привязываться к этим номерам портов. Реальность: Я не 
# рекомендую использовать порты за 1023, так как это будет приводить к 
# ошибочным предупреждениям. Вы были предупреждены!
# Не пишите мне если у вас возникли проблемы, потому что я просто 
# высказываю вам свое мнение. Не используйте выше 1023 порта.
#
#
ADVANCED_PORTS_TCP="1023"
ADVANCED_PORTS_UDP="1023"
#
# Это поле говорит PortSentry, что порты (за исключением прослушиваемых 
# демонами) игнорируются. Это полезно для услуг, вызываемых ident,     
# например FTP, SMTP и wrappers, которые могут остаться не 
# запущенными.
#
# По установленным здесь портам PortSentry будет просто не отвечать
# на входящие запросы. Фактически, PortSentry будет их обрабатывать как 
# будто они привязаны к демонам. Заданные по умолчанию порты могут 
# выступать в отчетах, как возможно ложные сигналы тревоги и 
# вероятно должны быть оставлены для всез кроме особо изолированных систем
#
# TCP ident и NetBIOS сервисы
ADVANCED_EXCLUDE_TCP="113,139"
# UDP route (RIP), NetBIOS, bootp broadcasts.
ADVANCED_EXCLUDE_UDP="520,138,137,67"
######################
# Конфигурационные файлы #
######################
#
# Игнорируемые компьютеры
IGNORE_FILE="/usr/psionic/portsentry/portsentry.ignore"
# Компьютеры, которым было отказано в доступе (из истории работы)
HISTORY_FILE="/usr/psionic/portsentry/portsentry.history"
# Компьютеры доступ которым заблокирован только в этой сессии 
# (времмено до следующей перезагрузки)
BLOCKED_FILE="/usr/psionic/portsentry/portsentry.blocked"
###################
# Опции ответов      #
###################
# Опции ликвидации атакующего. Каждое из этих действий будет
# выполняться если будет обнаружена атака. Если вы не хотите отдельную
# опцию, то комментируйте ее и она будет пропущена.
#
# Переменная $TARGET$ будет замещена целью атаки, когда атака обнаружена.
# Переменная $PORT$ будет заменятьс портом, который был сканирован.
#
##################
# Опции игнорирования #
##################
# Эти опции позволяют вам допустить автоматический параметры ответа для 
# UDP/TCP. Это бывает полезно, если вы хотите получить предупреждение о 
# соединениях, но не хоти реагировать на определенный протокол.
# Для предотвращения возможных Denial of service атак через UDP и 
# определение stealth сканирования для TCP, вы можете пожелать отключить 
# блокирование, но оставить предупреждение.
# Лично я предпочитаю ждать начала возникновения проблем до того как
# что-нибудь предпринять, так как большинство атакующих ничего не делают.
# Третья опция позволяет вам запускать внешнюю команду в случае 
# сканирования. Это может быть полезно, например, для администраторов, 
# которые хотят блокировать TCP, но для UDP будет высылаться 
# предупреждения и т.д.
#
#
# 0 = Не блокировать UDP/TCP сканирование.
# 1 = Блокировать UDP/TCP сканирование.
# 2 = Запуск внешней команды (KILL_RUN_CMD)
BLOCK_UDP="1"
BLOCK_TCP="1"
###################
# Сброс маршрутов  #
###################
# Эти команды используются для удаления маршрута или
# хоста в локальную таблицу фильтрации.
#
# Шлюз (333.444.555.666) идеально должен быть неработающий хост
# в локальной подсети. На некоторых хостах вместо него используется
# localhost (127.0.0.1), что дает тот же эффект. ЗАМЕТИМ ЧТО 
# 333.444.555.66  НЕ БУДЕТ РАБОТАТЬ, ИЗМЕНИТЕ ЭТО!!
#
# ВСЕ ОПЦИИ ОТКЛЮЧЕНИЯ МАРШРУТОВ ИЗНАЧАЛЬНО 
# ЗАКОММЕНТИРОВАНЫ. Убедитесь, что вы раскомменировали
# правильные строки для вашей ОС. Если вашей ОС нет в списке
# и вы точно знаете команды сбрасывающие  маршруты, то,
# пожалуйста, пришлите их мне. ТОЛЬКО ОДНА KILL_ROUTE ОПЦИЯ
# МОЖЕТ БЫТЬ ИСПОЛЬЗОАНА ОДНОВРЕМЕННО, ТАК ЧТО 
# НЕ РАСКОММЕНТИРУЙТЕ БОЛЬШЕ ОДНОЙ СТРОКИ.
#
# ЗАМЕЧАНИЕ: route команды это наименее оптимальная дорога блокирования 
# и она не предоставляет полной защиты от UDP атак и 
# будет спокойно создавать предупреждения для UDP и stealth сканирований.
# Я всегда рекомендую вам использовать пакетный фильтр, потому что это
# соответствует замыслу.
#
# Общий
#KILL_ROUTE="/sbin/route add $TARGET$ 333.444.555.666"
# Общий для Linux
#KILL_ROUTE="/sbin/route add -host $TARGET$ gw 333.444.555.666"
# Новые версии Linux поддерживают сейчас флаг reject. Это лучше, чем
# вышестоящая опция
KILL_ROUTE="/sbin/route add -host $TARGET$ reject"
# Общие для BSD (BSDI, OpenBSD, NetBSD, FreeBSD)
#KILL_ROUTE="/sbin/route add $TARGET$ 333.444.555.666"
# Общий для Sun
#KILL_ROUTE="/usr/sbin/route add $TARGET$ 333.444.555.666 1"
# NEXTSTEP
#KILL_ROUTE="/usr/etc/route add $TARGET$ 127.0.0.1 1"
# FreeBSD (Оттестировано не достаточно хорошо)
#KILL_ROUTE="route add -net $TARGET$ -netmask 255.255.255.255 127.0.0.1 -blackhole"
# Digital UNIX 4.0D (OSF/1 / Compaq Tru64 UNIX)
#KILL_ROUTE="/sbin/route add -host -blackhole $TARGET$ 127.0.0.1"
# Общие HP-UX
#KILL_ROUTE="/usr/sbin/route add net $TARGET$ netmask 255.255.255.0 
127.0.0.1"
##
# Использование пакетного фильтра более предпочтительный метод. Ниже
# перечисленные строки подходят для многих ОС. Помните, вы можете
# раскомментировать только одну строку.
# Опции KILL_ROUTE.
##
###############
# TCP Wrappers#
###############
# Этот текст описывает внесение в файл hosts.deny для использования wrappers.
# Зжесь приводятся два формата TCP wrappers:
#
# Формат 1: Старый стиль - по умолчанию, когда хост не допускает обработки
# параметров.
#
KILL_HOSTS_DENY="ALL: $TARGET$"
#
# Формат 2: Новый стиль - включены расширенной обработки.
#  Вы можете просмотреть опции расширенной обработки, чтобы
# быть уверенными, что все перед символами "%" стоит символ "\"
# (например, \%c \%h )
#
#KILL_HOSTS_DENY="ALL: $TARGET$ : DENY"
###################
# Внешние команды #
###################
# Эта команда выполняется когда хост подключен, это может быть то, что вам
# нужно (пэйджер и т.д.). Эта команда выполняется перед очисткой маршрута.
# Я НЕ РЕКОМЕНДУЮ ПОМЕЩАТЬ КАКИЕ-ЛИБО КАРАТЕЛЬНЫЕ 
# ДЕЙСТВИЯ ПРОТИВ ХОСТА СКАНИРУЮЩЕГО ВАС. TCP/IP это 
# протокол без подтверждения подлинности и люди могут организовать
# сканирование из ниоткуда. Единственное, что можно безопасно запустить
# это скрипт обратной проверки, который использует классический -tcp режим. 
This
# Этот режим требует полного соединения и очень труден для обмана (spoof).
#
#KILL_RUN_CMD="/some/path/here/script $TARGET$ $PORT$"
#####################
# Значение триггеров сканирования #
#####################
# Введите число соединений к портам, когда вам будет дано предупреждение. 
# По умолчанию значение равно 0 - незамедлительная реакция.
# Значения 1 или 2 будут уменьшать количество ложных срабатываний. В более 
# высоком значение нет необходимости. Это значение должно быть определено, 
# но как правило можно оставить 0.
#
# ЗАМЕЧАНИЕ: Если вы используете продвинутые опции определения, вам
# нужно быть внимательным, чтобы не создать ситуацию "спускового крючка,
# требующего легкого нажатия". Поскольку расширенный режим будет 
# реагировать на любой удаленный компьютер соединяющийся с интервалом
# ниже определенного здесь, вы при определенных обстоятельствах 
# действительно разорвете что-нибудь. (например, кто-то невинно пытается 
# соединиться с вами через SSL [TCP порт 443] и вы сразу блокируете его). 
# Так что будьте внимательны.
#
SCAN_TRIGGER="0"
######################
# Секция заголовка (banner) порта  #
######################
#
# Введите здесь текст, который вы хотите показать человеку отключаемого 
# PortSentry. Я не рекомендую насмехаться над человек, так как это может его
# разозлить. Оставьте эти строки закомментироваными, чтобы отключить эту 
# возможность.
#
# Режим определения Stealth сканирования не использует эту возможность. 
#
PORT_BANNER="** UNAUTHORIZED ACCESS PROHIBITED *** YOUR 
CONNECTION ATTEMPT HAS
BEEN LOGGED. GO AWAY."
# EOF

Сейчас, вы должны проверить/изменить права установленные по умолчанию из соображения безопасности:

[root@deep /]# chmod 600 /usr/psionic/portsentry/portsentry.conf Конфигурирование файла "/usr/psionic/portsentry/portsentry.ignore".

В файл "/usr/psionic/portsentry/portsentry.ignore" вы добавляете компьютеры, которые должны быть проигнорированы если они соединяются к порту. Он всегда должен содержать localhost адрес (127.0.0.1) и адреса локальных машин. Не рекомендуется помещать в него все компьютеры из вашей локальной сети. Редактируйте фай portsentry.ignore file (vi /usr/psionic/portsentry.ignore) и добваьте в него все хосты, которые будут пропущены:

# Положите сюда адреса хостов, которые мы никогда не будем блокировать.
# Здесь должны находится адреса всех локальных интерфейсов на
# защищаемом сервере (например, virtual host, mult-home)
# Сохраните здесь 127.0.0.1 и 0.0.0.0.
127.0.0.1
0.0.0.0

Сейчас, мы должны проверить/изменить права доступа из соображений безопасности: [root@deep /]# chmod 600 /usr/psionic/portsentry/portsentry.ignore

Запуск PortSentry.

Программа PortSentry может быть сконфигурирована для работы в шести различных режимах, но запущена только для проверки одного протокольного режима за раз. Чтобы было более правильно, вы можете запустить одни TCP режим и один UDP режим, так как два TCP и один UDP, для примера, не работает. Доступные режимы:

?portsentry -tcp (основной port-bound TCP режим)
?portsentry -udp (основной port-bound UDP режим)
?portsentry -stcp (определение Stealth TCP сканирования)
?portsentry -atcp (продвинутое определение TCP stealth сканирования)
?portsentry -sudp (определение "Stealth" UDP сканирования)
?portsentry -audp (продвинутое определение UDP сканирования)

В моем случае я предпочитаю запускать TCP в протокольном режиме "продвинутое определение TCP stealth сканирования " и UDP в протокольном режиме "определение Stealth UDP сканирования ". Для получения большей информации о других протокольных режимах пожалуйста читайте "README.install" и "README.stealth" файлы в каталоге с исходными кодами PortSentry. Для TCP режима я выбираю:

- atcp - продвинутое определение TCP stealth сканирования
В режиме продвинутого определения TCP stealth сканирования, PortSentry будет вначале смотреть какие порты вы запустили на сервере, а затем выведет их из под наблюдения и начнет следить за остальными портами. Это очень полезно и очень быстро реагирует на сканирование портов. Этот режим, также, потребляет мало времени CPU.

Для UDP режима я выбрал:

-sudp - режим определения "Stealth" UDP сканирования
В режиме определения "Stealth" UDP сканирования UDP порты сперва будут формироваться в список, а затем контролироваться.

Для запуска PortSentry в двух вышеприведенных режимах используйте команды:

[root@deep /]# /usr/psionic/portsentry/portsentry -atcp
[root@deep /]# /usr/psionic/portsentry/portsentry -sudp

ЗАМЕЧАНИЕ: Вы можете добавить вышеприведенные строки в файл "/etc/rc.d/rc.local", чтобы они автоматически запускались при каждой перезагрузке системы.

Инсталлированные файлы.
> /usr/psionic
> /usr/psionic/portsentry
> /usr/psionic/portsentry/portsentry.conf
> /usr/psionic/portsentry/portsentry.ignore
> /usr/psionic/portsentry/portsentry

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

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

Глава 11 Программы обеспечения безопасности (Сетевые сервисы) - OpenSSH

В этой главе
Linux OpenSSH Клиент/Сервер
Конфигурация
Настройка OpenSSH для использования с TCP-Wrappers inetd супер сервером
Конфигурирование OpenSSH для каждого пользователя
Утилиты пользователя OpenSSH
Linux SSH2 Клиент/Сервер
Конфигурации
Настройка SSH2 для использования с TCP-Wrappers inetd супер сервером
Конфигурирование SSH2 для каждого пользователя
Утилиты пользователя SSH2

Linux OpenSSH Клиент/Сервер

Краткий обзор.

Как было написано во 2 главе "Инсталляция вашего Linux сервера", многие сетевые сервисы, включая, но не ограничиваясь, telnet, rsh, rlogin или rexec, уязвимы к электронному прослушиванию. В результате, любой человек, имеющий доступ к компьютеру в вашей сети, может прослушивать сообщения и перехватывать пароли и другую полезную информацию, проходящую по сети в открытом виде. Программа telnet необходима для решения ежедневных административных задач, но она не безопасна, так как передает через сеть пароли в открытом виде. Чтобы решить эту проблему необходима программа, которая заменит нам telnet. К счастью такая программа есть, это OpenSSH - настоящая и безопасная замена старых и небезопасных программ удаленного доступа, таких как telnet, rlogin, rsh, rdist или rcp.

Согласно официальному OpenSSH README файлу:

Ssh (Secure Shell) - это программа для подключения к компьютерам через сеть, выполнения команд на удаленных машинах и перемещения файлов из одного компьютера на другой. Она предоставляет строгую аутентификацию и безопасную передачу информации по незащищенным каналам. Ssh предназначен заменить rlogin, rsh, rcp и rdist.

В нашей конфигурации мы будем настраивать OpenSSH на поддержку tcp-wrappers (inetd superserver) для улучшения безопасности уже безопасной программы и чтобы не запускать ее как демон. В результате, когда клиент пытается соединиться с сервером, ssh будет запущен TCP-WRAPPER-ом для его аутентификации и авторизации перед тем, как разрешить подключение.

OpenSSH - это свободно-распространяемая замена SSH1, в которой были удалены все патентозависимые алгоритмы (во внешние библиотеки), все известные ошибки в безопасности и добавлены новые возможности. Мы рекомендуем вам использовать OpenSSH вместо SSH1 (свободно- распространяемый, но содержащий ошибки) или SSH2, который изначально тоже был бесплатным, но сейчас поставляется под коммерческой лицензией. Для тех, кто использует SSH2 от компании Datafellows, мы описываем в этой книге обе версии, начиная с OpenSSH.

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
OpenSSH версии 1.2.3

Пакеты.
Домашняя страница OpenSSH: http://violet.ibs.com.au/openssh/
Вы должны скачать: openssh-1.2.3.tar.gz

Необходимые условия.

OpenSSH требует, чтобы был установлен пакет zlib-devel, который содержит заголовочные файлы и библиотеки нужные программам, использующим библиотеки zlib компрессии и декомпрессии. Если это не так, то установите его с вашего Red Hat Linux 6.1 или 6.2 CD-ROM.

Чтобы узнать установлен ли у вас zlib-devel дайте команду:

[root@deep /]# rpm -qi zlib-devel
package zlib-devel is not installed

Для инсталляции zlib-devel дайте следующие комнады:

[root@deep /]# mount /dev/cdrom /mnt/cdrom/
[root@deep /]# cd /mnt/cdrom/RedHat/RPMS/
[root@deep RPMS]# rpm -Uvh gd-devel-version.i386.rpm
gd            ##################################################
[root@deep RPMS]# rpm -Uvh zlib-devel-version.i386.rpm
zlib-devep    ##################################################
[root@deep RPMS]# cd /; umount /mnt/cdrom/

OpenSSL, необходимая для включения поддержки SSL в OpenSSH, тоже должна быть установлена на вашей системе.

ЗАМЕЧАНИЕ. Для того, чтобы получить большую информацию об OpenSSL сервере читайте соответствующую главу этой книги. Даже если вам не нужно использовать OpenSSL для создания и хранения зашифрованных файлов ключей, все равно для правильной работы OpenSSH требуются библиотеки OpenSSL.

Тарболы.

Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции OpenSSH и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,

До инсталляции:
find /* > OpenSSH1

После инсталляции:
find /* > OpenSSH2

Для получения списка установленных файлов:
diff OpenSSH1 OpenSSH22 > OpenSSH-Installed

Раскройте тарбол:

[root@deep /]# cp openssh-version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf openssh-version.tar.gz

Компиляция и оптимизация.

Шаг 1.

Переместитесь в новый каталог OpenSSH и выполните следующие команды:

CC="egcs" \
CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -
march=pentiumpro -fomit-frame-pointer -fno-exceptions" \
./configure \
--prefix=/usr \
--sysconfdir=/etc/ssh \
--with-tcp-wrappers \
--with-ipv4-default \
--with-ssl-dir=/usr/include/openssl

Вышеприведенные опции говорят OpenSSH следующее:

Вкомпилировать libwrap и включить поддержку TCP Wrappers (/etc/hosts.allow|deny)
Заблокировать длительные задержки при разрешении имен под Linux/glibc-2.1.2 для улучшения времени соединения
Определить месторасположение OpenSSL

Шаг 2.

Сейчас мы должны компилировать и инсталлировать OpenSSH на сервере:

[root@deep openssh-1.2.3]# make
[root@deep openssh-1.2.3]# make install
[root@deep openssh-1.2.3]# make host-key
[root@deep openssh-1.2.3]# install -m644 contrib/redhat/sshd.pam /etc/pam.d/sshd

make - компилирует исходные коды в двоичные файлы;
make install - инсталлирует исполняемы и вспомогательные файлы
make host-key - создает ключ сервера
install - инсталлирует PAM поддержку на Red Hat Linux, которая сейчас имеет больше возможностей, чем популярный пакет из коммерческого ssh-1.2.x.

Очистка после работы. [root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf openssh-version/ openssh-version.tar.gz

Команда "rm", использованная выше, будет удалять все исходные коды, которые мы использовали при компиляции и инсталляции OpenSSH. Она также удалит .tar.gz архив.

Конфигурации.

Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файл из архива и измените его под свои требования. Затем поместите его в соответствующее место на сервере, так как это показано ниже. Файл с конфигурациями вы можете скачать с адреса:

http://www.openna.com/books/floppy.tgz

Для запуска OpenSSH клиента/сервера следующие файлы должны быть созданы или скопированы в нужный каталог:

Копируйте ssh_config в каталог "/etc/ssh/".
Копируйте sshd_config в каталог "/etc/ssh/".
Копируйте sshd в каталог "/etc/pam.d/".

Вы можете взять эти файлы из нашего архива floppy.tgz.

Настройка файла "/etc/ssh/ssh_config".

Файл "/etc/ssh/ssh_config" это конфигурационный файл для OpenSSH, действующий в масштабах системы, который определяет опции изменяющие действия клиентских программ. Он содержит пары ключ-значение, одну на строку, не зависящие от регистра. Здесь описаны наиболее важные ключи влияющие на безопасность; полный список вы можете найти на стрнице руководства (man) для ssh (1).

Редактируйте файл ssh_config (vi /etc/ssh/ssh_config) и добавьте/или измените следующие параметры:


# Site-wide defaults for various options
Host *
    ForwardAgent no
    ForwardX11 no
    RhostsAuthentication no
    RhostsRSAAuthentication no
    RSAAuthentication yes
    PasswordAuthentication yes
    FallBackToRsh no
    UseRsh no
    BatchMode no
    CheckHostIP yes
    StrictHostKeyChecking no
    IdentityFile ~/.ssh/identity
    Port 22
    Cipher blowfish
    EscapeChar ~

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

ForwardAgent no
Опция "ForwardAgent" определяет какой агент установления подлинности соединения должен быть направлен на удаленную машину.

ForwardX11 no
Опция "ForwardX11" для людей, которые используют Xwindow GUI и хотят автоматически перенаправлять сессии X11 на удаленную машину. Так как мы устанавливали сервер и не инсталлировали GUI, мы можем спокойно выключить эту опцию.

RhostsAuthentication no
Опция "RhostsAuthentication" определяет можем ли мы использовать аутентификацию, базирующуюся на rhosts. Так как она не безопасна, то мы отключаем ее.

RhostsRSAAuthentication no
Опция "RhostsRSAAuthentication" определяет использовать ли rhosts аутентификацию совместно с RSA host аутентификацией или нет.

RSAAuthentication yes
Опция "RSAAuthentication" определяет использовать RSA аутентфикацию или нет. Эта опция должна быть установлена в "yes" для лучшей безопасности ваших сессий. RSA использует пару из общедоступного и личного ключей, созданную при помощи утилиты ssh-keygen1.

PasswordAuthentication yes
Опция "PasswordAuthentication" определяет можем ли мы использовать аутентификацию, базирующуюся на паролях, или нет. Для большей безопасности эта опция должна быть установлена в "yes".

FallBackToRsh no
Опция "FallBackToRsh" определяет, что если соединение с демоном ssh завершилось ошибкой, должен ли автоматически использоваться rsh. Запомните, что сервис rsh небезопасен, поэтому эту опцию устанавливаем в no.

UseRsh no
Опция "UseRsh" определяет, что сервис rlogin/rsh должен использоваться на этом компьютере. Как и с опцией "FallBackToRsh", эта опция должна быть установлена в "no" из соображений безопасности.

BatchMode no
Опция "BatchMode" определяет можем ли мы отключить запрос имени и пароля при соединении. Эта опция полезна когда вы создаете скрипты и не хотите вводить пароль. (например, скрипт, который использует команду scp для создания резервных копий через сеть).

CheckHostIP yes
Опция "CheckHostIP" определяет будет или нет ssh дополнительно проверять IP адрес компьютера, который подключается к серверу, для определения DNS spoofing. Рекомендую установить эту опцию в "yes".

StrictHostKeyChecking no
Опция "StrictHostKeyChecking" определяет будет или нет ssh автоматически добавлять новые ключи компьютера в файл $HOME/.ssh/known_host. Эта опция, когда установлена в "yes", предоставляет максимальную защиту от атак Trojan horse. С этой опцией должна быть проведена одна процедура. Вначале она устанавливается в "no", чтобы ключи с обычно используемых компьютеров были собраны в файле, а затем нужно установить ее в "yes", чтобы воспользоваться ее дополнительными возможностями.

IdentityFile ~/.ssh/identity
Опция "IdentityFile" определяет альтернативный идентичный файл RSA идентификации для чтения. Много идентичных файлов может быть определено с помощью этой опции.

Port 22
Опция "Port" опередляет какой порт используется для ssh соединений на удаленном компьютере. По умолчанию он равен 22.

Cipher blowfish
Опция "Cipher" определяет какой шифр должен быть использован для шифрования сессии. blowfish использует 64-битные блоки и ключи до 448 бит.

EscapeChar ~
Опция "EscapeChar" определяет сессионный знак перехода в приостановленное состояние.

Настройка файла "/etc/ssh/sshd_config".

Файл "/etc/ssh/sshd_config" - это конфигурационный файл для OpenSSH, действующий в масштабах системы, который определяет опции изменяющие действия демона. Он содержит пары ключ-значение, одну на строку, не зависящие от регистра. Здесь описаны наиболее важные ключи влияющие на безопасность sshd; полный список вы можете найти на странице руководства к sshd (8).
Редактируйте файл sshd_config (vi /etc/ssh/sshd_config) и добавьте/или измените следующие параметры:

# This is ssh server systemwide configuration file.
Port 22
ListenAddress 192.168.1.1
HostKey /etc/ssh/ssh_host_key
ServerKeyBits 1024
LoginGraceTime 600
KeyRegenerationInterval 3600
PermitRootLogin no
IgnoreRhosts yes
IgnoreUserKnownHosts yes
StrictModes yes
X11Forwarding no
PrintMotd yes
SyslogFacility AUTH
LogLevel INFO
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no
AllowUsers admin

Port 22
Опция "Port" определяет какой порт слушает ssh демон для входящих соединений. По умолчанию - 22.

ListenAddress 192.168.1.1
Опция "ListenAddress" определяет IP адрес интерфейса к которому подключен сокет ssh демона. По умолчанию это "0.0.0.0"; для улучшения безопасности вы можете ограничиться только одним адресом.

HostKey /etc/ssh/ssh_host_key
Опция "HostKey" определяет место содержащее приватный ключ сервера.

ServerKeyBits 1024
Опция "ServerKeyBits" определяет как много бит используется в ключе сервера. Эти биты используются когда демон стартует для генерации RSA ключа.

LoginGraceTime 600
Опция "LoginGraceTime" определяет как долго в секундах после соединения сервер ждет правильной регистрации до его разрыва.

KeyRegenerationInterval 3600
Опция "KeyRegenerationInterval" определяет как долго в секундах сервер должен ждать перед автоматической регенерацией своего ключа. Эта опция защиты предназначена для предотвращения расшифровки захваченного сеанса связи.

PermitRootLogin no
Опция "PermitRootLogin" определяет может ли root подключаться, используя ssh. Никогда не говорите "yes" в этой опции.

IgnoreRhosts yes
Опция "IgnoreRhosts" определяет должны ли файлы rhosts или shosts использоваться при аутентификации. Из соображений безопасности рекомендуется не использовать эти файлы.

IgnoreUserKnownHosts yes
Опция "IgnoreUserKnownHosts" определяет должен ли ssh демон игнорировать пользователей "$HOME/.ssh/known_hosts" во время RhostsRSAAuthentication.

StrictModes yes
Опция "StrictModes" определяет должен ли ssh проверять права пользователей в их домашних каталогах и файлы rhosts перед тем, как пустить на сервер. Эта опция должна всегда быть установлена в "yes", потому что иногда пользователи могут случайно оставить свои каталоги и файлы открытыми всем для записи.

X11Forwarding no
Опция "X11Forwarding" определяет должен ли сервер перенаправлять X11 пакеты или нет. Так как мы установили сервер без GUI, то эту опцию устанавливаем в no.

PrintMotd yes
Опция "PrintMotd" определяет должен ли ssh демон печатать содержимое файла "/etc/motd", когда пользователь входит на сервер. Файл "/etc/motd" также известен как "сообщение дня".

SyslogFacility AUTH
Опция "SyslogFacility" определяет с какого средства (facility) поступают сообщения в syslog от sshd. facility представляет подсистему, которая создает сообщение, в нашем случае AUTH.

LogLevel INFO
Опция "LogLevel" определяет уровень важности сообщения поступающего системе syslog от sshd. INFO - хороший выбор. Смотрите страницу man для sshd для получения большей информации о других возможностях.

RhostsAuthentication no
Опция "RhostsAuthentication" определяет может ли sshd использовать rhosts аутентификацию. Так как rhosts аутентификация небезопасна, то мы не используем эту опцию.

RhostsRSAAuthentication no
Опция "RhostsRSAAuthentication" определяет можно ли использовать rhosts аутентификацию вместе с RSA аутентификацией.

RSAAuthentication yes
Опция "RSAAuthentication" определяет можно ли использовать RSA аутентификацию. Эта опция должна быть установлена в "yes" для лучшей безопасности. RSA использует пару из общедоступного и личного ключей, созданных с помощью утилиты ssh-keygen1.

PasswordAuthentication yes
Опция "PasswordAuthentication" определяет можно ли использовать аутентификацию по паролю. Для лучшей защищенности эта опция должна быть установлена в "yes".

PermitEmptyPasswords no
Опция "PermitEmptyPasswords" определяет позволяет ли сервер входить на сервер с бюджетов с пустыми паролями. Если вы используете утилиту "scp" для автоматического создания резервных копий через сеть, то нужно установить эту опцию в "yes".

AllowUsers admin
Опция "AllowUsers" определяет и контролирует какие пользователи могут использовать ssh сервис. Для разделения нескольких имен используйте пробелы.

Настройка OpenSSH для использования с TCP-Wrappers inetd супер сервером.

Tcp-Wrappers может быть использован для запуска и остановки вашего ssh сервиса. Перед выполнением inetd читает информацию из конфигурационного файла /etc/inetd.conf.

Шаг 1.

Редактируйте файл inetd.conf (vi /etc/inetd.conf) и добавьте в него следующую строку:

ssh stream tcp nowait root /usr/sbin/tcpd sshd -i

ЗАМЕЧАНИЕ. Параметр '"-i" говорит, что sshd должен запускаться из inetd. После редактирования файла "etc/inetd.conf" отправьте демону inetd сигнал SIGHUP, чтобы он перечитал файл конфигурации.

[root@deep /]# killall -HUP inetd Шаг 2.

Редактируйте файл hosts.allow file (vi /etc/hosts.allow) и добавьте следующую строку:

sshd: 192.168.1.4 win.openna.com

Которая значит, что клиенту с IP адресом "192.168.1.4" и именем компьютера "win.openna.com" разрешен ssh доступ к серверу.

Эти строки "демона" (для tcp-wrappers) используются sshd:

sshdfwd-X11 (если вы хотите разрешить/запретить X11-forwarding).
sshdfwd-<port-number> (для tcp-forwarding).
sshdfwd-<port-name> (номер порта определен в /etc/services. Ипсользуемый в tcp-forwarding).

ЗАМЕЧАНИЕ. Если вы решили переключиться на использование ssh, сделайте так, чтобы вы инсталлировали и использовали его на всех ваших серверах. Наличие десяти защищенных серверов и одного незащищенного бесполезно.

Дополнительная документация.

Для получения большей информации, вот несколько man-страниц, которые можно прочитать.

$ man ssh (1) - OpenSSH secure shell клиент (программа удаленного подключения)
$ man ssh [slogin] (1) - OpenSSH secure shell клиент (клиент (программа удаленного подключения)
$ man ssh-add (1) - добавление identities для агента аутентификации
$ man ssh-agent (1) - аутентификационный агент
$ man ssh-keygen (1) - генерация аутентификационного ключа
$ man sshd (8) - ssh демон

Конфигурирование OpenSSH для каждого пользователя

Шаг 1.

Создайте, локально, ваш общедоступный и персональный ключи:

[root@deep /]# su admin
[admin@deep /]$ ssh-keygen

Результат должен выглядеть примерно так:

Initializing random number generator...
Generating p: ............................++ (distance 430)
Generating q: ......................++ (distance 456)
Computing the keys...
Testing the keys...
Key generation complete.
Enter file in which to save the key (/home/admin/.ssh/identity): [Press Enter]
Enter passphrase:
Enter the same passphrase again:
Your identification has been saved in /home/admin/.ssh/identity.
Your public key is:
1024 37
149377575112519555336911203184772938622900493947151365111458061088700
017643784946768312975778431585322723612061006231460440536487184367748
423324091941848098890786099717524446977589647127757030728779973708569
993017043141563536333068888944038178461608592483844590202154102756903
055846534063365635584899765402181 admin@deep.openna.com
Your public key has been saved in /home/admin/.ssh/identity.pub

ЗАМЕЧАНИЕ. Если вы имеете несколько бюджетов, то вы можете хотеть создать независимые ключи для них.

Вы хотите создать ключи для:

  1. Ваш почтовый сервер
  2. Ваш Веб сервер
  3. Ваш шлюз

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

Шаг 2.

Копируйте ваш общедоступный ключ (identity.pub) на удаленный компьютер в каталог "/home/admin/.ssh" под именем "authorized_keys".

ЗАМЧЕАНИЕ. Одним из способов копирования файла является использование ftp команд или вам нужно послать по электронной почте ваш общедоступный ключ администратору системы. Только включите содержимое файла ~/.ssh/identity.pub в сообщение.

Изменение вашей pass-phrase.

Вы можете изменить pass-phrase в любое время используя опцию "-p" утилиты ssh-keygen. [root@deep /]# su admin
[admin@deep /]$ ssh-keygen -p
Enter file key is in (/home/admin/.ssh/identity): [Press ENTER]
Enter old passphrase:
Key has comment 'admin@deep.openna.com'
Enter new passphrase:
Enter the same passphrase again:
Your identification has been saved with the new passphrase.

Утилиты пользователя OpenSSH

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

Ssh

"ssh" (Secure Shell) команда предоставляющая безопасную шифрованную связь между двумя недоверенными компьютерами через небезопасную сеть. Эта программа для безопасного подключения к удаленной машине и выполнения команд на ней. Она заменяет такие небезопасные программы, как telnet, rlogin, rcp, rdist и rsh.

Для подключения к удаленной машине используйте команду:

[root@deep /]# ssh -l <login_name> <hostname>

Например:

[root@deep /]# ssh -l admin www.openna.com
admin@deep.openna.com's password:
Last login: Tue Oct 19 1999 18:13:00 -0400 from deep.openna.com
No mail.
[admin@www admin]$

Где <login_name> это имя, которое вы используете для соединения с ssh сервером и <hostname> это имя удаленного ssh сервера.

scp

"scp" (Secure Copy) это утилита для копирования файлов из локальной системы на удаленную и наоборот, или между двумя удаленными системами. Для копирования файлов с удаленной системы на локулбную используйте следующую команду:

[root@deep /]# su admin
[admin@deep /]$ scp -p <login_name@hostname>:/dir/for/file localdir/to/filelocation

Например:

[admin@deep /]$ scp1 -p admin@mail:/etc/test1 /tmp
Enter passphrase for RSA key 'admin@mail.openna.com':
test1 | 2 KB | 2.0 kB/s | ETA: 00:00:00 | 100%

Для копирования файла с локальной на удаленную систему используйте следующую команду:

[root@deep /]# su admin
[admin@deep /]$ scp -p localdir/to/filelocation <username@hostname>:/dir/for/file

Например:

[admin@deep /]$ scp1 -p /usr/bin/test2 admin@mail:/var/tmp
admin@mail's password:
test2 | 7 KB | 7.9 kB/s | ETA: 00:00:00 | 100%

ЗАМЕЧАНИЕ. Опция "-p" говорит, что время модификации и доступа, также как и режимы исходных файлов, должны быть сохранены и на копии. Это обычно желательно.

Некоторые возможности использования OpenSSH

OpenSSH может использоваться для:

  1. Замены telnet, rlogin, rsh, rdist и rcp.
  2. Организации безопасного резервного копирования через сеть.
  3. Удаленного выполнения команд..
  4. Доступа к корпоративным ресурсам через Интернет.

Инсталлируемые файлы

> /etc/ssh
> /etc/ssh/ssh_config
> /etc/ssh/sshd_config
> /etc/ssh_host_key
> /etc/ssh_host_key.pub
> /usr/bin/ssh
> /usr/bin/slogin
> /usr/man/man1/ssh.1
> /usr/man/man1/scp.1
> /usr/man/man1/ssh-add.1
> /usr/man/man1/ssh-agent.1
> /usr/man/man1/ssh-keygen.1
> /usr/bin/scp
> /usr/bin/ssh-add
> /usr/bin/ssh-agent
> /usr/bin/ssh-keygen
> /usr/man/man1/slogin.1
> /usr/man/man8/sshd.8
> /usr/sbin/sshd

Бесплатные SSH клиенты для Windows

Putty
Домашняя страница Putty: http://www.chiark.greenend.org.uk/~sgtatham/putty.html

Tera Term Pro и TTSSH
Домашняя страница Tera Term Pro: http://hp.vector.co.jp/authors/VA002416/teraterm.html
Домашняя страница TTSSH : http://www.zip.com.au/~roca/download.html


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

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

Глава 11 Программы обеспечения безопасности (Сетевые сервисы) - SSH2

В этой главе
Linux OpenSSH Клиент/Сервер
Конфигурация
Настройка OpenSSH для использования с TCP-Wrappers inetd супер сервером
Конфигурирование OpenSSH для каждого пользователя
Утилиты пользователя OpenSSH
Linux SSH2 Клиент/Сервер
Конфигурации
Настройка SSH2 для использования с TCP-Wrappers inetd супер сервером
Конфигурирование SSH2 для каждого пользователя
Утилиты пользователя SSH2

Linux SSH2 Клиент/Сервер

Краткий обзор.

Сейчас стало ясно, что все пользователи Linux, должны использовать OpenSSH вместо SSH2 от компании Datafellows. Однако, для пользователей и организаций, которые хотят использовать коммерческую версию этого программного обеспечения, мы приводим следующее описание. Это SSH2 - коммерческая версия SSH. В нашей конфигурации мы настраиваем SSH2 на поддержку работы с TCP-Wrappers из соображений безопасности.

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
SSH2 версии 2.0.13

Пакеты.
Домашняя страница SSH2: http://www.ssh.org/
Вы должны скачать: ssh-2.0.13.tar.gz

Тарболы.

Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции SSH2 и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,

До инсталляции:
find /* > SSH1

После инсталляции:
find /* > SSH2

Для получения списка установленных файлов:
diff SSH1 SSH2 > SSH2-Installed

Раскройте тарбол:

[root@deep /]# cp ssh-version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf ssh-version.tar.gz

Компиляция и оптимизация.

Шаг 1.

Переместитесь в новый каталог SSH2 и выполните следующие команды:

CC="egcs" \
CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions" \
./configure \
--prefix=/usr \
--without-ssh-agent1-compat \
--disable-suid-ssh-signer \
--disable-tcp-port-forwarding \
--disable-X11-forwarding \
--enable-tcp-nodelay \
--with-libwrap

Вышеприведенные опции говорят SSH2 следующее:

[root@deep ssh-2.0.13]# make clean
[root@deep ssh-2.0.13]# make
[root@deep ssh-2.0.13]# make install
[root@deep ssh-2.0.13]# rm -f /usr/bin/ssh-askpass

Команда "make clean" удаляет все предыдущие следы компиляции, чтобы избежать любых ошибок. Команда "make" компилирует все исходные файлы в исполняемые и в заключении команда "make install" инсталлирует двоичные и сопутствующие им файлы в определенное место.

Очистка после работы.

[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf ssh-version/ ssh-version.tar.gz

Команда "rm", использованная выше, будет удалять все исходные коды, которые мы использовали при компиляции и инсталляции SSH2. Она также удалит .tar.gz архив.

Конфигурации.

Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файл из архива и измените его под свои требования. Затем поместите его в соответствующее место на сервере, так как это показано ниже. Файл с конфигурациями вы можете скачать с адреса:
http://www.openna.com/books/floppy.tgz

Для запуска SSH2 клиента/сервера следующие файлы должны быть созданы или скопированы в нужный каталог:

Копируйте ssh2_config в каталог "/etc/ssh2/".
Копируйте sshd2_config в каталог "/etc/ssh2/".
Копируйте sshd в каталог "/etc/pam.d/".

Вы можете взять эти файлы из нашего архива floppy.tgz.

Настройка файла "/etc/ssh2/ssh2_config".

Файл "/etc/ssh2/ssh2_config" это конфигурационный файл для SSH2, действующий в масштабах системы, который определяет опции изменяющие действия клиентских программ. Он содержит пары ключ-значение, записанных в одну на строку, не зависящие от регистра. Здесь описаны наиболее важные ключи влияющие на безопасность; полный список вы можете найти странице руководства для ssh2 (1).

Редактируйте файл ssh2_config (vi /etc/ssh2/ssh2_config) и добавьте/или измените следующие параметры:

# ssh2_config
# SSH 2.0 Client Configuration File
*:
  Port 22
  Ciphers blowfish
  Compression yes
  IdentityFile identification
  AuthorizationFile authorization
  RandomSeedFile random_seed
  VerboseMode no
  ForwardAgent no
  ForwardX11 no
  PasswordPrompt "%U's password: "
  Ssh1Compatibility no
  Ssh1AgentCompatibility none
  NoDelay yes
  KeepAlive yes
  QuietMode no

Port 22<br> Опция "Port" определяет на какой порт ssh присоединяется на удаленнный компьютер. По умолчанию - 22.

Ciphers blowfish
Опция "Ciphers" определяет какой шифр должен быть использован для шифрования сессии. blowfish использует 64-битные блоки и ключи до 448 бит.

Compression yes
Опция "Compression" определяет использовать ли во время сессии сжатие. Сжате будет улучшать скорость связи и обмена файлами.

IdentityFile identification
Опция "IdentityFile" определяет альтернативное имя для пользовательского идентификационного файла.

AuthorizationFile authorization
Опция "AuthorizationFile" определяет альтернативное имя для пользовательского файла авторизации.

RandomSeedFile random_seed
Опция "RandomSeedFile" определяет альтернативное имя для пользовательского файла с начальным числом для генерации псевдослучайных чисел (random seed file).

VerboseMode no
Опция "VerboseMode" заставляет ssh2 печатать отладочные сообщения о ходе его работы. Эта опция полезна при отладочных соединениях и проблемах с настройками.

ForwardAgent no
Опция "ForwardAgent" определяет какой агент установления подлинности соединения должен быть направлен на удаленную машину.

ForwardX11 no
Опция "ForwardX11" для людей, которые используют Xwindow GUI и хотят автоматически перенаправлять сессии X11 на удаленную машину. Так как мы устанавливали сервер и не инсталлировали GUI, мы можем спокойно выключить эту опцию.

PasswordPrompt "%U's password: "
Опция "PasswordPrompt" определяет строку запроса пароля, которая будет выводится пользователю, когда он подключается к системе. Переменные '%U' и '%H' дают имя пользователя и хоста соответственно.

Ssh1Compatibility no
Опция "Ssh1Compatibility" определяет будут или нет использоваться SSH1 совместимые коды в SSH2 для ssh1 пользователей.

Ssh1AgentCompatibility none
Опция "Ssh1AgentCompatibility" определяет будет или нет направляться SSH1 агент соединений с SSH2 для пользователей ssh1.

NoDelay yes
Опция "NoDelay" определяет, что опция сокета TCP_NODELAY должна быть включена. Рекомендуется установить ее в "yes" для улучшения сетевой производительности.

KeepAlive yes
Опция "KeepAlive" определяет должна ли система отправлять keep alive сообщения на удаленный сервер. Если эта опция установлена в "yes", то в случае разрыва соединения или аварийного отказа удаленной машины будет получено корректное извещение.

QuietMode no
Опция "QuietMode" определяет будет ли система запущена в тихом режиме. Эта опция должна быть установлена в "no", потому что в бесшумном режиме, никакой информации не заносится в с системные журналы регистрации, за исключением фатальных ошибок. Так как мы хотим иметь информацию о пользовательских сессиях, нам надо установить опцию в "no".

Настройка файла "/etc/ssh2/sshd2_config".

Файл "/etc/ssh2/sshd2_config" это конфигурационный файл для SSH2, действующий в масштабах системы, который определяет опции изменяющие действия демона. Он содержит пары ключ-значение, одну на строку, не зависящие от регистра. Здесь описаны наиболее важные ключи влияющие на безопасность sshd; полный список вы можете найти в man странице для sshd2 (8).

Редактируйте файл sshd2_config (vi /etc/ssh2/sshd2_config) и добавьте/или измените следующие параметры:

# sshd2_config
# SSH 2.0 Server Configuration File
*:
  Port 22
  ListenAddress 192.168.1.1
  Ciphers blowfish
  IdentityFile identification
  AuthorizationFile authorization
  HostKeyFile hostkey
  PublicHostKeyFile hostkey.pub
  RandomSeedFile random_seed
  ForwardAgent no
  ForwardX11 no
  PasswordGuesses 3
  MaxConnections 5
  PermitRootLogin no
  AllowedAuthentications publickey,password
  RequiredAuthentications publickey,password
  VerboseMode no
  PrintMotd yes
  CheckMail yes
  UserConfigDirectory "%D/.ssh2"
  SyslogFacility DAEMON
  Ssh1Compatibility no
  NoDelay yes
  KeepAlive yes
  UserKnownHosts yes
  AllowHosts 192.168.1.4
  DenyHosts *
  QuietMode no
# subsystem definitions
  subsystem-sftp sftp-server

Port 22
Опция "Port" определяет какой порт слушает ssh2 демон для входящих соединений. По умолчанию - 22.

ListenAddress 192.168.1.1
Опция "ListenAddress" определяет IP адрес интерфейса к которому подключен сокет ssh демона. По умолчанию это "0.0.0.0"; для улучшения безопасности вы можете ограничиться только одним адресом.

Ciphers blowfish
Опция "Ciphers" определяет какой шифр должен быть использован для шифрования сессии. blowfish использует 64-битные блоки и ключи до 448 бит.

IdentityFile identification
Опция "IdentityFile" определяет альтернативное имя для идентификационного файла пользователей.

AuthorizationFile authorization
Опция "AuthorizationFile" задает альтернативное имя для файла полномочий пользователей (user's authorization file).

HostKeyFile hostkey
Опция "HostKeyFile" определяет место содержащее приватный ключ сервера. По умолчанию "/etc/ssh2/hostkey".

PublicHostKeyFile hostkey.pub
Опция "PublicHostKeyFile" определяет альтернативный файл содержащий публичный ключ сервера. По умолчанию - "/etc/ssh2/hostkey.pub".

RandomSeedFile random_seed
Опция "RandomSeedFile" определяет альтернативное имя для пользовательского файла с начальным числом для генерации псевдослучайных чисел (random seed file).

ForwardAgent no
Опция "ForwardAgent" определяет какой агент установления подлинности соединения должен быть направлен на удаленную машину.

ForwardX11 no
Опция "ForwardX11" определяет должен ли сервер перенаправлять X11 пакеты или нет. Так как мы установили сервер без GUI, то эту опцию устанавливаем в no.

PasswordGuesses 3
Опция "PasswordGuesses" определяет как много попыток имеет пользователь, чтобы ввести имя и пароль, при парольной аутентификации.

MaxConnections 5
Опция "MaxConnections" определяет максимальное число одновременных соединений, которыми демон ssh2 может управлять.

PermitRootLogin no
Опция "PermitRootLogin" определяет может ли root подключаться, используя ssh. Никогда не говорите "yes" в этой опции.

AllowedAuthentications publickey,password
Опция "AllowedAuthentications" определяет какие виды аутентификации разрешено использовать. С этой опцией администратор может вынуждать пользователей заканчивать несколько аутентификаций прежде чем они расссматриваются как заверенные.

RequiredAuthentications publickey,password
Опция "RequiredAuthentications" связана с "AllowedAuthentications", определяет какие метода аутентификации пользователь должен завершить прежде чем продолжить свою работу. Этот параметр должен иметь те же значения, что и "AllowedAuthentications" или сервер будет все время запрещать соедиенния.

VerboseMode no
Опция "VerboseMode" заставляет демон ssh2 печатать отладочные сообщения о ходе его работы. Эта опция полезна при отладочных соединениях и проблемах с настройками.

PrintMotd yes
Опция "PrintMotd" определяет должен ли ssh2 демон печатать содержимое файла "/etc/motd", когда пользователь входит на сервер. Файл "/etc/motd" также известен как "сообщение дня".

CheckMail yes
Опция "CheckMail" определяет должен ли ssh2 демон печатать информацию о новой почте, которая пришла пользователю.

UserConfigDirectory "%D/.ssh2"
Опция "UserConfigDirectory" определяет месторасположение конфигурационных данных пользователей.

SyslogFacility DAEMON
Опция "SyslogFacility" определяет с какого средства (facility) поступают сообщения в syslog от sshd2. facility представляет подсистему, которая создает сообщение, в нашем случае DAEMON.

Ssh1Compatibility no
Опция "Ssh1Compatibility" определяет будут ли использоваться SSH1 совместимые коды в SSH2 для пользователей ssh1.

NoDelay yes
Опция "NoDelay" определяет, что опция сокета TCP_NODELAY должна быть включена. Рекомендуется установить ее в "yes" для улучшения сетевой производительности.

KeepAlive yes
Опция "KeepAlive" определяет должна ли система отправлять keep alive сообщения на удаленный сервер. Если эта опция установлена в "yes", то в случае разрыва соединения или аварийного отказа удаленной машины будет получено корректное извещение.

UserKnownHosts yes
Опция "UserKnownHosts" определяет может ли быть использован домашний каталог пользователя "$HOME/.ssh2/knownhosts/" для получения публичного ключа хоста, когда используется "hostbased"-аутентификация.

AllowHosts 192.168.1.4
Опция "AllowHosts" определяет и контролирует какие компьютеры имеют доступ к ssh2 сервису. Несколько хостов, разделенных пробелами, может быть перечислено.

DenyHosts *
Опция "DenyHosts" определяет и контролирует какие хосты не имеют доступа к ssh2 сервису. Несколько хостов, разделенных пробелами, может быть перечислено. По умолчанию шаблон "*" означает все компьютеры.

QuietMode no
Опция "QuietMode" определяет будет ли система запущена в тихом режиме. Эта опция должна быть установлена в "no", потому что в бесшумном режиме, никакой информации не заносится в с системные журналы регистрации, за исключением фатальных ошибок. Так как мы хотим иметь информацию о пользовательских сессиях, нам надо установить опцию в "no".

Настройка SSH2 для использования с TCP-Wrappers inetd супер сервером.

Tcp-Wrappers может быть использован для запуска и остановки вашего ssh2 сервиса. Перед выполнением inetd читает информацию из конфигурационного файла /etc/inetd.conf.

Шаг 1.

Редактируйте файл inetd.conf (vi /etc/inetd.conf) и добавьте в него следующую строку:

ssh stream tcp nowait root /usr/sbin/tcpd sshd -i

ЗАМЕЧАНИЕ. Параметр "-i" говорит, что sshd должен запускаться из inetd.

После редактирования файла "etc/inetd.conf" отправьте демону inetd сигнал SIGHUP, чтобы он перечитал файл конфигурации.

[root@deep /]# killall -HUP inetd
Шаг 2.

Редактируйте файл hosts.allow file (vi /etc/hosts.allow) и добавьте следующую строку:

sshd: 192.168.1.4 win.openna.com

Которая значит, что клиенту с IP адресом "192.168.1.4" и именем компьютера "win.openna.com" разрешен ssh доступ к серверу.

Эти строки "демона" (для tcp-wrappers) используются sshd2:
ssh,ssh2 (может вызываться по имени ssh2 (обычно используется ssh)).
sshdfwd-X11 (если вы хотите разрешить/запретить X11-forwarding).
sshdfwd-<port-number> (для tcp-forwarding).
sshdfwd-<port-name> (номер порта определен в /etc/services. Ипсользуемый в tcp-forwarding).

ЗАМЕЧАНИЕ. Если вы решили переключиться на использование ssh, сделайте так, чтобы вы инсталлировали и использовали его на всех ваших серверах. Наличие десяти защищенных серверов и одного незащищенного бесполезно.

Конфигурация файла "/etc/pam.d/ssh".

Для лучшей безопасности вашего ssh2 сервера, вы можете настроить его на аутентификацию через PAM. Чтобы сделать это, надо создать файл "/etc/pam.d/ssh" file.

Создайте файл ssh (touch /etc/pam.d/ssh) и добавьте или измените, если нужно:

#%PAM-1.0
auth required /lib/security/pam_pwdb.so shadow
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_pwdb.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_pwdb.so use_authtok nullok md5 shadow
session required /lib/security/pam_pwdb.so

Дополнительная документация

Для получения большей информации, вот несколько man-страниц, которые можно прочитать:

$ man ssh-add2 (1) - добавляет identities агенту аутентификации
$ man ssh-agent2 (1) - агент аутентификации
$ man ssh-keygen2 (1) - генератор пары аутентификационных ключей
$ man ssh2 (1) - secure shell клиент (программа удаленного подключения)
$ man sshd2 (8) - secure shell демон

Конфигурирование SSH2 для каждого пользователя

Шаг 1.

Создайте, локально, ваш личный и публичный ключи:

[root@deep /]# su admin
[admin@deep /]$ ssh-keygen2
Generating 1024-bit dsa key pair
6 Oo..oOo.oOo.
Key generated.
1024-bit dsa, admin@deep.openna.com, Sun Feb 13 2000 05:33:38 -0500
Passphrase :
Again :
Private key saved to /home/admin/.ssh2/id_dsa_1024_a
Public key saved to /home/admin/.ssh2/id_dsa_1024_a.pub
Шаг 2

Создайте файл "identification" в вашем каталоге "~/.ssh2" на локальной машине:

[admin@deep]$ cd ~/.ssh2
[admin@deep .ssh2]$ echo "IdKey id_dsa_1024_a" > identification

ЗАМЕЧАНИЕ. Опционально можно создать идентификационный файл и на удаленной машине. Он содержит имя приватного ключа, который используется при аутентификации.

Шаг 3

Копируйте ваш публичный ключ с локальной машины (id_dsa_1024_a.pub) на удаленную в каталог "~/.ssh2" под именем, "Local.pub".

Шаг 4

Создайте файл "authorization" в каталоге "~/.ssh2" на удаленной машине:

[admin@remote .ssh2]$ touch authorization

ЗАМЕЧАНИЕ. "~/" означает ваш домашний каталог.

Шаг 5

Добавьте следующую строку в файл "authorization" на удаленной машине:

[admin@remote .ssh2]$ vi authorization key Local.pub

Утилиты пользователя SSH2

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

Ssh2

"ssh2" (Secure Shell) команда предоставляющая безопасную шифрованную связь между двумя недоверенными компьютерами через небезопасную сеть. Эта программа для безопасного подключения к удаленной машине и выполнения команд на ней. Она заменяет такие небезопасные программы, как telnet, rlogin, rcp, rdist и rsh.

Для подключения к удаленной машине используйте команду:

[root@deep /]# ssh2 -l <login_name> <hostname>

например:

[root@deep /]# ssh2 -l admin www.openna.com
Passphrase for key "/home/admin/.ssh2/id_dsa_1024_a" with comment "1024-bit dsa,
admin@deep.openna.com, Tue Oct 19 1999 14:31:40 -0400":
admin's password:
Last login: Tue Oct 19 1999 18:13:00 -0400 from deep.openna.com
No mail.
[admin@www admin]$

Где <login_name> это имя, которое вы используете для соединения с ssh2 сервером и <hostname> это имя удаленного ssh2 сервера.

sftp2

Утилита sftp2 (Secure File Transfer) - это ftp-подобный клиент, который предоставляет возможность передачи файлов через сеть. До того, как начать использовать sftp2, вы должны подключиться к ssh2 серверу.

Для ftp через ssh2, используйте следующую команду:

[admin@deep /]$ sftp2 <hostname>

Например:

[admin@deep /]$ sftp2 www.openna.com
local path : /home/admin
Passphrase for key "/home/admin/.ssh2/id_dsa_1024_a" with comment "1024-bit dsa,
admin@deep.openna.com, Tue Oct 19 1999 14:31:40 -0400":
admin's password:
admin's password:
remote path : /home/admin
sftp>

Где <hostname> - это имя удаленного сервера с которым вы хотите обмениваться файлами посредством sftp.

Инсталлированные файлы

> /etc/pam.d/ssh
> /etc/ssh2
> /etc/ssh2/hostkey
> /etc/ssh2/hostkey.pub
> /etc/ssh2/sshd2_config
> /etc/ssh2/ssh2_config
> /root/.ssh2
> /root/.ssh2/random_seed
> /root/ssh2
> /usr/man/man1/ssh2.1
> /usr/man/man1/ssh-keygen2.1
> /usr/man/man1/ssh-add2.1
> /usr/man/man1/ssh-agent2.1
> /usr/man/man1/scp2.1
> /usr/man/man1/sftp2.1
> /usr/man/man1/ssh.1
> /usr/man/man1/ssh-add.1
> /usr/man/man1/ssh-agent.1
> /usr/man/man1/ssh-keygen.1
> /usr/man/man1/scp.1
> /usr/man/man1/sftp.1
> /usr/man/man8/sshd2.8
> /usr/man/man8/sshd.8
> /usr/bin/ssh2
> /usr/bin/scp2
> /usr/bin/sftp2
> /usr/bin/sftp-server2
> /usr/bin/ssh-agent2
> /usr/bin/ssh-keygen2
> /usr/bin/ssh-signer2
> /usr/bin/ssh-add2
> /usr/bin/ssh
> /usr/bin/ssh-agent
> /usr/bin/ssh-add
> /usr/bin/ssh-askpass
> /usr/bin/ssh-keygen
> /usr/bin/scp
> /usr/bin/sftp
> /usr/bin/sftp-server
> /usr/bin/ssh-signer
> /usr/sbin/sshd2
> /usr/sbin/sshd

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

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

Глава 12 Программы обеспечения безопасности (Целостность системы) - Tripwire 2.2.1

В этой главе
Linux Tripwire 2.2.1
Конфигурации
Организация защиты Tripwire для Linux
Команды
Linux Tripwire ASR 1.3.1
Конфигурации
Организация защиты Tripwire
Команды

Linux Tripwire 2.2.1

Инсталляция типичного Red Hat Linux сервера включает в среднем около 30400 файлов. Администратор не в состоянии проконтролировать целостность всех системных файлов, и если хакер получит доступ к серверу и сможет модифицировать какие-либо файлы, то вы можете об этом не узнать. Для решения этих проблем было создано несколько программ.

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

Как только такая базовая база данных создана, администратор может запускать Tripwire для проверки целостности системы в любое время. Она сканирует текущую систему и сравнивает результаты со своей базой. Tripwire определяет и рапортует о любых дополнения, удаления и изменениях произошедших среди контролируемых ею файлов. Если изменения правильные, то администратор может обновить базу данных новой информацией. Если были найдены злонамеренный изменения, то администратор будет знать на какую часть системы было оказано воздействие.

Эта версия Tripwire имеет значительные изменения по сравнению с предыдущей. Некоторые расширения включают:

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
Tripwire версии 2.2.1

Пакеты.
Домашняя страница Tripwire : http://www.tripwiresecurity.com/
Вы должны скачать: Tripwire_221_for_Linux_x86_tar.gz

Раскройте тарбол:

[root@deep /]# cp Tripwire_version_for_Linux_x86_tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf Tripwire_version_for_Linux_x86_tar.gz

ЗАМЕЧАНИЕ. После раскрытия архива Tripwire в каталоге "/var/tmp" вы увидите файлы, связанные с Tripwire: License.txt, README, Release_Notes, install.cfg, install.sh, созданный каталог и Tripwire_version_for_Linux_x86_tar.gz.

Конфигурирование файла "/var/tmp/install.cfg".

Помните, что Tripwire не является программой с открытыми исходными кодами, поэтому процесс компиляции не выглядит как обычно; вместо этого, вы должны модифицировать файл "install.cfg" (который будет автоматически инсталлировать Tripwire), чтобы определить в нем все необходимые пути. Мы должны это сделать так, чтобы он был совместим со структурой файловой системы Red Hat и исполняемые файлы Tripwire попали под переменную PATH.

Шаг 1

Редактируйте файл install.cfg (vi install.cfg) и измените этот файл следующим образом:

#
# install.cfg
#
# default install.cfg for:
# Tripwire(R) 2.2.1 for Unix
#
# NOTE: Это Bourne shell скрипт, который ваши запоминает инсталляционные
# параметры. Инсталлятор будет выполнять этот файл, чтобы создать
# ваш конфигурационный файл, а также определит место любой
# специальной конфигурации нужной для инсталляции.
# Защитите этот файл, потому что в нем могут разместить вредоносный
# код.
#
# Определите ваш корневой каталог для инсталляции, установив TWROOT= во
# что-нибудь иное, чем /usr/TSS.
#
#=======================================================
# Если CLOBBER истина, то существующие файлы будут переписываться.
# Если CLOBBER ложь, то существующие файлы не переписываются.
CLOBBER=false
# Корень дерева каталогов TSS.
TWROOT="/usr"
# Исполняемые файлы Tripwire хранятся в TWBIN.
TWBIN="${TWROOT}/bin"
# Файлы политик Tripwire хранятся в TWPOLICY.
TWPOLICY="${TWROOT}/TSS/policy"
# Руководства пользователя (manual pages) Tripwire хранятся в TWMAN.
TWMAN="${TWROOT}/man"
# Файлы базы данных Tripwire хранятся в TWDB.
TWDB="${TWROOT}/TSS/db"
# Файлы ключей сайта Tripwire хранятся в TWSITEKEYDIR.
TWSITEKEYDIR="${TWROOT}/TSS/key"
# Файлы локальных ключей Tripwire хранятся в TWLOCALKEYDIR.
TWLOCALKEYDIR="${TWROOT}/TSS/key"
# Файлы отчетов Tripwire хранятся TWREPORT.
TWREPORT="${TWROOT}/TSS/report"
# Определяется текстовый редактор по умолчанию для Tripwire.
TWEDITOR="/bin/vi"
# TWLATEPROMTING контролирует место когда tripwire спрашивает пароль.
TWLATEPROMPTING=false
# TWLOOSEDIRCHK определяет должен ли проверяться каталог на
# свойства которые могут изменяться, когда файлы в нем проверена.
TWLOOSEDIRCHK=false
# TWMAILNOVIOLATIONS определяет должен ли Tripwire посылать отчет 
# когда при проверки целостности с опцией --email-report нарушений найдено
# не было. Это позволяет администратору узнать, что проверка была
# произведена.
TWMAILNOVIOLATIONS=true
# TWEMAILREPORTLEVEL определяет словесное наполнение e-mail отчетов.
TWEMAILREPORTLEVEL=3
# TWREPORTLEVEL определяет словесное наполнение печатаемых отчетов.
TWREPORTLEVEL=3
# TWSYSLOG определяет должен ли Tripwire регистрировать события в
# системные файлы регистраций
TWSYSLOG=false
#####################################
# Почтовые опции - Выберите подходящий
# метод и комментируйте другие секции
#####################################
#####################################
# Опции SENDMAIL - по умолчанию
#
# SENDMAIL или SMTP может быть использованы для отправки отчетов
# через TWMAILMETHOD.
# Определяет какая программа sendmail используется.
#####################################
TWMAILMETHOD=SENDMAIL
TWMAILPROGRAM="/usr/lib/sendmail -oi -t"
#####################################
# Опции SMTP
#
# TWSMTPHOST выбирает SMTP сервер, используемый для отправки отчетов.
# SMTPPORT выбирает SMTP порт, используемой почтовой программой SMTP.
#####################################
# TWMAILMETHOD=SMTP
# TWSMTPHOST="mail.domain.com"
# TWSMTPPORT=25
#####################################################################
###########
# Copyright (C) 1998-2000 Tripwire (R) Security Systems, Inc. Tripwire (R) is a
# registered trademark of the Purdue Research Foundation and is licensed
# exclusively to Tripwire (R) Security Systems, Inc.
#####################################################################
###########

ЗАМЕЧАНИЕ. Файл "install.cfg" используются Bourne shell скриптом при инсталляции для определения конфигурационных переменных. Они определяют места куда устанавливаются файлы и предпринимаемые действия, если подобные файлы существуют.

Шаг 2

Сейчас мы должны запустить инсталляционный скрипт для установки исполняемых и сопутствующих файлов Tripwire.

Для запуска инсталляционного скрипта и установки Tripwire, используйте следующую команду:

[root@deep tmp]# ./install.sh

Замечание. Файл "install.sh" - это инсталляционный скрипт, который запускается для начала установки Tripwire.

Во время инсталляции вы будете:

  1. Отвечать на некоторые вопросы, связанные с инсталляцией.
  2. Задавать две парольные фразы (pass phrases) соответственно для ключа сервера и локального ключа.
Шаг 3

Когда Tripwire установится на вашу систему, она скопирует файлы "License.txt", "README" и "Release_Notes" в каталог "/usr". Конечно, после прочтения, вы можете спокойно удалить их следующей командой:

[root@deep /usr]# rm -f /usr/License.txt README Release_Notes

Очистка после работы. [root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf License.txt README Release-Notes install.cfg install.sh pkg/Tripwire_version_for_Linux_x86_tar.gz

Команда "rm", использованная выше, будет удалять все исходные коды, которые мы использовали при компиляции и инсталляции Tripwire. Она также удалит .tgz архив.

Конфигурации.

Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файл из архива и измените его под свои требования. Затем поместите его в соответствующее место на сервере, так как это показано ниже. Файл с конфигурациями вы можете скачать с адреса:
http://www.openna.com/books/floppy.tgz

Для запуска Tripwire под Linux следующий файл должен быть создан или скопирован в требуемый каталог:

Копируйте файл twpol.txt в каталог "/usr/TSS/policy".

Настройка файла "/usr/TSS/policy/twpol.txt".

"/usr/TSS/policy/twpol.txt" - это текстовый файл политик Tripwire, где вы можете определить файлы и каталог для проверки. Обратите внимание, что при редактировании этого файла необходимы обширные испытания и опыты, прежде чем удастся получить работающие файлы отчетов. Следующий работающий пример вы можете использовать, как стартовую площадку для ваших настроек.

Шаг 1.

Вы должны редактировать файл политик, заданный по умолчанию, для получения вашей версии. Файл "policyguide.txt" в каталоге "/usr/TSS/policy" может вам помочь. Откройте файл "twpol.txt" в текстовом редакторе (vi /usr/TSS/policy/twpol.txt) и измените все, что нужно:

@@section GLOBAL
TWROOT="/usr";
TWBIN="/usr/bin";
TWPOL="/usr/TSS/policy";
TWDB="/usr/TSS/db";
TWSKEY="/usr/TSS/key";
TWLKEY="/usr/TSS/key";
TWREPORT="/usr/TSS/report";
HOSTNAME=deep.openna.com;
@@section FS
SEC_CRIT = $(IgnoreNone)-SHa; # Критические файлы - мы не можем пропустить любые изменения.
SEC_SUID = $(IgnoreNone)-SHa; # Исполняемые с установленными флагами SUID или SGID.
SEC_TCB = $(ReadOnly); # Члены базы доверенных компьютеров (Trusted Computing Base).
SEC_BIN = $(ReadOnly); # Исполняемые, которые не должны изменяться
SEC_CONFIG = $(Dynamic); # Конфигурационные файлы, которые изменяются редко, но часто читаются.
SEC_LOG = $(Growing); # Файлы, которые растут, но которые никогда не должны изменять монопольное использование.
SEC_INVARIANT = +pug; # Каталоги, которые никогда не изменяют права доступа и владельца.
SIG_LOW = 33; # Не критичные файлы, которые имеют минимальный риск при проведении атаки
SIG_MED = 66; # Не критичные файлы, которые важны при ударе по безопасности
SIG_HI = 100; # Критические файлы, которые являются важным местом уязвимости
# Исполняемы файлы Tripwire
(emailto = admin@openna.com, rulename = "Tripwire Binaries", severity = 
$(SIG_HI))
{
$(TWBIN)/siggen -> $(ReadOnly);
$(TWBIN)/tripwire -> $(ReadOnly);
$(TWBIN)/twadmin -> $(ReadOnly);
$(TWBIN)/twprint -> $(ReadOnly);
}
# Файлы данных Tripwire - конфигурационные файлы, файлы политик, ключи, 
отчеты, базы данных
(emailto = admin@openna.com, rulename = "Tripwire Data Files", severity = 
$(SIG_HI))
{
# Замечание: Удаляем атрибут inode, потому что когда Tripwire создает
# резервные копии он переименовывает старый файл и создает новый
# (который будет иметь новый номер inode). Оставляем inode включенным
# для ключей, которые никогда не должны изменяться.
# ЗАМЕЧАНИЕ. это правило будет срабатывать при первой проверки целостности 
# после инициализации базы данных и каждый раз при проверке целостности
# позже, пока не будет выполнена модификация базы данных, так как база
# данных не будет существовать до этого момента
$(TWDB) -> $(Dynamic) -i;
$(TWPOL)/tw.pol -> $(SEC_BIN) -i;
$(TWBIN)/tw.cfg -> $(SEC_BIN) -i;
$(TWLKEY)/$(HOSTNAME)-local.key -> $(SEC_BIN) ;
$(TWSKEY)/site.key -> $(SEC_BIN) ;
# не сканировать персональные отчеты
$(TWREPORT) -> $(Dynamic) (recurse=0);
}
# Эти файлы критичны для корректной загрузки системы.
(emailto = admin@openna.com, rulename = "Critical system boot files", severity = 
100)
{
/boot -> $(SEC_CRIT) ;
!/boot/System.map ;
!/boot/module-info ;
}
# Эти файлы изменяют поведение бюджета root
(emailto = admin@openna.com, rulename = "Root config files", severity = 100)
{
/root -> $(SEC_CRIT) ;
/root/.bash_history -> $(SEC_LOG) ;
}
# Общедоступные каталоги, которые должны оставаться статическими 
# относительно владельца и группы
(emailto = admin@openna.com, rulename = "Invariant Directories", severity = 
$(SIG_MED))
{
/ -> $(SEC_INVARIANT) (recurse = 0);
/home -> $(SEC_INVARIANT) (recurse = 0);
/etc -> $(SEC_INVARIANT) (recurse = 0);
/chroot -> $(SEC_INVARIANT) (recurse = 0);
/cache -> $(SEC_INVARIANT) (recurse = 0);
}
(emailto = admin@openna.com, rulename = "Shell Binaries")
{
/bin/bsh -> $(SEC_BIN);
/bin/csh -> $(SEC_BIN);
/bin/sh -> $(SEC_BIN);
}
# Месторасположение критичных исполняемых файлов
(emailto = admin@openna.com, rulename = "OS executables and libraries", severity 
= $(SIG_HI))
{
/bin -> $(ReadOnly) ;
/lib -> $(ReadOnly) ;
}
# Локальные файлы
(emailto = admin@openna.com, rulename = "User binaries", severity = 
$(SIG_MED))
{
/sbin -> $(SEC_BIN) (recurse = 1);
/usr/sbin -> $(SEC_BIN) (recurse = 1);
/usr/bin -> $(SEC_BIN) (recurse = 1);
}
# Каталоги с временными файлами
(emailto = admin@openna.com, rulename = "Temporary directories", recurse = false, 
severity =
$(SIG_LOW))
{
/usr/tmp -> $(SEC_INVARIANT);
/var/tmp -> $(SEC_INVARIANT);
/tmp -> $(SEC_INVARIANT);
}
# Библиотеки
(emailto = admin@openna.com, rulename = "Libraries", severity = $(SIG_MED))
{
/usr/lib -> $(SEC_BIN);
}
# Включаемы файлы (Include)
(emailto = admin@openna.com, rulename = "OS Development Files", severity = 
$(SIG_MED))
{
/usr/include -> $(SEC_BIN);
}
# Разделяемые (Shared)
(emailto = admin@openna.com, rulename = "OS Shared Files", severity = 
$(SIG_MED))
{
/usr/share -> $(SEC_BIN);
}
# Заголовочные файлы ядра
(emailto = admin@openna.com, rulename = "Kernel Headers Files", severity = $( 
SIG_HI))
{
/usr/src/linux-2.2.14 -> $(SEC_BIN);
}
# setuid/setgid root программы
(emailto = admin@openna.com, rulename = "setuid/setgid", severity = $(SIG_HI))
{
/bin/su -> $(SEC_SUID);
/sbin/pwdb_chkpwd -> $(SEC_SUID);
/sbin/dump -> $(SEC_SUID);
/sbin/restore -> $(SEC_SUID);
/usr/bin/at -> $(SEC_SUID);
/usr/bin/passwd -> $(SEC_SUID);
/usr/bin/suidperl -> $(SEC_SUID);
/usr/bin/crontab -> $(SEC_SUID);
/usr/sbin/sendmail -> $(SEC_SUID);
/usr/bin/man -> $(SEC_SUID);
/usr/bin/sperl5.00503 -> $(SEC_SUID);
/usr/bin/slocate -> $(SEC_SUID);
/usr/sbin/utempter -> $(SEC_SUID);
/sbin/netreport -> $(SEC_SUID);
}
(emailto = admin@openna.com, rulename = "Configuration Files")
{
/etc/hosts -> $(SEC_CONFIG);
/etc/inetd.conf -> $(SEC_CONFIG);
/etc/initlog.conf -> $(SEC_CONFIG);
/etc/inittab -> $(SEC_CONFIG);
/etc/resolv.conf -> $(SEC_CONFIG);
/etc/syslog.conf -> $(SEC_CONFIG);
}
(emailto = admin@openna.com, rulename = "Security Control")
{
/etc/group -> $(SEC_CRIT);
/etc/security/ -> $(SEC_CRIT);
/lib/security/ -> $(SEC_CRIT);
/var/spool/cron -> $(SEC_CRIT);
}
(emailto = admin@openna.com, rulename = "Login Scripts")
{
/etc/csh.login -> $(SEC_CONFIG);
/etc/profile -> $(SEC_CONFIG);
}
# Эти файлы изменяются при каждой загрузке системы
(emailto = admin@openna.com, rulename = "System boot changes", severity = 
$(SIG_HI))
{
/dev/log -> $(Dynamic) ;
/dev/cua0 -> $(Dynamic) ;
/dev/console -> $(Dynamic) ;
/dev/tty2 -> $(Dynamic) ; # tty devices
/dev/tty3 -> $(Dynamic) ; # are extremely
/dev/tty4 -> $(Dynamic) ; # variable
/dev/tty5 -> $(Dynamic) ;
/dev/tty6 -> $(Dynamic) ;
/dev/urandom -> $(Dynamic) ;
/dev/initctl -> $(Dynamic) ;
/var/lock/subsys -> $(Dynamic) ;
/var/run -> $(Dynamic) ; # daemon PIDs
/var/log -> $(Dynamic) ;
/etc/ioctl.save -> $(Dynamic) ;
/etc/.pwd.lock -> $(Dynamic) ;
/etc/mtab -> $(Dynamic) ;
/lib/modules -> $(Dynamic) ;
}
# Критические конфигурационные файлы
(emailto = admin@openna.com, rulename = "Critical configuration files", severity = 
$(SIG_HI))
{
/etc/conf.modules -> $(ReadOnly) ;
/etc/crontab -> $(ReadOnly) ;
/etc/cron.hourly -> $(ReadOnly) ;
/etc/cron.daily -> $(ReadOnly) ;
/etc/cron.weekly -> $(ReadOnly) ;
/etc/cron.monthly -> $(ReadOnly) ;
/etc/default -> $(ReadOnly) ;
/etc/fstab -> $(ReadOnly) ;
/etc/group- -> $(ReadOnly) ; # изменения должны быть не частыми
/etc/host.conf -> $(ReadOnly) ;
/etc/hosts.allow -> $(ReadOnly) ;
/etc/hosts.deny -> $(ReadOnly) ;
/etc/lilo.conf -> $(ReadOnly) ;
/etc/logrotate.conf -> $(ReadOnly) ;
/etc/pwdb.conf -> $(ReadOnly) ;
/etc/securetty -> $(ReadOnly) ;
/etc/sendmail.cf -> $(ReadOnly) ;
/etc/protocols -> $(ReadOnly) ;
/etc/services -> $(ReadOnly) ;
/etc/rc.d/init.d -> $(ReadOnly) ;
/etc/rc.d -> $(ReadOnly) ;
/etc/motd -> $(ReadOnly) ;
/etc/passwd -> $(ReadOnly) ;
/etc/passwd- -> $(ReadOnly) ;
/etc/profile.d -> $(ReadOnly) ;
/etc/rpc -> $(ReadOnly) ;
/etc/sysconfig -> $(ReadOnly) ;
/etc/shells -> $(ReadOnly) ;
/etc/nsswitch.conf -> $(ReadOnly) ;
}
# Критичные устройства
(emailto = admin@openna.com, rulename = "Critical devices", severity = $(SIG_HI), 
recurse = false)
{
/dev/kmem -> $(Device) ;
/dev/mem -> $(Device) ;
/dev/null -> $(Device) ;
/dev/zero -> $(Device) ;
/proc/devices -> $(Device) ;
/proc/net -> $(Device) ;
/proc/tty -> $(Device) ;
/proc/sys -> $(Device) ;
/proc/cpuinfo -> $(Device) ;
/proc/modules -> $(Device) ;
/proc/mounts -> $(Device) ;
/proc/dma -> $(Device) ;
/proc/filesystems -> $(Device) ;
/proc/ide -> $(Device) ;
/proc/interrupts -> $(Device) ;
/proc/ioports -> $(Device) ;
/proc/scsi -> $(Device) ;
/proc/kcore -> $(Device) ;
/proc/self -> $(Device) ;
/proc/kmsg -> $(Device) ;
/proc/stat -> $(Device) ;
/proc/ksyms -> $(Device) ;
/proc/loadavg -> $(Device) ;
/proc/uptime -> $(Device) ;
/proc/locks -> $(Device) ;
/proc/version -> $(Device) ;
/proc/meminfo -> $(Device) ;
/proc/cmdline -> $(Device) ;
/proc/misc -> $(Device) ;
}

ЗАМЕЧАНИЕ. Это пример файла политик, который мы вам предоставляем, конечно, вы должны модифицировать его под вашу систему.

Шаг 2

Так как мы уже готовы использовать наш файл политик в первый раз, инсталлируйте его следующей командой:

[root@deep /]# twadmin --create-polfile /usr/TSS/policy/twpol.txt
Please enter your site passphrase:
Wrote policy file: /usr/TSS/policy/tw.pol

Организация защиты Tripwire для Linux

Важно удостовериться, что целостность системы уже не была нарушена. Для максимальной безопасности вашей основной базы данных, вы должны инсталлировать систему с оригинальных носителей. Также рекомендуется удалить текстовую копию конфигурационного файла Tripwire "twcfg.txt", расположенного в каталоге "/usr/bin", для сокрытия месторасположения файлов Tripwire и предотвращения создания альтернативного конфигурационного файла.

[root@deep /]# rm -f /usr/bin/twcfg.txt

Дополнительная документация.

Здесь перечислены некоторые страницы руководства (man), которые могут дать вам дополнительную информацию.

$ siggen (8) - сбор сигнатур кодов для Tripwire
$ tripwire (8) - программа проверки целостности файлов UNIX систем
$ twadmin (8) - административная и инструментальная программа Tripwire
$ twconfig (4) - конфигурационный файл Tripwire
$ twfiles (5) - краткий обзор фалов используемых Tripwire и процесса
резервного копирования файлов
$ twintro (8) - введение в Tripwire
$ twpolicy (4) - файл политик Tripwire
$ twprint (8) - база данных и печать отчетов Tripwire

Команды.

Ниже приведены команды из тех, что мы часто используем в регулярной работе, но из существует много больше. Читайте страницы руководства (man) для получения большей информации.

Создание базы данных в первый раз.

Так как ваш файл с политиками инсталлирован, то наступило время создать базу данных объектов файловой системы, базирующуюся на файле с политиками. Эта база данных будет выступать как основание для дальнейших проверок целостности.

Синтаксис для перехода в режим инициализации базы данных:

[root@deep /]# tripwire { --init }

Инициализируем вашу базу данных:

[root@deep /]# tripwire --init
Please enter your local passphrase:
Parsing policy file: /usr/TSS/policy/tw.pol
Generating the database...
*** Processing Unix File System ***
Wrote database file: /usr/TSS/db/deep.openna.com.twd
The database was successfully generated.

ЗАМЕЧАНИЕ. Когда команда выполнена, база данных готова и вы можете выполнить проверку целостности файловой системы и просматривать отчеты.

Запуск режима проверки целостности и интерактивного режима проверки.

Tripwire имеет возможность называемую "Режим проверки целостности". Сейчас, когда наша база данных инициализована, мы можем использовать этот режим для сравнения текущих объектов файловой системы с их свойствами, записанными в базу данных Tripwire. Все файлы с нарушениями будут выводится в stdout; файл генератор отчетов будет создан и может быть использован в дальнейшем с помощью утилиты twprint.

Синтаксис для режима проверки целостности:

[root@deep /]# tripwire { --check }

Для запуска проверки целостности используйте команду:

[root@deep /]# tripwire --check

Tripwire может быть также запущен в режиме "Интерактивный режим проверки". В этом режиме вы можете автоматически обновлять ваши изменения с терминала.

Для запуска интерактивного режима проверки используйте команду:

[root@deep /]# tripwire --check --interactive

В Tripwire есть опция email, которая позволяет отправлять письма. Эта опция определяет, что отчет должен быть отправлен по электронной почте адресату, определенному в файле политик.

Для запуска режима проверки целостности и отправки отчета по электронной почте, используйте команду:

[root@deep /]# tripwire --check --email-report Обновление базы данных после проверки целостности.

Если вы решили использовать "Режим проверки целостности " вместо "Интерактивного режима проверки ", вы должны обновить базу данных Tripwire, используя возможность "Режим обновления базы данных". Этот процесс позволяет вам сэкономить время, обновляя базу данных без ее полного пересоздания, и также допускается выборочное обновление, которое не может быть осуществлена через восстановление.

Синтаксис режима обновления базы данных:

[root@deep /]# tripwire { --update -r}

Для обновления базы данных дайте команду:

[root@deep /]# tripwire --update -r /usr/TSS/report/deep.openna.com-200001-021854.twr

где "-r" читает определенный файл отчет (deep.openna.com-200001-021854.twr). Эта опция требуется, так как переменная REPORTFILE в текущем файле конфигурации использует $(DATE).

ЗАМЕЧАНИЕ: В режиме обновления базы данных или режиме интерактивной проверки, Tripwire выводит отчет на вашем терминале с местом для отметки напротив каждого нарушения политики. Вы можете принять изменения в файловой системе установив знак "x" или не обновлять базу данных убрав "x". После того, как вы вышли из редактора и ввели локальную парольную фразу, Tripwire будет обновлять и записывать изменения.

Обновление файла с политиками.

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

Синтаксис для режима обновления политик:

[root@deep /]# tripwire { --update-policy /path/to/new/policy/file}

Для обновления файла с политиками используйте команду:

[root@deep /]# tripwire --update-policy /usr/TSS/policy/newtwpol.txt

Режим обновления политик по умолчанию запускается с опцией "--secure-mode high". Вы можете столкнуться с ошибкой когда запускаете Tripwire с этой опцией, если файловая система изменилась по сравнению с последним обновлением базы данных, и если эти изменения будут причиной нарушений по новым правилам политики. После уточнения, что все отчеты о нарушениях в high security режиме санкционированы, вы можете обновить файл с политиками в low security режиме для решения этой проблемы:

Для обновления файла политик в low security режиме используйте команду:

[root@deep /]# tripwire --update-policy --secure-mode low /usr/TSS/policy/newtwpol.txt

Проинсталлированные файлы.

> /usr/TSS
> /usr/bin
> /usr/bin/siggen
> /usr/bin/twprint
> /usr/bin/twadmin
> /usr/bin/tripwire
> /usr/bin/twcfg.txt
> /usr/bin/tw.cfg
> /usr/TSS/policy
> /usr/TSS/policy/policyguide.txt
> /usr/TSS/policy/twpol.txt
> /usr/TSS/policy/tw.pol
> /usr/TSS/policy/twpol.txt.bak
> /usr/TSS/report
> /usr/TSS/db
> /usr/TSS/key
> /usr/TSS/key/site.key
> /usr/TSS/key/deep.openna.com-local.key
> /usr/man
> /usr/man/man4
> /usr/man/man4/twconfig.4
> /usr/man/man4/twpolicy.4
> /usr/man/man5
> /usr/man/man5/twfiles.5
> /usr/man/man8
> /usr/man/man8/siggen.8
> /usr/man/man8/tripwire.8
> /usr/man/man8/twadmin.8
> /usr/man/man8/twintro.8
> /usr/man/man8/twprint.8
> /usr/README
> /usr/Release_Notes
> /usr/License.txt

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

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

Глава 12 Программы обеспечения безопасности (Целостность системы) - Tripwire ASR 1.3.1

В этой главе
Linux Tripwire 2.2.1
Конфигурации
Организация защиты Tripwire для Linux
Команды
Linux Tripwire ASR 1.3.1
Конфигурации
Организация защиты Tripwire
Команды

Linux Tripwire ASR 1.3.1

Tripwire ASR 1.3.1 это "Academic Source Release (ASR)" программы Tripwire. Лично я предпочитаю версию 1.3.1 версии 2.2.1, так как она может быть скомпилирована и инсталлирована без каких-либо проблем с совместимостью на всех версиях Linux

В задачах Tripwire ASR написано:

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

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

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
Tripwire версии 1.3.1-1

Пакеты.
Домашняя страница Tripwire: http://www.tripwiresecurity.com/
Вы должны скачать: Tripwire-1.3.1-1.tar.gz

Тарболы.

Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции Tripwire и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,

До инсталляции:
find /* > Tripwire1

После инсталляции:
find /* > Tripwire2

Для получения списка установленных файлов:
diff Tripwire1 Tripwire2 > Tripwire-Installed

Раскройте тарбол:

[root@deep /]# cp Tripwire-version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf Tripwire-version.tar.gz

Компиляция и оптимизация.

Редактируйте файл utils.c (vi +462 src/utils.c) и измените следующую строку:

else if (iscntrl(*pcin)) {
Должна читаться:
else if (!(*pcin & 0x80) && iscntrl(*pcin)) {

Редактируйте файл config.parse.c file (vi +356 src/config.parse.c) и измените следующую строку:

rewind(fpout);
Должна читаться:
else {
rewind(fpin);
}


Редактируйте файл config.h (vi +106 include/config.h) и измените следующие строки:

#define CONFIG_PATH "/usr/local/bin/tw"
#define DATABASE_PATH "/var/tripwire"

Должны читаться:
#define CONFIG_PATH "/etc"
#define DATABASE_PATH "/var/spool/tripwire"

Редактируйте файл config.h (vi +165 include/config.h) и измените следующую строку:

#define TEMPFILE_TEMPLATE "/tmp/twzXXXXXX"
Должна читаться:
#define TEMPFILE_TEMPLATE "/var/tmp/.twzXXXXXX"

Редактируйте файл config.pre.y (vi +66 src/config.pre.y) и измените следующую строку:

#ifdef TW_LINUX
Должна читаться:
#ifdef TW_LINUX_UNDEF

Редактируйте файл Makefile (vi +13 Makefile) и измените следующие строки:

DESTDIR = /usr/local/bin/tw
Должна читаться:
DESTDIR = /usr/sbin

DATADIR = /var/tripwire
Должна читаться:
DATADIR = /var/spool/tripwire

LEX = lex
Должна читаться:
LEX = flex

CC=gcc
Должна читаться:
CC=egcs

CFLAGS = -O
Должна читаться:
CFLAGS = -O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions

[root@deep tw_ASR_1.3.1_src]# make
[root@deep tw_ASR_1.3.1_src]# make install
[root@deep tw_ASR_1.3.1_src]# chmod 700 /var/spool/tripwire/
[root@deep tw_ASR_1.3.1_src]# chmod 500 /usr/sbin/tripwire
[root@deep tw_ASR_1.3.1_src]# chmod 500 /usr/sbin/siggen
[root@deep tw_ASR_1.3.1_src]# rm -f /usr/sbin/tw.config

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

Команда "chmod" изменяет права доступа по умолчанию к каталогу "tripwire" на 700 (drwx------), чтение, запись и исполнение только для пользователя "root". И изменяет права доступа на чтение и исполнение только пользователем root (- r-x------) для программ "/usr/sbin/tripwire" и "/usr/sbin/siggen". Команда "rm" используется для удаления файла "tw.config" расположенного в "/usr/sbin". Нам этот файл не нужен, так как мы создадим подобный новый файл позже в каталоге "/etc".

Очистка после работы.
[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf tw_ASR_version/ Tripwire-version.tar.gz

Команда "rm", использованная выше, будет удалять все исходные коды, которые мы использовали при компиляции и инсталляции Tripwire. Она также удалит .tar.gz архив.

Конфигурации.

Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файл из архива и измените его под свои требования. Затем поместите его в соответствующее место на сервере, так как это показано ниже. Файл с конфигурациями вы можете скачать с адреса:
http://www.openna.com/books/floppy.tgz

Для запуска Tripwire следующие файлы должны быть созданы или скопированы в нужный каталог:

Копируйте файл tw.config в "/etc".
Копируйте скрипт tripwire.verify в каталог "/etc/cron.daily".

Вы можете взять эти файлы из нашего архива floppy.tgz.

Настройка файла "/etc/tw.config"

"/etc/tw.config" это конфигурационный файл для Tripwire, в котором определяется какие файл и каталоги должны контролироваться. Обратите внимание, что при редактировании этого файла необходимы обширные испытания и опыты, прежде чем удастся получить работающие файлы отчетов. Следующий работающий пример вы можете использовать, как стартовую площадку для ваших настроек.

Шаг 1.

Создайте файл tw.config (touch /etc/tw.config) и добавьте в него все файлы и каталоги, которые вы хотите контролировать. Формат конфигурационного файла описан в его заголовке и в странице руководства (man) для tw.config (5):

# Gerhard Mourani: gmourani@videotron.ca
# last updated: 1999/11/12
# Первое, домашний каталог root-а
/root			 R
!/root/.bash_history
/			 R
# это ядро
/boot/vmlinuz		 R
# критичные файлы загрузки
/boot			 R
# Критичные каталоги и файлы
/chroot			 R
/etc			 R
/etc/inetd.conf		 R
/etc/nsswitch.conf	 R
/etc/rc.d 		 R
/etc/mtab 		 L
/etc/motd		 L
/etc/group		 R
/etc/passwd		 L
# другие популярные файловые системы
/usr			 R
/usr/local		 R
/dev			 L-am
/usr/etc			 R
# исключаем home
=/home R
# каталог var
=/var/spool		 L
/var/log		 L
/var/lib			 L
/var/spool/cron	 L
!/var/lock
# особые каталоги
=/proc			 E
=/tmp
=/mnt/cdrom
=/mnt/floppy
Шаг 2.

Сейчас, из соображений безопасности, изменим режим доступа к этому файлу:

[root@deep /]# chmod 600 /etc/tw.config

Конфигурирование скрипта "/etc/cron.daily/tripwire.verify".

"/etc/cron.daily/tripwire.verify" это небольшой скрипт, запускаемый crond-ом на вашем сервере каждый день, для сканирования жесткого диска на предмет возможных изменений в файлах и каталогах и отправки результатов по электронной почте системному администратору. Этот скрипт автоматически выполнит проверку целостности файловой системы. Если вы хотите автоматизировать эту задачу выполните шаги, описанные ниже.

Шаг 1.

Создайте скрипт tripwire.verify (touch /etc/cron.daily/tripwire.verify) и добавьте в него:

#!/bin/sh
/usr/sbin/tripwire -loosedir -q | (cat <<EOF
Это отчет о возможных изменениях в целостности файловой системы, 
Автоматически созданный программой Tripwire. Чтобы сообщить Tripwire
Что файлы и содержимое каталогов верно, выполните как root следующую
команду:

/usr/sbin/tripwire -update [pathname|entry]

Если вы хотите войти в интерактивный режим проверки целостности и
контроля сессии, выполните как root:

/usr/sbin/tripwire -interactive

Измененные файлы/каталоги включают:
EOF
cat
) | /bin/mail -s "Отчет о целостности файлов" root
Шаг 2

Сейчас, сделайте скрипт исполняемым и измените режим доступа к нему на 0700 следующей командой:

[root@deep /]# chmod 700 /etc/cron.daily/tripwire.verify

Организация защиты Tripwire.

Рекомендуется, из соображений безопасности, переместить базы данных Tripwire (tw.db_[hostname]) в какое-либо место (например, на дискету), где они не могут быть модифицированы. Это важно, потому что данные Tripwire заслуживают такого же доверия, что и ее базы данных. Также рекомендуется сделать сразу распечатку базы данных. Если вы начнете подозревать, что целостность вашей базы данных нарушена, то сможете вручную проверить ее.

Дополнительная документация.

Для получения большей информации вы можете прочитать страницы руководства (man) перечисленные ниже.

$ man siggen (8) - генератор сигнатур программ для Tripwire
$ man tripwire (8) - программа проверки целостности файлов для UNIX
$ man tw.config (5) - конфигурационный фал для Tripwire

Команды.

Ниже приведены команды из тех, что мы часто используем в регулярной работе, но из существует много больше. Читайте страницы руководства (man) для получения большей информации.

Запуск Tripwire в интерактивном режиме проверки.

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

Шаг 1.

Tripwire должна иметь базу данных, сравнивая с которой в дальнейшем файловую систему она сможет определить изменения. Первым нашим действием будет создание файла, называемого "tw.db_[hostname]" в каталоге, который вы определили для хранения базы данных ([hostname] будет заменен на имя вашей машины).

Для создания информационной базы данных Tripwire, используйте команду:

[root@deep /]# cd /var/spool/tripwire/
[root@deep tripwire]# /usr/sbin/tripwire --initialize

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

Шаг 2

Так как файл с информационной базой данных Tripwire был создан, мы можем сейчас запустить Tripwire в "Интерактивном режиме проверки". Этот режим будет запрашивать пользователя относительно того, действительно ли каждый измененный элемент системы должен быть обновлен в базе данных.

Для запуска Интерактивного режима проверки используйте команду:

[root@deep /]# cd /var/spool/tripwire/database/
[root@deep database]# cp tw.db_myserverhostname /var/spool/tripwire/
[root@deep database]# cd ..
[root@deep tripwire]# /usr/sbin/tripwire --interactive
Tripwire(tm) ASR (Academic Source Release) 1.3.1
File Integrity Assessment Software
(c) 1992, Purdue Research Foundation, (c) 1997, 1999 Tripwire
Security Systems, Inc. All Rights Reserved. Use Restricted to
Authorized Licensees.
### Phase 1: Reading configuration file
### Phase 2: Generating file list
### Phase 3: Creating file information database
### Phase 4: Searching for inconsistencies
###
### Total files scanned: 15722
### Files added: 34
### Files deleted: 42
### Files changed: 321
###
### Total file violations: 397
###
added: -rwx------ root 22706 Dec 31 06:25:02 1999 /root/tmp/firewall
---> File: '/root/tmp/firewall'
---> Update entry? [YN(y)nh?]

ЗАМЕЧАНИЕ. В интерактивном режиме Tripwire будет сообщать обо всех добавленных, удаленных и измененных файлах, затем позволяя пользователю обновить базу данных.

Запуск Tripwire в режиме обновления базы данных.

Выполнение Tripwire в "Режиме обновления базы данных" совместно со скриптом "tripwire.verify", который отправляет результаты системному администратору, будет сокращать время сканирования системы. Вместо запуска Tripwire в "Интерактивном режиме проверки" и ожидания завершения долгого сканирования, скрипт "tripwire.verify" будет сканировать систему и сообщать по электронной почте о результатах, а затем вы запускаете Tripwire в "Режиме обновления базы данных " и обновляете только единичные файлы и каталоги, которые были изменены.

Например:

Если один файл был изменен, вы можете:

[root@deep /]# tripwire -update /etc/newly.installed.file

Или, если был изменен набор файлов и каталогов, вы можете выполнить:

[root@deep /]# tripwire -update /usr/lib/Package_Dir В

любом случае, Tripwire пересоздает элементы базы данных для каждого заданного файла. Резервная копия старой базы создается в каталоге"./databases".

Некоторые возможные места использования Tripwire

Tripwire может быть использован для:

  1. Проверки целостности файловой системы.
  2. Получения списка новых инсталлированных или удаленных файлов в вашей системе.

Инсталлированные файлы.

> /etc/cron.daily/tripwire.verify
> /etc/tw.config
> /usr/man/man5/tw.config.5
> /usr/man/man8/siggen.8
> /usr/man/man8/tripwire.8
> /usr/sbin/tripwire
> /usr/sbin/siggen
> /var/spool/tripwire
> /var/spool/tripwire/tw.db_TEST

Альтернативы Tripwire

ViperDB
Домашняя страница ViperDB: http://www.resentment.org/projects/viperdb/
FCHECK
Домашняя страница FCHECK: http://sites.netscape.net/fcheck/fcheck.html
Sentinel
Домашняя страница Sentinel: http://zurk.netpedia.net/zfile.html

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

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

Глава 13 Программы обеспечения безопасности (Управление и ограничения) - GnuPG

В этой главе
Linux GnuPG
Команды
Установка поддержки квот на вашей Linux системе.
Создание ядра с поддержкой квот
Модификация файла "/etc/fstab"
Создание файлов "quota.user" и "quota.group"
Назначение квот для Пользователей и групп
Команды

Linux GnuPG

Краткий обзор.

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

Согласно официальному README файлу GnuPG:

GnuPG - это GNU утилита для безопасной передачи информации и хранения данных. Она может быть использована для шифрования данных и создания цифровых сигнатур. GnuPG включает продвинутый менеджер ключей и совместима с OpenPGP Internet стандартом, описанном в RFC2440. Так как GnuPG не использует каких-либо патентованных алгоритмов, она не может быть совместима с PGP2. PGP 2.x использует только IDEA (запатентован) и RSA (который запатентован в США до 20 сентября 2000).

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
GnuPG версии 1.0.1

Пакеты.
Домашняя страница GnuPG: http://www.gnupg.org/
Вы должны скачать: gnupg-1.0.1.tar.gz

Тарболы.
Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции GnuPG и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,

До инсталляции:
find /* > GnuPG1

После инсталляции:
find /* > GnuPG2

Для получения списка установленных файлов:
diff GnuPG1 GnuPG2 > GnuPG

Раскройте тарбол:

[root@deep /]# cp gnupg-version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf gnupg-version.tar.gz

Компиляция и оптимизация.

Переместитесь в новый каталог GnuPG и выполните следующие команды:

CC="egcs" \
CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions" \
./configure \
--prefix=/usr \
--enable-shared

[root@deep gnupg-1.0.1]# make
[root@deep gnupg-1.0.1]# make check
[root@deep gnupg-1.0.1]# make install
[root@deep gnupg-1.0.1]# strip /usr/bin/gpg

команда make компилирует исходные коды в исполняемые двоичные файлы;
команда make check запускает все тесты, входящие в пакет;
команда make install инсталлирует исполняемые и сопутствующие им файлы в определенный каталог;
strip будет уменьшать размер, увеличивая производительность программы.

Очистка после работы.
[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf gnupg-version/ gnupg-version.tar.gz

Команда "rm", использованная выше, будет удалять все исходные коды, которые мы использовали при компиляции и инсталляции GnuPG. Она также удалит .tar.gz архив.

Команды.

Ниже приведены команды из тех, что мы часто используем в регулярной работе, но из существует много больше. Читайте страницы руководства (man) для получения большей информации.

Создание ключа.

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

Шаг 1.

Для создания новой пары ключей используйте следующую команду:

[root@deep /]# gpg --gen-key
gpg (GnuPG) 1.0.1; Copyright (C) 1999 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.
gpg: /root/.gnupg: directory created
gpg: /root/.gnupg/options: new options file created
gpg: you have to start GnuPG again, so it can read the new options file
This asks some questions and then starts key generation.

Шаг 2

Мы вновь запускаем GnuPG следующей командой:

[root@deep /]# gpg --gen-key
gpg (GnuPG) 1.0.1; Copyright (C) 1999 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.
gpg: /root/.gnupg/secring.gpg: keyring created
gpg: /root/.gnupg/pubring.gpg: keyring created
Please select what kind of key you want:
   (1) DSA and ElGamal (default)
   (2) DSA (sign only)
   (4) ElGamal (sign and encrypt)
Your selection? 1
DSA keypair will have 1024 bits.
About to generate a new ELG-E keypair.
     minimum keysize is 768 bits
     default keysize is 1024 bits
  highest suggested keysize is 2048 bits
What keysize do you want? (1024) 2048
Do you really need such a large keysize? y
Requested keysize is 2048 bits
Please specify how long the key should be valid.
     0 = key does not expire
    <n> = key expires in n days
    <n>w = key expires in n weeks
    <n>m = key expires in n months
    <n>y = key expires in n years
Key is valid for? (0) 0
correct (y/n)? Y

You need a User-ID to identify your key; the software constructs the user id
from Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: Gerhard Mourani
Email address: gmourani@videotron.ca
Comment: [Press Enter]
You selected this USER-ID:
    "Gerhard Mourani <gmourani@videotron.ca>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? o
You need a Passphrase to protect your secret key.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
+++++..+++++++++++++++..+++++.++++++++++++++++++++++++++++++++++++++++..+++++++
+++.+++++++++++++++++++++++++.+++++++++++++++...+++++++++++++++++++++++++.++++
+
..+++++>+++++...+++++++++++++++>+++++.......>+++++.......<+++++................
..........+++++^^^^
public and secret key created and signed.

Новая пара ключей (общедоступный и личный) успешно созданы в домашнем каталоге пользователя root (~/root).

Импортирование ключей.

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

Для импортирования публичных ключей в базу данных ключей используйте команду:

[root@deep /]# gpg --import <file>

Например:

[root@deep /]# gpg --import redhat2.asc
gpg: key DB42A60E: public key imported
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: Total number processed: 1
gpg: imported: 1

Вышеприведенная команда будет добавлять все новые ключи в базу данных и будет обновлять все уже существующие ключи. Важно заметить, что GnuPG не импортирует не самоподписанные (self-signed) ключи. В вышеприведенном примере мы импортируем файл "redhat.asc", содержащий публичный ключ компании Red Hat Linux, взятый с Интернет сайта Red Hat.

Подписание ключей.

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

Для подписания ключа компании Red Hat, который мы добавили выше, используйте команду:

[root@deep /]# gpg --sign-key <UID>

Например:

[root@deep /]# gpg --sign-key RedHat

pub 1024D/DB42A60E created: 1999-09-23 expires: never trust: -/q
sub 2048g/961630A2 created: 1999-09-23 expires: never
(1) Red Hat, Inc <security@redhat.com>

pub 1024D/DB42A60E created: 1999-09-23 expires: never trust: -/q
Fingerprint: CA20 8686 2BD6 9DFC 65F6 ECC4 2191 80CD DB42 A60E

Red Hat, Inc <security@redhat.com>

Are you really sure that you want to sign this key
with your key: "Gerhard Mourani <gmourani@videotron.ca>"

Really sign? y

You need a passphrase to unlock the secret key for
user: "Gerhard Mourani <gmourani@videotron.ca>"
1024-bit DSA key, ID E92D6C97, created 1999-12-30

Enter passphrase:

ЗАМЕЧАНИЕ. Вы должны подписывать ключ только когда абсолютно уверенны, что ключ действительно настоящий! Вы никогда не должны подписывать ключ, базирующийся на любых предположении.

Шифрование и дешифрование

После инсталляции, импортирования, подписания и конфигурирования мы можем начать шифровать и расшифровывать нашу работу.

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

[root@deep /]# gpg -sear RedHat <file>

Например:

[root@deep /]# gpg -sear RedHat message-to-RedHat.txt
You need a passphrase to unlock the secret key for
user: "Gerhard Mourani (Open Network Architecture) <gmourani@videotron.ca>"
1024-bit DSA key, ID BBB4BA9B, created 1999-10-26
Enter passphrase:

Аргументы, которые использовались обозначают следующее, "s" - подписание (уменьшение риска что кто-то попытается представиться вами, очень полезно подписывать все, что вы шифруете), "e" - шифрование, "a" - создание ASCII защищенного вывода (".asc" готовые для отправки по почте), "r" - шифрование имени идентификатора пользователя и <file> это сообщение, которое вы хотите зашифровать.

Для расшифровки данных используйте следующую команду:

[root@deep /]# gpg -d <file>

Например:

[root@deep /]# gpg -d message-to-Gerhard.asc
You need a passphrase to unlock the secret key for
user: "Gerhard Mourani (Open Network Architecture) <gmourani@videotron.ca>"
2048-bit ELG-E key, ID 71D4CC44, created 1999-10-26 (main key ID BBB4BA9B)
Enter passphrase:

Где "-d" означает расшифровку и <file> сообщение, которое вы хотите расшифровать. Важно, чтобы публичный ключ отправителя сообщения, которое мы хотим расшифровать, был в нашей базе ключей или ничего работать не будет.

Экспортирование вашего публичного ключа.

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

∙ Для извлечения вашего публичного ключа в ASCII защищенный вывод используйте команду:

[root@deep /]# gpg --export --armor > Public-key.asc

где "--export" для извлечения вашего публичного ключа из зашифрованного файла, "--armor" создать ASCII защищенный вывод, который вы можете отправлять, публиковать или выкладывать на веб-странице и "> Public-key.asc" говорит, что результат надо поместить в файл с именем Public-key.asc.

Проверка signature

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

∙ Для проверки сигнатуры шифрованных данных используйте команду:

[root@deep /]# gpg --verify <Data>

Опция "--verify" будет проверять сигнатуру, а <Data> - зашифрованные данные/файл, который вы хотите проверить.

Некоторые области применения GnuPG

GnuPG может быть использован:

  1. Отправки зашифрованных почтовых сообщений.
  2. Шифрование резервных копий файлов перед отправкой через сеть.
  3. Шифрование личных чувствительных фалов (например, файл содержащий все ваши пароли).

Инсталлированные файлы

> /usr/bin/gpg
> /usr/lib/gnupg
> /usr/lib/gnupg/rndunix
> /usr/lib/gnupg/rndegd
> /usr/lib/gnupg/tiger
> /usr/man/man1/gpg.1
> /usr/share/gnupg
> /usr/share/gnupg/options.skel

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

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

Глава 13 Программы обеспечения безопасности (Управление и ограничения) - Квоты

В этой главе
Linux GnuPG
Команды
Установка поддержки квот на вашей Linux системе.
Создание ядра с поддержкой квот
Модификация файла "/etc/fstab"
Создание файлов "quota.user" и "quota.group"
Назначение квот для Пользователей и групп
Команды

Установка поддержки квот на вашей Linux системе.

Краткий обзор.

Квота - это административная утилита для мониторинга и ограничения использования дискового пространства пользователями и группами на каждой файловой системе. Существует две возможных способа ограничений использования дисков. Первый, это число inode-ов (число файлов), которым может владеть пользователь или группа. Второй, число дисковых блоков (суммарное пространство в килобайтах), которое может выделяться в использование пользователю или группе. При помощи квот, системный администратор принуждает пользователя не расходовать неограниченный объем дискового пространства. Эта программа оперирует отдельно каждым пользователем и каждой файловой системой, поэтому для каждой файловой системы нужно определять квоты отдельно.

Создание ядра с поддержкой квот

Первое, что вам необходимо сделать, это создать ядро с поддержкой квот. В ядре 2.2.14 надо удостовериться, что вы ответили "Y" на вопрос:

Filesystems
Quota support (CONFIG_QUOTA) [N/y/?] Y

ЗАМЕЧАНИЕ. Если при компиляции ядра вы руководствовались соответствующей главой из этой книги, то поддержка квот у вас включена.

Модификация файла "/etc/fstab"

Файл "/etc/fstab" содержит информацию обо всех файловых системах, инсталлированных на вашем Linux сервере. Квоты должны быть включены в нем, чтобы их можно было использовать. Так как квоты должны быть определены для каждой файловой системы независимо и каждая файловая система описывается в файле "/etc/fstab" в отдельной строке, то квота должна быть установлена для каждой строки, где вы хотите включить их поддержку. Используя прорамму квота, в зависимости от ваших нужд, вы можете включить квоты только для групп, пользователей или и тех и других одновременно. Для всех нижеприведенных примеров, мы используем каталог "/home", размещенный на разделе "/dev/sda6".

Возможность 1.

Для включения квот для пользователей на определенной файловой системы, отредактируйте ваш "/etc/fstab" файл (vi /etc/fstab) и добавьте опцию "usrquota" в четвертое поле после слова "defaults" или любой другой опции.

Например:

/dev/sda6 /home ext2 defaults 1 2 (как пример: слово "defaults")
/dev/sda6 /home ext2 nosuid,nodev 1 2 (как пример: любая другая опция)

Должен читаться:

/dev/sda6 /home ext2 defaults,usrquota 1 2
/dev/sda6 /home ext2 nosuid,nodev,usrquota 1 2

Возможность 2.

Для включения квот для групп на определенной файловой системы, отредактируйте ваш "/etc/fstab" файл (vi /etc/fstab) и добавьте опцию "grpquota" в четвертое поле после слова "defaults" или любой другой опции.

Например:

/dev/sda6 /home ext2 defaults 1 2 (как пример: слово "defaults")
/dev/sda6 /home ext2 nosuid,nodev 1 2 (как пример: любая другая опция)

Должен читаться:

/dev/sda6 /home ext2 defaults,grpquota 1 2
/dev/sda6 /home ext2 nosuid,nodev,grpquota 1 2
Возможность 3.

Для включения квот для пользователей и групп на определенной файловой системы, отредактируйте ваш "/etc/fstab" файл (vi /etc/fstab) и добавьте опции "usrquota, grpquota" в четвертое поле после слова "defaults" или любой другой опции.

Например:

/dev/sda6 /home ext2 defaults 1 2 (как пример: слово "defaults")
/dev/sda6 /home ext2 nosuid,nodev 1 2 (как пример: любая другая опция)

Должен читаться:

/dev/sda6 /home ext2 defaults,usrquota,grpquota 1 2
/dev/sda6 /home ext2 nosuid,nodev,usrquota,grpquota 1 2

Создание файлов "quota.user" и "quota.group"

После модификации файла "/tc/fstab", чтобы квоты начали действовать, в корневой каталог файловой системы (например, "/home") помещается файл "quota.user", если вы хотите использовать пользовательские квоты, или "quota.group", для групповых квот, или и тот и другой для комбинированных квот. Владельцем обоих файлов является "root".

Шаг 1.

Для создания файлов "quota.user" и/или "quota.group", как "root" перейдите в корневой каталог раздела, где вы хотите активизировать квоты (например, /home), создайте "quota.user" и/или "quota.group", для этого выполните следующие команды:

[root@deep /]# touch /home/quota.user
[root@deep /]# touch /home/quota.group
[root@deep /]# chmod 600 /home/quota.user
[root@deep /]# chmod 600 /home/quota.group

Команда "touch" будет создавать новые пустые файлы в каталоге "home" с именами "quota.user" и "quota.group". Команда "chmod" будет устанавливать права доступа к этим файлам в чтение-запись только для root.

ЗАМЕЧАНИЕ. Оба файла "quota.user" и "quota.group", должны принадлежать root, с правами чтение-запись только для владельца.

Шаг 2

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

Для инициализации файлов "quota.user" и/или "quota.group", используйте следующие команды:

[root@deep /]# edquota -u wahib
[root@deep /]# edquota -g wahib

Вышеприведенные команды необходимы только для инициализации файлов "quota.user" и/или "quota.group"; команда edquota (-u) будет редактировать квоты для пользователя "wahib" и (-g) будет редактировать квоты для группы. Заметим, что вы должны редактировать существующие в вашей системе UID/GID, чтобы инициализация файлов прошла успешно.

Шаг 3

После того как вы закончили устанавливать необходимые опции в файле "/etc/fstab", создали и инициализировали файлы "quota.users" и/или "quota.group", вы должны перезагрузить систему, чтобы внесенные изменения в файлы "/etc/fstab", "quota.user" и/или "quota.group" вступили в силу. Для перезагрузки системы используйте следующую команду:

[root@deep /]# reboot

Назначение квот для Пользователей и групп

После того, как система перезагрузилась, вы можете назначить квоты пользователям и группам пользователей. Это операция осуществляется при помощи команды "edquota". edquota (8).

Программа edquota.

Edquota - это редактор квот, который создает временный файл с текущими дисковыми квотами, используемый пользователем "root" для их установки для пользователей и групп пользователей. Нижеприведенный пример покажет как установить квоты для пользователя и группы пользователей.

Установка квоты для пользователя.

Предположим, для примера, что у вас есть пользователь с именем "wahib". Следующая команда вызывает редактор (vi), чтобы изменить и установить квоты для пользователя "wahib" на каждый раздел, где включены квоты:

Шаг 1

Для редактирования и можификации квот для пользователя "wahib" используйте следующую команду:

[root@deep /]# edquota -u wahib
Quotas for user wahib:
/dev/sda6: blocks in use: 6, limits (soft = 0, hard = 0)
    inodes in use: 5, limits (soft = 0, hard = 0)

После выполнения этой команды, вы увидите на экране строки связанные с пользователем "wahib". "blocks in use:" отображает общее число блоков (в килобайтах) расходуемых пользователем на разделе. "inodes in use:" отображает общее число файлов, которое имеет пользователь на разделе. Эти параметры ("blocks in use, and inodes in use") контролируются и устанавливаются автоматически системой и вы не можете установить или изменить их.

Шаг 2

Назначим 5MB квоту для пользователя "wahib", изменив следующие параметры в редакторе vi:

Quotas for user wahib:
/dev/sda6: blocks in use: 6, limits (soft = 0, hard = 0)
    inodes in use: 5, limits (soft = 0, hard = 0)

Должна читаться:

Quotas for user wahib:
/dev/sda6: blocks in use: 6, limits (soft = 5000, hard = 0)
    inodes in use: 5, limits (soft = 0, hard = 0)

"soft limit" (soft =) определяет максимальное количество дискового пространства, которое пользователь может иметь.
"hard limit" (hard =) определяет абсолютное ограничение использования пользоватлем дискового пространства. Пользователь не может превзойти его. Следует заметить, что "hard limit" работает только когда установлен параметр "grace period".

Параметр grace period

Параметр "grace period" позволяет вам установить время, прежде чем значение soft limit будет приведено в жизнь на файловой системе с включенными квотами. Например этот параметр может быть использован для предупреждения ваших пользователей о новой политике, которая установит дисковую квоту в 5MB на их домашний каталог через 7 дней. Вы можете установить это значение в 0 дней (по умолчанию) для любого отрезка времени. Чтобы изменить это требуется два следующих шага (в моем примере я принимаю 7 дней).

Шаг 1

Редактируем значение по умолчанию параметра период любезности (grace period), используя следующую команду:

[root@deep /]# edquota -t
Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/sda6: block grace period: 0 days, file grace period: 0 days
Шаг 2

Модифицируем период любезности (grace period) до 7 дней. Измените или установите следующие параметры в редакторе vi:

Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/sda6: block grace period: 0 days, file grace period: 0 days

Должно читаться:

Time units may be: days, hours, minutes, or seconds
Grace period before enforcing soft limits for users:
/dev/sda6: block grace period: 7 days, file grace period: 7 days

Замечание. Команда "edquota -t" редактирует параметр soft time limits для каждой файловой системы с включенными квотами.

Назначение квот для отдельных групп

Предположим, например, что у вас есть группа с именем "webusers". Следующая команда вызовет редактор vi для редактирования квот для группы "webusers" на каждой файловой системе, где квоты разрешены.:

[root@deep /]# edquota -g webusers
Quotas for group webusers:
/dev/sda6: blocks in use: 6, limits (soft = 0, hard = 0)
    inodes in use: 6, limits (soft = 0, hard = 0)

Процедура такая же как и при назначении квот для пользователей; как описано выше, вы должны модифицировать параметр "soft =" и записать изменения.

Назначение квот для групп пользователей с теми же значениями

Программа edquota имеет специальную опцию (-p), которая назначает квоты для групп пользователей с некоторым значением назначенным при инициализации пользователя. Допустим, вы хотите назначить пользователям UID-ы которых начинаются с 500 то же значение, что и для пользователя "wahib". Сперва, мы редактируем квоты для пользователя "wahib", а затем выполняем следующую команду:

[root@deep /]# edquota -p wahib `awk -F: '$3 > 499 {print $1}' /etc/passwd`

Программа edquota будет дуплицировать квоты, которые установлены для пользователя "wahib", на всех пользователей с UID больше 499 из файла "/etc/passwd"

Дополнительная документация.

Чтобы получить больше информации, читайте следующие страницы руководства:

$ man edquota (8) - редактирование пользовательских квот
$ man quota (1) - вывод информации об использовании диска и ограничениях
$ man quotacheck (8) - сканирование файловой системы о использовании диска
$ man quotactl (2) - манипулирование дисковыми квотами
$ man quotaon, quotaoff (8) - включение или выключение квот на файловой системе
$ man repquota (8) - суммирование квот на файловой системе
$ man rquota (3) - осуществление квот на удаленной машине

Команды

Ниже приведены команды из тех, что мы часто используем в регулярной работе, но из существует много больше. Читайте страницы руководства (man) для получения большей информации.

Quota

Quota выводит информацию об использовании диска и ограничениях на файловой системе.

Для получения информации об использовании диска и ограничениях пользователя wahib используйте команду:

[root@deep /]# quota -u wahib
Disk quotas for user wahib (uid 501):
Filesystem blocks   quota   limit  grace    files   quota   limit    grace
/dev/sda6   6001*    6000     0     none      7       0       0

Для получения информации о групповых квотах группы, членом которой является пользователь используйте команду:

[root@deep /]# quota -g wahib
Disk quotas for group wahib (gid 501):
Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
/dev/sda6    5995*    5000     0      none     1       0       0

ЗАМЕЧАНИЕ. Если групповые квоты не установлены для заданного пользователя, вы получите следующее сообщение:
Disk quotas for group wahib (gid 501): none

Repquota

Repquota создает полную информацию об использовании дискового пространства и квотах на заданной файловой системе. Также она печатает для каждого пользователя текущее количество файлов и объем используемого дискового пространства (в килобайтах).

Здесь приведен пример информации полученной от команды repquota:

[root@deep /]# repquota -a
             Block limits             File limits
User        used  soft  hard  grace   used  soft   hard   grace
Roo --      21     0     0      4       0    0
Named --    6      0     0      5       0    0
Admin --    388657 0     0      21      21   0       0
Wahib --    6001   0     0      7       0    0

            Block limits                 File limits
User        used   soft   hard   grace   used   soft   hard   grace
root --     21     0      0      4        0      0
named --    6      0      0      5        0      0
admin --    388657 0      0      2121     0      0
wahib --    6001   6000   0      none     7      0     0

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

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

Глава 14 Серверное программное обеспечение (BIND/Сервис DNS) (Часть1)

В этой главе
Linux DNS и BIND сервер
Конфигурации
Кэширующий DNS-сервер
Основной сервер имен
Вторичный сервер имен
Организация защиты ISC BIND/DNS
Административные средства DNS
Утилиты пользователя DNS

Linux DNS и BIND сервер

Краткий обзор.

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

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

В нашей конфигурации, мы будем запускать BIND/DNS от имени не root- пользователя и будем chroot-ить его окружение. Мы также предоставим вам три различные конфигурации: одну для простого кэширующего сервера (клиент), одну для вторичного сервера (secondary) и одну для основного (master) сервера.

Конфигурацию кэширующего сервера мы будем использовать на машине, которая не будет выполнять функции основного и вторичного DNS серверов. Обычно, один из серверов выступает в роли основного сервера, а другой подчиненного (slave).

На этой картинке изображена конфигурация, которую мы используем в этой книге.

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
ISC BIND версии 8.2.2-patchlevel5

Пакеты.
Домашняя страница ISC BIND: http://www.isc.org/
FTP сервер ISC BIND: 204.152.184.27
Вы должны скачать: bind-contrib.tar.gz, bind-doc.tar.gz, bind-src.tar.gz

Тарболы. Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции BIND и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,

До инсталляции:
find /* > DNS1

После инсталляции:
find /* > DNS2

Для получения списка установленных файлов:
diff DNS1 DNS2 > DNS-install

Раскройте тарбол:

[root@deep /]# mkdir /var/tmp/bind
[root@deep /]# cp bind-contrib.tar.gz /var/tmp/bind/
[root@deep /]# cp bind-doc.tar.gz /var/tmp/bind/
[root@deep /]# cp bind-src.tar.gz /var/tmp/bind/

Мы создаем каталог с именем "bind" и манипулируем tar архивами, копируя их в новый каталог.

Переходим в новый каталог bind (cd /var/tmp/bind) и разархивируем tar файлы:

[root@deep bind]# tar xzpf bind-contrib.tar.gz
[root@deep bind]# tar xzpf bind-doc.tar.gz
[root@deep bind]# tar xzpf bind-src.tar.gz

Конфигурирование и оптимизация.

Шаг 1.

ISC BIND не должен запускаться с правами root, поэтому мы должны завести пользователя не имеющего shell доступа.

[root@deep /]# useradd -c "DNS Server" -u 53 -s /bin/false -r -d /chroot/named named 2>/dev/null || :

Шаг 2

Редактируем файл Makefile.set (vi src/port/linux/Makefile.set) и добавляем или модифицируем его:

'CC=egcs -D_GNU_SOURCE'
'CDEBUG=-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -arch=pentiumpro -fomit-frame-pointer -fno-exceptions -g'
'DESTBIN=/usr/bin'
'DESTSBIN=/usr/sbin'
'DESTEXEC=/usr/sbin'
'DESTMAN=/usr/man'
'DESTHELP=/usr/lib'
'DESTETC=/etc'
'DESTRUN=/var/run'
'DESTLIB=/usr/lib/bind/lib'
'DESTINC=/usr/lib/bind/include'
'LEX=flex -8 -I'
'YACC=yacc -d'
'SYSLIBS=-lfl'
'INSTALL=install'
'MANDIR=man'
'MANROFF=cat'
'CATEXT=$$N'
'PS=ps p'
'AR=ar crus'
'RANLIB=:'

Первая строки представляет имя вашего GCC компилятора (egcs), а вторая ваши флаги оптимизации. Срока "DESTLIB=" определяет путь, где будут располагаться файлы сервера BIND

Компиляция и оптимизация.

Введите следующие команды на вашем терминале

[root@deep bind]# make -C src
[root@deep bind]# make clean all -C src SUBDIRS=../doc/man
[root@deep bind]# make install -C src
[root@deep bind]# make install -C src SUBDIRS=../doc/man

Команда "make" компилирует все исходные кода в двоичные исполняемые файлы, и затем команды "make install" инсталлируют исполняемые и сопутствующие им файлы в заданный каталог.

[root@deep bind]# strip /usr/bin/addr
[root@deep bind]# strip /usr/bin/dig
[root@deep bind]# strip /usr/bin/dnsquery
[root@deep bind]# strip /usr/bin/host
[root@deep bind]# strip /usr/bin/nslookup
[root@deep bind]# strip /usr/bin/nsupdate
[root@deep bind]# strip /usr/bin/mkservdb
[root@deep bind]# strip /usr/sbin/named
[root@deep bind]# strip /usr/sbin/named-xfer
[root@deep bind]# strip /usr/sbin/ndc
[root@deep bind]# strip /usr/sbin/dnskeygen
[root@deep bind]# strip /usr/sbin/irpd
[root@deep bind]# mkdir /var/named

Команда "strip" удаляет все символы из объектных файлов Это уменьшает размер исполняемых файла. Вследствие чего, улучшается производительность. "mkdir" создает новый каталог "/var/named".

Очистка после работы.
[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf bind/

Эти команды будут удалять все исходные коды, которые мы использовали при компиляции и инсталляции ISC BIND/DNS.

Конфигурации.

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

Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файл из архива и измените его под свои требования. Затем поместите его в соответствующее место на сервере, так как это показано ниже. Файл с конфигурациями вы можете скачать с адреса:
http://www.openna.com/books/floppy.tgz

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

Копируйте файл named.conf в каталог "/etc/".
Копируйте файл db.127.0.0 в каталог "/var/named/".
Копируйте файл db.cache в каталог "/var/named/".
Копируйте скрипт named в каталог "/etc/rc.d/init.d/".

Для запуска основного (master) сервера имен необходимы следующие файлы, вы должны их либо создать либо скопировать в нужные каталоги сервера

Копируйте файл named.conf в каталог "/etc/".
Копируйте файл db.127.0.0 в каталог "/var/named/".
Копируйте файл db.cache в каталог "/var/named/".
Копируйте файл db.208.164.186 в каталог "/var/named/".
Копируйте файл db.openna в каталог "/var/named/".
Копируйте скрипт named в каталог "/etc/rc.d/init.d/".

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

Копируйте файл named.conf в каталог "/etc/".
Копируйте файл db.127.0.0 в каталог "/var/named/".
Копируйте файл db.cache в каталог "/var/named/".
Копируйте скрипт named в каталог "/etc/rc.d/init.d/".

Вы можете взять эти файлы из нашего архива floppy.tgz.

Кэширующий сервер имен

Кэширующий сервер имен не авторитетен для любых доменов, кроме 0.0.127.in- addr.arpa (localhost). Он ищет имена как внутри, так и за пределами ваших зон, как на первичных, так и на подчиненных серверах. В отличии от них, кэширующий сервер инициирует поиск имен в пределах вашей зоны, спрашивая один из первичных или подчиненных серверов.

Файлы необходимые для установки простого кэширующего сервера имен:

named.conf
db.127.0.0
db.cache
скрипт named
Конфигурация файла "/etc/named.conf" для простого кэширующего сервера имен.

Используйте эту конфигурацию для всех серверов в вашей сети, которые не выступают как основной или подчиненный сервера имен. Установка простого кэширующего севера на локальной клиентской машине уменьшит загрузку первичного сервера. Многие пользователи, использующие dialup соединения, могут использовать эту конфигурацию. Создайте файл named.conf (touch /etc/named.conf) и добавьте в него следующие строки:

options {
  directory "/var/named";
  forwarders { 208.164.186.1; 208.164.186.2; };
  forward only;
};
//
// a caching only nameserver config
zone "." in {
  type hint;
  file "db.cache";
};
zone "0.0.127.in-addr.arpa" in {
  type master;
  file "db.127.0.0";
};
В строке "forwarder" 208.164.186.1 и 208.164.186.2 это IP адреса ваших основного (Master) и подчиненного (Slave) BIND/DNS серверов. Это могут быть также адреса DNS серверов вашего провайдера или вообще любые другие сервера имен.

Для улучшения безопасности вашего BIND/DNS сервера вы можете запретить вашему серверу контактировать со сторонними серверами, если свои сервера не работают или не отвечают. С опцией "forward only", установленной в файле "named.conf", сервер имен не будет контактировать с другими серверами для поиска информации, если сервера на которые перенаправляются запросы не отвечают.

Конфигурация файла "/var/named/db.127.0.0" для простого кэширующего сервера имен.

Используйте эту конфигурацию для всех серверов в вашей сети, которые не выступают как основной или подчиненный сервера имен. Файл "db.127.0.0" распространяется на сеть loopback. Создайте его в "/var/named/".

Создайте файл db.127.0.0 (touch /var/named/db.127.0.0) и внесите в него следующие строки:

$TTL 345600
@   IN   SOA   localhost.   root.localhost. (
                   00 ; Serial
                   86400 ; Refresh
                   7200 ; Retry
                   2592000 ; Expire
                   345600 ) ; Minimum
    IN   NS    localhost.

1   IN   
PTR localhost.

Конфигурация файла "/var/named/db.cache" для простого кэширующего сервера имен.

Перед запуском вашего DNS сервера необходимо взять файл "db.cache" и поместить его в каталог "/var/named/". "db.cache" определяет сервера корневой зоны.

Используйте следующие команды на другом UNIX компьютере для запроса нового файла db.cache для вашего DNS сервера или возьмите его с вашего Red Hat Linux CD-ROM:

Для запроса нового файла db.cache для вашего DNS сервера используйте следующую команду:

[root@deep]# dig @.aroot-servers.net . ns > db.cache

Не забудьте скопировать файл db.cache в каталог "/var/named/" на вашем сервере после получения его из Интернет.

ЗАМЕЧАНИЕ. Внутренние адреса, подобные 192.168.1/24, не включаются в файлы конфигурации DNS из соображений безопасности. Очень важно, чтобы между внутренними хостами и внешними не существовал DNS.

Основной сервер имен.

Первичный мастер сервер имен читает файл с данными о зоне и отвечает за эту зону.

Файлы необходимые для настройки первичного мастер сервера имен:
named.conf
db.127.0.0
db.208.164.186
db.openna
db.cache
скрипт named

Конфигурация файла "/etc/named.conf" для первичного мастер сервера

Используйте эту конфигурацию для серверов, которые выступают как мастер сервер имен. После компиляции DNS, вам необходимо установить первичное доменное имя сервера. Мы используем "openna.com", как пример домена, предполагая, что используем IP сеть с адресом 208.164.186.0. Для этого, добавьте следующие строки файл "/etc/named.conf".

Создайте файл named.conf (touch /etc/named.conf) и добавьте следующее:

options {
   directory "/var/named";
   fetch-glue no;
   recursion no;
   allow-query { 208.164.186/24; 127.0.0/8; };
   allow-transfer { 208.164.186.2; };
   transfer-format many-answers;
};
// Эти файлы не привязаны к какой-либо зоне
zone "." in {
   type hint;
   file "db.cache";
};
zone "0.0.127.in-addr.arpa" in {
   type master;
   file "db.127.0.0";
};
// Это файл вашей первичной зоны
zone "openna.com" in {
   type master;
   file "db.openna ";
};
zone "186.164.208.in-addr.arpa" in {
   type master;
   file "db.208.164.186";
};

Опция "fetch-glue no" может использоваться в связке с опцией "recursion no" для предотвращения роста и разрушения кэша сервера. Также, отключение рекурсии переведет ваш сервер имен в пассивный режим, говорящий ему никогда не посылать запросы от имени другого сервера имен или ресолвера. Не рекурсивные сервера имен очень сложно обмануть при помощи атаки spoof, так как они не отправляют никакие запросы и следовательно не кэшируют никакие данные.

В строке "allow-query", 208.164.186/24 и 127.0.0/8 определяются IP адреса, которым разрешено осуществлять обычные запросы к серверу.

В строке "allow-transfer", 208.164.186.2 это IP адрес, которому разрешается принимать пересылки зон с сервера. Вы должны обеспечить, чтобы только ваши вторичные сервера могли получать зоны с сервера. Эта информация часто используется спаммерами и IP spoofers.

ЗАМЕЧАНИЕ. Опции "recursion no", "allow-query" и "allow-transfer" в файле "named.conf" используются для обеспечения большей безопасности сервера имен.

Конфигурация файла "/var/named/db.127.0.0" для основного и вспомогательного серверов имен.

Этот файл может быть использован как на основном, так и на вспомогательном серверах. Файл "db.127.0.0" описывает сеть loopback. Создайте файл db.127.0.0 (touch /var/named/db.127.0.0) и добавьте в него следующую информацию:

; Revision History: April 22, 1999 - admin@mail.openna.com
; Start of Authority (SOA) records.
$TTL 345600
@     IN    SOA    deep.openna.com.   admin.mail.openna.com. (
                       00 ; Serial
                       86400 ; Refresh
                       7200 ; Retry
                       2592000 ; Expire
                       345600 ) ; Minimum
; Name Server (NS) records.
             NS    deep.openna.com.
             NS    mail.openna.com.
; only One PTR record.
1            PTR   localhost.

Конфигурация файла "/var/named/db.208.164.186" для основного сервера имен.

Используйте эту конфигурацию для сервера, который выступает в вашей сети, как основной сервер имен. Файл "db.208.164.186" привязывает имена хостов к адресам. Создайте следующий файл db.208.164.186 (touch /var/named/db.208.164.186) в каталоге "/var/named/":

; Revision History: April 22, 1999 - admin@mail.openna.com
; Start of Authority (SOA) records.
$TTL 345600
@   IN  SOA   deep.openna.com.   admin.mail.openna.com. (
                   00 ; Serial
                   86400 ; Refresh
                   7200 ; Retry
                   2592000 ; Expire
                   345600 ) ; Minimum
; Name Server (NS) records.
        NS    deep.openna.com.
        NS    mail.openna.com.
; Addresses Point to Canonical Names (PTR) for Reverse lookups
1       PTR   deep.openna.com.
2       PTR   mail.openna.com.
3       PTR   www.openna.com.

Конфигурация файла "/var/named/db.openna" для основного сервера имен

Используйте этот файл для сервера выступающего в роли основного сервера имен. Файл "db.openna" привязывает адреса к именам хостов. Создайте файл db.openna в каталоге "/var/named/" (touch /var/named/db.openna):

; Revision History: April 22, 1999 - admin@mail.openna.com
; Start of Authority (SOA) records.
$TTL  345600
@   IN     SOA   deep.openna.com.  admin.mail.openna.com. (
                      00 ; Serial
                      86400 ; Refresh
                      7200 ; Retry
                      2592000 ; Expire
                      345600 ) ; Minimum
; Name Server (NS) records.
           NS    deep.openna.com.
           NS    mail.openna.com.
; Mail Exchange (MX) records.
           MX 0  mail.openna.com.
; Address (A) records.
localhost  A     127.0.0.1
deep       A     208.164.186.1
mail       A     208.164.186.2
www        A     208.164.186.3
; Aliases in Canonical Name (CNAME) records.
;www       CNAME deep.openna.com.

Конфигурация файла "/var/named/db.cache" для основного и подчиненного серверов имен

Перед запуском вашего DNS сервера вы должны сделать копию файла "db.cache" и поместить его в каталог "/var/named/". Он говорит серверу, какие сервера отвечают за корневую зону.

Используйте следующую команду на другом UNIX компьютере для получения нового файла db.cache или возьмите его с вашего Red Hat Linux CD-ROM:

[root@deep /]# dig @.aroot-servers.net . ns > db.cache

Не забудьте скопировать файл "db.cache" в каталог "/var/named/" после получения его из Интерент.

Вторичный сервер имен.

Основное назначение вторичного сервера имен - разделение нагрузки с основным сервером, и обработка запросов, если основной сервер не работает. Вторичный сервер загружает данные через сеть с другого сервера имен (обычно основного, но может и с другого вторичного). Этот процесс называется пересылкой зоны.

Файлы необходимые для установки вторичного сервера имен:
named.conf
db.127.0.0
db.cache
скрипт named

Конфигурация файла "/etc/named.conf" для вторичного сервера имен

Используйте эту конфигурацию для сервера вполняющего роль вторичного сервера имен. Вы должны модифицировать файл "named.conf" на вторичном сервере имен. Измените каждое вхождение master на slave, сделав исключение для "0.0.127.in-addr.arpa", и добавьте строку с IP адресом первичного сервера, как это показано ниже.

Создайте файл named.conf (touch /etc/named.conf) и добавьте в него:

options {
   directory "/var/named";
   fetch-glue no;
   recursion no;
   allow-query { 208.164.186/24; 127.0.0/8; };
   allow-transfer { 208.164.186.1; };
   transfer-format many-answers;
};
// These files are not specific to any zone
zone "." in {
   type hint;
   file "db.cache";
};
zone "0.0.127.in-addr.arpa" in {
   type master;
   file "db.127.0.0";
};
// These are our slave zone files
zone "openna.com" in {
   type slave;
   file "db.openna";
   masters { 208.164.186.1; };
};
zone "186.164.208.in-addr.arpa" in {
   type slave;
   file "db.208.164.186";
   masters { 208.164.186.1; };
};

Этот файл говорит серверу, что он является вторичным для зоны "openna.com" и должен брать информацию об этой зоне с хоста "208.164.186.1". Вторичному серверу имен нет необходимости получать все файлы (db) через сеть, так как db файлы "db.127.0.0" и "db.cache" одинаковы как для основного так и для вторичных серверов, поэтому вы можете создать их локальные копии на вторичном сервере.

Копируйте файл "db.127.0.0" с основного сервера на подчиненный.

Копируйте файл "db.cache" с основного сервера на подчиненный.

Конфигурация скрипта "/etc/rc.d/init.d/named" для всех типов серверов имен

Сконфигурируйте ваш скрипт "/etc/rc.d/init.d/named" для запуска и остановки демона BIND/DNS. Этот скрипт может быть использован для всех типов серверов (кэширующего, основного или подчиненного).

Создайте следующий скрипт named (touch /etc/rc.d/init.d/named):

#!/bin/sh
#
# named Этот скрипт командного интерпретатора отвечает за запуск и
# остановку (BIND DNS сервера).
#
# chkconfig: - 55 45
# description: named (BIND) is a Domain Name Server (DNS) \
# that is used to resolve host names to IP addresses.
# probe: true
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -f /usr/sbin/named ] || exit 0
[ -f /etc/named.conf ] || exit 0
RETVAL=0
# See how we were called.
case "$1" in
  start)
    # Start daemons.
    echo -n "Starting named: "
    daemon named
    RETVAL=$?
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/named
    echo
  ;;
  stop)
    # Stop daemons.
    echo -n "Shutting down named: "
    killproc named
    RETVAL=$?
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/named
    echo
  ;;
  status)
    /usr/sbin/ndc status
    exit $?
  ;;
  restart)
    $0 stop
    $0 start
  ;;
  reload)
    /usr/sbin/ndc reload
    exit $?
  ;;
  probe)
    # named знает как правильно перезагружаться; мы не хотим использовать 
    # linuxconf для перезагрузок
    /usr/sbin/ndc reload >/dev/null 2>&1 || echo start
    exit 0
  ;;
  *)
    echo "Usage: named {start|stop|status|restart}"
    exit 1
esac
exit $RETVAL

Сейчас, надо сделать этот скрипт исполняемым и изменить права доступ, принятые по умолчанию:

[root@deep]# chmod 700 /etc/rc.d/init.d/named

Создайте символические rc.d ссылки для BIND/DNS:

[root@deep]# chkconfig --add named

Скрипт BIND/DNS не будет автоматически стартовать, когда вы перезагружаете сервер. Чтобы изменить это, выполните следующую команду:

[root@deep]# chkconfig --level 345 named on

Запустите вручную ваш DNS сервер:

[root@deep]# /etc/rc.d/init.d/named start
Starting named: [ OK ]

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

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

Глава 14 Серверное программное обеспечение (BIND/Сервис DNS) (Часть2)

В этой главе
Linux DNS и BIND сервер
Конфигурации
Кэширующий DNS-сервер
Основной сервер имен
Вторичный сервер имен
Организация защиты ISC BIND/DNS
Административные средства DNS
Утилиты пользователя DNS

Организация защиты ISC BIND/DNS

Запуск ISC BIND/DNS в chroot окружении.

Эта часть фокусируется на предотвращении использования ISC BIND/DNS, как точки прерывания для доступа к системе. Так как ISC BIND/DNS выполняет относительно большую и комплексную функцию, вероятность возникновения ошибки, затрагивающей защиту, высока. Фактически, в прошлом имелись дефекты, которые позволяли удаленному пользователю получить root доступ к серверу с запущенным BIND.

Чтобы минимизировать риск, ISC BIND/DNS может быть запущен как не root пользователь, который сможет нанести повреждения, как нормальный пользователь с локальным shell. Конечно, этого не достаточно для обеспечения безопасности большинства DNS серверов, поэтому может быть предпринят дополнительный шаг - запуск ISC BIND в chroot заключении.

Основная выгода chroot состоит в том, что в результате ограничивается часть файловой системы, которую DNS демон может видеть, корневым каталогом "окружения". Так как "окружение" создается только для поддержки DNS, число программ связанных с ISC BIND/DNS и доступных в этой части файловой системы чрезвычайно ограничено. Наиболее важно то, что здесь отпадает необходимость в setuid-root программах, которые могут быть использованы для получения root доступа и взлома "окружения".

ЗАМЕЧАНИЕ: Исполняемая программа "named" должна располагаться в каталоге, описанном в переменной PATH. В этом документе, я буду считать, что путь к named будет "/usr/sbin/named".

Для запуска ISC BIND/DNS в chroot "окружении" необходимо сделать слеующие шаги:

Шаг 1

Мы должны найти совместно-используемые библиотеки от которых зависит named (named - это DNS демон). Их будет нужно позже скопировать в chroot "окружение".

Для поиска подобных библиотек используйте следующую команду:

[root@deep /]# ldd /usr/sbin/named
libc.so.6 => /lib/libc.so.6 (0x40017000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

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

Шаг 2

Сейчас мы должны определить chroot окружение и создавать корневой каталог для него. Мы выбрали каталог "/chroot/named", потому что хотим разместить ее на независимом разделе, чтобы предотвратить атаки на файловую систему. Раньше, во время инсталляции Linux мы создали раздел "/chroot" специально предназначенный для этого.

[root@deep /]# /etc/rc.d/init.d/named stop (требуется ввести только если сещуствующий named демон запущен)
Shutting down named: [ OK ]
[root@deep /]# mkdir -p /chroot/named

Затем, создаем остальные каталоги:
[root@deep /]# mkdir /chroot/named/dev
[root@deep /]# mkdir /chroot/named/lib
[root@deep /]# mkdir /chroot/named/etc
[root@deep /]# mkdir -p /chroot/named/usr/sbin
[root@deep /]# mkdir -p /chroot/named/var/run
[root@deep /]# mkdir /chroot/named/var/named

Сейчас копируем основные конфигурационные файлы, файлы с описаниями зон, программы named named-xfer в необходимые места:

[root@deep /]# cp /etc/named.conf /chroot/named/etc/
[root@deep /]# cd /var/named ; cp -a . /chroot/named/var/named/
[root@deep /]# mknod /chroot/named/dev/null c 1 3
[root@deep /]# chmod 666 /chroot/named/dev/null
[root@deep /]# cp /usr/sbin/named /chroot/named/usr/sbin/
[root@deep /]# cp /usr/sbin/named-xfer /chroot/named/usr/sbin/

ВАЖНОЕ ЗАМЕЧАНИЕ. Для подчиненного сервера имен владельцем каталога "/chroot/named/var/named" и всех файлов расположенных в нем должен быть процесс с "named", иначе вы не сможете осуществить пересылку зоны. Чтобы сделать на подчиненном сервере владельцем каталога "named" и всех файлов лежащих в нем пользователя "named" используйте следующую команду:

[root@deep /]# chown -R named.named /chroot/named/var/named/

Шаг 3

Копируйте разделяемые библиотеки определенные на шаге 1 в chroot каталог lib:

[root@deep /]# cp /lib/libc.so.6 /chroot/named/lib/
[root@deep /]# cp /lib/ld-linux.so.2 /chroot/named/lib/

Шаг 4

Копируйте файлы "localtime" и "nsswitch.conf" в chroot каталог etc, чтобы элементы файлов регистрации были правильно установлены для вашей временной зоны:

[root@deep /]# cp /etc/localtime /chroot/named/etc/
[root@deep /]# cp /etc/nsswitch.conf /chroot/named/etc/

Шаг 5

Для большей безопасности на некоторые файлы из каталога "/chroot/named/etc" мы должны установить бит постоянства:

[root@deep /]# cd /chroot/named/etc/
[root@deep etc]# chattr +i nsswitch.conf
[root@deep /]# cd /chroot/named/etc/
[root@deep etc]# chattr +i named.conf

Файл с атрибутом "+i" не может быть модифицирован, удален или переименован; к нему не может быть создана ссылка и никакие данные не могут быть записаны в него. Только суперпользователь может установить или снять этот атрибут.

Шаг 6

Добавьте новый UID и новый GID для запуска демона "named", если они еще не определены. Это важно, так как запуск его как root нарушит правильное функционирование "окружения", а использование существующих пользовательских id позволит вашему сервису получить доступ к другим ресурсам.

Проверьте файлы "/etc/passwd" и "/etc/group" на наличие свободных UID/GID. В нашем примере, мы используем номер "53" и имя "named".

[root@deep /]# useradd -c "DNS Server" -u 53 -s /bin/false -r -d /chroot/named named 2>/dev/null || :

Шаг 7

Мы должны сказать syslogd (демону системы syslog) о новом chrooted сервисе: Обычно, процессы обращаются к syslogd через "/dev/log". chroot-овое "окружение", этого сделать не сможет, поэтому syslogd необходимо объяснить, что нужно слушать "/chroot/named/dev/log" вместо принятого по умолчанию "dev/log". Чтобы сделать это, нужно редактировать скрипт запуска syslog.

Редактируйте скрипт syslog (vi +24 /etc/rc.d/init.d/syslog) и измените следующую строку:

daemon syslogd -m 0
Должна читаться как:
daemon syslogd -m 0 -a /chroot/named/dev/log

Шаг 8

Скрипт для запуска ISC BIND/DNS по умолчанию настроен для запуска его вне chroot "окружения". Мы должны внести следующие изменения в файл named (vi /etc/rc.d/init.d/named), чтобы исправить это:

[ -f /usr/sbin/named ] || exit 0
Должна читаться:
[ -f /chroot/named/usr/sbin/named ] || exit 0


[ -f /etc/named.conf ] || exit 0
Должна читаться:
[ -f /chroot/named/etc/named.conf ] || exit 0


daemon named
Должна читаться:
daemon /chroot/named/usr/sbin/named -t /chroot/named/ -unamed -gnamed

Опция "-t" говорит "named" запускаться, используя новое chroot окружение.
Опция "-u" определяет пользователя от имени которого стартует named.
Опция "-g" определяет группу от имени которой стартует named.

Шаг 9

В BIND 8.2, команда "ndc" стала двоичным файлом (ранее, это был скрипт), которая в этой конфигурации не работает. Чтобы исправить это, пакет ISC BIND/DNS должен быть скомпилирован из исходных кодов.

[root@deep /]# cp bind-src.tar.gz /vat/tmp
[root@deep /]# cd /var/tmp/
[root@deep tmp]# tar xzpf bind-src.tar.gz
[root@deep tmp]# cd src
[root@deep src]# cp port/linux/Makefile.set port/linux/Makefile.set-orig

Редактируем файл Makefile.set (vi port/linux/Makefile.set) и делаем в нем следующие изменения:

'CC=egcs -D_GNU_SOURCE'
'CDEBUG=-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions -g'
'DESTBIN=/usr/bin'
'DESTSBIN=/chroot/named/usr/sbin'
'DESTEXEC=/chroot/named/usr/sbin'
'DESTMAN=/usr/man'
'DESTHELP=/usr/lib'
'DESTETC=/etc'
'DESTRUN=/chroot/named/var/run'
'DESTLIB=/usr/lib/bind/lib'
'DESTINC=/usr/lib/bind/include'
'LEX=flex -8 -I'
'YACC=yacc -d'
'SYSLIBS=-lfl'
'INSTALL=install'
'MANDIR=man'
'MANROFF=cat'
'CATEXT=$$N'
'PS=ps p'
'AR=ar crus'
'RANLIB=:'

Различие между Makefile, который мы использовали прежде и новым, заключается в изменении строк "DESTSBIN=", "DESTEXEC=" и "DESTRUN=". В них мы задаем новое месторасположение файлов и теперь программа "ndc" будет знать, где находится "named".

[root@deep src]# make clean
[root@deep src]# make
[root@deep src]# cp bin/ndc/ndc /usr/sbin/
[root@deep src]# cp: overwrite `/usr/sbin/ndc'? y
[root@deep src]# strip /usr/sbin/ndc

Мы создали двоичный файл, а затем копируем полученную программу "ndc" в "/usr/sbin", переписывая старую. Мы не должны забыть выполнить команду strip для улучшения производительности.

Шаг 10

Также хорошей идеей будет создание новых двоичных файлов "named" и "named-xfer", чтобы грантировано использовать одну и туже версию "named" и "ndc".

Для named:

[root@deep /]# cd /var/tmp/src
[root@deep src]# cp port/linux/Makefile.set-orig port/linux/Makefile.set
[root@deep src]# cp: overwrite `port/linux/Makefile.set'? y

Редактируйте файл Makefile.set (vi port/linux/Makefile.set) и внесите в него следующие изменения:

'CC=egcs -D_GNU_SOURCE'
'CDEBUG=-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions -g'
'DESTBIN=/usr/bin'
'DESTSBIN=/usr/sbin'
'DESTEXEC=/usr/sbin'
'DESTMAN=/usr/man'
'DESTHELP=/usr/lib'
'DESTETC=/etc'
'DESTRUN=/var/run'
'DESTLIB=/usr/lib/bind/lib'
'DESTINC=/usr/lib/bind/include'
'LEX=flex -8 -I'
'YACC=yacc -d'
'SYSLIBS=-lfl'
'INSTALL=install'
'MANDIR=man'
'MANROFF=cat'
'CATEXT=$$N'
'PS=ps p'
'AR=ar crus'
'RANLIB=:'
[root@deep src]# rm -f .settings
[root@deep src]# make clean
[root@deep src]# make
[root@deep src]# cp bin/named/named /chroot/named/usr/sbin
[root@deep src]# cp: overwrite `/chroot/named/usr/sbin/named'? y
[root@deep src]# cp bin/named-xfer/named-xfer /chroot/named/usr/sbin
[root@deep src]# cp: overwrite `/chroot/named/usr/sbin/named-xfer'? y
[root@deep src]# strip /chroot/named/usr/sbin/named
[root@deep src]# strip /chroot/named/usr/sbin/named-xfer

Мы удалили файл ".settings", так как система кэширует в нем переменные и выполнили команду "make clean", чтобы убедиться, что у нас не возникнут старые наложения. После того, как создан файл "named", мы копируем его вместе с "named-xfer" в chroot каталог и используем команду "strip" для улучшения производительности новых исполняемых файлов.

Step 11

Удаление ненужных файлов и каталогов.

[root@deep /]# rm -f /usr/sbin/named
[root@deep /]# rm -f /usr/sbin/named-xfer
[root@deep /]# rm -f /etc/named.conf
[root@deep /]# rm -rf /var/named/

Мы удаляем "named" и "named-xfer" из "/usr/sbin", так как они будут теперь запускаться из chroot каталога. Тоже самое проделываем и для файла "named.conf" и каталога "/var/named".

Шаг 12

Мы должны тестировать новую chroot-овую конфигурацию ISC BIND/DNS.

Первое, перезапустите ваш syslogd демон:

[root@deep /]# /etc/rc.d/init.d/syslog restart
Shutting down kernel logger:      [ OK ]
Shutting down system logger:      [ OK ]
Starting system logger:           [ OK ]
Starting kernel logger:           [ OK ]

Теперь можно запустить chroot версию ISC BIND/DNS:

[root@deep /]# /etc/rc.d/init.d/named start
Starting named:	                  [ OK ]

Проверяем, что ISC BIND/DNS запущен от имени пользователя "named" с новыми аргументами:

[root@deep /]# ps auxw | grep named
named 11446 0.0 1.2 2444 1580 ? S 23:09 0:00 /chroot/named/usr/sbin/named -t /chroot/named/ -u named -g named

Первая колонка говорит, что программа запущена с UID "named". Конец строки должен содержать "named -t /chroot/named/ -u named -g named", представляющие из себя новые аргументы.

Очистка после работы

[root@deep /]# rm -rf /var/tmp/src bind-src.tar.gz

Эта команда перемещает исходные файлы и tar архив, которые мы использовали при компиляции и инсталляции ISC BIND/DNS.

Дополнительная документация

Для получения большей информации вы можете читать следующие страницы руководства:

$ man dnsdomainname (1) - показывает доменное имя системы
$ man dnskeygen (1) - создает публичный, приватный и разделяемый секретные ключи для DNS Security
$ man dnsquery (1) - запрос доменного имени, используя распознаватель (resolver)
$ man named (8) - сервер доменной службы имен (DNS)
$ man hesiod_to_bind [hesiod] (3) - Интерфейсная библиотека к серверу имен Hesiod
$ man ldconfig (8) - определяет связи времени выполнения
$ man lesskey (1) - определяет ключ связанный с less
$ man raw (8) - привязывает "сырые" символьные устройства Linux
$ man mkfifo (1) - создает FIFO (именные каналы)
$ man named-bootconf (8) - конвертирует конфигурационный файл сервера имен
$ man named-xfer (8) - вспомогательный агент для входящей зонной пересылки
$ man named.conf [named] (5) - конфигурационный файл
$ man Opcode (3) - Отключает opcode-ы named, когда компилируется perl код
$ man dig (1) - посылает запросы к серверу имен
$ man nslookup (8) - создание интерактивных запросов к серверу имен
$ man ndc (8) - программа контролирующая работу сервера имен

Административные средства DNS

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

dig

Утилита "dig" (domain information groper) может быть использована для обновления файла "db.cache", который говорит вашему серверу какие сервера отвечают за корневую зоны. Такие сервера изменяются чрезвычайно редко. Хорошей идеей будет обновлять ваш файл каждые один-два месяца.

Используйте следующую команду для получения нового файла db.cache:

[root@deep /]# dig @.aroot-servers.net . ns > db.cache

Копируйте, полученный файл db.cache в каталог /var/named/.

[root@deep /]# cp db.cache /var/named/

Где @a.root-servers.net - это адрес root сервера у которого вы спрашиваете о новой файле db.cache и db.cache - имя вашего нового db.cache файла.

ndc

Утилита "ndc", входящая в ISC BIND/DNS, позволяет системному администратору из терминала интерактивно контролировать деятельность сервера имен.

Наберите на вашем терминале ndc и затем help, чтобы увидеть список доступных команд.

[root@deep /]# ndc
Type help -or- /h if you need help.
ndc> help
getpid
status
stop
exec
reload [zone] ...
reconfig (just sees new/gone zones)
dumpdb
stats
trace [level]
notrace
querylog
qrylog
help
quit
ndc> /e

Утилиты пользователя DNS

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

nslookup

Программа nslookup позволяет пользователям интерактивно или не интерактивно запрашивать сервера имен Интернет. В интерактивном режиме пользователи могут запрашивать у серверов имен информацию о различных хостах и доменах, печатать список хостов в домене. В не интерактивном режиме пользователь может получить имена и запросить информацию о хостах и доменах.

Интерактивный режим имеет много опций и команд; рекомендуется прочитать страницу руководства для nslookup или дать команду help в интерактивном режиме.

Для запуска nslookup в интерактивном режиме используйте команду:

[root@deep /]# nslookup
Default Server: deep.openna.com
Address: 208.164.186.1
> help
$Id: nslookup.help,v 8.4 1996/10/25 18:09:41 vixie Exp $

Команды: (идентификаторы представлены в верхнем регистре, что делать не обязательно)

NAME - печатает информацию о хосте/домене NAME, используя сервер по умолчанию
NAME1 NAME2 - то же, что и выше, но используется сервер NAME2
help или ? - печатает информацию об основных командах; смотрите nslookup(1) для деталей
set OPTION - устанавливает опции
all - печатает опции, текущий сервер и хост
[no]debug - печатает отладочную информацию
[no]d2 - печатает полную отладочную информацию

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

[root@deep /]# nslookup www.redhat.com
Server: deep.openna.com
Address: 208.164.186.1
Non-authoritative answer:
Name: www.portal.redhat.com
Addresses: 206.132.41.202, 206.132.41.203
Aliases: www.redhat.com

Где <www.redhat.com> это имя или Интернет адрес о котором вы хотите получить информацию.

dnsquery

Программа dnsquery запрашивает сервера имен через библиотеку определителей.Для организации запроса на сервер имен, используя библиоткеку определителей, введите следующую команду:

[root@deep /]# dnsquery <host>

Например:

[root@deep /]# dnsquery www.redhat.com
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40803
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4
;; www.redhat.com, type = ANY, class = IN
www.redhat.com. 2h19m46s IN CNAME www.portal.redhat.com.
redhat.com. 2h18m13s IN NS ns.redhat.com.
redhat.com. 2h18m13s IN NS ns2.redhat.com.
redhat.com. 2h18m13s IN NS ns3.redhat.com.
redhat.com. 2h18m13s IN NS speedy.redhat.com.
ns.redhat.com. 1d2h18m8s IN A 207.175.42.153
ns2.redhat.com. 1d2h18m8s IN A 208.178.165.229
ns3.redhat.com. 1d2h18m8s IN A 206.132.41.213
speedy.redhat.com. 2h18m13s IN A 199.183.24.251

где <host> - имя хоста информацию о котором вы хотите получить.

host

Программа host определяет имя хоста, используя DNS. Для определения имен хоста используя сервер имен, введите следующую команду:

[root@deep /]# host <FQDN, domain names, host names, or host numbers>

Например:

[root@deep /]# host redhat.com
redhat.com has address 207.175.42.154

где <FQDN, domain names, host names, or host numbers> FDQN - полностью определенное имя домена (www.redhat.com), domain names - доменное имя (redhat.com), host names - имя хоста (www) или host numbers - адрес хоста (207.175.42.154).

Для поиска всей информации предоставляемой DNS о хосте используйте команду:

[root@deep /]# host <-a domain names >
Например:
[root@deep /]# host -a redhat.com
Trying null domain
rcode = 0 (Success), ancount=6
The following answer is not authoritative:
The following answer is not verified as authentic by the server:
redhat.com 8112 IN NS ns.redhat.com
redhat.com 8112 IN NS ns2.redhat.com
redhat.com 8112 IN NS ns3.redhat.com
redhat.com 8112 IN NS speedy.redhat.com
redhat.com 8112 IN A 207.175.42.154
redhat.com 11891 IN SOA ns.redhat.com noc.redhat.com(
2000021402 ;serial (version)
3600 ;refresh period
1800 ;retry refresh this often
604800 ;expiration period
86400 ;minimum TTL
)
For authoritative answers, see:
redhat.com 8112 IN NS ns.redhat.com
redhat.com 8112 IN NS ns2.redhat.com
redhat.com 8112 IN NS ns3.redhat.com
redhat.com 8112 IN NS speedy.redhat.com
Additional information:
ns.redhat.com 94507 IN A 207.175.42.153
ns2.redhat.com 94507 IN A 208.178.165.229
ns3.redhat.com 94507 IN A 206.132.41.213
speedy.redhat.com 8112 IN A 199.183.24.251

Для получения полного описания домена используйте команду:

[root@deep /]# host <-l domain names >
Например:
[root@deep /]# host -l openna.com
openna.com name server deep.openna.com
openna.com name server mail.openna.com
localhost.openna.com has address 127.0.0.1
deep.openna.com has address 208.164.186.1
mail.openna.com has address 208.164.186.2
www.openna.com has address 208.164.186.3

Эта опция вызовет получение всех данных о зоне для доменного имени "openna.com". Подобная команды должна использоваться только если это действительно необходимо.

Инсталлированные файлы.

> /etc/rc.d/init.d/named
> /etc/rc.d/rc0.d/K45named
> /etc/rc.d/rc1.d/K45named
> /etc/rc.d/rc2.d/K45named
> /etc/rc.d/rc3.d/K45named
> /etc/rc.d/rc4.d/K45named
> /etc/rc.d/rc5.d/K45named
> /etc/rc.d/rc6.d/K45named
> /etc/named.conf
> /usr/bin/addr
> /usr/bin/nslookup
> /usr/bin/dig
> /usr/bin/dnsquery
> /usr/bin/host
> /usr/bin/nsupdate
> /usr/bin/mkservdb
> /usr/lib/bind
> /usr/lib/bind/include/hesiod.h
> /usr/lib/bind/include/sys
> /usr/lib/bind/include/net
> /usr/lib/bind/lib
> /usr/lib/bind/lib/libbind.a
> /usr/lib/bind/lib/libbind_r.a
> /usr/lib/nslookup.help
> /usr/man/man1/dig.1
> /usr/man/man1/host.1
> /usr/man/man1/dnsquery.1
> /usr/man/man1/dnskeygen.1
> /usr/man/man3/hesiod.3
> /usr/man/man3/gethostbyname.3
> /usr/man/man3/inet_cidr.3
> /usr/man/man3/resolver.3
> /usr/man/man3/getnetent.3
> /usr/man/man3/tsig.3
> /usr/lib/bind/include
> /usr/lib/bind/include/arpa
> /usr/lib/bind/include/arpa/inet.h
> /usr/lib/bind/include/arpa/nameser.h
> /usr/lib/bind/include/arpa/nameser_compat.h
> /usr/lib/bind/include/isc
> /usr/lib/bind/include/isc/eventlib.h
> /usr/lib/bind/include/isc/misc.h
> /usr/lib/bind/include/isc/tree.h
> /usr/lib/bind/include/isc/logging.h
> /usr/lib/bind/include/isc/heap.h
> /usr/lib/bind/include/isc/memcluster.h
> /usr/lib/bind/include/isc/assertions.h
> /usr/lib/bind/include/isc/list.h
> /usr/lib/bind/include/isc/dst.h
> /usr/lib/bind/include/isc/irpmarshall.h
> /usr/lib/bind/include/netdb.h
> /usr/lib/bind/include/resolv.h
> /usr/lib/bind/include/res_update.h
> /usr/lib/bind/include/irs.h
> /usr/lib/bind/include/irp.h
> /usr/man/man3/getaddrinfo.3
> /usr/man/man3/getipnodebyname.3
> /usr/man/man5/resolver.5
> /usr/man/man5/irs.conf.5
> /usr/man/man5/named.conf.5
> /usr/man/man7/hostname.7
> /usr/man/man7/mailaddr.7
> /usr/man/man8/named.8
> /usr/man/man8/ndc.8
> /usr/man/man8/named-xfer.8
> /usr/man/man8/named-bootconf.8
> /usr/man/man8/nslookup.8
> /usr/man/man8/nsupdate.8
> /usr/sbin/ndc
> /usr/sbin/named
> /usr/sbin/named-xfer
> /usr/sbin/irpd
> /usr/sbin/dnskeygen
> /usr/sbin/named-bootconf
> /var/named

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

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

Глава 15 Серверное программное обеспечение (Почтовый сервис) - Sendmail (часть 1)

В этой главе
Linux Sendmail сервер
Конфигурации
Организация защиты Sendmail
Утилиты администратора Sendmail
Утилиты пользователя Sendmail
Linux Imap и Pop сервер
Конфигурации
Настройка Imap и POP для использования с TCP-Wrappers inetd супер сервером
Организация защиты IMAP/POP

Linux Sendmail сервер

Краткий обзор.

Sendmail - это один из наиболее широко используемых Почтовых Транспортных Агентов (MTA) в мире. Основное назначение MTA - это пересылка почтовых сообщений с одной машины на другую. Sendmail не клиентская программа, которую вы можете использовать для чтения вашей почты. Она перемещает вашу почту через сети или Интернет туда, куда вы хотите ее отправить. Sendmail в прошлом была легкой целью для хакеров, но с появлением Sendmail версии 8, использовать ее для взлома стало значительно труднее.

Здесь мы представим вам две различные конфигурации Sendmail; одна для центрального почтового концентратора, другая для локального или граничного клиента и сервера.

Конфигурация центрального почтового концентратора будет использована для серверов, в задачу которых входит отправка, получение и перенаправление всех почтовых сообщений со всех локальных и граничных клиентов и серверов вашей сети. Конфигурация для локальных или граничных клиентов и серверов относится ко всем другим локальным серверам и клиентам вашей сети на которых запущен Sendmail и которые отправляют исходящую почту на центральных почтовых концентратор для ее дальнейшей доставки. Этот тип внутренних клиентов никогда не посылают почту напрямую через Интернет; вместо этого вся почта из Интернета для этих компьютеров хранится на центральном почтовом концентраторе. Запуск одного центрального почтового концентратора для всех компьютеров вашей сети является хорошей идеей; эта архитектура будет ограничивать задачу управления на сервере и клиентских машинах и улучшит безопасность вашего сайта.

Вы можете настроить граничный Sendmail так, чтобы он принимал почту созданную только локально, такая изоляция граничной машины нужна для удобства защиты. Шлюз (вне межсетевого защитного экрана или как часть его) выступает как прокси и принимает внешние почтовые сообщения (через файл правил защитного экрана), которые предназначены для внутренней доставки и перенаправляет их на центральный почтовый концентратор. Также заметим, что Шлюз настроен как граничный Sendmail сервер, чтобы никогда не принимать входящую почту снаружи (из Интернет).

Это графическое представление конфигурации Sendmail, которую мы используем в этой книге. Мы попытаемся показать вам различные установки (Центральный почтовый концентратор и локальный или граничный клиенты и сервера) на различных серверах. Существует много возможных решений в зависимости от ваших нужд и сетевой архитектуры.

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
Sendmail версии 8.10.1

Пакеты.
Домашняя страница Sendmail: http://www.sendmail.org/
FTP сервер: 204.152.184.34
Вы должны скачать: sendmail.8.10.1.tar.gz

Тарболы.
Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции Sendmail и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,
До инсталляции:
find /* > Sendmail1

После инсталляции:
find /* > Sendmail2

Для получения списка установленных файлов:
diff Sendmail1 Sendmail2 > Sendmail-Installed

Раскроем тарбол (tar.gz).

[root@deep /]# cp sendmail.version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf sendmail.version.tar.gz

Конфигурирование
Переместитесь в новый каталог Sendmail и выполните следующее:
Редактируйте файл smrsh.c (vi +77 smrsh/smrsh.c) и измените строку:
# define CMDDIR "/usr/adm/sm.bin"
Должна читаться:
# define CMDDIR "/etc/smrsh"
Эта модификация задает поисковый путь по умолчанию для команд, запускающих программу "smrsh". Это позволяет нам ограничивать место, где эти программы расположены.

Компиляция и оптимизация

Скрипт Build из Sendmail использует конфигурационных файл сайта в котором определяются тип операционной системы и различные флаги компиляции. Этот файл находится в каталоге "devtools/OS" и если вы запускаетесь на Linux, то он имеет имя "Linux". Мы пересоздадим этот конфигурационный файл сайта для соответствия его вашей системе и поместим в каталог "devtools/OS" дерева исходных кодов Sendmail, так как скрипт Build будет в процессе компиляции искать конфигурационный файл по умолчанию именно в этом месте.

Переместитесь в новый каталог Sendmail и редактируйте файл Linux (vi devtools/OS/Linux), удалив в нем все предопределенные строки и добавив следующие новые:

define(`confENVDEF', `-DPICKY_QF_NAME_CHECK -DXDEBUG=0')
define(`confCC', `egcs')
define(`confOPTIMIZE', `-O9 -funroll-loops -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions')
define(`confLIBS', `-lnsl')
define(`confLDOPTS', `-s')
define(`confMANROOT', `/usr/man/man')
define(`confMANOWN', `root')
define(`confMANGRP', `root')
define(`confMANMODE', `644')
define(`confMAN1SRC', `1')
define(`confMAN5SRC', `5')
define(`confMAN8SRC', `8')
define(`confDEPEND_TYPE', `CC-M')
define(`confNO_HELPFILE_INSTALL')
define(`confSBINGRP', `root')
define(`confSBINMODE', `6755')
define(`confUBINOWN', `root')
define(`confUBINGRP', `root')
define(`confEBINDIR', `/usr/sbin')

где опции обозначают следующее:

define(`confENVDEF', `-DPICKY_QF_NAME_CHECK -DXDEBUG=0')
Это макро опция первично использовалась для определения кода, который должен быть включен или исключен. С "-DPICKY_QF_NAME_CHECK", Sendmail будет фиксировать ошибку, если файл "qf" сформирован некорректно и будет переименовывать файл "qf" в "Qf". Аргумент "-DXDEBUG=0 " отключает шаги дополнительных внутренних проверок в течении компиляции.

define(`confCC', `egcs')
Эта макро опция определяет компилятор C используемый при компиляции Sendmail. В нашем случае мы используем C компилятор "egcs" для лучшей оптимизации.

define(`confOPTIMIZE', `-O9 -funroll-loops -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions')
Эта макро опция определяет флаги используемые для оптимизации под вашу CPU архитектуру.

define(`confLIBS', `-lnsl')
Эта макро опция определяет флаг -l передаваемый ld.

define(`confLDOPTS', `-s')
Эта макро опция определяет опции компоновщика передаваемые ld.

define(`confMANROOT', `/usr/man/man')
Эта макро опция определяет место, куда надо инсталлировать страницы руководства (man) Sendmail.

define(`confMANOWN', `root')
Эта макро опция определяет владельца всех проинсталлированных страниц руководства Sendmail.

define(`confMANGRP', `root')
Эта макро опция определяет группу для всех проинсталлированных страниц руководства Sendmail.

define(`confMANMODE', `644')
Эта макро опция определяет режим доступа для всех проинсталлированных страниц руководства Sendmail.

define(`confMAN1SRC', `1')
Эта макро опция определяет источник для страниц руководств устанавливаемых в confMAN1.

define(`confMAN5SRC', `5')
Эта макро опция определяет источник для страниц руководств устанавливаемых в confMAN5.

define(`confMAN8SRC', `8')
Эта макро опция определяет источник для страниц руководств устанавливаемых в confMAN8.

define(`confDEPEND_TYPE', `CC-M')
Эта макро опция определяет как создавать зависимости с Sendmail.

define(`confNO_HELPFILE_INSTALL')
Эта макро опция говорит, что не надо инсталлировать файл помощи Sendmail по умолчанию. Некоторые опытные администраторы рекомендуют сделать это для большей безопасности.

define(`confSBINGRP', `root')
Эта макро опция определяет группу для всех исполняемых файлов со сменой идентификатора (setuid) Sendmail.

define(`confSBINMODE', `6755')
Эта макро опция определяет режим доступа для всех исполняемых файлов со сменой идентификатора (setuid) Sendmail.

define(`confUBINOWN', `root')
Эта макро опция определяет владельца всех исполняемых файлов Sendmail.

define(`confUBINGRP', `root')
Эта макро опция определяет группу всех исполняемых файлов Sendmail.

define(`confEBINDIR', `/usr/sbin')
Эта макро опция определяет куда должны быть установлены двоичные исполняемые файлы исполняемые из других двоичных файлов. В Red Hat Linux этот путь должен быть определен как "/usr/sbin".

Шаг 2
Сейчас мы должны скомпилировать и проинсталлировать Sendmail на нашем сервере:

[root@deep sendmail-8.10.1]# cd sendmail
[root@deep sendmail]# sh Build
[root@deep sendmail]# sh Build install
[root@deep sendmail]# cd ..
[root@deep sendmail-8.10.1]# cd mailstats
[root@deep mailstats]# sh Build install
[root@deep mailstats]# cd ..
[root@deep sendmail-8.10.1]# cd smrsh
[root@deep smrsh]# sh Build install
[root@deep smrsh]# cd ..
[root@deep sendmail-8.10.1]# cd makemap
(Требуется только для конфигурации Почтового концентратора)
[root@deep makemap]# sh Build install (Требуется только для конфигурации Почтового концентратора)
[root@deep makemap]# cd ..
[root@deep sendmail-8.10.1]# cd praliases
(Требуется только для конфигурации Почтового концентратора)
[root@deep makemap]# sh Build install (Требуется только для конфигурации Почтового концентратора)
[root@deep makemap]# cd ..
[root@deep sendmail-8.10.1]# ln -fs /usr/sbin/sendmail /usr/lib/sendmail
[root@deep sendmail-8.10.1]# chmod 511 /usr/sbin/smrsh
[root@deep sendmail-8.10.1]# install -d -m 755 /var/spool/mqueue
[root@deep sendmail-8.10.1]# chown root.mail /var/spool/mqueue
[root@deep sendmail-8.10.1]# mkdir /etc/smrsh

Команда "sh Build" собирает и создает необходимые зависимости для различных двоичных файлов требуемых Sendmail до инсталляции на вашу систему.

Команда "sh Build install" инсталлирует исполняемые двоичные файлы sendmail, mailstats, makemap, praliases, smrsh и страницы руководства, ечли это было задано перед компиляцией.

Команда "ln -fs" создает символическую ссылку исполняемого файла sendmail в каталоге "/usr/lib". Это требуется, так как некоторые программы пытаются искать sendmail в этом каталоге (/usr/lib).

Команда "install" создаст каталог "mqueue" с правами 755 в каталоге "/var/spool". Почтовые сообщения по разным причинам могут быть сразу не доставлены. Чтобы гарантировать их доставку, Sendmail запоминает их в каталоге "mqueue" пока они не будут отправлены.

Команда "chown" устанавливает UID "root" и GID "mail" для каталога "mqueue".

Команда "mkdir" будет создавать каталог "/etc/smrsh". Здесь будут лежать все программы-почтальоны, которые мы разрешим запускать Sendmail.

ЗАМЕЧАНИЕ. Программы "makemap" и "praliases" должны быть установлены только на центральном почтовом концентраторе. "makemap" позволяет вам создавать базы данных соответствий наподобии файлам "/etc/mail/aliases.db" или "/etc/mail/access.db". "praliases" выводит системные почтовые псевдонимы (содержимое файла /etc/mail/aliases). Так как лучше иметь только одно место (подобное центральному почтовому концентратору) для обработки и управления всеми db файлами в вашей сети, то нет необходимости использовать программы "makemap" и "praliases" и создавать db файлы на других компьютерах сети.

Конфигурации.

Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации.

Скопируйте файлы связанные с Sendmail из архива, измените их под свои требования и поместите в нужное место так, как это описано ниже. Файл с конфигурациями вы можете скачать с адреса: http://www.openna.com/books/floppy.tgz

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

Копируйте файл sendmail в каталог "/etc/sysconfig".
Копируйте скрипт sendmail в каталог "/etc/rc.d/init.d/".
Копируйте файл local-host-names в каталог "/etc/mail".
Копируйте файл access в каталог "/etc/mail".
Копируйте файл aliases в каталог "/etc/mail".
Создайте файлы virtusertable, domaintable, mailertable и .db в каталоге "/etc/mail" directory.

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

Копируйте файл sendmail в каталог "/etc/sysconfig".
Копируйте скрипт sendmail в каталог "/etc/rc.d/init.d/".
Копируйте файл local-host-names в каталог "/etc/mail".

Файл "/etc/sendmail.mc" для центрального почтового концентратора

Вместо того, чтобы иметь индивидуальные сервера или рабочие станции обрабатывающие свою почту, намного выгоднее иметь в сети единый мощный центральный сервер, который обрабатывает всю почту. Такой сервер называется Почтовый концентратором. Преимущества Центрального Почтового Концентратора:

Файл "sendmail.cf" первым считывается Sendmail при запуске и является одним из самых важных файлов для него. В нем определяются месторасположения остальных файлов, права доступа к файлам и каталогам нужных Sendmail. Макро препроцессор m4 из Linux используется Sendmail V8 для создания конфигурационного файла.

Он будет создавать конфигурационный файл "/etc/mail/sendmail.cf", обрабатывая файл имя которого заканчивается на ".mc".

Мы создадим файл (sendmail.mc) и внесем в него необходимые макро значения, которые препроцессор m4 прочитает, соберет определения макросов и затем, заменит эти макросы их значениями, создавая в результате своей работы файл "sendmail.cf". Пожалуйста, обратитесь к документации Sendmail и файлу README из каталога "cf" дерева исходных фалов Sendmail V8 для получения большей информации.

Шаг 1

Создайте файл sendmail.mc (touch /var/tmp/sendmail-version/cf/cf/sendmail.mc) и добавьте в него следующие строки:

define(`confDEF_USER_ID',``8:12'')dnl
OSTYPE(`linux')dnl
DOMAIN(`generic')dnl
define(`confTRY_NULL_MX_LIST',true)dnl
define(`confDONT_PROBE_INTERFACES',true)dnl
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
define(`LOCAL_MAILER_FLAGS', `ShPfn')dnl
define(`LOCAL_MAILER_ARGS', `procmail -a $h -d $u')dnl
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
FEATURE(`mailertable')dnl
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl
FEATURE(`redirect')dnl
FEATURE(`always_add_domain')dnl
FEATURE(`use_cw_file')dnl
FEATURE(`local_procmail')dnl
FEATURE(`access_db')dnl
FEATURE(`blacklist_recipients')dnl
FEATURE(`dnsbl')dnl
MAILER(`local')dnl
MAILER(`smtp')dnl
MAILER(`procmail')dnl

Где:

define(`confDEF_USER_ID',``8:12'')dnl
Эта конфигурационная опция определяет id пользователя по умолчанию. В нашем случае пользователь "mail" и группа "mail", которые отвечают следующим идентификатор "8:12" (смотрите /etc/passwd и /etc/group file).

OSTYPE(`linux')dnl
Эта конфигурационная опция задает операционную систему под которой будет запускаться Sendmail; в нашем случае это "linux". Этот элемент является минимально необходимым для "mc" файла.

DOMAIN(`generic')dnl Эта конфигурационная опция будет определять и описывать домен соответствующий вашему окружению.

define(`confTRY_NULL_MX_LIST',true)dnl
Эта конфигурационная опция определяет, является ли принимающий сервер лучшим MX для хоста, и если это так, то соединяется с ним напрямую.

define(`confDONT_PROBE_INTERFACES',true)dnl
Эта конфигурационная опция, если она установлена в true, говорит Sendmail не вставлять имена и адреса любых локальных интерфейсов в класс $=w (список известных "эквивалентных" адресов).

define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
Эта опция определяет путь к программе procmail, инсталлированной на вашей системе. Так как в Red Hat Linux он отличается от других Linux версий, мы должны определить новый путь в этом макросе. Важно заметить, что этот макрос также используется в FEATURE(`local_procmail'), как будет определено позже в этом файле.

define(`LOCAL_MAILER_FLAGS', `ShPfn')dnl
Эта конфигурационная опция определяет флаги, которые должны быть использованы локальным агентом доставки (procmail). Смотрите документацию Sendmail для получения большей информации о них.

define(`LOCAL_MAILER_ARGS', `procmail -a $h -d $u')dnl
Эти конфигурационные опции определяют аргументы которые должны быть переданы локальному агенту доставки (procmail). Смотрите документацию Sendmail для получения информации о них.

FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
Этот m4 макроопределение включает использование "smrsh" (ограниченная оболочка sendmail) вместо "/bin/sh", используемого по умолчанию) для почтовых программ. При помощи этой опции вы можете контролировать какие программы могут запускаться через электронную почту через файлы "/etc/mail/aliases" и "~/.forward". По умолчанию программа "smrsh" находится в "/usr/libexec/smrsh"; так как мы проинсталлировали "smrsh" в другое место, нам нужно добавить аргумент smrsh, указывающий новое месторасположение "/usr/sbin/smrsh". Использование "smrsh" рекомендовано CERT, так что вы должны поддерживать использование этой возможности так часто, как возможно.

FEATURE(`mailertable')dnl
Это макроопределение m4 включает возможность использования "mailertable" (базы данных выбора нового агента доставки). mailertable - это база данных которая связывает имена "host.domain" со специальными агентами доставки. Благодаря этой возможности, почта может доставляться специфическими агентами доставки к новым доменным именам. Обычно, эта возможность используется только на Центральном Почтовом концентраторе.

FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl
Это макроопределение m4 включает использование "virtusertable" (поддержка виртуальных доменов), которая позволяет на одной машине размещать много виртуальных доменов. virtusertable - это база данных, которая связывает виртуальные домены с новыми адресами. Благодаря использованию этой возможности, почта для виртуальных почтовых доменов может быть доставлена на локальные, удаленные или единичные адреса пользователей. Обычно, эта возможность используется только на Центральном Почтовом Концентраторе.

FEATURE(`redirect')dnl
Это макроопределение m4 включает использование "redirect" (поддержка для address.REDIRECT). С этой возможностью, почтовый адрес удаленного бюджета, например, "wahib", будет отражаться с информацией о новом адресе. Удаленный бюджет должен быть определен в файле псевдонимов на почтовом сервере. Обычно, эта возможность используется только на Центральном Почтовом Концентраторе.

FEATURE(`always_add_domain')dnl
Это макроопределение m4 включает использование "always_add_domain" (добавлять локальный домен в локальной почте). Благодаря этой возможности, все локально доставляемые адреса будут полностью квалифицированными.

FEATURE(`use_cw_file')dnl
Это макроопределение m4 включает использование "use_cw_file" (использование файла /etc/mail/local-host-names для локальных имен компьютеров). Используя эту возможность вы можете объявить список хостов в файле "/etc/mail/local-host-names" для которых локальных хост выступает MX получателем. Другими словами файл "/etc/mail/local-host-names" будет содержать альтернативные имена локального компьютера.

FEATURE(`local_procmail')dnl
Это макроопределение m4 включает использование "local_procmail" (использовать procmail, как локальный агент доставки). Благодаря этой функции вы можете использовать procmail, как агент доставки Sendmail.

FEATURE(`access_db')dnl
Это макроопределение m4 включает использование базы данных доступа. Благодаря этой функции, вы можете в базе данных access разрешать или запрещать прием почты из определенных доменов. Обычно, эта возможность используется только на Центральном Почтовом Концентраторе.

FEATURE(`blacklist_recipients')dnl
Это макроопределение m4 включает возможность блокирования входящей почты от определенных отправителей, компьютеров и адресов. Используя эту функцию, например, вы можете блокировать входящую почту от пользователя nobody, хоста foo.mydomain.com или guest@bar.mydomain.com.

FEATURE(`dnsbl')dnl
Это макроопределение m4 разрешает Sendmail отклонять почту от любых сайтов, входящих в базу данных Realtime Blackhole List "rbl.maps.vix.com". Базирующееся на DNS блокирование основывается на базе данных, содержащей DNS имена спаммеров. За подробной информацией обращайтесь на "http://maps.vix.com/rbl/".

MAILER(`local'), MAILER(`smtp') и MAILER(`procmail')dnl
Это макроопределение m4 включает использование агентов доставки "local", "smtp" и "procmail" (по умолчанию Sendmail, агенты доставки автоматичнски не объявляются). Используя эту возможность, вы можете определить какие агенты использовать, а какие игнорировать. Опции MAILER(`local'), MAILER(`smtp') и MAILER(`procmail') поддерживают local, smtp, esmtp, smtp8, relay procmail агенты доставки. Важно отметить, что MAILER(`smtp') должен всегда предшествовать MAILER(`procmail').

ЗАМЕЧАНИЕ. Иногда, домен с которым вы хотите продолжить общаться может входить в список RBL. В этом случае, Sendmail позволит вам переписать разрешение на прием их почты. Чтобы сделать это, просто отредактируйте файл "/etc/mail/access" и добавить соответствующую доменную информацию.
Например:
blacklisted.domain OK

Шаг 2

Сейчас, когда файл с макроопределениями "sendmail.mc" создан, мы создадим конфигурационный файл sendmail ("sendmail.cf"). Для этого используйте следующие команды:

[root@deep /]# cd /var/tmp/sendmail-version/cf/cf/
[root@deep cf]# m4 ../m4/cf.m4 sendmail.mc > /etc/mail/sendmail.cf

ЗАМЕЧАНИЕ. Здесь "../m4/cf.m4" говорит программе m4, где находится конфигурационный файл с информацией по умолчанию.

Так как локальные клиентские машины никогда не получают почту напрямую из внешнего мира и пересылают (отправляют) почту через Центральный Почтовый Концентратор, мы создаем специальный фал, называемый "null.mc", из которого позже мы получим конфигурационный файл "sendmail.cf", отвечающий специальным установкам для граничных и локальных серверов. Этот файл с макроопределениями m4 легко создается и конфигурируется, потому, что ему не нужно столько возможностей как на Центральном Почтовом Концентраторе.

Шаг 1 Создаем фал null.mc (touch /var/tmp/sendmail-version/cf/cf/null.mc) и добавляем в него следующие строки: OSTYPE(`linux')dnl
DOMAIN(`generic')dnl
FEATURE(`nullclient',`mail.openna.com')dnl
undefine(`ALIAS_FILE')dnl
где,

OSTYPE(`linux')
Эта конфигурационная опция задает операционную систему под которой будет запускаться Sendmail; в нашем случае это "linux". Этот элемент является минимально необходимым для "mc" файла.

DOMAIN(`generic')
Эта конфигурационная опция будет определять и описывать домен соответствующий вашему окружению.

FEATURE(`nullclient',`mail.openna.com')
Это макроопределение m4 говорит вашей клиентской машине никогда не принимать почту напрямую, посылать ее через почтовый концентратор, и пересылать всю почту через этот же сервер, вместо того, чтобы отправлять напрямую. Эта возможность создает небольшой конфигурационный файл ни содержащий ничего, кроме информации о пересылки всей почты на почтовый концентратор через локальную сеть, базирующуюся на SMTP-based. Аргумент "mail.openna.com', включенный в это определение, является каноническим именем Почтового концентратора. Вы должны, конечно, изменить это имя на ваш Почтовый концентратор, например: FEATURE(`nullclient',` my.mailhub.com').

undefine(`ALIAS_FILE')
Эта конфигурационная опция предотвращает доступ к файлам "/etc/mail/aliases" и "/etc/mail/aliases.db" со стороны nullclient-ской версии Sendmail. С этой строкой в ".mc" файле, вам не нужно создавать файл "aliases" на вашем внутреннем сервере. Эти файлы необходимы только для Центрального почтового севера.

ЗАМЕЧАНИЕ. Хочется отметить, что со всеми типами конфигураций, должны быть определены no mailers, no aliasing и forwarding.

Шаг 2

Сейчас, когда у нас есть конфигурационный файл с макроопределениями "null.mc", мы будем на его основе создавать конфигурационный файл Sendmail "sendmail.cf" для граничных серверов и клиентских машин, используя следующие команды:

[root@deep /]# cd /var/tmp/sendmail-version/cf/cf/
[root@deep cf]# m4 ../m4/cf.m4 null.mc > /etc/mail/sendmail.cf

Шаг 3

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

Для остановки демона Sendmail, редактируйте или создайте файл "/etc/sysconfig/sendmail" и измените/добавьте следующие строки:

DAEMON=yes
Должна читаться:
DAEMON=no

И: QUEUE=1h

ЗАМЕЧАНИЕ. "QUEUE=1h" в файле "/etc/sysconfig/sendmail" говорит Sendmail, что необходимо обрабатывать очередь каждый час. Мы оставим эту строку, так как Sendmail необходимо периодически выполнять эту операцию, если Почтовый концентратор не работает.

Шаг 4

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

/usr/bin/newaliases
/usr/man/man1/newaliases.1
/usr/man/man5/aliases.5

Для удаления перечисленных файлов используйте следующую команду:

[root@client /]# rm -f /usr/bin/newaliases
[root@client /]# rm -f /usr/man/man1/newaliases.1
[root@client /]# rm -f /usr/man/man5/aliases.5

Шаг 5

Удалите неиспользуемую программу Procmail с ваших локальных серверов и клиентских машин. Так как локальные машины отправляют всю внутреннюю и исходящую почту на центральный почтовый концентратор для дальнейшей доставки, нам нет необходимости использовать локальный агент доставки подобный Procmail. Вместо него мы можем использовать программу "/bin/mail". Для удаления Procmail с вашего сервера используйте следующую команду:

[root@client]# rpm -e procmail

Файлы "/etc/mail/access" и "access.db" для центрального почтового концентратора.

Файл базы данных "access" может быть создан для приема и блокирования почты из выбранных доменов. Например, вы можете выбрать блокирование всей почты исходящей от известных спаммеров, или прием для пересылки всей почты из вашей локальной сети, так как по умолчанию пересылки любой почты в Sendmail запрещена (это антиспаммовая возможность). В файле "access" приведенном ниже, мы разрешаем пересылку почты от локального компьютера и всех локальных сетевых адресов начинающихся с IP адреса 192.168.1. Файлы "access" и "access.db" не требуются на Локальных и граничных клиентах. Они нужны только если вы решили установить центральный почтовый концентратор для управления всей вашей почты. Также заметим, что использование центрального почтового концентратора будет улучшать безопасность и управление другими серверами и клиентами с запущенным Sendmail.

Шаг 1

Создайте файл access (touch /etc/mail/access) и добавьте в него следующие строки:

# Посмотреть описание формата записей используемого в этом файле
# можно в файле "cf/README" из пакета с исходными кодами Sendmail.
#
# В записях используются почтовые адреса, доменные имена и
# сетевые адреса как ключи. Например,
#
# spammer@aol.com REJECT
# cyberspammer.com REJECT
# 192.168.212 REJECT
#
# будет отвергать почту от spammer@aol.com, любых пользователей из
# домена cyberspammer.com (или любых хостов из домена cyberspammer.com)
# и любых хостов из сети 192.168.212.*.
#
# Ключам могут сопостовляться следующие значения:
#
# OK - принимать почту, даже если другие правила запущенного набора 
# правил будут ее отвергать, например, если доменное имя неразрешенное 
# (unresolvable).
# RELAY - принимать почту из указанного домена или принимать ее от них
# для дальнейшей пересылки через ваш SMTP сервер. Для некоторый проверок
# RELAY действует также как и OK.
# REJECT - отклонение отправителя или получателя с универсальным 
# сообщением.
# DISCARD - полное сбрасывание сообщения с использованием
# программы-почтальона $#discard. Это работает только для адресов
# отправителей (т.е. эта опция указывает, что вы должны сбросить любые
# сообщения из указанного домена).
# ### любой текст ### - возвращаемое сообщение представляет из себя 
# совместимый с RFC 821 код ошибки и "любой текст".
#
# Например:
#
# cyberspammer.com 		550 We don't accept mail from spammers
# okay.cyberspammer.com 	OK
# sendmail.org 		OK
# 128.32 			RELAY
#
# будет приниматься почта из okay.cyberspammer.com, но будут сбрасываться
# почта из любых других хостов домена cyberspammer.com с указанным
# сообщением.
# Будет приниматься почта из любых хостов домена sendmail.org,
# и разрешена пересылка почты для сети 128.32.*.*.
#
# Вы можете также использовать базу данных access для блокирования по
# адресу отправителя, базируясь на части адреса, содержащей имя
# пользователя.. Например: 
#
# FREE.STEALTH.MAILER@ 550 Spam not accepted
#
# Заметим, что вы должны указать @ после имени пользователя, чтобы указать,
# что этот элемент базы данных проверяет только имя пользователя в адресе
# отправителя.
#
# Если в вашем файле "sendmail.mc" вы используете макроопределение:
#
# FEATURE(`blacklist_recipients')
#
# тогда вы можете добавить элементы связанные с локальными пользователями,
# хостами в вашем домене или адресов в нем для которых вы не должны
# получать почту:
#
# badlocaluser				 550 Mailbox disabled for this username
# host.mydomain.com			 550 That host does not accept mail
# user@otherhost.mydomain.com		 550 Mailbox disabled for this recipient
#
# Вы хотите предотвратить получение почты для пользователя
# badlocaluser@mydomain.com, любых пользователей из host.mydomain.com и
# одного адреса user@otherhost.mydomain.com.
# Включение этой возможности также будет блокировать всю почту для
# получателей для который указан флаг сообщения об ошибки или REJECT.
#
# spammer@aol.com	 REJECT
# cyberspammer.com	 REJECT
#
# Почта не может быть отправлена пользователю spammer@aol.com или
# кому-либо из cyberspammer.com.
#
# Сейчас ваш конфигурационный файл access,
# разрешает пересылку почты из localhost...
localhost.localdomain	 RELAY
localhost		 RELAY
127.0.0.1		 RELAY
192.168.1		 RELAY

ЗАМЕЧАНИЕ. Не забудьте задать в этом файле диапазон ваших приватных IP адресов для которых вы хотите разрешить пересылку почты или вы не сможете отправлять почту из вашей внутренней сети.

Шаг 2

Создание файла access.dbe:
Помните, так как "/etc/mail/access" является базой данных, то после создания текстового файла описанного выше, вы должны использовать команду "makemap" для создания базы данных схем.
Для создания базы данных схем используйте следующую команду:

[root@deep /]# makemap hash /etc/mail/access.db < /etc/mail/access
Назад Оглавление Вперед

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

Глава 15 Серверное программное обеспечение (Почтовый сервис) - Sendmail (часть 1)

В этой главе
Linux Sendmail сервер
Конфигурации
Организация защиты Sendmail
Утилиты администратора Sendmail
Утилиты пользователя Sendmail
Linux Imap и Pop сервер
Конфигурации
Настройка Imap и POP для использования с TCP-Wrappers inetd супер сервером
Организация защиты IMAP/POP

Файлы "/etc/mail/aliases и aliases.db" для Центрального Почтового Концентратора

Использование псевдонимов это процесс конвертирования одних локальных имен получателей в другие (использование псевдонимов возможно только для локальных имен). Например используется конвертирование общих имен (таких как root) в реальные имена, или конвертирование одних имен в список из нескольких имен (для списка рассылки). Для каждого элемента где локальный пользователь упоминается как получатель, Sendmail смотрит получателя в базе данных "aliases". Так как Sendmail может производить поиск среди нескольких тысяч имен в файле "aliases", копия файла хранится в независимой базе данных "db" для значительного увеличения скорости просмотра. Если вы настраиваете ваш Sendmail на использование Центрального Сервера (Почтового концентратора) для управления всей почты, вам не нужно будет инсталлировать файлы "aliases" и "aliases.db" на граничных серверах и клиентских машинах.

Шаг 1

Создайте файл aliases (touch /etc/mail/aliases) и добавьте в него следующие строки:

#
# @(#)aliases 8.2 (Berkeley) 3/5/94
#
# Псевдонимы в этом файле не будут расширяться в заголоке FROM: почты
# но будут видны через сеть и из /bin/mail.
#
# >>>>>>>>>> Программа "newaliases" должна быть запущена после того
# >> NOTE >> как этот в этот файл будут внесены любые изменения,  
# >>>>>>>>>> чтобы они стали видны в sendmail.
#
# Общие системные псевдонимы - должны быть представлены.
MAILER-DAEMON: postmaster
postmaster: root
# Общие перенаправления для псевдо бюджетов.
bin: root
daemon: root
nobody: root
# Лицо получающее почту пользователя root
#root: admin

ЗАМЕЧАНИЕ. Ваш файл псевдонимов будет скорее всего более сложным. Этот пример показывает минимальный вид этого файла.

Шаг 2

Создание файла aliases.db:
Так как "/etc/mail/aliases" - это база данных, после создания текстового файла как описано выше, вы должны использовать команду "makemap" для создания базы данных схем.
Для создания "базы данных схем псевдонимов", используйте следующую команду:

[root@deep /]# makemap hash /etc/mail/aliases.db < /etc/mail/aliases

Файлы "/etc/mail/virtusertable, domaintable, mailertable, и virtusertable.db,

domaintable.db, mailertable.db" для Центрального Почтового Концетратора.

Все эти файлы связаны с отдельными возможностями Sendmail, которые могут быть настроены системным администратором. Еще раз отметим, что эти возможности нужны только на Центральном Почтовом Концентраторе. Ниже даны краткие описания каждой из них.

Файлы virtusertable и virtusertable.db.

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

Файлы domaintable и domaintable.db.

domaintable - это база данных, которая отображает старые домены на новые. Благодаря этой возможности, несколько доменных имен в вашей сети может быть переписаны из старых доменов в новые.

Файлы mailertable & mailertable.db.

mailertable - это база данных, которая отображает имена вида "host.domain" на специальные агенты доставки и новые пары доменных имен. Благодаря этой возможности может быть доставлена через использования специального агента доствки новым локальным или удаленным доменным именам.

Для создания файлов virtusertable, domaintable, mailertable и их соответсвующих ".db" версий в каталоге "/etc/mail" используйте следующие команды:

[root@deep /]# for map in virtusertable domaintable mailertable
> do
> touch /etc/mail/${map}
> chmod 0644 /etc/mail/${map}
> makemap hash /etc/mail/${map}.db < /etc/mail/${map}
> chmod 0644 /etc/mail/${map}.db
> done

Файл "/etc/mail/local-host-names" для всех типов конфигураций

Файл "/etc/mail/local-host-names" считывается для получения альтернативных имен локального хоста. Одним из способов, как этот файл может быть использован, это объявление списка хостов для которых локальный компьютер выступает как получатель почты через MX записи. На такой машине нам просто нужно добавить имена (например, mail.openna.com), для которых он будет манипулировать почтой. Например:

Создайте файл local-host-names file (touch /etc/mail/local-host-names) и добавьте в него следют строку:

# local-host-names - включает все псевдонимы для вашего компьютера.
openna.com
deep.openna.com
www.openna.com
win.openna.com
mail.openna.com

С такой конфигурацией, вся почта отправляемая на домен "openna.com" или любая почта отправляемая на сервер "www.openna.com" или другой хост будет доставляться на ваш почтовый концентратор "mail.openna.com".

Пожалуйста запомните, что если вы настраивает вашу систему для маскарадинга под другую машину, любая почта посланная из вашей системы на вашу систему будет отправлена на машину под которую вы маскируетесь. Например, в вышеприведенной конфигурации, системные файлы регистрации, которые периодически отправляются на адрес root@www.openna.com, будут отправлены на адрес root@mail.openna.com вашего почтового концентратора.

Конфигурация файла "/etc/sysconfig/sendmail" для всех типов конфигураций

Файл "/etc/sysconfig/sendmail" используется для определения конфигурационной информации SENDMAIL, такой как, запускать ли sendmail как демон, нужно ли слушать порт для приема почты или нет, и как долго ждать перед отправкой предупреждающего сообщения, если сообщение из каталога очереди не может быть доставлено.

Создайте файл sendmail (touch /etc/sysconfig/sendmail) и добавьте в него следующее:

DAEMON=yes
QUEUE=1h

Опция "DAEMON=yes" говорит Sendmail запускаться как демон. Эта строка особо полезна, когда sendmail запускается на клиентских машинах, которые не должны принимать почту из внешнего мира, а должны пересылать все сообщения на центральный почтовый концентратор. Не запуская sendmail, вы также улучшается безопасность. Если вы настаиваете sendmail подобным образом, то замените строку "DAEMON=yes" на "DAEMON=no".

Почта обычно помещается в очередь, потому что не может быть отправлена незамедлительно. "QUEUE=1h" устанавливает интервал времени до отправки предупреждающего сообщения отправителю письма, что его сообщение не может быть доставлено.

Конфигурация скрипта "/etc/rc.d/init.d/sendmail" для всех типов конфигураций.

Настройка скрипта "/etc/rc.d/init.d/sendmail" для запуска и остановки демона Sendmail.
Создайте скрипт-файл sendmail (touch /etc/rc.d/init.d/sendmail) и добавьте в него следующее:

#!/bin/sh
#
# sendmail Это shell скрипт, который заботится о запуске и остановки
# sendmail.
#
# chkconfig: 2345 80 30
# Описание: Sendmail - это почтовый транспортный агент, который \
# используется для перемещения почты с одной машины на другую.
# имя процесса: sendmail
# конфигурационный файл: /etc/sendmail.cf
# pidfile: /var/run/sendmail.pid
# Библиотека исходных функций.
. /etc/rc.d/init.d/functions
# Исходная сетевая конфигурация.
. /etc/sysconfig/network
# Исходная конфигурация sendmail.
if [ -f /etc/sysconfig/sendmail ] ; then
. /etc/sysconfig/sendmail
else
DAEMON=yes
QUEUE=1h
fi
# Проверка, что сеть включена.
[ ${NETWORKING} = "no" ] && exit 0
[ -f /usr/sbin/sendmail ] || exit 0
RETVAL=0
# Смотрим как мы вызываем скрипт.
case "$1" in
start)
# Запуск демона.
echo -n "Starting sendmail: "
/usr/bin/newaliases > /dev/null 2>&1
for i in virtusertable access domaintable mailertable ; do
if [ -f /etc/mail/$i ] ; then
makemap hash /etc/mail/$i < /etc/mail/$i
fi
done
daemon /usr/sbin/sendmail $([ "$DAEMON" = yes ] && echo -bd) \
$([ -n "$QUEUE" ] && echo -q$QUEUE)
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/sendmail
;;
stop)
# Остановка демона.
echo -n "Shutting down sendmail: "
killproc sendmail
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/sendmail
;;
restart|reload)
$0 stop
$0 start
RETVAL=$?
;;
status)
status sendmail
RETVAL=$?
;;
*)
echo "Usage: sendmail {start|stop|restart|status}"
exit 1
esac
exit $RETVAL

Сейчас, сделаем скрипт исполняемым и изменим права доступа по умолчанию:
[root@deep /]# chmod 700 /etc/rc.d/init.d/sendmail
Создадим символическую ссылку rc.d для Sendmail:
[root@deep /]# chkconfig --add sendmail
Запустим Sendmail сервер вручную, используя следующую команду:
[root@deep /]# /etc/rc.d/init.d/sendmail start
Starting sendmail: [ OK ]

Очистка после работы

[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf sendmail-version/ sendmail.version.tar.gz

Команды "rm" будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции Sendmail. Также будет удален сжатый архив Sendmail из каталога "/var/tmp".

Организация защиты Sendmail

Ограниченная оболочка "smrsh" Sendmail.

Программа smrsh предназначается для замены "/bin/sh" в программах почтальонах, определенных в Sendmail. Это ограниченная оболочка, которая предоставляет возможность строго определить через каталог "/etc/smrsh", явный список исполняемых программ доступных Sendmail. Чтобы быть более точным, даже если "плохой парень" использует Sendmail для запуска программ без файлов псевдонимов и forward, smrsh ограничит набор программ, которые он или она сможет выполнить. В связке с Sendmail smrsh эффективно ограничивает область выполняемых программ только теми программами, что перечислены в каталоге /etc/smrsh. Если вы следовали по инструкциям описанным выше, то smrsh уже откомпилирована и инсталлирована в каталог "/usr/sbin/smrsh".

Шаг 1

Первое, что надо сделать, это определить список команд, которые "smrsh" позволит Sendmail выполнять.
По умолчанию в него входят:
"/bin/mail" (если инсталлирована на вашей системе)
"/usr/bin/procmail" (если инсталлирована на вашей системе)

ЗАМЕЧАНИЕ. Вы не должны включать интерпретирующие программы, такие как sh(1), csh(1), perl(1), uudecode(1) или потоковый редактор sed(1) в список разрешенных программ.

Шаг 2

Следующее, что надо сделать, это заполнить каталог "/etc/smrsh" программами, которые разрешено запускать Sendmail. Для предотвращения дублирования программ мы будем создавать символические ссылки.
Для разрешения использования программы "/bin/mail" используйте следующие команды:

[root@deep /]# cd /etc/smrsh
[root@deep smrsh]# ln -s /bin/mail mail

Для разрешения использования программы "/usr/bin/procmail" используйте следующие команды:

[root@deep /]# cd /etc/smrsh
[root@deep smrsh]# ln -s /usr/bin/procmail procmail

Вышеприведенные команды позволят запускать программы mail и procmail из пользовательских файлов ".forward" или файла "aliases", которые используют "program" синтаксис.

ЗАМЕЧАНИЕ. Procmail требуется только на почтовом концентраторе и не требуется на клиентской машине. Если вы настраиваете вашу систему как Центральный почтовый сервер, то создайте ссылку на procmail как описано выше, иначе пропустите его.

Шаг 3

Сейчас мы можем настроить Sendmail на использование защищенного shell. Программа почтальон определяется в одиночной строке конфигурационного файла "/etc/mail/sendmail.cf". Вы должны модифицировать линию "Mprog", заменив в ней "/bin/sh" на "/usr/sbin/smrsh".

Редактируйте файл sendmail.cf (vi /etc/mail/sendmail.cf) и измениет строку: Например:

Mprog, P=/bin/sh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/, T=X-Unix, A=sh -c $u
Дожна быть изменена на:
Mprog, P=/usr/sbin/smrsh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/, T=X-Unix, A=sh -c $u

Сейчас перезапустите вручную процесс sendmail следующей командой:

[root@deep /]# /etc/rc.d/init.d/sendmail restart

ЗАМЕЧАНИЕ. В нашем конфигурационном файле "sendmail.mc", написанном выше, мы уже настроили строку "Mprog" на использование защищенного shell "/usr/sbin/smrsh" при помощи макроопределения "FEATURE(`smrsh',`/usr/sbin/smrsh')", так что не удивляйтесь, если "/usr/sbin/smrsh" уже установлен в "/etc/mail/sendmail.cf" для Почтового концентратора. Используйте технику непосредственного редактирования файла "/etc/mail/sendmail.cf" для тех машин, где вы использовали файл с макроопределениями "null.mc" (граничные сервера и клиентские машины).

Файл"/etc/mail/aliases"

Несовершенное или небрежное администрирование файла "aliases" может привести к легкому получению привилегированному статусу. Например, многие разработчики поставляют системы с псевдонимом "decode" в файле "/etc/mail/aliases". Его основное назначение - облегчение для пользователей пересылки двоичных файлов по почте. Отправляющий пользователь конвертирует двоичный файл в ASCII, используя "uuencode", затем отправляет полученное сообщение псевдониму "decode" на принимающий сервер. Затем псевдоним через канал (pipe) отправляет сообщение программе "/usr/bin/uuencode", которая конвертирует ASCII назад в двоичный файл. Удалите псевдоним "decode" из файла "/etc/mail/aliases". Аналогично, каждый псевдоним, который запускает программу и который вы сам не создавали должен быть проверен и скорее всего удален.

Редактируйте файл aliases (vi /etc/mail/aliases) и удалите следующие строки:

# Базовые псевдонимы системы - ДОЛЖНЫ быть представлены.
MAILER-DAEMON: postmaster
postmaster: root
# Обычная переадресация для псевдобюджетов.
bin: root
daemon: root
games: root - удалите эту строку.
ingres: root - удалите эту строку.
nobody: root
system: root - удалите эту строку.
toor: root - удалите эту строку.
uucp: root - удалите эту строку.
# Хорошо известные псевдонимы.
manager: root - удалите эту строку.
dumper: root - удалите эту строку.
operator: root - удалите эту строку.
# ловушка decode для захвата атаки
decode: root - удалите эту строку.
# Человек получающий почту для пользователя root
#root: marc

Чтобы изменения вступили в силу выполните команду:

[root@deep /]# /usr/bin/newaliases

Предотвращение неправильного обращения к вашему Sendmail неавторизированными пользователями

Sendmail сейчас включает значительные антиспаммовские возможности, которые могут помочь предотвратить неправильное использование вашего почтового сервера неавторизированными пользователями. Для этого, редактируйте ваш файл "/etc/mail/sendmail.cf" и внесите в него изменения блокирующие спаммеров.

Редактируйте файл sendmail.cf (vi /etc/mail/sendmail.cf) и измените строку:

O PrivacyOptions=authwarnings
Должна быть:
O PrivacyOptions=authwarnings,goaway

Установка "goaway" говорит Sendmail отвергать все SMTP "EXPN" команды, отбрасывать все SMTP "VERB" команды и игнорировать все SMTP "VRFY" команды. Эти изменения не дадут спаммеру использовать команды "EXPN" и "VRFY".

Ограничение числа людей, которые могут просматреть содержимое очереди

Обычно, кто угодно может просмотреть почтовую очередь при помощи команды "mailq". Для ограничения тех, кто имеет возможность ее просмотреть используйте опцию "restrictmailq" в файле "/etc/mail/sendmail.cf". С ней, Sendmail позволяет просматривать очередь только тем пользователям, кто входит в группу владеющую ею (root). Это позволяет полностью защитить каталог очереди, используя режим доступа 0700.

Редактируйте файл sendmail.cf (vi /etc/mail/sendmail.cf) и внесите в него следующее изменение:

O PrivacyOptions=authwarnings,goaway
Измените на:
O*-PrivacyOptions=authwarnings,goaway,restrictmailq

Сейчас измените режим доступа к вашему каталогу очереди:
[root@deep /]# chmod 0700 /var/spool/mqueue


И перезапустите процесс sendmail, чтобы изменения вступили в силу:

[root@deep /]# /etc/rc.d/init.d/sendmail restart
Shutting down sendmail:         [ OK ]
Starting sendmail:              [ OK ]

ЗАМЕЧАНИЕ. Мы уже добавили опцию "goaway" в строке "PrivacyOptions=", а сейчас добавили туда же опцию "restrictmailq". Любой непривелигированный пользователь, который попытается изучить почтовую очередь получит следующее собщение:

[user@deep /]$ /usr/bin/mailq
You are not permitted to see the queue

Ограничение пользователей имеющих возможность вызвать обработку очереди пользователем "root"

Обычно, кто угодно может вызвать обработку очереди при помощи ключа "-q". Чтобы только пользователь "root" и владелец каталога очереди могли сделать это используйте опцию "restrictqrun" в файле "/etc/mail/sendmail.cf".

Редактируйте файл sendmail.cf (vi /etc/mail/sendmail.cf) и внесите в него следующее изменение:

O PrivacyOptions=authwarnings,goaway,restrictmailq
Изменить на:
O PrivacyOptions=authwarnings,goaway,restrictmailq,restrictqrun

Перезапустите процесс sendmail, чтобы изменения вступили в силу:

[root@deep /]# /etc/rc.d/init.d/sendmail restart
Shutting down sendmail:   [ OK ]
Starting sendmail:        [ OK ]

Любой непривилегированный пользователь, попытавшийся запустить обработку очереди, получит следующее сообщение:

[user@deep /]$ /usr/sbin/sendmail -q
You do not have permission to process the queue

Приветственное сообщение SMTP

Когда Sendmail принимает входящие SMTP соединения, он посылает на другой хост приветственное сообщение. Оно идентифицирует локальную машину и говорит о том, что sendmail готов к приему.

Редактируйте файл sendmail.cf (vi /etc/mail/sendmail.cf) и измените строку:

O SmtpGreetingMessage=$j Sendmail $v/$Z; $b
Должна быть:
O SmtpGreetingMessage=$j

Перезапустите процесс sendmail, чтобы изменения вступили в силу:

[root@deep /]# /etc/rc.d/init.d/sendmail restart
Shutting down sendmail:   [ OK ]
Starting sendmail:        [ OK ]

Это изменение фактически ничего не меняет, но рекомендуется в группе новостей news.admin.net-abuse.email как законная предосторожность. Оно изменяет заголовок, которое Sendmail выводит при приеме соединений.

Установка бита "постоянства" на важнейшие файлы Sendmail

На важные файлы Sendmail может быть установлен бит "постоянства для лучшей безопасности при помощи команды "chattr". Файл с установленным атрибутом "+i" не может быть модифицирован, удален или переименован, на него нельзя создавать ссылки и никакие данные не могут быть дописаны в такие файлы. Только суперпользователь может снять этот атрибут.

Установите бит "постоянства" на файл "sendmail.cf":
[root@deep /]# chattr +i /etc/mail/sendmail.cf

Установите бит "постоянства" на файл "local-host-names":
[root@deep /]# chattr +i /etc/mail/local-host-names

Установите бит "постоянства" на файл "aliases":
[root@deep /]# chattr +i /etc/mail/aliases

Установите бит "постоянства" на файл "access":
[root@deep /]# chattr +i /etc/mail/access

Дополнительная документация.

Для получения большей информации читайте следующие страницы руководства:

$ man aliases (5) - файл псевдонимов для sendmail
$ man makemap (8) - создание базы данных отображений для sendmail
$ man sendmail (8) - почтовый агент электронной почты
$ man mailq (1) - вывод информации о почтовой очереди
$ man newaliases (1) - пересоздание данных базирующихся на почтовом файле псевдонимов
$ man mailstats (8) - вывод статистики работы sendmail
$ man praliases (8) - вывод системных почтовых псевдонимов

Утилиты администратора Sendmail

Команды описанные ниже мы будем часто использовать, но на самом деле их много больше, и вы должны изучить страницы руководства (man) и документацию, чтобы получить более подробную информацию.

newaliases

Назначение утилиты "newaliases" - это пересоздание и обновление базы данных произвольного доступа для файла почтовых псевдонимов "/etc/mail/aliases". Она должна запускаться каждый раз, когда вы изменяете содержимое этого файла, чтобы изменения вступили в силу.
Обновите файл базы данных псевдонимов с помощью утилиты "newaliases", используя следующую команду:

[root@deep /]# /usr/bin/newaliases

makemap

Назначение утилиты "makemap" это создание базы данных соответствий для Sendmail. Она должна использоваться только когда вам надо создать новую базу данных для файлов подобных aliases, access, domaintable, mailertable и virtusertable.

Запустите команду makemap, чтобы создать новую базу данных access:

[root@deep /]# makemap hash /etc/mail/access.db < /etc/mail/access

где <hash> - это формат базы данных, makemap может манипулировать тремя различными форматами баз данных: "hash", "btree" или "dbm". </etc/mail/access.db> - месторасположения и имя новой базы данных, которую мы создаем. </etc/mail/access> - месторасположение файла из которого мы получаем базу. В нашем примере, мы создаем новый файл "access.db", используя команду makemap. Для создания баз данных из других файлов (aliases, domaintable, mailertable и virtusertable) вы должны определить месторасположение и имена соответствующих файлов в команде "makemap".

mailq

Назначение утилиты "mailq" - это печать краткой информации о почтовых сообщениях, хранящихся в очереди для дальнейшей доставки Для вывода краткой информации о почтовой очереди используйте команду:

[root@deep /]# mailq
Mail queue is empty

Утилиты пользователя Sendmail

Команды описанные ниже мы будем часто использовать, но на самом деле их много больше, и вы должны изучить страницы руководства (man) и документацию, чтобы получить более подробную информацию.

mailstats

Назначение утилиты "mailstats" - это вывод текущей статистики работы почтового сервера.
Для получения текущей почтовой статистики используйте следующую команду:

[root@deep /]# mailstats
Statistics from Tue Dec 14 20:31:48 1999
M   msgsfr   bytes_from   msgsto   bytes_to   msgsrej   msgsdis   Mailer
5     0         0K           1        3K         0         0       esmtp
8    1259      19618K       1259     19278K      0         0       local
=========================================================================
T    1259      19618K       1260     19281K      0         0

praliases

Назначение утилиты "praliases" - вывод текущего почтовых.
Для вывода почтовых псевдонимов используйте команду:

[root@deep /]# praliases
postmaster:root
daemon:root
root:admin
@:@
mailer-daemon:postmaster
bin:root
nobody:root
webadmin:admin
www:root

Файлы инсталлированные для Sendmail на Центральном Почтовом Концентраторе

> /etc/rc.d/init.d/sendmail
> /etc/rc.d/rc0.d/K30sendmail
> /etc/rc.d/rc1.d/K30sendmail
> /etc/rc.d/rc2.d/S80sendmail
> /etc/rc.d/rc3.d/S80sendmail
> /etc/rc.d/rc4.d/S80sendmail
> /etc/rc.d/rc5.d/S80sendmail
> /etc/rc.d/rc6.d/K30sendmail
> /etc/sysconfig/sendmail
> /etc/mail
> /etc/mail/statistics
> /etc/mail/sendmail.cf
> /etc/mail/access
> /etc/mail/access.db
> /etc/mail/aliases
> /etc/mail/aliases.db
> /etc/mail/virtusertable
> /etc/mail/virtusertable.db
> /etc/mail/domaintable
> /etc/mail/domaintable.db
> /etc/mail/mailertable
> /etc/mail/mailertable.db
> /etc/mail/local-host-names
> /etc/smrsh
> /usr/bin/newaliases
> /usr/bin/mailq
> /usr/bin/hoststat
> /usr/bin/purgestat
> /usr/lib/sendmail
> /usr/man/man1/mailq.1
> /usr/man/man1/newaliases.1
> /usr/man/man5/aliases.5
> /usr/man/man8/sendmail.8
> /usr/man/man8/mailstats.8
> /usr/man/man8/makemap.8
> /usr/man/man8/praliases.8
> /usr/man/man8/smrsh.8
> /usr/sbin/sendmail
> /usr/sbin/mailstats
> /usr/sbin/makemap
> /usr/sbin/praliases
> /usr/sbin/smrsh
> /var/spool/mqueue

Файлы инсталлированные для Sendmail на локальном сервере или клиенте

> /etc/rc.d/init.d/sendmail
> /etc/rc.d/rc0.d/K30sendmail
> /etc/rc.d/rc1.d/K30sendmail
> /etc/rc.d/rc2.d/S80sendmail
> /etc/rc.d/rc3.d/S80sendmail
> /etc/rc.d/rc4.d/S80sendmail
> /etc/rc.d/rc5.d/S80sendmail
> /etc/rc.d/rc6.d/K30sendmail
> /etc/sysconfig/sendmail
> /etc/mail
> /etc/mail/statistics
> /etc/mail/sendmail.cf
> /etc/mail/local-host-names
> /etc/smrsh
> /usr/bin/mailq
> /usr/bin/hoststat
> /usr/bin/purgestat
> /usr/lib/sendmail
> /usr/man/man1/mailq.1
> /usr/man/man8/sendmail.8
> /usr/man/man8/mailstats.8
> /usr/man/man8/smrsh.8
> /usr/sbin/sendmail
> /usr/sbin/mailstats
> /usr/sbin/smrsh
> /var/spool/mqueue

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

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

Глава 15 Серверное программное обеспечение (Почтовый сервис) - Sendmail (часть 1)

В этой главе
Linux Sendmail сервер
Конфигурации
Организация защиты Sendmail
Утилиты администратора Sendmail
Утилиты пользователя Sendmail
Linux Imap и Pop сервер
Конфигурации
Настройка Imap и POP для использования с TCP-Wrappers inetd супер сервером
Организация защиты IMAP/POP

Linux Imap и Pop сервер

Краткий обзор

Если вы настроили Sendmail как Центральный Почтовый Концентратор, вы должны инсталлировать IMAP/POP программное обеспечение или вы не сможете воспользоваться преимуществами вашего почтового Linux сервера, так как Sendmail занимается только пересылкой почты с одной на другую машину. Почтовый сервер - это сервер на котором запущено одно или более из следующего: IMAP сервер, POP3 сервер, POP2 сервер или SMTP сервер.

Примером SMTP сервера может служить Sendmail, который мы уже проинсталлировали на нашем Linux сервере, как Центральный Почтовый Концентратор. Далее мы попытаемся охватить инсталляцию IMAP4, POP3 и POP2, которые входят в один пакет.

С IMAP & POP программами, почтовая программа удаленного "клиента" может получить доступ к сообщению хранящемся на почтовом сервере, как будто он находится на этом сервере. Например, почта присылается и запоминается на IMAP сервере для пользователя, который может манипулировать ею из его/ее компьютера дома, в офисе и т.д., без необходимости пересылки сообщений или файлов между этими компьютерами.

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

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
IMAP версии 4.7c

Пакеты.
Домашняя страница IMAP/POP: http://www.washington.edu/imap/
FTP сервер IMAP/POP: 140.142.3.227 или 140.142.4.227
Вы должны скачать: imap.tar.Z

Предварительные условия.
Sendmail сервер должен быть уже установлен на вашей системе.

Тарболы.

Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции Sendmail и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,
До инсталляции:
find /* > Imap1

После инсталляции:
find /* > Imap2

Для получения списка установленных файлов:
diff Imap1 Imap2 > Imap-Installed

Раскроем тарбол (tar.Z).

[root@deep /]# cp imap.tar.Z /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf imap.tar.Z

Компиляция и оптимизация.

Перейдите в новый IMAP/POP каталог и введите следующие команды на вашем терминале:

Шаг 1

Редактируйте файл Makefile (vi +719 src/osdep/unix/Makefile) и измените следующую строку:

sh -c '(test -f /usr/include/sys/statvfs.h -a $(OS) != sc5 -a $(OS) != sco) && $(LN) flocksun.c flockbsd.c || $(LN) flocksv4.c flockbsd.c'
Должна быть:
sh -c '(test -f /usr/include/sys/statvfs.h -a $(OS) != sc5 -a $(OS) != sco -a $(OS) != lnx) && $(LN) flocksun.c flockbsd.c || $(LN) flocksv4.c flockbsd.c'

Эта модификация изменит файл "sys/stavfs". Этот файл, с новой glibc 2.1 из Linux отличается от доступной на Sun.

Редактируйте файл Makefile (vi +354 src/osdep/unix/Makefile) и измените следующую строку:

BASECFLAGS="-g -fno-omit-frame-pointer -O6 -DNFSKLUDGE" \
Должна быть:
BASECFLAGS="-g -fno-omit-frame-pointer -O9 -funroll-loops -ffast-math -malign-double -mcpu= pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions -DNFSKLUDGE" \

Это наши оптимизационные флаги для компиляции программ IMAP/POP на сервере.

Редактируйте файл Makefile (vi +61 src/osdep/unix/Makefile) и измените следующие строки:

ACTIVEFILE=/usr/lib/news/active
Должна быть:
ACTIVEFILE=/var/lib/news/active

SPOOLDIR=/usr/spool
Должна быть:
SPOOLDIR=/var/spool

RSHPATH=/usr/ucb/rsh
Должна быть:
RSHPATH=/usr/bin/rsh

LOCKPGM=/etc/mlock
Должна быть:
#LOCKPGM=/etc/mlock

"ACTIVEFILE="строка определяет путь "активного" каталога для IMAP/POP, "SPOOLDIR="где вы разместите "spool" каталог Linux IMAP/POP, "RSHPATH="определяет путь каталога "rsh" на вашей системе. Важно заметить, что мы не используем сервис rsh на нашем сервере, но даже в этом случае, мы должны определить правильный путь до "rsh".

Редактируйте файл Makefile (vi +89 src/osdep/unix/Makefile) и измените строку:

CC=cc
Должна быть:
CC=egcs

Эта строка определяет имя нашего GCC компилятора, который мы будем использовать при компиляции программ IMAP/POP (в нашем случае egcs).

Шаг 2

Сейчас мы должны компилировать и инсталлировать IMAP & POP на почтовом сервере:

[root@deep imap-4.7c]# make lnp
[root@deep imap-4.7c]# install -m 644 ./src/ipopd/ipopd.8c /usr/man/man8/ipopd.8c
[root@deep imap-4.7c]# install -m 644 ./src/imapd/imapd.8c /usr/man/man8/imapd.8c
[root@deep imap-4.7c]# install -s -m 755 ./ipopd/ipop2d /usr/sbin
[root@deep imap-4.7c]# install -s -m 755 ./ipopd/ipop3d /usr/sbin
[root@deep imap-4.7c]# install -s -m 755 ./imapd/imapd /usr/sbin
[root@deep imap-4.7c]# install -m 644 ./c-client/c-client.a /usr/lib
[root@deep imap-4.7c]# ln -fs /usr/lib/c-client.a /usr/lib/libimap.a
[root@deep imap-4.7c]# mkdir -p /usr/include/imap
[root@deep imap-4.7c]# install -m 644 ./c-client/*.h /usr/include/imap
[root@deep imap-4.7c]# install -m 644 ./src/osdep/tops-20/shortsym.h /usr/include/imap
[root@deep imap-4.7c]# chown root.mail /usr/sbin/ipop2d
[root@deep imap-4.7c]# chown root.mail /usr/sbin/ipop3d
[root@deep imap-4.7c]# chown root.mail /usr/sbin/imapd

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

Заметим, что команда "make lnp" будет настраивать программу под вашу Linux систему с поддержкой Pluggable Authentication Modules (PAM) для лучшей безопасности.

Команда "mkdir" создаст новый каталог с именем "imap" в "/usr/include". Этот новый каталог "imap" будет содержать все заголовочные файлы связанные с программой imapd файлы "c-client/*" и "shortsym.h".

Команда "chown" изменит владельца исполняемых программ "ipop2d", "ipop3d" и "imapd" на пользователя "root" и группу "mail".

Команда "ln -fs" создаст символическую ссылку "libimap.a" к файлу "c-client.a", которая может потребоваться для некоторых других программ, которые мы будем инсталлировать в будущем.

ЗАМЕЧАНИЕ. Из соображений безопасности, если вы используете только imapd сервис, удалите двоичные файлы ipop2d и ipop3d. Тоже верно и для ipopd; если вы используете только ipopd сервис, удалите исполняемый файл imapd. Если же вы используете оба сервиса (imapd и ipopd), то оставьте оба двоичных файла.

Очистка после работы

[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf imap-version/ imap.tar.Z

Команды "rm" будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции IMAP/POP. Также будет удален сжатый архив IMAP/POP из каталога "/var/tmp".

Конфигурации.

Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файл связанные с IMAP/POP из архива, измените их под свои требования и поместите в нужное место так, как это описано ниже. Файл с конфигурациями вы можете скачать с адреса: http://www.openna.com/books/floppy.tgz

Для запуска IMAP/POP сервера следующие файлы должны быть созданы или скопированы в нужный каталог:

Копируйте файл imap в каталог "/etc/pam.d/", если вы планируете использовать imapd сервис.
Копируйте файл pop в каталог "/etc/pam.d/", если вы планируете использовать popd сервис.

Вы можете взять эти файлы из нашего архива floppy.tgz.

Конфигурация файла "/etc/pam.d/imap"

Сконфигурируем ваш файл "/etc/pam.d/imap" для использования pam аутентификации.

Создайте файл imap (touch /etc/pam.d/imap) и добавьте в него:

#%PAM-1.0
auth     required   /lib/security/pam_pwdb.so   shadow nullok
account  required   /lib/security/pam_pwdb.so

ЗАМЕЧАНИЕ. Этот файл нужен, если вы хотите использовать IMAP сервис.

Конфигурация файла "/etc/pam.d/pop".

Сконфигурируем ваш файл "/etc/pam.d/pop" для использования pam аутентификации.

Создайте файл pop (touch /etc/pam.d/pop) и добавьте в него:

#%PAM-1.0
auth     required   /lib/security/pam_pwdb.so   shadow nullok
account  required   /lib/security/pam_pwdb.so

ЗАМЕЧАНИЕ. Этот файл нужен, если вы хотите использовать POP сервис.

Настройка Imap и POP для использования с TCP-Wrappers inetd супер сервером.

Tcp-wrappers берет на себя заботу о запуске и остановке IMAP или POP серверов. При запуске, inetd читает конфигурационную информацию из файла "/etc/inetd.conf". Этот файл содержит поля разделяемые символами табуляции или пробелами.

Шаг 1

Редактируйте файл inetd.conf (vi /etc/inetd.conf) и добавьте или раскомментируйте строки, связанные с сервисами, которые вы хотите включить. Если вы хотите использовать IMAP тогда раскомментируйте строку, связанную с ним, если же вы хотите использовать POP, тогда раскомментируйте его вместо IMAP. В нашем примере мы используем IMAP сервис.

#pop-2  stream  tcp  nowait  root  /usr/sbin/tcpd  ipop2d
#pop-3  stream  tcp  nowait  root  /usr/sbin/tcpd  ipop3d
imap    stream  tcp  nowait  root  /usr/sbin/tcpd  imapd

Не забудьте после обновления вашего файла "inetd.conf" послать процессу inetd сигнал SIGHUP (killall -HUP inetd).
Чтобы изменения вступили в силу перезапустите процесс inetd, используя следующую команду:

[root@deep /root]# killall -HUP inetd

Шаг 2

Если вы хотите инсталлировать IMAP/POP сервер обслуживания ограниченного числа известных реальных IP адресов клиентов, то можно использовать возможности tcp-wrapper-а. Если вы планируете обслуживать dial-up клиентов или сервис Webmail, тогда вы не сможете использовать эти возможности.

Редактируйте файл hosts.deny (vi /etc/hosts.deny) и добавьте следующую строку:

ALL: ALL@ALL, PARANOID

Которая говорит, что все сервисы, все месторасположения клиентов будут заблокированы, пока не будет непосредственного разрешения в файле "hosts.allow".

Редактируйте файл hosts.allow (vi /etc/hosts.allow) и добавьте следующую строку:

imapd: 216.209.228.34 my.domain.com

Которая говорит, что только клиентам с IP адресом "216.209.228.34" и именем хоста "my.domain.com" будет разрешен доступ к IMAP сервису на сервере.

Организация защиты IMAP/POP

Действительно ли вам нужен IMAP/POP сервисы?

Знайте, что IMAP/POP программы используют по умолчанию пароли в текстовом формате. Любой, кто запустит сниффер на вашей сети сможет перехватить имя/пароль и использовать их для подключения к серверу. Проверьте вашу конфигурацию, и если вы используете внешний/удаленный IMAP/POP сервер, то деинсталлируйте IMAP/POP с вашей системы.



Использование SSL с IMAP/POP

К сожалению из-за экспортных ограничений правительства США, IMAP с поддержкой SSL сейчас не доступен. Существуют пакеты предоставляемые третьими производителями, которые позволяют использовать сессии IMAP и POP3 через SSL. Одним из них является WebMail IMP, Веб интерфейс которого позволяет читать почту через Интернет, используя Веб броузер. WebMail IMP использует протокол SSL для шифрования трафика с IMAP/POP сервером. Смотрите главу 20 "Опциональные компоненты устанавливаемые с веб-сервером Apache" для получения большей информации по этой теме.



Дополнительная документация.

Для получения более подробной информации вы можете прочитать следующие страницы руководства:

$ man imapd (8C) - сервер Internet Message Access Protocol (IMAP)
$ man ipopd (8C) - сервер Post Office Protocol (POP)

Инсталлированные файлы

> /etc/pam.d/imap
> /etc/pam.d/pop
> /usr/include/imap
> /usr/include/imap/dummy.h
> /usr/include/imap/env.h
> /usr/include/imap/env_unix.h
> /usr/include/imap/fdstring.h
> /usr/include/imap/flstring.h
> /usr/include/imap/fs.h
> /usr/include/imap/ftl.h
> /usr/include/imap/imap4r1.h
> /usr/include/imap/linkage.h
> /usr/include/imap/lockfix.h
> /usr/include/imap/mail.h
> /usr/include/imap/mbox.h
> /usr/include/imap/mbx.h
> /usr/include/imap/mh.h
> /usr/include/imap/misc.h
> /usr/include/imap/mmdf.h
> /usr/include/imap/mtx.h
> /usr/include/imap/mx.h
> /usr/include/imap/netmsg.h
> /usr/include/imap/news.h
> /usr/include/imap/newsrc.h
> /usr/include/imap/nl.h
> /usr/include/imap/nntp.h
> /usr/include/imap/os_a32.h
> /usr/include/imap/os_a41.h
> /usr/include/imap/os_aix.h
> /usr/include/imap/os_aos.h
> /usr/include/imap/os_art.h
> /usr/include/imap/os_asv.h
> /usr/include/imap/os_aux.h
> /usr/include/imap/os_bsd.h
> /usr/include/imap/os_bsi.h
> /usr/include/imap/os_cvx.h
> /usr/include/imap/os_d-g.h
> /usr/include/imap/os_do4.h
> /usr/include/imap/os_drs.h
> /usr/include/imap/os_dyn.h
> /usr/include/imap/os_hpp.h
> /usr/include/imap/os_isc.h
> /usr/include/imap/os_lnx.h
> /usr/include/imap/os_lyn.h
> /usr/include/imap/os_mct.h
> /usr/include/imap/os_mnt.h
> /usr/include/imap/os_nxt.h
> /usr/include/imap/os_os4.h
> /usr/include/imap/os_osf.h
> /usr/include/imap/os_ptx.h
> /usr/include/imap/os_pyr.h
> /usr/include/imap/os_qnx.h
> /usr/include/imap/os_s40.h
> /usr/include/imap/os_sc5.h
> /usr/include/imap/os_sco.h
> /usr/include/imap/os_sgi.h
> /usr/include/imap/os_shp.h
> /usr/include/imap/os_slx.h
> /usr/include/imap/os_sol.h
> /usr/include/imap/os_sos.h
> /usr/include/imap/os_sun.h
> /usr/include/imap/os_sv2.h
> /usr/include/imap/os_sv4.h
> /usr/include/imap/os_ult.h
> /usr/include/imap/os_vu2.h
> /usr/include/imap/osdep.h
> /usr/include/imap/phile.h
> /usr/include/imap/pop3.h
> /usr/include/imap/pseudo.h
> /usr/include/imap/rfc822.h
> /usr/include/imap/smtp.h
> /usr/include/imap/tcp.h
> /usr/include/imap/tcp_unix.h
> /usr/include/imap/tenex.h
> /usr/include/imap/unix.h
> /usr/include/imap/utf8.h
> /usr/include/imap/shortsym.h
> /usr/lib/c-client.a
> /usr/lib/libimap.a
> /usr/man/man8/ipopd.8c
> /usr/man/man8/imapd.8c
> /usr/sbin/ipop2d
> /usr/sbin/ipop3d
> /usr/sbin/imapd

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

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

Глава 16 Серверное программное обеспечение (Сетевой сервис шифрования) - OPENSSL сервер

В этой главе
Linux OPENSSL сервер
Конфигурации
Команды
Организация защиты Openssl
Linux FreeS/WAN VPN
Настройка RSA private keys secrets
Требования по настройке сети для IPSec
Тестирование инсталляции

Linux OPENSSL сервер

Краткий обзор

Большинство серверов подобных IMAP & POP, Samba, OpenLDAP, FTP, Apache и других, которым необходима аутентификация пользователей перед разрешением использования сервиса, по умолчанию, передают имя пользователя и пароль в простом текстовом виде. Альтернативные механизмы шифрования подобные SSL гарантируют надежность и безопасность транзакций. С этой технологией, данные передаются через сеть в зашифрованном виде. Однажды установив OpenSSL на своем сервере, вы можете использовать его как стороннюю утилиту в других приложениях, для включения в них возможностей SSL.

Из описания OpenSSL:

Проект OpenSSL - это совместная попытка разработать надежную, коммерчески независимую, полнофункциональную и распространяемую с открытыми кодами реализацию протоколов Secure Sockets Layer (SSL v2/v3) и Transport Layer Security (TLS v1) с полной криптографией. Проект управляется добровольцами всемирного сообщества, которые используют Интернет для общения, планирования и разработки инструментария OpenSSL и связанной с ним документацией.



Преимущества криптографии

Основные преимущества использования технологий шифрования следующие:

Патенты

Несколько юридических проблем существует при использовании SSL технологии. Если вы планируете использовать OpenSSL для коммерческих целей, то необходимо получить у RSA лицензию на использование RSA библиотек.

Здесь приведено извлечение из файла README OpenSSL:

Разные компании владеют патентами на разные алгоритмы в разных местах мира. Вы сами отвечаете за то, что бы использование любых алгоритмов для вас было юридически законно, проверяя имеются ли какие-либо патенты у вас в стране. Этот файл включает некоторые патенты о которых мы точно или "по слухам" знаем. Это не точный список.

RSA Data Security держит программный патент на алгоритмы RSA и RC5. Если принадлежащий им код используется в США (и Японии?), вы должны контактировать с RSA Data Security об условиях лицензии. Их веб-сервер: http://www.rsa.com/.

RC4 - это торговая марка RSA Data Security, так что его использование возможно только с разрешения RSA Data Security.

Алгоритм IDEA патентован Ascom в Австрии, Франции, Германии, Италии, Японии, Нидерландах, Испании, Швеции, Швейцарии, Соединенном Королевстве и США. С ними нужно войти в контакт если вы используете этот алгоритм; их веб-сервер: http://www.ascom.ch/.

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
OpenSSL версии 0.9.5a

Пакеты.
Домашняя страница OpenSSL: http://www.openssl.org/
Вы должны скачать: openssl-0.9.5a.tar.gz

Тарболы.

Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции Sendmail и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,
До инсталляции:
find /* > OpenSSL1

После инсталляции:
find /* > OpenSSL2

Для получения списка установленных файлов:
diff OpenSSL1 OpenSSL2 > OpenSSL-Installed

Раскройте тарбол:

[root@deep /]# cp openssl-version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf openssl-version.tar.gz

Компиляция и оптимизация.

Перейдите в новый Openssl каталог и введите следующие команды на вашем терминале:

Шаг 1

Редактируйте файл c_rehash (vi +11 tools/c_rehash) и измените следующую строку:

DIR=/usr/local/ssl
Должен быть:
DIR=/usr

Изменение этой строки будет создавать и инсталлировать OpenSSL в "/usr".

Шаг 2

По умолчанию, исходные файлы OpenSSL предполагают что Perl расположен в каталоге "/usr/local/bin/perl". Мы должны модифицировать строку "#!/usr/local/bin/perl" во всех скриптах, которые зависят от perl, на месторасположение Perl в Red Hat Linux - "/usr/bin".

[root@deep openssl-0.9.5a]# perl util/perlpath.pl /usr/bin (где находится ваша программа perl).

Шаг 3

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

[root@deep openssl-0.9.5a]# export LD_LIBRARY_PATH=`pwd`

Шаг 4

Сейчас, мы должны сконфигурировать OpenSSL под нашу систему:

CC="egcs" \
./Configure linux-elf -DSSL_FORBID_ENULL \
--prefix=/usr \
--openssldir=/etc/ssl

ЗАМЕЧАНИЕ. Опция "-DSSL_FORBID_ENULL" нужна, чтобы запретить нулевое шифрование из соображений безопасности.

Шаг 5

Редактируйте файл Makefile.ssl (vi +50 Makefile.ssl) и внесите следующие изменения:

CC= gcc
Должен быть:
CC= egcs

Редактируйте файл Makefile.ssl (vi +52 Makefile.ssl) и добавьте/измените следующие строки:

CFLAG= -DTHREADS -D_REENTRANT -DSSL_FORBID_ENULL -DL_ENDIAN -DTERMIO -O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions -Wall -DSHA1_ASM -DMD5_ASM -DRMD160_ASM

Редактируйте файл Makefile.ssl (vi +79 Makefile.ssl) и измените следующее значение для процессора Pentium Pro:

PROCESSOR= 686

ЗАМЕЧАНИЕ. Три последние модификации выполненные нами устанавливают оптимизационные флаги для компиляции OpenSSL на сервере. Последняя модификация (PROCESSOR=), если у вас Pentium, то измените на 586, Pentium Pro/II/III на 686, a 486 на 486.

Шаг 6

Редактируйте файл Makefile.ssl (vi +161 Makefile.ssl) и измените следующую строку:

MANDIR=$(OPENSSLDIR)/man
Должна быть:
MANDIR=/usr/man

Этот шаг нужен для определения каталога, куда будут проинсталлированы страницы руководства (man pages) OpenSSL. В нашем случае это каталог "/usr/man".

Шаг 7

Сейчас мы должны скомпилировать и инсталлировать OpenSSL на сервере:

[root@deep openssl-0.9.5a]# make -f Makefile
[root@deep openssl-0.9.5a]# make test
[root@deep openssl-0.9.5a]# make install
[root@deep openssl-0.9.5a]# mv /etc/ssl/misc/* /usr/bin/
[root@deep openssl-0.9.5a]# rm -rf /etc/ssl/misc/
[root@deep openssl-0.9.5a]# rm -rf /etc/ssl/lib/
[root@deep openssl-0.9.5a]# rm -f /usr/bin/CA.pl
[root@deep openssl-0.9.5a]# rm -f /usr/bin/CA.sh
[root@deep openssl-0.9.5a]# install -m 644 libRSAglue.a /usr/lib/
[root@deep openssl-0.9.5a]# install -m 644 rsaref/rsaref.h /usr/include/openssl/
[root@deep openssl-0.9.5a]# strip /usr/bin/openssl
[root@deep openssl-0.9.5a]# mkdir -p /etc/ssl/crl

Команда "make -f" создаст библиотеки OpenSSL (libcrypto.a и libssl.a) и двоичный файл "openssl". Библиотеки будут созданы в каталоге верхнего уровня, а двоичный файл в каталоге "apps". После успешного создания, команда "make test" будет тестировать библиотеки и в заключении "make install" создаст инсталляционный каталог и инсталлирует OpenSSL.

Команда "mv" переместит все файлы из "/etc/ssl/misc/" в каталог "/usr/bin/". Эти файлы двоичные и должны располагаться в "/usr/bin/", так как там находятся все исполняемые файлы вашей системы. Также размещение их в этом каталоге поместит их в поле действия переменной окружения PATH.

Команда "rm" удалит каталоги "/etc/ssl/misc/" и "/etc/ssl/lib/" из вашей системы, так как они сейчас располагаются в другом месте. Также, мы удаляем файлы "CA.pl" и "CA.sh", представляющие из себя небольшие скрипты для создания ваших собственных CA сертификатов. Эти скрипты, связанные с "openssl ca" командами, имеют несколько странные требования, и по умолчанию конфигурация OpenSSL не позволяет вам легко напрямую использовать "openssl ca".Так, что мы создадим скрипт "sign.sh" позже, чтобы заменить их.

ЗАМЕЧАНИЕ. Пакет bc-1.05a-4.i386.rpm или новее должен быть уже проинсталлирован на вашем Linux сервере или вы получите сообщение об ошибке во время тестирования библиотек OpenSSL.

Очистка после работы

[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf openssl-version/ openssl-version.tar.gz

Команды "rm" будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции OpenSSL. Также будет удален сжатый архив OpenSSL из каталога "/var/tmp".

Конфигурации.

Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файл связанные с OpenSSL из архива, измените их под свои требования и поместите в нужное место так, как это описано ниже. Файл с конфигурациями вы можете скачать с адреса: http://www.openna.com/books/floppy.tgz

Для запуска OpenSSL сервера следующие файлы должны быть созданы или скопированы в нужный каталог:

Копируйте файл openssl.cnf в каталог "/etc/ssl/".
Копируйте файл sign.sh в каталог "/usr/bin/".
Вы можете взять эти файлы из нашего архива floppy.tgz.

Конфигурация файла "/etc/ssl/openssl.cnf"

Это общий конфигурационный файл для программы OpenSSL, где вы можете настроить срок хранения ваших ключей, имя организации, адрес и т.д. Эти параметры вы можете изменить в секциях [ CA_default ] и [req_distinguished_name].

Редактируйте файл openssl.cnf (vi /etc/ssl/openssl.cnf):

# Примерный конфигурационный файл OpenSSL.
# Это главным образом используется для создания удостоверяющих запросов.
#
RANDFILE = $ENV::HOME/.rnd
oid_file = $ENV::HOME/.oid
oid_section = new_oids
# Используйте этот конфигурационный файл с опцией "-extfile" из
# утилиты "openssl x509", имя секции содержит 
# расширения  X.509v3, чтобы использовать:
# extensions =
# (Альтернативно, используйте конфигурационный файл который имеет только
# X.509v3 расширения в основной [= default] секции.)
[ new_oids ]
# Мы можем добавить новый OIDs здесь для использования в 'ca' и 'req'.
# Добавьте простой OID подобно этому:
# testoid1=1.2.3.4
# Или используйте подстановку конфигурационного файла наподобие этого:
# testoid2=${testoid1}.5.6
####################################################################
[ ca ]
default_ca = CA_default # Это ca секция по умолчанию
####################################################################
[ CA_default ]
dir = /etc/ssl # где все хранится
certs = $dir/certs # где хранятся штатные сертификаты
crl_dir = $dir/crl # где хранятся штатные crl
database = $dir/ca.db.index # файл с базой данных индексов.
new_certs_dir = $dir/ca.db.certs # место по умолчанию для новых сертификатов.
certificate = $dir/certs/ca.crt # CA сертификат
serial = $dir/ca.db.serial # текущий регистрационный номер
crl = $dir/crl.pem # текущий CRL
private_key = $dir/private/ca.key # приватный ключ
RANDFILE = $dir/ca.db.rand # приватный файл со случайным числом
x509_extensions = usr_cert # расширение добавляемое к сертификату
# Расширение добавляемое к CRL. Замечание: Netscape communicator
# основывается на V2 CRL так что по умолчанию это закомментировано,
# чтобы оставить V1 CRL.
# crl_extensions = crl_ext
default_days = 365 # сколько времени удостоверяет
default_crl_days = 30 # сколько времени до следующего CRL
default_md = md5 # какой использовать md.
Preserve = no # сохранять порядок пройденных DN
# Несколько различных путей для определения, как подобные запросы должны
# выглядеть для CA, список атрибутов должен быть такой же и  плюс некоторые
# необязательные поля 
policy = policy_match
# Для CA политик
[ policy_match ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
# Для 'чьих угодно' политик
# В этом пункте вы должны перечислить все приемлемые типы объектов
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
####################################################################
[ req ]
default_bits = 1024
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
x509_extensions = v3_ca # Расширение добавляемое к самоподписанным сертификатам
[ req_distinguished_name ]
countryName = Country Name (2-х буквенный код)
countryName_default = CA
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (полное имя)
stateOrProvinceName_default = Quebec
localityName = Locality Name (например, город)
localityName_default = Montreal
0.organizationName = Organization Name (например, компания)
0.organizationName_default = Open Network Architecture
# мы можем сделать это, но обычно это не нужно :-)
#1.organizationName = Second Organization Name (например, компания)
#1.organizationName_default = World Wide Web Pty Ltd
organizationalUnitName = Organizational Unit Name (например, подразделение)
organizationalUnitName_default = Internet Department
commonName = Common Name (например, ВАШЕ имя)
commonName_default = www.openna.com
commonName_max = 64
emailAddress = Email Address
emailAddress_default = admin@openna.com
emailAddress_max = 40
# SET-ex3 = SET extension number 3
[ req_attributes ]
challengePassword = A challenge password
challengePassword_min = 4
challengePassword_max = 20
unstructuredName = An optional company name
[ usr_cert ]
# Эти расширения добавляются, когда 'ca' подписанный запрос.
# Это идет против рекомендаций PKIX, но некоторые CA делают это и
# некоторые программы запрашивают это, чтобы уклониться от
# интерпретирования сертификатов конечных пользователей как CA.
basicConstraints=CA:FALSE
# Здесь приведены некоторые примеры использования nsCertType. Если это
# пропущено, то сертификат может использоваться для каких-нибудь пропусков
# подписаний объектов.
# Это OK для сервера SSL.
# nsCertType = server
# Это используется для объекта, подписывающего сертификат.
# nsCertType = objsign
# Это обычно используется для нормальных клиентов
# nsCertType = client, email
# и для всего, включая объекты подписания:
# nsCertType = client, email, objsign
# Это типично в keyUsage для клиентских сертификатов.
# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
# Это будет выводится в списковом окне комментариев Netscape.
nsComment = "OpenSSL Generated Certificate"
# PKIX рекомендации, безопасно если включены  все сертификаты.
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer:always
# Это для subjectAltName и issuerAltname.
# Импортирование почтового адрес.
# subjectAltName=email:copy
# Copy subject details
# issuerAltName=issuer:copy
#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem
#nsBaseUrl
#nsRevocationUrl
#nsRenewalUrl
#nsCaPolicyUrl
#nsSslServerName
[ v3_ca]
# Расширение для типичного CA
# Рекомендация PKIX.
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer:always
# Это то, что рекомендует PKIX, но некоторые  "неправильные" программы
# засоряют критическими расширениями
#basicConstraints = critical,CA:true
#Так мы делаем это вместо вышеприведенного.
basicConstraints = CA:true
# Ключевое использование: это типично для CA сертификатов. Однако, так как
# это предотвратит использование для проверки самоподписанных
# сертификатов, лучше по умолчанию это не учитывать.
# keyUsage = cRLSign, keyCertSign
# Некоторые могли бы хотеть также 
# nsCertType = sslCA, emailCA
# Включение почтового адреса в subject alt name: другая рекомендация PKIX
# subjectAltName=email:copy
# Копирование деталей запрашивающей стороны
# issuerAltName=issuer:copy
# RAW DER hex encoding of an extension: beware experts only!
# 1.2.3.5=RAW:02:03
# You can even override a supported extension:
# basicConstraints= critical, RAW:30:03:01:01:FF
[ crl_ext ]
# CRL extensions.
# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
# issuerAltName=issuer:copy
authorityKeyIdentifier=keyid:always,issuer:always

ЗАМЕЧАНИЕ. Файл "openssl.cnf" уже будет существовать на вашей системе, когда вы скомпилируете и проинсталлируете программу OpenSSL, и может быть найден в каталоге "/etc/ssl/". Вам не нужно менять все опции установленные по умолчанию в этом файле; обычно, достаточно внести изменения в секции [CA_default] и [req_distinguished_name].

Создание программы "/usr/bin/sign.sh"

Команда "openssl ca" имеет некоторые странные требования и конфигурация OpenSSL по умолчанию не позволяет легко использовать ее напрямую. Поэтому мы будем создавать программу "sign.sh", заменяющую собой "openssl ca".
Создайте программный файл sign.sh (touch /usr/bin/sign.sh) и добавьте в него следующие строки:

#!/bin/sh
##
## sign.sh -- Sign a SSL Certificate Request (CSR)
## Copyright (c) 1998-1999 Ralf S. Engelschall, All Rights Reserved.
##
# argument line handling
CSR=$1
if [ $# -ne 1 ]; then
echo "Usage: sign.sign <whatever>.csr"; exit 1
fi
if [ ! -f $CSR ]; then
echo "CSR not found: $CSR"; exit 1
fi
case $CSR in
*.csr ) CERT="`echo $CSR | sed -e 's/\.csr/.crt/'`" ;;
* ) CERT="$CSR.crt" ;;
esac
# make sure environment exists
if [ ! -d ca.db.certs ]; then
mkdir ca.db.certs
fi
if [ ! -f ca.db.serial ]; then
echo '01' >ca.db.serial
fi
if [ ! -f ca.db.index ]; then
cp /dev/null ca.db.index
fi
# create an own SSLeay config
cat >ca.config <<EOT
[ ca ]
default_ca = CA_own
[ CA_own ]
dir = /etc/ssl
certs = /etc/ssl/certs
new_certs_dir = /etc/ssl/ca.db.certs
database = /etc/ssl/ca.db.index
serial = /etc/ssl/ca.db.serial
RANDFILE = /etc/ssl/ca.db.rand
certificate = /etc/ssl/certs/ca.crt
private_key = /etc/ssl/private/ca.key
default_days = 365
default_crl_days = 30
default_md = md5
preserve = no
policy = policy_anything
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
EOT
# sign the certificate
echo "CA signing: $CSR -> $CERT:"
openssl ca -config ca.config -out $CERT -infiles $CSR
echo "CA verifying: $CERT <-> CA cert"
openssl verify -CAfile /etc/ssl/certs/ca.crt $CERT
# cleanup after SSLeay
rm -f ca.config
rm -f ca.db.serial.old
rm -f ca.db.index.old
# die gracefully
exit 0

Сейчас, сделаем эту программу исполняемой и изменим права доступа принятые по умолчанию:

[root@deep /]# chmod 755 /usr/bin/sign.sh

ЗАМЕЧАНИЕ. Вы можете найти прогамму "sign.sh" в дистрибутиве mod_ssl в каталоге "mod_ssl-version/pkg.contrib/" или в нашем архиве floppy.tgz. Также заметим, что секция [CA_own] должна быть изменена в соответствии с вашим окружением и не забудьте изменит строку "openssl verify -Cafile /etc/ssl/certs/ca.crt $CERT".

Команды.

Команды описанные ниже мы будем часто использовать, но на самом деле их много больше, и вы должны изучить страницы руководства (man) и документацию, чтобы получить более подробную информацию.

Для примера, мы покажем вам как создавать сертификат для вашего Веб сервера Apache и/или ваш личный CA (Certifying Authority (подтверждение полномочий)) для подписания ваших "Certificate Signing Request".

ЗАМЕЧАНИЕ. Все команды перечисленные ниже выполняются в каталоге "/etc/ssl/".

1.1 Создание приватного ключа RSA защищенного парольной фразой для вашего сервера Apache.

[root@deep ssl]# openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
......................+++++
.....+++++
e is 65537 (0x10001)
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:

Пожалуйста, создайте резервную копию файла server.key и запомните парольную фразу.

1.2 Создание Certificate Signing Request (CSR) с серверным приватным ключом RSA.

[root@deep ssl]# openssl req -new -key server.key -out server.csr
Using configuration from /etc/ssl/openssl.cnf
Enter PEM pass phrase:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CA]:
State or Province Name (full name) [Quebec]:
Locality Name (eg, city) [Montreal]:
Organization Name (eg, company) [Open Network Architecture]:
Organizational Unit Name (eg, section) [Internet Department]:
Common Name (eg, YOUR name) [www.openna.com]:
Email Address [admin@openna.com]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:.
An optional company name []:.

ЗАМЕЧАНИЕ. Убедитесь, что вы ввели FQDN (Полностью определенное доменное имя ("Fully Qualified Domain Name")) сервера, когда OpenSSL спросил вас о "CommonName" (например, когда вы создаете CSR для Веб сервера который будет позже доступен через https://www.mydomain.com/, введите www.mydomain.com).

После создания вашего Certificate Signing Request (CSR), у вас возникают два варианта:

Первый, это послать этот сертификат в коммерческие структуры Certifying Authority (CA), подобные Verisign или Thawte, для подписания. Вы обычно отправляете CSR через Веб форму, оплачиваете подписание, ждете Сертификата и запоминаете его в файле "server.crt". Результатом всех этих операций будет настоящий сертификат, который может быть использован с Apache.

Второй, вы можете использовать ваш собственный CA и затем самостоятельно подписывать CSR этим CA. Это решение экономично, и позволяет организации поддерживать собственный CA сервер и создавать так много сертификатов, как нужно для внутреннего использования без выплаты каких-нибудь денег коммерческим CA.

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

1.3 Создание вашего приватного ключа RSA (CA).

[root@deep ssl]# openssl genrsa -des3 -out ca.key 1024
Generating RSA private key, 1024 bit long modulus
...........................+++++
............................................+++++
e is 65537 (0x10001)
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:

Сделайте резервную копию этого файла ca.key и запомните парольную фразу (pass-phrase), которую вы ввели.

1.4 Создание самоподписанного (CA) сертификата (структура x509) с ключом RSA из CA.

[root@deep ssl]# openssl req -new -x509 -days 365 -key ca.key -out ca.crt
Using configuration from /etc/ssl/openssl.cnf
Enter PEM pass phrase:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CA]:
State or Province Name (full name) [Quebec]:
Locality Name (eg, city) [Montreal]:
Organization Name (eg, company) [Open Network Architecture]:
Organizational Unit Name (eg, section) [Internet Department]:CA Marketing
Common Name (eg, YOUR name) [www.openna.com]:
Email Address [admin@openna.com]:
[root@deep ssl]# mv server.key private/
[root@deep ssl]# mv ca.key private/
[root@deep ssl]# mv ca.crt certs/

ЗАМЕЧАНИЕ. Команда "req" создает самоподписанный сертификат, когда используется переключатель -x509.

1.5 Подписание запросов сертификата. (Мы создаем и используем наш личный Certificate Authority (CA))

Приготовьте скрипт для подписания (он нужен, потому что команда "openssl ca'' имеет некоторые странные требования и по умолчанию конфигурация OpenSSL не позволяет ее легко использовать напрямую). Скрипт с именем sign.sh находится в нашем архиве flopy.tgz в каталоге openssl. Используйте этот скрипт для подписания.

Сейчас вы можете использовать CA для подписания CSR сервера, чтобы создать реальный сертификат для внутреннего использования в Веб сервере Apache (предполагаем, что вы уже имеете файл server.csr под рукой):

[root@deep ssl]# /usr/bin/sign.sh server.csr
CA signing: server.csr -> server.crt:
Using configuration from ca.config
Enter PEM pass phrase:
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
countryName :PRINTABLE:'CA'
stateOrProvinceName :PRINTABLE:'Quebec'
localityName :PRINTABLE:'Montreal'
organizationName :PRINTABLE:'Open Network Architecture'
organizationalUnitName :PRINTABLE:'Internet Department'
commonName :PRINTABLE:'www.openna.com'
emailAddress :IA5STRING:'admin@openna.com'
Certificate is to be certified until Dec 1 14:59:29 2000 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
CA verifying: server.crt <-> CA cert
server.crt: OK
This signs the CSR and results in a server.crt file.
[root@deep ssl]# mv server.crt certs/

Сейчас мы имеем два файла: server.key и server.crt. Они могут быть использованы в конфигурационном файле httpd.conf Веб-сервера Apache следующим образом:

SSLCertificateFile /etc/ssl/certs/server.crt (публичный ключ веб сервера)
SSLCertificateKeyFile /etc/ssl/private/server.key (приватный ключ веб сервера)

Файл server.csr больше не нужен.

[root@deep ssl]# rm -f server.csr

ЗАМЕЧАНИЕ. Если вы получили сообщение об ошибке во время подписания сертификата, это потому что вы ввели неправильно FQDN ("Fully Qualified Domain Name") для сервера, когда OpenSSL запросил у вас "CommonName"; "CommonName" должен представлять из себя что-то подобное "my.domain.com" и не "domain.com". Также, так как вы создавали сертификат и CA сертификат, важно, чтобы хотя бы небольшая часть информации представленной в них отличалась, или вы можете столкнуться с проблемами во время подписания удостоверяющих запросов.

Организация защиты OpenSSL

Сделайте ваши ключи "Для чтения и записи" только для пользователя root. Это важно, потому что никому не нужно работать к ним. Для этого выполните следующие команды.

[root@deep /]# chmod 600 /etc/ssl/certs/ca.crt
[root@deep /]# chmod 600 /etc/ssl/certs/server.crt
[root@deep /]# chmod 600 /etc/ssl/private/ca.key
[root@deep /]# chmod 600 /etc/ssl/private/server.key

Некоторые варианты использования OpenSSL

OpenSSL может использоваться для:

  1. Создания вашего сертификационного сервера.
  2. Обеспечения конфиденциальности данных, целостности, аутентификации и электронных подписей при передачи для пользователей.
  3. Безопасность электронных коммерческих транзакций.

Инсталлированные файлы

> /etc/ssl
> /etc/ssl/crl
> /etc/ssl/certs
> /etc/ssl/private
> /etc/ssl/openssl.cnf
> /usr/bin/openssl
> /usr/bin/c_rehash
> /usr/bin/sign.sh
> /usr/man/man1/verify.1
> /usr/man/man1/version.1
> /usr/man/man1/x509.1
> /usr/man/man3/BN_CTX_new.3
> /usr/man/man3/BN_CTX_start.3
> /usr/man/man3/BN_add.3
> /usr/man/man3/BN_add_word.3
> /usr/man/man3/BN_bn2bin.3
> /usr/bin/c_hash
> /usr/bin/c_info
> /usr/bin/c_issuer
> /usr/bin/c_name
> /usr/bin/der_chop
> /usr/include/openssl
> /usr/include/openssl/e_os.h
> /usr/include/openssl/e_os2.h
> /usr/include/openssl/crypto.h
> /usr/include/openssl/tmdiff.h
> /usr/include/openssl/opensslv.h
> /usr/include/openssl/opensslconf.h
> /usr/include/openssl/ebcdic.h
> /usr/include/openssl/md2.h
> /usr/include/openssl/md5.h
> /usr/include/openssl/sha.h
> /usr/include/openssl/mdc2.h
> /usr/include/openssl/hmac.h
> /usr/include/openssl/ripemd.h
> /usr/include/openssl/des.h
> /usr/include/openssl/rc2.h
> /usr/include/openssl/rc4.h
> /usr/include/openssl/rc5.h
> /usr/include/openssl/idea.h
> /usr/include/openssl/blowfish.h
> /usr/include/openssl/cast.h
> /usr/include/openssl/bn.h
> /usr/include/openssl/rsa.h
> /usr/include/openssl/dsa.h
> /usr/include/openssl/dh.h
> /usr/include/openssl/buffer.h
> /usr/include/openssl/bio.h
> /usr/include/openssl/stack.h
> /usr/include/openssl/safestack.h
> /usr/include/openssl/lhash.h
> /usr/include/openssl/rand.h
> /usr/include/openssl/err.h
> /usr/include/openssl/objects.h
> /usr/include/openssl/evp.h
> /usr/include/openssl/asn1.h
> /usr/include/openssl/asn1_mac.h
> /usr/include/openssl/pem.h
> /usr/include/openssl/pem2.h
> /usr/include/openssl/x509.h
> /usr/include/openssl/x509_vfy.h
> /usr/include/openssl/x509v3.h
> /usr/include/openssl/conf.h
> /usr/include/openssl/txt_db.h
> /usr/include/openssl/pkcs7.h
> /usr/include/openssl/pkcs12.h
> /usr/include/openssl/comp.h
> /usr/include/openssl/ssl.h
> /usr/include/openssl/ssl2.h
> /usr/include/openssl/ssl3.h
> /usr/include/openssl/ssl23.h
> /usr/include/openssl/tls1.h
> /usr/include/openssl/rsaref.h
> /usr/lib/libcrypto.a
> /usr/lib/libssl.a
> /usr/lib/libRSAglue.a
> /usr/man/man1/CA.pl.1
> /usr/man/man1/asn1parse.1
> /usr/man/man3/BN_cmp.3
> /usr/man/man3/BN_copy.3
> /usr/man/man3/BN_generate_prime.3
> /usr/man/man3/BN_mod_inverse.3
> /usr/man/man3/BN_mod_mul_montgomery.3
> /usr/man/man3/BN_mod_mul_reciprocal.3
> /usr/man/man3/BN_new.3
> /usr/man/man3/BN_num_bytes.3
> /usr/man/man3/BN_rand.3
> /usr/man/man3/BN_set_bit.3
> /usr/man/man3/BN_zero.3
> /usr/man/man3/CRYPTO_set_ex_data.3
> /usr/man/man3/DH_generate_key.3
> /usr/man/man3/DH_generate_parameters.3
> /usr/man/man3/DH_get_ex_new_index.3
> /usr/man/man3/DH_new.3
> /usr/man/man3/DH_set_method.3
> /usr/man/man3/DH_size.3
> /usr/man/man3/DSA_SIG_new.3
> /usr/man/man3/DSA_do_sign.3
> /usr/man/man3/DSA_dup_DH.3
> /usr/man/man3/DSA_generate_key.3
> /usr/man/man3/DSA_generate_parameters.3
> /usr/man/man3/DSA_get_ex_new_index.3
> /usr/man/man3/DSA_new.3
> /usr/man/man3/DSA_set_method.3
> /usr/man/man3/DSA_sign.3
> /usr/man/man3/DSA_size.3
> /usr/man/man3/ERR_GET_LIB.3
> /usr/man/man3/ERR_clear_error.3
> /usr/man/man3/ERR_error_string.3
> /usr/man/man3/ERR_get_error.3
> /usr/man/man3/ERR_load_crypto_strings.3
> /usr/man/man3/ERR_load_strings.3
> /usr/man/man3/ERR_print_errors.3
> /usr/man/man3/ERR_put_error.3
> /usr/man/man3/ERR_remove_state.3
> /usr/man/man3/EVP_DigestInit.3
> /usr/man/man3/EVP_EncryptInit.3
> /usr/man/man3/OPENSSL_VERSION_NUMBER.3
> /usr/man/man3/OpenSSL_add_all_algorithms.3
> /usr/man/man3/RAND_add.3
> /usr/man/man3/RAND_bytes.3
> /usr/man/man3/RAND_cleanup.3
> /usr/man/man3/RAND_egd.3
> /usr/man/man3/RAND_load_file.3
> /usr/man/man3/RAND_set_rand_method.3
> /usr/man/man3/RSA_blinding_on.3
> /usr/man/man3/RSA_check_key.3
> /usr/man/man3/RSA_generate_key.3
> /usr/man/man3/RSA_get_ex_new_index.3
> /usr/man/man3/RSA_new.3
> /usr/man/man3/RSA_padding_add_PKCS1_type_1.3
> /usr/man/man3/RSA_print.3
> /usr/man/man3/RSA_private_encrypt.3
> /usr/man/man3/RSA_public_encrypt.3
> /usr/man/man3/RSA_set_method.3
> /usr/man/man3/RSA_sign.3
> /usr/man/man3/RSA_sign_ASN1_OCTET_STRING.3
> /usr/man/man3/RSA_size.3
> /usr/man/man3/blowfish.3
> /usr/man/man3/bn.3
> /usr/man/man1/ca.1
> /usr/man/man1/ciphers.1
> /usr/man/man1/crl.1
> /usr/man/man1/crl2pkcs7.1
> /usr/man/man1/dgst.1
> /usr/man/man1/dhparam.1
> /usr/man/man1/dsa.1
> /usr/man/man1/dsaparam.1
> /usr/man/man1/enc.1
> /usr/man/man1/gendsa.1
> /usr/man/man1/genrsa.1
> /usr/man/man1/nseq.1
> /usr/man/man1/openssl.1
> /usr/man/man1/pkcs12.1
> /usr/man/man1/pkcs7.1
> /usr/man/man1/pkcs8.1
> /usr/man/man1/req.1
> /usr/man/man1/rsa.1
> /usr/man/man1/s_client.1
> /usr/man/man1/s_server.1
> /usr/man/man1/sess_id.1
> /usr/man/man1/smime.1
> /usr/man/man1/speed.1
> /usr/man/man1/spkac.1
> /usr/man/man3/bn_internal.3
> /usr/man/man3/buffer.3
> /usr/man/man3/crypto.3
> /usr/man/man3/d2i_DHparams.3
> /usr/man/man3/d2i_RSAPublicKey.3
> /usr/man/man3/dh.3
> /usr/man/man3/dsa.3
> /usr/man/man3/err.3
> /usr/man/man3/hmac.3
> /usr/man/man3/lh_stats.3
> /usr/man/man3/lhash.3
> /usr/man/man3/md5.3
> /usr/man/man3/mdc2.3
> /usr/man/man3/rand.3
> /usr/man/man3/rc4.3
> /usr/man/man3/ripemd.3
> /usr/man/man3/rsa.3
> /usr/man/man3/sha.3
> /usr/man/man3/threads.3
> /usr/man/man3/SSL_get_error.3
> /usr/man/man3/ssl.3
> /usr/man/man5/config.5
> /usr/man/man7/des_modes.7

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

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

Глава 16 Серверное программное обеспечение (Сетевой сервис шифрования) - FreeS/WAN VPN (часть 1)

В этой главе
Linux OPENSSL сервер
Конфигурации
Команды
Организация защиты Openssl
Linux FreeS/WAN VPN
Настройка RSA private keys secrets
Требования по настройке сети для IPSec
Тестирование инсталляции

Linux FreeS/WAN VPN

Краткий обзор

Защита клиент-серверных соединений при помощи SSL отличный выбор, но иногда требуется безопасный канал, обеспечивающий полную конфиденциальность, аутентификацию и целостность данных между двумя межсетевыми экранами через Интернет. Для этого был создан IPSEC.

IPSEC - это Internet Protocol SECurity. Он использует сильную криптографию для обоих сервисов: аутентификации и шифрации. Аутентификация гарантирует что пакеты идут от правильного отправителя и не будут изменены при пересылке. Шифрование предотвращает неавторизованное чтение содержимого пакетов. IPSEC может защищать любые протоколы работающие поверх IP и любые среды передачи используемые под IP. IPSEC может также предоставлять некоторые сервисы безопасности в фоновом режиме, с невидимым для пользователя влиянием. Более того, он может защищать смешанные протоколы, запускаемы через комплексную комбинацию сред передачи (например, IMAP/POP и т.д.) без внесения в них изменений, так как шифрование идет на уровне IP.

Сервис IPSEC позволяет вам создавать безопасные туннели через небезопасные сети. Каждая передача через небезопасную сеть шифруется шлюзом IPSEC и расшифровывается шлюзом на другом конце. В результате возникает Виртуальная Приватная Сеть (Virtual Private Network) или VPN. Эта сеть является частной даже при том, что включает несколько машин объединенных небезопасным Интернет.



Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
Ядро версии 2.2.14.
FreeS/WAN VPN версии 1.3

Пакеты.
Домашняя страница ядра Linux: http://www.kernelnotes.org/
Вы должны скачать: linux-2_2_14_tar.gz
Домашняя страница FreeS/WAN VPN: http://www.freeswan.org/
FTP сервер FreeS/WAN VPN: 194.109.6.26
Вы должны скачать: freeswan-1.3.tar.gz

Тарболы.
Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции FreeS/WAN и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,
До инсталляции:
find /* > Freeswan1

После инсталляции:
find /* > Freeswan2

Для получения списка установленных файлов:
diff Freeswan1 Freeswan2 > Freeswan-Installed

Раскройте тарбол:

[root@deep /]# cp freeswan-version.tar.gz /usr/src/
[root@deep /]# cd /usr/src
[root@deep src]# tar xzpf freeswan-version.tar.gz
[root@deep src]# chown -R 0.0 /usr/src/freeswan-version

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

Инсталляция IPSEC FreeS/WAN Virtual Private Network требует некоторой модификации в вашем оригинальном ядре, так как FreeS/WAN должен быть включен и зарегистрирован в вашем ядре перед тем как вы его используете. Из этих соображений первым шагом инсталляции FreeS/WAN будет переход в секцию "Ядро Linux" этой книги и следование инструкциям о том, как инсталлировать ядро на вашей и вернуться назад к секции "Linux FreeS/WAN VPN" (эта секция) после выполнения команд "make dep; make clean", но перед выполнение "make bzImage".

ПРЕДУПРЕЖДЕНИЕ: Очень рекомендуем, чтобы вы не компилировали что- нибудь в ядре с оптимизационными флагами, если вы планируете инсталлировать программное обеспечение FreeSWAN. Любые оптимизационные флаги добавленные в ядро Linux будут создавать сообщения об ошибках в FreeSWAN IPSEC. Все флаги документированные в главе 5, "Конфигурирование и Создание безопасного и оптимизированного ядра" применимы без каких-либо проблем со всем программным обеспечением описанном в книге за единственным исключением - FreeSWAN IPSEC. Так что повторюсь еще раз, не используйте оптимизационные опции и флаги в вашем ядре Linux, когда компилируете или патчите его для поддержки FreeSWAN.

Компиляция и добавление FreeS/WAN в ядро

Вы должны модифицировать "Makefile" в каталоге с исходными кодами FreeS/WAN и подкаталогах "utils", "klips/utils", "Pluto" и "lib", чтобы определить пути для инсталляции. Мы должны модифицировать эти файлы, чтобы расположение файлов соответствовало структуре файловой системы Red Hate и чтобы после инсталляции они попадали под нашу переменную окружения PATH.

Шаг 1

Переместитесь в верхний уровень нового каталога с исходными кодами FreeS/WAN и введите следующие команды на вашем терминале:
Редактируйте файл Makefile (vi Makefile) и сделайте в нем следующие изменения:

PUBDIR=/usr/local/sbin
Должен быть:
PUBDIR=/usr/sbin

PRIVDIR=/usr/local/lib/ipsec
Должен быть:
PRIVDIR=/usr/lib/ipsec

FINALPRIVDIR=/usr/local/lib/ipsec
Должен быть:
FINALPRIVDIR=/usr/lib/ipsec

MANTREE=/usr/local/man
Должен быть:
MANTREE=/usr/man

Шаг 2

Редактируйте файл Makefile в подкаталоге "utils" (vi utils/Makefile) и сделайте в нем следующие изменения:

PUBDIR=/usr/local/sbin
Должен быть:
PUBDIR=/usr/sbin

PRIVDIR=/usr/local/lib/ipsec
Должен быть:
PRIVDIR=/usr/lib/ipsec

FINALPRIVDIR=/usr/local/lib/ipsec
Должен быть:
FINALPRIVDIR=/usr/lib/ipsec

MANTREE=/usr/local/man
Должен быть:
MANTREE=/usr/man

Шаг 3

Редактируйте файл Makefile в подкаталоге "klips/utils" (vi klips/utils/Makefile) и сделайте в нем следующие изменения:

BINDIR=/usr/local/lib/ipsec
Должен быть:
BINDIR=/usr/lib/ipsec

MANTREE=/usr/local/man
Должен быть:
MANTREE=/usr/man

Шаг 4

Редактируйте файл Makefile в подкаталоге "pluto" (vi pluto/Makefile) и сделайте в нем следующие изменения:

BINDIR=/usr/local/lib/ipsec
Должен быть:
BINDIR=/usr/lib/ipsec

MANTREE=/usr/local/man
Должен быть:
MANTREE=/usr/man

Шаг 5

Редактируйте файл Makefile в подкаталоге "lib" (vi lib/Makefile) и сделайте в нем следующие изменения:

MANTREE=/usr/local/man
Должен быть:
MANTREE=/usr/man

Шаг 6

Редактируйте файл Makefile в подкаталоге "libdes" (vi libdes/Makefile и сделайте в нем следующие изменения:

LIBDIR=/usr/local/lib
Должен быть:
LIBDIR=/usr/lib

BINDIR=/usr/local/bin
Должен быть:
BINDIR=/usr/bin

INCDIR=/usr/local/include
Должен быть:
INCDIR=/usr/include

MANDIR=/usr/local/man
Должен быть:
MANDIR=/usr/man

Шаг 7

Сейчас мы должны скомпилировать и проинсталлировать FreeSWAN на сервере:

[root@deep freeswan-1.3]# make insert
[root@deep freeswan-1.3]# make programs
[root@deep freeswan-1.3]# make install

Команды "make insert" создает символическую ссылку "/usr/src/linux/net/ipsec" на подкаталог с исходными кодами KLIPS, патчит некоторых файлов ядра, добавляет конфигурацию по умолчанию в конфигурационный файл ядра и в заключении создает коммуникационный файл KLIPS - "/dev/ipsec", если его еще нет. Команда "make programs" создает библиотеки, Pluto и различные пользовательские утилиты. "make install" будет инсталлировать демон Pluto и утилиты и делать их запускаемыми при загрузке системы.

Переконфигурирование и инсталляция ядра с поддержкой FreeS/WAN VPN

Сейчас, мы должны вернуться в каталог "/usr/src/linux" и выполнить следующие команды для реконфигурирования ядра с поддержкой FreeS/WAN:

[root@deep freeswan-1.3]# cd /usr/src/linux
[root@deep linux]# make config

Первое, что надо сделать - это включить поддержку FreeS/WAN в ядре. В версии 2.2.14 ядра, новая секция, связанная с frees/WAN VPN, называется "IPSec options (FreeS/WAN)". Вам нужно ответить Y на следующие вопросы.

IPSec options (FreeS/WAN)
IP Security Protocol (FreeS/WAN IPSEC) (CONFIG_IPSEC) [Y/n/?]
IPSEC: IP-in-IP encapsulation (CONFIG_IPSEC_IPIP) [Y/n/?]
IPSEC: PF_KEYv2 kernel/user interface (CONFIG_IPSEC_PFKEYv2) [Y/n/?]
IPSEC: Enable ICMP PMTU messages (CONFIG_IPSEC_ICMP) [Y/n/?]
IPSEC: Authentication Header (CONFIG_IPSEC_AH) [Y/n/?]
HMAC-MD5 authentication algorithm (CONFIG_IPSEC_AUTH_HMAC_MD5) [Y/n/?]
HMAC-SHA1 authentication algorithm (CONFIG_IPSEC_AUTH_HMAC_SHA1) [Y/n/?]
IPSEC: Encapsulating Security Payload (CONFIG_IPSEC_ESP) [Y/n/?]
3DES encryption algorithm (CONFIG_IPSEC_ENC_3DES) [Y/n/?]
IPSEC Debugging Option (DEBUG_IPSEC) [Y/n/?]

ЗАМЕЧАНИЕ. Все настройки, которые вы сделали в различных секциях ядра до первого запуска команд "make config", "make dep" и "make clean" будут сохранены. Поэтому необходимо настроить только раздел "IPSec options (FreeS/WAN)" так, как это описано выше.

Некоторые параметры настройки сети включаются автоматически, даже если вы выключили их. Это связано с тем, что IPSEC нуждается в них. Какой бы ни была программа конфигурирования ядра, вы должны обратить внимание на некоторые проблемы. В частности, проверьте чтобы не были отключены следующие опции из секции "Сетевые опции":

Kernel/User netlink socket (CONFIG_NETLINK) [Y/n/?]
Netlink device emulation (CONFIG_NETLINK_DEV) [Y/n/?]

Компиляция и инсталляция нового ядра с поддержкой FreeS/WAN

Сейчас мы включили поддержку FreeS/WAN VPN в ядре и мы можем его компилировать и инсталлировать.

Возвращаемся в каталог "/usr/src/linux" и запускаем следующие команды:

[root@deep linux]# make dep; make clean; make bzImage

После окончания их работы, следуйте за инструкциями, приведенными в главе 5 "Конфигурирование и создание безопасного и оптимизированного ядра" для нормальной инсталляции нового ядра. После того, как вы проинсталлируете новый образ ядра, system.map, модули (если нужно) и определите в файл lilo.conf загрузку нового ядра, нужно редактировать и настроить конфигурационные файлы связанные с FreeS/WAN "ipsec.conf" и "ipsec.secrets" перед перезагрузкой системы.

Очистка после работы

[root@deep /]# cd /usr/src
[root@deep src]# rm -rf freeswan-version/ freeswan-version.tar.gz

Команды "rm" будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции FreeS/WAN. Также будет удален сжатый архив FreeS/WAN из каталога "/var/tmp".

Конфигурации.

Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файл связанные с FreeSWAN из архива, измените их под свои требования и поместите в нужное место так, как это описано ниже. Файл с конфигурациями вы можете скачать с адреса: http://www.openna.com/books/floppy.tgz

Для запуска FreeSWAN следующие файлы должны быть созданы или скопированы в нужный каталог:

Копируйте файл ipsec.conf в каталог "/etc".
Копируйте файл ipsec.secrets в каталог "/etc".

Вы можете взять эти файлы из нашего архива floppy.tgz.

Настройка файла "/etc/ipsec.conf"

Конфигурационный файл FreeS/WAN "/etc/ipsec.conf" позволяет вам настраивать вашу конфигурацию IPSEC, контролируя информацию и типы соединений. IPSEC сейчас поддерживает два типа соединений: снабжаемые ключами вручную и автоматически снабжаемые ключами. Соединения снабжаемые ключами вручную используют ключи, хранящиеся в файле "/etc/ipsec.conf". Этот тип соединений менее безопасен чем соединения автоматически снабжаемые ключами, которые используют ключи автоматически создаваемые демоном согласования ключей Pluto. Протокол согласования ключей, используемый по умолчанию и называемый IKE, устанавливает подлинность других систем используя совместный секрет, хранящийся в файле "/etc/ipsec.secrets". Мы будем использовать соединения автоматически снабжаемые ключами, так как они более безопасные чем их ручной аналог.

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

Существуют другие конфигурации и вы можете прочитать файлы из подкаталога "doc/examples" для получения большей информации о них.

SubnetDeep==Deep--Deepgate.................Mailgate--Mail==SubnetMail
                            Untrusted net

leftsubnet = SubnetDeep (192.168.1.0/24)
left = Deep (deep.openna.com)
leftnexthop = Deepgate (первый маршрутизатор в направлении или маршрутизатор провайдера для deep.openna.com)
Internet = Untrusted net
rightnexthop = Mailgate (первый маршрутизатор в направлении или маршрутизатор провайдера для mail.openna.com)
right = Mail (mail.openna.com)
rightsubnet = SubnetMail (192.168.1.0/24)

      SubnetDeep
\   192.168.1.0/24   /
+--------------------+
          |
         Deep
\   208.164.186.1    /
+--------------------+
          |
       Deepgate
\   205.151.222.250  /
+--------------------+
          |
    I N T E R N E T
          |
       Mailgate
/  205.151.222.251 \
+-------------------+
          |
         Mail
/  208.164.186.2  \
+------------------+
          |
      SubnetMail
 /  192.168.1.0/24 \
+-------------------+

SubnetDeep - это IP адрес вашей внутренней приватной сети за первым шлюзом. eth1 подсоединен в внутренней сети.
Deep - это IP адрес первого шлюза. eth0 подсоединен к Интернет.
Deepgate - это IP адрес первого маршрутизатора в направлении вашего второго шлюза (mail.openna.com) или маршрутизатора вашего провайдера.
INTERNET - небезопасная сеть.
Mailgate - это IP адрес второго маршрутизатора в направлении вашего первого шлюза (deep.openna.com) или маршрутизатора вашего провайдера.
Mail - это IP адрес второго шлюза. eth0 подсоединен к Интернет.
SubnetMail - это IP адрес вашей внутренней приватной сети за вторым шлюзом. eth1 подсоединен в внутренней сети.

Мы должны редактировать файл ipsec.conf (vi /etc/ipsec.conf) и изменить значения принятые по умолчанию на то, что нам нужно. Существует два типа секций в этом файле (/etc/ipsec.conf): секция "config", которая определяет общую информацию для IPSEC, и секция "conn", которая определяет параметры IPSEC соединений. Он не содержит информации связанной с безопасностью если не используется ручное снабжение ключами (напоминаем, ручное снабжение ключами не рекомендуется из соображений безопасности).

Секции первого типа, называемые config setup, является единственным разделом содержащим полные параметры установки для IPSEC, которые применяются ко всем соединениям, и информацию используемую при запуске программного обеспечения.

Второй тип, называемый conn, содержит технические требования сетевых соединений осуществляемых при помощи IPSEC. Имя данное этому разделу произвольно, и просто используется для идентификации соединений с ipsec_auto(8) и ipsec_manual(8).

# /etc/ipsec.conf - конфигурационный файл FreeS/WAN IPSEC
# Более детальные и более разнообразные примеры конфигураций могут 
# быть найдены в doc/examples.
# Общая конфигурация
config setup
   interfaces="ipsec0=eth0"
   klipsdebug=none
   plutodebug=none
   plutoload=%search
   plutostart=%search
# образцы соединений
conn deep-mail
   left=208.164.186.1
   leftsubnet=192.168.1.0/24
   leftnexthop=205.151.222.250
   right=208.164.186.2
   rightsubnet=192.168.1.0/24
   rightnexthop=205.151.222.251
   keyingtries=0
   auth=ah
   auto=start

где:

interfaces="ipsec0=eth0"
Эта опция определяет какие соответствующие виртуальные и физические интерфейсы используются для IPSEC. Установка по умолчанию, "interfaces=%defaultroute", будет определять ваше соединение с Интернет или с вашей корпоративной сетью. Также, вы можете именовать один или больше интерфейсов для использования с FreeS/WAN. Например:
interfaces="ipsec0=eth0"
interfaces="ipsec0=eth0 ipsec1=ppp0"

Обе строки определяют интерфейс eth0 как ipsec0. Кроме того, вторая также устанавливает поддержку IPSEC через интерфейс PPP. Если установка по умолчанию "interfaces=%defaultroute" не используется, тогда заданный интерфейс будет только один - это шлюзовая машина, которая используется для обмена информации с другим IPSEC шлюзом.

klipsdebug=none
Эта опция определяет отладочный вывод для KLIPS (ядро кода IPSEC). Значение по умолчанию - none, означающее отсутствие вывода отладочной информации, all обозначает вывод всей отладочной информации.

plutodebug=none
Это опция определяет вывод отладочной информации для демона согласования ключей Pluto. Значения принимаемые этой опцией аналогичны klipsdebug.

plutoload=%search
Эта опция определяет какие соединения (по именам) загружаются автоматически в память, когда запускается Pluto. По умолчанию - none, значение %search загружает все соединения с auto=add или auto=start.

plutostart=%search
Эта опция определяет какие соединения (по именам) устанавливаются автоматически, когда запускается Pluto. По умолчанию - none, значение %search устанавливает все соединения с auto=start.

conn deep-mail
Эта опция задает имя, выступающее идентификатором соединения, которое может быть использовано IPSEC. Хорошим решением будет именовать соединения по их конечным точкам для предотвращения ошибок. Например, связь между deep.openna.com и mail.openna.com может быть названа "deep-mail", или связь между вашими офисам в Монреале и Париже - "montreal-paris". Заметим, что имя "deep-mail" или то, что вы выбрали в качестве имени должно совпадать на обоих шлюзах. Другими словами, единственным изменением, которое вы должны сделать в файле "/etc/ipsec.conf" на втором шлюзе должно быть изменение строки "interfaces=" на соответствующий интерфейс второго шлюза, использующего IPSEC соединение, если, конечно, это отличается от первого шлюза. Например, если интерфейс eth0 используется на обоих шлюзах для IPSEC, вам не нужно изменять строку "interfaces=" на втором шлюзе. С другой стороны, если первый шлюз использует eth0, а второй eth1, то вы должны изменить строку "interfaces=" на втором шлюзе на eth1.

left=208.164.186.1
Эта опция задает IP адрес внешнего интерфейса шлюза, используемого для общения с другим шлюзом.

leftsubnet=192.168.1.0/24
Эта опция определяет IP адрес приватной подсети находящейся за шлюзом.

leftnexthop=205.151.222.250
Эта опция определяет IP адрес первого маршрутизатора в требуемом направлении или маршрутизатора провайдера.

right=208.164.186.2
Это тоже, что и "left=", но для правого пункта назначения.

rightsubnet=192.168.1.0/24
Это тоже, что и "leftsubnet=", но для правого пункта назначения.

rightnexthop=205.151.222.251
Это тоже, что и "leftnexthop=", но для правого пункта назначения.

keyingtries=0
Эта опция определяет как много попыток (целое число) может быть сделано при переговорах об используемых ключах. По умолчанию равно 0 (постоянный повтор), что рекомендуется и оставить.

auth=ah
Эта опция определяет должна ли аутентификация осуществляться независимо, используя AH (Authentication Header), или включается как часть ESP (Encapsulated Security Payload) сервиса. Это предпочтительно, когда IP заголовки незащищены для предотвращения атак типа man-in-the-middle.

auto=start
Эта опция определяет должна ли быть выполнена автоматически операция запуска, когда запускается IPSEC.

ЗАМЕЧАНИЕ. Несоответствие данных в этом конфигурационном файле "ipsec.conf" будет заставлять FreeS/WAN фиксировать различные сообщения об ошибках.

Настройка файла "/etc/ipsec.secrets"

В файле "ipsec.secrets" хранятся секреты используемые демоном pluto для установления подлинности передачи между шлюзами. Может быть настроено два типа секретов preshared секреты и приватные ключи RSA. Вы должны проверить, чтобы владельцем файла был "root" и только он должен иметь право доступа к файлу.

Шаг 1

Пример секрета поставляется в файле "ipsec.secrets" по умолчанию. Вы должны изменить его на свой собственный. С автоматической поддержкой ключей вы можете разделять секрет до 256 бит, которые затем используются во время обмена ключами, чтобы не происходили атаки man-in-the-middle.
Для создания общего секрета используйте команду:

[root@deep /]# ipsec ranbits 256 > temp

Сейчас будут созданы случайные ключи при помощи утилиты ranbits(8) в файл с именем "temp". Утилита ranbits может приостанавливаться на несколько секунд если не было доступно немедленно достаточно энтропии.

ЗАМЕЧАНИЕ. Не забудьте удалить временный файл как только закончите все манипуляции с ним.

Шаг 2

Сейчас, наш общий секретный ключ созданный в файле "temp", мы должны положить в файл "/etc/ipsec.secrets". Когда вы редактируете файл "ipsec.secrets" вы должны видеть нечто подобное в вашем текстовом редакторе. Каждая строка содержит IP адреса двух шлюзов и секрет:

# Этот файл хранит общий секрет, который сейчас используется только для
# внутреннего механизма аутентификации Pluto. Смотрите страницу
# руководства ipsec_pluto(8). Каждый секрет (немного упрощенный) для одной
# пары договаривающихся хостов. Общий секрет это длинная и сложная для
# угадывания произвольная символьная строка
# Заметим, что все секреты должны быть заключены в кавычки, даже если они
# не имеют в своем составе пробелов.
10.0.0.1 11.0.0.1 "jxVS1kVUTTulkVRRTnTujSm444jRuU1mlkklku2nkW3nnVuV2
WjjRRnulmlkmU1Run5VSnnRT"

Редактируйте файл ipsec.secrets (vi /etc/ipsec.secrets) и измените секретный ключ принятый по умолчанию:

10.0.0.1 11.0.0.1 "jxVS1kVUTTulkVRRTnTujSm444jRuU1mlkklku2nkW3nnVuV2WjjRRnulmlkmU1Run5VSnnRT"
Должен быть:
208.164.186.1 208.164.186.2 "0x9748cc31_2e99194f_d230589b_cd846b57_dc070b01_74b66f34_19c40a1a_804906ed"

где "208.164.186.1" и "208.164.186.2" IP адреса двух шлюзов и "0x9748cc31_2e99194f_d230589b_cd846b57_dc070b01_74b66f34_19c40a1a_8049 06ed" (кавычки обязательно нужны) - общий ключ, который мы создали командой "ipsec ranbits 256 > temp" в файле "temp".

Шаг 3

Файлы "ipsec.conf" и "ipsec.secrets" должны быть скопированы на второй шлюз, так, чтобы они были идентичны на обоих концах. Только одно исключение может быть в секции с меткой config setup, где должен быть указан правильный интерфейс. Файл "ipsec.secrets" должен иметь абсолютно одинаковые секреты на обоих шлюзах.

ЗАМЕЧАНИЕ. Файл "/etc/ipsec.secrets" должен иметь права доступа rw------- (600) и его владельцем должен быть пользователь "root". Файл "/etc/ipsec.conf" инсталлируется с правами rw-r--r- (644) и его владельцем также является суперпользователь "root".

Настройка тайного секретного ключа RSA

Напомним, что сейчас FreeSWAN имеет два типа секретов: предварительно разделенные секреты и приватные ключи RSA. Предварительно разделенные секреты, которые настраиваются в наших файлах "ipsec.conf" и "ipsec.secrets", мы рассмотрели выше. Некоторые люди предпочитают использовать приватные ключи RSA для аутентификации других хостов через Pluto демон. Если вы находитесь в этой ситуации, то надо будет сделать некоторые изменения в файлах "ipsec.conf" и "ipsec.secrets", как описано ниже:

Вам нужно создать независимый RSA ключ для каждого шлюза. Каждый из них хранит этот ключ в своем файле "ipsec.secrets", а публичный ключ перемещается в параметры "leftrsasigkey" и "rightrsasigkey" секции conn файла "ipsec.conf", который одинаков для обоих шлюзах.

Шаг 1

Создайте независимый ключ RSA для каждого из шлюзов.
На первом шлюзе (например, deep) используйте команду:

[root@deep /]# cd /
[root@deep /]# ipsec rsasigkey --verbose 1024 > deep-keys
computing primes and modulus...
getting 64 random bytes from /dev/random
looking for a prime starting there
found it after 30 tries
getting 64 random bytes from /dev/random
looking for a prime starting there
found it after 230 tries
swapping primes so p is the larger
computing (p-1)*(q-1)...
computing d...
computing exp1, exp1, coeff...
output...

На втором шлюзе (например, mail) используйте команду:

[root@mail /]# cd /
[root@mail /]# ipsec rsasigkey --verbose 1024 > mail-keys
computing primes and modulus...
getting 64 random bytes from /dev/random
looking for a prime starting there
found it after 30 tries
getting 64 random bytes from /dev/random
looking for a prime starting there
found it after 230 tries
swapping primes so p is the larger
computing (p-1)*(q-1)...
computing d...
computing exp1, exp1, coeff...
output...

Утилита rsasigkey создает пару RSA ключей (публичный и приватный) из 1024- bit сигнатуры, и помещает их в файл deep-keys (mail-keys для второй команды на втором шлюзе). Приватный ключ может быть дословно вставлен в файл "ipsec.secrets", а публичный ключ в файл "ipsec.conf".

ЗАМЕЧАНИЕ. Утилита rsasigkey во время своей работы может остановиться на несколько секунд если ей не хватает энтропии. Вы можете добавить ее перемещая случайным образом мышь.

Временные файлы RSA "deep-keys" и "mail-keys" должны быть удалены, как только вы закончите работать с ними.

Шаг 2

Изменим ваш файл "/etc/ipsec.conf" для использования публичного ключа RSA на каждом шлюзе.
Редактируйте оригинальный файл ipsec.conf (vi /etc/ipsec.conf) и добавьте в него следующие параметры связанные с RSA в секцию conn на обоих шлюзах:

# образец соединения
conn deep-mail
   left=208.164.186.1
   leftsubnet=192.168.1.0/24
   leftnexthop=205.151.222.250
   right=208.164.186.2
   rightsubnet=192.168.1.0/24
   rightnexthop=205.151.222.251
   keyingtries=0
   auth=ah
   authby=rsasig
   leftrsasigkey=<Public key of deep>
   rightrsasigkey=<Public key of mail>
   auto=start

authby=rsasig
Этот параметр определяет как два шлюза безопасности должны устанавливать подлинность друг друга. Значение по умолчанию этого параметра - shared secrets. Мы должны определить rsasig для RSA, так как мы решили использовать цифровые подписи RSA.

leftrsasigkey=<Public key of deep>
Этот параметр определяет публичный ключ для RSA сигнатуры левого участника. В нашем примере, левый - 208.164.186.1, и представляет deep.openna.com, так что мы должны поместить публичный ключ RSA для deep в этой строке.

rightrsasigkey=<Public key of mail>
Этот параметр определяет публичный ключ для RSA сигнатуры правого участника. В нашем примере, правый - 208.164.186.2, и представляет mail.openna.com, , так что мы должны поместить публичный ключ RSA для mail в этой строке.

Мы можем найти публичный ключ для deep в файле "deep-keys", а для mail в "mail-keys". Эти файлы мы получили на первом шаге. Их содержимое выглядит следующим образов:
Ключи RSA для шлюза deep (deep-keys):

[root@deep /]# cd /
[root@deep /]# vi deep-keys
      # 1024 bits, Fri Feb 4 05:05:19 2000
      # for signatures only, UNSAFE FOR ENCRYPTION
      #pubkey=0x010395daee1be05f3038ae529ef2668afd79f5ff1b16203c9ceaef801cea9cb74bcfb51a6e
cc08890d3eb4b5470c0fc35465c8ba2ce9d1145ff07b5427e04cf4a38ef98a7f29edcb4d7689f2da7a69199e
4318b4c8d0ea25d33e4f084186a2a54f4b4cec12cca1a5deac3b19d561c16a76bab772888f1fd71aa08f085
02a141b611f
       Modulus:
0x95daee1be05f3038ae529ef2668afd79f5ff1b16203c9ceaef801cea9cb74bcfb51a6ecc08890d3eb4b5470c0
fc35465c8ba2ce9d1145ff07b5427e04cf4a38ef98a7f29edcb4d7689f2da7a69199e4318b4c8d0ea25d33e4f0
84186a2a54f4b4cec12cca1a5deac3b19d561c16a76bab772888f1fd71aa08f08502a141b611f
        PublicExponent: 0x03
        # everything after this point is secret
        PrivateExponent:
0x63e74967eaea2025c98c69f6ef0753a6a3ff6764157dbdf1f50013471324dd352366f48805b0b37f232384b2
b52ce2ee85d173468b62eaa052381a9588a317b3a1324d01a531a41fa7add6c5efbdd88f4718feed2bc0246b
e924e81bb90f03e49ceedf7af0dd48f06f265b519600bd082c6e6bd27eaa71cc0288df1ecc3b062b
        Prime1:
0xc5b471a88b025dd09d4bd7b61840f20d182d9b75bb7c11eb4bd78312209e3aee7ebfe632304db6df5e211d
21af7fee79c5d45546bea3ccc7b744254f6f0b847f
        Prime2:
0xc20a99feeafe79767122409b693be75f15e1aef76d098ab12579624aec708e85e2c5dd62080c3a64363f2f4
5b0e96cb4aef8918ca333a326d3f6dc2c72b75361
        Exponent1:
0x83cda11b0756e935be328fcebad5f6b36573bcf927a80bf2328facb6c0697c9eff2a9976cade79ea3ec0be16
74fff4512e8d8e2f29c2888524d818df9f5d02ff
       Exponent2:
0x815c66a9f1fefba44b6c2b124627ef94b9411f4f9e065c7618fb96dc9da05f03ec83e8ec055d7c42ced4ca2e7
5f0f3231f5061086ccd176f37f9e81da1cf8ceb
       Coefficient:
0x10d954c9e2b8d11f4db1b233ef37ff0a3cecfffad89ba5d515449b007803f577e3bd7f0183ceddfd805466d62f
767f3f5a5731a73875d30186520f1753a7e325

Ключи RSA для шлюза mail (mail-keys):

[root@mail /]# cd /
[root@mail /]# vi mail-keys
      # 1024 bits, Fri Feb 4 04:46:59 2000
      # for signatures only, UNSAFE FOR ENCRYPTION
      #pubkey=0x01037631b81f00d5e6f888c542d44dbb784cd3646f084ed96f942d341c7c4686cbd405b8
05dc728f8697475f11e8b1dd797550153a3f0d4ff0f2b274b70a2ebc88f073748d1c1c8821dc6be6a2f0064f
3be7f8e4549f8ab9af64944f829b014788dd202cf7d2e320cab666f5e7a197e64efe0bfee94e92ce4dad82d5
230c57b89edf
      Modulus:
0x7631b81f00d5e6f888c542d44dbb784cd3646f084ed96f942d341c7c4686cbd405b805dc728f8697475f11e8
b1dd797550153a3f0d4ff0f2b274b70a2ebc88f073748d1c1c8821dc6be6a2f0064f3be7f8e4549f8ab9af64944f
829b014788dd202cf7d2e320cab666f5e7a197e64efe0bfee94e92ce4dad82d5230c57b89edf
     PublicExponent: 0x03
     # everything after this point is secret
     PrivateExponent:
0x4ecbd014ab3944a5b08381e2de7cfadde242f4b03490f50d737812fd8459dd3803d003e84c5faf0f84ea0bf0
7693a64e35637c2a08dff5f721a324b1747db09f62c871d5e11711251b845ae76753d4ef967c494b0def4f5d07
62f65da603bc04c41b4c6cab4c413a72c633b608267ae2889c162a3d5bc07ee083b1c6e038400b
      Prime1:
0xc7f7cc8feaaac65039c39333b878bffd8f95b0dc22995c553402a5b287f341012253e9f25b83983c936f6ca51
2926bebee3d5403bf9f4557206c6bbfd9aac899
      Prime2:
0x975015cb603ac1d488dc876132d8bc83079435d2d3395c03d5386b5c004eadd4d7b01b3d86aad0a2275d2
d6b791a2abe50d7740b7725679811a32ca22db97637
      Exponent1:
0x854fddb5471c84357bd7b777d0507ffe5fb92092c1bb92e37801c3cc5aa22b5616e29bf6e7ad1028624a486
e0c619d47f428e2ad2a6a2e3a159d9d2a911c85bb
      Exponent2:
0x64e00e87957c81385b3daf9621e5d302050d7937377b92ad38d04792aadf1e8de52012290471e06c1a3e1
e47a61171d435e4f807a4c39a6561177316c9264ecf
      Coefficient:
0x6f087591becddc210c2ee0480e30beeb25615a3615203cd3cef65e5a1d476fd9602ca0ef10d9b858edb22db
42c975fb71883a470b43433a7be57df7ace4a0a3f

Извлеките и скопируйте публичный RSA ключ для deep и mail в ваши файлы "ipsec.conf", как это показано ниже. Вы можете определит строки связанные с публичным ключом как начинающиеся с закомментированной строки: "#pubkey=".

# образец соединения
conn deep-mail
   left=208.164.186.1
   leftsubnet=192.168.1.0/24
   leftnexthop=205.151.222.250
   right=208.164.186.2
   rightsubnet=192.168.1.0/24
   rightnexthop=205.151.222.251
   keyingtries=0
   auth=ah
   authby=rsasig
   leftrsasigkey=0x010395daee1be05f3038ae529ef2668afd79f5ff1b16203c9ceaef801cea9cb74bcfb5
   1a6ecc08890d3eb4b5470c0fc35465c8ba2ce9d1145ff07b5427e04cf4a38ef98a7f29edcb4d7689f2d
   a7a69199e4318b4c8d0ea25d33e4f084186a2a54f4b4cec12cca1a5deac3b19d561c16a76bab77288
   8f1fd71aa08f08502a141b611f
   rightrsasigkey=0x01037631b81f00d5e6f888c542d44dbb784cd3646f084ed96f942d341c7c4686cbd
   405b805dc728f8697475f11e8b1dd797550153a3f0d4ff0f2b274b70a2ebc88f073748d1c1c8821dc6b
   e6a2f0064f3be7f8e4549f8ab9af64944f829b014788dd202cf7d2e320cab666f5e7a197e64efe0bfee94
   e92ce4dad82d5230c57b89edf
   auto=start

Не забудьте, что в нашем примере, параметр "leftrsasigkey=" содержит публичный ключ для и параметр "rightrsasigkey=" содержит публичный ключ для mail.

Шаг 3

Модифицируйте ваш файл "/etc/ipsec.secrets" для использования приватного ключа RSA на каждом шлюзе.
Редактируйте оригинальный файл ipsec.secrets (vi /etc/ipsec.secrets) и добавьте в него приватный ключ RSA для подтверждения подлинности обоих шлюзов:
Файл "ipsec.secrets" для шлюза deep:

[root@deep /]# vi /etc/ipsec.secrets
208.164.186.1 208.164.186.2 
"0x9748cc31_2e99194f_d230589b_cd846b57_dc070b01_74b66f34_19c40a1a_804906ed"

Вы должны изменить ваш оригинальный файл "ipsec.secrets" как это показано ниже на обоих шлюзах. Важно заметить, что приватные ключи не совпадают на deep и mail. Приватный ключ для deep берем из файла "deep-keys", а приватный ключ для mail из "mail-keys":

208.164.186.1 208.164.186.2: RSA {
       Modulus:
0x95daee1be05f3038ae529ef2668afd79f5ff1b16203c9ceaef801cea9cb74bcfb51a6ecc08890d3eb4b5470c0
fc35465c8ba2ce9d1145ff07b5427e04cf4a38ef98a7f29edcb4d7689f2da7a69199e4318b4c8d0ea25d33e4f0
84186a2a54f4b4cec12cca1a5deac3b19d561c16a76bab772888f1fd71aa08f08502a141b611f
       PublicExponent: 0x03
       # everything after this point is secret
       PrivateExponent:
0x63e74967eaea2025c98c69f6ef0753a6a3ff6764157dbdf1f50013471324dd352366f48805b0b37f232384b2
b52ce2ee85d173468b62eaa052381a9588a317b3a1324d01a531a41fa7add6c5efbdd88f4718feed2bc0246b
e924e81bb90f03e49ceedf7af0dd48f06f265b519600bd082c6e6bd27eaa71cc0288df1ecc3b062b
       Prime1:
0xc5b471a88b025dd09d4bd7b61840f20d182d9b75bb7c11eb4bd78312209e3aee7ebfe632304db6df5e211d
21af7fee79c5d45546bea3ccc7b744254f6f0b847f
       Prime2:
0xc20a99feeafe79767122409b693be75f15e1aef76d098ab12579624aec708e85e2c5dd62080c3a64363f2f4
5b0e96cb4aef8918ca333a326d3f6dc2c72b75361
       Exponent1:
0x83cda11b0756e935be328fcebad5f6b36573bcf927a80bf2328facb6c0697c9eff2a9976cade79ea3ec0be16
74fff4512e8d8e2f29c2888524d818df9f5d02ff
       Exponent2:
0x815c66a9f1fefba44b6c2b124627ef94b9411f4f9e065c7618fb96dc9da05f03ec83e8ec055d7c42ced4ca2e7
5f0f3231f5061086ccd176f37f9e81da1cf8ceb
       Coefficient:
0x10d954c9e2b8d11f4db1b233ef37ff0a3cecfffad89ba5d515449b007803f577e3bd7f0183ceddfd805466d62f
767f3f5a5731a73875d30186520f1753a7e325
       }

Файл "ipsec.secrets" для шлюза mail:

[root@mail /]# vi /etc/ipsec.secrets
208.164.186.1 208.164.186.2: RSA {
        Modulus:
0x95daee1be05f3038ae529ef2668afd79f5ff1b16203c9ceaef801cea9cb74bcfb51a6ecc08890d3eb4b5470c0
fc35465c8ba2ce9d1145ff07b5427e04cf4a38ef98a7f29edcb4d7689f2da7a69199e4318b4c8d0ea25d33e4f0
84186a2a54f4b4cec12cca1a5deac3b19d561c16a76bab772888f1fd71aa08f08502a141b611f
        PublicExponent: 0x03
        # everything after this point is secret
        PrivateExponent:
0x63e74967eaea2025c98c69f6ef0753a6a3ff6764157dbdf1f50013471324dd352366f48805b0b37f232384b2
b52ce2ee85d173468b62eaa052381a9588a317b3a1324d01a531a41fa7add6c5efbdd88f4718feed2bc0246b
e924e81bb90f03e49ceedf7af0dd48f06f265b519600bd082c6e6bd27eaa71cc0288df1ecc3b062b
        Prime1:
0xc5b471a88b025dd09d4bd7b61840f20d182d9b75bb7c11eb4bd78312209e3aee7ebfe632304db6df5e211d
21af7fee79c5d45546bea3ccc7b744254f6f0b847f
        Prime2:
0xc20a99feeafe79767122409b693be75f15e1aef76d098ab12579624aec708e85e2c5dd62080c3a64363f2f4
5b0e96cb4aef8918ca333a326d3f6dc2c72b75361
        Exponent1:
0x83cda11b0756e935be328fcebad5f6b36573bcf927a80bf2328facb6c0697c9eff2a9976cade79ea3ec0be16
74fff4512e8d8e2f29c2888524d818df9f5d02ff
        Exponent2:
0x815c66a9f1fefba44b6c2b124627ef94b9411f4f9e065c7618fb96dc9da05f03ec83e8ec055d7c42ced4ca2e7
5f0f3231f5061086ccd176f37f9e81da1cf8ceb
        Coefficient:
0x10d954c9e2b8d11f4db1b233ef37ff0a3cecfffad89ba5d515449b007803f577e3bd7f0183ceddfd805466d62f
767f3f5a5731a73875d30186520f1753a7e325
        }

Аутентификация с использованием RSA сигнатур требует, чтобы каждый хост имел собственный приватный ключ. Начальная часть ключа может содержать признак, характеризующий тип ключа. "RSA" обозначает приватный ключ RSA и "PSK" (который принят по умолчанию) обозначает PreShared ключ. Так как "PSK" принимается по умолчанию, мы должны задать "RSA", определяя использования приватного ключа RSA в этом файле (ipsec.secrets). Только суперпользователь "root" должен владеть файлом "ipsec.secrets", и для всех остальных любой доступ к нему должен быть заблокирован.


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

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

Глава 16 Серверное программное обеспечение (Сетевой сервис шифрования) - FreeS/WAN VPN (часть 2)

В этой главе
Linux OPENSSL сервер
Конфигурации
Команды
Организация защиты Openssl
Linux FreeS/WAN VPN
Настройка RSA private keys secrets
Требования по настройке сети для IPSec
Тестирование инсталляции

Требования по настройке сети для IPSec

Здесь приводятся некоторые вещи, которые вы должны проверить для корректной работы FreeS/WAN. Они важны, если вы не хотите получить сообщения об ошибке при запуске VPN.

Шаг 1

Вам нужно включить TCP/IP forwarding на обоих шлюзах. В Red Hat Linux, это в зависимости от версии делается так:

Для Red Hat Linux 6.1

Редактируйте файл network (vi /etc/sysconfig/network) и измените следующую строку:
FORWARD_IPV4="false"
Должна быть:
FORWARD_IPV4="yes"

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

[root@deep /]# /etc/rc.d/init.d/network restart
Bringing up interface lo       [ OK ]
Bringing up interface eth0     [ OK ]
Bringing up interface eth1     [ OK ]

Для Red Hat Linux 6.2

Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:

# Enable packet forwarding
net.ipv4.ip_forward = 1

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

[root@deep /]# /etc/rc.d/init.d/network restart
Bringing up interface lo       [ OK ]
Bringing up interface eth0     [ OK ]
Bringing up interface eth1     [ OK ]

Шаг 2

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

Редактируйте скрипт firewall (vi /etc/rc.d/init.d/firewall) на обоих шлюзах и добавьте следующие строки, чтобы разрешить IPSEC пакетам перемещаться между обоими концами туннеля:

# FreeS/WAN IPSec VPN
# -------------------
# Если вы используете FreeSWAN IPSec VPN, вы должны заполнить 
# адреса шлюзов в IPSECSG и виртуальных интурфейсов для
# FreeS/Wan IPSEC в параметре FREESWANVI. Смотрите начало 
# этого скрипта для определения этих параметров.
# IPSECSG это разделенный пробелами список удаленных шлюзов.
# FREESWANVI это разделенный пробелами список виртуальных
# интерфейсов для реализации FreeS/Wan IPSEC.
# Включите только те, которые фактически используются.
# Разрешите протокол IPSEC из удаленных шлюзов на внешнем интерфейсе
# IPSEC использует три основных типа пакетов:
# IKE использует UDP протокол и порт 500,
# ESP использует протокол номер 50 и
# AH использует протокол номер 51
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-s $IPSECSG -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
-d $IPSECSG -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p 50 \
-s $IPSECSG -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p 50 \
-d $IPSECSG -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p 51 \
-s $IPSECSG -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p 51 \
-d $IPSECSG -j ACCEPT
# Разрешите весь трафик к виртуальному интерфейсу FreeS/WAN
ipchains -A input -i $FREESWANVI \
-s $ANYWHERE \
-d $ANYWHERE -j ACCEPT
ipchains -A output -i $FREESWANVI \
-s $ANYWHERE \
-d $ANYWHERE -j ACCEPT
# Пересылка всего из виртуального интерфейса FreeS/WAN IPSEC туннеля
ipchains -A forward -i $FREESWANVI \
-s $ANYWHERE \
-d $ANYWHERE -j ACCEPT

где EXTERNAL_INTERFACE="eth0" # Ваш внешний интерфейс к Интернет.
где ANYWHERE="any/0" # имеет значение все 0.0.0.0/0.
где IPSECSG="208.164.186.2" # разделенный пробелами список удаленных VPN шлюзов.
где FREESWANVI="ipsec0" # разделенный пробелами список виртуальных интерфейсов для FreeS/Wan.

ЗАМЕЧАНИЕ. Смотрите главу 7, "Сетевой брандмауэр" для большей информации. Не забудьте добавить эти правила на других шлюзах.

Шаг 3

Подсистема rp_filter (связанная с защитой от IP spoofing) должна быть выключена на обоих шлюзах для корректной работы IPSEC. Это достигается проверкой значения содержащегося в файлах "/proc/sys/net/ipv4/conf/ipsec0/rp_filter и "/proc/sys/net/ipv4/conf/eth0/rp_filter".
Оно должно быть равно 0:

[root@deep /]# cat /proc/sys/net/ipv4/conf/ipsec0/rp_filter
0
[root@deep /]# cat /proc/sys/net/ipv4/conf/eth0/rp_filter
0

ЗАМЕЧАНИЕ. Подкаталог "ipsec0" в нашем примере будет создан только после перезагрузки системы. Так, что проверить значение файла "rp_filter" в каталоге "ipsec0" можно будет только когда система перезагрузится.

Для установки значения 0 (off) в оба файла вручную используйте команды:

[root@deep /]# echo 0 > /proc/sys/net/ipv4/conf/ipsec0/rp_filter
[root@deep /]# echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter

Также можно добавить эти строки в скрипт файл firewall (/etc/rc.d/init.d/firewall) на обоих шлюзах, чтобы значение 0 (off) устанавливалось автоматически при каждой загрузке системы:

# Disable IP spoofing protection to allow IPSEC to work properly
echo 0 > /proc/sys/net/ipv4/conf/ipsec0/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter

ЗАМЕЧАНИЕ. В нашем примере мы предполагаем что для установления соединений используется интерфейс eth0. Конечно, если вы используете eth1 вам надо просто заменить eth0 на eth1.

Если вы забудете сделать этот шаг, то получите на вашем терминале следующие сообщения об ошибках при запуске FreeSWAN IPSEC:

ipsec_setup: WARNING: ipsec0 has route filtering turned on, KLIPS may not work
ipsec_setup: (/proc/sys/net/ipv4/conf/ipsec0/rp_filter = `1', should be 0)
ipsec_setup: WARNING: eth0 has route filtering turned on, KLIPS may not work
ipsec_setup: (/proc/sys/net/ipv4/conf/eth0/rp_filter = `1', should be 0)
Шаг 4

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

Редактируйте скрипт firewall (vi /etc/rc.d/init.d/firewall) на обоих шлюзовых машинах и добавьте следующие строки позволяющие маскарадить пакеты направляемые на удаленный шлюз и обратно:

# Маскарадинг внутреннего трафика.
# Весь внутренний трафик будет выглядеть.
ipchains -A forward -i $EXTERNAL_INTERFACE -s $LOCALNET_1 -j MASQ

где EXTERNAL_INTERFACE="eth0" # Ваш внешний интерфейс в Интернет.
где LOCALNET_1=" 192.168.1.0/24" # диапазон внутренних адресов который вы используете.

ЗАМЕЧАНИЕ. Смотрите главу 8 "Сетевой брандмауэр с поддержкой маскарадинга и форвардингом" для большей информации.

Сейчас, вы можете перезагрузить вашу систему, и машины за шлюзом A должны без проблем обмениваться информацией с машинами за шлюзом B.

Тестирование инсталляции

Перезагрузите оба шлюза для запуска FreeS/WAN.
Просмотрите файл "/var/log/messages" для выявления сообщений о возникших трудностях. Если все хорошо, то вы должны увидеть что-то подобное:
Feb 2 05:22:35 deep ipsec_setup: Starting FreeS/WAN IPSEC snap2000jan31b...
Feb 2 05:22:35 deep ipsec_setup: KLIPS debug `none'
Feb 2 05:22:35 deep ipsec_setup: KLIPS ipsec0 on eth0 192.168.1.1/255.255.255.0
broadcast 192.168.1.255
Feb 2 05:22:36 deep ipsec_setup: Disabling core dumps:
Feb 2 05:22:36 deep ipsec_setup: Starting Pluto (debug `none'):
Feb 2 05:22:37 deep ipsec_setup: Loading Pluto database `deep-mail':
Feb 2 05:22:37 deep ipsec_setup: Enabling Pluto negotiation:
Feb 2 05:22:37 deep ipsec_setup: Routing for Pluto conns `deep-mail':
Feb 2 05:22:37 deep ipsec_setup: Initiating Pluto tunnel `deep-mail':
Feb 2 05:22:39 deep ipsec_setup: 102 "deep-mail" #1: STATE_MAIN_I1: initiate
Feb 2 05:22:39 deep ipsec_setup: 104 "deep-mail" #1: STATE_MAIN_I2: from
STATE_MAIN_I1; sent MI2, expecting MR2
Feb 2 05:22:39 deep ipsec_setup: 106 "deep-mail" #1: STATE_MAIN_I3: from
STATE_MAIN_I2; sent MI3, expecting MR3
Feb 2 05:22:39 deep ipsec_setup: 004 "deep-mail" #1: STATE_MAIN_I4: SA
established
Feb 2 05:22:39 deep ipsec_setup: 110 "deep-mail" #2: STATE_QUICK_I1: initiate
Feb 2 05:22:39 deep ipsec_setup: 004 "deep-mail" #2: STATE_QUICK_I2: SA
established
Feb 2 05:22:39 deep ipsec_setup: ...FreeS/WAN IPSEC started

Изучите файл "/var/log/secure" для выявления возникших трудностей. Если все хорошо, то вы должны увидеть нечто подобное:

Feb 21 14:45:42 deep Pluto[432]: Starting Pluto (FreeS/WAN Version 1.3)
Feb 21 14:45:43 deep Pluto[432]: added connection description "deep-mail"
Feb 21 14:45:43 deep Pluto[432]: listening for IKE messages
Feb 21 14:45:43 deep Pluto[432]: adding interface ipsec0/eth0 192.168.1.1
Feb 21 14:45:43 deep Pluto[432]: loading secrets from "/etc/ipsec.secrets"
Feb 21 14:45:43 deep Pluto[432]: "deep-mail" #1: initiating Main Mode
Feb 21 14:45:44 deep Pluto[432]: "deep-mail" #1: ISAKMP SA established
Feb 21 14:45:44 deep Pluto[432]: "deep-mail" #2: initiating Quick Mode
POLICY_RSASIG+POLICY_ENCRYPT+POLICY_AUTHENTICATE+POLICY_T
UNNEL+POLICY_PFS
Feb 21 14:45:46 deep Pluto[432]: "deep-mail" #2: sent QI2, IPsec SA established
Feb 21 14:45:47 deep Pluto[432]: "deep-mail" #3: responding to Main Mode
Feb 21 14:45:49 deep Pluto[432]: "deep-mail" #3: sent MR3, ISAKMP SA
established
Feb 21 14:45:49 deep Pluto[432]: "deep-mail" #4: responding to Quick Mode
Feb 21 14:45:50 deep Pluto[432]: "deep-mail" #4: IPsec SA established
На обоих шлюзах, должны существовать следующие элементы в каталоге "/proc/net/":

[root@deep /]# ls -l /proc/net/ipsec_*
-r--r--r-- 1 root root 0 Feb 2 05:30 /proc/net/ipsec_eroute
-r--r--r-- 1 root root 0 Feb 2 05:30 /proc/net/ipsec_klipsdebug
-r--r--r-- 1 root root 0 Feb 2 05:30 /proc/net/ipsec_spi
-r--r--r-- 1 root root 0 Feb 2 05:30 /proc/net/ipsec_spigrp
-r--r--r-- 1 root root 0 Feb 2 05:30 /proc/net/ipsec_spinew
-r--r--r-- 1 root root 0 Feb 2 05:30 /proc/net/ipsec_tncfg
-r--r--r-- 1 root root 0 Feb 2 05:30 /proc/net/ipsec_version

Интерфейсы IPSEC должны быть подключены поверх определенных физических интерфейсов.
Проверьте что:

[root@deep /]# cat /proc/net/ipsec_tncfg
ipsec0 -> eth0 mtu=16260 -> 1500
ipsec1 -> NULL mtu=0 -> 0
ipsec2 -> NULL mtu=0 -> 0
ipsec3 -> NULL mtu=0 -> 0

Сейчас выполните следующую команду для получения минимальной отладочной информации и проверьте, что полученный результат выглядит примерно так:

[root@deep /]# ipsec look
deep.openna.com Fri Feb 4 17:25:17 EST 2000
============-============
192.168.1.1/32 -> 192.168.1.2/32 => tun0x106@192.168.1.2 esp0x4450894d@192.168.1.2
ah0x4450894c@192.168.1.2
------------=------------
ah0x3350f551@192.168.1.1 AH_HMAC_MD5: dir=in ooowin=32 seq=115 bit=0xffffffff alen=128
aklen=16 life(c,s,h)=bytes(16140,0,0)add(51656,0,0)use(54068,0,0)packets(115,0,0) idle=499
ah0x4450894c@192.168.1.2 AH_HMAC_MD5: dir=out ooowin=32 seq=2828 alen=128 aklen=16
life(c,s,h)=bytes(449488,0,0)add(51656,0,0)use(51656,0,0)packets(2828,0,0) idle=6
esp0x3350f552@192.168.1.1 ESP_3DES: dir=in ooowin=32 seq=115 bit=0xffffffff eklen=24
life(c,s,h)=bytes(13380,0,0)add(51656,0,0)use(54068,0,0)packets(115,0,0) idle=499
esp0x4450894d@192.168.1.2 ESP_3DES: dir=out ooowin=32 seq=2828 eklen=24
life(c,s,h)=bytes(381616,0,0)add(51656,0,0)use(51656,0,0)packets(2828,0,0) idle=6
tun0x105@192.168.1.1 IPIP: dir=in 192.168.1.2 -> 192.168.1.1 life(c,s,h)=add(51656,0,0)
tun0x106@192.168.1.2 IPIP: dir=out 192.168.1.1 -> 192.168.1.2
life(c,s,h)=bytes(327581,0,0)add(51656,0,0)use(51656,0,0)packets(2828,0,0) idle=6
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 ipsec0
192.168.1.1 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
192.168.1.2 192.168.1.2 255.255.255.255 UGH 0 0 0 ipsec0
Destination Gateway Genmask Flags MSS Window irtt Iface

Выполните команду ping 192.168.1.2 из 192.168.1.1. Если она работает, тогда вы все установили корректно. Если не работает, то проверьте, что с машины 208.164.186.1 видна 208.164.186.2, что включен TCP-IP forwarding, и что на вашем брандмауэре нет правил блокирующих пакеты и правила маскарадинга находятся после правил, связанных с трафиком IPSec.

208.164.186.1 ---- 205.151.222.250 ---- 205.151.222.251 ---- 208.164.186.2
|                                                                 |
192.168.1.0/24                                               192.168.1.0/24
|                                                                 |
192.168.1.1                                                  192.168.1.2

Последнее замечание об инсталляции FreeSWAN IPSEC, если вы столкнулись с проблемами с которыми не можете разобраться, то вы можете использовать следующую команду для просмотра отладочной информации, связанной с системой шифрования/аутентификации IPSEC, которую вы можете послать в список рассылки Linux-IPSEC (linux-ipsec@clinet.fi) с просьбой помочь вам:

[root@deep /]# ipsec barf > result

Эта команда первично предоставляла возможность удаленной отладки; единичная команда упаковывает (и помечает) всю информацию, которая могла бы быть уместна для диагностирования проблем в IPSEC.

Дополнительная документация

Для получения большей информации вы можете ознакомиться со страницами руководства перечисленными ниже:

$ man ipsec (8) - вызов утилит IPSEC
$ man ipsec atoaddr, addrtoa (3) - конвертирование Интернет адресов в и из ASCII
$ man ipsec atoasr (3) - конвертирование ASCII в Интернет адреса, подсети и диапазоны
$ man ipsec atobytes, bytestoa (3) - конвертирование байтов двоичных данных в и из ASCII формат
$ man ipsec atodata, datatoa (3) - конвертирование двоичных данных из и в ASCII формат
$ man ipsec atosa, satoa (3) - конвертирует IPSEC Security Association IDs в и из ASCII
$ man ipsec atosubnet, subnettoa (3) - конвертирует подсеть/маска в ASCII форме в и из адрес
$ man ipsec atoul, ultoa (3) - конвертирует unsigned-long числа в и из ASCII
$ man ipsec auto (8) - контролирует автоматическое снабжение ключами соединений IPSEC
$ man ipsec barf (8) - выделение набора отладочной информации IPSEC
$ man ipsec bitstomask (3) - конвертирование набора единиц и нулей в маску подсети Интернет
$ man ipsec eroute (8) - манипулирование таблицами маршрутизации IPSEC
$ man ipsec goodmask (3) - является ли эта маска правильной?
$ man ipsec hostof (3) - получает Интернет адрес и маску подсети и возвращает часть связанную с хостом
$ man ipsec klipsdebug (8) - устанавливает отладочные возможности и уровень Klips (ядерная поддержка IPSEC)
$ man ipsec look (8) - выводит минимальную отладочную информацию
$ man ipsec manual (8) - поднимает и опускает IPSEC соединения с ручным снабжением ключами
$ man ipsec masktobits (3) - конвертирует маску подсети Интернет в набор нолей и единиц
$ man ipsec optionsfrom (3) - читает дополнительные опции командной строки из файла
$ man ipsec pluto (8) - демон манипуляции ключами IPsec IKE
$ man ipsec ranbits (8) - генератор случайного набора битов в виде ASCII
$ man ipsec rangetoa (3) - конвертирует диапазон Интернет адресов в ASCII
$ man ipsec rsasigkey (8) - создает сигнатурный ключ RSA
$ man ipsec setup (8) - контролирует подсистему IPSEC
$ man ipsec spi (8) - управляет IPSEC Security Associations
$ man ipsec spigrp (8) - группирует/расгруппирует IPSEC Security Associations
$ man ipsec subnetof (3) - получает Интернет адрес и маску подсети и вохвращает часть связанную с подсетью
$ man ipsec tncfg (8) - ассоциирует виртуальный интерфейс IPSEC с реальным интерфейсом
$ man ipsec whack (8) - контролирует интерфейс для демона управления ключами IPSEC
$ man ipsec.conf (5) - конфигурация и соединения IPSEC
$ man ipsec.secrets (5) - секреты для IKE/Ipsec аутентификации

Инсталлированные файлы

> /etc/rc.d/init.d/ipsec
> /etc/rc.d/rc0.d/K68ipsec
> /etc/rc.d/rc1.d/K68ipsec
> /usr/man/man3/ipsec_atoasr.3
> /usr/man/man3/ipsec_rangetoa.3
> /usr/man/man3/ipsec_atodata.3
> /etc/rc.d/rc2.d/S47ipsec
> /etc/rc.d/rc3.d/S47ipsec
> /etc/rc.d/rc4.d/S47ipsec
> /etc/rc.d/rc5.d/S47ipsec
> /etc/rc.d/rc6.d/K68ipsec
> /etc/ipsec.conf
> /etc/ipsec.secrets
> /usr/lib/ipsec
> /usr/lib/ipsec/spi
> /usr/lib/ipsec/eroute
> /usr/lib/ipsec/spigrp
> /usr/lib/ipsec/tncfg
> /usr/lib/ipsec/klipsdebug
> /usr/lib/ipsec/pluto
> /usr/lib/ipsec/whack
> /usr/lib/ipsec/ipsec
> /usr/lib/ipsec/barf
> /usr/lib/ipsec/manual
> /usr/lib/ipsec/auto
> /usr/lib/ipsec/look
> /usr/lib/ipsec/showdefaults
> /usr/lib/ipsec/_include
> /usr/lib/ipsec/_confread
> /usr/lib/ipsec/_keycensor
> /usr/lib/ipsec/_secretcensor
> /usr/lib/ipsec/_updown
> /usr/lib/ipsec/ranbits
> /usr/lib/ipsec/rsasigkey
> /usr/lib/ipsec/setup
> /usr/man/man3/ipsec_atoaddr.3
> /usr/man/man3/ipsec_addrtoa.3
> /usr/man/man3/ipsec_atosubnet.3
> /usr/man/man3/ipsec_subnettoa.3
> /usr/man/man3/ipsec_atobytes.3
> /usr/man/man3/ipsec_bytestoa.3
> /usr/man/man3/ipsec_datatoa.3
> /usr/man/man3/ipsec_atosa.3
> /usr/man/man3/ipsec_satoa.3
> /usr/man/man3/ipsec_atoul.3
> /usr/man/man3/ipsec_ultoa.3
> /usr/man/man3/ipsec_goodmask.3
> /usr/man/man3/ipsec_masktobits.3
> /usr/man/man3/ipsec_bitstomask.3
> /usr/man/man3/ipsec_optionsfrom.3
> /usr/man/man3/ipsec_subnetof.3
> /usr/man/man3/ipsec_hostof.3
> /usr/man/man3/ipsec_broadcastof.3
> /usr/man/man5/ipsec.secrets.5
> /usr/man/man5/ipsec.conf.5
> /usr/man/man8/ipsec_spi.8
> /usr/man/man8/ipsec.8
> /usr/man/man8/ipsec_eroute.8
> /usr/man/man8/ipsec_spigrp.8
> /usr/man/man8/ipsec_tncfg.8
> /usr/man/man8/ipsec_klipsdebug.8
> /usr/man/man8/ipsec_pluto.8
> /usr/man/man8/ipsec_whack.8
> /usr/man/man8/ipsec_barf.8
> /usr/man/man8/ipsec_look.8
> /usr/man/man8/ipsec_manual.8
> /usr/man/man8/ipsec_auto.8
> /usr/man/man8/ipsec_setup.8
> /usr/man/man8/ipsec_ranbits.8
> /usr/man/man8/ipsec_rsasigkey.8
> /usr/sbin/ipsec

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

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

Глава 17 Серверное программное обеспечение (Сервис баз данных) - OpenLDAP сервер

В этой главе
OpenLDAP сервер
Конфигурации
Организация защиты OpenLDAP
Утилиты создания и поддержки OpenLDAP
Утилиты пользователя OpenLDAP
Netscape Address Book клиент для LDAP
Linux сервер баз данных PostgreSQL
Создание и инсталляция базы данных из-под пользователя Postgres
Конфигурации
Команды

Linux OpenLDAP сервер

Краткий обзор.

Если мы говорим в этой книге о безопасности и оптимизации, то почему вдруг возникает глава посвященная OpenLDAP? Сервер каталогов OpenLDAP расширит ваши горизонты за счет использования его возможностей. Мы можем использовать ее возможности дублирования для централизации и объединения различной информации на одном сервере для всех других серверов нашей сети. Представьте себе возможности добавления и отключения учетных записей Unix или NT, установка доступа к Веб серверу для служебного использования, добавление почтовых адресов и псевдонимов, все с единственной операцией доступной как NIS сервис, с добавлением возможности SSL шифрования и скоростью объектно-ориентированных иерархий. Другое интересное использование - это создание надежного списка разработчиков на одном или более LDAP серверов, доступ к которому может быть открыт из приватной сети или из Интернет.

Как сказано на веб сервере OpenLDAP:

LDAP (Lightweight Directory Access Protocol) - это открытый протокол для доступа к информационным сервисам. Он работает через транспортные протоколы Интернет, такие как TCP, и может быть использован для доступа к автономным серверам каталогов или каталогам X.500.



Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
OpenLDAP версии 1.2.10

Пакеты.
Домашняя страница OpenLDAP: http://www.openldap.org/
FTP сервер OpenLDAP: 204.152.186.57
Вы должны скачать: openldap-1.2.10.tgz

Тарболы.
Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции OpenLDAP и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,
До инсталляции:
find /* > OpenLDAP1

После инсталляции:
find /* > OpenLDAP2

Для получения списка установленных файлов:
diff OpenLDAP1 OpenLDAP2 > OpenLDAP-Installed

Раскройте тарбол:

[root@deep /]# cp openldap-version.tgz /var/tmp
[root@deep /]# cd /var/tmp/
[root@deep tmp]# tar xzpf openldap-version.tgz

Компиляция и оптимизация.

Перейдите в новый OpenLDAP каталог и введите следующие команды на вашем терминале:

Шаг 1

Важно заметить, что вы можете настроить три различных вида баз данных на использование с LDAP. Высокопроизводительная, с памятью на диске база данных "LDBM"; интерфейс базы данных к произвольным UNIX командам или shell скриптам, называемый "SHELL"; и простейшая база данных используемая в файле паролей "PASSWD".

По умолчанию OpenLDAP подразумевает использование базы данных LDBM,так что если вы хотите настроиться на другой тип базы данных, вы должны при инсталляции определить ее. Для SHELL вы должны добавить опцию "--enable-shell", а для PASSWD (используется как замена сервису NIS) - "--enable-passwd".

CC="egcs" \
CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions -D_REENTRANT" \
./configure \
--prefix=/usr \
--libexecdir=/usr/sbin \
--localstatedir=/var/run \
--sysconfdir=/etc \
--enable-dns \
--enable-shared \
--with-gnu-ld \
--disable-debug

Эти опции настраивают OpenLDAP на следующее:

ЗАМЕЧАНИЕ. Опции компиляции предложенные выше предполагают использование базы данных LDBM. Для других типов баз данных используйте соответствующие опции, описанные выше.

Шаг 2

Сейчас мы должны скомпилировать и инсталлировать OpenLDAP на сервере:

[root@deep openldap-1.2.10]# make depend
[root@deep openldap-1.2.10]# make
[root@deep openldap-1.2.10]# cd tests/
[root@deep tests]# make
[root@deep tests]# cd ..
[root@deep openldap-1.2.10]# make install

Команда "make depend" будет создавать необходимые зависимости для различных файлов, "make" компилирует все файлы с исходными кодами в исполняемые двоичные файлы и затем "make install" инсталлирует исполняемые файлы и файлы поддержки в необходимые каталоги. Команда "make" в подкаталоге "/test" будет делать некоторые важные тесты для проверки функциональности вашего LDAP сервера перед инсталляцией. Если некоторые тесты закончатся ошибкой, вам необходимо исправить их перед продолжением инсталляции.

[root@deep openldap-1.2.10]# install -d -m 700 /var/ldap
[root@deep openldap-1.2.10]# echo localhost > /etc/openldap/ldapserver
[root@deep openldap-1.2.10]# strip /usr/lib/liblber.so.1.0.0
[root@deep openldap-1.2.10]# strip /usr/lib/libldap.so.1.0.0
[root@deep openldap-1.2.10]# strip /usr/lib/libldap.a
[root@deep openldap-1.2.10]# strip /usr/lib/liblber.a
[root@deep openldap-1.2.10]# strip /usr/sbin/in.xfingerd
[root@deep openldap-1.2.10]# strip /usr/sbin/go500
[root@deep openldap-1.2.10]# strip /usr/sbin/go500gw
[root@deep openldap-1.2.10]# strip /usr/sbin/mail500
[root@deep openldap-1.2.10]# strip /usr/sbin/rp500
[root@deep openldap-1.2.10]# strip /usr/sbin/rcpt500
[root@deep openldap-1.2.10]# strip /usr/sbin/fax500
[root@deep openldap-1.2.10]# strip /usr/sbin/slapd
[root@deep openldap-1.2.10]# strip /usr/sbin/slurpd
[root@deep openldap-1.2.10]# strip /usr/sbin/ldif
[root@deep openldap-1.2.10]# strip /usr/sbin/ldif2ldbm
[root@deep openldap-1.2.10]# strip /usr/sbin/ldif2index
[root@deep openldap-1.2.10]# strip /usr/sbin/ldif2id2entry
[root@deep openldap-1.2.10]# strip /usr/sbin/ldif2id2children
[root@deep openldap-1.2.10]# strip /usr/sbin/ldbmcat
[root@deep openldap-1.2.10]# strip /usr/sbin/ldbmtest
[root@deep openldap-1.2.10]# strip /usr/sbin/centipede
[root@deep openldap-1.2.10]# strip /usr/bin/ud
[root@deep openldap-1.2.10]# strip /usr/bin/ldapadd
[root@deep openldap-1.2.10]# strip /usr/bin/ldapsearch
[root@deep openldap-1.2.10]# strip /usr/bin/ldapmodify
[root@deep openldap-1.2.10]# strip /usr/bin/ldapmodrdn
[root@deep openldap-1.2.10]# strip /usr/bin/ldappasswd
[root@deep openldap-1.2.10]# strip /usr/bin/ldapdelete

Команда "install" будет создавать новый каталог с именем "ldap" в каталоге "/var" и установит режим доступа к нему чтение, запись и исполнение только для суперпользователя "root" (700) из соображений безопасности. Команда "strip" будет удалять все символы из объектных файлов. Это необходимо, чтобы сделать исполняемые файлы меньшего размера.

Очистка после работы
[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf openldap-version/ openldap-version.tgz
Команды "rm" будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции OpenLDAP. Также будет удален сжатый архив OpenLDAP из каталога "/var/tmp".

Конфигурации.

Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файлы связанные с OpenLDAP из архива, измените их под свои требования и поместите в нужное место так, как это описано ниже. Файл с конфигурациями вы можете скачать с адреса:
http://www.openna.com/books/floppy.tgz

Для запуска OpenLDAP сервера следующие файлы должны быть созданы или скопированы в нужный каталог:

Копируйте файл slapd.conf в каталог "/etc/openldap/".
Копируйте файл ldap в каталог "/etc/rc.d/init.d/".

Вы можете взять эти файлы из нашего архива floppy.tgz.

Конфигурация файла "/etc/ldap/slapd.conf"

Файл "/etc/openldap/slapd.conf" это основной конфигурационный файл для автономного LDAP демона. Все опции: права доступа, пароль, тип базы данных, месторасположение базы данных и прочие могут быть настроены в нем и применены к демону "slapd". Нижеприведенный пример настраивает файл "slapd.conf" на использование базы данных LDBM.

Редактируйте файл slapd.conf (vi /etc/openldap/slapd.conf) и добавьте/измените следующую информацию:

#
# Смотрите slapd.conf(5) для деталей о конфигурационных опциях.
# Этот файл не должен быть доступен для чтения всем пользователям.
#
include /etc/openldap/slapd.at.conf
include /etc/openldap/slapd.oc.conf
schemacheck off
#referral ldap://ldap.itd.umich.edu
pidfile /var/run/slapd.pid
argsfile /var/run/slapd.args
#####################################################################
##
# определения базы данных ldbm
#####################################################################
##
database ldbm
suffix "o=openna, c=com"
directory /var/ldap
rootdn "cn=admin, o=openna, c=com"
rootpw secret
# избегайте использование пароля записанного открытым текстом, особенно
# для пользователя rootdn. Смотрите slapd.conf(5) для деталей.
# определение индексируемых атрибутов ldbm
index cn,sn,uid
index objectclass pres,eq
index default none
# определение прав доступа к ldbm
defaultaccess read
access to attr=userpassword
                by self write
                by dn="cn=admin, o=openna, c=com" write
                by * compare

Вы должны убедиться, что установили следующие опции в вашем файле "slapd.conf" перед запуском демона slapd:

suffix "o=openna, c=com"
Эта опция определяет DN (отличительное имя) корня поддерева, которое вы пытаетесь создать. Другими словами, это показывает какие элементы должны храниться в этой базе данных.

directory /var/ldap
Эта опция определяет каталог, где должны размещаться база данных и соответствующие индексные файлы LDAP. Мы должны установить этот параметр в "/var/ldap", потому что мы создали этот каталог на более ранней стадии инсталляции специально для этих целей.

rootdn "cn=admin, o=openna, c=com"
Эта опция определяет DN (отличительное имя) элемента, которому разрешено делать все, что угодно в каталоге LDAP. Имя введенное здесь может фактически не существовать в файле "/etc/passwd".

rootpw secret
Эта опция определяет пароль, который может использоваться для аутентификации элемента "super-user" базы данных. Это пароль для опции rootdn определенной выше. Важно не использовать пароли, записанные открытым текстом, а использовать вместо них шифрованные пароли.

index cn,sn,uid | index objectclass pres,eq | index default none
Эти опции определяет индексные определения, которые вы хотите создать и управлять в определении базы данных. Параметры, которые мы определили в нашем "slapd.conf" файле, указывают поддерживать индексы для атрибутов cn, sn и uid (index cn,sn,uid), индексы наличия и эквивалентности для атрибута objectclass (index objectclass pres,eq), и не создавать индексы для всех остальных атрибутов (index default none). Смотрите руководство пользователя для большей информации.

Последние опции в файле "slapd.conf" связаны с контролем доступа к каталогу LDAP.

defaultaccess read
access to attr=userpassword
                by self write
                by dn="cn=admin, o=openna, c=com" write
                by * compare

Этот пример применяется для элементов в поддереве "o=openna, c=com". Доступ на чтение разрешается всем, и сам элемент может записывать все свои атрибуты, исключая userpassword. Атрибут userpassword может быть записан только определенным элементом (admin), и сопоставим всеми. Смотрите ваше руководство пользователя для получения большей информации.

Конфигурация скрипта "/etc/rc.d/init.d/ldap"

Настроим ваш скрипт "/etc/rc.d/init.d/ldap" для старта и остановки LDAP сервера. Создайте скрипт ldap (touch /etc/rc.d/init.d/ldap) и добавьте в него:

#!/bin/sh
#
# ldap Это shell скрипт script заботящийся о запуске и остановке
# сервера ldap (slapd и slurpd).
#
# chkconfig: - 70 40
# описание: LDAP (Lightweight Directory Access Protocol) используется
# для реализации индустриального стандарта службы каталогов.
# имя процесса: slapd
# конфигурационный файл: /etc/openldap/slapd.conf
# pid файл: /var/run/slapd.pid
# библиотека исходных функций.
. /etc/rc.d/init.d/functions
# Исходная сетевая конфигурация.
. /etc/sysconfig/network
# Проверка, что сеть работает.
[ ${NETWORKING} = "no" ] && exit 0
[ -f /usr/sbin/slapd ] || exit 0
[ -f /usr/sbin/slurpd ] || exit 0
RETVAL=0
# See how we were called.
case "$1" in
  start)
   # Запуск демонов.
   echo -n "Starting ldap: "
   daemon slapd
   RETVAL=$?
   if [ $RETVAL -eq 0 ]; then
     if grep -q "^replogfile" /etc/openldap/slapd.conf; then
       daemon slurpd
       RETVAL=$?
       [ $RETVAL -eq 0 ] && pidof slurpd | cut -f 1 -d " " > /var/run/slurpd
     fi
   fi
   echo
   [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ldap
  ;;
  stop)
    # Остановка демонов.
    echo -n "Shutting down ldap: "
    killproc slapd
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
      if grep -q "^replogfile" /etc/openldap/slapd.conf; then
        killproc slurpd
        RETVAL=$?
      fi
    fi
    echo
    if [ $RETVAL -eq 0 ]; then
       rm -f /var/lock/subsys/ldap
       rm -f /var/run/slapd.args
    fi
  ;;
  status)
     status slapd
     RETVAL=$?
     if [ $RETVAL -eq 0 ]; then
       if grep -q "^replogfile" /etc/openldap/slapd.conf; then
         status slurpd
         RETVAL=$?
       fi
     fi
  ;;
  restart)
    $0 stop
    $0 start
    RETVAL=$?
  ;;
  reload)
    killproc -HUP slapd
    RETVAL=$?
    if [ $RETVAL -eq 0 ]; then
      if grep -q "^replogfile" /etc/openldap/slapd.conf; then
        killproc -HUP slurpd
        RETVAL=$?
      fi
    fi
  ;;
  *)
   echo "Usage: $0 start|stop|restart|status}"
   exit 1
esac
exit $RETVAL

Сейчас, сделаем этот скрипт исполняемым и изменим права доступа:
[root@deep /]# chmod 700 /etc/rc.d/init.d/ldap

Создадим символическую rc.d ссылку для OpenLDAP командой:
[root@deep /]# chkconfig --add ldap

Скрипт OpenLDAP не будет автоматически стартовать демон slapd, когда вы перезагружаете сервер. Вы можете изменить это выполнив команду:
[root@deep /]# chkconfig --level 345 ldap on

Запустите сервер OpenLDAP вручную следующей командой:

[root@deep /]# /etc/rc.d/init.d/ldap start
Starting ldap:                  [ OK ]

Организация защиты OpenLDAP

Иммунизация важнейших конфигурационных файлов

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

[root@deep /]# chattr +i /etc/openldap/slapd.conf

Дополнительная документация

Для получения большей информации, вы можете прочитать несколько страниц руководства:

$ man ldapd (8) - демон LDAP X.500 протокла
$ man ldapdelete (1) - утилита для удаления элементов ldap
$ man ldapfilter.conf (5) - конфигурационный файл для LDAP осуществляющий фильтр операций
$ man ldapfriendly (5) - файл данных для дружественных операций LDAP
$ man ldapmodify, ldapadd (1) - утилита для изменения и добавления элементов ldap
$ man ldapmodrdn (1) - RDN утилита для модификации элементов ldap
$ man ldappasswd (1) - изменения пароля элементов LDAP
$ man ldapsearch (1) - утилита поиска ldap
$ man ldapsearchprefs.conf (5) - конфигурационный файл для поиска предпочтительных операций LDAP
$ man ldaptemplates.conf (5) - конфигурационный файл для операций отображения образцов LDAP
$ man ldif (5) - LDAP Data Interchange Format
$ man slapd (8) - автономный демон LDAP
$ man slapd.conf (5) - конфигурационный файл для slapd, автономного демона LDAP
$ man slurpd (8) - автономный LDAP Update Replication Daemon
$ man ud (1) - интерактивная программа запросов к серверу каталогов LDAP

Утилиты создания и поддержки OpenLDAP

Создание базы данных LDMB

Есть два метода создания базы данных для LDAP, первый оффлайновый с помощью утилиты "ldif2ldbm" и второй онлайновый при помощи утилиты "ldapadd". Обычно, вы будете использовать оффлайновый метод, когда вы хотите добавить несколько тысяч элементов в вашу базу данных и онлайновый, когда надо добавить небольшое число элементов. Также важно заметить, что оффлайновый метод требует, чтобы ваш "slapd" демон не был запущен, а онлайновый требует работы "slapd" демона.

Создание базы данных LDMB оффлайновым методом при помощи утилиты "ldif2ldbm"

Первое, что вы должны сделать это создать входной файл LDIF содержащий текстовое представление ваших элементов. Текстовый файл, именуемый "my- data-file", может быть использован как пример (конечно, ваш реальный входной LDIF файл будет содержать много больше информации). Когда вы инсталлируете OpenLDAP первый раз и имеете много элементов, которые нужно положить в базу данных, всегда будет хорошей идеей положить всю эту информацию в текстовый файл и добавить ее в вашу базу данных при помощи утилиты "ldif2ldbm".

Шаг 1

Создайте файл my-data-file (touch /tmp/my-data-file) и добавьте в него, например, следующие строки:

dn: o=openna, c=com
o: openna
objectclass: organization

dn: cn=Gerhard Mourani, o=openna, c=com
cn: Gerhard Mourani
sn: Mourani
mail: gmourani@videotron.ca
title: Author
objectclass: person

dn: cn=Anthony Bay, o=openna, c=com
cn: Anthony Bay
sn: Bay
homephone: (444) 111-2233
mobile: (444) 555-6677
mail: abay@openna.com
objectclass: person

dn: cn=George Parker, o=openna, c=com
cn: George Parker
sn: Parker
telephonenumber: (555) 234-5678
fax: (543) 987-6543
mobile: (543) 321-4354
description: E-Commerce
objectclass: person

Вышеприведенный пример показывает вам как конвертирует вашу информацию в LDIF файлы перед добавлением ее в ваш новый каталог. Консультируйтесь с вашей OpenLDAP документацией или книгой для получения большей информации.

Шаг 2

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

[root@deep tmp]# ldif2ldbm -i <inputfile> -f <slapdconfigfile>
[root@deep tmp]# ldif2ldbm -i my-data-file -f /etc/openldap/slapd.conf

Опция "-i" с опцией <inputfile> оперделяет месторасположения LDIF файла. Опция <slapdconfigfile> задает месторасположение конфигурационного файла slapd, который определяет где создавать индексы, какие индексы создавать и т.д.

ЗАМЕЧАНИЕ. Важно заметить, что при этом режиме создания демон "slapd"не должен быть запущен.

Создание базы данных LDMB онлайновым методом при помощи утилиты "ldapadd"

Если элементы в вашем сервере каталогов уже созданы или вы хотите добавить небольшое количество информации в вашу базу данных, то вы можете предпочесть использовать утилиту "ldapadd", чтобы выполнить вашу работу онлайн. Например, чтобы добавить элемент "Europe Mourani" используя утилиту "ldapadd", вы должны создать файл, называемый "newentry" в каталоге "/tmp".

Шаг 1

Создайте файл newentry (touch /tmp/newentry) и добавьте в него следующие строки:

cn=Europe Mourani, o=openna, c=com
cn=Europe Mourani
sn=Mourani
mail=emourani@old.com
description=Marketing relation
objectClass=person

Шаг 2

После того, как файл "newentry" создан, мы должны добавить элемены в сервер каталогов LDAP. Для этого используйте следующую команду:

[root@deep /]# ldapadd -f /tmp/newentry -D "cn=admin, o=openna, c=com" -W
Enter LDAP Password :

Вышеприведенная команда подразумевает что вы установили rootdn в "cn=admin, o=openna, c=com" и rootpw в "secret". Вам будет предложено ввести пароль.

ЗАМЕЧАНИЕ. Важно заметить, что во время использования этой утилиты демон "slapd" должен быть запущен.

ldapmodify

В отличие от реляционных баз данных, где данные постоянно изменяются, сервер каталогов содержит информацию, которая единожды введенная изменяется редко. Но иногда, вам все же приходится модифицировать данные, и в этом вам может помочь утилита "ldapmodify". Она позволяет вам добавлять и модифицировать элементы хранящиеся на сервере каталогов. Допустим что мы хотим заменить содержимое элемента "Europe Mourani" атрибут почты на новое значение "emourani@new.com", для этого нам понадобятся следующие шаги:

Шаг 1

Создаем файл modifyentry (touch /tmp/modifyentry) и добавляем в него следующее содержимое:

cn=Europe Mourani, o=openna, c=com
- mail=emourani@old.com # будет удален старый почтовый адрес для Europe Mourani из базы данных.
+mail=emourani@new.com # будет добавлен новый почтовый адрес для Europe Mourani в базу данных.

Шаг 2

После создания файла "modifyentry", мы должны заменить элемнты каталога LDAP сервера в соответствии с содержимым этого файла. Это делается следующей командой:

[root@deep /]# ladpmodify -D 'cn=Admin, o=openna, c=com' -W -f <inputfile>
[root@deep /]# ladpmodify -D 'cn=Admin, o=openna, c=com' -W -f modifyentry

где <inputfile> - имя файла "modifyentry", который был создан на шаге 1.

Утилиты пользователя OpenLDAP

Поиск элемента на сервере каталогов LDAP

Утилита ldapsearch ищет в базе данных каталога LDAP информацию, которую вы запрашиваете.
Искать в каталоге LDAP элемент, используя команду:

[root@deep /]# ldapsearch -b 'dn' 'attrs'
[root@deep /]# ldapsearch -b 'o=openna, c=com' 'cn=europe*'
cn=Europe Mourani, o=openna, c=com
cn=Europe Mourani
sn=Mourani
mail=emourani@old.com
description=Marketing relation
objectClass=person

Эта команда будет возвращать все элементы и значения с именем europe и будет выводить результаты в стандартный вывод вашего терминала.

Некоторые возможны варианты использования OpenLDAP

OpenLDAP может использоваться как:

  1. Сервер веб каталога.
  2. Сервер белых страниц.
  3. Сертификационный сервер.
  4. Сервер контроля доступа.
  5. Сетевой сервер имен.

Клиент Netscape Address Book для LDAP

Если вы имеете Netscape проинсталлированный на вашей Linux системе или любой другой операционной системе, то вы можете использовать его возможности Address Book для доступа к серверу каталогов LDAP, только что установленной на вашем Linux и запросить ваш сервер каталогов об информации подобной той, что вы получали используя команду "ldapsearch". Если вы интересуетесь как сделать это, то следуйте по шагам описанным ниже:

  1. Открыть Netscape Communicator
  2. Перейти в меню Communicator
  3. Открыть Address Book
  4. Перейти в меню File
  5. Кликнуть на New Directory .
  6. Заполнить поля вашей информацией о сервере

Например:

Сейчас вы сделаи все, что нужно, чтобы иметь возможность создавать запросы к вашему серверу каталогов LDAP на Linux, используя блок с именем "Show names Containing:" для запуска поиска и кликните на кнопке "Search For:" для получения результатов.


Инсталлированные файлы

> /etc/openldap
> /etc/openldap/ldap.conf
> /etc/openldap/ldap.conf.default
> /etc/openldap/ldapfilter.conf
> /etc/openldap/ldapfilter.conf.default
> /etc/openldap/ldaptemplates.conf
> /etc/openldap/ldaptemplates.conf.default
> /etc/openldap/ldapsearchprefs.conf
> /etc/openldap/ldapsearchprefs.conf.default
> /etc/openldap/slapd.conf
> /etc/openldap/slapd.conf.default
> /etc/openldap/slapd.at.conf
> /etc/openldap/slapd.at.conf.default
> /etc/openldap/slapd.oc.conf
> /etc/openldap/slapd.oc.conf.default
> /etc/openldap/ldapserver
> /etc/rc.d/init.d/ldap
> /etc/rc.d/rc0.d/K40ldap
> /etc/rc.d/rc1.d/K40ldap
> /etc/rc.d/rc2.d/K40ldap
> /etc/rc.d/rc3.d/S70ldap
> /etc/rc.d/rc4.d/S70ldap
> /etc/rc.d/rc5.d/S70ldap
> /etc/rc.d/rc6.d/K40ldap
> /usr/bin/ud
> /usr/bin/ldapsearch
> /usr/bin/ldapmodify
> /usr/bin/ldapdelete
> /usr/bin/ldapmodrdn
> /usr/bin/ldappasswd
> /usr/bin/ldapadd
> /usr/include/ldap.h
> /usr/include/lber.h
> /usr/include/ldap_cdefs.h
> /usr/include/disptmpl.h
> /usr/include/srchpref.h
> /usr/lib/liblber.so.1.0.0
> /usr/lib/liblber.so.1
> /usr/lib/liblber.so
> /usr/lib/liblber.la
> /usr/lib/liblber.a
> /usr/lib/libldap.so.1.0.0
> /usr/lib/libldap.so.1
> /usr/lib/libldap.so
> /usr/lib/libldap.la
> /usr/lib/libldap.a
> /usr/man/man1/ud.1
> /usr/man/man1/ldapdelete.1
> /usr/man/man1/ldapmodify.1
> /usr/man/man1/ldapadd.1
> /usr/man/man1/ldapmodrdn.1
> /usr/man/man1/ldappasswd.1
> /usr/man/man1/ldapsearch.1
> /usr/man/man3/cldap_close.3
> /usr/man/man3/cldap_open.3
> /usr/man/man3/cldap_search_s.3
> /usr/man/man3/cldap_setretryinfo.3
> /usr/man/man3/lber-decode.3
> /usr/man/man3/lber-encode.3
> /usr/man/man3/ldap_open.3
> /usr/man/man3/ldap_errlist.3
> /usr/man/man3/ldap_err2string.3
> /usr/man/man3/ldap_first_attribute.3
> /usr/man/man3/ldap_next_attribute.3
> /usr/man/man3/ldap_first_entry.3
> /usr/man/man3/ldap_next_entry.3
> /usr/man/man3/ldap_count_entries.3
> /usr/man/man3/ldap_friendly.3
> /usr/man/man3/ldap_friendly_name.3
> /usr/man/man3/ldap_free_friendlymap.3
> /usr/man/man3/ldap_get_dn.3
> /usr/man/man3/ldap_explode_dn.3
> /usr/man/man3/ldap_explode_dns.3
> /usr/man/man3/ldap_dn2ufn.3
> /usr/man/man3/ldap_is_dns_dn.3
> /usr/man/man3/ldap_get_values.3
> /usr/man/man3/ldap_get_values_len.3
> /usr/man/man3/ldap_value_free.3
> /usr/man/man3/ldap_value_free_len.3
> /usr/man/man3/ldap_count_values.3
> /usr/man/man3/ldap_count_values_len.3
> /usr/man/man3/ldap_getfilter.3
> /usr/man/man3/ldap_init_getfilter.3
> /usr/man/man3/ldap_init_getfilter_buf.3
> /usr/man/man3/ldap_getfilter_free.3
> /usr/man/man3/ldap_getfirstfilter.3
> /usr/man/man3/ldap_getnextfilter.3
> /usr/man/man3/ldap_setfilteraffixes.3
> /usr/man/man3/ldap_build_filter.3
> /usr/man/man3/ldap_modify.3
> /usr/man/man3/ldap_modify_s.3
> /usr/man/man3/ldap_mods_free.3
> /usr/man/man3/ldap_modrdn.3
> /usr/man/man3/ldap_modrdn_s.3
> /usr/man/man3/ldap_modrdn2.3
> /usr/man/man3/ldap_modrdn2_s.3
> /usr/man/man3/ldap_init.3
> /usr/man/man3/ldap_result.3
> /usr/man/man3/ldap_msgfree.3
> /usr/man/man3/ldap_search.3
> /usr/man/man3/ldap_search_s.3
> /usr/man/man3/ldap_search_st.3
> /usr/man/man3/ldap_searchprefs.3
> /usr/man/man3/ldap_init_searchprefs.3
> /usr/man/man3/ldap_init_searchprefs_buf.3
> /usr/man/man3/ldap_free_searchprefs.3
> /usr/man/man3/ldap_first_searchobj.3
> /usr/man/man3/ldap_next_searchobj.3
> /usr/man/man3/ldap_sort.3
> /usr/man/man3/ldap_sort_entries.3
> /usr/man/man3/ldap_sort_values.3
> /usr/man/man3/ldap_sort_strcasecmp.3
> /usr/man/man3/ldap_ufn.3
> /usr/man/man3/ldap_ufn_search_s.3
> /usr/man/man3/ldap_ufn_search_c.3
> /usr/man/man3/ldap_ufn_search_ct.3
> /usr/man/man3/ldap_ufn_setprefix.3
> /usr/man/man3/ldap_ufn_setfilter.3
> /usr/man/man3/ldap.3
> /usr/man/man3/cldap.3
> /usr/man/man3/ldap_abandon.3
> /usr/man/man3/ldap_add.3
> /usr/man/man3/ldap_add_s.3
> /usr/man/man3/ldap_bind.3
> /usr/man/man3/ldap_bind_s.3
> /usr/man/man3/ldap_simple_bind.3
> /usr/man/man3/ldap_simple_bind_s.3
> /usr/man/man3/ldap_kerberos_bind_s.3
> /usr/man/man3/ldap_kerberos_bind1.3
> /usr/man/man3/ldap_kerberos_bind1_s.3
> /usr/man/man3/ldap_kerberos_bind2.3
> /usr/man/man3/ldap_kerberos_bind2_s.3
> /usr/man/man3/ldap_unbind.3
> /usr/man/man3/ldap_unbind_s.3
> /usr/man/man3/ldap_set_rebind_proc.3
> /usr/man/man3/ldap_cache.3
> /usr/man/man3/ldap_enable_cache.3
> /usr/man/man3/ldap_disable_cache.3
> /usr/man/man3/ldap_destroy_cache.3
> /usr/man/man3/ldap_flush_cache.3
> /usr/man/man3/ldap_uncache_entry.3
> /usr/man/man3/ldap_uncache_request.3
> /usr/man/man3/ldap_set_cache_options.3
> /usr/man/man3/ldap_charset.3
> /usr/man/man3/ldap_set_string_translators.3
> /usr/man/man3/ldap_enable_translation.3
> /usr/man/man3/ldap_translate_from_t61.3
> /usr/man/man3/ldap_translate_to_t61.3
> /usr/man/man3/ldap_t61_to_8859.3
> /usr/man/man3/ldap_8859_to_t61.3
> /usr/man/man3/ldap_compare.3
> /usr/man/man3/ldap_compare_s.3
> /usr/man/man3/ldap_delete.3
> /usr/man/man3/ldap_delete_s.3
> /usr/man/man3/ldap_disptmpl.3
> /usr/man/man3/ldap_init_templates.3
> /usr/man/man3/ldap_init_templates_buf.3
> /usr/man/man3/ldap_free_templates.3
> /usr/man/man3/ldap_first_disptmpl.3
> /usr/man/man3/ldap_next_disptmpl.3
> /usr/man/man3/ldap_oc2template.3
> /usr/man/man3/ldap_tmplattrs.3
> /usr/man/man3/ldap_first_tmplrow.3
> /usr/man/man3/ldap_next_tmplrow.3
> /usr/man/man3/ldap_first_tmplcol.3
> /usr/man/man3/ldap_next_tmplcol.3
> /usr/man/man3/ldap_entry2text.3
> /usr/man/man3/ldap_entry2text_search.3
> /usr/man/man3/ldap_vals2text.3
> /usr/man/man3/ldap_entry2html.3
> /usr/man/man3/ldap_entry2html_search.3
> /usr/man/man3/ldap_vals2html.3
> /usr/man/man3/ldap_error.3
> /usr/man/man3/ldap_perror.3
> /usr/man/man3/ld_errno.3
> /usr/man/man3/ldap_result2error.3
> /usr/man/man3/ldap_ufn_timeout.3
> /usr/man/man3/ldap_url.3
> /usr/man/man3/ldap_is_ldap_url.3
> /usr/man/man3/ldap_url_parse.3
> /usr/man/man3/ldap_free_urldesc.3
> /usr/man/man3/ldap_url_search.3
> /usr/man/man3/ldap_url_search_s.3
> /usr/man/man3/ldap_url_search_st.3
> /usr/man/man5/ldap.conf.5
> /usr/man/man5/ldapfilter.conf.5
> /usr/man/man5/ldapfriendly.5
> /usr/man/man5/ldapsearchprefs.conf.5
> /usr/man/man5/ldaptemplates.conf.5
> /usr/man/man5/ldif.5
> /usr/man/man5/slapd.conf.5
> /usr/man/man5/slapd.replog.5
> /usr/man/man5/ud.conf.5
> /usr/man/man8/centipede.8
> /usr/man/man8/chlog2replog.8
> /usr/man/man8/edb2ldif.8
> /usr/man/man8/go500.8
> /usr/man/man8/go500gw.8
> /usr/man/man8/in.xfingerd.8
> /usr/man/man8/ldapd.8
> /usr/man/man8/ldbmcat.8
> /usr/man/man8/ldif.8
> /usr/man/man8/ldif2ldbm.8
> /usr/man/man8/ldif2index.8
> /usr/man/man8/ldif2id2entry.8
> /usr/man/man8/ldif2id2children.8
> /usr/man/man8/mail500.8
> /usr/man/man8/fax500.8
> /usr/man/man8/rcpt500.8
> /usr/man/man8/slapd.8
> /usr/man/man8/slurpd.8
> /usr/sbin/ldif
> /usr/sbin/in.xfingerd
> /usr/sbin/go500
> /usr/sbin/go500gw
> /usr/sbin/mail500
> /usr/sbin/rp500
> /usr/sbin/fax500
> /usr/sbin/xrpcomp
> /usr/sbin/rcpt500
> /usr/sbin/slapd
> /usr/sbin/ldif2ldbm
> /usr/sbin/ldif2index
> /usr/sbin/ldif2id2entry
> /usr/sbin/ldif2id2children
> /usr/sbin/ldbmcat
> /usr/sbin/centipede
> /usr/sbin/ldbmtest
> /usr/sbin/slurpd
> /usr/share/openldap
> /usr/share/openldap/ldapfriendly
> /usr/share/openldap/go500gw.help
> /usr/share/openldap/rcpt500.help
> /var/ldap

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

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

Глава 17 Серверное программное обеспечение (Сервис баз данных) - PostgreSQL сервер

В этой главе
OpenLDAP сервер
Конфигурации
Организация защиты OpenLDAP
Утилиты создания и поддержки OpenLDAP
Утилиты пользователя OpenLDAP
Netscape Address Book клиент для LDAP
Linux сервер баз данных PostgreSQL
Создание и инсталляция базы данных из-под пользователя Postgres
Конфигурации
Команды

Linux сервер баз данных PostgreSQL.

Краткий обзор.

Однажды занявшись обслуживанием и поддержкой сервисов для пользователей, вы неизбежно столкнетесь с тем, что вам нужно хранить информацию о них в архиве так, чтобы она была доступна и легко модифицировалась в любое время. Эти задачи могут быть решение использованием баз данных. Много разных баз данных доступно под Linux; выбрать какую-нибудь одну очень трудно, так как она должна поддерживать несколько языков программирования, стандарты и широкий спектр возможностей. PostgreSQL, оригинально разработанная в UC Berkeley Computer Science Department, является пионером многих объектно- реляционных концепций сейчас доступных в коммерческих базах данных. Она предоставляет поддержку языков SQL92/SQL3, целостность транзакций и расширяемость типов.

Как написано на веб сервере PostgreSQL:

PostgreSQL - это изощренная объектно-реляционная система управления базами данных DBMS, поддерживающая практически все SQL конструкции, включая вложенный select, транзакции, и определяемые пользователем типы и функции. Это наиболее продвинутая база данных, доступная в исходных кодах в настоящее время.


Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
PostgreSQL версии 6.5.3

Пакеты.
Домашняя страница PostgreSQL: http://www.postgresql.org/
FTP сервер PostgreSQL: 216.126.84.28
Вы должны скачать: postgresql-6.5.3.tar.gz

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

Перед компиляцией PostgreSQL вам необходимо убедиться, что на вашей системе установлен пакет egcs-c++-version.i386.rpm. Этот пакет располагается на вашем Red Hat Linux CD-ROM в каталоге "RedHat/RPMS". После компиляции и инсталляции PostgreSQL вы можете удалить его из вашей системы.
Проверьте, что egcs-c++-version.i386.rpm уже инсталлирован, используя команду:

[root@deep /]# rpm -q egcs-c++

Для инсталляции egcs-c++-version.i386.rpm выполните следующие команды:

[root@deep /]# mount /dev/cdrom /mnt/cdrom
[root@deep /]# cd /mnt/cdrom/RedHat/RPMS
[root@deep RPMS]# rpm -Uvh egcs-c++-version.i386.rpm
egcs-c++                ##################################################

Тарболы. Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции PostgreSQL и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,
До инсталляции:
find /* > PostgreSQL1

После инсталляции:
find /* > PostgreSQL2

Для получения списка установленных файлов:
diff PostgreSQL1 PostgreSQL2 > PostgreSQL-Installed

Раскройте тарбол:

[root@deep /]# cp postgresql-version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf postgresql-version.tar.gz

Компиляция и оптимизация.

Шаг 1

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

[root@deep /]# useradd -M -o -r -d /var/lib/pgsql -s /bin/bash -c "PostgreSQL Server" -u 40 postgres >/dev/null 2>&1 || :

Шаг 2

Перейдите в новый PosgreSQL каталог, а затем в подкаталог "src". Введите следующие команды на вашем терминале:

[root@deep /]# cd /var/tmp/postgresql-6.5.3
[root@deep postgresql-6.5.3]# cd src
CC="egcs" \
./configure \
--prefix=/usr \
--enable-locale

Редактируйте файл Makefile.global (vi +210 Makefile.global) и измените следующие строки:

CFLAGS= -I$(SRCDIR)/include -I$(SRCDIR)/backend
Должна быть:
CFLAGS= -I$(SRCDIR)/include -I$(SRCDIR)/backend -O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions

Это оптимизационные флаги для сервера PostgreSQL. Конечно, вы должны приспособить их под вашу систему и процессор.

Шаг 3

Сейчас, мы должны скомпилировать и инсталлировать PosgreSQL на сервере:

[root@deep src]# make all
[root@deep src]# cd ..
[root@deep postgresql-6.5.3]# make -C src install
[root@deep postgresql-6.5.3]# make -C src/man install
[root@deep postgresql-6.5.3]# mkdir -p /usr/include/pgsql
[root@deep postgresql-6.5.3]# mv /usr/include/access /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/commands /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/executor /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/lib /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/libpq /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/libpq++ /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/port /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/utils /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/fmgr.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/os.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/config.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/c.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/postgres.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/postgres_ext.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/libpq-fe.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/libpq-int.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/ecpgerrno.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/ecpglib.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/ecpgtype.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/sqlca.h /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/include/libpq++.H /usr/include/pgsql/
[root@deep postgresql-6.5.3]# mkdir -p /usr/lib/pgsql
[root@deep postgresql-6.5.3]# mv /usr/lib/*source /usr/lib/pgsql/
[root@deep postgresql-6.5.3]# mv /usr/lib/*sample /usr/lib/pgsql/
[root@deep postgresql-6.5.3]# mkdir -p /var/lib/pgsql
[root@deep postgresql-6.5.3]# chown -R postgres.postgres /var/lib/pgsql/
[root@deep postgresql-6.5.3]# chmod 755 /usr/lib/libpq.so.2.0
[root@deep postgresql-6.5.3]# chmod 755 /usr/lib/libecpg.so.3.0.0
[root@deep postgresql-6.5.3]# chmod 755 /usr/lib/libpq++.so.3.0
[root@deep postgresql-6.5.3]# strip /usr/bin/postgres
[root@deep postgresql-6.5.3]# strip /usr/bin/postmaster
[root@deep postgresql-6.5.3]# strip /usr/bin/ecpg
[root@deep postgresql-6.5.3]# strip /usr/bin/pg_id
[root@deep postgresql-6.5.3]# strip /usr/bin/pg_version
[root@deep postgresql-6.5.3]# strip /usr/bin/pg_dump
[root@deep postgresql-6.5.3]# strip /usr/bin/pg_passwd
[root@deep postgresql-6.5.3]# strip /usr/bin/psql
[root@deep postgresql-6.5.3]# rm -f /usr/lib/global1.description
[root@deep postgresql-6.5.3]# rm -f /usr/lib/local1_template1.description

Команда "make" компилирует все исходные файлы в исполняемые двоичные файлы и команды "make install" инсталлирует исполняемые и все сопутствующие файлы в необходимое место. "mkdir" создаст новый каталог "pgsql" в каталогах "/usr/include" и "/usr/lib", и затем мы переместим все подкаталоги и файлы, связанные с PostgreSQL из каталогов "/usr/include" и "/usr/lib" в "/usr/include/pgsql" и "/usr/lib/pgsql" соответственно. Команда "chown" установит правильного владельца и группу для каталога "/var/lib/pgsql". Команда "strip" удалит все символы из объектных файлов. Это приведет к уменьшению размеров соответствующих файлов, что улучшит производительность программ. Команда "rm" удалит файлы "global1.description" и "local1_template1.description", которые не нужны программе PosgreSQL.

Создание базы данных инсталлированной из под бюджета суперпользователя Postgres

После того, как вы проинсталлировали PostgreSQL на сервере, необходимо создать базу данных до запуска PostgreSQL сервера.
Для создания базы данных используйте следующую команду:

[root@deep /]# su postgres
[postgres@deep /]$ initdb --pglib=/usr/lib/pgsql --pgdata=/var/lib/pgsql

We are initializing the database system with username postgres (uid=40).
This user will own all the files and must also own the server process.

Creating Postgres database system directory /var/lib/pgsql/base

Creating template database in /var/lib/pgsql/base/template1

Creating global classes in /var/lib/pgsql/base

Adding template1 database to pg_database...

Vacuuming template1
Creating public pg_user view
Creating view pg_rules
Creating view pg_views
Creating view pg_tables
Creating view pg_indexes
Loading pg_description

[postgres@deep /]$ chmod 640 /var/lib/pgsql/pg_pwd
[postgres@deep /]$ exit
exit
[root@deep /]#

Опция "--pglib" будет задавать месторасположение библиотек PostgreSQL, а "-- pgdata" определит место, где будут располагаться ваши базы данных.

ЗАМЕЧАНИЕ. Не создавайте базы данных из под пользователя "root"! Это создаст большую дыру в безопасности.

Очистка после работы

[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf postgresql-version/ postgresql-version.tar.gz

Удаление пакета egcs-c++-version.i386.rpm для экономии дискового пространства.

[root@deep /]# rpm -e egcs-c++

Команды "rm" будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции PostgreSQL. Также будет удален сжатый архив PostgreSQL из каталога "/var/tmp".

Команда "rpm -e" удалит пакет egcs-c++ при помощи которого мы компилировали сервер PosgreSQL. Заметим, что пакет egcs-c++ требуется только для компиляции программ подобных PostgreSQL и может быть спокойно удален после окончания этой процедуры.

Конфигурации.

Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файлы связанные с PostgreSQL из архива, измените их под свои требования и поместите в нужное место так, как это описано ниже. Файл с конфигурациями вы можете скачать с адреса:
http://www.openna.com/books/floppy.tgz

Для запуска PostgreSQL сервера следующие файлы должны быть созданы или скопированы в нужный каталог:

Копируйте файл postgresql в каталог "/etc/rc.d/init.d/".

Вы можете взять эти файлы из нашего архива floppy.tgz.

Конфигурация скрипта "/etc/rc.d/init.d/postgresql"

Настроим скрипт "/etc/rc.d/init.d/postgresql", который будет отвечать за запуск и остановку PostgreSQL сервера.
Создадим скрипт postgresql (touch /etc/rc.d/init.d/postgresql) и добавьте в него следующие строки:

#! /bin/sh
# postgresql Это инициализационный скрипт для запуска PostgreSQL сервера
# 
# chkconfig: 345 85 15
# описание: запуск и остановка демона PostgreSQL, отвечающего за  обработку
# всех запросов к базе данных.
# имя процесса: postmaster
# pid файл: /var/run/postmaster.pid
#
# библиотека исходных функций.
. /etc/rc.d/init.d/functions
# Get config.
. /etc/sysconfig/network
# Поверка работает ли сеть.
# это нужно для postmaster.
[ ${NETWORKING} = "no" ] && exit 0
[ -f /usr/bin/postmaster ] || exit 0
# Этот скрипт немного необычен тем, что имя демона (postmaster)
# не совпадает с именем подсистемы (postgresql)
# Смотрите, как мы осуществляем вызов.
case "$1" in
  start)
    echo -n "Checking postgresql installation: "
    # Проверка структуры PGDATA
    if [ -f /var/lib/pgsql/PG_VERSION ] && [ -d /var/lib/pgsql/base/template1 ]
    then
      # Проверка версии существующие PGDATA
      if [ `cat /var/lib/pgsql/PG_VERSION` != '6.5' ]
      then
         echo "old version. Need to Upgrade."
         echo "See /usr/doc/postgresql-6.5.2/README.rpm for more information."
         exit 1
      else
         echo "looks good!"
      fi
      # PGDATAне существуе! Нужно выполнить Initdb.
    else
      echo "no database files found."
      if [ ! -d /var/lib/pgsql ]
      then
        mkdir -p /var/lib/pgsql
        chown postgres.postgres /var/lib/pgsql
      fi
      su -l postgres -c '/usr/bin/initdb --pglib=/usr/lib/pgsql --pgdata=/var/lib/pgsql'
    fi
    # Проверка, запущен ли уже postmaster...
    pid=`pidof postmaster`
    if [ $pid ]
    then
      echo "Postmaster already running."
    else
      # все системы запущены - удаление старых блокирующих файлов
      rm -f /tmp/.s.PGSQL.* > /dev/null
      echo -n "Starting postgresql service: "
      su -l postgres -c '/usr/bin/postmaster -i -S -D/var/lib/pgsql'
      sleep 1
      pid=`pidof postmaster`
      if [ $pid ]
      then
         echo -n "postmaster [$pid]"
         touch /var/lock/subsys/postgresql
         echo $pid > /var/run/postmaster.pid
         echo
      else
         echo "failed."
      fi
    fi
  ;;
  stop)
     echo -n "Stopping postgresql service: "
     killproc postmaster
     sleep 2
     rm -f /var/run/postmaster.pid
     rm -f /var/lock/subsys/postgresql
     echo
  ;;
  status)
     status postmaster
  ;;
  restart)
     $0 stop
     $0 start
  ;;
  *)
     echo "Usage: postgresql {start|stop|status|restart}"
     exit 1
esac
exit 0

Сейчас, мы должны сделать этот скрипт исполняемым и изменить права доступа к нему:

[root@deep /]# chmod 700 /etc/rc.d/init.d/postgresql

Создайте символическую rc.d ссылку для PostgreSQL следующей командой:

[root@deep /]# chkconfig --add postgresql

Запустите ваш новый PostgreSQL сервер вручную следующей командой:

[root@deep /]# /etc/rc.d/init.d/postgresql start
Checking postgresql installation: looks good!
Starting postgresql service:          postmaster [22401]

Команды

Команды описанные ниже мы будем часто использовать, но на самом деле их много больше, и вы должны изучить страницы руководства (man) и документацию, чтобы получить более подробную информацию.

Для определения нового пользователя в вашей базе данных используйте утилиту:

[root@deep /]# su postgres
[postgres@deep /]$ createuser
Enter name of user to add ---> admin
Enter user's postgres ID or RETURN to use unix user ID: 500 ->
Is user "admin" allowed to create databases (y/n) y
Is user "admin" a superuser? (y/n) y
createuser: admin was successfully added

Для удаления пользователя из базы данных используйте утилиту destroyuser:

[root@deep /]# su postgres
[postgres@deep /]$ destroyuser
Enter name of user to delete ---> admin
destroyuser: delete of user admin was successful.

Для создания новой базы данных запустите утилиту createdb:

[root@deep /]# su postgres [postgres@deep /]$ createdb dbname (dbname - это имя создаваемой базы данных).

Или из терминальной программы Postgres (psql)

[root@deep /]# su admin
[admin@deep /]$ psql template1
Welcome to the POSTGRESQL interactive sql monitor:
Please read the file COPYRIGHT for copyright terms of POSTGRESQL
[PostgreSQL 6.5.3 on i686-pc-linux-gnu, compiled by egcs ]
type \? for help on slash commands
type \q to quit
type \g or terminate with semicolon to execute query
You are currently connected to the database: template1

template1 _ > create database foo;
CREATEDB

ЗАМЕЧАНИЕ. Клиентское соединение должно быть разрешено с этого IP адреса и/или имени пользователя в файле "pg_hba.conf", расположенного в PG_DATA.

Другие полезные команды, выполняемые в терминальной программе Postgres (psql):

Соединение с новой базой данных:

template1 _ > \c foo
connecting to new database: foo
foo _ >

Создание таблицы:

foo _ > create table bar (i int4, c char(16)); CREATE foo _ >

Для проверки новой таблицы используйте команду:

foo _ > \d bar
Table = bar
+----------------------------------+----------------------------------+------------+
|      Field                       |                 Type             |   Length   |
+----------------------------------+----------------------------------+------------+
|           I                      |              int4                |      4     |
|           c                      |              char()              |      16    |
+----------------------------------+----------------------------------+------------+
foo _ >

Для уничтожения таблицы, индекса, представления (view) используйте команду:

foo _ > drop table table_name;
foo _ > drop index index_name;
foo _ > drop view view_name;
Для вставки данных в: (таблица уже должна быть создана) foo _ > insert into table_name (name_of_attr1, name_of_attr2, name_of_attr3)
foo _ > values (value1, value2, value3);

Инсталлированные файлы

> /etc/rc.d/init.d/postgresql
> /etc/rc.d/rc0.d/K15postgresql
> /etc/rc.d/rc1.d/K15postgresql
> /etc/rc.d/rc2.d/K15postgresql
> /etc/rc.d/rc3.d/S85postgresql
> /etc/rc.d/rc4.d/S85postgresql
> /etc/rc.d/rc5.d/S85postgresql
> /etc/rc.d/rc6.d/K15postgresql
> /usr/bin/postgres
> /usr/bin/postmaster
> /usr/bin/ecpg
> /usr/bin/pg_id
> /usr/bin/pg_version
> /usr/bin/psql
> /usr/man/manl/begin.l
> /usr/man/manl/close.l
> /usr/man/manl/cluster.l
> /usr/man/manl/commit.l
> /usr/man/manl/copy.l
> /usr/man/manl/create_aggregate.l
> /usr/man/manl/create_database.l
> /usr/man/manl/create_function.l
> /usr/man/manl/create_index.l
> /usr/man/manl/create_language.l
> /usr/man/manl/create_operator.l
> /usr/man/manl/create_rule.l
> /usr/man/manl/create_sequence.l
> /usr/man/manl/create_table.l
> /usr/bin/pg_dump
> /usr/bin/pg_dumpall
> /usr/bin/pg_upgrade
> /usr/bin/pg_passwd
> /usr/bin/cleardbdir
> /usr/bin/createdb
> /usr/bin/createlang
> /usr/bin/createuser
> /usr/bin/destroydb
> /usr/bin/destroylang
> /usr/bin/destroyuser
> /usr/bin/initdb
> /usr/bin/vacuumdb
> /usr/bin/initlocation
> /usr/bin/ipcclean
> /usr/include/lib
> /usr/include/lib/dllist.h
> /usr/include/pgsql
> /usr/include/pgsql/access
> /usr/include/pgsql/access/attnum.h
> /usr/include/pgsql/commands
> /usr/include/pgsql/commands/trigger.h
> /usr/include/pgsql/executor
> /usr/include/pgsql/executor/spi.h
> /usr/include/pgsql/libpq
> /usr/include/pgsql/libpq/pqcomm.h
> /usr/include/pgsql/libpq/libpq-fs.h
> /usr/include/pgsql/libpq++
> /usr/include/pgsql/libpq++/pgconnection.h
> /usr/include/pgsql/libpq++/pgdatabase.h
> /usr/include/pgsql/libpq++/pgtransdb.h
> /usr/include/pgsql/libpq++/pgcursordb.h
> /usr/include/pgsql/libpq++/pglobject.h
> /usr/include/pgsql/port
> /usr/include/pgsql/port/linux
> /usr/include/pgsql/utils
> /usr/include/pgsql/utils/geo_decls.h
> /usr/include/pgsql/utils/elog.h
> /usr/include/pgsql/utils/palloc.h
> /usr/include/pgsql/utils/mcxt.h
> /usr/include/pgsql/fmgr.h
> /usr/include/pgsql/os.h
> /usr/include/pgsql/config.h
> /usr/include/pgsql/c.h
> /usr/include/pgsql/postgres.h
> /usr/include/pgsql/postgres_ext.h
> /usr/include/pgsql/libpq-fe.h
> /usr/include/pgsql/libpq-int.h
> /usr/include/pgsql/ecpgerrno.h
> /usr/include/pgsql/ecpglib.h
> /usr/include/pgsql/ecpgtype.h
> /usr/include/pgsql/sqlca.h
> /usr/include/pgsql/libpq++.H
> /usr/lib/libpq.a
> /usr/lib/libpq.so.2.0
> /usr/lib/libpq.so.2
> /usr/lib/libpq.so
> /usr/lib/libecpg.a
> /usr/lib/libecpg.so.3.0.0
> /usr/lib/libecpg.so.3
> /usr/lib/libecpg.so
> /usr/lib/libpq++.a
> /usr/lib/libpq++.so.3.0
> /usr/lib/libpq++.so.3
> /usr/lib/libpq++.so
> /usr/lib/plpgsql.so
> /usr/lib/pgsql
> /usr/lib/pgsql/global1.bki.source
> /usr/lib/pgsql/local1_template1.bki.source
> /usr/lib/pgsql/pg_geqo.sample
> /usr/man/manl/create_trigger.l
> /usr/man/manl/create_type.l
> /usr/man/manl/create_user.l
> /usr/man/manl/create_version.l
> /usr/man/manl/create_view.l
> /usr/man/manl/declare.l
> /usr/man/manl/delete.l
> /usr/man/manl/drop.l
> /usr/man/manl/drop_aggregate.l
> /usr/man/manl/drop_database.l
> /usr/man/manl/drop_function.l
> /usr/man/manl/drop_index.l
> /usr/man/manl/drop_language.l
> /usr/man/manl/drop_operator.l
> /usr/man/manl/drop_rule.l
> /usr/man/manl/drop_sequence.l
> /usr/man/manl/drop_table.l
> /usr/man/manl/drop_trigger.l
> /usr/man/manl/drop_type.l
> /usr/man/manl/drop_user.l
> /usr/man/manl/drop_view.l
> /usr/man/manl/end.l
> /usr/man/manl/explain.l
> /usr/man/manl/fetch.l
> /usr/man/manl/grant.l
> /usr/man/manl/insert.l
> /usr/man/manl/listen.l
> /usr/man/manl/load.l
> /usr/man/manl/lock.l
> /usr/man/manl/move.l
> /usr/man/manl/notify.l
> /usr/man/manl/reset.l
> /usr/man/manl/revoke.l
> /usr/man/manl/rollback.l
> /usr/man/manl/select.l
> /usr/man/manl/set.l
> /usr/man/manl/show.l
> /usr/man/manl/sql.l
> /usr/man/manl/update.l
> /usr/man/manl/vacuum.l
> /var/lib/pgsql
> /var/lib/pgsql/base
> /var/lib/pgsql/base/template1
> /var/lib/pgsql/base/template1/pg_proc
> /var/lib/pgsql/base/template1/pg_type
> /var/lib/pgsql/base/template1/pg_attribute
> /var/lib/pgsql/base/template1/pg_class
> /var/lib/pgsql/base/template1/pg_inherits
> /var/lib/pgsql/base/template1/pg_index
> /var/lib/pgsql/base/template1/pg_statistic
> /var/lib/pgsql/base/template1/pg_operator
> /var/lib/pgsql/base/template1/pg_opclass
> /var/lib/pgsql/base/template1/pg_am
> /var/lib/pgsql/base/template1/pg_amop
> /var/lib/pgsql/base/template1/pg_amproc
> /var/lib/pgsql/base/template1/pg_language
> /var/lib/pgsql/base/template1/pg_aggregate
> /var/lib/pgsql/base/template1/pg_ipl
> /var/lib/pgsql/base/template1/pg_inheritproc
> /var/lib/pgsql/base/template1/pg_rewrite
> /var/lib/pgsql/base/template1/pg_listener
> /var/lib/pgsql/base/template1/pg_description
> /var/lib/pgsql/base/template1/pg_attribute_relid_attnam_index
> /var/lib/pgsql/base/template1/pg_attribute_relid_attnum_index
> /var/lib/pgsql/base/template1/pg_attribute_attrelid_index
> /var/lib/pgsql/base/template1/pg_proc_oid_index
> /var/lib/pgsql/base/template1/pg_proc_proname_narg_type_index
> /var/lib/pgsql/base/template1/pg_proc_prosrc_index
> /var/lib/pgsql/base/template1/pg_type_oid_index
> /var/lib/pgsql/base/template1/pg_type_typname_index
> /usr/lib/pgsql/pg_hba.conf.sample
> /usr/man/man1/cleardbdir.1
> /usr/man/man1/createdb.1
> /usr/man/man1/createuser.1
> /usr/man/man1/destroydb.1
> /usr/man/man1/destroyuser.1
> /usr/man/man1/ecpg.1
> /usr/man/man1/initdb.1
> /usr/man/man1/initlocation.1
> /usr/man/man1/ipcclean.1
> /usr/man/man1/pg_dump.1
> /usr/man/man1/pg_dumpall.1
> /usr/man/man1/pg_passwd.1
> /usr/man/man1/pg_upgrade.1
> /usr/man/man1/postgres.1
> /usr/man/man1/postmaster.1
> /usr/man/man1/psql.1
> /usr/man/man3/catalogs.3
> /usr/man/man3/libpq.3
> /usr/man/man5/pg_hba.conf.5
> /usr/man/manl
> /usr/man/manl/abort.l
> /usr/man/manl/alter_table.l
> /usr/man/manl/alter_user.l
> /var/lib/pgsql/base/template1/pg_class_oid_index
> /var/lib/pgsql/base/template1/pg_class_relname_index
> /var/lib/pgsql/base/template1/pg_attrdef
> /var/lib/pgsql/base/template1/pg_attrdef_adrelid_index
> /var/lib/pgsql/base/template1/pg_relcheck
> /var/lib/pgsql/base/template1/pg_relcheck_rcrelid_index
> /var/lib/pgsql/base/template1/pg_trigger
> /var/lib/pgsql/base/template1/pg_trigger_tgrelid_index
> /var/lib/pgsql/base/template1/pg_description_objoid_index
> /var/lib/pgsql/base/template1/PG_VERSION
> /var/lib/pgsql/base/template1/pg_user
> /var/lib/pgsql/base/template1/pg_rules
> /var/lib/pgsql/base/template1/pg_views
> /var/lib/pgsql/base/template1/pg_tables
> /var/lib/pgsql/base/template1/pg_indexes
> /var/lib/pgsql/pg_variable
> /var/lib/pgsql/pg_database
> /var/lib/pgsql/pg_shadow
> /var/lib/pgsql/pg_group
> /var/lib/pgsql/pg_log
> /var/lib/pgsql/PG_VERSION
> /var/lib/pgsql/pg_hba.conf
> /var/lib/pgsql/pg_geqo.sample
> /var/lib/pgsql/pg_pwd

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

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

Глава 18 Серверное программное обеспечение (Прокси сервис) (Часть 1)

В этой главе
Прокси сервер Squid
Использование библиотеки GNU malloc для улучшения производительности Squid
Конфигурации
Организация защиты Squid
Оптимизация Squid
Утилита cachemgr.cgi
Конфигурация Netscape для работы с прокси сервером Squid

Прокси сервер Squid

Краткий обзор.

Прокси сервера, с их способностью к экономии полосы пропускания, улучшения безопасности, улучшения скорости веб-серфинга, становятся все более и более популярными. В настоящее время на рынке есть только несколько программных прокси-серверов. Они имеют два основных недостатка: они коммерческие и не поддерживают ICP (ICP используется для обмена информации о наличии URL в соседнем кэше). Squid - это лучший выбор для кэширующего прокси-сервера, так как он надежный, бесплатный и поддерживает ICP.

Производный от "кэширующего" программного обеспечения ARPA-funded Harvest research project, разработанного в National Laboratory for Applied Network Research and funded by the National Science Foundation, Squid предлагает высокопроизводительное кэширование для веб клиентов, он также поддерживает FTP, Gopher и HTTP объекты данных. Squid хранит часто используемые объекты в RAM, поддерживает надежную базу данных объектов на диске, имеет комплексных механизм контроля доступа и поддерживает SSL протокол для посредничества в безопасных соединениях. В дополнение к этому, он поддерживает иерархические связи с другими прокси-серверами, базирующимися на Squid.

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

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
Squid версии 2.3.STABLE2

Пакеты.
Домашняя страница Squid: http://www.squid-cache.org/
FTP сервер Squid: 204.144.128.89
Вы должны скачать: squid-2.3.STABLE2-src.tar.gz

Тарболы.
Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции Squid и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,
До инсталляции:
find /* > Squid1

После инсталляции:
find /* > Squid2

Для получения списка установленных файлов:
diff Squid1 Squid2 > Squid-Installed

Раскройте тарбол:
[root@deep /]# cp squid-version.STABLEz-src.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf squid-version.STABLEz-src.tar.gz

Настройка и оптимизация.

Шаг 1

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

[root@deep /]# useradd -d /cache/ -r -s /dev/null squid >/dev/null 2>&1
[root@deep /]# mkdir /cache/
[root@deep /]# chown -R squid.squid /cache/

Первое, мы добавляем пользователя "squid". Затем создаем каталог "/cache", если этот каталог не существует. В заключении, мы изменяем владельца каталога "cache" на "squid".

ЗАМЕЧАНИЕ. Обычно мы не нуждаемся в выполнении команды (mkdir /cache/), потому что мы уже создали этот каталог, когда разбивали наш жесткий диск при инсталляции Linux. Если этот раздел не существует, мы должны выполнить эту команду для создания каталога.

Шаг 2

Переместитесь в новый каталог Squid и выполните следующие команды на вашем терминале:

Редактируйте файл Makefile.in (vi +18 icons/Makefile.in) и измените следующие строки:

DEFAULT_ICON_DIR = $(sysconfdir)/icons
Должна быть:
DEFAULT_ICON_DIR = $(libexecdir)/icons

Мы изменили переменную (sysconfdir) на (libexecdir). Благодаря этому, каталог "icons" будет размещаться в "/usr/lib/squid".

Редактируйте файл Makefile.in (vi +34 src/Makefile.in) и измените следующие строки:

DEFAULT_CACHE_LOG = $(localstatedir)/logs/cache.log
Должна быть:
DEFAULT_CACHE_LOG = $(localstatedir)/log/squid/cache.log

DEFAULT_ACCESS_LOG = $(localstatedir)/logs/access.log
Должна быть:
DEFAULT_ACCESS_LOG = $(localstatedir)/log/squid/access.log

DEFAULT_STORE_LOG = $(localstatedir)/logs/store.log
Должна быть:
DEFAULT_STORE_LOG = $(localstatedir)/log/squid/store.log

DEFAULT_PID_FILE = $(localstatedir)/logs/squid.pid
Должна быть:
DEFAULT_PID_FILE = $(localstatedir)/run/squid.pid

DEFAULT_SWAP_DIR = $(localstatedir)/cache
Должна быть:
DEFAULT_SWAP_DIR = /cache

DEFAULT_ICON_DIR = $(sysconfdir)/icons
Должна быть:
DEFAULT_ICON_DIR = $(libexecdir)/icons

Мы изменили месторасположение принятое по умолчанию для файлов "cache.log", "access.log" и "store.log" на каталог "/var/log/squid". Затем, мы разместили pid файл для Squid в каталоге "/var/run", и в заключении, разместили каталог "icons" в "/usr/lib/squid/icons".

Использование библиотеки GNU malloc для улучшения производительности Squid

Если вы страдаете от ограничения памяти на вашей системе, то производительность кэша Squid будет пониженной. Для решения этой проблемы, вы можете связать Squid с внешней библиотекой malloc, такой как GNU malloc. Чтобы Squid использовал GNU malloc как внешнюю библиотеку выполните следующие шаги:

Пакеты
Домашняя страница GNU malloc: http://www.gnu.org/order/ftp.html
Вы должны скачать: malloc.tar.gz

[root@deep /]# cp malloc.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf malloc.tar.gz

Шаг 1

Компилируйте и инсталлируйте GNU malloc на вашей системе выполнив следующие команды:

[root@deep tmp]# cd malloc
[root@deep malloc]# export CC=egcs
[root@deep malloc]# make

Шаг 2

Копируйте файл "libmalloc.a" в каталог с вашими системными библиотеками под именем "libgnumalloc.a".

[root@deep malloc]# cp libmalloc.a /usr/lib/libgnumalloc.a

Шаг 3

Копируйте файл "malloc.h" в каталог с системными заголовочными файлами под именем gnumalloc.h".

[root@deep malloc]# cp malloc.h /usr/include/gnumalloc.h

Squid автоматически определит файлы "libgnumalloc.a" и "gnumalloc.h" и будет использовать их для улучшения производительности кэша.

Компиляция и оптимизация

Шаг 1

Перейдите в каталог с исходными кодами Squid и введите следующие команды на вашем терминале:

CC="egcs" \
CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions" \
./configure \
--prefix=/usr \
--exec-prefix=/usr \
--bindir=/usr/sbin \
--libexecdir=/usr/lib/squid \
--localstatedir=/var \
--sysconfdir=/etc/squid \
--enable-delay-pools \
--enable-cache-digests \
--enable-poll \
--disable-ident-lookups \
--enable-truncate \
--enable-heap-replacement

Эти опции говорят Squid:

Шаг 2

Сейчас, мы должны скомпилировать и инсталлировать Squid на сервере:

[root@deep squid-2.3.STABLE2]# make -f makefile
[root@deep squid-2.3.STABLE2]# make install
[root@deep squid-2.3.STABLE2]# mkdir -p /var/log/squid
[root@deep squid-2.3.STABLE2]# rm -rf /var/logs/
[root@deep squid-2.3.STABLE2]# chown squid.squid /var/log/squid/
[root@deep squid-2.3.STABLE2]# chmod 750 /var/log/squid/
[root@deep squid-2.3.STABLE2]# chmod 750 /cache/
[root@deep squid-2.3.STABLE2]# rm -f /usr/sbin/RunCache
[root@deep squid-2.3.STABLE2]# rm -f /usr/sbin/RunAccel
[root@deep squid-2.3.STABLE2]# strip /usr/sbin/squid
[root@deep squid-2.3.STABLE2]# strip /usr/sbin/client
[root@deep squid-2.3.STABLE2]# strip /usr/lib/squid/dnsserver
[root@deep squid-2.3.STABLE2]# strip /usr/lib/squid/unlinkd
[root@deep squid-2.3.STABLE2]# strip /usr/lib/squid/cachemgr.cgi

Команда "make -f" будет компилировать все исходные файлы в исполняемые двоичные, "make install" будет инсталлировать все исполняемые и сопутствующие им файлы в необходимые места. Команда "mkdir" создаст новый каталог "squid" под каталогом "/var/log". Команда "rm -rf" удалит каталог "/var/logs", так как этот каталог был создан для храннеия файлов регистрации, связанных со Squid, которые были перемещены в каталог "/var/log/squid". Команда "chown" изменит владельца "/var/log/squid" на пользователя squid, и "chmod" изменит права доступа к каталогам "squid" и "cache" (0750/drwxr-x---) из соображений безопасности. Заметим, что мы удаляем небольшие скрипты "RunCache" и "RunAccel", которые запускают Squid в режиме кэширования или акселератора, так как мы используем лучший скрипт "squid" расположенный в каталоге "/etc/rc.d/init.d/". Команда "strip" уменьшит размер двоичных файлов для оптимизации их производительности.

Очистка после работы
[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf squid-version/ squid-version.STABLEz-src.tar.gz
[root@deep tmp]# rm -rf malloc/ malloc.tar.gz
(если вы используете внешнюю библиотеку GNU malloc)

Команды "rm" будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции Squid и GNU malloc. Также будут удалены сжатые архивы Squid и GNU malloc из каталога "/var/tmp".

Конфигурации.

Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файлы связанные с Squid из архива, измените их под свои требования и поместите в нужное место так, как это описано ниже. Файл с конфигурациями вы можете скачать с адреса:
http://www.openna.com/books/floppy.tgz

Для запуска Squid в режиме httpd-акселератора следующие файлы должны быть созданы или скопированы на ваш сервер.

Копируйте squid.conf в каталог "/etc/squid/".
Копируйте squid в каталог "/etc/rc.d/init.d/".
Копируйте squid в каталог "/etc/logrotate.d/".

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

Копируйте squid.conf в каталог "/etc/squid/".
Копируйте squid в каталог "/etc/rc.d/init.d/".
Копируйте squid в каталог "/etc/logrotate.d/".

Вы можете взять эти файлы из нашего архива floppy.tgz.

Конфигурация файла "/etc/squid/squid.conf" для режима httpd-акселератора

Файл "squid.conf" используется для установки и конфигурирования всех опций для вашего прокси-сервера Squid. В конфигурационном файле приведенном ниже, мы будем настраивать Squid на работу в режиме httpd- акселератора. В этом режиме, если Веб сервер запущен на том же сервере где Squid, то вы должны настроить демон на порт 81. В случае с веб сервером Apache, вы можете сделать это назначив вместо 80 порта 81 в файле "httpd.conf". Если Веб-сервер запущен на других серверах вашей сети, вы можете оставить тот же номер порта (80) для Apache, так как Squid подключен на другом IP адресе, где порт (80) не используется.


Редактируйте файл squid.conf (vi /etc/squid/squid.conf) и добавьте/измените следующие опции:

http_port 80
icp_port 0
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 16 MB
cache_dir ufs /cache 200 16 256
emulate_httpd_log on
redirect_rewrites_host_header off
replacement_policy GDSF
acl all src 0.0.0.0/0.0.0.0
http_access allow all
cache_mgr admin@openna.com
cache_effective_user squid
cache_effective_group squid
httpd_accel_host 208.164.186.3
httpd_accel_port 80
log_icp_queries off
cachemgr_passwd my-secret-pass all
buffered_logs on

Эти опции обозначают следующее:

http_port 80
Опция "http_port" определяет номер порта на котором Squid слушает HTTP запросы клиентов. Если вы установите его в 80, у клиента будет создаваться иллюзия, что он соединяется с веб сервером Apache. Так как мы запускаем Squid в режиме акселератора, мы должны слушать 80 порт.

icp_port 0
Опция "icp_port" определяет номер порта на который Squid будет посылать и принимать ICP запросы от соседних кэшей. Мы должны установить эту опцию в 0, чтобы отключить эту возможность, так как мы настраиваем Squid для работы в режиме акселератора для Веб сервера. Возможность ICP нужна только в многоуровневых кэш окружениях с несколькими братскими и родительскими кэшами. Использование ICP в режиме акселератора будет добавлять нежелательные издержки в работе Squid.

acl QUERY urlpath_regex cgi-bin \? и no_cache deny QUERY
Опции "acl QUERY urlpath_regex cgi-bin \? и no_cache deny QUERY" используются для того, чтобы некоторые объекты никогда не кэшировались, например файлы и каталога "cgi-bin". Эта функция безопасности.

cache_mem 16 MB
Опция "cache_mem" определяет количество памяти (RAM) используемое для кэширования таких вызовов: In-Transit objects, Hot Objects, Negative-Cached objects. Это оптимизационная возможность. Важно заметить, что Squid может использовать намного больше памяти, чем значение этого параметра, и из этих соображений, если вы имеете для Squid 48 MB, вы должны здесь выделить 48/3 = 16 MB.

cache_dir ufs /cache 200 16 256
Опция "cache_dir" определяет по порядку: тип используемой системы хранения (ufs), имя каталога для кэша (/cache), объем дискового пространства выделяемый под этот каталог (200 Mbytes), число подкаталогов первого уровня, создаваемых в каталоге кэша (16 Level-1), и число подкаталогов второго уровня создаваемых под каждым подкаталогом первого уровня (256 Level-2). В режиме акселератора, эта опция напрямую связана с размером и количеством файлов, которое вы хотите обслуживать вашим Веб сервером Apache.

emulate_httpd_log on
Опция "emulate_httpd_log", если установлена в "ON", определяет, что Squid должен эмулировать формат файлов регистраций веб сервера Apache. Это очень полезно если вы хотите использовать программы третьих разработчиков, подобные Webalizer, для анализа файлов регистраций веб сервера (httpd).

redirect_rewrites_host_header off
Опция "redirect_rewrites_host_header", если установлена в "OFF", говорит Squid не переписывать любые хосты: заголовки в перенаправленных пакетах. Здесь рекомендуется установить значение "OFF", если вы запускаете Squid в режиме акселератора.

replacement_policy GDSF
Опция "replacement_policy" определяет политику кэша Squid, используемую для определения, какие объекты в кэше должны быть заменены, когда прокси нужно освободить дисковое пространство. Политика Squid LRU используется по умолчанию, если вы во время компиляции не определили опцию "--enable- heap-replacement". В нашей конфигурации, мы выбрали GDSF (Greedy-Dual Size Frequency), как политику по умолчанию. Смотрите http://www.hpl.hp.com/techreports/1999/HPL-1999-69.html и http://fog.hpl.external.hp.com/techreports/98/HPL-98-173.html для большей информации.

acl all src 0.0.0.0/0.0.0.0 and http_access allow all
Опции "acl" и "http_access" определяют списки доступа применяемые на прокси сервере Squid. Наш "acl" и "http_access" не ограничивающие, они позволяют всем соединяться с прокси сервером, так как мы используем его для ускорения работы публичного веб сервера Apache. Смотрите вашу документацию по Squid для получения большей информации об использовании Squid в режиме кэширования.

cache_mgr admin
Опция "cache_mgr" определяет почтовый адрес администратора отвечающего за работоспособность прокси сервера Squid. Этот человек будет получать почту, если при работе Squid возникнут проблемы. Вы можете задать имя или полный почтовый адрес.

cache_effective_user squid и cache_effective_group squid
Опции "cache_effective_user" и "cache_effective_group" определяют UID/GID, под которыми будет запущен кэш. Не забудьте, никогда не запускайте Squid как "root". В нашей конфигурации мы используем UID "squid" и GID "squid".

httpd_accel_host 208.164.186.3 и httpd_accel_port 80
Опции "httpd_accel_host" и "httpd_accel_port" определяют IP адрес и номер порта реального HTTP сервера (например, Apache). В нашей конфигурации, реальный HTTP Веб сервер имеет адрес 208.164.186.3 (www.openna.com) и порт (80). "www.openna.com" это другой сервер в нашей сети, и так как прокси сервер Squid не находится на одном компьютере с Веб сервером Apache, мы используем порт (80) для нашего прокси сервера и порт (80) для Apache веб сервера.

log_icp_queries off
Опция "log_icp_queries" определяет хотите ли вы регистрировать ICP (ICP используется для обмена информации о наличии в соседних кэшах URL-ов) запросы в файл "access.log" или нет. Так как мы не используем ICP в режиме акселератора, мы можем спокойно установить ее в "OFF".

cachemgr_passwd my-secret-pass all
Опция "cachemgr_passwd" определяет пароль, который будет требоваться для доступа к операциям из утилиты "cachemgr.cgi". Эта CGI утилита создана для запуска через веб интерфейс и вывода статистических данных о конфигурации и работе Squid. <my-secret-pass> - это пароль, который вы выбрали, ключевое слово <all> определяет, что он будет один и тот же для всех действий доступных из этой программы. Смотрите раздел "Утилита cachemgr.cgi", приведенный ниже в этой главе для получения большей информации.

buffered_logs on
Опция "buffered_logs", если установлена в "ON", может немного увеличить скорость записи некоторых файлов регистрации. Это оптимизационная возможность.

Конфигурация файла "/etc/squid/squid.conf" для режима кэширующего прокси

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

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


Редактируйте файл squid.conf (vi /etc/squid/squid.conf) и добавьте/измените следующие опции для запуска кэширующего прокси сервера, как автономного сервера:

http_port 8080
icp_port 0
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 16 MB
cache_dir ufs /cache 200 16 256
redirect_rewrites_host_header off
replacement_policy GDSF
acl localnet src 192.168.1.0/255.255.255.0
acl localhost src 127.0.0.1/255.255.255.255
acl Safe_ports port 80 443 210 119 70 21 1025-65535
acl CONNECT method CONNECT
acl all src 0.0.0.0/0.0.0.0
http_access allow localnet
http_access allow localhost
http_access deny !Safe_ports
http_access deny CONNECT
http_access deny all
cache_mgr admin@openna.com
cache_effective_user squid
cache_effective_group squid
log_icp_queries off
cachemgr_passwd my-secret-pass all
buffered_logs on

Большие отличия от конфигурации для режима httpd-акселератора вносит использование списков контроля доступа (ACL). Эта возможность позволяет ограничивать доступ базируясь на исходном IP адресе (src), IP адресе получателя (dst), исходном домене, домене назначения, времени и т.д. Много типов контроля существует благодаря этой возможности и вы должны посмотреть оригинальный файл "Squid.conf" для получения полного списка. Ниже приведены четыре основных типа:

acl    имя    тип     данные
|       |      |         |
acl some-name src a.b.c.d/e.f.g.h # ACL на основе IP адреса отправителя 
acl some-name dst a.b.c.d/e.f.g.h # ACL на основе IP адреса получателя 
acl some-name srcdomain foo.com # ACL на основе имени домена отправителя
acl some-name dstdomain foo.com # ACL на основе имени домена назначения

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

acl localnet src 192.168.1.0/255.255.255.0
acl localhost src 127.0.0.1/255.255.255.255
acl Safe_ports port 80 443 210 119 70 21 1025-65535
acl CONNECT method CONNECT
acl all src 0.0.0.0/0.0.0.0
http_access allow localnet
http_access allow localhost
http_access deny !Safe_ports
http_access deny CONNECT
http_access deny all

Эти acl будут разрешать доступ всем внутренним клиентам из диапазона приватных адресов класса C 192.168.1.0; также разрешается доступ с IP адреса localhost (специальный IP адрес используемый для доступа к самому себе). Затем мы выбираем диапазон портов (80=http, 443=https, 210=wais, 119=nntp, 70=gopher и 21=ftp), к которым внутренние клиенты могут обращаться, мы запрещаем метод CONNECT для предотвращения попыток подключения внешних пользователей к прокси серверу, и в заключении мы запрещаем доступ со всех IP адресов.

Многоуровневое Веб кэширование

Второй метод работы кэширующего прокси это так называемый "Multi-level Web Caching", при котором вы сотрудничаете с большим числом других кэшей в Интрнет. В этом случае ваша организация использует кэши других прокси серверов и другие сервера используют ваш кэш. Следует заметить, что в этой ситуации, кэширующие прокси играют две различные роли в иерархии. Они могут быть настроены, как кэши, имеющие одного "родителя" (sibling) и иметь возможность выдавать документы, которые уже имеют, или настроены как родительские сервера и иметь возможность брать документы из других кэшей или непосредственно с серверов.


ЗАМЕЧАНИЕ. Хорошей стратегией для предотвращения большого сетевого трафика при отсутствии веб кэширования будет настройка несколько sibling кэшей и только небольшого числа родительских кэшей.

Настройка скрипта "/etc/rc.d/init.d/squid" для всех типов конфигураций

Настроим ваш скрипт "/etc/rc.d/init.d/squid" для запуска и остановки кэширующего прокси сервера Squid. Это скрипт изменит установки кэша подкачки на "/cache" вместо "/var/spool/squid".

Создайте скрипт squid (touch /etc/rc.d/init.d/squid) и добавьте в него:

#!/bin/bash
# squid Этот скрипт отвечает за запуск и остановку
# Squid Internet Object Cache
#
# chkconfig: - 90 25
# описание: Squid - Internet Object Cache. Internet object caching - это путь
# для хранения запрошенных объектов из Интернет (например, данные
# доступные через протоколы HTTP, FTP и gopher) на системах находящихся 
# ближе к требуемым серверам, чем организатор запроса. Веб броузеры могут
# затем использовать локальный кэш как прокси HTTP сервер, сокращая
# время доступа и сохраняя полосу пропускания.
# pid файл: /var/run/squid.pid
# конфигурационный файл: /etc/squid/squid.conf
PATH=/usr/bin:/sbin:/bin:/usr/sbin
export PATH
# Библиотека исходных функций.
. /etc/rc.d/init.d/functions
# Исходная сетевая конфигурация.
. /etc/sysconfig/network
# Проверка, что сеть работает.
[ ${NETWORKING} = "no" ] && exit 0
# проверка наличия конфигурационного файла squid
[ -f /etc/squid/squid.conf ] || exit 0
# определения имени двоичного файла squid
[ -f /usr/sbin/squid ] && SQUID=squid
[ -z "$SQUID" ] && exit 0
# определения cache_swap каталога
CACHE_SWAP=`sed -e 's/#.*//g' /etc/squid/squid.conf | \
grep cache_dir | sed -e 's/cache_dir//' | \
cut -d ' ' -f 2`
[ -z "$CACHE_SWAP" ] && CACHE_SWAP=/cache
# опции squid по умолчанию
# -D отключение проверки dns при инициализации. Если вы скорее всего
# не будете иметь соединения с Интернет во время старта squid,
# раскомментируйте это
#SQUID_OPTS="-D"
RETVAL=0
case "$1" in
  start)
    echo -n "Starting $SQUID: "
    for adir in $CACHE_SWAP; do
      if [ ! -d $adir/00 ]; then
        echo -n "init_cache_dir $adir... "
        $SQUID -z -F 2>/dev/null
      fi
    done
    $SQUID $SQUID_OPTS &
    RETVAL=$?
    echo $SQUID
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$SQUID
  ;;
  stop)
    echo -n "Stopping $SQUID: "
    $SQUID -k shutdown &
    RETVAL=$?
    if [ $RETVAL -eq 0 ] ; then
      rm -f /var/lock/subsys/$SQUID
      while : ; do
        [ -f /var/run/squid.pid ] || break
        sleep 2 && echo -n "."
      done
      echo "done"
    else
      echo
    fi
  ;;
  reload)
    $SQUID $SQUID_OPTS -k reconfigure
    exit $?
  ;;
  restart)
   $0 stop
   $0 start
  ;;
  status)
   status $SQUID
   $SQUID -k check
   exit $?
  ;;
  probe)
    exit 0;
  ;;
  *)
     echo "Usage: $0 {start|stop|status|reload|restart}"
     exit 1
esac
exit $RETVAL

Сейчас, сделайте этот скрипт исполняемым и измените права доступа:

[root@deep /]# chmod 700 /etc/rc.d/init.d/squid

Создайте символическую rc.d ссылку для Squid следующей командой:

[root@deep /]# chkconfig --add squid

По умолчанию скрипт squid не будет автоматически запускать прокси сервер на Red Hat Linux, когда перезагружаете сервер. Вы можете изменить это следующей командой:

[root@deep /]# chkconfig --level 345 squid on

Запустите ваш новый прокси сервер Squid вручную:

[root@deep /]# /etc/rc.d/init.d/squid start
Starting squid: init_cache_dir ufs... squid

Конфигурация файла "/etc/logrotate.d/squid"

Настроим ваш файл "/etc/logrotate.d/squid" для автоматической ротации файлов регистраций каждую неделю.

Создайте файл squid (touch /etc/logrotate.d/squid) и добавьте в него:

/var/log/squid/access.log {
    weekly
    rotate 5
    copytruncate
    compress
    notifempty
    missingok
}
/var/log/squid/cache.log {
    weekly
    rotate 5
    copytruncate
    compress
    notifempty
    missingok
}
/var/log/squid/store.log {
    weekly
    rotate 5
    copytruncate
    compress
    notifempty
    missingok
# This script asks squid to rotate its logs on its own.
# Restarting squid is a long process and it is not worth
# doing it just to rotate logs
    postrotate
    /usr/sbin/squid -k rotate
    endscript
}

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

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

Глава 18 Серверное программное обеспечение (Прокси сервис) (Часть 2)

В этой главе
Прокси сервер Squid
Использование библиотеки GNU malloc для улучшения производительности Squid
Конфигурации
Организация защиты Squid
Оптимизация Squid
Утилита cachemgr.cgi
Конфигурация Netscape для работы с прокси сервером Squid

Организация защиты Squid

Больший контроль над смонтированным кэш-каталогом Squid

Если вы создаете кэш-каталог для Squid в независимом разделе вашей Linux системы (например, /cache), подобно тому как мы делали во время инсталляции, тогда вы можете использовать опции noexec, nodev и nosuid для улучшения и укрепления безопасности кэша. Эти параметры могут быть установлены в файле "/etc/fstab" и дают указания системе не исполнять любые двоичные файлы (noexec), не интерпретировать символьные и блочные специальные устройства (nodev) и не позволять действовать битам set-user-identifier или set-group- identifier (nosuid) на монтированной файловой системе (/cache, например). Примените эту процедуру на раздел, где располагается кэш Squid, чтобы предотвратить возможность DEV, SUID/SGID и выполнения любых двоичных файлов.

Например, предположим на разделе "/dev/sda8" располагается каталог "/cache". Вы должны редактировать файл fstab (vi /etc/fstab) и изменить строку, связанную с "/dev/sda8":

/dev/sda8 /cache ext2 defaults 1 2
должна быть:
/dev/sda8 /cache ext2 noexec,nodev,nosuid 1 2

ЗАМЕЧАНИЕ. Вы должны перезагрузить систему, чтобы изменения вступили в силу.

Иммунизация важных конфигурационных файлов

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

[root@deep /]# chattr +i /etc/squid/squid.conf

Оптимизация Squid

Атрибуты atime и noatime

Атрибуты atime и noatime могут быть использованы, чтобы немного улучшить производительность кэша Squid. Смотрите главу 4 в этой книге, "Общая системная оптимизация", для большей информации по этой теме.

Физическая память

Наиболее важный ресурс для Squid это физическая память. Вам не нужен очень быстрый процессор. Ваша дисковая система будет основным узким местом, так что быстрые диски важны для кэша. Не используйте IDE дисков, есди это возможно.

Утилита cachemgr.cgi

Утилита cachemgr.cgi, доступная по умолчанию, когда вы скомпилировали и инсталлировали Squid на вашей системе, создана для запуска через веб интерфейс, и выводит различную статистику о конфигурации и работе Squid. Эта программа располагается в каталоге "/usr/lib/squid", и вы должны переместить ее в ваш каталог "cgi-bin" (например, /home/httpd/cgi-bin). Следующие шаги помогут вам настроить программу для использования.

Шаг 1

Переместите программу "cachemgr.cgi" в ваш каталог "cgi-bin":

[root@deep /]# mv /usr/lib/squid/cachemgr.cgi /home/httpd/cgi-bin

ЗАМЕЧАНИЕ. Я подразумеваю, что ваш каталог "cgi-bin" расположен в каталоге "/home/httpd/cgi-bin"; возможны и другие пути. Этот "cgi-bin" будет существовать если вы инсталлировали веб сервер Apache.

Шаг 2

После того, как вы переместили "cachemgr.cgi" в "cgi-bin", вы можете обратится к ней введя в вашем броузере следующий адрес (http://my-web-server/cgi- bin/cachemgr.cgi).

<my-web-server> это адрес вашего веб сервера Apache, а <cachemgr.cgi> это утилита, которую вы только, что переместили в каталог "cgi-bin" для получения информации и конфигурации прокси сервера Squid.


Если вы настраивали файл "squid.conf", то используйте парольную аутентификацию для доступа к "cachemgr.cgi", вам будет предложено ввести имя кэша (Cache Host), порт кэша (Cache Port), имя администратора (Manager name) и пароль (Password) перед тем, как допустят к программе "cachemgr.cgi". Смотрите конфигурационный файл "/etc/squid/squid.conf", приведенный выше, для большей информации.


После того как вы прошли аутентификацию на сервере, вы увидите в вашем броузере интерфейс Cache Manager menu, где вы сможете изучать и анализировать различные опции связанные с прокси сервером Squid.

Конфигурация Netscape для работы с прокси сервером Squid

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

Для Netscape Communicator, выполните следующие шаги:

  1. Откройте Netscape Communicator
  2. Перейдите в меню Edit
  3. Щелкните на Preferences .
  4. Двойной щелчок мыши на Advanced category слевой стороны
  5. Щелкните на подкатегории Proxies
  6. Выберите с правой стороны радио кнопку Manual proxy configuration
  7. Щелкните на кнопке View
  8. Заполните поля с информацией о вашем прокси сервере
    Например:

Инсталлированные файлы

> /etc/squid
> /etc/squid/mib.txt
> /etc/squid/squid.conf.default
> /etc/squid/squid.conf
> /etc/squid/mime.conf.default
> /etc/squid/mime.conf
> /etc/squid/errors
> /etc/squid/errors/ERR_ACCESS_DENIED
> /etc/squid/errors/ERR_CACHE_ACCESS_DENIED
> /etc/squid/errors/ERR_CACHE_MGR_ACCESS_DENIED
> /etc/squid/errors/ERR_CANNOT_FORWARD
> /etc/squid/errors/ERR_CONNECT_FAIL
> /etc/squid/errors/ERR_DNS_FAIL
> /etc/squid/errors/ERR_FORWARDING_DENIED
> /etc/squid/errors/ERR_FTP_DISABLED
> /etc/squid/errors/ERR_FTP_FAILURE
> /etc/squid/errors/ERR_FTP_FORBIDDEN
> /etc/squid/errors/ERR_FTP_NOT_FOUND
> /etc/squid/errors/ERR_FTP_PUT_CREATED
> /etc/squid/errors/ERR_FTP_PUT_ERROR
> /etc/squid/errors/ERR_FTP_PUT_MODIFIED
> /etc/squid/errors/ERR_FTP_UNAVAILABLE
> /etc/squid/errors/ERR_INVALID_REQ
> /etc/squid/errors/ERR_INVALID_URL
> /etc/squid/errors/ERR_LIFETIME_EXP
> /etc/squid/errors/ERR_NO_RELAY
> /etc/squid/errors/ERR_ONLY_IF_CACHED_MISS
> /etc/squid/errors/ERR_READ_ERROR
> /etc/squid/errors/ERR_READ_TIMEOUT
> /etc/rc.d/rc4.d/S90squid
> /etc/rc.d/rc5.d/S90squid
> /etc/rc.d/rc6.d/K25squid
> /etc/logrotate.d/squid
> /usr/lib/squid
> /usr/lib/squid/dnsserver
> /usr/lib/squid/unlinkd
> /usr/lib/squid/cachemgr.cgi
> /usr/lib/squid/icons
> /usr/lib/squid/icons/anthony-binhex.gif
> /usr/lib/squid/icons/anthony-bomb.gif
> /usr/lib/squid/icons/anthony-box.gif
> /usr/lib/squid/icons/anthony-box2.gif
> /usr/lib/squid/icons/anthony-c.gif
> /usr/lib/squid/icons/anthony-compressed.gif
> /usr/lib/squid/icons/anthony-dir.gif
> /usr/lib/squid/icons/anthony-dirup.gif
> /usr/lib/squid/icons/anthony-dvi.gif
> /usr/lib/squid/icons/anthony-f.gif
> /usr/lib/squid/icons/anthony-image.gif
> /usr/lib/squid/icons/anthony-image2.gif
> /usr/lib/squid/icons/anthony-layout.gif
> /usr/lib/squid/icons/anthony-link.gif
> /usr/lib/squid/icons/anthony-movie.gif
> /usr/lib/squid/icons/anthony-pdf.gif
> /usr/lib/squid/icons/anthony-portal.gif
> /usr/lib/squid/icons/anthony-ps.gif
> /usr/lib/squid/icons/anthony-quill.gif
> /usr/lib/squid/icons/anthony-script.gif
> /etc/squid/errors/ERR_SHUTTING_DOWN
> /etc/squid/errors/ERR_SOCKET_FAILURE
> /etc/squid/errors/ERR_TOO_BIG
> /etc/squid/errors/ERR_UNSUP_REQ
> /etc/squid/errors/ERR_URN_RESOLVE
> /etc/squid/errors/ERR_WRITE_ERROR
> /etc/squid/errors/ERR_ZERO_SIZE_OBJECT
> /etc/rc.d/init.d/squid
> /etc/rc.d/rc0.d/K25squid
> /etc/rc.d/rc1.d/K25squid
> /etc/rc.d/rc2.d/K25squid
> /etc/rc.d/rc3.d/S90squid
> /usr/lib/squid/icons/anthony-sound.gif
> /usr/lib/squid/icons/anthony-tar.gif
> /usr/lib/squid/icons/anthony-tex.gif
> /usr/lib/squid/icons/anthony-text.gif
> /usr/lib/squid/icons/anthony-unknown.gif
> /usr/lib/squid/icons/anthony-xbm.gif
> /usr/lib/squid/icons/anthony-xpm.gif
> /usr/sbin/RunCache
> /usr/sbin/RunAccel
> /usr/sbin/squid
> /usr/sbin/client
> /var/log/squid

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

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

Глава 19 Серверное программное обеспечение (Веб сервис) (Часть 1)

В этой главе
Linux MM - библиотека совместно используемой памяти
Веб-сервер Apache
Конфигурации
PHP4 - язык скриптов со стороны сервера
Perl библиотека - CGI.pm
Организация защиты Apache
Запуск Apache с использованием chroot.
Оптимизация Apache

Linux MM - библиотека совместно используемой памяти

Краткий обзор.

Если вы планируете инсталлировать и использовать модули для веб сервера Apache, разработанные третьими лицами, такими как mod_perl или mod_php, то я рекомендую установить эту небольшую программу на вашем сервере. Она даст увеличение производительности этих модулей. Другой пример, если вы захотите инсталлировать Apache с поддержкой SSL для организации электронной коммерции в Интернет, то MM позволит SSL протоколу использовать высокопроизводительный кэш сессий, базирующийся на RAM вместо базирующегося на диске.

Как объяснено на веб сервере MM библиотеки совместно используемой памяти: MM библиотека - это 2-уровневая абстрактная библиотека, которая упрощает использование общей памяти между процессами, образованными в результате операции fork, на платформе Unix. На первом уровне она скрывает все платформо-зависимые детали реализации (распределение и блокирование) операций со совместно используемыми сегментами памяти, а на втором уровн предоставляет высокоуровневый API в стиле malloc(3) для удобного и хорошо известного пути работы со структурами данных в этих общих сегментах памяти.

Библиотека реализована под условиями open-source (BSD-style) лицензии. Изначально она была написана, как планировалось, для использования внутри следующей версии веб сервера Apache, как базовая библиотека для предоставления совместно используемых пулов памяти модулям Apache (потому что сейчас, модули Apache могут использовать только память с неупорядоченным хранением данных (heap-allocated memory), которые не используется совместно между pre-forked процессами). Требования этой библиотеки в основном происходит от комплексных модулей подобных mod_ssl, mod_perl и mod_php, которые извлекли бы много выгоды из совместно используемых пулов памяти.

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
Mm версии 1.1.2

Пакеты.
Домашняя страница MM: http://www.engelschall.com/sw/mm/
Вы должны скачать: mm-1.1.2.tar.gz

Тарболы.
Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции MM и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,
До инсталляции:
find /* > MM1

После инсталляции:
find /* > MM2

Для получения списка установленных файлов:
diff MM1 MM2 > MM-Installed

Раскройте тарбол:

[root@deep /]# cp mm-version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf mm-version.tar.gz

Компиляция
Шаг 1

Переместитесь в новый каталог mm и введите следующие команды на терминале

./configure \
--disable-shared \
--prefix=/usr

Опции говорят MM:
- Отключить совместно используемые библиотеки.

Шаг 2

Сейчас, мы должны скомпилировать и инсталлировать библиотеку совместно используемой памяти:

[root@deep mm-1.1.2]# make
[root@deep mm-1.1.2]# make test
[root@deep mm-1.1.2]# make install

ЗАМЕЧАНИЕ. Команда "make test" создаст несколько важных тестов, для проверки работоспособности программы.

Очистка после работы

[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf mm-version/ mm-version.tar.gz

Команды "rm" будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции mm. Также будет удален сжатый архив mm.

Дополнительная документация

Для получения большей информации, вы можете прочитать несколько страниц руководства:

mm-config (1) - конфигурационный файл библиотеки MM

Инсталлированные файлы
/usr/bin/mm-config
/usr/include/mm.h
/usr/lib/libmm.la
/usr/lib/libmm.a
/usr/man/man1/mm-config.1
/usr/man/man3/mm.3

Веб-сервер Apache

Общий обзор.

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

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

Существует много возможностей, вариантов и опций для инсталляции Apache. Так, в дальнейшем, мы приведем вам пошаговый пример, где мы покажем как создать Apache с модулями и программами третьих лиц: PHP4, возможностью соединения с LDAP и т.д. Конечно, создание этих программ опционально, и вы можете свободно компилировать то, что захотите (например, вы можете решить скомпилировать Apache с поддержкой PHP4, но без SSL или PostgreSQL). Для упрощения мы подразумеваем некоторые предварительные требования для каждого примера. Если они не соответствуют вашей ситуации, просто скорректируйте шаги.

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

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
Apache версии 1.3.12
Mod_SSL версии 2.6.4-1.3.12
Mod_Perl версии 1.24
Mod_PHP версии 4.0.0

Пакеты.
Домашняя страница Apache: http://www.apache.org/
FTP сервер Apache: 63.211.145.10
Вы должны скачать: apache_1.3.12.tar.gz
Домашняя страница Mod_SSL: http://www.modssl.org/
FTP сервер Mod_SSL: 129.132.7.171
Вы должны скачать: mod_ssl-2.6.4-1.3.12.tar.gz
Домашняя страница Mod_Perl: http://perl.apache.org/
FTP сервер Mod_Perl: 63.211.145.10
Вы должны скачать: mod_perl-1.24.tar.gz
Домашняя страница Mod_PHP: http://www.php.net/
Вы должны скачать: php-4.0.0.tar.gz

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

ЗАМЕЧАНИЕ. Для большей информации о требуемых программах смотрите соответствующие главы в этой книге.

Тарболы.
Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции Apache и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,
До инсталляции:
find /* > Apache1

После инсталляции:
find /* > Apache2

Для получения списка установленных файлов:
diff Apache1 Apache2 > Apache-Installed

Раскройте тарбол:

[root@deep /]# cp apache_version.tar.gz /var/tmp
[root@deep /]# cp mod_ssl-version-version.tar.gz /var/tmp
[root@deep /]# cp mod_perl-version.tar.gz /var/tmp
[root@deep /]# cp php-version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp/
[root@deep tmp]# tar xzpf apache_version.tar.gz
[root@deep tmp]# tar xzpf mod_ssl-version-version.tar.gz
[root@deep tmp]# tar xzpf mod_perl-version.tar.gz
[root@deep tmp]# tar xzpf php-version.tar.gz

Компиляция и оптимизация

Шаг 1

Веб сервер Apache, подобно многим приложениям, которые мы инсталлировали, не должен запускаться из-под суперпользователя root. Из этих соображений мы должны создать специального пользователя, который имеет минимальный доступ в систему и предназначен только для запуска демона веб сервера.

[root@deep /]# useradd -c "Apache Server" -u 80 -s /bin/false -r -d /home/httpd www 2>/dev/null || :

Шаг 2
Внедрение модуля mod-ssl в дерево исходных кодов Apache

Если вы хотите использовать и включить поддержку SSL шифрования данных в ваш веб сервер Apache, то переместитесь в новый каталог с исходными кодами mod_ssl (cd mod_ssl-version-version/) и введите следующие команды на вашем терминале:

CC="egcs" \
CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions" \
./configure \
--with-apache=../apache_1.3.12 \
--with-crt=/etc/ssl/certs/server.crt \
--with-key=/etc/ssl/private/server.key

Опция "--with-apache" определяет месторасположения каталога с исходными кодами Apache (мы допустили, что в нашем примере используем Apache версии 1.3.12), опция "--with-crt" определяет месторасположения вашего существующего публичного ключа для SSL шифрования, и опция "--with-key" определяет месторасположение вашего существующего приватного ключа для SSL шифрования.

ЗАМЕЧАНИЕ. Программное обеспечение OpenSSL должен быть уже проинсталлировано на вашем сервере, публичный и приватные ключи тоже должны уже существовать или быть созданы, или вы получите сообщение об ошибке во время конфигурирования модуля mod_ssl. Смотрите главу 16 этой книги "Серверное программное обеспечение (Сетевой сервис шифрования)", для большей информации.

Шаг 3
Улучшение параметра MaxClients в Apache

По умолчанию в конфигурационном файле Apache (httpd.conf) максимальное число устанавливаемое для параметра MaxClients Parameter равно 256. Для загруженных сайтов и для улучшения производительности рекомендуется увеличить этот параметр. Вы можете сделать это редактируя файл "src/include/httpd.h" в дереве исходных кодов Apache и изменить это значение по умолчанию.

Перейдите в каталог с исходными кодами Apache (cd ../apache_1.3.12/) и редактируйте файл httpd.h (vi +333 src/include/httpd.h), изменив:

#define HARD_SERVER_LIMIT 256
На:
#define HARD_SERVER_LIMIT 1024

ЗАМЕЧАНИЕ. Если вы настраиваете Apache без поддержки mod_ssl, то нужно будет редактировать строку 316, а не 333.

Шаг 4
Преконфигурирование Apache для дальнейшего конфигурирования PHP4

Если вы хотите использовать и включить поддержку PHP4 в ваш веб сервер Apache, то перейдите в каталог с исходными кодами Apache (cd apache_1.3.12/) и выполните следующие команды:

CC="egcs" \
OPTIM="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions" \
CFLAGS="-DDYNAMIC_MODULE_LIMIT=0" \
./configure \
--prefix=/home/httpd \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--libexecdir=/usr/lib/apache \
--includedir=/usr/include/apache \
--sysconfdir=/etc/httpd/conf \
--localstatedir=/var \
--runtimedir=/var/run \
--logfiledir=/var/log/httpd \
--datadir=/home/httpd \
--proxycachedir=/var/cache/httpd \
--mandir=/usr/man

ЗАМЕЧАНИЕ. Этот шаг необходим только если вы хотите включить поддержку PHP4 в ваши исходные коды Apache. Опция "-DDYNAMIC_MODULE_LIMIT=0" будет отключать использование динамически загружаемых модулей и улучшит производительность.

Конфигурирование PHP4 и внедрение его в исходные коды Apache

Сейчас, перейдите в каталог с исходными кодами php4 (cd ../php-4.0) и введите следующие команды:

1) Редактируйте файл php_pgsql.h (vi +46 ext/pgsql/php_pgsql.h) и измените следующие строки:

#include <libpq-fe.h>
#include <libpq/libpq-fs.h>
На:
#include </usr/include/pgsql/libpq-fe.h>
#include </usr/include/pgsql/libpq/libpq-fs.h>

Эти модификации в файле "php_pgsql.h" необходимы, чтобы указать месторасположения заголовочных файлов "libpq-fe.h" и "libpq-fs.h" для базы данных PostgreSQL во время конфигурирования PHP4. В Red Hat Linux библиотеки PostgreSQL находятся в (/usr/include/pgsql).

2) Сейчас, мы должны сконфигурировать и инсталлировать PHP4 на нашем Linux сервере:

CC="egcs" \
CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions -I/usr/include/openssl" \
./configure \
--prefix=/usr \
--with-exec-dir=/usr/bin \
--with-apache=../apache_1.3.12 \
--with-config-file-path=/etc/httpd \
--disable-debug \
--enable-safe-mode \
--with-imap \
(если вы хотите поддержку IMAP & POP).
--with-ldap \ (если вы хотите поддержку сервиса каталогов LDAP).
--with-pgsql \ (если вы хотите поддержку баз данных PostgreSQL).
--with-mm \
--enable-inline-optimization \
--with-gnu-ld \
--enable-memory-limit

Эти опции говорят PHP4:

[root@deep php-4.0]# make
[root@deep php-4.0]# make install

Шаг 5
Внедрение mod_perl в исходные коды

Если вы хотите использовать и включить поддержку языка программирования Perl в ваш веб-сервер Apache, то перейдите к каталог с исходными кодами mod_perl (cd ../mod_perl-1.24/) и введите следующие команды на вашем терминале:

perl Makefile.PL \
EVERYTHING=1 \
APACHE_SRC=../apache_1.3.12/src \
USE_APACI=1 \
PREP_HTTPD=1 \
DO_HTTPD=1
[root@deep mod_perl-1.24]# make
[root@deep mod_perl-1.24]# make install

Шаг 6

Создание/Инсталляция Apache с/без mod_ssl +- PHP4 и/или mod_perl Сейчас, когда вы добавили в исходные коды Apache все модули, которые хотели, наступило время скомпилировать и проинсталлировать его. Переместитесь в каталог с исходными кодами Apache (cd ../apache_1.3.12/) и введите следующие команды на вашем терминале:

SSL_BASE=SYSTEM \ (требуется если вы хотите включить поддержку mod_ssl в Apache).
EAPI_MM=SYSTEM \ (требуется если вы хотите включить поддержку mm библиотеку разделяемой памяти в Apache).
CC="egcs" \
OPTIM="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions" \
CFLAGS="-DDYNAMIC_MODULE_LIMIT=0" \
./configure \
--prefix=/home/httpd \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--libexecdir=/usr/lib/apache \
--includedir=/usr/include/apache \
--sysconfdir=/etc/httpd/conf \
--localstatedir=/var \
--runtimedir=/var/run \
--logfiledir=/var/log/httpd \
--datadir=/home/httpd \
--proxycachedir=/var/cache/httpd \
--mandir=/usr/man \
--add-module=src/modules/experimental/mod_mmap_static.c \
(требуется если вы хотите использовать mod_mmap, смотрите секцию "Оптимизация Apache" в этой главе для большей информации).
--add-module=src/modules/standard/mod_auth_db.c \ (требуется если вы хотите использовать mod_auth_db, смотрите секцию "Безопасность Apache" в этой главе для большей информации).
--enable-module=ssl \ (требуется если вы хотите включить поддержку mod_ssl в ваш Apache).
--enable-rule=SSL_SDBM \ (требуется если вы хотите включить поддержку mod_ssl в ваш Apache).
--disable-rule=SSL_COMPAT \ (требуется если вы хотите включить поддержку mod_ssl в ваш Apache).
--activate-module=src/modules/php4/libphp4.a \ (требуется если вы хотите включить поддержку PHP4 в ваш Apache).
--enable-module=php4 \ (требуется если вы хотите включить поддержку PHP4 в ваш Apache).
--activate-module=src/modules/perl/libperl.a \ (требуется если вы хотите включить поддержку mod_perl в ваш Apache).
--enable-module=perl \ (требуется если вы хотите включить поддержку mod_perl в ваш Apache).
--disable-module=status \
--disable-module=userdir \
--disable-module=negotiation \
--disable-module=autoindex \
--disable-module=asis \
--disable-module=imap \
--disable-module=env \
--disable-module=actions

Эти опции говорят Apache выполнить следующие установки:

ЗАМЕЧАНИЕ. Важно заметить, что удаление всех необязательных модулей во время конфигурирования улучшит производительность вашего веб сервера Apache. В нашей конфигурации приведенной выше, мы удалили большинство неиспользуемых модулей для уменьшения времени загрузки и ограничения риска безопасности вашего веб сервера. Смотрите документацию Apache, чтобы получить информацию о каждом удаленном модуле.

Шаг 7

Сейчас, мы должны инсталлировать Apache на вашем Linux сервере:

[root@deep apache_1.3.12]# make
[root@deep apache_1.3.12]# make install
[root@deep apache_1.3.12]# rm -f /usr/sbin/apachectl
[root@deep apache_1.3.12]# rm -f /usr/man/man8/apachectl.8
[root@deep apache_1.3.12]# rm -rf /home/httpd/icons/
[root@deep apache_1.3.12]# rm -rf /home/httpd/htdocs/
[root@deep apache_1.3.12]# cd /var/tmp/php-4.0
[root@deep php-4.0.0]# install -m 644 php.ini.dist /usr/lib/php.ini
[root@deep php-4.0.0]# rm -rf /etc/httpd/conf/ssl.crl/
[root@deep php-4.0.0]# rm -rf /etc/httpd/conf/ssl.crt/
[root@deep php-4.0.0]# rm -rf /etc/httpd/conf/ssl.csr/
[root@deep php-4.0.0]# rm -rf /etc/httpd/conf/ssl.key/
[root@deep php-4.0.0]# rm -rf /etc/httpd/conf/ssl.prm/
[root@deep php-4.0.0]# rm -f /etc/httpd/conf/srm.conf srm.conf.default access.conf access.conf.default

Команда "make" будет компилировать все файлы с исходными кодами в исполняемые двоичные, команда "make install" будет инсталлировать исполняемые и сопутствующие им файлы в тербуемые места. Команда "rm -f" удалит небольшой скрипт "apachectl" отвечающий за запуск и остановку демона Apache, так как мы используем для этого срипт "httpd" находящийся в "/etc/rc.d/init.d/". Мы также удаляем каталог "/home/httpd/icons", который используется веб сервером Apache при автоматической индексации файлов. Эта возможность несет в себе риск безопасности и из-за этого мы ее отключили. Каталог "/home/httpd/htdocs" содержит все файлы с документацией на Apache, поэтому после прочтения, мы спокойно можем его удалить. Команда "install - m" проинсталлирует файл "php.ini.dist" в каталог "/etc/httpd/" и переименует его в "php.ini"; Этот файл контролирует многие аспекты работы PHP. Каталоги "ssl.crl", "ssl.crt", "ssl.csr", "ssl.key" и "ssl.prm" в "/etc/httpd/conf" связаны с SSL, и в них хранятся публичные и приватные ключи. Так как для хранения ключей мы используем другой путь, "/etc/ssl/", мы можем их спокойно удалить. В заключении, мы удаляем неиспользуемые файлы "srm.conf", "srm.conf.default", "access.conf" и "access.conf.default", вместо которых сейчас используется одни файл "httpd.conf".

Очистка после работы.
[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf apache-version/ apache-version.tar.gz mod_ssl-version-version/ mod_ssl-version-version.tar.gz php-version/ php-version.tar.gz mod_perl-version/ mod_perl-version.tar.gz

Команды "rm" будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции Apache, mod_ssl, mod_perl и php. Также будут удалены сжатые архивы Apache, mod_ssl, mod_perl и php из каталога "/var/tmp".

Конфигурации.

Конфигурационные файлы для разных сервисов очень зависят от ваших нужд и сетевой архитектуры. Кто-то хочет установить Apache только чтобы показывать веб страницы; другой хочет использовать его для работы с базой данных и e- коммерции с поддержкой SSL и т.д. В этой книге, мы предоставляем вам файл "httpd.conf", с установками для PHP, Perl, SSL, LDAP и парольной аутентификации, чтобы показать вам различные возможности. Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файлы связанные с Apache из архива, измените их под свои требования и поместите в нужное место так, как это описано ниже. Файл с конфигурациями вы можете скачать с адреса: http://www.openna.com/books/floppy.tgz

Для запуска веб сервера Apache следующие файлы должны быть созданы или скопированы на ваш сервер.

Копируйте httpd.conf в каталог "/etc/httpd/conf/".
Копируйте httpd в каталог "/etc/rc.d/init.d/".
Копируйте apache в каталог "/etc/logrotate.d/".

Вы можете взять эти файлы из нашего архива floppy.tgz.

Конфигурация файла "/etc/httpd/conf/httpd.conf"

Файл "httpd.conf" - это основной конфигурационный файл для веб сервера Apache. Существует большое количество различных опций про которые вы должны прочитать в документации к Apache. Следующая конфигурация представляет из себя пример минимальной рабочей конфигурации для Apache, с поддержкой SSL. Также важно заметить, что мы комментируем только параметры связанные с безопасностью и оптимизацией, а все остальные оставляем для вашего изучения.
Редактируйте файл httpd.conf (vi /etc/httpd/conf/httpd.conf) и добавьте/измените:

### Секция 1: Глобальное окружение
#
ServerType standalone
ServerRoot "/etc/httpd"
PidFile /var/run/httpd.pid
ResourceConfig /dev/null
AccessConfig /dev/null
Timeout 300
KeepAlive On
MaxKeepAliveRequests 0
KeepAliveTimeout 15
MinSpareServers 16
MaxSpareServers 64
StartServers 16
MaxClients 512
MaxRequestsPerChild 100000

### Секция 2: 'Основная' конфигурация сервера
#
Port 80

<IfDefine SSL>
Listen 80
Listen 443
</IfDefine>

User www
Group www
ServerAdmin admin@openna.com
ServerName www.openna.com
DocumentRoot "/home/httpd/ona"

<Directory />
  Options None
  AllowOverride None
  Order deny,allow
  Deny from all
</Directory>

<Directory "/home/httpd/ona">
  Options None
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

<Files .pl>
  Options None
  AllowOverride None
  Order deny,allow
  Deny from all
</Files>

<IfModule mod_dir.c>
DirectoryIndex index.htm index.html index.php index.php3 default.html index.cgi
</IfModule>

#<IfModule mod_include.c>
#Include conf/mmap.conf
#</IfModule>

UseCanonicalName On

<IfModule mod_mime.c>
TypesConfig /etc/httpd/conf/mime.types
</IfModule>

DefaultType text/plain
HostnameLookups Off
ErrorLog /var/log/httpd/error_log
LogLevel warn
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" 
combined
SetEnvIf Request_URI \.gif$ gif-image
CustomLog /var/log/httpd/access_log combined env=!gif-image
ServerSignature Off

<IfModule mod_alias.c>
ScriptAlias /cgi-bin/ "/home/httpd/cgi-bin/"
<Directory "/home/httpd/cgi-bin">
  AllowOverride None
  Options None
  Order allow,deny
  Allow from all
</Directory>
</IfModule>

<IfModule mod_mime.c>
AddEncoding x-compress Z
AddEncoding x-gzip gz tgz
AddType application/x-tar .tgz
</IfModule>

ErrorDocument 500 "The server made a boo boo.
ErrorDocument 404 http://192.168.1.1/error.htm
ErrorDocument 403 "Access Forbidden -- Go away.

<IfModule mod_setenvif.c>
BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0
</IfModule>

### Секция 3: Виртуальные хосты
#
<IfDefine SSL>
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl
</IfDefine>

<IfModule mod_ssl.c>
SSLPassPhraseDialog builtin
SSLSessionCache dbm:/var/run/ssl_scache
SSLSessionCacheTimeout 300

SSLMutex file:/var/run/ssl_mutex

SSLRandomSeed startup builtin
SSLRandomSeed connect builtin

SSLLog /var/log/httpd/ssl_engine_log
SSLLogLevel warn
</IfModule>

<IfDefine SSL>
<VirtualHost _default_:443>
DocumentRoot "/home/httpd/ona"
ServerName www.openna.com
ServerAdmin admin@openna.com
ErrorLog /var/log/httpd/error_log
SSLEngine on
SSLCipherSuite 
ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
SSLCACertificatePath /etc/ssl/certs
SSLCACertificateFile /etc/ssl/certs/ca.crt
SSLCARevocationPath /etc/ssl/crl
SSLVerifyClient none
SSLVerifyDepth 10

SSLOptions +ExportCertData +StrictRequire
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
SetEnvIf Request_URI \.gif$ gif-image
CustomLog /var/log/httpd/ssl_request_log \
       "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" env=!gif-image
</VirtualHost>
</IfDefine>

Этот файл httpd.conf говорит следующее:

ServerType standalone
Опция "ServerType" определяет как Apache должен быть запущен. Вы можете запустить его из суперсервера inetd или как автономный демон. Для лучшей производительности и скорости рекомендуется запускать Apache как автономный демон.

ServerRoot "/etc/httpd"
Опция "ServerRoot" определяет каталог, являющийся корневым для сервера. По этому пути определяется месторасположения конфигурационных файлов.

PidFile /var/run/httpd.pid
Опция "PidFile" определяет месторасположение файла в котором будет хранится информация об id демона, когда он запущен. Эта опция требуется только если вы запускаете Apache в автономном режиме.

ResourceConfig /dev/null
Опция "ResourceConfig" определяет расположение старого файла "srm.conf", который Apache читал после прочтения файла "httpd.conf". Когда вы устанавливаете эту опцию в "/dev/null", Apache позволит вам включить содержимое этого файла в файл "httpd.conf" и вы получите только один файл для конфигурирования.

AccessConfig /dev/null
Опция "AccessConfig" определяет расположение старого файла "access.conf", который Apache читал после прочтения файла "srm.conf". Когда вы устанавливаете эту опцию в "/dev/null", Apache позволит вам включить содержимое этого файла в файл "httpd.conf" и вы получите только один файл для конфигурирования.

Timeout 300
Опция "Timeout" определяет время, которое Apache будет ждать до получения запросов GET, POST, PUT и ACK на передачу. Вы можете спокойно оставить значение этой опции как это принято по умолчанию.

KeepAlive On
Опция "KeepAlive", если установлена в "On", определяет возможность установления постоянных соединений на этом веб сервере. Для лучшей производительности, рекомендуется установить этот параметр в "On," и разрешить обработку более одного запроса на одно соединение.

MaxKeepAliveRequests 0
Опция "MaxKeepAliveRequests" определяет число запросов, которое может обработать сервер на одно соединение, если опция "KeepAlive" установлена в "On". Когда значение равно 0, тогда может обрабатываться неограниченное число запросов. Для лучшей производительности, рекомендуется устанавливать этот параметр в 0.

KeepAliveTimeout 15
Опция "KeepAliveTimeout" определяет как долго, в секундах, Apache будет ждать поступления новых запросов до закрытия соединения. "15" секунд - хорошее среднее значение для производительности сервера.

MinSpareServers 16
Опция "MinSpareServers" определяет минимальное число неработающих дочерних процессов сервера, которые не обрабатывают запросы. Это важный настроечный параметр, влияющий на производительность веб сервера Apache. Значение "16" рекомендуется различными тестами на производительность в Интернет.

MaxSpareServers 64
Опция "MaxSpareServers" определяет максимальное число неработающих дочерних процессов сервера, которые не обрабатывают запросы. Это тоже важный настроечный параметр, влияющий на производительность веб сервера Apache. Значение "64" рекомендуется различными тестами на производительность в Интернет.

StartServers 16
Опция "StartServers" определяет число дочерних серверных процессов, которые будут созданы при запуске Apache. Это тоже важный настроечный параметр, влияющий на производительность веб сервера Apache. Значение "16" рекомендуется различными тестами на производительность в Интернет.

MaxClients 512
Опция "MaxClients" определяет число одновременных запросов, которые может обработать Apache. Это тоже важный настроечный параметр, влияющий на производительность веб сервера Apache. Значение "512" рекомендуется различными тестами на производительность в Интернет.

MaxRequestsPerChild 100000
Опция "MaxRequestsPerChild" определяет число запросов, которое индивидуальный дочерний серверный процесс может обработать, после чего автоматически умрет. Это тоже важный настроечный параметр, влияющий на производительность веб сервера Apache.

User www
Опция "User" определяет UID, под которым Apache будет запускаться. Очень важно создать нового пользователя, который имеет минимальные права доступа к системе и единственным его предназначением будет запуск демона веб сервера.

Group www
Опция "Group" определяет GID под которым Apache будет запускаться. Важно создать новую группу, которая имеет минимальные права доступа к системе и единственным ее предназначением будет запуск демона веб сервера.

DirectoryIndex index.htm index.html index.php index.php3 default.html index.cgi
Опция "DirectoryIndex" определяет файлы используемые Apache как заранее созданный HTML индекс каталога, если Apache не может найти индексные страницы по умолчанию, он будет рассматривать следующий элемент этого параметра. Для улучшения производительности вашего веб сервера, рекомендуется индексные страницы используемые на вашем сервере по умолчанию поместить в этом списке на первом месте.

Include conf/mmap.conf
Опция "Include" определяет расположение другого файла, который вы можете включить в ваш серверный конфигурационный файл (httpd.conf). В нашем случае, мы включаем файл "mmap.conf" находящийся в каталоге "/etc/httpd/conf". Этот файл ("mmap.conf") отображает файлы в памяти для более быстрого их предоставления. Смотрите секцию "Оптимизация Apache" для большей информации.

HostnameLookups Off
Опция "HostnameLookups", если установлена в "Off", определяет, что DNS lookups отключен. Рекомендуется устанавливать эту опцию в "Off" для сокращения времени сетевого трафика и улучшения производительности веб сервера Apache.

Конфигурация файла "/etc/logrotate.d/apache"

Сконфигурируем файл "/etc/logrotate.d/apache" для автоматической ротации файлов регистрации Apache каждую неделю.
Создайте файл apache (touch /etc/logrotate.d/apache) и добавьте в него:

/var/log/httpd/access_log {
  missingok
  postrotate
  /usr/bin/killall -HUP httpd
  endscript
}

/var/log/httpd/error_log {
  missingok
  postrotate 
  /usr/bin/killall -HUP httpd
  endscript
}

/var/log/httpd/ssl_request_log {
  missingok
  postrotate
  /usr/bin/killall -HUP httpd
  endscript
}

/var/log/httpd/ssl_engine_log {
  missingok
  postrotate
  /usr/bin/killall -HUP httpd
  endscript
}

ЗАМЕЧАНИЕ. Строки для автоматической ротации файлов регистрации SSL "ssl_request_log" и "ssl_engine_log" включены в этот файл. Если вы решили запускать Apache без поддержки SSL, вы должны удалить их.

Конфигурация скрипта "/etc/rc.d/init.d/httpd".

Настроим ваш скрипт "/etc/rc.d/init.d/httpd", который предназначен для запуска и остановки веб сервера Apache.
Создайте файл httpd (touch /etc/rc.d/init.d/httpd) и добавьте в него:

#!/bin/sh
#
# Скрипт для запуска веб сервера Apache
#
# chkconfig: 345 85 15
# описание: Apache - это World Wide Web сервер. Он используется для
# предоставления HTML файлов и CGI.
# имя процесса: httpd
# pid файл: /var/run/httpd.pid
# конфигурационный файл: /etc/httpd/conf/httpd.conf
# Библиотека исходных функций.
. /etc/rc.d/init.d/functions
# Смотрите как мы вызываем.
case "$1" in
 start)
   echo -n "Starting httpd: "
   daemon httpd -DSSL
   echo
   touch /var/lock/subsys/httpd
   ;;
 stop)
   echo -n "Shutting down http: "
   killproc httpd
   echo
   rm -f /var/lock/subsys/httpd
   rm -f /var/run/httpd.pid
   ;;
 status)
   status httpd
   ;;
 restart)
   $0 stop
   $0 start
   ;;
 reload)
   echo -n "Reloading httpd: "
   killproc httpd -HUP
   echo
   ;;
 *)
   echo "Usage: $0 {start|stop|restart|reload|status}"
   exit 1
esac

exit 0

Сейчас, сделайте этот скрипт исполняемым и измените права доступа:
[root@deep /]# chmod 700 /etc/rc.d/init.d/httpd

Создайте символические rc.d ссылки для Apache:
[root@deep /]# chkconfig --add httpd

Запустите ваш новый сервер Apache вручную:

[root@deep /]# /etc/rc.d/init.d/httpd start
Starting httpd:            [ OK ]

ЗАМЕЧАНИЕ. Опция "-DSSL" будет запускать Apache в режиме SSL. Если вы хотите запустить Apache в нормальном режиме, то удалите "-DSSL" ближайшую к строке, которая читается "daemon httpd".


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

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

Глава 19 Серверное программное обеспечение (Веб сервис) (Часть 2)

В этой главе
Linux MM - библиотека совместно используемой памяти
Веб-сервер Apache
Конфигурации
PHP4 - язык скриптов со стороны сервера
Perl библиотека - CGI.pm
Организация защиты Apache
Запуск Apache с использованием chroot.
Оптимизация Apache

PHP4

Если вы планируете использовать PHP4 с вашим веб сервером Apache не забудьте включить в ваш файл "/etc/httpd/conf/httpd.conf" следующие строки, включающие эту возможность:

Шаг 1

Редактируйте файл httpd.conf file (vi /etc/httpd/conf/httpd.conf) и добавьте следующие строки между тэгами секции <IfModule mod_mime.c> и </IfModule>:

AddType application/x-httpd-php .php
AddType application/x-httpd-php .php3
AddType application/x-httpd-php-source .phps

Шаг 2

Вы должны перезапустить веб сервер Apache, чтобы изменения вступили в силу:

[root@deep /]# /etc/rc.d/init.d/httpd restart
Shutting down http:           [ OK ]
Starting httpd:               [ OK ]

Шаг 3

После того, как вышеприведенные строки были включены в файл "httpd.conf", вы должны тестировать новую возможность PHP4. Мы создадим небольшой PHP файл с именем "php.php" в нашем DocumentRoot, и затем попробуем загрузить этот документ в наш броузер, чтобы убедиться, что PHP4 работает на сервере.

Создайте файл php.php в DocumentRoot (touch /home/httpd/ona/php.php) и внесите в него следующие строки:

  <body bgcolor="#FFFFFF">
    <?php phpinfo()?>
  </body>

ЗАМЕЧАНИЕ. Эти строки будут информировать программу PHP4 вывести различные части информации о конфигурации нашего Linux сервера.

Шаг 4

Сейчас, в броузере введите следующий адрес: http://my-web-server/php.php Где <my-web-server> это адрес вашего веб сервера Apache, а <php.php> - это имя PHP документа, который мы создали.


Если все выглядит примерно как на рисунке, то поздарвляем! Ваш модуль PHP работает.

Perl модуль Devel::Symdump

Если вы планируете использовать модуль mod_perl с вашим сервером Apache, вы можете захотеть установить небольшой perl модуль "Devel::Symdump". Этот модуль, разработанный третьими лицами, позволит вам проверять таблицу идентификаторов perl и иерархии классов в запускаемых программах. Чтобы создать и инсталлировать его выполните следующие шаги.

Пакеты.
Домашняя страница: http://www.perl.com/CPAN/modules/by-module/Devel/
Вы должны скачать: Devel-Symdump-2_00_tar.gz
Devel-Symdump версия 2.00

[root@deep /]# cp Devel-Symdump-version.tar.gz /var/tmp/
[root@deep /]# cd /var/tmp/
[root@deep tmp]# tar xzpf Devel-Symdump-version.tar.gz

Шаг 1

Перейдите в новый каталог Devel-Symdump и введите следующие команды для компиляции и инсталляции модуля на ваш Linux сервер:

[root@deep Devel-Symdump-2.00]# perl Makefile.PL
[root@deep Devel-Symdump-2.00]# make
[root@deep Devel-Symdump-2.00]# make test
[root@deep Devel-Symdump-2.00]# make install

Шаг 2

Как только модуль проинсталлирован на вашей системе, вы должны включить в ваш файл "/etc/httpd/conf/httpd.conf" следующие строки, чтобы просмотреть статус различных модулей Perl на вашем сервере:

Редактируйте файл httpd.conf (vi /etc/httpd/conf/httpd.conf) и добавьте следующие строки:

<Location /perl-status>
   SetHandler perl-script
   PerlHandler Apache::Status
   Order deny,allow
   Deny from all
   Allow from 192.168.1.0/24
</Location>

Шаг 3

Перезапустите веб сервер Apache, чтобы изменения вступили в силу:

[root@deep /]# /etc/rc.d/init.d/httpd restart
Shutting down http: [ OK ] Starting httpd: [ OK ]

Шаг 4

В заключении, мы должны тестировать новый модуль Devel-Symdump, чтобы убедиться, что мы можем смотреть статус разных модулей Perl. Для этого введите в окне броузера следующий адрес: http://my-web-server/perl-status/. Где <my-web-server> - это адрес веб сервера.


Очистка после работы
[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf Devel-Symdump.version/ Devel-Symdump-version.tar.gz

Инсталлированные файлы
> /usr/lib/perl5/man/man3/Devel::Symdump.3
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Devel
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Devel/Symdump
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Devel/Symdump/.packlist
> /usr/lib/perl5/site_perl/5.005/Devel
> /usr/lib/perl5/site_perl/5.005/Devel/Symdump
> /usr/lib/perl5/site_perl/5.005/Devel/Symdump/Export.pm
> /usr/lib/perl5/site_perl/5.005/Devel/Symdump.pm

Perl библиотека CGI.pm

CGI.pm - это Perl5 библиотека, написанная для использования в CGI скриптах. Старая версия этой программы существует по умолчанию на вашей системе, но она имеет ряд ошибок. Поэтому рекомендуется обновить вашу копию до версии 2.56 и новее. Для обновления этого модуля выполните следующие шаги.

Пакеты
Домашняя страница CGI.pm:
http://stein.cshl.org/WWW/software/CGI/cgi_docs.html
Вы должны скачать: CGI_pm_tar.gz
CGI.pm версия 2.56
[root@deep /]# cp CGI_pm_tar.gz /var/tmp/
[root@deep /]# cd /var/tmp/
[root@deep tmp]# tar xzpf CGI_pm_tar.gz

Шаг 1

Первое, в должны проверить версию CGI.pm инсталлированной на вашей системе. Для этого используйте следющую команду:

[root@deep]# perl -e 'use CGI; print $CGI::VERSION."\n";'
2.46

Шаг 2

Перейдите в каталог CGI.pm и введите следующие команды на вашем терминале для компиляции и инсталляции обновленной библиотеки на вашем Linux сервере:

[root@deep CGI.pm-2.56]# perl Makefile.PL
[root@deep CGI.pm-2.56]# make
[root@deep CGI.pm-2.56]# make test
[root@deep CGI.pm-2.56]# make install

Очистка после работы
[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf CGI.pm-version/ CGI_pm_tar.gz


Инсталлированные файлы.
> /usr/lib/perl5/5.00503/CGI/Pretty.pm
> /usr/lib/perl5/5.00503/i386-linux/auto/CGI
> /usr/lib/perl5/5.00503/i386-linux/auto/CGI/.packlist
> /usr/lib/perl5/man/man3/CGI::Pretty.3

Организация защиты Apache

Изменение прав доступа к некоторым важным файлам и каталогам для вашего веб сервера

Когда вы инсталлируете Apache на вашем сервере, некоторые файлы и каталоги имеют слишком много прав установленных по умолчанию. Двоичная программа "httpd" может быть установлена в режим только для чтения пользователю "root", и исполнения для владельца, группы и других пользователей. Каталоги "/etc/httpd/conf" и "/var/log/httpd" не должны быть открыты для чтения, записи и исполнения для других людей.

[root@deep /]# chmod 511 /usr/sbin/httpd
[root@deep /]# chmod 750 /etc/httpd/conf/
[root@deep /]# chmod 750 /var/log/httpd/

Автоматическая индексация

Если вы включили автоматическую индексацию каталогов в вашем конфигурационном файле, (IndexOptions в httpd.conf), тогда вы имеете проблему в безопасности, так как любой запрос к каталогу, не имеющему индексного файла, вызовет создания индекса всего того, что находится в каталоге. Во многих случаях, вы можете хотеть, чтобы пользователи смотрели файлы, которые вы специально создали для этого. Для отключения этой возможности, вам нужно удалить право на чтение из каталога DocumentRoot (но не файлов внутри него).

[root@deep /]# cd /home/httpd/
[root@deep httpd]# chmod 311 ona
[root@deep httpd]# ls -la

d-wx--x--x 13 webadmin webadmin 1024 Jul 28 08:12 ona

Сейчас, после этой модификации, любой запрос к защищенному каталогу должен получить сообщение об ошибке:

Forbidden
You don't have permission to access "/ona/" on this server.

ЗАМЕЧАНИЕ. "ona" - это DocumentRoot (каталог в котором вы храните ваши документы).

Создание файла с паролями .dbmpasswd для аутентификации пользователей.

Этот шаг необходим если вы планируете использовать аутентификацию пользователей для доступа к файлам на вашем веб сервере. В Apache существует много опций для защиты вашего сайта именами и паролями.

Шаг 1

Утилита "dbmmanage" из Apache может быть использована для создания и обновления имен и паролей HTTP пользователей. Этот метод использует DBM формат файла, который представляет из себя наиболее быстрый механизм, когда необходимо управлять тысячью пользователями в файле с паролями. Первое, необходимо изменить права доступа к этой программе на (0750/-rwxr-x- --), запись только для "root", чтение и исполнение для группы и ничего для других пользователей.

Для изменнеия прав доступа используйте следующую команду:

[root@deep /]# chmod 750 /usr/bin/dbmmanage

Для создания имени пользователя и пароля используйте команду:

[root@deep /]# /usr/bin/dbmmanage /etc/httpd/.dbmpasswd adduser username
New password:
Re-type new password:
User username added with password encrypted to l4jrdAL9MH0K.

где </etc/httpd> это месторасположение файла с паролями, <.dbmpasswd> - имя файла с паролями и <username> имя пользователя, которое мы хотим добавить в ".dbmpasswd".

Шаг 2

Если вы используете утилиту "dbmmanage" для создания паролей и имен пользователей, не забудьте включить в ваш конфигурационный файл "/etc/httpd/conf/httpd.conf" информацию о части вашего веб сервера, которую вы хотите защитить аутентификацией пользователей по паролю:

Редактируйте файл httpd.conf (vi /etc/httpd/conf/httpd.conf) и добавьте следующие строки для защиты "приватного" каталога вашего веб сервера "ona":

<Directory "/home/httpd/ona/private">
  Options None
  AllowOverride AuthConfig
  AuthName "restricted stuff"
  AuthType Basic
  AuthDBUserFile /etc/httpd/.dbmpasswd
  require valid-user
</Directory>

Путь </home/httpd/ona/private> определяет защищаемый каталог, а </etc/httpd/.dbmpasswd> определяет месторасположение файла с паролями. ЗАМЕЧАНИЕ. Модуль аутентификации по DB файлам с паролями вы должны включить во время конфигурирования вашего веб сервера Apache, использовав параметр "--add-module=src/modules/standard/mod_auth_db.c". Смотрите документацию на Apache для большей информации.

Шаг 3

Вы должны перезагрузить веб сервер, чтобы изменения вступили в силу:

[root@deep /]# /etc/rc.d/init.d/httpd restart
Shutting down http:         [ OK ]
Starting httpd:             [ OK ]

Шаг 4

В заключение, мы должны тестировать новый защищаемый каталог (private). Для проверки введите в окне броузера следующий адрес: http://my-web- server/private/. <my-web-server> - адрес вашего веб сервера, </private/> - это каталог, который вы защищаете.



Иммунизация важного конфигурационного файла "httpd.conf"

Как мы уже знаем, бит "постоянства" может быть использован для предотвращения удаления, переписывания или создания символической ссылки к файлу. Так как ваш файл "httpd.conf" уже настроен, то его можно защитить подобным битом:

[root@deep /]# chattr +i /etc/httpd/conf/httpd.conf
Назад Оглавление Вперед

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

Глава 19 Серверное программное обеспечение (Веб сервис) (Часть 3)

В этой главе
Linux MM - библиотека совместно используемой памяти
Веб-сервер Apache
Конфигурации
PHP4 - язык скриптов со стороны сервера
Perl библиотека - CGI.pm
Организация защиты Apache
Запуск Apache с использованием chroot.
Оптимизация Apache

Запуск Apache в chroot окружении

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

Основная выгода от использования chroot - это ограничение части файловой системы, которую демон может видеть как корневой каталог. Дополнительно, так как эта часть файловой системы нужна только для поддержки Apache, то количество программ доступное на ней чрезвычайно ограничено. Наиболее важно то, что здесь не нужно иметь setuid-root программ, которые можно использовать для получения root доступа и взлома chroot ограничений.


Chrooting apache - это не простая задача. Перед ее решением мы рассмотрим некоторые "за" и "против", чтобы вы решили нужно ли вам это.

За:

  1. Если apache будет взломан, то атакующий не получит доступ к элементам файловой системы.
  2. Плохо написанные CGI скрипты, которые могут позволить кому-нибудь получить доступ к вашему серверу не будут работать.

Против:

  1. Существуют дополнительные библиотеки, которые вы должны иметь в chroot окружении, чтобы Apache работал корректно.
  2. Если вы используете любые Perl/CGI возможности в Apache, вам нужно будетскопировать необходимые двоичные файлы, Perl библиотеки и файлы в предназначенное место chroot пространства. Тоже самое относится и к SSL, PHP, LDAP, PostgresSQL и другим программам третьих лиц.

chroot конфигурация приведенная ниже полагает, что вы компилировали ваш сервер Apache со внешней программой mod_ssl. Различия в том, что вы компилировали с вашим веб сервером Apache постоянно находится в библиотеках и двоичных файлах, которые вы должны копировать в chroot каталог.

Помните, что если вы компилировали Apache с поддержкой mod_perl, вы должны скопировать все связанные двоичные файлы и Perl библиотеки в chroot каталог. Perl находится в "/usr/lib/perl5" и в случае использования возможностей Perl, копируйте каталог Perl в "/chroot/httpd/usr/lib/perl5/". Не забудьте перед копированием создать каталог "/chroot/httpd/usr/lib/perl5" в вашей chroot структуре.

Ниже приводятся все необходимые шаги для запуска веб сервера Apache в chroot окружении:

Шаг 1

Мы должны определить разделяемые библиотеки от которых зависит httpd. Их надо будет позже скопировать в chroot каталог.
Для поиска разделяемых библиотек от которых зависит httpd выполните следующую команду:

[root@deep /]# ldd /usr/sbin/httpd
libpam.so.0 => /lib/libpam.so.0 (0x40016000)
libm.so.6 => /lib/libm.so.6 (0x4001f000)
libdl.so.2 => /lib/libdl.so.2 (0x4003b000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x4003e000)
libnsl.so.1 => /lib/libnsl.so.1 (0x4006b000)
libresolv.so.2 => /lib/libresolv.so.2 (0x40081000)
libdb.so.3 => /lib/libdb.so.3 (0x40090000)
libc.so.6 => /lib/libc.so.6 (0x400cb000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Сделайте заметки об этих файлах; они потребуются нам позже.

Шаг 2

Создайте новый UID и GID, если этой же не сделано, необходимые для запуска Apache httpd. Это важно, потому что запуск из под root ликвидирует преимущества chroot окружения, а использование UID, которые уже существуют на системе (например, nobody) может дать доступ сервису к другим ресурсам. Представьте себе, что веб сервер запущен из под пользователя nobody, или любого другого используемого UID/GID и был взломан. Взломщик получит доступ из chroot к любым другим процессам запущенным как. Здесь приведены типичные UID и GID. Проверьте файлы "/etc/passwd" и "/etc/group" файлы на наличие свободных UID/GID. В нашей конфигурации мы используем значение "80" и UID/GID "www".

[root@deep /]# useradd -c "Apache Server" -u 80 -s /bin/false -r -d /home/httpd www 2>/dev/null || :

Вышеприведенная команда создаст группу "www" с числовым GID равном 80, и пользователя "www" с числовым номером UID равном 80.

Шаг 3

Установим chroot окружение. Первое, мы должны создать chroot структуру для Apache. Мы используем "/chroot/httpd" как chroot каталог для Apache. "/chroot/httpd" - это только каталог на отдельном разделе, где мы решили разместить apache для большей безопасности.

[root@deep /]# /etc/rc.d/init.d/httpd stop (только если Apache уже инсталлирован и запущен на вашей системе).
Shutting down http:                 [ OK ]
[root@deep /]# mkdir /chroot/httpd

Далее мы создаем остальные каталоги:

[root@deep /]# mkdir /chroot/httpd/dev
[root@deep /]# mkdir /chroot/httpd/lib
[root@deep /]# mkdir /chroot/httpd/etc
[root@deep /]# mkdir -p /chroot/httpd/usr/sbin
[root@deep /]# mkdir -p /chroot/httpd/var/run
[root@deep /]# mkdir -p /chroot/httpd/var/log/httpd
[root@deep /]# chmod 750 /chroot/httpd/var/log/httpd/
[root@deep /]# mkdir -p /chroot/httpd/home/httpd

Копируйте основной конфигурационный каталог, конфигурационные файлы, каталог cgi-bin, root каталог и программу httpd в chroot окружение:

[root@deep /]# cp -r /etc/httpd /chroot/httpd/etc/
[root@deep /]# cp -r /home/httpd/cgi-bin /chroot/httpd/home/httpd/
[root@deep /]# cp -r /home/httpd/your-DocumentRoot /chroot/httpd/home/httpd/
[root@deep /]# mknod /chroot/httpd/dev/null c 1 3
[root@deep /]# chmod 666 /chroot/httpd/dev/null
[root@deep /]# cp /usr/sbin/httpd /chroot/httpd/usr/sbin/

Нам нужны каталоги "/chroot/httpd/etc", "/chroot/httpd/dev", "/chroot/httpd/lib", "/chroot/httpd/usr/sbin", "/chroot/httpd/var/run", "/chroot/httpd/home/httpd" и "/chroot/httpd/var/log/httpd", потому что "/" считается от точки chroot.

Шаг 4

Если вы скомпилировали Apache с поддержкой SSL, вы должны скопировать элементы каталога "/etc/ssl", который содержит все приватные и публичные ключи в chroot окружение.

[root@deep /]# cp -r /etc/ssl /chroot/httpd/etc/ (требуется только если включена поддержка mod_ssl).
[root@deep /]# chmod 600 /chroot/httpd/etc/ssl/certs/ca.crt (требуется только если включена поддержка mod_ssl).
[root@deep /]# chmod 600 /chroot/httpd//etc/ssl/certs/server.crt (требуется только если включена поддержка mod_ssl).
[root@deep /]# chmod 600 /chroot/httpd/etc/ssl/private/ca.key (требуется только если включена поддержка mod_ssl).
[root@deep /]# chmod 600 /chroot/httpd/etc/ssl/private/server.key (требуется только если включена поддержка mod_ssl).

Шаг 5

Так как мы компилировали apache с использованием разделяемых библиотек, нам нужно инсталлировать их в структуру chroot каталога. Используйте ldd /chroot/httpd/usr/sbin/httpd для поиска требуемых библиотек. Вывод этой команды будет выглядеть примерно так:

libpam.so.0 => /lib/libpam.so.0 (0x40016000)
libm.so.6 => /lib/libm.so.6 (0x4001f000)
libdl.so.2 => /lib/libdl.so.2 (0x4003b000)
libcrypt.so.1 => /lib/libcrypt.so.1 (0x4003e000)
libnsl.so.1 => /lib/libnsl.so.1 (0x4006b000)
libresolv.so.2 => /lib/libresolv.so.2 (0x40081000)
libdb.so.3 => /lib/libdb.so.3 (0x40090000)
libc.so.6 => /lib/libc.so.6 (0x400cb000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

Копируйте разделяемые библиотеки определенные выше:

[root@deep /]# cp /lib/libpam.so.0 /chroot/httpd/lib/
[root@deep /]# cp /lib/libm.so.6 /chroot/httpd/lib/
[root@deep /]# cp /lib/libdl.so.2 /chroot/httpd/lib/
[root@deep /]# cp /lib/libcrypt.so.1 /chroot/httpd/lib/
[root@deep /]# cp /lib/libnsl* /chroot/httpd/lib/
[root@deep /]# cp /lib/libresolv* /chroot/httpd/lib/
[root@deep /]# cp /lib/libdb.so.3 /chroot/httpd/lib/
[root@deep /]# cp /lib/libc.so.6 /chroot/httpd/lib/
[root@deep /]# cp /lib/ld-linux.so.2 /chroot/httpd/lib/

Вам также нужны следующие дополнительные библиотеки для некоторых сетевых функций, подобных резолвингу:

[root@deep /]# cp /lib/libnss_compat* /chroot/httpd/lib/
[root@deep /]# cp /lib/libnss_dns* /chroot/httpd/lib/
[root@deep /]# cp /lib/libnss_files* /chroot/httpd/lib/

Шаг 6

Мы должны скопировать passwd и group файлы в "/chroot/httpd/etc". Концепция их использования такая же как и в ftpd. Затем, мы удаляем все элементы из этих файлов, за исключением пользователя и группы под которыми запускается apache.

[root@deep /]# cp /etc/passwd /chroot/httpd/etc/
[root@deep /]# cp /etc/group /chroot/httpd/etc/

Редактируйте файл passwd (vi /chroot/httpd/etc/passwd) и удалите все элементы, кроме пользователя под которым мы запускаем apache (в нашем случае это "www"):

www:x:80:80::/home/www:/bin/bash

Редактируйте файл group (vi /chroot/httpd/etc/group) и удалите все элементы, кроме группы под которой запускается apache (в нашем случае это "www"):

www:x:80:

Шаг 7

Вам потребуются файлы "/etc/resolv.conf", "/etc/nsswitch.conf" и "/etc/hosts" в вашем chroot окружении.

[root@deep /]# cp /etc/resolv.conf /chroot/httpd/etc/
[root@deep /]# cp /etc/hosts /chroot/httpd/etc/
[root@deep /]# cp /etc/nsswitch.conf /chroot/httpd/etc/

Шаг 8

Сейчас на некоторые файлы в chroot окружении мы установим бит "постоянства" для лучшей безопасности.
Установите бит "постоянства" на файл "passwd":

[root@deep /]# cd /chroot/httpd/etc/
[root@deep /]# chattr +i passwd

Установите бит "постоянства" на файл "group":

[root@deep /]# cd /chroot/httpd/etc/
[root@deep /]# chattr +i group

Установите бит "постоянства" на файл "httpd.conf":

[root@deep /]# cd /chroot/httpd/etc/httpd/conf/
[root@deep /]# chattr +i httpd.conf

Установите бит "постоянства" на файл "resolv.conf":

[root@deep /]# cd /chroot/httpd/etc/
[root@deep /]# chattr +i resolv.conf

Установите бит "постоянства" на файл "hosts":

[root@deep /]# cd /chroot/httpd/etc/
[root@deep /]# chattr +i hosts

Установите бит "постоянства" на файл "nsswitch.conf":

[root@deep /]# cd /chroot/httpd/etc/
[root@deep /]# chattr +i nsswitch.conf


Шаг 9

Копируйте файл "localtime" в chroot так, чтобы регистрационные входы были правильно откорректированы для вашей локальной timezone:

[root@deep /]# cp /etc/localtime /chroot/httpd/etc/

Шаг 10

Удалите не нужные Apache файлы и каталоги:

[root@deep /]# rm -rf /var/log/httpd/
[root@deep /]# rm -rf /etc/httpd/
[root@deep /]# rm -rf /home/httpd/
[root@deep /]# rm -f /usr/sbin/httpd

Мы можем спокойно удалить все вышеназванные файлы и каталоги , так как они сейчас находятся в нашем chroot каталоге.

Шаг 11.

Сказать syslogd о новом chroot сервисе. Нормально, процессы обращаются к syslogd через "/dev/log". В chroot окружении это невозможно, поэтому syslogd должен слушать "/chroot/httpd/dev/log". Чтобы сделать это, редактируйте скрипт запуска syslog для определения дополнительного места, которое необходимо слушать.

Редактируйте скрипт syslog (vi /etc/rc.d/init.d/syslog) и измените строку:

daemon syslogd -m 0
на:
daemon syslogd -m 0 -a /chroot/httpd/dev/log

Шаг 12

По умолчанию скрипт httpd запускает демон "httpd" вне chroot окружения. Мы должны изменить это, для этого редактируйте скрипт httpd (vi /etc/rc.d/init.d/httpd) и измените следующие строки:

daemon httpd
на:
/usr/sbin/chroot /chroot/httpd/ /usr/sbin/httpd -DSSL

rm -f /var/run/httpd.pid
на:
rm -f /chroot/httpd/var/run/httpd.pid

Шаг 13

В заключении, вы должны проверить новую chroot конфигурацию вашего веб сервера Apache.

Первое, перезагрузите демон syslogd:

[root@deep /]# /etc/rc.d/init.d/syslog restart
Shutting down kernel logger:         [ OK ]
Shutting down system logger:         [ OK ]
Starting system logger:              [ OK ]
Starting kernel logger:              [ OK ]

Затем, запустите Apache в chroot окружении:

[root@deep /]# /etc/rc.d/init.d/httpd start
Starting httpd:                      [ OK ]

Если вы не получили каких-либо ошибок дайте команду:

[root@deep /]# ps ax | grep httpd
14373 ? S 0:00 httpd -DSSL
14376 ? S 0:00 httpd -DSSL
14377 ? S 0:00 httpd -DSSL
14378 ? S 0:00 httpd -DSSL
14379 ? S 0:00 httpd -DSSL
14380 ? S 0:00 httpd -DSSL
14381 ? S 0:00 httpd -DSSL
14382 ? S 0:00 httpd -DSSL
14383 ? S 0:00 httpd -DSSL
14384 ? S 0:00 httpd -DSSL
14385 ? S 0:00 httpd -DSSL
14386 ? S 0:00 httpd -DSSL
14387 ? S 0:00 httpd -DSSL
14388 ? S 0:00 httpd -DSSL
14389 ? S 0:00 httpd -DSSL
14390 ? S 0:00 httpd -DSSL
14391 ? S 0:00 httpd -DSSL
14397 ? S 0:00 httpd -DSSL
14476 ? S 0:00 httpd -DSSL
14477 ? S 0:00 httpd -DSSL
14478 ? S 0:00 httpd -DSSL

Если это так, то проверьте действительно процесс сменил корень (chroot):

[root@deep /]# ls -la /proc/14373/root/
Вы должны увидеть:
dev
etc
home
lib
usr
var

где 14373 PID одного из процессов httpd.
Поздравляем!

Так же как описано выше, если вы используете Perl, вам нужно скопировать или создать жесткие ссылки любых системных библиотек, perl библиотек "/usr/lib/perl5" и двоичных файлов в chroot структуре. Также надо действовать для SSL, PHP, LDAP, PostgreSQL и других программ.

Конфигурация файла "/etc/logrotate.d/apache"

Сейчас, файлы регистраций Apache находятся в каталоге "/chroot/var/log/httpd" вместо "/var/log/httpd", и из-за этого нам надо модифицировать файл "/etc/logrotate.d/httpd". Также, мы скомпилировали Apache с mod_ssl, поэтому должны добавить строки, разрешающие программе logrotate ротировать файлы "ssl_request_log" и "ssl_engine_log". Сконфигурируем файл "/etc/logrotate.d/apache" на автоматическую ротацию файлов регистрации каждую неделю.

Создайте файл apache (touch /etc/logrotate.d/apache) и добавьте в него:

/chroot/httpd/var/log/httpd/access_log {
   missingok
   postrotate
     /usr/bin/killall -HUP /chroot/httpd/usr/sbin/httpd
   endscript
}

/chroot/httpd/var/log/httpd/error_log {
   missingok
   postrotate
     /usr/bin/killall -HUP /chroot/httpd/usr/sbin/httpd
   endscript
}

/chroot/httpd/var/log/httpd/ssl_request_log {
   missingok
   postrotate
     /usr/bin/killall -HUP /chroot/httpd/usr/sbin/httpd
   endscript
}

/chroot/httpd/var/log/httpd/ssl_engine_log {
   missingok
   postrotate
     /usr/bin/killall -HUP /chroot/httpd/usr/sbin/httpd
   endscript
}

Оптимизация Apache

Модуль mod_mmap_static

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

Важно заметить, что модуль mod_mmap_static должен быть включен на этапе конфигурации и компиляции Apache. Если вы следовали за нашим описанием процесса конфигурации и компиляции, то это уже сделано в Apache (--add- module-../mod_mmap_static.c).

Шаг 1

Для отображения статических документов в памяти используйте следующую команду:

[root@deep /]# find /home/httpd/ona -type f -print | sed -e 's/.*/mmapfile &/' > /etc/httpd/conf/mmap.conf

</home/httpd/ona> - это RootDirectory, или если быть более точным каталог из которого вы будете предоставлять ваши документы, а </etc/httpd/conf/mmap.conf> - это месторасположение файла "mmap.conf", который содержит статическое отображение в памяти всех документов из вашего RootDirectory.

Шаг 2

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

Редактируйте файл httpd.conf (vi /etc/httpd/conf/httpd.conf) и добавьте в него строки:

<IfModule mod_include.c>
Include conf/mmap.conf
</IfModule>

ЗАМЕЧАНИЕ. Смотрите документацию на Apache для большей инофрмации об использовании mod_mmap_static. Помните, что эта возможность должна использоваться, когда предоставляемые документы часто не изменяются.

Шаг 3

Перезагрузите веб сервер Apache, чтобы изменения вступили в силу:

[root@deep /]# /etc/rc.d/init.d/httpd restart
Shutting down http:             [ OK ]
Starting httpd:                 [ OK ]
Атрибуты atime и noatime

Атрибуты atime и noatime могут быть использованы для небольшого увеличения производительности Apache. Смотрите главу 4 в этой книге, "Общая системная оптимизация " для большей информации по этом вопросу.

Инсталлированные файлы для веб сервера Apache

> /etc/rc.d/init.d/httpd
> /etc/rc.d/rc0.d/K15httpd
> /etc/rc.d/rc1.d/K15httpd
> /etc/rc.d/rc2.d/K15httpd
> /etc/rc.d/rc3.d/S85httpd
> /etc/rc.d/rc4.d/S85httpd
> /etc/rc.d/rc5.d/S85httpd
> /etc/rc.d/rc6.d/K15httpd
> /etc/logrotate.d/apache
> /etc/httpd
> /etc/httpd/conf
> /etc/httpd/conf/httpd.conf.default
> /etc/httpd/conf/httpd.conf
> /etc/httpd/conf/mime.types.default
> /etc/httpd/conf/mime.types
> /etc/httpd/conf/magic.default
> /etc/httpd/conf/magic
> /etc/httpd/php.ini
> /home/httpd
> /home/httpd/cgi-bin
> /home/httpd/cgi-bin/printenv
> /home/httpd/cgi-bin/test-cgi
> /usr/bin/htpasswd
> /usr/bin/htdigest
> /usr/bin/dbmmanage
> /usr/include/apache
> /usr/include/apache/xml
> /usr/include/apache/xml/asciitab.h
> /usr/include/apache/xml/hashtable.h
> /usr/include/apache/xml/iasciitab.h
> /usr/include/apache/xml/latin1tab.h
> /usr/include/apache/xml/nametab.h
> /usr/include/apache/xml/utf8tab.h
> /usr/include/apache/xml/xmldef.h
> /usr/include/apache/xml/xmlparse.h
> /usr/include/apache/xml/xmlrole.h
> /usr/include/apache/xml/xmltok.h
> /usr/include/apache/xml/xmltok_impl.h
> /usr/include/apache/alloc.h
> /usr/include/apache/ap.h
> /usr/include/apache/ap_compat.h
> /usr/include/apache/ap_config.h
> /usr/include/apache/ap_config_auto.h
> /usr/include/apache/ap_ctx.h
> /usr/include/apache/ap_ctype.h
> /usr/include/apache/ap_hook.h
> /usr/include/apache/ap_md5.h
> /usr/include/apache/ap_mm.h
> /usr/include/apache/ap_mmn.h
> /usr/include/apache/ap_sha1.h
> /usr/include/apache/buff.h
> /usr/include/apache/compat.h
> /usr/include/apache/conf.h
> /usr/include/apache/explain.h
> /usr/include/apache/fnmatch.h
> /usr/include/apache/hsregex.h
> /usr/include/apache/http_conf_globals.h
> /usr/include/apache/http_config.h
> /usr/include/apache/http_core.h
> /usr/include/apache/http_log.h
> /usr/include/apache/http_main.h
> /usr/include/apache/http_protocol.h
> /usr/include/apache/http_request.h
> /usr/include/apache/http_vhost.h
> /usr/include/apache/httpd.h
> /usr/include/apache/multithread.h
> /usr/include/apache/rfc1413.h
> /usr/include/apache/scoreboard.h
> /usr/include/apache/util_date.h
> /usr/include/apache/util_md5.h
> /usr/include/apache/util_script.h
> /usr/include/apache/util_uri.h
> /usr/include/apache/os.h
> /usr/include/apache/os-inline.c
> /usr/lib/apache
> /usr/man/man1/htpasswd.1
> /usr/man/man1/htdigest.1
> /usr/man/man1/dbmmanage.1
> /usr/man/man8/ab.8
> /usr/man/man8/httpd.8
> /usr/man/man8/logresolve.8
> /usr/man/man8/rotatelogs.8
> /usr/man/man8/apxs.8
> /usr/sbin/httpd
> /usr/sbin/ab
> /usr/sbin/logresolve
> /usr/sbin/rotatelogs
> /usr/sbin/apxs
> /var/log/httpd
> /var/cache
> /var/cache/httpd
Инсталлированные файлы для PHP4
> /usr/bin/phpize
> /usr/bin/php-config
> /usr/include/php
> /usr/include/php/Zend
> /usr/include/php/Zend/FlexLexer.h
> /usr/include/php/Zend/acconfig.h
> /usr/include/php/Zend/modules.h
> /usr/include/php/Zend/zend-parser.h
> /usr/include/php/Zend/zend-scanner.h
> /usr/include/php/Zend/zend.h
> /usr/include/php/Zend/zend_API.h
> /usr/include/php/Zend/zend_alloc.h
> /usr/include/php/Zend/zend_builtin_functions.h
> /usr/include/php/Zend/zend_compile.h
> /usr/include/php/Zend/zend_config.h
> /usr/include/php/Zend/zend_config.w32.h
> /usr/include/php/Zend/zend_constants.h
> /usr/include/php/Zend/zend_dynamic_array.h
> /usr/include/php/Zend/zend_errors.h
> /usr/include/php/Zend/zend_execute.h
> /usr/include/php/Zend/zend_execute_locks.h
> /usr/include/php/Zend/zend_extensions.h
> /usr/include/php/Zend/zend_fast_cache.h
> /usr/include/php/Zend/zend_globals.h
> /usr/include/php/Zend/zend_globals_macros.h
> /usr/include/php/Zend/zend_hash.h
> /usr/include/php/Zend/zend_highlight.h
> /usr/include/php/Zend/zend_indent.h
> /usr/include/php/Zend/zend_list.h
> /usr/include/php/Zend/zend_llist.h
> /usr/include/php/Zend/zend_operators.h
> /usr/include/php/Zend/zend_ptr_stack.h
> /usr/include/php/Zend/zend_stack.h
> /usr/include/php/Zend/zend_variables.h
> /usr/include/php/TSRM
> /usr/include/php/TSRM/TSRM.h
> /usr/include/php/ext
> /usr/include/php/ext/standard
> /usr/include/php/ext/standard/base64.h
> /usr/include/php/ext/standard/basic_functions.h
> /usr/include/php/ext/standard/cyr_convert.h
> /usr/include/php/ext/standard/datetime.h
> /usr/include/php/ext/standard/dl.h
> /usr/include/php/ext/standard/dns.h
> /usr/include/php/ext/standard/exec.h
> /usr/include/php/ext/standard/file.h
> /usr/include/php/ext/standard/flock_compat.h
> /usr/include/php/ext/standard/fsock.h
> /usr/include/php/ext/standard/global.h
> /usr/include/php/ext/standard/head.h
> /usr/include/php/ext/standard/html.h
> /usr/include/php/ext/standard/info.h
> /usr/include/php/ext/standard/md5.h
> /usr/include/php/ext/standard/microtime.h
> /usr/include/php/ext/standard/pack.h
> /usr/include/php/ext/standard/pageinfo.h
> /usr/include/php/ext/standard/php_array.h
> /usr/include/php/ext/standard/php_assert.h
> /usr/include/php/ext/standard/php_browscap.h
> /usr/include/php/ext/standard/php_crypt.h
> /usr/include/php/ext/standard/php_dir.h
> /usr/include/php/ext/standard/php_filestat.h
> /usr/include/php/ext/standard/php_image.h
> /usr/include/php/ext/standard/php_iptc.h
> /usr/include/php/ext/standard/php_lcg.h
> /usr/include/php/ext/standard/php_link.h
> /usr/include/php/ext/standard/php_mail.h
> /usr/include/php/ext/standard/php_metaphone.h
> /usr/include/php/ext/standard/php_output.h
> /usr/include/php/ext/standard/php_rand.h
> /usr/include/php/ext/standard/php_standard.h
> /usr/include/php/ext/standard/php_string.h
> /usr/include/php/ext/standard/php_syslog.h
> /usr/include/php/ext/standard/php_var.h
> /usr/include/php/ext/standard/phpdir.h
> /usr/include/php/ext/standard/phpmath.h
> /usr/include/php/ext/standard/quot_print.h
> /usr/include/php/ext/standard/reg.h
> /usr/include/php/ext/standard/type.h
> /usr/include/php/ext/standard/uniqid.h
> /usr/include/php/ext/standard/url.h
> /usr/include/php/ext/standard/url_scanner.h
> /usr/include/php/regex
> /usr/include/php/regex/regex.h
> /usr/include/php/regex/regex_extra.h
> /usr/include/php/php.h
> /usr/include/php/php_regex.h
> /usr/include/php/php3_compat.h
> /usr/include/php/safe_mode.h
> /usr/include/php/fopen-wrappers.h
> /usr/include/php/php_version.h
> /usr/include/php/php_globals.h
> /usr/include/php/php_reentrancy.h
> /usr/include/php/php_ini.h
> /usr/include/php/SAPI.h
> /usr/include/php/php_config.h
> /usr/include/php/zend_config.h
> /usr/include/php/build-defs.h
> /usr/lib/php
> /usr/lib/php/DB
> /usr/lib/php/DB/common.php
> /usr/lib/php/DB/odbc.php
> /usr/lib/php/DB/mysql.php
> /usr/lib/php/DB/pgsql.php
> /usr/lib/php/DB/storage.php
> /usr/lib/php/build
> /usr/lib/php/build/pear.m4
> /usr/lib/php/build/fastgen.sh
> /usr/lib/php/build/library.mk
> /usr/lib/php/build/ltlib.mk
> /usr/lib/php/build/program.mk
> /usr/lib/php/build/rules.mk
> /usr/lib/php/build/rules_pear.mk
> /usr/lib/php/build/shtool
> /usr/lib/php/build/acinclude.m4
> /usr/lib/php/DB.php

Инсталлированные файлы для mod_perl
> /usr/lib/perl5/5.00503/i386-linux/perllocal.pod
> /usr/lib/perl5/man/man3/Apache.3
> /usr/lib/perl5/man/man3/Apache::Constants.3
> /usr/lib/perl5/man/man3/Apache::Leak.3
> /usr/lib/perl5/man/man3/Apache::Log.3
> /usr/lib/perl5/man/man3/Apache::PerlRunXS.3
> /usr/lib/perl5/man/man3/Apache::Symbol.3
> /usr/lib/perl5/man/man3/Apache::Table.3
> /usr/lib/perl5/man/man3/Apache::URI.3
> /usr/lib/perl5/man/man3/Apache::Util.3
> /usr/lib/perl5/man/man3/Apache::FakeRequest.3
> /usr/lib/perl5/man/man3/mod_perl.3
> /usr/lib/perl5/man/man3/Apache::ExtUtils.3
> /usr/lib/perl5/man/man3/Apache::SIG.3
> /usr/lib/perl5/man/man3/Apache::Status.3
> /usr/lib/perl5/man/man3/Apache::Include.3
> /usr/lib/perl5/man/man3/Apache::Debug.3
> /usr/lib/perl5/man/man3/Apache::Resource.3
> /usr/lib/perl5/man/man3/Apache::src.3
> /usr/lib/perl5/man/man3/Apache::PerlRun.3
> /usr/lib/perl5/man/man3/Apache::httpd_conf.3
> /usr/lib/perl5/man/man3/mod_perl_traps.3
> /usr/lib/perl5/man/man3/Apache::Options.3
> /usr/lib/perl5/man/man3/mod_perl_cvs.3
> /usr/lib/perl5/man/man3/Apache::Symdump.3
> /usr/lib/perl5/man/man3/Apache::RegistryLoader.3
> /usr/lib/perl5/man/man3/mod_perl_method_handlers.3
> /usr/lib/perl5/man/man3/mod_perl_tuning.3
> /usr/lib/perl5/man/man3/cgi_to_mod_perl.3
> /usr/lib/perl5/man/man3/Apache::StatINC.3
> /usr/lib/perl5/man/man3/Apache::Registry.3
> /usr/lib/perl5/man/man3/Bundle::Apache.3
> /usr/lib/perl5/man/man3/Apache::SizeLimit.3
> /usr/lib/perl5/man/man3/Apache::PerlSections.3
> /usr/lib/perl5/man/man3/Apache::RedirectLogFix.3
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/buff.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/multithread.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/httpd.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap_config.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/alloc.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap_md5.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap_ctx.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/util_md5.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/rfc1413.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/conf.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/util_uri.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/explain.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap_compat.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/http_config.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap_sha1.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/scoreboard.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/compat.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/http_request.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/http_core.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap_mm.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/http_protocol.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/util_date.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap_hook.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/http_main.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/http_conf_globals.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/util_script.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/http_vhost.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap_ctype.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/hsregex.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap_mmn.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/ap_config_auto.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/http_log.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/include/fnmatch.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/netware
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/netware/os.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/netware/getopt.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/netware/test_char.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/netware/uri_delims.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/netware/precomp.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/bs2000
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/bs2000/os-inline.c
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/bs2000/ebcdic.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/bs2000/os.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/tpf
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/tpf/ebcdic.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/tpf/os.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/tpf/os-inline.c
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/service.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/getopt.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/registry.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/resource.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/installer
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/installer/installdll
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/installer/installdll/test
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/installer/installdll/test/test.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/installer/installdll/test/resource.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/os.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/passwd.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/win32/readdir.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/unix
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/unix/os.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/unix/os-inline.c
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/os390
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/os390/os-inline.c
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/os390/ebcdic.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/os390/os.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/mpeix
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/mpeix/os-inline.c
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/mpeix/os.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/os2
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/os2/os.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/os/os2/os-inline.c
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/ssl
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/ssl/ssl_expr.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/ssl/ssl_util_table.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/ssl/ssl_util_ssl.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/ssl/ssl_expr_parse.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/ssl/mod_ssl.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/ssl/ssl_util_sdbm.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/perl
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/perl/mod_perl.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/perl/mod_perl_version.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/perl/perl_PL.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/perl/mod_perl_xs.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/php4
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/php4/mod_php4.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/proxy
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/proxy/mod_proxy.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/standard
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/modules/standard/mod_rewrite.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/support
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/support/suexec.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/iasciitab.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/latin1tab.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/xmldef.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/xmlparse.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/xmltok.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/xmlrole.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/hashtable.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/nametab.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/xmltok_impl.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/utf8tab.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/lib/expat-lite/asciitab.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/regex
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/regex/utils.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/regex/regex2.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/regex/cclass.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/include/regex/cname.h
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/typemap
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/Leak
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/Leak/Leak.so
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/Leak/Leak.bs
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/Symbol
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/Symbol/Symbol.so
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/Apache/Symbol/Symbol.bs
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/mod_perl
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/mod_perl/.packlist
> /usr/lib/perl5/site_perl/5.005/i386-linux/mod_perl.pod
> /usr/lib/perl5/site_perl/5.005/i386-linux/Bundle
> /usr/lib/perl5/site_perl/5.005/i386-linux/Bundle/Apache.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/test.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Debug.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Resource.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/src.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/httpd_conf.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Symdump.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/RegistryLoader.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Registry.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/SizeLimit.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/RedirectLogFix.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/MyConfig.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Constants
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Constants/Exports.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/SIG.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/StatINC.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Opcode.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/PerlSections.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/FakeRequest.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/ExtUtils.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Include.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Status.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/PerlRun.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Options.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/RegistryNG.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/RegistryBB.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Connection.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Constants.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/File.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Leak.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Log.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/ModuleConfig.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/PerlRunXS.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Server.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Symbol.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Table.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/URI.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache/Util.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/mod_perl_hooks.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/mod_perl_hooks.pm.PL
> /usr/lib/perl5/site_perl/5.005/i386-linux/mod_perl_tuning.pod
> /usr/lib/perl5/site_perl/5.005/i386-linux/mod_perl_cvs.pod
> /usr/lib/perl5/site_perl/5.005/i386-linux/mod_perl_method_handlers.pod
> /usr/lib/perl5/site_perl/5.005/i386-linux/mod_perl.pm
> /usr/lib/perl5/site_perl/5.005/i386-linux/mod_perl_traps.pod
> /usr/lib/perl5/site_perl/5.005/i386-linux/cgi_to_mod_perl.pod
> /usr/lib/perl5/site_perl/5.005/i386-linux/Apache.pm

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

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

Глава 2 Инсталляция вашего Linux сервера (Часть1)

В этой главе
Определите ваше аппаратное обеспечение
Создайте загрузочный и корневой диски
Классы и методы инсталляции
Разбиение диска (Disk Druid)
Компоненты инсталляции (Выбор пакетов для инсталляции)
Выбор индивидуальных пакетов
Описания программ, которые должны быть деинсталлированы из соображений безопасности
Как использовать команды RPM
Запуск и остановка демонов
Описание программы, которые должны быть удалены после инсталляции сервера
Программы, которые должны быть установлены после инсталляции сервера
Программы установленные на вашем сервере
Добавьте цветов на ваш терминал
Обновление программ до их последних версий

Мы подготовили эту главу следуя за процедурой инсталляции. Каждый раздел ниже будет проводить вас через различные экраны, которые будут возникать в процессе установки сервера.

Время от времени Red Hat обновляет свою операционную систему на новые версии и добавляет, удаляет и модифицирует некоторые пакеты, изменяет их месторасположения, содержимое и возможности. Недавно Red Hat выпустила версию 6.2 своей операционной системы, которая представляет собой незначительное обновление 6.1. В этой главе мы пытаемся рассмотреть вопросы инсталляции как версии 6.1 так и 6.2. Все разделы в этой секции которые относятся к Red Hat 6.1 будут обозначаться (6.1), разделы относящиеся к Red Hat 6.2 (6.2), а общие для обеих версиях - (All).

Определите ваше аппаратное обеспечение.

Понимание того, какое аппаратное обеспечение у вас установлено является важнейшей составляющей успешной инсталляции Red Hat Linux. Поэтому сейчас вы должны прекратить чтение и прояснить для себя этот вопрос. Будьте готовы ответить на следующие вопросы:

  1. Сколько у вас установлено жестких дисков?
  2. Каков объем каждого из них?
  3. Если у вас несколько жестких дисков, то какой из них первичный?
  4. Какого типа диски у вас установлены (IDE, SCSI)?
  5. Сколько оперативной памяти установлено у вас?
  6. Имеете ли вы SCSI адаптеры? Если есть, то кто их производитель и какой они модели?
  7. Есть ли у вас RAID система? Если есть, то кто ее производитель и какой она модели?
  8. Мышь какого типа у вас установлена (Microsoft, Logitech, PS/2)?
  9. Как много в ней кнопок (2/3)?
  10. Если у вас "серийная" мышь, то к какому порту она подключена (COM1)?
  11. Кто производитель и какая модель у вашего видеоадаптера? Как много в нем видеопамяти?
  12. Какой у вас монитор (производитель и модель)?
  13. Будете ли вы подключены к сети. Если да, то выясните следующее:
    1. Ваш IP
    2. Какова сетевая маска.
    3. Адрес "шлюза по умолчанию"
    4. IP адрес DNS сервера
    5. Ваше доменное имя
    6. Имя вашего компьютера
    7. Какие сетевые карты у вас установлены (производитель и модель)
Создайте загрузочный и корневой диски

(All) Первое о чем надо подумать это создание инсталляционной дискеты, известной также как загрузочная. Если вы купили официальный Red Hat Linux CD-ROM, то вы найдете ее в коробке и вам не нужно ее создавать. Она называется "Boot Diskette". Время от времени можно столкнуться с проблемой, что ваша инсталляция начатая со стандартной дискеты завершается ошибкой, тогда вам потребуется специальная загрузочная дискета. Образ который можно найти на CD-ROM и на веб-странице Red Hat Linux Errata (http://www.redhat.com/errata).

Шаг 1.

Перед тем как сделать загрузочный диск вставьте Official Red Hat Linux CD- ROM часть1 в ваш дисковод. Когда программа спросит имя файла - ответьте boot.img. Чтобы сделать загрузочный диск под MSDOS вам нужно ввести следующие команды (принимаем, что CDROM это диск D:, и в него вставлен Official Red Hat Linux CD-ROM).

C:\> d:
D:\> cd \dosutils
D:\dosutils> rawrite
Enter disk image source file name: ..\images\boot.img
Enter target diskette drive: a:
Please insert a formatted diskette into drive A: and press --ENTER-- :
D:\dosutils>

Программа rawrite.exe запрашивает имя образа. Введите boot.img и вставьте дискету в дисковод. Затем программа спрашивает на какой диск записать образ. Ответьте a:. После завершения процедуры подпишите дискету, например "Red Hat boot disk".

Шаг 2.

Если мы запускаем инсталляцию не напрямую с CD-ROM, то загружайтесь с дискеты. Вставьте дискету, которую вы создали, в дисковод A:, на компьютере, где вы собираетесь установить Linux и перезагрузите его. После появления приглашения к загрузке нажмите Enter для продолжения и выполните три следующих действия:

  1. Выберите язык
  2. Выберите тип клавиатуры
  3. Выберите тип мыши
Классы и методы инсталляции

Red Hat Linux 6.1 и 6.2 включает четыре предопределенных типа инсталляции:

Первые три класса (рабочая станция с GNOME, рабочая станция с KDE и Сервер) даны для упрощения процесса установки, но при этом теряется гибкость настройки, которую бы нам хотелось иметь. По этой причине мы настоятельно рекомендуем использовать опцию Custom, чтобы вы могли точно знать какие сервисы установлены и на какие разделы разбиты диски.

Идея состоит в том, чтобы проинсталлировать минимальное количество пакетов. Меньшее количество программного обеспечение, уменьшает количество потенциальных проблем с безопасностью. Выберите "Custom" и нажмите Next.

Разбиение диска (Disk Druid)

(All) Мы принимаем, что вы устанавливаете Linux на новый диск, на котором нет никаких файловых или операционных систем. Хорошая стратегия разбития диска, это разделение его на отдельные разделы для каждой важной файловой системы.

Разбиение дика на несколько разделов дает следующие преимущества:

  1. Защита от DoS (Denial of Service) атак
  2. Защита от SUID программ
  3. Более быстрая загрузка
  4. Облегчение процедуры резервного копирования и обновления
  5. Улучшенный контроль над смонтированными файловыми системами
  6. Ограничение для каждой файловой системы возможности роста

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

Шаг 1.

Исходя из соображений стабильности и безопасности мы рекомендуем разбить диск согласно принципам описанным ниже. Мы исходили из того, что у вас есть SCSI диск объемом 3.2 GB. Конечно, вы можете изменить размеры разделов, исходя из размеров вашего диска и личных нужд.

Разделы которые необходимо создать на вашем диске.

/boot5MBОбразы ядер находятся здесь.
/usr512MBДолжен быть большим. Все двоичные файлы Linux хранятся здесь.
/home1146MB   Пропорционально числу пользователей (например, 10MB на пользователя * число пользователей 114 = 1140MB).
/chroot   256MBЕсли вы будете использовать программы с CHROOT (например DNS).
/cache256MBКэш раздел для прокси сервера (например, Squid).
/var256MBСодержит файлы которые изменяются при нормальной работе системы (например, логфайлы).
<Swap>128MBswap раздел. Виртуальная память Linux.
/tmp256MBРаздел для временных файлов.
/256MBКорневой раздел.

Все основные файловые системы на отдельных раздела.

Мы создаем два специальных раздела /chroot и /cache. /chroot - для программ умеющий менять корневую файловую систему (chroot). К ним относятся DNS- сервер, Apache веб-сервер и ряд других программ. Раздел /cache предназначен для кэширующего прокси сервера Squid. Если вы не хотите использовать Squid, то вы можете не создавать его.

Расположите /tmp и /home на отдельных разделах, особенно если пользователи вашего сервера имеют shell-доступ к нему. Также хорошей идеей будет разместить на независимых разделах /var и /usr. Отделение /var защитит ваш корневой раздел от переполнения.

В нашей конфигурации мы зарезервировали 256 MB под /chroot. Это связано с тем, что на нем будут располагаться файлы из Apache DocumentRoot и другие исполняемые файлы, связанные с Apache. Заметим, что размер каталога Apache на /chroot зависит от общего объема занимаемого файлами из "DocumentRoot". Если вы не планируете использовать Apache, то можете уменьшить размер этого раздела до 10 MB. Этого должно хватить для DNS-сервера.

Минимальные размеры разделов.

Ниже приведены минимальные размеры разделов при которых система корректно функционирует. Это действительно самые минимальные цифры. Они взяты исходя из размеров старых жестких дисков - 512 MB.

/ 35MB
/boot 5MB
/chroot      10MB
/home 100MB
/tmp 30MB
/usr 232MB
/var 25MB

Disk Druid.

Disk Druid - это утилита, которая облегчает процедуру разбиения диска на разделы. Выберите "Add" для создания нового раздела, "Edit" для редактирования раздела, "Delete" для удаления раздела и "Reset" сбросить последние изменения в исходное состояние. Когда вы создаете новый раздел перед вами появляется новый экран, в котором вы должны определить ряд параметров.

Точка монтирования (Mount Point): место в файловой системе куда будет монтироваться данный раздел.
Size (Megs): размер нового раздела в мегабайтах.
Partition Type: Тип раздела: Linux native для файловой системы Linux и Swap для Linux Swap раздела.
Если у вас SCSI диск, то устройство называется "/dev/sda", а если IDE диск, то "/dev/hda". Если вы стремитесь к высокой производительности и стабильности, то используйте SCSI диски.
Для описания дисков в Linux используется комбинация из букв и цифр.
Первые две буквы - первые две буквы из названия устройства. Например, "hd" (для IDE дисков) или "sd" (для SCSI дисков).
Следующая буква - Эта буква показывает порядок подключения устройств к интерфейсу.Например, "/dev/hda" (первый IDE диск) и "/dev/hdb" (второй IDE диск).

A swap partition

Swap раздел используется для поддержки виртуальной памяти. Если ваш компьютер имеет 16 MB памяти или меньше, то swap раздел вам просто необходим. Если памяти у вас много больше, то его все равно рекомендуется создавать. Минимальный размер swap-раздела должен быть равен объему RAM, но не меньше 16 MB. Наибольший его размер 1 GB (столько поддерживает ядра серии 2.2). Вы можете создать и использовать более одного swap-раздела. Swap-раздел лучше располагать в начале диска. Физически начало диска находится на внешней части цилиндра, поэтому головка за один оборот охватывает большую поверхность.

Ниже приведен пример разбиения диска при помощи утилиты Disk Druid:

Add
Mount Point: /boot - ваш /boot каталог.
Size (Megs): 5
Partition Type: Linux Native
Ok
Add
Mount Point: /usr - ваш /usr каталог.
Size (Megs): 512
Partition Type: Linux Native
Ok
Add
Mount Point: /home - ваш /home каталог.
Size (Megs): 1146
Partition Type: Linux Native
Ok
Add
Mount Point: /chroot - ваш /chroot каталог.
Size (Megs): 256
Partition Type: Linux Native
Ok
Add
Mount Point: /cache - ваш /cache каталог.
Size (Megs): 256
Partition Type: Linux Native
Ok
Add
Mount Point: /var - ваш /var каталог.
Size (Megs): 256
Partition Type: Linux Native
Ok
Add
Mount Point: - ваш /Swap раздел (не имеет точки монтирования на вашей файловой системе).
Size (Megs): 128
Partition Type: Linux Swap
Ok
Add
Mount Point: /tmp - ваш /tmp каталог.
Size (Megs): 256
Partition Type: Linux Native
Ok
Add
Mount Point: - ваш корневой каталог.
Size (Megs): 256
Partition Type: Linux Native
Ok

По окончании процедуры разбиения диска у вас должна получиться следующее:

Точка монтирования Устройство Объем требуемый Объем выделенный Тип файловой системы
/bootSda15M5MLinux Native
/usrSda5512M512MLinux Native
/homeSda61146M1146MLinux Native
/chrootSda7256M256MLinux Native
/cacheSda8256M256MLinux Native
/varSda9256M256MLinux Native
<Swap>Sda10128M128MLinux Swap
/tmpSda11256M256MLinux Native
/Sda12256M256MLinux Native

Drive      Geom [C/H/S]      Total (M)      Free (M)      Used (M)      Used (%)     
sda [3079/64/32] 3079M 1M 3078M 99%

Сейчас, когда вы разбили диск и определили точки монтирования для разделов, нажмите Next для продолжения. После того, как новые разделы созданы, вам будет предложено отформатировать их. Выберите раздел для инициализации, поставьте "галочку" напротив "проверить диски на плохие блоки" и нажмите Next. Раздел будет отформатирован и станет доступен для использования под Linux.

На следующем экране вам будет предложено выбрать конфигурацию LILO, где вы сможете выбрать куда вы ее хотите проинсталлировать.

  1. В Master Boot Record (MBR)
  2. В первый сектор загрузочного раздела.

Обычно, если Linux будет единственной ОС на вашей машине, то LILO устанавливают в MBR. После этого вам будет предложено настроить сеть и часы. Когда часы будут установлены, нужно выбрать пароль пользователя root и определить конфигурацию идентификации. Для нее не забудьте выбрать:

  1. Включить MD5 пароли
  2. Включить теневые пароли

Включать NIS не надо, так как мы не будем настраивать NIS сервис на нашем сервере.

Компоненты инсталляции (Выбор пакетов для инсталляции)

(All) После того, как вы разбили диск и отформатировали разделы наступает пора выбирать пакеты для инсталляции. По умолчанию, Linux является полнофункциональной системой с большим количеством запущенных сервисов. Большинство из них не нужны и могут нанести вред безопасности сервера. Идеально, когда каждый из сервисов работает на отдельной машине. Многие дистрибутивы Linux сконфигурированы по умолчанию на обслуживание широкого спектра сервисов, так что вам надо сконфигурировать сервер так, чтобы отключить ненужные службы. Предложение использовать важнейшие сервисы на отдельных компьютерах улучшает сетевую безопасность по следующим причинам:

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

Правильная инсталляция Linux - первый шаг к стабильной и безопасной системе. Сначала выберите какие компоненты системы вы хотите проинсталлировать, а затем войдите в каждый из компонентов, чтобы отметить какие пакеты надо устанавливать, а какие нет (Select individual packages). Так как мы инсталлируем сервер, мы не будем устанавливать графический интерфейс (Xfree86). Он на сервере не нужен, меньше процессов, меньше загрузка процессора, меньше загрузка памяти, меньше риск нарушить безопасность системы и т.д. Графический интерфейс обычно используется на рабочих станциях. Выберите следующие компоненты для инсталляции.

Теперь можете выбрать пакеты внутри каждого компонента.

Замечание: Выбрать эту опцию (Select individual packages) очень важно до продолжения процедуры инсталляции.

Выбор индивидуальных пакетов

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

(6.1)
Applications/File: git
Applications/Internet finger, ftp, fwhois, ncftp, rsh, rsync, talk, telnet
Applications/Publishing ghostscript, ghostscript-fonts, mpage, rhs- printfilters
Applications/System arpwatch, bind-utils, knfsd-clients, procinfo, rdate, rdist, screen, ucd-snmp-utils
Documentation indexhtml
System Environment/Base chkfontpath, yp-tools
System Environment/Daemons XFree86-xfs, lpr, pidentd, portmap, routed, rusers, rwho, tftp, ucd-snmp, ypbind
System Environment/Libraries XFree86-libs, libpng
User Interface/X XFree86-75dpi-fonts, urw-fonts

(6.2)
Applications/File: git
Applications/Internet finger, ftp, fwhois, ncftp, rsh, rsync, talk, telnet
Applications/Publishing ghostscript, ghostscript-fonts, groff-perl, pnm2ppa, mpage, rhs-printfilters
Applications/System arpwatch, bind-utils, rdate, rdist, screen, ucd-snmp-utils
Documentation indexhtml
System Environment/Base chkfontpath, yp-tools
System Environment/Daemons XFree86-xfs, lpr, pidentd, portmap, routed, rusers, rwho, tftp, ucd-snmp, ypbind, finger-server, nfs-utils, pidentd, portmap, rsh- server, rusers-server, rwall-server, talk-server, telnet-server, tftp-server, ypserv
System Environment/Libraries XFree86-libs, libpng
User Interface/X urw-fonts

Далее мы приведем описание каждой программы которые мы хотим деинсталлировать. Кто-нибудь может спросить, почему мы удаляем finger, ftp, fwhois и telnet на сервере? Первое, это то, что все эти программы по своей сути небезопасны. Представьте, что хакер имеет доступ на ваш новый сервер, тогда он сможет использовать finger, ftp, fwhois и telnet для доступа к другим компьютерам в вашей сети. Если этих программ нет на сервере, то ему придется использовать их в другом месте или попытаться проинсталлировать их у вас, а это легко можно отследить, например, при помощи Tripwire. Хотя такие сервисы как telnet, finger, talk, rsh, rusers, rwall и tftp в Red Hat 6.2 разделены на серверные и клиентские пакеты, мы все равно рекомендуем деинсталлировать их из соображений повышения безопасности.


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

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

Глава 2 Инсталляция вашего Linux сервера (Часть 2)

В этой главе
Определите ваше аппаратное обеспечение
Создайте загрузочный и корневой диски
Классы и методы инсталляции
Разбиение диска (Disk Druid)
Компоненты инсталляции (Выбор пакетов для инсталляции)
Выбор индивидуальных пакетов
Описания программ, которые должны быть деинсталлированы из соображений безопасности
Как использовать команды RPM
Запуск и остановка демонов
Описание программы, которые должны быть удалены после инсталляции сервера
Программы, которые должны быть установлены после инсталляции сервера
Программы установленные на вашем сервере
Добавьте цветов на ваш терминал
Обновление программ до их последних версий

Описания программ, которые должны быть деинсталлированы из соображений безопасности

Ниже приводится список программ и краткие описания их использования. Для улучшения безопасности мы должны деинсталлировать их. Для получения большей информации и пояснений об их особенностях и использовании читайте руководство пользователя Red Hat или инсталлировав пакет дайте команду "rpm -qi foo". По ней вы получите краткое описание пакета. Не забудьте потом деисталлировать этот пакет.

Applications/File:
(All) GIT (GNU Interactive Tools) предоставляет расширяемый броузер файловой системы, с ASCII/hexadecimal программой просмотра, программой просмотра/уничтожения процессов, и другими утилитами и shell-скриптами (ненужный пакет).

Applications/Internet:
(All) Finger это утилита, которая позволяет пользователям получить информацию о пользователях системы (регистрационное имя, домашний каталог, как долго он подключен к системе и т.д. (Риск для безопасности).
(All) В пакет ftp входит стандартный консольный UNIX-овый ftp-клиент. FTP это протокол пересылки файлов который широко используется в Интернет для пересылки и архивирования файлов. (Риск для безопасности).
(All) Программа fwhois позволяет пользователям организовывать запросы к базам данных whois. (Риск для безопасности)
(All) Ncftp это улучшенный ftp-клиент. Среди улучшений можно выделить редактирование командной строки, истории команд, рекурсивное закачивание файлов, автоматическое подключение к системе как анонимный пользователь и др. (Риск для безопасности, ненужный пакет).
(All) Пакет rsh включает комплект программ, которые позволяют пользователям выполнять команды на удаленной машине, присоединяться к удаленным машинам и копировать файлы между компьютерами (Риск для безопасности).
(All) Пакет ntalk содержит клиентскую программу и демон для организации чатов между пользователями с использованием протокола Internet talk. (Риск для безопасности).
(All) Telnet - это популярная программа для подключения к удаленным системам через Интернет. (Риск для безопасности).

Applications/Publishing:
(All) Ghostscript это набор программного обеспечения , которое предоставляет интерпретатор PostScript(TM), набор C подпрограмм (библиотека Ghostscript, которая обеспечивает графическую совместимость в интерпретаторе PostScript) и интерпретатор Portable Document Format (PDF) файлов. (Ненужный пакет)
(All) ghostscript-fonts могут использоваться интерпретатором GhostScript во время визуализации текста. Они идут в дополнение к общим шрифтам GhostScript и X11. (ненужный пакет).
(All) Утилита mpage получает на вход текстовый или PostScript файл, изменяет размер текста и печатает файл на PostScript принтере, умещая на одной странице несколько страниц текста. (Ненужный пакет, нет принтеров установленных на сервере).
(All) Пакет rhs-printfilters содержит комплект фильтров печати, которые первоначально предназначались для Red Hat printtool. (Не нужный пакет, нет принтеров установленных на сервере).
(6.2) Пакет groff-perl содержит набор команд и фильтр печати используемого в среде принтера (Ненужный пакет, нет принтеров проинсталлированных на сервере).
(6.2) Пакет pnm2ppa содержит драйвер цветной печати для принтера HP PPA. (Не нужный пакет, нет принтеров установленных на сервере).

Applications/System:
(All) Пакет arpwatch включает две программы arpwatch и arpsnmp. Эти обе утилиты предназначены для мониторинга сети. Они следят за сетевым трафиком в Ethernet или FDDI сетях, ведут базу данных участников соединений и могут пересылать отчеты об определенных изменениях по почте. (Не нужный пакет).
(All) Bind-utils - это набор утилит, предназначенных для организации запросов к DNS серверам и поиска информации об Интернет хостах. (Мы будем компилировать их позже).
(6.1) knfsd-clients пакет содержит программу showmount. Showmount запрашивает демон монтирования на удаленной машине информацию о NFS сервере. (Риск для безопасности).
(6.1) Команда procinfo берет информацию из каталога /proc, форматирует ее и отображает на стандартном устройстве вывода. Вы можете получать информацию о вашей системе. (Ненужный пакет, существуют другие методы получения информации).
(All) Утилита rdate получает информацию о дате и времени от удаленной машины в сети по протоколу описанному в RFC 868. (Риск для безопасности).
(All) Программа rdist управляет идентичностью копий файлов на разных компьютерах. Если возможно, rdist будет хранить данные о владельце файла, группе, правах доступа и времени модификации, и она может обновить программу если она существует. (риск для безопасности).
(All) Пакет ucd-snmp содержит различные утилиты, которые можно использовать с проектом сетевого управления UCD-SNMP (Ненужный пакет. Риск для безопасности).
(All) Утилита screen позволяет вам иметь несколько соединений на одном терминале. Она полезна тем пользователям, которые присоединяются telnet-ом к удаленной машине или используют "тупой" терминал, но хотят иметь более одного входа в систему (Ненужный пакет).

Documentation:
(All) Пакет indexhtml включает HTML страницы и графические изображения для страниц с приглашениями в вашем веб-броузере, которые вы видите после полной инсталляции Red Hat Linux. (Ненужный пакет).

System Environment/Base:
(All) Chkfontpath это простая терминальная программа для добавления, удаления и просмотра каталогов включенных в поисковые пути для шрифтов X сервера. (ненужный пакет).
(All) Network Information Service (NIS) - это система, которая предоставляет сетевую информацию (регистрационное имя, пароль, имя домашнего каталога, информацию о группах) всем компьютерам в сети. (Риск для безопасности).

System Environment/Daemons:
(All) XFree86-xfs - это сервер шрифтов для Xfree86. Вы можете предоставлять шрифты другим удаленным X серверам и они смогут использовать все шрифты которые есть у вас на сервере, даже если их нет у них на компьютере. (Ненужный пакет).
(All) Пакет lpr предоставляет базовую системную утилиту для управления сервисом печати (Ненужный пакет).
(All) Пакет pidentd включает демон ident, который реализует сервер идентификации, описанный в RFC1413. Identd смотрит за определенными TCP/IP соединениями и возвращает оба имени пользователей и другую информацию о процессах, которые владеют соединением. (Ненужный пакет. Многие машины в сети не имеют подобного демона или выключают его.)
(All) Программа portmapper - это защитная утилита, которая предупреждает кражу из NIS (YP), NFS важной информации через portmapper. Portmapper управляет RPC соединениями, которые используются такими протоколами как NFS и NIS. (Ненужный пакет. Риск для безопасности).
(6.1) Routed - это демон маршрутизации, который обрабатывает входящий RIP трафик и широковещательный исходящий RIP трафик о сетевых маршрутах, согласно таблицам маршрутизации. Эти таблицы очень важны для сетевого компьютера, по ним он определяет куда надо посылать пакеты. (Ненужный пакет. Риск для безопасности).
(All) Программа rusers позволяет пользователям узнавать кто присоединен к удаленным компьютерам в сети. Она выдает результаты подобные команду who, но для определенного списка компьютеров или для всех машин в локальной сети (Риск для безопасности).
(All) Программа rwho выводит результаты подобно команде who, но для всех компьютеров в локальной сети на которых запущен демон rwho. (Риск для безопасности).
(6.1) Trivial File Transfer Protocol (TFTP) обычно используется для загрузки бездисковых рабочих станций. Пакет tftp предоставляет пользовательский интерфейс к TFTP, который позволяет пересылать файлы с или на удаленную машину (Риск для безопасности, ненужный пакет).
(All) SNMP (Simple Network Management Protocol) это протокл используемый для сетевого управления. (Ненужный пакет, риск для безопасности).
(6.2) пакет finger-server содержит демон finger, который запускается из /etc/inetd.conf и позволяет удаленным пользователям получать информацию о пользователях на сервере. (риск для безопасности).
(6.2) Пакет nfs-utils предоставляет утилиты и демон для корневого сервера NFS. Он должен быть проинсталлирован если вы планируете предоставлять NFS сервис. (риск для безопасности, NFS сервис не инсталлирован на сервере).
(6.2) Пакет rsh-server содержит сервер нужный для работы rsh, rlogin, rcp, которые предоставляют доступ к командам на удаленной машине. (риск для безопасности).
(6.2) Пакет rusers-server содержит сервер, который принимает пользовательские запросы и позволяет им узнать кто подключен к серверу (риск для безопасности)
(6.2) Пакет rwall-server содержит демон, который позволяет принимать сообщения от удаленных пользователей (Риск для безопасности)
(6.2) Пакет talk-server содержит демон, который позволяет вам беседовать (chat) из терминала с пользователями из удаленных UNIX систем (риск для безопасности).
(6.2) Пакет telnet-server содержит демон который реализует telnet протокол на вашем сервере (риск для безопасности)
(6.2) Пакет tftp-server содержит демон реализующий TFTP сервер на вашем компьютере, который позволяет пересылать файлы на или с удаленных машин (риск для безопасности)
(6.2) Пакет ypserv это NIS (Network Information Service) сервер, который предоставляет сетевую информацию (NIS) всем машинам в сети (риск для безопасности, мы не используем его на нашем сервере).

System Environment/Libraries:
(All) XFree86-libs включает общие библиотеки, которые могут использовать большинство программ, запускаемых под X (Ненужный пакет).
(All) Пакет libpng включает библиотеку функций для создания и манипулирования PNG (Portable Network Graphics) изображениями. PNG это растровый графический формат подобный GIF. (Ненужный пакет).

User Interface/X:
(6.1) XFree86-75dpi-fonts включает 75 dpi шрифты используемые на большинстве X Window Systems. (ненужный пакет).
(All) urw-fonts включает свободные версии 35 PostScript шрифтов. (Ненужный пакет).

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

Как использовать команды RPM.

Эта секция включает обзор основных режимов используемых в RPM для инсталляции, деинсталляции, обновления, организации запросов, просмотра описаний, проверки и создания RPM пакетов на вашей Linux системе. Вы должны быть с этими командами "на ты", потому что дальше они будут часто использоваться в этой книге.

Для инсталляции RPM пакетов используйте команду:
[root@deep]# rpm -ivh foo-1.0-2.i386.rpm
RPM пакеты имеют имена файлов подобные следущему foo-1.0-2.i386.rpm, которое включает следующие составляющие: имя пакета (foo), версия (1.0), релиз (2) и архитектура (i386).

Для удаления RPM пакета используйте команду:
[root@deep]# rpm -e foo
Заметим, что мы используем имя пакета "foo", а не оригинальное имя пакета "foo-1.0-2.i386.rpm".

Для обновления RPM пакета, используйте команду:
[root@deep]# rpm -Uvh foo-1.0-2.i386.rpm
RPM автоматически деинсталлирует старую версию пакета foo и инсталлирует новую. Всегда используйте "rpm -Uvh" для инсталляции, так как это работает хорошо даже когда предыдущая версия не установлена.

Вопрос о RPM пакете:
[root@deep]# rpm -q foo
Эта команда будет выводить имя пакета, версию и номер релиза установленного пакета. Используйте эту команду для проверки установлен ли у вас пакет или нет.

Для получения информации о пакетет используйте команду:
[root@deep]# rpm -qi foo
Эта команда выводит информацию о пакете, включая имя, версию и описание установленной программы.

Для получения списка файлов в пакете:
[root@deep]# rpm -ql foo
Эта команда выдаст список всех файлов в инсталлированом пакете.

Для проверки сигнетуры пакета используйте команду:
[root@deep]# rpm --checksig foo
Эта команды проверяет PGP сигнатуру пакета foo, сравнивая оригинальную и интегрированную. Конфигурационная информация PGP читается из конфигурационного файла. Всегда используйте эту команду до инсталляции пакета в вашей системе. До использования этой команды у вас должно быть проинсталлирована программное GnuPG или Pgp.

Для инсталляции пакета из исходных файлов используйте команду:
[root@deep]# rpm -ivh --rebuild foo.src.rpm
Приведенная выше команда будет конфигурировать и компилировать пакет "foo", создавая двоичный RPM файл в каталоге "/usr/src/redhat/RPMS/i386/". Затем вы можете проинсталлировать пакет так, как вы это делаете обычно.

Запуск и останов сервисных демонов.

После загрузки, ядро запускает процесс Init, а он уже запускает все остальные процессы необходимые для работы системы (демон Apache, все сетевые демоны и все то, что вы хотите запустить).

Как же init запускает и останавливает процессы? Каждый из скриптов, находящихся в каталоге "/etc/rc.d/init.d/", может принять несколько аргументов, в том числе "start" и "stop". Вы можете запустить эти скрипты и в ручную.

Например:

Для старта httpd Веб сервера вручную
[root@deep]# /etc/rc.d/init.d/httpd start
Starting httpd:      [ OK ]

Для остановки httpd Веб сервера вручную.
[root@deep]# /etc/rc.d/init.d/httpd stop
Shutting down http:      [ OK ]

Для перезагрузки httpd Веб сервера вручную.
[root@deep /]# /etc/rc.d/init.d/httpd restart
Shutting down http:      [ OK ]
Starting httpd:      [ OK ]

Просмотрите содержимое каталога"/etc/rc.d/init.d/", чтобы узнать какие сервисы доступны и используйте команды start|stop для работы с ними.

Программное обеспечение, которое должно быть деинсталировано после установки сервера

Red Hat Linux инсталлирует ряд программ в вашей системе от которых вы не можете отказаться в процессе установки. Из-за этого вы должны удалить эти программы вручную после инсталляции сервера.

(6.1)(6.2)
pumppump
mt-stmt-st
ejecteject
mailcapmailcap
apmdapmd
kernel-pcmcia-cs        kernel-pcmcia-cs    
linuxconflinuxconf
getty_psgetty_ps
setconsole
isapnptoolsisapnptools
setserialsetserial
kudzukudzu
raidtoolsraidtools
gnupggnupg
redhat-logosredhat-logos
redhat-releaseredhat-release
gdgd
pciutilspciutils
rmtrmt

Используйте следующие команды RPM для удаления этих программ
rpm -e softwarenames
где "softwarenames" это имя программы для деинсталляции, например foo. Программы подобные apmd, kudzu и sendmail являются демонами, которые запускаются как процессы. Лучше остановить эти процессы прежде чем удалять их.

Для остановки этих процессов используйте следующие команды:
[root@deep]# /etc/rc.d/init.d/apmd stop
[root@deep]# /etc/rc.d/init.d/sendmail stop
[root@deep]# /etc/rc.d/init.d/kudzu stop

Сейчас вы можете спокойно деисталлировать их и другие программы как описано ниже:

Шаг 1

(6.1) Удаление определенных программ.
[root@deep /]# rpm -e --nodeps pump mt-st eject mailcap apmd kernel-pcmcia-cs linuxconf getty_ps setconsole isapnptools setserial kudzu raidtools gnupg redhat- logos redhat-release gd pciutils rmt

(6.2) Удаление определенных программ.
[root@deep /]# rpm -e --nodeps pump mt-st eject mailcap apmd kernel-pcmcia- cs linuxconf getty_ps isapnptools setserial kudzu raidtools gnupg redhat-logos redhat-release gd pciutils rmt

Шаг 2

(All) Ручное удаление файла linux.conf-installed.
[root@deep]# rm -f /etc/conf.linuxconf-installed
Заметим, что конфигурационный файл связанный с linuxconf должен быть удален вручную.

Программа hdparm необходима для IDE дисков, но не нужна для SCSI. Если у вас IDE диски вам нужно оставить эту программу иначе можете смело ее удалять.
[root@deep /]# rpm -e hdparm

Программы kbdconfig, mouseconfig и timeconfig необходимы для настройки клавиатуры, мыши и временной зоны. После того как все настроено, навряд ли придется, что-либо менять, поэтому можно удалять эти программы. Если в дальнейшем вам потребуется изменить настройки системы, то можно будет проинсталлировать их с CDROM.
[root@deep /]# rpm -e kbdconfig mouseconfig timeconfig authconfig ntsysv setuptool

Даже если ваша машина не будет выступать в роли почтового сервера все равно программа sendmail всегда будет нужна ей для отправки сообщений пользователю root от различного программного обеспечения. Sendmail это полнофункциональный почтовый агент доставки (Mail Transport Agent (MTA)), который занимается пересылкой почты с одной машины на другую. В Интернет sendmail занимается пересылкой почты из одной сети в другую. Sendmail может быть настроен для выполнения различных функций, как агент доставки почты к центральному почтовому узлу, как центральный почтовый хаб или просто как независимо существующий MTA. В зависимости от того, что вы хотите получить от sendmail, вы можете настроить его на выполнение различных задач. Из этих соображений вам надо удалить sendmail с вашего сервера и установить его так, как будет описано ниже в этой книге.
[root@deep /]# rpm -e sendmail

Описание программы, которые должны быть удалены после инсталляции Сервера

(All) DHCP (Dynamic Host Configuration Protocol) и BOOTP (Boot Protocol) являются протоколами, которые позволяют отдельным устройствам в IP-сетях получать конфигурационную информацию (ip-адрес, сетевая маска, широковещательный адрес и т.д.) от серверов. (Ненужный пакет).
(All) Пакет mt-st включает программное обеспечения для управления устройствами чтения с магнитных лент. Mt (для устройств magnetic tape devices) и st (для SCSI tape devices) может контролировать перемотку и вытаскивание ленты, пропуск файлов, блоков и пр. (Ненужный пакет).
(All) Программа eject позволяет пользователям извлекать преносимые утсройства информации (обычно это CDROM, гибкие диски или диски Iomega Jaz и Zip) используя программные средства. (ненужный пакет).
(All) Файл mailcap используется программой metamail, которая использует этот файл, чтобы определить как должны быть выведены нетекстовые и мультимедиа материалы (Ненужный пакет).
(All) Apmd - это демон расширенного управления питания и сопутствующие ему утилиты. Он может следить за батареями вашего ноутбука и предупредить всех пользователей если они почти разрядились (Ненужный пакет).
(All) Пакет kernel-pcmcia-cs для лаптоп компьютеров (и некоторые не-лаптоп), которые поддерживают PCMCI-карты расширения. (Ненужный пакет).
(All) Linuxconf это чрезвычайно удобная утилита для настройки системы. Она предоставляет вам четыре вида интерфейса: текстовый, в виде текстовых меню, графический для X11 и веб-интерфейс. (Ненужная программа, содержащая много ошибок).
(All) Пакет getty_ps содержит программы getty и uugetty, базовые программы для выполнения процесса login на Red Hat системе. Getty и uugetty используется для приемы входов в систему с консоли или терминала. (ненужный пакет).
(6.1) Setconsole базовая системная утилита для установки файлов /etc/inittab, /dev/systty и /dev/console для манипулирования новыми консолями. Консолью может быть любой локальный терминал (т.е напрямую присоединенный через видео карту) или последовательный терминал. (ненужный пакет).
(All) Пакет isapnptools включает утилиты для настройки ISA Plug-and-Play (PnP) карт и плат, которые совместимы со спецификацией ISA Plug-and-Play v.1.0a. (ненужный пакета).
(All) Setserial - это базовая системная утилита для просмотра и установки информации о последовательных портах. Setserial может находить и позволяет вам изменить I/O порт и IRQ, которые использует последовательное устройство. (Ненужный пакет).
(All) Kudzu - это утилита для автоматического определения аппаратного обеспечения. Во время загрузки, она может определить какие устройства были добавлены и удалены из вашей системы. (ненужный пакет).
(All) Пакет raidtools включает утилиты, которые нужны для установки и управления программных RAID устройств (использование комбинации из двух и более дисковых накопителей для защиты информации от ошибок и улучшения производительности). (В зависимости от того нужен вам RAID или нет).
(All) GnuPG - это GNU утилита для безопасного общения и хранения данных. Вы можете использовать ее для шифрования данных и создания цифровых ключей. Она включает расширенную систему управления ключами и совместима с предлагаемым OpenPGP Интернет стандартом описанном в RFC2440. (Мы установим этот пакет позже).
(All) Пакет redhat-logos включает файлы из Red Hat "Shadow Man" logo и RPM logo ("Logos"). (Ненужный пакет).
(All) redhat-release содержит Red Hat рели файлы. (Ненужный пакет).
(All) Gd - это графическая библиотека для создангия .gif файлов. Gd позволяет ваши программам быстро рисовать (линии, дуги, текст, цвета и вставки из других изображений) и записывать результаты в .gif файлы.(ненужный пакет).
(All) Этот пакет (pciutils) содержит программы необходимые для контроля и установки устройств подключенных к шине PCI (Ненужный пакет).
(All) Утилита rmt предоставляет удаленный доступ для резервного копирования (риск для безопасности, так как работа rmt зависит от rsh).


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

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

Глава 2 Инсталляция вашего Linux сервера (Часть 3)

В этой главе
Определите ваше аппаратное обеспечение
Создайте загрузочный и корневой диски
Классы и методы инсталляции
Разбиение диска (Disk Druid)
Компоненты инсталляции (Выбор пакетов для инсталляции)
Выбор индивидуальных пакетов
Описания программ, которые должны быть деинсталлированы из соображений безопасности
Как использовать команды RPM
Запуск и остановка демонов
Описание программы, которые должны быть удалены после инсталляции сервера
Программы, которые должны быть установлены после инсталляции сервера
Программы установленные на вашем сервере
Добавьте цветов на ваш терминал
Обновление программ до их последних версий

Программное обеспечение, которое должно быть установлены после инсталляции сервера.

Чтобы иметь возможность компилировать программы нужные вашему серверу вы должны проинсталлировать ряд RPM пакетов. Эта часть инсталляции очень важна и вы должны обязательно установить все программное обеспечение описанное ниже. Эти пакеты находятся на Red Hat Part 1 CD-ROM в каталоге RedHat/RPMS.

Шаг 1.

Мы монтируем CDROM и перемещаемся в каталог RPMS:
[root@deep]# mount /dev/cdrom /mnt/cdrom/
[root@deep]# cd /mnt/cdrom/RedHat/RPMS/
Это минимальное количество программного обеспечения необходимого для компиляции большинства программ нужных вашему серверу. Если у вас возникают проблему с компиляцией каких-либо программ, внимательно прочитайте файл README, чтобы выяснить, что должно быть установлено до компиляции.

(6.1)(6.2)
autoconf-2.13-5.noarch.rpmautoconf-2.13-5.noarch.rpm
m4-1.4-12.i386.rpmm4-1.4-12.i386.rpm
automake-1.4-5.noarch.rpmautomake-1.4-6.noarch.rpm
dev86-0.14.9-1.i386.rpmdev86-0.15.0-2.i386.rpm
bison-1.28-1.i386.rpmbison-1.28-2.i386.rpm
byacc-1.9-11.i386.rpmbyacc-1.9-12.i386.rpm
cdecl-2.5-9.i386.rpmcdecl-2.5-10.i386.rpm
cpp-1.1.2-24.i386.rpmcpp-1.1.2-30.i386.rpm
cproto-4.6-2.i386.rpmcproto-4.6-3.i386.rpm
ctags-3.2-1.i386.rpmctags-3.4-1.i386.rpm
egcs-1.1.2-24.i386.rpmegcs-1.1.2-30.i386.rpm
ElectricFence-2.1-1.i386.rpmElectricFence-2.1-3.i386.rpm
flex-2.5.4a-7.i386.rpmflex-2.5.4a-9.i386.rpm
gdb-4.18-4.i386.rpmgdb-4.18-11.i386.rpm
kernel-headers-2.2.12-20.i386.rpmkernel-headers-2.2.14-5.0.i386.rpm
glibc-devel-2.1.2-11.i386.rpmglibc-devel-2.1.3-15.i386.rpm
make-3.77-6.i386.rpmmake-3.78.1-4.i386.rpm
patch-2.5-9.i386.rpmpatch-2.5-10.i386.rpm

Шаг 2.

(6.1) Инсталлируем все пакеты описанные выше при помощи одной команды.
[root@deep RPMS]# rpm -Uvh autoconf-2.13-5.noarch.rpm m4-1.4-12.i386.rpm automake-1.4-5.noarch.rpm dev86-0.14.9-1.i386.rpm bison-1.28-1.i386.rpm byacc-1.9-11.i386.rpm cdecl-2.5-9.i386.rpm cpp-1.1.2-24.i386.rpm cproto-4.6- 2.i386.rpm ctags-3.2-1.i386.rpm egcs-1.1.2-24.i386.rpm ElectricFence-2.1- 1.i386.rpm flex-2.5.4a-7.i386.rpm gdb-4.18-4.i386.rpm kernel-headers- 2.2.12-20.i386.rpm glibc-devel-2.1.2-11.i386.rpm make-3.77-6.i386.rpm patch- 2.5-9.i386.rpm

autoconf##################################################
m4##################################################
automake##################################################
dev86##################################################
bison##################################################
byacc##################################################
cdecl##################################################
cpp##################################################
cproto##################################################
ctags##################################################
egcs##################################################
ElectricFence##################################################
Flex##################################################
Gdb##################################################
kernel-headers    ##################################################
glibc-devel##################################################
make##################################################
patch##################################################

(6.2) Инсталлируем все пакеты описанные выше при помощи одной команды.
[root@deep RPMS]# rpm -Uvh autoconf-2.13-5.noarch.rpm m4-1.4-12.i386.rpm automake-1.4-6.noarch.rpm dev86-0.15.0-2.i386.rpm bison-1.28-2.i386.rpm byacc-1.9-12.i386.rpm cdecl-2.5-10.i386.rpm cpp-1.1.2-30.i386.rpm cproto-4.6- 3.i386.rpm ctags-3.4-1.i386.rpm egcs-1.1.2-30.i386.rpm ElectricFence-2.1- 3.i386.rpm flex-2.5.4a-9.i386.rpm gdb-4.18-11.i386.rpm kernel-headers-2.2.14- 5.0.i386.rpm glibc-devel-2.1.3-15.i386.rpm make-3.78.1-4.i386.rpm patch-2.5- 10.i386.rpm
autoconf##################################################
m4##################################################
automake##################################################
dev86##################################################
bison##################################################
byacc##################################################
cdecl##################################################
cpp##################################################
cproto##################################################
ctags##################################################
egcs##################################################
ElectricFence##################################################
flex##################################################
gdb##################################################
kernel-headers    ##################################################
glibc-devel##################################################
make##################################################
patch##################################################

Шаг 3.

Выходим из системы и снова входим в нее, чтобы все изменения сработали.
[root@deep]# exit

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

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

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

Итак, наличие, например, специализированного сервера для разработки и тестирования, позволит вам не устанавливать компиляторы на других серверах каждый раз когда вы хотите обновить программное обеспечение. Для получения большей информации смотрите главу 9 "Возможности компилятора".

Программы установленные на вашем сервере.

Шаг 1.

Итак, если вы выбрали пользовательский метод инсталляции, то ниже перечислены все программы, которые должны быть установлены на сервере. Этот список должен в точности совпадать с файлом install.log, находящимся в "/tmp". Не забудьте установить все программы о которых было написано в разделе " Программное обеспечение которое должно быть проинсталлировано после установки сервера".

(6.1)
Installing setup.Installing gzip.Installing sendmail.
Installing filesystem.Installing gpm.Installing setconsole.
Installing basesystem.Installing groff.Installing setserial.
Installing ldconfig.Installing hdparm.Installing setuptool.
Installing glibc.Installing initscripts.Installing shapecfg.
Installing shadow-utils.Installing ipchains.Installing slang.
Installing mktemp.Installing isapnptools.Installing slocate.
Installing termcap.Installing kbdconfig.Installing stat.
Installing libtermcap.Installing kernel.Installing sysklogd.
Installing bash.Installing kernel-pcmcia-cs.Installing tar.
Installing MAKEDEV.Installing kudzu.Installing tcp_wrappers.
Installing SysVinit.Installing ld.so.Installing tcpdump.
Installing XFree86-Mach64.Installing less.Installing tcsh.
Installing chkconfig.Installing libc.Installing time.
Installing apmd.Installing libstdc++.Installing timeconfig.
Installing ncurses.Installing lilo.Installing timed.
Installing info.Installing pwdb.Installing tmpwatch.
Installing fileutils.Installing pam.Installing traceroute.
Installing grep.Installing sh-utils.Installing utempter.
Installing ash.Installing redhat-release.Installing util-linux.
Installing at.Installing linuxconf.Installing vim-common.
Installing authconfig.Installing logrotate.Installing vim-minimal.
Installing bc.Installing losetup.Installing vixie-cron.
Installing bdflush.Installing lsof.Installing which.
Installing binutils.Installing mailcap.Installing zlib.
Installing bzip2.Installing mailx.
Installing sed.Installing man.
Installing console-tools.Installing mingetty.
Installing e2fsprogs.Installing mkbootdisk.
Installing rmt.Installing mkinitrd.
Installing cpio.Installing modutils.
Installing cracklib.Installing mount.
Installing cracklib-dicts.Installing mouseconfig.
Installing crontabs.Installing mt-st.
Installing textutils.Installing ncompress.
Installing dev.Installing net-tools.
Installing diffutils.Installing netkit-base.
Installing dump.Installing newt.
Installing ed.Installing ntsysv.
Installing eject.Installing passwd.
Installing etcskel.Installing pciutils.
Installing file.Installing perl.
Installing findutils.Installing procmail.
Installing gawk.Installing procps.
Installing gd.Installing psmisc.
Installing gdbm.Installing pump.
Installing getty_ps.Installing python.
Installing glib.Installing quota.
Installing gmp.Installing raidtools.
Installing gnupg.Installing readline.
Installing redhat-logos.Installing rootfiles.
Installing rpm.Installing sash.
(6.2)
Installing setup.Installing filesystem.Installing basesystem.
Installing ldconfig.Installing glibc.Installing shadow-utils.
Installing mktemp.Installing termcap.Installing libtermcap.
Installing bash.Installing MAKEDEV.Installing SysVinit.
Installing XFree86-Mach64.Installing anacron.Installing chkconfig.
Installing apmd.Installing ncurses.Installing info.
Installing fileutils.Installing grep.Installing ash.
Installing at.Installing authconfig.Installing bc.
Installing bdflush.Installing binutils.Installing bzip2.
Installing sed.Installing console-tools.Installing e2fsprogs.
Installing rmt.Installing cpio.Installing cracklib.
Installing cracklib-dicts.Installing crontabs.Installing textutils.
Installing dev.Installing diffutils.Installing dump.
Installing ed.Installing eject.Installing etcskel.
Installing file.Installing findutils.Installing gawk.
Installing gd.Installing gdbm.Installing getty_ps.
Installing glib.Installing gmp.Installing gnupg.
Installing gpm.Installing groff.Installing gzip.
Installing hdparm.Installing inetd.Installing initscripts.
Installing ipchains.Installing iputils.Installing isapnptools.
Installing kbdconfig.Installing kernel.Installing kernel-pcmcia-cs.
Installing kernel-utils.Installing kudzu.Installing ld.so.
Installing less.Installing libc.Installing libstdc++.
Installing lilo.Installing pwdb.Installing pam.
Installing sh-utils.Installing redhat-release.Installing linuxconf.
Installing logrotate.Installing losetup.Installing lsof.
Installing mailcap.Installing mailx.Installing man.
Installing mingetty.Installing mkbootdisk.Installing mkinitrd.
Installing modutils.Installing mount.Installing mouseconfig.
Installing mt-st.Installing ncompress.Installing net-tools.
Installing newt.Installing ntsysv.Installing passwd.
Installing pciutils.Installing perl.Installing popt.
Installing procmail.Installing procps.Installing psmisc.
Installing pump.Installing quota.Installing raidtools.
Installing readline.Installing redhat-logos.Installing rootfiles.
Installing rpm.Installing sash.Installing sendmail.
Installing setserial.Installing setuptool.Installing shapecfg.
Installing slang.Installing slocate.Installing stat.
Installing sysklogd.Installing tar.Installing tcp_wrappers.
Installing tcpdump.Installing tcsh.Installing time.
Installing timeconfig.Installing tmpwatch.Installing traceroute.
Installing utempter.Installing util-linux.Installing vim-common.
Installing vim-minimal.Installing which.
Installing zlib.Installing vixie-cron.

Шаг 2.

После того как вы деинсталлировали все программы, которые должны быть удалены после установки сервера, и после установки дополнительных пакетов необходимых для компиляции программ на сервере мы должны проверить список вех инсталлированных RPM пакетов при помощи команды
[root@deep /]# rpm -qa > installed_rpm
опции -qa выводят список всех проинсталлированных программ и знак ">" перенаправляет этот список в файл installed_rpm.

(6.1) Содержимое файла installed_rpm должно выглядеть так:

setup-2.0.5-1filesystem-1.3.5-1basesystem-6.0-4
ldconfig-1.9.5-15glibc-2.1.2-11shadow-utils-19990827-2
mktemp-1.5-1termcap-9.12.6-15libtermcap-2.0.8-18
bash-1.14.7-16MAKEDEV-2.5-2SysVinit-2.77-2
chkconfig-1.0.7-2ncurses-4.2-25info-3.12h-2
fileutils-4.0-8grep-2.3-2ash-0.2-18
at-3.1.7-11m4-1.4-12bdflush-1.5-10
binutils-2.9.1.0.23-6bzip2-0.9.5c-1sed-3.02-4
console-tools-19990302-17e2fsprogs-1.15-3byacc-1.9-11
cpio-2.4.2-13cracklib-2.7-5cracklib-dicts-2.7-5
crontabs-1.7-7textutils-2.0-2dev-2.7.10-2
diffutils-2.7-16dump-0.4b4-11ed-0.2-12
bison-1.28-1etcskel-2.0-1file-3.27-3
findutils-4.1-32gawk-3.0.4-1cdecl-2.5-9
gdbm-1.8.0-2autoconf-2.13-5glib-1.2.5-1
gmp-2.0.2-10cpp-1.1.2-24gpm-1.17.9-3
groff-1.11a-9gzip-1.2.4-14initscripts-4.48-1
ipchains-1.3.9-3cproto-4.6-2ElectricFence-2.1-1
kernel-2.2.12-20patch-2.5-9ld.so-1.9.5-11
less-340-1libc-5.3.12-31libstdc++-2.9.0-24
lilo-0.21-10pwdb-0.60-1pam-0.68-7
sh-utils-2.0-1automake-1.4-5logrotate-3.3-1
losetup-2.9u-4lsof-4.45-1mailx-8.1.1-9
man-1.5g-6mingetty-0.9.4-10mkbootdisk-1.2.2-1
mkinitrd-2.3-1modutils-2.1.121-14mount-2.9u-4
ctags-3.2-1ncompress-4.2.4-14net-tools-1.53-1
netkit-base-0.10-37newt-0.50-13passwd-0.63-1
perl-5.00503-6flex-2.5.4a-7procps-2.0.4-2
psmisc-18-3python-1.5.2-7quota-1.66-8
gdb-4.18-4readline-2.2.1-5glibc-devel-2.1.2-11
rootfiles-5.2-5rpm-3.0.3-2sash-3.3-1
make-3.77-6shapecfg-2.2.12-2slang-1.2.2-4
slocate-2.0-3stat-1.5-11sysklogd-1.3.31-12
tar-1.13.11-1tcp_wrappers-7.6-9tcpdump-3.4-16
tcsh-6.08.00-6time-1.7-9timed-0.10-23
tmpwatch-2.0-1traceroute-1.4a5-16utempter-0.5.1-2
util-linux-2.9w-24vim-common-5.4-2vim-minimal-5.4-2
vixie-cron-3.0.1-39which-2.8-1zlib-1.1.3-5
dev86-0.14.9-1egcs-1.1.2-24kernel-headers-2.2.12-20

(6.2) Содержимое файла installed_rpm должно выглядеть так:

setup-2.1.8-1filesystem-1.3.5-1basesystem-6.0-4
ldconfig-1.9.5-16glibc-2.1.3-15shadow-utils-19990827-10
mktemp-1.5-2termcap-10.2.7-9libtermcap-2.0.8-20
bash-1.14.7-22MAKEDEV-2.5.2-1SysVinit-2.78-5
anacron-2.1-6chkconfig-1.1.2-1m4-1.4-12
ncurses-5.0-11info-4.0-5fileutils-4.0-21
grep-2.4-3ash-0.2-20at-3.1.7-14
byacc-1.9-12bc-1.05a-5bdflush-1.5-11
binutils-2.9.5.0.22-6bzip2-0.9.5d-2sed-3.02-6
console-tools-19990829-10e2fsprogs-1.18-5cpio-2.4.2-16
cracklib-2.7-5cracklib-dicts-2.7-5crontabs-1.7-7
textutils-2.0a-2dev-2.7.18-3diffutils-2.7-17
dump-0.4b15-1ed-0.2-13cdecl-2.5-10
etcskel-2.3-1file-3.28-2findutils-4.1-34
gawk-3.0.4-2patch-2.5-10gdbm-1.8.0-3
bison-1.28-2glib-1.2.6-3gmp-2.0.2-13
autoconf-2.13-5gpm-1.18.1-7groff-1.15-8
gzip-1.2.4a-2inetd-0.16-4initscripts-5.00-1
ipchains-1.3.9-5iputils-20000121-2cpp-1.1.2-30
cproto-4.6-3kernel-2.2.14-5.0ctags-3.4-1
kernel-utils-2.2.14-5.0ElectricFence-2.1-3ld.so-1.9.5-13
less-346-2libc-5.3.12-31libstdc++-2.9.0-30
lilo-0.21-15pwdb-0.61-0pam-0.72-6
sh-utils-2.0-5automake-1.4-6logrotate-3.3.2-1
losetup-2.10f-1lsof-4.47-2mailx-8.1.1-10
man-1.5h1-1mingetty-0.9.4-11mkbootdisk-1.2.5-3
mkinitrd-2.4.1-2modutils-2.3.9-6mount-2.10f-1
flex-2.5.4a-9ncompress-4.2.4-15net-tools-1.54-4
newt-0.50.8-2passwd-0.64.1-1perl-5.00503-10
popt-1.5-0.48procmail-3.14-2procps-2.0.6-5
psmisc-19-2quota-2.00pre3-2gdb-4.18-11
readline-2.2.1-6make-3.78.1-4rootfiles-5.2-5
rpm-3.0.4-0.48sash-3.4-2shapecfg-2.2.12-2
slang-1.2.2-5slocate-2.1-2stat-1.5-12
sysklogd-1.3.31-16tar-1.13.17-3tcp_wrappers-7.6-10
tcpdump-3.4-19tcsh-6.09-4time-1.7-9
tmpwatch-2.2-1traceroute-1.4a5-18utempter-0.5.2-2
util-linux-2.10f-7vim-common-5.6-11vim-minimal-5.6-11
vixie-cron-3.0.1-40which-2.9-2zlib-1.1.3-6
dev86-0.15.0-2egcs-1.1.2-30
kernel-headers-2.2.14-5.0glibc-devel-2.1.3-15

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

Добавление цветов на ваш терминал

(6.1) Добавив цвета на ваш терминал вы сможете легче различать файлы, папки, архивы, устройства, символические ссылки и исполняемые файлы. На мой взгляд, наличие цветов уменьшает количество ошибок и ускоряет процесс навигации по системе. Описанную ниже процедуру нужно выполнить для Red Hat Linux version 6.1 (Cartman) и более старых версий. В Red Hat 6.2 они включены по умолчанию.

Отредактируйте файл profile (vi /etc/profile) и добавьте в него следующие строки:

# Enable Colour ls
eval `dircolors /etc/DIR_COLORS -b`
export LS_OPTIONS='-s -F -T 0 --color=yes'

Отредактируйте файл bashrc (vi /etc/bashrc) добавив следующие строки:

alias ls='ls --color=auto'

Выйдите и вновь войдите на сервер, чтобы новые переменные окружения вступили в силу.

Обновление программ до их последних версий.

Обновляйте все программное обеспечение на более новые версии, просматривайте список ошибок для дистрибутива Red Hat, который находится по адресу http://www.redhat.com/corp/support/errata/index.html. Страница ошибок, возможно, является лучшим ресурсом для решения 90% проблем в Red Hat Linux.

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

(6.1)
groff-1_15-1_i386.rpm
sysklogd-1_3_31-14_i386.rpm
initscripts-4_70-1_i386.rpm
e2fsprogs-1.17-1.i386.rpm
pam-0_68-10_i386.rpm
gpm-1.19.1-1.i386.rpm
Linux kernel 2.2.14 (linux-2_2_14_tar.gz)

(6.2)
gpm-1.19.1-1.i386.rpm

Замечание: ядро linux очень важно, и должно регулярно обновляться. Читайте ниже о создании ядер для определенных систем.

Вы можете проверить, установлен ли пакет на вашей системе перед обновлением , дав следующую команду:

[root@deep]# rpm -q <softwarename>

где softwarename - имя пакета, которое вы хотите проверить, например, telnet, XFree86 и т.д.


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

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

Глава 20 Опциональные компоненты устанавливаемые с веб-сервером Apache - Webalizer

В этой главе
Webalizer
Конфигурации
Информирование Apache о выходном каталоге Webalizer
Запуск Webalizer вручную в первый раз
Запуск Webalizer автоматически при помощи cron
FAQ-O-Matic
Информирование Apache о месте расположения файлов Faq-O-Matic
Настройка FAQ-O-Matic
Webmail IMP
Установка PHPLib который требуется программе Horde из Webmail IMP
Настройка и создание SQL базы данных Webmail IMP
Настройка вашего конфигурационного файла "php.ini" из PHP4
Настройка Apache на работу с Webmail IMP
Настройка Webmail IMP из вашего веб-броузера

В этой главе, я буду говорить о трех полезных внешних программах, которые можно инсталлировать на ваш Linux сервер. Эти программы созданы для использования с веб сервером Apache и полезны если вы планируете использовать Apache в вашей организации. Если это не так, то вы можете пропустить эту главу и затем продолжить чтение этой книги. Вначале мы будем говорить о Webalizer, который предназначен для анализа файлов регистраций веб сервера. Затем мы обсудим FAQ-O-Matic, который может быть использован для создания списков FAQ, базы данных отслеживания ошибок, документации и много другого на вашем сервере. В Заключении, мы будем говорить об очень тонкой интересной программе, называемой Webmail, которая позволит вам предлагать вашим клиентам почтовые бюджеты, или доступ и чтение почты в безопасным способом.

Webalizer

Краткий обзор

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

Как написанов файле README Webalizer:

Webalizer - это программа для анализа файлов регистраций веб сервера, которая создает отчеты в HTML формате для просмотра в броузере. Результаты представляются в виде таблиц и графиков, которые облегчают интерпретацию полученной информации. Программа наряду с ежегодной, ежемесячной, ежедневной и почасовой статистикой использования, отображает информацию об использовании сайта, URL, referrer, пользовательских агентах (броузерах) и странах (пользовательские агенты и referrer доступны только при использовании комбинированного формата файлов регистрации).

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
Webalizer версии 1_30-04

Пакеты.
Домашняя страница Webalizer: http://www.mrunix.net/webalizer/
FTP сервер Webalizer: 207.153.121.6
Вы должны скачать: webalizer-1_30-04-src.tgz

Раскройте тарбол:

[root@deep /]# cp webalizer-version-src.tgz /var/tmp/
[root@deep /]# cd /var/tmp/
[root@deep tmp]# tar xzpf webalizer-version-src.tgz

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

Webalizer требует наличия графической библиотеки GD, которая требуется для генерации встроенных графиков Webalizer. Если это не так, то вы должны инсталлировать ее из вашего Red Hat Linux CD-ROM.
Для проверки наличия установленной библиотеки GD используйте следующую команду:

[root@deep /]# rpm -qi gd
package gd is not installed

Для инсталляции пакета GD на вашей Linux системе используйте команду:

[root@deep /]# mount /dev/cdrom /mnt/cdrom/
[root@deep /]# cd /mnt/cdrom/RedHat/RPMS/
[root@deep RPMS]# rpm -Uvh gd-version.i386.rpm
gd         ##################################################
[root@deep RPMS]# rpm -Uvh gd-devel-version.i386.rpm
gd-devel   ##################################################
[root@deep RPMS]# cd /; umount /mnt/cdrom/

Веб сервер должен быть уже установлен на вашей системе.

Замечание. Для большей информации о веб сервере Apache читайте соответствующую главу этой книги.

Компиляция

Переместитесь в новый каталог Webalizer и введите следующие команды на вашем терминале:

CC="egcs" \
CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions" \
./configure \
--prefix=/usr
[root@deep webalizer-1.30-04]# make
[root@deep webalizer-1.30-04]# make install
[root@deep webalizer-1.30-04]# mkdir /home/httpd/usage

Команда "make" будет компилировать все файлы с исходными кодами в двоичные исполняемые файлы, команда "make install" проинсталлирует все двоичные и сопутствующие им файлы в требуемые места. Команда "mkdir" создаст новый каталог "usage" в каталоге "/home/httpd/", где мы будем размещать все связанные с Webalizer файлы.

Очистка после работы
[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf webalizer-version/ webalizer-version-src.tgz

Команды "rm" будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции Webalizer. Также будет удален сжатый архив Webalizer.

Конфигурации.

Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файлы связанные с Webalizer из архива, измените их под свои требования и поместите в нужное место так, как это описано ниже. Файл с конфигурациями вы можете скачать с адреса: http://www.openna.com/books/floppy.tgz

Для запуска Webalizer должен быть создан, либо скопирован следующий файл:
Копируйте webalizer.conf в каталог "/etc/".

Вы можете взять эти файлы из нашего архива floppy.tgz.

Конфигурация файла "/etc/webalizer.conf"

"/etc/webalizer.conf" является конфигурационным файлом по умолчанию для Webalizer. С его помощью, вы можете определить какие каталоги или страницы на вашем веб сервере анализировать, какие URL-ы скрывать и пр. По умолчанию, программа Webalizer будет инсталлировать простой конфигурационный файл с именем "webalizer.conf.sample" в каталог "/etc/". Вы можете использовать его, переименовав в "webalizer.conf", чтобы Webalizer мог найти его и использовать. В этом файле можно использовать много разных опций, поэтому важно прочитать документацию поставляемую с Webalizer, чтобы получить больше информации о различных установках и параметрах. Ниже мы прокомментируем наиболее важные и часто используемые параметры.
Редактируйте файл webalizer.conf.sample (vi /etc/webalizer.conf.sample) или создайте файл webalizer.conf (touch /etc/webalizer.conf) и добавьте/измените следующее:

LogFile /var/log/httpd/access_log
OutputDir /home/httpd/usage
Incremental yes
PageType htm*
PageType cgi
PageType php
HideURL *.gif
HideURL *.GIF
HideURL *.jpg
HideURL *.JPG
HideURL *.ra
IgnoreURL /taskbar*

Эти опции говорят webalizer следующее:

LogFile /var/log/httpd/access_log
Опция "LogFile" определяет файл регистрации обрабатываемый Webalizer. По умолчанию он подразумевает файл "access_log" от веб сервера Apache, но вы можете определить другой, например файл "access.log" от прокси сервера Squid, используемого в режиме httpd-акселератора. Смотрите главу 18, "Программное обеспечение прокси сервера ", для получения большей информации.

OutputDir /home/httpd/usage
Опция "OutputDir" определяет месторасположение выходного каталога, используемого для хранения отчетов Webalizer. Рекомендуется, чтобы вы создали этот каталог там, где располагается ваш веб сервер Apache.

Incremental yes
Опция "Incremental" если установлена в "Yes" говорит программе обрабатывать часть файла регистрации, и позволит вам ротировать ваши файлы регистраций так много раз как вам надо без потери информации о доступе к серверу. Рекомендуется установить эту опцию в "Yes".

PageType htm* cgi php
Опция "PageType" определяет файлы с какими расширениями Webalizer обрабатывает как страницы. Каждое добавление нового расширения должно быть в отдельной строке, как это показано в конфигурационном файле.

HideURL *.gif *.GIF *.jpg *.JPG *.ra
Опция "HideURL" определяет какие элементов (графические файлы, аудио файлы и другие не 'html' файлы) скрываются в отчетах. Каждый добавляемый элемент должен быть в отдельной строке, как это показано в конфигурационном файле.

IgnoreURL /taskbar*
Опция "IgnoreURL" определяет URL, которые полностью игнорируются в создаваемых отчетах. Эта опция может быть использована для игнорирования каталогов, которые не важны для ваших отчетов. Она также полезно, когда вы хотите определять, какие URL должны быть обработаны, а какие нет.

ЗАМЕЧАНИЕ. Если вы решили использовать существующий файл "/etc/webalizer.conf.sample" для настройки ваших параметров для Webalizer, не забедьте переименовать его в "webalizer.conf" или программа не найдет его.

Информирование Apache о выходном каталоге Webalizer

Сейчас, когда Webalizer инсталлирован на вашей системе, мы должны добавить следующие строки в файл "httpd.conf"

Шаг 1

Редактируйте файл httpd.conf (vi /etc/httpd/conf/httpd.conf) и добавьте следующие строки между тэгами секции <IfModule mod_alias.c> и </IfModule>:

Alias /usage/ "/home/httpd/usage/"
<Directory "/home/httpd/usage">
  Options None
  AllowOverride None
  Order deny,allow
  Deny from all
  Allow from 192.168.1.0/24
</Directory>

Шаг 2

Не забудьте перезагрузить ваш веб сервер, чтобы изменения внесенные в файл "httpd.conf" вступили в силу:

[root@deep /]# /etc/rc.d/init.d/httpd restart
Shutting down http:               [ OK ]
Starting httpd:                   [ OK ]

Запус Webalizer вручную в первый раз

Сейчас наступило время запустить программу генерирующую отчеты (html) и графики в выходном каталоге Webalizer так, чтобы мы могли увидеть их в окне броузера. Этот шаг требуется только при первом запуске после инсталляции, так как в будущем это будет делать cron.

Для запуска Webalizer вручную, используйте команду

[root@deep /]# /usr/bin/webalizer
Webalizer V1.30-04 (Linux 2.2.14) English
Using logfile /var/log/httpd/access_log
Creating output in /home/httpd/usage
Hostname for reports is 'deep.openna.com'
History file not found...
Previous run data not found...
Saving current run data... [03/06/2000 04:42:03]
Generating report for March 2000
Generating summary report
Saving history information...
81 records (2 ignored) in 0.31 seconds

На этой стадии, мы должны проверить, что Webalizer работает корректно. Чтобы сделать это наберите в окне броузера следующий адрес: http://my-web- server/usage/. Где <my-web-server> - это адрес вашего веб сервера, а </usage> - это каталог в котором располагаются отчеты Webalizer.


Запуск Webalizer автоматически при помощи cron

Последнее, что вы должны сделать, это автоматизировать задачу генерации отчетов программой Webalizer. Поместите соответствующий элемент в crontab пользователя root, чтобы сделать запуск Webalizer работой cron. Для этого вы должны редактировать ваш файл crontab и добавить в него строку, запускающую Webalizer каждые, например, 28 минут:

[root@deep /]# crontab -e

# Run Webalizer to update Apache Log files every 28 minutes.
28 * * * * /usr/bin/webalizer

Инсталлированные файлы

> /etc/webalizer.conf.sample
> /usr/bin/webalizer
> /usr/man/man1/webalizer.1

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

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

Глава 20 Опциональные компоненты устанавливаемые с веб-сервером Apache - FAQ-O-Matic

В этой главе
Webalizer
Конфигурации
Информирование Apache о выходном каталоге Webalizer
Запуск Webalizer вручную в первый раз
Запуск Webalizer автоматически при помощи cron
FAQ-O-Matic
Информирование Apache о месте расположения файлов Faq-O-Matic
Настройка FAQ-O-Matic
Webmail IMP
Установка PHPLib который требуется программе Horde из Webmail IMP
Настройка и создани SQLе базы данных Webmail IMP
Настройка вашего конфигурационного файла "php.ini" из PHP4
Настройка Apache на работу с Webmail IMP
Настройка Webmail IMP из вашего веб-броузера

Linux FAQ-O-Matic

Краткий обзор

Как написано на веб сервере Faq-O-Matic:

Архивы списков рассылки это очень хорошо, потому что позволяют внимательным людям с Часто Задаваемыми Вопросами найти на них немедленно ответы, не беспокоя при этом других людей. К сожалению ответы в списках рассылки через некоторое время устаревают, дезорганизованы и приходится интенсивно поработать, чтобы отсеять их от разного "мусора". Список Часто Задаваемых Вопросов (FAQ) лучше, потому, что даже ленивые люди могут легко находить в них ответы. К сожалению, поддержка списка FAQ требует усилий; если им не заниматься, то информация в нем устаревает. Faq-O-Matic - это система, базирующаяся на CGI, автоматизирующая процесс поддержки FAQ (списка Часто Задаваемых Вопросов). Она позволяет пользователям вашего FAQ принимать участие в его формировании. Система разрешений также делает FAQ-O-Matic полезным как приложение "справочный стол", база отслеживания ошибок и документационная система.

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
FAQ-O-Matic версии 2.709

Пакеты.
Домашняя страница FAQ-O-Matic: http://www.dartmouth.edu/~jonh/ff-serve/cache/1.html
Наиболее свежая версия FAQ-O-Matic всегда доступна с
ftp://ftp.cs.dartmouth.edu/pub/jonh.
Вы должны скачать: FAQ-OMatic-2.709.tar.gz

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

  1. Веб сервер должен быть уже установлен до начала использования FAQ-O-Matic.
  2. Система контроля версий (RCS) должна быть также уже установлена до использования FAQ-O-Matic.

Чтобы проверить, установлен ли пакет RCS на вашей системе используйте команду:

[root@deep /]# rpm -qi rcs
package rcs is not installed

Для инсталляции RCS используйте следующую команду:

[root@deep /]# mount /dev/cdrom /mnt/cdrom/
[root@deep /]# cd /mnt/cdrom/RedHat/RPMS/
[root@deep RPMS]# rpm -Uvh rcs-version.i386.rpm
rcs    ##################################################
[root@deep RPMS]# cd /; umount /mnt/cdrom/

Раскройте тарбол:

[root@deep /]# cp FAQ-O-Matic-version.tar.gz /var/tmp/
[root@deep /]# cd /var/tmp/
[root@deep tmp]# tar xzpf FAQ-O-Matic-version.tar.gz

Компиляция

Для инсталляции программы Faq-O-Matic на вашем компьютере переместитесь в каталог FAQ-O-Matic и введите следующие команды:

[root@deep FAQ-OMatic-2.709]# perl Makefile.PL
[root@deep FAQ-OMatic-2.709]# make
[root@deep FAQ-OMatic-2.709]# make install
[root@deep FAQ-OMatic-2.709]# mv fom /home/httpd/cgi-bin/
(или туда, где находится ваш CGI).
[root@deep FAQ-OMatic-2.709]# mkdir -p /home/httpd/cgi-bin/fom-meta
[root@deep FAQ-OMatic-2.709]# mkdir -p /home/httpd/faqomatic
[root@deep FAQ-OMatic-2.709]# chown root.www /home/httpd/cgi-bin/fom
[root@deep FAQ-OMatic-2.709]# chown -R www.www /home/httpd/cgi-bin/fom-meta/
[root@deep FAQ-OMatic-2.709]# chown -R www.www /home/httpd/faqomatic/

Команда "make" компилирует все файлы с исходными кодами в исполняемые двоичные, команда "make install" будет инсталлировать Perl программы и сопутствующие им файлы в нужные каталоги. Команда "mv" переместит CGI программу "fom" в каталог "cgi-bin" вашего веб сервера. "mkdir" создаст новый каталоги "fom-meta" и "faqomatic" в каталоге "/home/httpd/" где будут храниться все связанные с FAQ-O-Matic файлы. В заключении, команда "chown" установит владельца CGI программы "fom" пользователя "root" и группу под которым запускается веб сервер "www", и устанавливает владельца и группу "www" на каталоги "fom-meta" и "faqomatic".

ЗАМЕЧАНИЕ. Вы получите временный пароль по электронной почте во время компиляции программы. Этот пароль будет нужен для окончания процесса инсталляции Faq-O-Matic через веб интерфейс.

Информирование Apache о месторасположении файлов Faq-O-Matic

После инсталляции Faq-O-Matic, мы должны добавить следующие строки в файл "httpd.conf".

Шаг 1

Редактируйте файлы httpd.conf (vi /etc/httpd/conf/httpd.conf) и добавьте следующие строки между тэгами секции <IfModule mod_alias.c> и </IfModule>:

Alias /faqomatic/ "/home/httpd/faqomatic/"
<Directory "/home/httpd/faqomatic">
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
</Directory>

Alias /bags/ "/home/httpd/faqomatic/bags/"
<Directory "/home/httpd/faqomatic/bags">
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
</Directory>

Alias /cache/ "/home/httpd/faqomatic/cache/"
<Directory "/home/httpd/faqomatic/cache">
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
</Directory>

Alias /item/ "/home/httpd/faqomatic/item/"
<Directory "/home/httpd/faqomatic/item">
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
</Directory>

Шаг 2

Не забудьте перезапустить веб сервер Apache, чтобы внесенные изменения вступили в силу:

[root@deep /]# /etc/rc.d/init.d/httpd restart
Shutting down http:                [ OK ]
Starting httpd:                    [ OK ]

Конфигурирование FAQ-O-Matic

Окончание инсталляции будет осуществляться через ваш веб броузер. Выполните следующие шаги в вашем Netscape Communicator:

Шаг 1

На первом шаге загрузите веб броузер и используйте его для конфигурирования.

  1. Введите в окне броузера следующий адрес: http://my-web-server/cgi-bin/fom
  2. Введите ваш временный пароль
  3. В первую очередь создайте каталог "/home/httpd/cgi-bin/fom-meta/"
  4. Настройте "Define configuration parameters" в основном конфигурационном меню

Например в секции Mandatory введите следующую команду:

$adminAuth= admin@openna.com
$serverBase= http://www.openna.com
$cgiURL= /cgi-bin/fom
$serveDir= /home/httpd/faqomatic/
$serveURL= /faqomatic/

Настройте "Define configuration parameters" как вам нужно. После окончания установки всех параметров нажмите на кнопку "Define" для подтверждения выбора.

ЗАМЕЧАНИЕ. <my-web-server> - это адрес вашего веб сервера Apache, а временный пароль должен был вам прислан по электронной почте во время компиляции.

Шаг 2

После окончания конфигурирования "Define configuration parameters", вы должны закончить настройку остальной части FAQ-O-Matic, чтобы иметь возможность использовать его так, как описано в главном меню.




Очистка после работы

[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf FAQ-OMatic-version/ FAQ-O-Matic-version.tar.gz

Команды "rm" будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции FAQ-O-Matic. Также будет удален сжатый архив FAQ-O-Matic.

Инсталлированные файлы

> /usr/lib/perl5/man/man3/FAQ::OMatic::API.3
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/FAQ
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/FAQ/OMatic
> /usr/lib/perl5/site_perl/5.005/i386-linux/auto/FAQ/OMatic/.packlist
> /usr/lib/perl5/site_perl/5.005/FAQ
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/Bags.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/authenticate.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/ImageRef.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/Groups.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/submitGroup.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/recent.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/submitItem.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/maintenance.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/Language_de_iso8859_1.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/Slow.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/help.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/selectBag.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/submitPart.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/delPart.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/buildSearchDB.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/mirrorServer.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/editItem.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/search.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/SearchMod.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/addItem.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/Versions.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/displaySlow.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/Language_fr.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/img.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/editPart.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/AuthLocal.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/ColorPicker.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/ImageData.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/changePass.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/submitBag.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/submitModOptions.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/I18N.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/Log.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/appearanceForm.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/moveItem.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/editGroups.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/HelpMod.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/searchForm.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/submitPass.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/submitMove.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/Set.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/statgraph.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/stats.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/Item.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/Words.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/Appearance.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/dispatch.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/editBag.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/submitCatToAns.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/submitAnsToCat.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/editModOptions.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/Auth.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/install.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/Part.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/faq.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic/API.pm
> /usr/lib/perl5/site_perl/5.005/FAQ/OMatic.pm

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

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

Глава 20 Опциональные компоненты устанавливаемые с веб-сервером Apache - Webmail IMP

В этой главе
Webalizer
Конфигурации
Информирование Apache о выходном каталоге Webalizer
Запуск Webalizer вручную в первый раз
Запуск Webalizer автоматически при помощи cron
FAQ-O-Matic
Информирование Apache о месте расположения файлов Faq-O-Matic
Настройка FAQ-O-Matic
Webmail IMP
Установка PHPLib который требуется программе Horde из Webmail IMP
Настройка и создание SQL базы данных Webmail IMP
Настройка вашего конфигурационного файла "php.ini" из PHP4
Настройка Apache для обнаружения Webmail IMP
Настройка Webmail IMP из вашего веб-броузера

Linux Webmail IMP

Краткий обзор

Webmail IMP дает универсальный, базирующийся на веб доступ к IMAP/POP3 серверам и предоставляет адресную книгу, поиск по каталогу LDAP, полную поддержку приема и отправки прикрепленных файлов и много других возможностей, которые могут быть найдены в стандартных почтовых клиентах. Если вы инсталлировали Apache с поддержкой SSL, то клиенты смогут получить доступ и читать почту в безопасной манере, используя SSL шифрование. По умолчанию в этой секции, мы будем настраивать Webmail IMP на использование базы данных PostgreSQL и IMAP соединений. Кроме того, Webmail IMP позволяет работать с другими базами данных. Если вам нужно, вы можете использовать MySQL, Oracle, Sybase или другие хорошо известные базы данных SQL. Вы также можете выбрать использование POP3 соединения вместо IMAP для ваших клиентов.

Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
Horde версии 1.2.0
Webmail IMP версии 2.2.0
PHPLib версии 7.2b

Пакеты.
Домашняя страница Webmail IMP: http://www.horde.org/imp/
Вы должны скачать: horde-1.2.0-pre11.tar.gz
Вы должны скачать: imp-2.2.0-pre11.tar.gz

Домашняя страница PHPLib: http://phplib.netuse.de/index.php3
Вы должны скачать: phplib-7.2b.tar.gz

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

  1. До использования Webmail IMP у вас должен быть установлен веб сервер Apache.
  2. До использования Webmail IMP у вас должен быть установлен PHP4.
  3. Postgresql или другой сервер баз данных должен быть установлен, если вы планируете использовать Webmail IMP с поддержкой SQL.
  4. OpenLDAP должен быть установлен, если вы планируете использовать Webmail IMP с поддержкой LDAP.
  5. До использования Webmail IMP у вас должен быть установлен сервер IMAP/POP.
  6. До использования Webmail IMP у вас должны быть установлены файлы PHPLIB 7.2 или выше.

Установка PHPLib, которая требуется программе Horde из Webmail IMP

Для того, чтобы запустить Webmail IMP на вашем сервере, вам надо установить PHPLib (инструментальное средство разработки веб приложений для PHP разработчиков). Для инсталляции PHPLib выполните следующие шаги:

Пакеты
Домашняя страница: http://phplib.netuse.de/index.php3
Вы должны скачать: phplib-7.2b.tar.gz
[root@deep /]# cp phplib-7.2b.tar.gz /home/httpd/
[root@deep /]# cd /home/httpd/
[root@deep httpd]# tar xzpf phplib-7.2b.tar.gz

Шаг 1

Перейдите в DocumentRoot вашего веб сервера и создайте каталог "/home/httpd/php":

[root@deep /]# cd /home/httpd/
[root@deep httpd]# mkdir php

Шаг 2

Копируйте содержимое каталога "php" дистрибутива PHPLib в каталог "php", который вы создали в вашем DocumentRoot:

[root@deep /]# cd /home/httpd/phplib-7.2b/php/
[root@deep php]# cp * /home/httpd/php/
[root@deep php]# cd /home/httpd/
[root@deep httpd]# rm -f phplib-7.2b.tar.gz
[root@deep httpd]# rm -rf phplib-7.2b/

ЗАМЕЧАНИЕ. Мы удалили tar архив и каталог "phplib-version", после завершения копирования каталога "php".

Компиляция

Для инсталляции программы Webmail IMP на вашем сервере выполните следующие шаги.

Шаг 1

Копируйте horde-1.2.0-pre11.tar.gz в DocumentRoot (/home/httpd/), раскройте его и переименуйте каталог "horde-version" в "horde", выполнив следующие команды:

[root@deep /]# cp horde-version.tar.gz /home/httpd/
[root@deep /]# cd /home/httpd/
[root@deep httpd]# tar xzpf horde-version.tar.gz
[root@deep httpd]# mv horde-version horde
[root@deep httpd]# rm -f horde-version.tar.gz

ЗАМЕЧАНИЕ. Мы удалили tar архив, содержащий Horde, после переименования каталога "horde-version" в "horde".

Шаг 2

Копируйте imp-2.2.0-pre11.tar.gz в ваш каталог "horde" (/home/httpd/horde/), раскройте его и переименуйте каталог "imp-version" в "imp":

[root@deep /]# cp imp-version.tar.gz /home/httpd/horde/
[root@deep /]# cd /home/httpd/horde/
[root@deep horde]# tar xzpf imp-version.tar.gz
[root@deep horde]# mv imp-version imp
[root@deep horde]# rm -f imp-version.tar.gz

ЗАМЕЧАНИЕ. Важно, чтобы каталог "imp" находился в каталоге "horde", иначе Webmail не будет работать. После переименования каталога "imp-version" в "imp" мы удалили архив содержащий IMP Webmail.

Шаг 3

Измените владельца каталога "horde" и всех его подкаталогов и файлов на "root" из соображений безопасности.

[root@deep /]# chown -R 0.0 /home/httpd/horde/

Шаг 4

Копируйте файлы "/home/httpd/horde/phplib/*.ihtml" в новый каталог "php" (/home/httpd/php/), выполнив следующую команду:

[root@deep /]# cp /home/httpd/horde/phplib/*.ihtml /home/httpd/php/

Настройка и создание SQL базы данных Webmail IMP

Мы сейчас должны сконфигурировать нашу базу данных на работу с Webmail IMP. Самый простой способ для этого - использовать предопределенные скрипты расположенные в подкаталоге "/home/httpd/horde/imp/config/scripts/". Для PostgreSQL выполните следующие шаги.

Шаг 1

Первое, вы должны редактировать скрипт "pgsql_create.sql", связанный с PostgreSQL и расположенный в подкаталоге "/home/httpd/horde/imp/config/scripts". Измените в нем принятое по умолчанию значение имени пользователя от которого запускается "httpd" на "www". Редактируйте файл pgsql_create.sql (vi /home/httpd/horde/imp/config/scripts/pgsql_create.sql) и измените строку:

GRANT SELECT, INSERT, UPDATE ON imp_pref, imp_addr TO nobody;
на:
GRANT SELECT, INSERT, UPDATE ON imp_pref, imp_addr TO www;


Шаг 2

Сейчас, мы должны определить пользователя для Apache ("www") в вашей базе данных PostgreSQL, чтобы можно было создавать базы данных Webmail IMP этим пользователем.
Для определения пользователя "www" в вашей базе данных, запустите утилиту createuser из PostgreSQL:

[root@deep /]# su postgres
[postgres@deep /]$ createuser
Enter name of user to add ---> www
Enter user's postgres ID or RETURN to use unix user ID: 80 -> [Press Enter]
Is user "www" allowed to create databases (y/n) y
Is user "www" a superuser? (y/n) n
createuser: www was successfully added

Шаг 3

После того, как пользователь "www" включен в базу данных PostgreSQL, подключитесь к PostgreSQL (в нашем случае как "postgres") и запустите небольшой скрипт, который автоматически создаст Webmail IMP базу данных в PostgreSQL:

[root@deep /]# cd /home/httpd/horde/imp/config/scripts/
[root@deep scripts]# su postgres
[postgres@deep scripts]$ psql template1 < pgsql_create.sql
// IMP database creation script for postgreSQL
// Author: barce@lines.edu
// Date: Aug-29-1998
// Notes: replace "nobody" with yours httpd username
// Run using: psql template1 < pgsql_create.sql

CREATE DATABASE horde;
CREATEDB

\connect horde
connecting to new database: horde

CREATE TABLE imp_pref (
username       text,
sig            text,
fullname       text,
replyto        text,
lang           varchar(30)
);
CREATE

CREATE TABLE imp_addr (
username     text,
address      text,
nickname     text,
fullname     text
);
CREATE

GRANT SELECT, INSERT, UPDATE ON imp_pref, imp_addr TO www;
CHANGE
EOF

Шаг 4

Мы должны перезагрузить сервер PostgreSQL, чтобы изменения вступили в силу:

[root@deep /]# /etc/rc.d/init.d/postgresql restart
Stopping postgresql service:      [ OK ]
Checking postgresql installation: looks good!
Starting postgresql service: postmaster [13474]

Шаг 5

Копируйте и переименуйте файл "/home/httpd/horde/phplib/horde_phplib.inc" в "/home/httpd/php/local.inc", затем редактируйте новый "local.inc", который является конфигурационным файлом phplib, содержащим установки, определяющие поведение phplib.

[root@deep /]# cp /home/httpd/horde/phplib/horde_phplib.inc
/home/httpd/php/local.inc
cp: overwrite `/home/httpd/php/local.inc'? y

Редактируйте файл local.inc (vi /home/httpd/php/local.inc), раскомментируйте и установите следующие строки для определения SQL как вашей базы данных по умолчанию:

/* Для использования базы данных SQL раскомментируйте и редактируйте 
следующее: */
class HordeDB extends DB_Sql {
   var $Host = 'localhost';
   var $Database = 'horde';
   var $User = 'www';
   var $Password = 'some-password';
   var $Port = '5432';
   function halt($msg) {
      printf("<b>Database error (HordeDB):</b> %s<br>\n", $msg);
   }
}
class HordeCT extends CT_Sql {
   var $database_class = 'HordeDB'; // Какой класс базы данных использовать.
   var $database_table = 'active_sessions'; // и находить наши данные в таблице.
}

ЗАМЕЧАНИЕ. Не забудьте раскомментировать в этом файле тип контейнера для хранения информации, который вы хотите использовать в Webmail IMP. Помните, надо раскомментировать только один тип. В нашем случае мы выбрали SQL базу данных "var $User =", "var $Password =" и "var $Port =". "var $User =" соответствует вашему httpd пользователю (у нас "www"), "var $Password =" соответствует паролю для пользователя "www", определенного в PostgreSQL, и "var $Port =" - это номер порта используемого для соединений с базой данных SQL.

Шаг 6

В заключении, редактируйте файл "/home/httpd/php/prepend.php3" и определить тип вашей базы данных.
Редактируйте файл prepend.php3 (vi /home/httpd/php/prepend.php3) и измените в нем следующие строки для определения PostgreSQL как тип ваше базы данных:

require($_PHPLIB["libdir"] . "db_mysql.inc");
на:
require($_PHPLIB["libdir"] . "db_pgsql.inc");

Настройка конфигурационного файла "php.ini" для PHP4

Еще вам надо настроить конфигурационный файл PHP4 "/etc/httpd/php.ini". Изменения вносимые в него зависят от того, какие возможности (такие как IMAP, PostgreSQL и др.) должны загружаться автоматически PHP4. Так как мы решили использовать PostgreSQL для хранения информации и IMAP возможности Webmail, мы должны определить их в файле "php.ini".

Шаг 1

Редактируйте файл php.ini (vi /etc/httpd/php.ini) и добавьте в секции Dynamic Extensions необходимые библиотеки. В нашем случае, как вы видите, мы выбрали поддержку IMAP и PostgreSQL:

extension=imap.so ; Добавляет поддержку для IMAP
extension=pgsql.so ; Добавляет поддержку для PostgreSql
extension=mysql.so ; Добавляет поддержку для MySql
extension=ldap.so ; Добавляет поддержку для LDAP

Шаг 2

Вы должны указать "php", где ему искать включаемые файлы, когда они не имеют абсолютных путей, автоматическое прибавление содержимого файла "prepend.php3" к каждому файлу, и отключение magic quotes.
Редактируйте файл php.ini (vi /etc/httpd/php.ini) и добавьте следующие параметры:

magic_quotes_gpc = Off
auto_prepend_file = "/home/httpd/php/prepend.php3"
include_path = "/home/httpd/horde:/home/httpd/php"

Настройка Apache на работу с Webmail IMP

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

Шаг 1

Редактируйте файл httpd.conf (vi /etc/httpd/conf/httpd.conf) и добавьте следующие строки между тэгами секции <IfModule mod_alias.c> и </IfModule>:

Alias /horde/ "/home/httpd/horde/"
<Directory "/home/httpd/horde">
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
</Directory>

Alias /imp/ "/home/httpd/horde/imp/"
<Directory "/home/httpd/horde/imp">
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
</Directory>

Шаг 2

Вы должны перезагрузить Apache, чтобы изменения вступили в силу:

[root@deep /]# /etc/rc.d/init.d/httpd restart
Shutting down http:          [ OK ]
Starting httpd:              [ OK ]

Настройка Webmail IMP через ваш веб броузер

Существует несколько путей для настройки Webmail IMP, и один из них, который мы выбрали, новый механизм настройки называемый "setup.php3", который дает людям возможность настраивать IMP через веб броузер.

Шаг 1

Из соображений безопасности, эта возможность отключена по умолчанию, но мы можем ее включить следующими командами:

[root@deep /]# cd /home/httpd/horde/
[root@deep horde]# sh ./install.sh

Your blank configuration files have been created, please go to
the configuration utitlity at :

your install path url/setup.php3

Шаг 2

После того как новый механизм настройки Webmail IMP включен, введите в вашем броузере следующий адрес: http://my-web-server/horde/setup.php.

ЗАМЕЧАНИЕ. <my-web-server> - адрес вашего веб сервера, а "/horde/" это каталог где находится файл "setup.php".

Шаг 3

После того как вы закончите настраивать Webmail IMP, обязательно отключить "setup.php", из соображений безопасности:

[root@deep /]# cd /home/httpd/horde/
[root@deep horde]# sh ./secure.sh

Это переведет все файлы и библиотеки в режим 0555 (чтение/исполнение для всех), а setup.php в режим 0000, который запретит любой доступ.

Шаг 4

На этой стадии, мы должны проверить работоспособность Webmail IMP. Чтобы сделать это, наберите в окне броузера следующий адрес: http://my-web- server/horde/. <my-web-server> - это адрес, где находится вашего веб сервера, а </horde> - это каталог в котором располагается программа Webmail IMP.



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

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

Глава 21 Серверное программное обеспечение (Файловый сервис) - Samba

В этой главе
Linux Samba сервер
Конфигурации
Создание файла с шифрованными паролями для пользователей
Организация защиты Samba
Оптимизация Samba
Административные средства Samba
Утилиты пользователя Samba
Linux FTP сервер
Настройка бюджета пользователя FTP без shell-а
Настройка окружения пользователя под chroot
Конфигурации
Настройка ftpd для использования с TCP-Wrappers inetd супер сервером
Административные средства FTP
Организация защиты FTP

Linux Samba сервер

Краткий обзор

Крупные организации часто используют много разных операционных систем, и им нужно объединять их в сеть для совместного использования файлов и принтеров. Работники могут работать на рабочих станциях Linux, Microsoft Windows 95/98/NT, OS/2 или Novel и им необходим доступ к серверам для повседневной работы. Linux сервер с поддержкой Samba может быть использован для этих целей.

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

Как описано в файле README для Samba:

Samba - это протокол, при помощи которого на большинстве PC-машинах совместно используются файлы, принтеры и другая информация, такая как списки доступных файлов и принтеров. Встроенную поддержку этого протокола имеют Windows 95/98/NT, OS/2 и Linux, а с помощью дополнительного пакета DOS, Windows, VMS, Unix всех других видов, MVS и многие другие. Apple Macs и некоторые Веб Броузеры также понимают его. Альтернативу SMB составляют Netware, NFS, AppleTalk, Banyan Vines, Decnet и др.; многие из них имеют большие возможности, но ни один не имеет общедоступной спецификации и широкой реализации на настольных машинах. Программное обеспечение Samba включает SMB сервер, предоставляющий файловый и принтерный сервис в стиле Windows NT и LAN Manager SMB клиентам (Windows 95, Warp Server, smbfs и др), NetBIOS (rfc1001/1002) сервер имен, который среди многих других вещей, дает возможность ftp-подобного просмотра ресурсов (дисков и принтеров) из Unix, Netware и других ОС, и расширение tar для клиентов для резервного копирования PC.


Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
Samba версии 2.0.7

Пакеты.
Домашняя страница Samba: http://us1.samba.org/samba/samba.html
FTP сервер Samba: 63.238.153.11
Вы должны скачать: samba-2.0.7.tar.gz

Тарболы.
Хорошей идеей будет создать список файлов установленных в вашей системе до инсталляции Samba и после, в результате, с помощью утилиты diff вы сможете узнать какие файлы были установлены. Например,
До инсталляции:
find /* > Samba1

После инсталляции:
find /* > Samba2

Для получения списка установленных файлов:
diff Samba1 Samba2 > Samba-Installed

Раскройте тарбол:

[root@deep /]# cp samba-version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf samba-version.tar.gz

Конфигурирование

Перейдите в каталог Samba, а затем в подкаталог "source".

Шаг 1

Редактируйте файл smbsh.in (vi +3 smbwrapper/smbsh.in) и измените строку:

SMBW_LIBDIR=${SMBW_LIBDIR-@builddir@/smbwrapper}
на:
SMBW_LIBDIR=${SMBW_LIBDIR-/usr/bin}

Это изменит месторасположение каталога "lib" Samba под каталог "/usr/bin".

Шаг 2

Редактируйте файл Makefile.in (vi +28 Makefile.in) и измените строки:

SBINDIR = @bindir@
На:
SBINDIR = @sbindir@

VARDIR = @localstadir@
на:
VARDIR = /var/log/samba

Эти изменения определяет каталог "/usr/sbin" для двоичных файлов Samba, и каталог "/var" для файлов регистраций Samba ("/var/log/samba").

Шаг 3

Редактируйте файл convert_smbpasswd (vi +10 script/convert_smbpasswd) и измените строку:

nawk 'BEGIN {FS=":"}
на:
gawk 'BEGIN {FS=":"}

Это изменение определит использование версии GNU Linux утилиты обработки текста awk, основанной на Bell Labs research версии программы awk для программы "smbpasswd".

Шаг 4

Редактируйте файл smbmount.c file (vi +98 client/smbmount.c) и измените строку:

static void close_our_files(int client_fd)
{
   int i;
   for (i = 0; i < 256; i++) {
      if (i == client_fd) continue;
         close(i);
    }
на:
static void close_our_files(int client_fd)
{
struct rlimit limits;
int i;
getrlimit(RLIMIT_NOFILE,&limits);
for (i = 0; i < limits.rlim_max; i++) {
  if (i == client_fd) continue;
     close(i);
}

Этот шаг сделает файл smbmount.c совместимым с библиотекой Red Hat's glibc 2.1.

Компиляция и оптимизация

Шаг 1

Введите следующие команды на вашем терминале:

CC="egcs" \
./configure \
--prefix=/usr \
--libdir=/etc \
--with-lockdir=/var/lock/samba \
--with-privatedir=/etc \
--with-swatdir=/usr/share/swat \
--with-pam \
--with-mmap \
--without-sambabook

ЗАМЕЧАНИЕ Опция "--with-mmap" может улучшить производительность на некоторых машинах, на других ничего не изменится, ну а на третьих она может упасть.

Эти опции говорят Samba:

Шаг 2

Сейчас мы должны инсталлировать Samba на нашем Linux сервере:

[root@deep source]# make all
[root@deep source]# make install
[root@deep source]# install -m 755 script/mksmbpasswd.sh /usr/bin/
[root@deep source]# rm -rf /usr/share/swat/
(если вы мне позволите совет, не позволяйте пользователям настраивать Samba через броузер).
[root@deep source]# rm -f /usr/sbin/swat
[root@deep source]# rm -f /usr/man/man8/swat.8
[root@deep source]# mkdir -p /var/lock/samba
[root@deep source]# mkdir -p /var/spool/samba
(требуется только если вы планируете совместное использование принтера).
[root@deep source]# chmod 1777 /var/spool/samba/ (требуется только если вы планируете совместное использование принтера).

Команда "install" инсталлирует скрипт "mksmbpasswd.sh" в каталог "/usr/bin/". Этот скрипт нужен, чтобы пользователи Samba могли подключаться к серверу, используя файл "smbpasswd". О том как использовать пароли Samba читайте дальше в этой книге.

Команда "rm" удалит каталог "/usr/share/swat" и все файлы в нем, также она удалит исполняемый файл "swat" из каталога "/usr/sbin/". SWAT - это конфигурационная утилита имеющая веб интерфейс, которая позволяет настраивать файл "smb.conf" из веб броузера. Она может открыть брешь в безопасности вашего сервера, поэтому я рекомендую удалить ее. Команда "mkdir" создаст каталог "/var/spool/samba/", который используется при печати на принтере. Конечно, он необходим, если вы планируете использовать Samba для предоставление принтера в совместное использование. Так как мы не настраиваем наш сервер Samba на предоставление сервиса печати, нам не нужен этот каталог ("/var/spool/samba/"), и соответственно нет необходимости в команде "chmod", устанавливающей "sticky" бит в "/var/spool/samba", чтобы только владелец файла мог удалить его из каталога.

Очистка после работы.
[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf samba-version/ samba-version.tar.gz

Команды "rm" будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции Samba. Также будет удален сжатый архив Samba из каталога "/var/tmp".

Конфигурации.

Конфигурационный файл для разных сервисов очень специфичен и сильно зависит от того, что вам нужно. Некоторые хотят инсталлировать сервер Samba, рассчитывая на одно клиентское соединение, а некоторые на тысячу. Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файлы связанные с Samba из архива, измените их под свои требования и поместите в нужное место так, как это описано ниже. Файл с конфигурациями вы можете скачать с адреса: http://www.openna.com/books/floppy.tgz

Для запуска веб сервера Apache следующие файлы должны быть созданы или скопированы на ваш сервер.

Копируйте файлы smb.conf и lmhosts в каталог "/etc/".
Копируйте smb в каталог "/etc/rc.d/init.d/".
Копируйте samba в каталог "/etc/logrotate.d/".
Копируйте samba в каталог "/etc/pam.d/".

Вы можете взять эти файлы из нашего архива floppy.tgz.

Конфигурационный файл "/etc/smb.conf"

Файл "/etc/smb.conf" - это основной конфигурационный файл сервера Samba, в котором вы можете определить каталоги к которым предоставляете доступ, с каких IP адресов разрешен доступ и пр. Первые несколько строк в секции [global] содержат глобальные конфигурационные директивы, которые являются общими для всех разделяемых ресурсов (пока они не переписаны в конкретных секциях для каждого ресурса), далее идут секции, отвечающие за конкретные ресурсы. Существует множество опций, и нужно обязательно прочитать документацию, поставляемую вместе с Samba, чтобы получить информацию о каждой из них.

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

В нашем примере, мы создаем только один каталог, "[tmp]", и позволяем доступ только машинам с IP адресами диапазона класса C. Также мы не используем сервис печати.

Редактируйте файл smb.conf (vi /etc/smb.conf) и добавьте/измените следующие параметры:

[global]
   workgroup = OPENNA
   server string = R&D of Open Network Architecture Samba Server
   encrypt passwords = True
   security = user
   smb passwd file = /etc/smbpasswd
   log file = /var/log/samba/log.%m
   socket options = IPTOS_LOWDELAY TCP_NODELAY
   domain master = Yes
   local master = Yes
   preferred master = Yes
   os level = 65
   dns proxy = No
   name resolve order = lmhosts host bcast
   bind interfaces only = True
   interfaces = eth0 192.168.1.1
   hosts deny = ALL
   hosts allow = 192.168.1.4 127.0.0.1
   debug level = 1
   create mask = 0644
   directory mask = 0755
   level2 oplocks = True
   read raw = no
   write cache size = 262144

[homes]
   comment = Home Directories
   browseable = no
   read only = no
   invalid users = root bin daemon nobody named sys tty disk mem kmem users

[tmp]
   comment = Temporary File Space
   path = /tmp
   read only = No
   valid users = admin
   invalid users = root bin daemon nobody named sys tty disk mem kmem users

Эта опции говорят Samba следующее:


[global]

workgroup = OPENNA
Опция "workgroup" определяет рабочую группу в которую входит ваш сервер. Важно, чтобы клиенты и сервер входили в одну и туже группу.

server string = R&D of Open Network Architecture Samba Server
Опция "server string" определяет строку, которую получат пользователи в блоке комментария к принтеру в менеджере принтеров, или при IPC соединении по команде "net view" на Windows машинах.

encrypt passwords = True
Опция "encrypt passwords" если установлена в "True" инструктирует Samba использовать шифрованные пароли вместо паролей с открытым текстом. Снифферы несмогут определить ваш пароль, если он зашифрован. Эту опцию из соображений безопасности нужно установить в "True".

security = user
Опция "security", если установлена в "user", определяет, что клиент должен вначале пройти аутентификацию по правильному имени и паролю, или соединение будет разорвано. При этом способе имя пользователя и пароль должно существовать в файле "/etc/passwd" Linux сервера и в файле "/etc/smbpasswd" Samba сервера, или соединение с клиентом не состоится. Смотрите "Безопасность samba" в этой главе для получения большей информации о файле "smbpasswd".

smb passwd file = /etc/smbpasswd
Опция "smb passwd file" определяет путь к файлу с шифрованными паролями "smbpasswd". Файл "smbpasswd" это копия файла "/etc/passwd" Linux системы содержащий разрешенные имена и пароли клиентов, которым разрешен доступ к серверу Samba. Samba читает этот файл, когда получает запрос на соединение.

log file = /var/log/samba/log.%m
Опция "log file" определяет месторасположение и имена файлов регистрации Samba. С расширением "%m", у вас будут создаваться независимые файлы регистрации для каждого пользователя или машины, соединяющихся к вашему Samba серверу (например, log.machine1).

socket options = IPTOS_LOWDELAY TCP_NODELAY
Опция "socket options" определяет параметры, которые вы можете включить в вашу конфигурацию Samba для настройки и улучшения сервера samba на оптимальную производительность. По умолчанию, мы выбрали настройку сервера на локальную сеть и улучшили производительность сервера Samba при пересылке файлов.

domain master = Yes
Опция "domain master" определяет, что один из демонов Samba, "nmbd", будет установлен как домен мастер броузер для данной рабочей группы. Эта опция обычно устанавливается в "Yes" только на одном сервере Samba в некоторой сети и рабочей группе.

local master = Yes
Опция "local master" позволяет "nmbd" становится локальным мастер броузером в подсети. Подобно предыдущей опции эта опция должна быть установлена в "Yes" только на одном Samba сервере в подсети.

preferred master = Yes
Опция "preferred master" определяет и контролирует является ли "nmbd" привилегированным (preferred) мастер броузером рабочей группы. Опять же, эта опция обычно выставляется в "Yes" на одном сервере на вашей сети.

os level = 65
Опция "os level" определяет значение имеет ли "nmbd" шанс стать локальным мастер броузером для рабочей группы в локальной широковещательной области. Число 65 позволит победить любой NT сервер. Если в вашей сети есть NT сервер и вы хотите, чтобы Linux Samba сервер стал локальным мастер броузером, вы должны установить этот параметр равным 65. Эта опция должна быть определена только на одном Linux Samba сервере в сети, а на остальных ее надо отключить.

dns proxy = No
Опция "dns proxy" если установлена в "Yes" определяет, что "nmbd" когда выступает как WINS сервер и определяет, что Net BIOS имя не было зарегистрировано, должен интерпретировать Net BIOS имя слово в слово как DNS имя и делает lookup на DNS сервер действуя от имени клиента, запрашивающего данное имя. Так как мы не настраиваем Samba сервер как WINS сервер, нам не нужно устанавливать эту опцию в "Yes". Устанавливая эту опцию в "Yes" мы ухудшим производительность Samba.

name resolve order = lmhosts host bcast
Опция "name resolve order" определяет, в каком порядке используются сервисы имен для резолвинга имени хоста в IP адрес. Параметры, который мы выбрали говорят использовать в первую очередь локальный "lmhosts" файл.

bind interfaces only = True
Опция "bind interfaces only" если установлена в "True", позволяет вам ограничивать интерфейсы на которых будет принимать запросы "smb". Эта возможность улучшающая безопасность системы. Опция "interfaces = eth0 192.168.1.1" дополняет данную опцию.

interfaces = eth0 192.168.1.1
Опция "interfaces" позволяет вам переписать список интерфейсов по умолчанию, на которых Samba будет обрабатывать запросы. По умолчанию, Samba принимает список из всех активных интерфейсов и любые интерфейсы (исключая 127.0.0.1), на которых поддерживается возможность широковещательных запросов. С этой опцией, Samba будет слушать только интерфейс "eth0" с IP адресом 192.168.1.1. Это возможность улучшающая безопасность, и дополняет ранее приведенную опцию "bind interfaces only = True".

hosts deny = ALL
Опция "hosts deny" определяет список хостов, которым запрещен доступ к сервису Samba, если определенные сервисы не имеют собственных списков доступа. Для простоты, мы запрещаем доступ всем хостам по умолчанию, и разрешаем доступ некоторым компьютерам в опции "hosts allow =", приведенной ниже.

hosts allow = 192.168.1.4 127.0.0.1
Опция "hosts allow" определяет, каким хостам разрешен доступ к Samba сервису. По умолчанию, мы пускаем компьютер с IP адресом класса C 192.168.1.4 и наш localhost 127.0.0.1. Заметим, что доступ с localhost должен быть всегда разрешен, иначе вы будете получать сообщения об ошибках.

debug level = 1
Опция "debug level" позволяет вам определить уровень регистрации. Если вы установите уровень отладки больше чем 2, то это приведет к падению производительности. Это связано с тем, что сервер сбрасывает информацию в файл регистрации после каждой операции, которые могут быть очень интенсивными.

create mask = 0644
Опция "create mask" определяет и устанавливает нужные права доступа, связывая таким образом режимы DOS с правами UNIX. С этой опцией установленной в 0644, все файлы копируемые или создаваемые из Windows систем на Unix будут иметь права доступа 0644.

directory mask = 0755
Опция "directory mask" определяет и устанавливает режим, который используется для конвертирования DOS режимов в UNIX режимы, когда создается UNIX каталог. С этой опцией установленной в 0755, все каталоги копируемые или создаваемые из Windows систем на Unix будут иметь права доступа 0755.

level2 oplocks = True
Опция "level2 oplocks", если установлена в "True", увеличит производительность множественного доступа к файлам, которые обычно не записываются (такие как файлы приложений .EXE).

read raw = no
Опция "read raw" контролирует будет или нет сервер осуществлять "необработанное" (raw) чтение SMB запросов, когда пересылает данные клиенту. Заметим, что распределение памяти не использует операцию "read raw". Таким образом, вы можете обнаружить, что распределение памяти более эффективно, если вы отключите "read raw", используя параметр "read raw = no".

write cache size = 262144
Опция "write cache size" позволяет Samba улучшить производительность систем у которых дисковая подсистема является узким местом. Значение этой опции определяется в байтах. Значение этой опции определяется в байтах, следовательно 262,144 представляет 256k кэш на файл.

[tmp]

comment = Temporary File Space
Опция "comment" позволяет вам определить комментарии, которые появляются, когда клиент организует запросы на сервер.

path = /tmp
Опция "path" определяет каталог, в который пользователю разрешается доступ. В нашем примере, это каталог "tmp".

read only = No
Опция "read only" определяет должен ли пользователь иметь доступ "только на чтение" или нет. В нашем примере, так как это конфигурация для каталога "tmp", пользователь может иметь больший доступ, чем "только на чтение".

valid users = admin
Опция "valid users" определяет список пользователей, которые могут подключаться к этому сервису. В нашем примере, только пользователю "admin" разрешен доступ к каталогу "/tmp".

invalid users = root bin daemon nobody named sys tty disk mem kmem users
Опция "invalid users" определяет список пользователей которым не разрешается подключаться к этому сервису. Это абсолютно "параноидальная" проверка, которая гарантирует, что неправильные установки не нарушат безопасность системы. Рекомендуется, чтобы вы включили в эту строку всех пользователей, созданных в системе по умолчанию, от имени которых запускаются демоны на сервере.

Конфигурация файла "/etc/lmhosts"

Настроим файл "/etc/lmhosts". Он содержит соответствия между Samba Net BIOS именами и IP адресами. По формату, этот файл, подобен "/etc/hosts", за исключением того, что компоненты имени хоста соответствуют формату имен Net BIOS.

Создадим файл lmhosts (touch /etc/lmhosts) и внесем в него клиентские компьютеры:

# Пример Samba файла lmhosts.
#
127.0.0.1        localhost
192.168.1.1      deep
192.168.1.4      win

В нашем примере, lmhots содержит три соответствия между IP и Net BIOS именами. localhost (127.0.0.1), клиент с именем deep (192.168.1.1) и клиент с именем win (192.168.1.4).

Конфигурация файла "/etc/pam.d/samba"

Настроим файл "/etc/pam.d/samba" для использования pam аутентификации. Создайте файл samba (touch /etc/pam.d/samba) и добавьте в него следующие строки:

Auth required /lib/security/pam_pwdb.so nullok shadow
Account required /lib/security/pam_pwdb.so

Конфигурация файла "/etc/logrotate.d/samba"

Сконфигурируем файл "/etc/logrotate.d/samba" на автоматическую еженедельную ротацию ваших файлов регистрации.
Создайте файл samba (touch /etc/logrotate.d/samba) и добавьте в него следующие строки:

/var/log/samba/log.nmb {
  notifempty
  missingok
  postrotate
    /usr/bin/killall -HUP nmbd
  endrotate
}
/var/log/samba/log.smb {
  notifempty 
  missingok
  postrotate
    /usr/bin/killall -HUP smbd
  endrotate
}

Создание файла с шифрованными паролями Samba

В файле "/etc/smbpasswd" хранятся шифрованные пароли Samba. Он хранит имя пользователя; Unix UID, хешированный пароль SMB, информационный флаг учетной записи и время последнего изменения пароля. Важно создать этот файл с паролями и включить в него всех пользователей до того, как они будут подключаться к вашему серверу Samba. Без этого никто не сможет подключиться к нему.

Шаг 1

Для создания учетной записи Samba, вы должны, для начала, завести пользователя Linux. Поэтому, вначале, создайте в файле "/etc/passwd" всех пользователей, которые должны подключаться к серверу Samba. Добавьте нового пользователя в файл "/etc/passwd" используя следующую команду:

[root@deep /]# useradd smbclient

Определите пароль для него используя команду:

[root@deep /]# passwd smbclient
Changing password for user smbclient
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully

Шаг 2

После того, как вы внесли всех пользователей в файл "/etc/passwd", вы можете создать файл "smbpasswd", используя "/etc/passwd". Для этого введите следующую команду:

[root@deep /]# cat /etc/passwd | mksmbpasswd.sh > /etc/smbpasswd

Шаг 3

В заключении, на последнем шаге, мы должны создать бюджет пользователя в нашем файле "/etc/smbpasswd".
Для создания учетной записи пользователя Samba используйте команду:

[root@deep /]# smbpasswd -a smbclient (помните, что "smbclient" должен быть реальным пользователем Linux).
New SMB password:
Retype new SMB password:
Added user smbclient.
Password changed for user smbclient.

Шаг 4

Не забудьте изменить права доступа к вашему новому файлу "smbpasswd" на чтение-запись только для пользователя "root' (0600/-rw-------). Это делается из соображения безопасности.

[root@deep /]# chmod 600 /etc/smbpasswd
[root@deep /]# testparm
(эта команда проверит файл smb.conf на наличие ошибок).

ЗАМЕЧАНИЕ. Смотрите файл ENCRYPTION.txt, находящийся в дистрибутиве Samba в каталоге /doc/texts/ для большей информации.

Конфигурация скрипта "/etc/rc.d/init.d/smb"

Настроим скрипт "/etc/rc.d/init.d/smb", который отвечает за запуск и остановку демонов Samba smbd и nmbd.
Создайте скрипт smb (touch /etc/rc.d/init.d/smb) и добавьте в него следующие строки:

#!/bin/sh
#
# chkconfig: - 91 35
# описание: запуск и остановка демонов Samba smbd и nmbd \
# используемых для предоставления сетевого сервиса SMB.
# Библиотека исходных функций.
. /etc/rc.d/init.d/functions
# Исходная сетевая конфигурация.
. /etc/sysconfig/network
# Проверки наличия сети.
[ ${NETWORKING} = "no" ] && exit 0
# Проверка наличия файла smb.conf.
[ -f /etc/smb.conf ] || exit 0
RETVAL=0
# See how we were called.
case "$1" in
  start)
    echo -n "Starting SMB services: "
    daemon smbd -D
    RETVAL=$?
    echo
    echo -n "Starting NMB services: "
    daemon nmbd -D
    RETVAL2=$?
    echo
    [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && touch /var/lock/subsys/smb || \
    RETVAL=1
  ;;
  stop)
    echo -n "Shutting down SMB services: "
    killproc smbd
    RETVAL=$?
    echo
    echo -n "Shutting down NMB services: "
    killproc nmbd
    RETVAL2=$?
    [ $RETVAL -eq 0 -a $RETVAL2 -eq 0 ] && rm -f /var/lock/subsys/smb
    echo ""
  ;;
  restart)
    $0 stop
    $0 start
    RETVAL=$?
  ;;
  reload)
    echo -n "Reloading smb.conf file: "
    killproc -HUP smbd
    RETVAL=$?
    echo
  ;;
  status)
    status smbd
    status nmbd
    RETVAL=$?
  ;;
  *)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
esac
exit $RETVAL

Сейчас, мы должны сделать этот скрипт исполняемым и изменить права доступа к нему:

[root@deep /]# chmod 700 /etc/rc.d/init.d/smb

Создадим символическую rc.d ссылку для Samba:

[root@deep /]# chkconfig --add smb

Скрипт Samba не будет автоматически стартовать демоны smbd и nmbd, когда система перезагружена. Чтобы изменить это, выполните следующую команду:

[root@deep /]# chkconfig --level 345 smb on

Запустите сервер Samba вручную:

[root@deep /]# /etc/rc.d/init.d/smb start
Starting SMB services:            [ OK ]
Starting NMB services:            [ OK ]

Организация защиты Samba

Иммунизация важных конфигурационных файлов

Бит "постоянства" используется для предотвращения случайного удаления или переписывания файлов, которые защищаются. Он также не дает создавать символические ссылки к этим файлам. Так как файлы "smb.conf" и "lmhosts" уже настроены, хорошей идеей будет иммунизировать их:

[root@deep /]# chattr +i /etc/smb.conf
[root@deep /]# chattr +i /etc/lmhosts

Оптимизация Samba

Установка параметра "wide links=" в конфигурационном файле Samba

Большой ошибкой будет установить параметр "wide links" в "no" в конфигурационном файле Samba "/etc/smb.conf". Эта опция, если установлена в "no", говорит Samba не следовать по символическим ссылкам вне экспортируемой области. Чтобы определить находится ли ссылка вне области, Samba следует по символической ссылке, а затем выполняет "directory path lookup", чтобы определить, где на файловой системе символическая ссылка завершилась. Эта операция добавляет шесть дополнительных системных вызовов на каждый файловый lookup, а Samba просматривает имена файлов очень много раз. Тесты, которые были опубликованы, показали, что установка этого параметра снижает производительность Samba сервера на 25-30 процентов.

Настройка кэша буфера

Модификация параметров, влияющих на настройку кэша файловой системы, может значительно улучшить производительность файлового сервера Linux. Linux будет пытаться использовать память, не используемую для других целей, для кэширования файловой системы. Специальный демон, называемый "bdflush", будет периодически сбрасывать на диск содержимое "грязных" буферов (буфер, который содержит модифицированные данные файловой системы или метаданные).

Секрет хорошей производительности - это сохранение в памяти так много данных, как это возможно. Запись на диск является самой медленной операцией при работе с любой файловой системой. Как и с большинством настраиваемых параметров ядра, вы можете изменять эти опции на лету, при помощи специальных файлов "/proc".

Параметры по умолчанию для "bdflush" под Red Hat Linux:

"40 500 64 256 500 3000 500 1884 2"

Чтобы изменить значения bdflush введите следующие команды на вашем терминале:
Под Red Hat Linux 6.1

[root@deep /]# echo "80 500 64 64 15 6000 6000 1884 2" >/proc/sys/vm/bdflush

Вы должны добавить вышеприведенную команду в скрипт "/etc/rc.d/rc.local", чтобы она выполнялась при каждой загрузке компьютера автоматически.

Под Red Hat Linux 6.2
Редактируйте файл "/etc/sysctl.conf" и добавьте следующие строки:

# Улучшение производительности файловой системы vm.bdflush = 80 500 64 64 15 6000 6000 1884 2

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

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters           [ OK ]
Bringing up interface lo             [ OK ]
Bringing up interface eth0           [ OK ]
Bringing up interface eth1           [ OK ]

Эта строка говорит "bdflush" не беспокоиться о записи грязных блоков на диск пока кэш буферов файловой системы не заполниться на 80 процентов. Другое значение определяют максимальное количество грязных буферов, которое может быть записано за одну операцию (500), как долго разрешается грязному буферу существовать (60*HZ) и т.д. Полное описание всех параметров вы можете найти в документации, поставляемой вместе с ядром 2.2, в файле "linux/Documentation/sysctl/vm.txt", и также, вы можете прочитать главу 4, "Общая системная оптимизация" этой книги.

Настройка buffermem

Другая полезная настройка должна сообщить Linux следующее: использовать минимум 60 процентов памяти для кэширования буферов; сокращать только когда процент используемой памяти для кэша буферов преодолеет 10 процентов (этот параметр сейчас не используется); и позволять расти до 60 процентов всей памяти (этот параметр сейчас не используется).

По умолчанию значения установленные для "buffermem" в Red Hat Linux равны:

"2 10 60"

Чтобы изменить значения buffermem введите следующую команду на вашем терминале:
Под Red Hat Linux 6.1

[root@deep /]# echo "60 10 60" >/proc/sys/vm/buffermem

Вы должны добавить вышеприведенную команду в скрипт "/etc/rc.d/rc.local", чтобы она выполнялась при каждой загрузке компьютера автоматически. Полное описание всех параметров вы можете найти в документации, поставляемой вместе с ядром 2.2, в файле "linux/Documentation/sysctl/vm.txt", и также, вы можете прочитать главу 4, "Общая системная оптимизация" этой книги.

Под Red Hat Linux 6.2
Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:

# Улучшение производительности виртуальной памяти
vm.buffermem = 60 10 60

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

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters            [ OK ]
Bringing up interface lo              [ OK ]
Bringing up interface eth0            [ OK ]
Bringing up interface eth1            [ OK ]

Напоминаем, что последние два параметра (10 и 60) сейчас не используются, поэтому мы не будем их изменять.

Дополнительная документация

Для получения большей информации вы можете прочитать следующие страницы руководства:

$ man Samba (7) - Файл сервер Windows SMB/CIFS для UNIX
$ man smb.conf (5) - Конфигурационный файл для Samba
$ man smbclient (1) - ftp-подобный клиент для доступа к SMB/CIFS ресурсам
$ man smbd (8) - сервер предоставляющий SMB/CIFS сервисы клиентам
$ man smbmnt (8) - mount smb file system
$ man smbmount (8) - монтирование файловой системе smb
$ man smbpasswd (5) - файл с шифрованными паролями Samba
$ man smbpasswd (8) - изменение SMB пароля пользователя
$ man smbrun (1) - интерфейсная программа между smbd и внешними программами
$ man smbsh (1) - Позволяет доступ к файловой системе Windows NT, используя UNIX команды
$ man smbstatus (1) - отчет о текущих соединениях Samba
$ man smbtar (1) - shell скрипт для резервного копирования совместных ресурсов SMB напрямую на накопители на магнитной ленте UNIX
$ man smbumount (8) - размонтирование для нормальных пользователей
$ man testparm (1) - проверка конфигурационного файла smb.conf на внутренние ошибки
$ man testprns (1) - проверка имени принтера на соответствие правилам smbd

Административные утилиты Samba

Команды описанные ниже, мы будем часто использовать, но на самом деле их много больше, и вы должны изучить страницы руководства (man) и документацию, чтобы получить более подробную информацию.

smbstatus

Утилита smbstatus это очень простая программа, показывающая текущие соединения Samba:

[root@deep /]# smbstatus
Samba version 2.0.7
Service      uid          gid             pid      machine
----------------------------------------------
tmp    webmaster  webmaster    3995   gate    (192.168.1.3) Sat Sep 25 19:40:54 1999

No locked files

Share mode memory usage (bytes):
       1048464(99%) free + 56(0%) used + 56(0%) overhead = 1048576(100%) total

Утилиты пользователя Samba

Команды описанные ниже, мы будем часто использовать, но на самом деле их много больше, и вы должны изучить страницы руководства (man) и документацию, чтобы получить более подробную информацию.

smbclient

Утилита "smbclient" работает подобно ftp программам, но для Samba. Эта небольшая программа позволяет вам забирать файлы с сервера на локальную машину, перекладывать файлы с локальной машины на сервер, передавать информацию о каталогах с сервера и пр.

Для соединения с Windows машиной при помощи утилиты smbclient, используйте команду:

[root@deep /]# smbclient //sbmserver/sharename -U smbclient
[root@deep /]# smbclient //gate/tmp -U smbclient
Password:
Domain=[OPENNA] OS=[Windows NT 4.0] Server=[NT LAN Manager 4.0]
smb: \> ls
.                               D     0         Tue Mar 14 15:31:50 2000
..                              D     0         Tue Mar 14 15:31:50 2000
PostgreSQL                      D     0         Tue Mar 14 15:32:22 2000
Squid                           D     0         Tue Mar 14 15:32:28 2000
Imap                            D     0         Tue Mar 14 15:32:38 2000
E_comm                          D     0         Tue Mar 14 15:32:42 2000
StackGuard.pdf                  A     61440     Tue Dec 21 20:41:34 1999
installation-without-XFree86    A     448       Tue Dec 21 20:41:28 1999
lcap-0_0_3-2_src.rpm            A     13481     Thu Jan 13 01:50:12 2000
mirc561t.exe                    A     948224    Tue Dec 21 20:41:54 1999

             65510 blocks of size 32768. 5295 blocks available

smb: \>

где "//sbmserver" это имя сервера, к которому вы хотите подключиться. "/sharename" - каталог на этом сервере, а "smbclient" - это имя пользователя, под которым вы подключаетесь к серверу.

Инсталлированные файлы

> /etc/rc.d/init.d/smb
> /etc/rc.d/rc0.d/K35smb
> /etc/rc.d/rc1.d/K35smb
> /etc/rc.d/rc2.d/K35smb
> /etc/rc.d/rc3.d/S91smb
> /etc/rc.d/rc4.d/S91smb
> /etc/rc.d/rc5.d/S91smb
> /etc/rc.d/rc6.d/K35smb
> /etc/pam.d/samba
> /etc/logrotate.d/samba
> /etc/codepages
> /etc/codepages/codepage.437
> /etc/codepages/unicode_map.437
> /etc/codepages/codepage.737
> /etc/codepages/unicode_map.737
> /etc/codepages/codepage.775
> /etc/codepages/codepage.850
> /etc/codepages/unicode_map.850
> /etc/codepages/codepage.852
> /etc/codepages/unicode_map.852
> /etc/codepages/codepage.861
> /etc/codepages/unicode_map.861
> /etc/codepages/codepage.932
> /etc/gshadow-
> /usr/bin/smbclient
> /usr/bin/smbspool
> /usr/bin/testparm
> /usr/bin/testprns
> /usr/bin/smbstatus
> /usr/bin/rpcclient
> /usr/bin/smbpasswd
> /usr/bin/make_smbcodepage
> /usr/bin/make_unicodemap
> /usr/bin/nmblookup
> /usr/bin/make_printerdef
> /usr/bin/smbtar
> /usr/bin/addtosmbpass
> /usr/bin/convert_smbpasswd
> /usr/bin/mksmbpasswd.sh
> /usr/man/man1/make_smbcodepage.1
> /usr/man/man1/make_unicodemap.1
> /usr/man/man1/nmblookup.1
> /usr/man/man1/smbclient.1
> /usr/man/man1/smbrun.1
> /usr/man/man1/smbsh.1
> /usr/man/man1/smbstatus.1
> /etc/codepages/unicode_map.932
> /etc/codepages/codepage.866
> /etc/codepages/unicode_map.866
> /etc/codepages/codepage.949
> /etc/codepages/unicode_map.949
> /etc/codepages/codepage.950
> /etc/codepages/unicode_map.950
> /etc/codepages/codepage.936
> /etc/codepages/unicode_map.936
> /etc/codepages/codepage.1251
> /etc/codepages/unicode_map.ISO8859-1
> /etc/codepages/unicode_map.ISO8859-2
> /etc/codepages/unicode_map.ISO8859-5
> /etc/codepages/unicode_map.ISO8859-7
> /etc/codepages/unicode_map.KOI8-R
> /etc/lmhosts
> /etc/smb.conf
> /etc/smbpasswd
> /usr/man/man1/smbtar.1
> /usr/man/man1/testparm.1
> /usr/man/man1/testprns.1
> /usr/man/man5/lmhosts.5
> /usr/man/man5/smb.conf.5
> /usr/man/man5/smbpasswd.5
> /usr/man/man7/samba.7
> /usr/man/man8/nmbd.8
> /usr/man/man8/smbd.8
> /usr/man/man8/smbmnt.8
> /usr/man/man8/smbmount.8
> /usr/man/man8/smbpasswd.8
> /usr/man/man8/smbspool.8
> /usr/man/man8/smbumount.8
> /usr/sbin/smbd
> /usr/sbin/nmbd
> /var/log/samba
> /var/lock/samba

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

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

Глава 21 Серверное программное обеспечение (Файловый сервис) - Samba

В этой главе
Linux Samba сервер
Конфигурации
Создание файла с шифрованными паролями для пользователей
Организация защиты Samba
Оптимизация Samba
Административные средства Samba
Утилиты пользователя Samba
Linux FTP сервер
Настройка бюджета пользователя FTP без shell-а
Настройка окружения пользователя под chroot
Конфигурации
Настройка ftpd для использования с TCP-Wrappers inetd супер сервером
Административные средства FTP
Организация защиты FTP

Linux FTP сервер

Краткий обзор.

Несмотря на прошедшие годы, использование File Transfer Protocol (FTP) является одним из самых популярных способов пересылки файлов с одной машины на другую через сеть. Клиенты и сервера написаны для каждой из популярных платформ присутствующих на рынке, делая таким образом FTP наиболее удобным способом пересылки файлов.

Существует много различных путей настройки вашего FTP сервера. Один из них приватный, только для пользователей системы, который является конфигурацией по умолчанию FTP сервера; приватный FTP сервер позволяет пользователям Linux системы соединиться с сервером по протоколу FTP и получить доступ к их файлам.

Другой тип ftp сервера - анонимный FTP. Такой сервер позволяет кому угодно соединяться с сервером и передавать файлы без получения учетной записи. Из за потенциального риска безопасности системы, должны быть приняты меры, чтобы позволить доступ только к определенным каталогам системы.

Конфигурация, которую мы охватываем здесь, предоставляет FTP полубезопасную область файловой системы (chroot гостевой FTP доступ). Она позволит пользователю получить доступ к каталогу FTP сервера, при этом он не сможет перейти на более высокий уровень. Это наиболее безопасная конфигурация для FTP сервера.


Эти инструкции предполагают.
Unix-совместимые команды.
Путь к исходным кодам "/var/tmp" (возможны другие варианты).
Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.
Все шаги инсталляции осуществляются суперпользователем "root".
wu-ftpd версии 2.6.0

Пакеты.
Домашняя страница Wu-ftpd: http://www.wu-ftpd.org/
FTP сервер Wu-ftpd: 205.133.13.68
Вы должны скачать: wu-ftpd-2.6.0.tar.gz

Раскройте тарбол:

[root@deep /]# cp wu-ftpd-version.tar.gz /var/tmp
[root@deep /]# cd /var/tmp
[root@deep tmp]# tar xzpf wu-ftpd-version.tar.gz

Компиляция и оптмизация.

Перейдите в новый каталог Wu-ftpd и введите следующие команды на вашем терминале:

Шаг 1

Редактируйте файл ftpcount.c (vi +241 src/ftpcount.c) и измените строку:

#if defined (LINUX)
на:
#if defined (LINUX_BUT_NOT_REDHAT_6_0)

Шаг 2

Редактируйте файл pathnames.h.in (vi +42 src/pathnames.h.in) и измените строку:

#define _PATH_EXECPATH "/bin/ftp-exec"
на:
#define _PATH_EXECPATH "/usr/bin/ftp-exec"

Мы изменили каталог "/bin/ftp-exec" на "/usr/bin/ftp-exec", для Red Hat Linux.

Шаг 3

Введите следующие команды на вашем терминале для конфигурирования Wu-ftpd:

CC="egcs" \
CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions" \
./configure \
--prefix=/usr \
--sysconfdir=/etc \
--localstatedir=/var \
--disable-dnsretry \
--enable-quota \
--enable-pam \
--disable-daemon \
--disable-newlines \
--disable-virtual \
--disable-plsm \
--disable-pasvip \
--disable-anonymous \
--enable-ls \
--enable-numericuid

Эти опции означают следующее:

Шаг 4

Сейчас, мы должны инсталлировать Wu-ftpd на Linux сервер:

[root@deep wu-ftpd-2.6.0]# make
[root@deep wu-ftpd-2.6.0]# make install
[root@deep wu-ftpd-2.6.0]# install -m 755 util/xferstats /usr/sbin/
[root@deep wu-ftpd-2.6.0]# touch /var/log/xferlog
[root@deep wu-ftpd-2.6.0]# chmod 600 /var/log/xferlog
[root@deep wu-ftpd-2.6.0]# cd /usr/sbin/
[root@deep sbin]# ln -sf in.ftpd /usr/sbin/wu.ftpd
[root@deep sbin]# ln -sf in.ftpd /usr/sbin/in.wuftpd
[root@deep sbin]# strip /usr/bin/ftpcount
[root@deep sbin]# strip /usr/bin/ftpwho
[root@deep sbin]# strip /usr/sbin/in.ftpd
[root@deep sbin]# strip /usr/sbin/ftpshut
[root@deep sbin]# strip /usr/sbin/ckconfig
[root@deep sbin]# strip /usr/sbin/ftprestart

Команды "make" и "make install" настроят программное обеспечение под вашу систему и проверят ее функциональность на наличие необходимых библиотек, скомпилируют все файлы с исходными кодами в исполняемые двоичные программы и проинсталлируют их вместе с сопутствующими файлами в необходимые места.

Команда "install -m" будет инсталлировать программу "xferstats", используемую для просмотра информации о переданных файлах. Команда "touch" создаст файл регистрации для "xferstats" в каталоге "/var/log". "chmod" изменит права доступа к файлу "xferlog" на чтение-запись только пользователю "root". Затем, мы создаем символическую ссылку для исполняемого файла "in.ftpd", и, в заключении, удаляем отладочную информацию из всех исполняемых файлов, относящихся к Wu-ftpd.

Очистка после работы.

[root@deep /]# cd /var/tmp
[root@deep tmp]# rm -rf wu-ftpd-version/ wu-ftpd-version.tar.gz

Команды "rm" будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции Wu-ftpd. Также будет удален сжатый архив Wu-ftpd из каталога "/var/tmp".

Настройка бюджета пользователя FTP без командного процессора (shell)

Чрезвычайно важно, чтобы ваши пользователи FTP не имели реального командного процессора. В этом случае, если они по каким-либо причинам смогут покинуть chroot окружение FTP, то не смогут выполнить никаких задач, так как не имеют командного процессора.

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

Шаг 1

Используйте следующие команды для создания пользователя в файле "/etc/passwd". Этот шаг должен выполняться для каждого пользователя, кому нужен доступ к FTP серверу.

[root@deep /]# mkdir /home/ftp
[root@deep /]# useradd -d /home/ftp/ftpadmin/ -s /dev/null ftpadmin > /dev/null 2>&1
[root@deep /]# passwd ftpadmin
Changing password for user ftpadmin
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully

Команда "mkdir" создаст каталог "ftp" в "/home" для хранения всех домашних каталогов FTP пользователей. Команда "useradd" добавит нового пользователя с именем "ftpadmin" в вашей системе. В заключении, команда "passwd" установит пароль для него. После того, как каталог "/home/ftp/" создан, вам не нужно будет создавать его для каждого нового пользователя.

Шаг 2

Редактируйте файл "/etc/shells" (vi /etc/shells) и добавьте в него несуществующий командный процессор, например "null". Этот ложный shell ограничит доступ FTP пользователям к системе.

[root@deep /]# vi /etc/shells
/bin/bash
/bin/sh
/bin/ash
/bin/bsh
/bin/tcsh
/bin/csh
/dev/null
(это ваш несуществующий командный процессор)

ЗАМЕЧАНИЕ. В Red Hat Linux, специальное имя устройства (/dev/null) существует для подобных целей.

Шаг 3

Сейчас, редактируйте ваш файл "/etc/passwd" и вручную добавьте подстроку "/./", разделяющую каталоги "/home/ftp" и "/ftpadmin", где "ftpadmin" должен автоматически изменить каталог. Этот шаг должен быть выполнен для каждого FTP пользователя, добавляемого в файл "passwd".

Редактируйте файл passwd (vi /etc/passwd) и добавьте/измените строку для пользователя "ftpadmin":

ftpadmin:x:502:502::/home/ftp/ftpadmin/:/dev/null
на:
ftpadmin:x:502:502::/home/ftp/./ftpadmin/:/dev/null
                             ^^

Обратите внимание, что путь к домашнему каталогу пользователя "ftpadmin" немного нечеткий. Первая часть "/home/ftp/" показывает файловую систему, которая должна стать новый корневым каталогом. Разделяющая точка "." говорит, что из текущего каталога необходимо автоматически переходить в "/ftpadmin/". Еще раз отметим, что часть "/dev/null" отключает вход в систему, как регулярного пользователя. С этим изменением, пользователь "ftpadmin" имеет ложный командный процессор вместо реального, тем самым имея ограничения в доступе к системе.

Установка пользовательского окружения chroot

Далее вы должны создать основу корневой файловой системы с достаточным количеством необходимых компонентов (исполняемые файлы, файлы парлей и т.д.), чтобы позволить Unix выполнить chroot, когда пользователь входит в систему. Заметим, что если вы использовали опцию "--enable-ls" во время компиляции, как мы предлагали выше, то каталоги "/home/ftp/bin" и "/home/ftp/lib" не нужны, так как Wu-ftpd будет использовать собственную функцию "ls". Мы остановимся на демонстрации старого метода, при котором люди копируют "/bin/ls" в chroot FTP каталог ("/home/ftp/bin") и создают соответствующие библиотеки, связанные с "ls".


Необходимо выполнить следующие шаги, чтобы запустить Wu-ftpd в chroot окружении:

Шаг 1

Создадим все необходимые каталоги chroot окружения:

[root@deep /]# mkdir /home/ftp/dev
[root@deep /]# mkdir /home/ftp/etc
[root@deep /]# mkdir /home/ftp/bin
(требуется, если вы не использовали опцию "--enable-ls")
[root@deep /]# mkdir /home/ftp/lib (требуется, если вы не использовали опцию "--enable-ls")

Шаг 2

Измените права доступа к новым каталогам на 0511 из соображений безопасности:

[root@deep /]# chmod 0511 /home/ftp/dev/
[root@deep /]# chmod 0511 /home/ftp/etc/
[root@deep /]# chmod 0511 /home/ftp/bin
(требуется, если вы не использовали опцию "--enable-ls")
[root@deep /]# chmod 0511 /home/ftp/lib (требуется, если вы не использовали опцию "--enable-ls")

Команда "chmod" изменит права доступа к chroot каталогам "dev", "etc", "bin" и "lib" на чтение и исполнения для "root" и исполнение для группы и всех остальных пользователей.

Шаг 3

Копируйте исполняемый файл "/bin/ls" в каталог "/home/ftp/bin" и изменим права доступа к нему на 0111. (Вы не хотите позволять пользователям модифицировать этот файл):

[root@deep /]# cp /bin/ls /home/ftp/bin (требуется, если вы не использовали опцию "--enable-ls")
[root@deep /]# chmod 0111 /bin/ls /home/ftp/bin/ls (требуется, если вы не использовали опцию "--enable-ls")

ЗАМЕЧАНИЕ. Этот шаг необходим только если вы не использовали при конфигурировании опцию "--enable-ls". Смотрите секцию "Компиляция и оптимизация" в этой главе.

Шаг 4

Найдите разделяемые библиотеки от которых зависит программа "ls":

[root@deep /]# ldd /bin/ls (требуется, если вы не использовали опцию "--enable- ls")
libc.so.6 => /lib/libc.so.6 (0x00125000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00110000)

Копируйте их в новый каталог "lib", расположенный в "/home/ftp":

[root@deep /]# cp /lib/libc.so.6 /home/ftp/lib(требуется, если вы не использовали опцию "--enable-ls")
[root@deep /]# cp /lib/ld-linux.so.2 /home/ftp/lib/ (требуется, если вы не использовали опцию "--enable-ls")

ЗАМЕЧНИЕ. Эти библиотеки нужны для работы команды "ls". Также, как и шаг 3, это необходимо сделать, если вы во время конфигурирования Wu-ftpd не указали опцию "--enable-ls" для использования внутренней команды "ls".

Шаг 5

Создайте файл "/home/ftp/dev/null":

[root@deep /]# mknod /home/ftp/dev/null c 1 3
[root@deep /]# chmod 666 /home/ftp/dev/null

Шаг 6

Копируйте файлы "group" и "passwd" в каталог "/home/ftp/etc". Они не должны быть такими же, как оригиналы. Мы удалим из них всех не FTP пользователей, исключая "root".

[root@deep /]# cp /etc/passwd /home/ftp/etc/
[root@deep /]# cp /etc/group /home/ftp/etc/

Редактируйте файл passwd (vi /home/ftp/etc/passwd) и удалите из него все элементы, кроме "root" и ваших FTP пользователей. Файл должен иметь следующий вид:

root:x:0:0:root:/:/dev/null
ftpadmin:x:502:502::/ftpadmin/:/dev/null

ЗАМЕЧАНИЕ. Мы отметим здесь две вещи: первое, домашний каталог всех пользователей был изменен (например, /home/ftp/./ftpadmin/ на /ftpadmin/), и второе, командный процессор для пользователя "root" был изменен на "/dev/null".

Редактируйте файл group (vi /home/ftp/etc/group) и удалите все элементы, исключая "root" и всех FTP пользователей. Файл "group" должен соответствовать вашему нормальному файлу групп:

root:x:0:root
ftpadmin:x:502:

Шаг 7

Сейчас, мы должны иммунизировать файлы "passwd" и "group", находящиеся в chroot окружении.

Установим бит "постоянства" на файл "passwd":

[root@deep /]# cd /home/ftp/etc/
[root@deep /]# chattr +i passwd

Установим бит "постоянства" на файл "group":

[root@deep /]# cd /home/ftp/etc/
[root@deep /]# chattr +i group

Конфигурации.

Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файлы связанные с Wu-ftpd из архива, измените их под свои требования и поместите в нужное место так, как это описано ниже. Файл с конфигурациями вы можете скачать с адреса: http://www.openna.com/books/floppy.tgz

Для запуска ftp сервера следующие файлы должны быть созданы или скопированы на ваш сервер.

Копируйте файлы ftpaccess в каталог "/etc/".
Копируйте файлы ftpusers в каталог "/etc/".
Копируйте файлы ftphosts в каталог "/etc/".
Копируйте файлы ftpgroups в каталог "/etc/".
Копируйте файлы ftpconversion в каталог "/etc/".
Копируйте ftpd в каталог "/etc/logrotate.d/".
Копируйте ftp в каталог "/etc/pam.d/".

Вы можете взять эти файлы из нашего архива floppy.tgz.

Конфигурация файла "/etc/ftpaccess"

"/etc/ftpaccess" - это основной конфигурационный файл, используемый для конфигурирования сервера Wu-ftpd. Этот файл первоначально предназначен для определения какие пользователи, сколько пользователей, могут получить доступ к вашему серверу, и прочих важных элементов настройки безопасности сервера.

Шаг 1

Редактируйте файл ftpaccess (vi /etc/ftpaccess) и добавьте/измените в нем следующие строки:

class      openna      guest        208.164.186.*

limit openna 20 MoTuWeTh,Fr0000-1800 /home/ftp/.too_many.msg
email admin@openna.com

loginfails 3

readme README*    login
readme README*    cwd=*

message /home/ftp/.welcome.msg login
message .message              cwd=*
compress         yes     all
tar              yes     all
chmod            yes     guest
delete           yes     guest
overwrite        yes     guest
rename           yes     guest

log commands real,guest
log transfers real,guest inbound,outbound

guestgroup ftpadmin
guestgroup webmaster

# We don't want users being able to upload into these areas.
upload /home/ftp/* /       no
upload /home/ftp/* /etc    no
upload /home/ftp/* /dev    no

# We'll prevent downloads with noretrieve.
noretrieve /home/ftp/etc
noretrieve /home/ftp/dev

log security real,guest

guest-root /home/ftp ftpadmin webmaster
restricted-uid ftpadmin webmaster
restricted-gid ftpadmin webmaster

greeting terse
keepalive yes
noretrieve .notar

Шаг 2

Сейчас мы должны изменить права доступа на 600:

[root@deep /]# chmod 600 /etc/ftpaccess

Эти параметры конфигурационного файла говорят следующее:

class openna guest 208.164.186.*
Опция "class" определяет классы пользователей, которые имеют доступ к вашему FTP серверу. Вы можете определить столько классов, сколько хотите. В нашем случае, например, мы определяем класс с именем <openna>, и позволяем пользователю <guest> с учетными записями на ftp сервере доступ к их домашним каталогам через FTP, если они заходят с адреса 208.164.186.*. Важно заметить, что существует три различных типа пользователей: anonymous, guest, и real. Пользователи Anonymous - это любой пользователь сети, который подключается к серверу и пересылает файлы не имея учетной записи на нем. Пользователь Guest - это реальный пользователь системы для которых сессии настроены также, как и для анонимных пользователей FTP (это то, что мы определили в нашем примере), и пользователь Real должен иметь учетную запись и командный процессор (shell) (это может приводить к риску для безопасности) на сервере для доступа к нему.

limit openna 20 MoTuWeTh,Fr0000-1800 /home/ftp/.too_many.msg
Опция "limit" определяет число пользователей данного класса, которым разрешается подключаться к серверу, и разрешенное время суток. В нашем примере, к FTP серверу из класса <openna> может подключаться максимум 20 пользователей, в понедельник, вторник, среда, четверг целый день, а в пятницу с полуночи до 6:00 вечера <Fr0000-1800>. Также, если количество пользователей достигло предела (20), то вновь подключаемым пользователям будет выдаваться сообщение </home/ftp/.too_many.msg>. Это очень полезный параметр для контроля за ресурсами сервера.

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

readme README* login
readme README* cwd=*

Опция "readme" определяет сообщение выдаваемое клиенту во время регистрации на сервере, или во время использования команды смены каталога, которая определяет файлы в текущем каталоге измененные в последнее время. В нашем примере, мы устанавливаем имя файла <README*> относительно каталога FTP, и условия вывода сообщения: при успешном входе в систему <login> или входе в новый каталог <cwd=*>.

message /home/ftp/.welcome.msg login
message .message cwd=*

Опция "message" определяет специальные сообщения, отображаемые клиентам, когда они либо вошли в систему, либо используют команду смены рабочего каталога. В нашем примере, мы показываем месторасположение и имя файлов выводимых файлов </home/ftp/.welcome.msg или .message>, и условия при которых они выводятся: при успешной регистрации в системе <login>, или когда клиент входит в новый каталог <cwd=*>. Для опций "readme" и "message", когда вы определяете путь для анонимных пользователей, вы должны использовать абсолютный путь относительно анонимного FTP каталога.

compress yes all
tar yes all
chmod yes guest
delete yes guest
overwrite yes guest
rename yes guest
Опции "compress", "tar", "chmod", "delete", "overwrite" и "rename" определяют права, которые вы хотите дать вашим пользователям на выполнение этих команд. В нашем примере, мы даем права группе <guest> на команды chmod, delete, overwrite и rename, и позволяем всем <all> использовать команды compress и tar. Если вы не определите следующие директивы, они по умолчанию будут выставлены в "yes" для всех.

log commands real,guest
Опция "log commands" включает регистрацию команд пользователей из соображений безопасности. В нашем примере, мы регистрируем все индивидуальные команды пользователей real и guest <real,guest>. Результаты регистрации сохраняются в файле "/var/log/message".

log transfers real,guest inbound,outbound
Опция "log transfers" включает регистрацию всех FTP пересылок из соображения безопасности. В нашем примере, мы регистрируем все пересылки пользователей real и guest <real,guest>, inbound и outbound <inbound,outbound> определяют направления пересылки, в нашем случае входящие и исходящие. Результаты сохраняются в файле "/var/log/xferlog".

guestgroup ftpadmin
guestgroup webmaster
Опция "guestgroup" определяет всех реальных пользователей относящихся к группе гостей, сессии которых настроены также, как и в анонимном FTP <ftpadmin и webmaster>. Файл "/home/ftp/etc/group" имеет входы для каждой из этих групп, каждая из которых имеет только одного члена. Важно, что в конфигурационном файле в одной строке должна быть записана одна гостевая группа.

log security real,guest
Опция "log security" включает регистрацию нарушений правил безопасности для реальных, гостевых и/или анонимных FTP клиентов. В нашем примере, мы разрешаем регистрацию нарушений для пользователей использующих FTP сервер для доступа с реальных учетных записей и гостевых бюджетов <real,guest>.

guest-root /home/ftp ftpadmin webmaster
restricted-uid ftpadmin webmaster
restricted-gid ftpadmin webmaster
Эти опции, "guest-root", "restricted-uid", "restricted-gid", определяют и контролируют могут или нет пользователи guest получить доступ в области FTP сервера вне их домашних каталогов (это важная функция повышения безопасности). В нашем примере, мы определяем chroot() путь для пользователей <ftpadmin и webmaster> в </home/ftp>, и они не могут получить доступа к другим файлам, потому что ограничены своими домашними каталогами <restricted-uid ftpadmin webmaster>, <restricted-gid ftpadmin webmaster>. Несколько диапазонов UID может задаваться в этой строке. Если для пользователя выбран guest-root, то домашний каталог пользователя из файла "<root-dir>/etc/passwd" используется для определения начального каталога, и их домашний каталог в масштабе всей системы из файла "/etc/passwd" не используется.

greeting terse
Опция "greeting" определяет, как много системной информации будет выводится до того, как удаленный пользователь войдет в систему. Здесь вы можете использовать три значения: <full> - используется по умолчанию, показывает имя хоста и версию демона, <brief> - только имя хоста, <terse> - просто сообщает "FTP server ready".

keepalive yes
Опция "keepalive" определяет должна ли система сообщения keep alive на удаленный FTP сервер. Если установлена в "yes", то сервер получит необходимое предупреждение о разрыве соединения или падении удаленной машины.

Конфигурация файла "/etc/ftphosts"

Файл "/etc/ftphosts" используется для определения следующего: может ли пользователь входить в систему с определенной машины или ему будет запрещен доступ.

Шаг 1

Создайте файл ftphosts (touch /etc/ftphosts) и добавьте, например, в него следующие строки:

# Пример файла host access
#
# Все, что после '#' это комментарии,
# пустые строки игнорируются
allow ftpadmin  208.164.186.1 208.164.186.2 208.164.186.4
deny  ftpadmin  208.164.186.5

В нашем примере, мы разрешаем пользователю <ftpadmin> соединяться с FTP сервером из явно заданного списка адресов <208.164.186.1 208.164.186.2 208.164.186.4>, и запрещаем пользователю <ftpadmin> соединяться с сервера <208.164.186.5>.

Шаг 2

Измените права доступа на 600:

[root@deep /]# chmod 600 /etc/ftphosts

Конфигурация файла "/etc/ftpusers"

Файл "/etc/ftpusers" определяет пользователей, которым не разрешен доступ на FTP сервер.

Шаг 1

Создайте файл ftpusers (touch /etc/ftpusers) и добавьте в него следующих пользователей:

root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

Шаг 2

Изменим права доступа к этому файлу на 600:

[root@deep /]# chmod 600 /etc/ftpusers

Конфигурация файла "/etc/ftpconversions"

Файл "/etc/ftpconversions" содержит инструкции, которые разрешают вам по требованию сжимать файлы перед пересылкой.

Шаг 1

Редактируйте файл ftpconversions (vi /etc/ftpconversions) и добавьте в него следующие строки:

:.Z   : : :/bin/compress -d -c %s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS
:     : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS
:.gz: : :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP
:     : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP
:     : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR
:     : :.tar.Z:/bin/tar -c -Z -f -
%s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS
:     : :.tar.gz:/bin/tar -c -z -f - 
%s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP
:     : :.crc:/bin/cksum %s:T_REG::CKSUM
:     : :.md5:/bin/md5sum %s:T_REG::MD5SUM

Шаг 2

Измените права доступа на 600:

[root@deep /]# chmod 600 /etc/ftpconversions

Конфигурация файла "/etc/pam.d/ftp"

Сконфигурируйте ваш файл "/etc/pam.d/ftp" для использования pam аутентификации.

Создайте файл ftp (touch /etc/pam.d/ftp) и добавьте в него следующие строки:

#%PAM-1.0
auth    required  /lib/security/pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
auth    required  /lib/security/pam_pwdb.so shadow nullok
auth    required  /lib/security/pam_shells.so
account required  /lib/security/pam_pwdb.so
session required  /lib/security/pam_pwdb.so

Конфигурация файла "/etc/logrotate.d/ftpd"

Настройте ваш файл "/etc/logrotate.d/ftpd" на автоматическую ротацию файлов регистраций каждую неделю.

Создайте файл ftpd (touch /etc/logrotate.d/ftpd) и добавьте в него следующие строки:

/var/log/xferlog {
    # ftpd должным образом не обрабатывает SIGHUP
    nocompress
}

Настройка ftpd на использование tcp-wrappers из супер сервера inetd

Tcp-wrappers должен быть включен на запуск и остановку ftpd сервера. inetd читает настроечную информацию из своего конфигурационного файла "/etc/inetd.conf". Для каждого поля этого файла должно обязательно присутствовать его значение, поля разделяются пробелами или символами табуляции.

Шаг 1

Редактируйте файл inetd.conf (vi /etc/inetd.conf) и добавьте или проверьте на наличие следующие строки:

ftp  stream  tcp  nowait   root   /usr/sbin/tcpd in.ftpd -l -a

Чтобы изменения вступили в силу, пошлите демону inetd сигнал SIGHUP, используя следующую команду:

[root@deep /]# killall -HUP inetd

Шаг 2

Редактируйте файл hosts.allow (vi /etc/hosts.allow) и добавьте, например, следующую строку:

in.ftpd: 192.168.1.4 win.openna.com

Которая говорит, что клиенту с IP адресом "192.168.1.4" и именем хоста "win.openna.com" разрешен FTP доступ на сервер.

Административные утилиты FTP

ftpwho

Программа ftpwho выводит всех активных пользователей ftp, и их текущие процессы в системе. Выходные данные выдаются в формате напоминающем команду "/bin/ps".

[root@deep /]# ftpwho
Service class openna:
5443  ?      S      0:00 ftpd: win.openna.com: ftpadmin: IDLE
- 1 users ( 20 maximum)

Здесь вы видите, что к системе подключен один пользователь с именем "ftpadmin" и пришедший с win.openna.com. Всего к серверу может подключиться 20 пользователей.

ftpcount

Утилита ftpcount - это упрощенная версия ftpwho. Она показывает только количество пользователей подключенных к системе в данный момент и общее количество, которое может подключиться:

[root@deep /]# ftpcount
Service class openna - 1 users ( 20 maximum)

Организация защиты FTP

Файл ftpusers

Важно удостовериться, что вы настроили файл "/etc/ftpusers". В нем определяются пользователи, которым не разрешено соединяться с вашим FTP сервером. В него должны быть включены, как минимум, следующие пользователи: root, bin, daemon, adm, lp, sync, shutdown, halt, mail, news, uucp, operator, games, nobody и ВСЕ другие определенные по умолчанию пользователи, доступные в вашем файле "/etc/passwd".

Анонимный FTP

Для отключения анонимного FTP, удалите пользователя "ftp" из вашего файла паролей и проверьте, что пакет anonftp-version.i386.rpm не инсталлирован. Для удаления пользователя "ftp" выполните следующую команду:

[root@deep /]# userdel ftp

Для проверки, что RPM пакет анонимного FTP не инсталлирован у вас на системе выполните следующую команду:

[root@deep /]# rpm -q anonftp
package anonftp is not installed

Команда upload

По умолчанию, Wu-ftpd сервер разрешает upload всем пользователям. Параметр upload позволяет удаленным пользователям загружать и размещать файлы на FTP сервере. Для оптимальной безопасности, мы не хотим разрешать пользователям загружать файлы в подкаталоги "bin", "etc", "dev" и "lib" каталога "/home/ftp". В нашем файле "/etc/ftpaccess" мы уже сменили корневой каталог (chroot) пользователей на "/home/ftp", и поэтому они не имеют доступ к другим областям файловой системы.

Редактируйте файл ftpaccess (vi /etc/ftpaccess) и добавьте следующие строки, которые запретят upload в определенные области.

# Мы не хотим, чтобы пользователи могли закачивать файлы в эти области.
upload /home/ftp/* / no
upload /home/ftp/* /etc no
upload /home/ftp/* /dev no
upload /home/ftp/* /bin no (требуется только если вы не использовали опцию "--
enable-ls")
upload /home/ftp/* /lib no (требуется только если вы не использовали опцию "--
enable-ls")

Вышеприведенные строки запрещают upload в подкаталоги "/", "/etc", "/dev", "/bin" и "/lib" chroot каталога "/home/ftp".

Специальный файл ".notar"

Хотите ли вы разрешать таррить каталоги или нет, вы должны сделать так, чтобы нельзя было выполнить команду tar в областях, где запрещен upload.

Шаг 1

Чтобы сделать это, создайте специальный файл '.notar' в каждом каталоге и каталоге FTP.

[root@deep /]# touch /home/ftp/.notar
[root@deep /]# touch /home/ftp/etc/.notar
[root@deep /]# touch /home/ftp/dev/.notar
[root@deep /]# touch /home/ftp/bin/.notar
(требуется только если вы не использовали опцию "--enable-ls")
[root@deep /]# touch /home/ftp/lib/.notar (требуется только если вы не использовали опцию "--enable-ls")
[root@deep /]# chmod 0 /home/ftp/.notar
[root@deep /]# chmod 0 /home/ftp/etc/.notar
[root@deep /]# chmod 0 /home/ftp/dev/.notar
[root@deep /]# chmod 0 /home/ftp/bin/.notar
(требуется только если вы не использовали опцию "--enable-ls")
[root@deep /]# chmod 0 /home/ftp/lib/.notar (требуется только если вы не использовали опцию "--enable-ls")

Шаг 2

Файл нулевой длины ".notar" может привести в замешательство некоторые веб клиенты и FTP прокси, чтобы решить эту проблему, надо запретить пересылку этого файла.

Редактируйте файл ftpaccess (vi /etc/ftpaccess) и добавьте следующую строку, чтобы маркировать файл ".notar" как непересылаемый.

noretrieve .notar

Команда noretrieve.

Параметр noretrieve сервера Wu-ftpd позволяет вам запретить пересылку выбранных каталогов или файлов. Хорошей идеей будет предотвращение передачи некоторых подкаталогов (bin, etc, dev, and lib) из каталога "/home/ftp" при помощи команды "noretrieve" в файле "/etc/ftpaccess" file. Редактируйте файл ftpaccess (vi /etc/ftpaccess) и добавьте следующие строки для предотвращения передачи ряда каталогов.

# Мы предотвращаем перекачку при помощи noretrieve.
noretrieve /home/ftp/etc
noretrieve /home/ftp/dev
noretrieve /home/ftp/bin (требуется только если вы не использовали опцию "--
enable-ls")
noretrieve /home/ftp/lib (требуется только если вы не использовали опцию "--
enable-ls")

Инсталлированные файлы

> /etc/pam.d/ftp
> /etc/logrotate.d/ftpd
> /etc/ftpaccess
> /etc/ftpconversions
> /etc/ftpgroups
> /etc/ftphosts
> /etc/ftpusers
> /home/ftp/
> /usr/man/man5/ftpconversions.5
> /usr/man/man5/xferlog.5
> /usr/man/man8/ftpd.8
> /usr/man/man8/ftpshut.8
> /usr/man/man8/ftprestart.8
> /usr/sbin/in.ftpd
> /usr/sbin/ftpshut
> /usr/sbin/ckconfig
> /usr/bin/ftpcount
> /usr/bin/ftpwho
> /usr/man/man1/ftpcount.1
> /usr/man/man1/ftpwho.1
> /usr/man/man5/ftpaccess.5
> /usr/man/man5/ftphosts.5
> /usr/sbin/ftprestart
> /usr/sbin/xferstats
> /usr/sbin/wu.ftpd
> /usr/sbin/in.wuftpd
> /var/log/xferlog

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

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

Часть V Рекомендации связанные с резервным копированием

Глава 22 Процедуры резервирования и восстановления данных

В этой главе
Резервное копирование и восстановление в Linux
Программа резервного копирования tar
Создание резервных копий с tar
Автоматизация задачи резервного копирования с tar
Восстановление файлов с tar
Программа резервного копирования dump
Создание резервных копий с dump
Восстановление файлов с dump
Резервное копирование и восстановление через сеть

Резервное копирование и восстановление в Linux

Краткий обзор.

Безопасность и надежность сервера вплотную связана с процедурой регулярного резервного копирования. Иногда могут возникать различные повреждения. Они могут быть следствием атак, ошибок аппаратного обеспечения, людских ошибок, перепадов напряжения и пр. Самый надежный метод резервного копирования это записать данные в место независимое от вашего Linux сервера, например, через сеть, на стример, сменный носитель, записываемый CD-ROM и пр.

В Linux существует много методов выполнить резервное копирование, среди них такие, как "dump", "tar", "cpio" и "dd". Также доступны утилиты базирующиеся на текстовых файлах, например "Amanda", которая разработана, чтобы добавить дружественный пользовательский интерфейс к процедуре резервного копирования и восстановления данных. И наконец, коммерческие пакеты резервного копирования, например "BRU".

Процедуры выполнения резервного копирования и восстановления данных будет отличаться в зависимости от выбранного вами решения. Из этих соображений, мы будем обсуждать здесь процедуру резервного копирования при помощи традиционных для UNIX утилит: "tar" и "dump".

Что такое резервное копирование

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

Программа резервного копирования tar

Описание

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

Простая схема резервного копирования

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

Создание резервных копий с tar

С шестью лентами вы можете делать резервные копии каждый день; процедура использует ленту 1 для полного резервного копирования (Пятница 1), и ленты со 2 по 5 для добавочного резервного копирования (С понедельника по четверг). Затем, мы делаем новую полную резервную копию на ленту 6 (вторая пятница), и далее делаем добавочные копии на лентах со 2 по 5. Важно сохранить 1 в неприкосновенности, пока мы не получим полную резервную копию на ленте 6. В следующем примере, мы подразумеваем, что записываем резервные копии на SCSI ленточное устройство с именем (/dev/st0), и создаем резервную копию домашнего каталога (/home) нашей системы.

Первое, мы должны переместиться в корневой раздел. Когда "tar" создает архивные файлы, он удаляет начальный символ "/" (слеш) из пути к файлу. Это значит, что после восстановления файлы могут оказаться не на своем месте. Чтобы решить эту проблему, необходимо до изготовления резервных копий и восстановления данных переходить в корневой раздел вашей файловой системы.

Переместитесь в корневой раздел:

[root@deep]# cd /

Важно всегда начинать с изготовления полной резервной копии, например, в пятницу:

Далее, делаем добавочные резервные копии на лентах со 2 по 5 и так далее.

Опция "c" определяет, что мы создаем архивный файл.
Опция "p" сохраняет права доступ.
Опция "N" делает добавочную резервную копию и запоминает файлы новее чем DATE.
Опция "f" говорит, что следующий аргумент будет либо имя архивного файла, либо имя устройства на которое производится запись.

Объясним как мы получили имя файла, который содержит текущую дату: просто поместите команду "date" между обратными кавычками. К основному имени добавляется суффикс "tar" для не сжатых архивов, и суффикс "tar.gz" для сжатых. Так как мы не определяем конкретное имя для файла резервной копии, то воспользуемся опцией "--label", которая позволяет записать некоторую информацию в архивный файл. В заключении мы определяем, что только файлы из каталога "/home" будут записаны на ленту.

Так как лента это устройство посимвольного ввода, мы не можем определить имя файла. Поэтому, в качестве аргумента для опции "имя файла" программы tar используется просто имя устройства, "/dev/st0". Устройство "/dev/st0" не перематывается после создания резервной копии; поэтому, мы имеем возможность записать на одну ленту несколько сессий. Вы можете, также сказать устройству "/dev/st0", автоматически перемотать ленту после окончания записи резервной копии. При работы с лентой, вы можете использовать следующие команды для перематывания и извлечения ленты из устройства:

[root@deep /]# mt -f /dev/st0 rewind
[root@deep /]# mt -f /dev/st0 offline

ПРЕДОСТЕРЕЖЕНИЕ. Для уменьшения пространства занимаемого tar архивом, резервная копия может быть сжата при помощи опции "z" программы tar. К сожалению, использование этой опции может создать ряд проблем. Из природы работы сжатия следует, что если хотя бы один бит будет испорчен, то и все данные нужные для восстановления будут потеряны. Поэтому рекомендуется не использовать сжатие (опция "z") для создания резервной копии при помощи команды tar.

Если ваша резервная копия не помещается на ленте, то вам надо использовать опцию --multi-volume (-M) для создания многотомных архивов:

[root@deep /]# cd /
[root@deep /]# tar cMpf /dev/st0 /home
Prepare volume #2 for /dev/st0 and hit return:

После того, как вы создали резервную копию, вы должны убедиться, что все OK, используя опцию --compare (-d):

[root@deep /]# cd /
[root@deep /]# tar dvf /dev/st0

Для резервного копирования всей системы используйте следующую команду:

[root@deep /]# cd /
[root@deep /]# tar cpf /archive/full-backup-`date '+%d-%B-%Y'`.tar \
--directory / --exclude=proc --exclude=mnt --exclude=archive \
--exclude=cache --exclude=*/lost+found .

Опция "--directory" говорит tar, что до начала резервного копирования надо перейти в следующий каталог (в нашем примере "/"). Опция "--exclude" говорит tar не создавать резервные копии заданных каталогов и файлов. Символ ".", находящийся в конце командной строки говорит tar, что он должен копировать все в текущем каталоге.

ПРЕДУПРЕЖДЕНИЕ. Когда вы создаете резервную копию вашей системы, не включайте в нее псевдофайловую систему "/proc"! Файлы "/proc" не настояшие файлы, это просто файлоподобные ссылки к структуре ядра. Также не включайте каталоги "/mnt", "/archive" и все "lost+found".

Автоматизация задачи резервного копирования при помощи tar

Всегда интересно автоматизировать задачу резервного копирования. Автоматизация предлагает огромные возможности использования вашего Linux сервере для целей, которые вы поставили. Следующий пример, представляет из себя скрипт для резервного копирования, называемый "backup.cron". Этот скрипт написан для запуска на любом компьютере, при этом, вы должны поменять только четыре переменные: COMPUTER, DIRECTORIES, BACKUPDIR и TIMEDIR. Мы считаем, что вы устанавливаете этот сценарий для запуска его в начале месяца для получения полной резервной копии, а затем используете его в течении месяца для получения добавочных копий. В нашем примере, мы создаем резервную копию в каталоге на локальном сервере (BACKUPDIR), но вы можете изменить это для использования ленты на локальном сервере или смонтированной файловой системы NFS.

Шаг 1

Создайте скрипт резервного копирования backup.cron (touch /etc/cron.daily/backup.cron) и добавьте в него следующие строки:

#!/bin/sh
# скрипт полного и добавочного резервного копирования
# создан 07 февраля 2000
# Базируется на скрипте Daniel O'Callaghan <danny@freebsd.org>
# и модифицирован Gerhard Mourani <gmourani@videotron.ca>
# Измените следующие пять переменных под вашу систему
COMPUTER=deep # имя этого компьютера
DIRECTORIES="/home" # каталог для резервного копирования
BACKUPDIR=/backups # где храним резервные копии
TIMEDIR=/backups/last-full # где сохраняем время полной резервной копи
TAR=/bin/tar # имя и расположение tar
#Вы не должны менять то, что написано ниже
PATH=/usr/local/bin:/usr/bin:/bin
DOW=`date +%a` # День недели, например Mon
DOM=`date +%d` # Дата, например 27
DM=`date +%d%b` # Дата и месяц, например 27Sep
# 1-го числа каждого месяца постоянно делаем полную резервную копию
# Каждое воскресенье делаем полную копию - переписываем копию от
# последнего воскресенья
# В остальное время делаем добавочную резервную копию. Каждая добавочная
# резервная копия переписывает добавочную копию с предыдущей недели, с
# тем же именем.
#
# если NEWER = "", тогда tar создает резервные копии всех файлов в каталог,
# иначе только новее чем дата в NEWER. NEWER берет дату из файла
# записываемого каждое воскресенье.
# Ежемесячная полная резервная копия
if [ $DOM = "01" ]; then
  NEWER=""
  $TAR $NEWER -cf $BACKUPDIR/$COMPUTER-$DM.tar $DIRECTORIES
fi
# Еженедельная полная резервная копия
if [ $DOW = "Sun" ]; then
  NEWER=""
  NOW=`date +%d-%b`
  # Обновление даты еженедельной полной резервной копии
  echo $NOW > $TIMEDIR/$COMPUTER-full-date
  $TAR $NEWER -cf $BACKUPDIR/$COMPUTER-$DOW.tar $DIRECTORIES
  # Создание добавочной резервной копии - переписывание аналогичной с
  # последней недели
else
  # Берем дату последней полной резервной копии
  NEWER="--newer `cat $TIMEDIR/$COMPUTER-full-date`"
  $TAR $NEWER -cf $BACKUPDIR/$COMPUTER-$DOW.tar $DIRECTORIES
fi

Здесь приводится список файлов созданных после недели работы данного скрипта:

[root@deep /]# ls -l /backups/
total 22217
-rw-r--r-- 1 root root 10731288 Feb 7 11:24 deep-01Feb.tar
-rw-r--r-- 1 root root 6879 Feb 7 11:24 deep-Fri.tar
-rw-r--r-- 1 root root 2831 Feb 7 11:24 deep-Mon.tar
-rw-r--r-- 1 root root 7924 Feb 7 11:25 deep-Sat.tar
-rw-r--r-- 1 root root 11923013 Feb 7 11:24 deep-Sun.tar
-rw-r--r-- 1 root root 5643 Feb 7 11:25 deep-Thu.tar
-rw-r--r-- 1 root root 3152 Feb 7 11:25 deep-Tue.tar
-rw-r--r-- 1 root root 4567 Feb 7 11:25 deep-Wed.tar
drwxr-xr-x 2 root root 1024 Feb 7 11:20 last-full

ЗАМЕЧАНИЕ. Каталог в котором вы планируете хранить резервные копии (BACKUPDIR) и каталог , где запоминаете время (TIMEDIR) должны быть созданы до запуска этого скрипта, иначе вы получите сообщение об ошибке.

Шаг 2

Если вы не запустили этот скрипт вначале месяца (1 день месяца), добавочным резервным копиям для корректной работы будет нужно время полной воскресной резервной копии. Если вы запускаете скрипт в середине недели, вам нужно создать файл со временем в TIMEDIR. Для этого выполните следующую команду:

[root@deep /]# date +%d%b > /backups/last-full/myserver-full-date

где </backups/last-full> ваша переменная TIMEDIR, описывающая место хранения даты последней полной резервной копии, а <myserver-full-date> - это имя вашего сервера (например, deep); наш файл времени состоит из одной строки содержащей дату (например 15-Feb).

Шаг 3

Сделайте скрипт исполняемым и измените права доступа к нему (755).

[root@deep /]# chmod 755 /etc/cron.daily/backup.cron

ЗАМЕЧАНИЕ. Так как этот скрипт расположен в каталоге "/etc/cron.daily", он будет автоматически выполняться в час ночи каждый день.

Восстановление файлов с tar

Более важным, чем выполнение регулярных резервных копий, является их доступность в момент, когда надо восстановить информацию! Здесь мы рассмотрим методы восстановления файлов, которые были скопированы командой "tar".

Следующая команда будет восстанавливать все файлы из архива "full-backup- Day-Month-Year.tar", который является примером резервной копии нашего каталога "home" и был создан в нашем примере описанном выше. Для восстановления полной резервной копии каталога "home" используйте следующую команду:

[root@deep /]# cd / [root@deep /]# tar xpf /dev/st0/full-backup-Day-Month-Year.tar

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

Опция "x" обозначает извлечение файлов.
Опция "p" сохраняет права доступа.
Опция "f" указывает на то, что следующим аргументом является имя архива или устройства.

Если вам не надо извлекать все файлы и каталоги из архива, вы можете указать, что вам нужно.

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

[root@deep]# cd /
[root@deep]# tar xpf /dev/st0/full-backup-Day-Month-Year.tar \
home/wahib/Personal/Contents.doc home/quota.user

Вышеприведенная команда извлекает файлы "/home/wahib/Personal/Contents.doc" и "/home/quota.user" из архива. Если вы хотите посмотреть, какие файлы находятся в архиве, то используйте опцию --list (-t):

[root@deep /]# tar tf /dev/st0

ПРЕДУПРЕЖДЕНИЕ. Если вы имеете в своей системе файлы с установленным битом "постоянства", то используйте команду "chattr +i", так как этот бит не сохраняется при резервном копировании при помощи команды tar.

Тестирование возможности восстановления из резервных копий

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

Дополнительная документация

Для получения больших деталей вы можете прочитать следующую страницу

руководства (man):

tar (1) - GNU версия утилиты архивирования данных tar


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

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

Часть V Рекомендации связанные с резервным копированием

Глава 22 Процедуры резервирования и восстановления данных

В этой главе
Резервное копирование и восстановление в Linux
Программа резервного копирования tar
Создание резервных копий с tar
Автоматизация задачи резервного копирования с tar
Восстановление файлов с tar
Программа резервного копирования dump
Создание резервных копий с dump
Восстановление файлов с dump
Резервное копирование и восстановление через сеть

Программа резервного копирования dump

Описание

Dump полностью отличается от tar; эта программа предназначена для резервного копирования и восстановления файловой системы. Она создает резервные копии элементов файловой системы - не файлов. Dump проверяет файлы на файловой системе ext2, определяет резервные копии каких из них необходимо выполнить и копирует эти файлы на заданный диск, ленту, файл или другой носитель. Это позволяет получить дамп одной файловой системы быстро и эффективно. К сожалению, его нельзя применить к отдельным каталогам, поэтому архивы потребляют больше места на устройстве хранения. Dump был написан специально для резервного копирования. Команда restore выполняет функцию обратную dump; она восстанавливает полную резервную копию файловой системы. Последующие добавочные резервные копии могут быть наложены слоями на вершину полной копии. Отдельные файлы и каталоги могут быть также восстановлены из полной или частичной резервной копии. Вы можете использовать dump если нуждаетесь в процедуре резервного копирования и восстановления файловых систем.

Уровни Dump

Dump имеет несколько уровней резервного копирования. Уровни входят в диапазон от 0 до 9, где уровень номер 0 это полная резервная копия системы, который гарантирует, что все элементы файловой системы будут скопированы. Уровни выше 0 - добавочные резервные копии, которые говорят dump копировать все файлы новее или модифицированные после последнего дампа из некоторых или более низкого уровня. Чтобы быть более точным, на каждом уровне добавочного резервного копирования вы сохраняете все изменения произошедшие после создания последней резервной копии на том же или предыдущем уровне. Каковы преимущества и причины использования многоуровневого резервного копирования? Я попробую объяснить это при помощи следующих схем:

0    3    2     5     4      7     6      9      8       9
|    |    |     |     |      |     |      |      |       |
0 полная резервная копия     |     |      |
     |    |     |     |      |     |      |      |       |
  3 копирует все новее или измененное после уровней 0 и 3.
     |    |     |     |      |     |      |      |
       2 копирует все новее или измененное после уровней 0 и 2.
          |     |     |      |     |      |      |
          5 копирует все новее или измененное после уровней 0, 3 и 5.
                |     |      |     |      |      |
              4 копирует все новее или измененное после уровней 0, 3 и 4.
                |     |      |     |      |
                   7 копирует все новее или измененное после уровней 0, 3, 4 и 7.
                      |      |     |      |
                      6 копирует все новее или измененное после уровней 0, 3, 4 и 6.
                      |      |     |
                         9 копирует все новее или измененное после уровней 0, 3, 4, 6 и 9.
                             |     |
                                8 копирует все новее или измененное после уровней 0, 3, 4, 6 и 8.
                                   |
                                   9 копирует все новее или измененное после уровней 0, 3, 4, 6, 8 и 9.

Преимуществом этого метода является то, что более дешевым способом удается продлить хронологию резервных копий. Длинная хронология полезна тем, что часто в течении долгого времени не обнаруживается удаление или порча нужных файлов. Даже не самые новые версии файлов лучше, чем полная их потеря. Также, уровни резервирования используются, чтобы свести время выполнения резервных копий и восстановления к минимуму. Страницы руководства dump предлагает хорошую схему, чтобы использовать все преимущества уровней резервного копирования: 3, 2, 5, 4, 7, 6, 9, 8, 9 и так далее, как описано ниже в таблице. Число лент необходимых для восстановления зависит от количества времени между двумя полными резервными копиями.

Лента Уровень Резервная копия (дней) Ленты для восстановленья
1 0 Нет 1
2 3 1 1,2
3 2 2 1,3
4 5 1 1,2,4
5 4 2 1,2,5
6 7 1 1,2,3,6
7 6 2 1,2,5,7
8 9 1 1,2,5,7,8
9 8 2 1,2,5,7,9
10 9 1 1,2,5,7,9,10

Создание резервных копий с dump

Если вы хотите использовать многоуровневую процедуру резервного копирования, то вас заинтересует как использовать программу dump. Ниже, я приведу процедуру, имеющую длинную историю резервного копирования, и поддерживающую время резервного копирования и восстановления данных на минимуме. В следующем примере, мы подразумеваем, что записываем резервную копию каталога (/home) на ленточное устройство (/dev/st0). Важно всегда начинать с 0 уровня резервного копирования, например:

где "-0 до -9" - уровни резервного копирования, которые вы хотите использовать, опция "u" говорит обновлять файл "/etc/dumpdates" после удачного дампа, опция "-f" указывает записывать резервную копию в файл; файл может быть специальным файлом устройства, например, "/dev/st0" (ленточное устройство), "/dev/rsd1c" (дисковое устройство), обычным файлом, или "-" (стандартным вывод). В заключение, вы должны определить, резервную копию чего, вы хотите сделать. В нашем примере это каталог "/home". Вы можете видеть, что мы используем одни и те же ленты со 2 по 5 для ежедневного резервного копирования (С понедельника по Четверг = 4 ленты), ленты 6, 7 и 8 для еженедельного резервного копирования (другие пятницы, 6 + 7 + 8 = 3 ленты; заметим, что может быть пять пятниц в месяце), и ленту 1 и любую новую ленту для ежемесячной резервной копии (первая пятница каждого месяца, 1 + любые следующие "11 месяцев" = 12 лент). Итого, если мы используем 8 лент (4 + 3 + 1 = 8), мы можем получить полную резервную копию в первом месяце и повторить процедуру с 8 лентами в следующие 11 месяцев, чтобы получить в итоге 1-годовую индивидуальную полную резервную копию. Полные резервные копии должны делаться в определенный интервал, скажем, один месяц, и на наборе чистых лент, на которые записывается навсегда. Для этого типа процедуры, вы должны иметь 12 лент на 12 месяцев, которые содержат хронологию и изменения вашей системы за год. Затем, вы можете скопировать 12 лент с резервными копиями на отдельный компьютер, предназначенный для долгого хранения всех годовых резервных копий, и использовать их (12 лент) в новом году.

Восстановление файлов с dump

Команда restore выполняет функцию противоположную функции dump(8). Она восстанавливает файлы и каталоги из резервных копий полученный программой dump. Может быть восстановлена полная резервная копия файловой системы, а затем и уровни добавочных резервных копий поверх ее. Также может из полной резервной копии или частичной могут быть восстановлены отдельные файлы и каталоги. Вы имеете ряд возможных команд и опций для восстановления данных из резервных копий, полученных программой dump. Ниже мы покажем вам процедуру, которая использует все возможности программы restore с большинством возможных опций. Все это также сделано в диалоговом режиме. При диалоговом восстановлении файлов из дампа, программа restore предоставляет shell подобный интерфейс, который позволяет пользователю перемещаться по дереву каталогов, выбирая файлы для извлечения, после чтения информации о каталогах из дампа. Далее , мы покажем, что вы увидите, при восстановлении каталога "/home":

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

Перейдите в раздел, который вы хотите восстановить (каталог "/home" в нашем случае) используя следующую команду:

[root@deep /]# cd /home

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

[root@deep /home]# restore -i -f /dev/st0
restore >

На вашем терминале вы увидите командную строку, для получения списка файлов текущего или заданного каталога используйте команду "ls":

restore > ls
.:
admin/ lost+found/ named/ quota.group quota.user wahib/

restore >

Для изменения текущего рабочего каталога в заданный используйте команду "cd" (в нашем примере, мы переходим в каталог wahib):

restore > cd wahib
restore > ls
./wahib:
.Xdefaults .bash_logout .bashrc
.bash_history .bash_profile Personal/

restore >

Для внесения текущего каталога или файла в список файлов для извлечения используйте команду "add" (если задан каталог, то в список вносится он и все его потомки):

restore > add Personal/ restore >

Файлы, которые входят в список для извлечения обозначаются символом "*", когда они выводятся командой "ls":

restore > ls
./wahib:
.Xdefaults .bash_logout .bashrc
.bash_history .bash_profile *Personal/

Для удаления текущего каталога или заданного файла из списка файлов для извлечения используйте команду "delete" (если задан каталог, тогда вместе с ним будут удалены и все его элементы):

ЗАМЕЧАНИЕ Наиболее подходящий путь для извлечения большинства файлов из каталога это добавить каталог в список для извлечения, а затем удалить ненужные файлы.

restore > cd Personal/
restore > ls
./wahib/Personal:
*Ad?le_Nakad.doc *Overview.doc
*BIMCOR/ *Resume/
*My Webs/ *SAMS/
*Contents.doc *Templates/
*Divers.doc *bruno universite.doc
*Linux/ *My Pictures/

restore > delete Resume/
restore > ls
./wahib/Personal:
*Ad?le_Nakad.doc *Overview.doc
*BIMCOR/ Resume/
*My Webs/ *SAMS/
*Contents.doc *Templates/
*Divers.doc *bruno universite.doc
*Linux/ *My Pictures/

Для восстановления всех файлов из списка для извлечения используйте команду "extract" (Restore спросит какой том пользователь хочет монтировать. Наиболее быстрый путь извлечь несколько файлов - это начать с последнего тома и закончить первым):

restore > extract
You have not read any tapes yet.
Unless you know which volume your file(s) are on you should start
with the last volume and work towards the first.
Specify next volume #: 1
set owner/mode for '.'? [yn] y

Для выхода из интерактивного режима программы restore после завершения восстановления файлов используйте команду "quit".

/sbin/restore > quit

ЗАМЕЧАНИЕ. О других методах восстановления информации из резервных копий созданных программой dump читайте в страницах руководства (man).

Дополнительная документация

Для получения большей информации читайте следующие страницы руководства:

$ man dump (8) - программа создание резервных копий файловой системы ext2
$ man restore (8) - "восстановление файлов или файловых систем из резервных копий созданных программой dump"

Создание резервных копий и восстановление через сеть

Резервное копирование позволяет вам восстановить доступность и целостность информационных ресурсов после нарушений безопасности и несчастных случаев. Без резервного копирования вы не сможете восстановить данные на компьютере после системных сбоев. Важно разработать план, который будет охватывать все ваши сервера. Мы должны определить, файлы какой категории нужно резервировать. Например, вы можете решить создавать резервные копии только файлов пользователей (/home), потому что поврежденная система должна быть восстановлена с оригинального дистрибутива.

Здесь приводятся общие технологические подходя к резервному копированию файлов. Для сетевых серверов, авторитетная версия информационного наполнения создается и поддерживается на защищенной . Если сервер скомпрометирован и его содержимое повреждено, его можно перезагрузить с безопасной системы поддерживающей авторитетную версию. Этот подход обычно используется на публичных системах, таких как Веб сервера, потому что содержимое изменяется в предсказуемые интервалы.

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

Пересылка вашей резервной копии в безопасной манере через сеть

В предыдущей секции, мы показали вам как сделать резервную копию с помощью утилит tar и dump на ленту или в файл на той же системе, где выполнялась процедура резервного копирования. Эти программы способны также делать резервное копирование через сеть. Чтобы осуществлять резервное копирование по сети надо убедиться, что у вас установлены пакеты "rmt" и "rsh". Утилита "rmt" предоставляет удаленный доступ к ленточному устройству программам подобным dump и tar. Пакет "rsh" содержит набор программ, которые позволяют пользователям выполнять команды на удаленной машине, подключаться к удаленным машинам и копировать файлы между машинами (rsh, rlogin и rcp).

Так как "rsh" может быть легко взломана, а "rmt" зависит в своей работе от "rsh", мы не инсталлировали эти пакеты (смотрите главу 2, "Инсталляция вашего Linux сервера" для большей информации). Поэтому мы должны найти другой путь для осуществления резервного копирования через сеть. Технология SSH поможет решить эту проблему (смотрите главу 11, Программы обеспечения безопасности и сетевая безопасность), потому что она позволяет копировать данные через сеть командой "scp" с поддержкой шифрования. Следующий метод использует возможности программы SSH для пересылки наших резервных копий, сделанных командами tar или dump в безопасной манере, используя утилиту "scp".

Использование SSH команды "scp"для передачи резервных копий через сеть

Команда "scp" копирует файлы между хостами в сети. Она использует SSH для пересылки данных, используя туже систему аутентификации и предоставляя тот же уровень безопасности, что и SSH. В отличии от утилиты "rcp" из пакета "rsh", "scp" запрашивает пароль или парольную фразу. В нашем примере, мы пересылаем файл резервной копии, созданный программой tar; процедура передачи файла, созданного командой dump аналогична.

Для копирования файла на удаленную систему используйте команду:

[admin@deep /]# scp <localdir/to/filelocation> <user@host:/dir/for/file>

где <localdir/to/filelocation> - это каталог находится резервная копия на локальном сервере, а <user@host:/dir/for/file> представляет, по порядку, имя пользователя (user) на удаленной машине, который будет владеть резервной копией, имя компьютера (host), куда вы хотите отправить файл, и каталог на этом компьютере.

Реальный пример будет выглядеть так:

[admin@deep /]# scp -Cp /backups/deep-01Feb.tar admin@backupserver:/archive/deep/deep-01Feb.tar
admin@backupserver's password:
deep-01Feb.tgz | 10479 KB | 154.1 kB/s | ETA: 00:00:00 | 100%

ЗАМЕЧАНИЕ. Опция "C" включает сжатие для более быстрой передачи файла, опция "p" говорит, что необходимо сохранить время модификации, время доступа и режимы доступа к файлу, что обычно неплохо. Важно заметить, что каталог "dir/for/file" на удаленном компьютере ("/archive/deep" в нашем примере) должен принадлежать "username", заданному в команде scp ("admin" в нашем примере) или вы получите следующее сообщение об ошибке:
scp: /archive/deep/deep-01Feb.tar: Permission denied.

Для копирования файла с удаленной системы на локальную используйте команду:

[admin@deep /]# scp <user@host:/dir/for/file> <localdir/to/filelocation>

где <user@host:/dir/for/file> представляет, по порядку, имя пользователя (user) на удаленной машине, который владеет резервной копией, имя компьютера (host), откуда вы хотите получить файл, и каталог на этом компьютере, в котором лежит файл, а <localdir/to/filelocation> - это локальный каталог в который вы хотите поместить файл, полученный с удаленного компьютера. Реальный пример выглядит примерно так:

[admin@deep /]# scp -Cp admin@backupserver:/archive/deep/deep-01Feb.tar /backups
admin@backupserver's password:
deep-01Feb.tgz | 10479 KB | 154.1 kB/s | ETA: 00:00:00 | 100%

Альтернативы tar и dump

AMANDA
Домашняя страница AMANDA: http://www.cs.umd.edu/projects/amanda/

BRU
Домашняя страница BRU: http://www.bru.com/


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

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

Часть II Безопасность и оптимизация

В этой части
Общая системная безопасность
Общая системная оптимизация
Конфигурирование и создание оптимизированных, безопасных ядер

Глава 3 Общая системная безопасность (Часть 1)

В этой главе
Общие вопросы безопасности Linux

Обзор

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

Безопасность BIOS, установка пароля на загрузку.

Отмените возможность загрузки компьютера с дискеты, установите пароль на доступа к настройкам BIOS. Запрет загрузки с дискет не позволит злоумышленникам загрузить компьютер с дискеты и получить доступ к системе, а установка пароля на доступ к BIOS не позволит включить загрузку с дискеты.

Политика безопасности.

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

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

Выбор правильного пароля.

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

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

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

Длина пароля.

Минимально допустимая длина пароля задаваемая по умолчанию в Linux - 5 символов. Это значит, что когда новому пользователю разрешается доступ на сервер, то длина строки представляющей собой пароль должна быть минимум 5 букв, цифр или специальных знаков. Кроме того она должна быть не больше 8 символов. Чтобы нерадивые пользователи не использовали пароли длиной 5 символов можно увеличить его минимальный размер до 8, отредактировав файл "/etc/login.defs".

Редактируйте файл login.defs (vi /etc/login.defs) изменив строку

PASS_MIN_LEN 5
в
PASS_MIN_LEN 8

Этот файл является конфигурационным для программы login. Здесь вы можете изменить и другие параметры, чтобы они соответствовали вашей стратегии защиты (время действия пароля, длина пароля и др.).

Бюджет пользователя root.

Бюджет "root" является самым привилегированным на UNIX системах. На него нельзя наложить никакие ограничения по безопасности. Это значит, что система считает, что вы знаете что делаете и никаких вопросов задавать не будет. Поэтому очень легко, ошибшись в команде, уничтожить важную системную информацию. При использовании этой учетной записи надо быть максимально осторожным. Из соображений безопасности никогда не подключайтесь к системе как пользователь root, если только вы абсолютно не уверены в том, что делаете.

Установка таймаута подключения для root

Часто бывает, что администратор войдя в систему под пользователем root забывает выйти и его сессия остается открытой. Решением этой проблемы может быть переменная "TMOUT" в BASH, которая определяет время, через которое пользователь автоматически отключается от системы, если он не активен. Она содержит время в секундах до отключения.

Редактируйте файл "/etc/profile" и добавьте следующую строку сразу после строки с "HISTFILESIZE=":

TMOUT=7200

Мы определяем значение для TMOUT равное 2 часам (60*60*2). Следует отметить, что если вы добавили эту строку в файл /etc/profile, то переменная определяется для любого подключаемого пользователя, а не только root. Чтобы установить ее для конкретного пользователя измените файл ".bashrc" в его домашнем каталоге.

Файл "/etc/exports".

Если вы экспортируете свои файловые системы с использованием NFS, то необходимо сконфигурировать файл "/etc/exports" с максимально возможными ограничениями. В нем не следует использовать групповые символы (?, *), нельзя позволять доступ для записи пользователю root и следует монтировать "только для чтения" все, что только возможно.

Отредактируйте файл /etc/exports, добавив в него:

/dir/to/export host1.mydomain.com (ro,root_squash)
/dir/to/export host2.mydomain.com (ro,root_squash)

Где dir/to/export - каталог для экспортирования, host1.mydomain.com - имя машины с которой разрешается доступ, <ro> - монтирование "только для чтения", <root_squash> - не позволять пользователю root доступа с правом на запись.

Чтобы изменения вступили в дейтсвие вам необходимо выполнить команду

/usr/sbin/exportfs -a

Замечание. Использование NFS сервера увеличивает риск нарушения безопасности вашей системы. Лучше его не использовать.

Отключение доступа к консольным программам.

Одной из самых простых и необходимых настроек является блокирование консольно-эквивалентного доступа к программам halt и shutdown. Чтобы это сделать выполните:

[root@deep]# rm -f /etc/security/console.apps/servicename

где servicename имя программы к которой вы хотите запретить консольно- эквивалентный доступ. Если вы не используете xdm, будьте внимательны, не удалите файл xserver, иначе никто кроме пользователя root, не сможет запустить X сервер (если вы всегда используете xdm для запуска X сервера, и только пользователь root должен запускать X сервер, то тогда можно подумать об удалении файла xserver).

Пример:

[root@deep]# rm -f /etc/security/console.apps/halt
[root@deep]# rm -f /etc/security/console.apps/poweroff
[root@deep]# rm -f /etc/security/console.apps/reboot
[root@deep]# rm -f /etc/security/console.apps/shutdown
[root@deep]# rm -f /etc/security/console.apps/xserver (если удалите, то только root сможет запустить X).

В результате будет запрещен консольно-эквивалентный доступ к программам halt, shutdown, reboot и poweroff. Программа xserver используется если у вас установлен X Window.

Замечание. Если вы инсталлировали систему как описано в этой книге, то X Window у вас не установлен и файлы описанные выше в каталоге /etc/security не появятся, поэтому вы этот шаг можете пропустить.

Отключение всего консольного доступа.

Чтобы блокировать весь консольный доступ, включая программу и файл доступа, в каталоге /etc/pam.d/, закомментируйте все строки, в которых вызывается pam_console.so. Этот шаг является продолжением предыдущего. Нижеприведенный скрипт сделает это автоматически за вас. Создайте файл disabling.sh (touch disabling.sh) и внесите в него следующие строки:

# !/bin/sh
cd /etc/pam.d
for i in * ; do
sed '/[^#].*pam_console.so/s/^/#/' < $i > foo && mv foo $i
done

И сделайте его испольняемым:

[root@deep]# chmod 700 disabling.sh
[root@deep]# ./disabling.sh

Он будет комментировать все строки ссылающиеся на pam_console.so во всех файлах в каталоге /etc/pam.d. После того, как скрипт выполнит свою работу, удалите его из системы.

Файл "/etc/inetd.conf".

Inetd называется "супер сервером", который запускает другие демоны по запросам из сети. Inetd.conf говорит inetd какие порты слушать и какие сервисы запускать для каждого порта. Как только вы подключаете вашу систему к сети, подумайте какие сервисы вам нужны.

Ненужные сервисы надо отключить, а лучше деинсталлировать, чтобы у вас стало меньше головной боли, а у атакующего меньше шансов найти лазейку в вашу систему. Просмотрите файл /etc/inetd.conf и вы увидите, какие сервисы он предлагает. Закомментируйте строки (# в начале строки) с ненужными сервисами, а затем пошлите процессу inetd сигнал SIGHUP.

Шаг 1.

Измените права доступа к файлу на 600:

[root@deep]# chmod 600 /etc/inetd.conf

Шаг 2.

Удостоверьтесь, что владельцем файла является root

[root@deep]# stat /etc/inetd.conf
File: "/etc/inetd.conf"
Size: 2869 Filetype: Regular File
Mode: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Device: 8,6 Inode: 18219 Links: 1
Access: Wed Sep 22 16:24:16 1999(00000.00:10:44)
Modify: Mon Sep 20 10:22:44 1999(00002.06:12:16)
Change: Mon Sep 20 10:22:44 1999(00002.06:12:16)

Шаг 3.

Редактируйте файл inetd.conf (vi /etc/inetd.conf) и отключите следующие сервисы: ftp, telnet, shell, login, exec, talk, ntalk, imap, pop-2, pop-3, finger, auth и т.д. пока вы не планируете их использовать. Чем меньше сервисов включено, тем меньше риск для системы.

# Чтобы изменения вошли в силу дайте команду  'killall -HUP inetd'
#
#echo    stream       tcp        nowait      root          internal
#echo    dgram       udp       wait          root           internal
#discard stream      tcp        nowait      root           internal
#discard dgram      udp       wait          root           internal
#daytime stream     tcp       nowait      root           internal
#daytime dgram     udp       wait         root           internal
#chargen stream     tcp        nowait     root           internal
#chargen dgram     udp       wait         root            internal
#time      stream      tcp        nowait     root           internal
#time      dgram      udp       wait         root           internal
#
# Это стандартные сервисы
#
#ftp      stream        tcp        nowait        root        /usr/sbin/tcpd in.ftpd -l -a
#telnet stream        tcp        nowait        root        /usr/sbin/tcpd in.telnetd
#
# Shell, login, exec, comsat и talk являются протоколами BSD.
#
#shell      stream      tcp      nowait       root       /usr/sbin/tcpd in.rshd
#login     stream      tcp      nowait       root       /usr/sbin/tcpd in.rlogind
#exec      stream       tcp       nowait        root       /usr/sbin/tcpd in.rexecd
#comsat dgram        udp       wait           root        /usr/sbin/tcpd in.comsat
#talk      dgram       udp      wait          root        /usr/sbin/tcpd in.talkd
#ntalk    dgram       udp      wait          root        /usr/sbin/tcpd in.ntalkd
#dtalk     stream       tcp        wait           nobody    /usr/sbin/tcpd in.dtalkd
#
# Почтовые Pop и imap сервисы
#
#pop-2    stream      tcp        nowait      root       /usr/sbin/tcpd ipop2d
#pop-3    stream      tcp        nowait      root       /usr/sbin/tcpd ipop3d
#imap      stream     tcp        nowait       root       /usr/sbin/tcpd imapd
#
#  Internet UUCP сервис.
#
#uucp     stream     tcp     nowait       uucp        /usr/sbin/tcpd /usr/lib/uucp/uucico -l
#
# Сервис Tftp предоставляется в первую очередь для удаленной загрузки.
# В большинстве случаев, он используется только на "серверах загрузки"
# Не удаляйте символы комментариев, если вы не уверены, что это вам нужно.
#
#tftp      dgram      udp       wait       root          /usr/sbin/tcpd in.tftpd
#bootps dgram      udp       wait       root          /usr/sbin/tcpd bootpd
#
# Finger, systat и netstat дают информацию внешним пользователям, которая
# может быть использована для взлома системы. На многих серверах
# некоторые или все из них отключены с целью улучшения безопасности.
#
#finger   stream      tcp      nowait      root         /usr/sbin/tcpd in.fingerd
#cfinger  stream       tcp       nowait      root          /usr/sbin/tcpd in.cfingerd
#systat    stream       tcp       nowait      guest        /usr/sbin/tcpd /bin/ps -auwwx
#netstat   stream       tcp       nowait      guest        /usr/sbin/tcpd /bin/netstat -f inet
#
# Аутентификация
#
#auth    stream    tcp    nowait    nobody     /usr/sbin/in.identd in.identd -l -e -o
#
# Конец inetd.conf

Замечание. Не забудьте послать сигнал SIGHUP процессу inetd (killall -HUP inetd) после редактирования файла /etc/inetd.conf.

[root@deep /root]# killall -HUP inetd

Шаг 4.

Для большего улучшения безопасности, вы можете сделать файл "inetd.conf" неизменным, используя команду chattr:

[root@deep]# chattr +i /etc/inetd.conf

Файл с атрибутом "i" не может быть модифицирован, его нельзя удалить или переименовать, к нему нельзя создать ссылки и никакие данные не могут быть дописаны в файл. Только суперпользователь может установить или снять этот атрибут. Если вы захотите модифицировать файл "inetd.conf", то дайте следующую команду:

[root@deep]# chattr -i /etc/inetd.conf

TCP_WRAPPERS.

По умолчанию, Red Hat отвечает на все запросы к имеющимся сервисам. Используя TCP_Wrappers, вы легко сможете оградить ваш сервер от внешних вторжений когда это нужно. Запретите все хосты, добавив "ALL: ALL@ALL, PARANOID" в "/etc/hosts.deny", и определите список тех кому доступ разрешен в файле "/etc/host.allow" - это самая безопасная конфигурация. TCP_Wrappers контролируется двумя файлами. Поиск завершается при первом совпадении.

/etc/hosts.allow
/etc/hosts.deny

Шаг 1.

Редактируйте файл hosts.deny (vi /etc/hosts.deny) добавив следующие строки: По умолчанию доступ запрещен.

# Запрещаем доступ для всех.
ALL: ALL@ALL, PARANOID #Соответствует любому компьютеры, чье имя не соответствует адресу.

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

Замечание. Для параметра PARANOID. Если вы хотите запускать telnet и ftp сервисы на сервере, то не забудьте добавить адрес клиентской машины и IP адрес в файл "/etc/hosts" на сервере, иначе будьте готовы ждать несколько минут, пока DNS lookup не завершится по таймауту, до получения строки login.

Шаг 2.

Отредактируйте файл hosts.allow и добавьте в него, к примеру, следующие строки:

# Список серверов которым разрешен доступ.
sshd: 208.164.186.1 gate.openarch.com

Машина с IP адресом 208.164.186.1 и именем gate.openarch.com является одним из клиентов сервиса sshd.

Шаг 4.

Программа tcpdchk занимается проверкой правильности конфигурационного файла TCP_Wrapper. Она выдает сообщения о потенциальных и реальных проблемах.

После того, как конфигурирование завершено, запустите программу tcpdchk:

[root@deep]# tcpdchk

Замечание. Ошибка может выглядеть следующим образом:
warning: /etc/hosts.allow, line 6: can't verify hostname: gethostbyname(win.openna.com) failed
Если вы получили подобное сообщение, то проверьте ваш конфигурационный файл DNS сервера, на наличие в нем этого имени компьютера.

Не позволяйте системе выводить файл issue.

Если вы не хотите, чтобы файл issue выводился на экран, когда удаленный пользователь подключается к серверу, измените опцию telnetd в файле /etc/inetd.conf:

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -h

Флаг "-h" говорит демону не выводить любую системную информацию, ограничиться только запросом "login:". Эту возможность необходимо использовать только, когда на сервере запускается демон telnet (вместо него я рекомендую использовать ssh).

Файл "/etc/host.conf".

Linux использует библиотеку resolver для преобразования IP адресов в имена машин. Файл "/etc/host.conf" определяет порядок работы этой библиотеки. Он говорит какой сервис и в каком порядке использовать для преобразования адресов.

Редактируйте файл host.conf (vi /etc/host.conf) и добавьте следующие строки:

# Вначале использовать lookup черз DNS, а затем файл/etc/hosts.
order bind,hosts
# Мы имеем компьютеры с несколькими IP адресами.
multi on
# Осуществлять проверку подмены IP адресов.
nospoof on

Опция order определяет порядок использования сервисов. Для улучшения производительности и повышения безопасности рекомендуется настроить библиотеку определителей так, чтобы вначале использовался DNS, а затем файл "/etc/hosts". Конечно, DNS должен быть предварительно настроен.

Опция multi говорит, что компьютеры, описанные в файле /etc/hosts, могут иметь несколько IP адресов (несколько интерфейсов ethN). Например, шлюз всегда имеет несколько адресов и у них эта опция должна быть всегда определена в ON.

Опция nospoof не разрешать подмену адресов. IP-Spoofing - это способ атаки при котором удаленный компьютер представляется кем-то, кем он не является. При этом виде нападения удаленный компьютер представляется как законный сервер, а затем использует установленные соединения для взаимодействия с другими компонентами сети. Эта опция должна быть установлена в ON на всех типах серверов.

Файл "/etc/securetty".

Файл "/etc/securetty" позволяет вам определить с каких TTY устройств может входить в систему пользователь root. Этот файл читается программой login ("/bin/login"). Он имеет очень простой формат. В каждой строке перечислены имена tty устройств с которых root может входить в систему, а с остальных доступ ему будет запрещен.

Отключите любые tty, которые вам не нужны, закомментировав их (знак # в начале строки).

tty1
#tty2
#tty3
#tty4
#tty5
#tty6
#tty7
#tty8

В результате root сможет входить в систему только с терминала tty1. С остальных терминалов вы сможете переключаться на root используя команду su.


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

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

Глава 3 Общая системная безопасность (Часть 2)

Специальные пользователи.

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

Мы предполагаем, что вы используете механизм теневых паролей. Если это не так, то установите Shadow password suite - это улучшит безопасность сервера. Если вы следовали нашим инструкциям при инсталляции системы и отметили в разделе "Authentication Configuration" пункт "Enable Shadow Passwords", то в системе активизирован механизм теневых паролей.

Для удаления пользователей используйте команду

[root@deep]# userdel username

Для удаления группы используйте команду

[root@deep]# groupdel username

Шаг 1.

Введите следующие команды на терминале для удаления специальных пользователей:

[root@deep]# userdel adm
[root@deep]# userdel lp
[root@deep]# userdel sync
[root@deep]# userdel shutdown
[root@deep]# userdel halt
[root@deep]# userdel news
[root@deep]# userdel uucp
[root@deep]# userdel operator
[root@deep]# userdel games (удалите это пользователя если вы не используете X Window).
[root@deep]# userdel gopher
[root@deep]# userdel ftp (удалите если не используете анонимный ftp).

Шаг 2.

Удалите ненужные группы пользователей.

[root@deep]# groupdel adm
[root@deep]# groupdel lp
[root@deep]# groupdel news
[root@deep]# groupdel uucp
[root@deep]# groupdel games (удалите если не используете X Window).
[root@deep]# groupdel dip
[root@deep]# groupdel pppusers
[root@deep]# groupdel popusers (удалите если не используете POP сервер).
[root@deep]# groupdel slipusers

Шаг 3.

Добавьте необходимых вам пользователей.
Чтобы добавить нового пользователя используйте команду:

[root@deep]# useradd username

Для добавления или изменения пароля для пользователя используйте команду:

[root@deep]# passwd username

Например:

[root@deep]# useradd admin
[root@deep]# passwd admin

На экране должен появиться следующий текст:

Changing password for user admin
New UNIX password: somepasswd
passwd: all authentication tokens updated successfully

Шаг 4.

Бит постоянства может быть использован для предотвращения случайного удаления или переписывания файлов, которые должны быть защищены. Они также могут быть защищены от создания символических ссылок, которые могут быть использованы для атак на файлы "/etc/passwd", "/etc/shadow", "/etc/group" или "/etc/gshadow".

Для установки бита постоянства на файлы "/etc/passwd", "/etc/shadow", "/etc/group" и "/etc/gshadow" выполните следующие команды:

[root@deep]# chattr +i /etc/passwd
[root@deep]# chattr +i /etc/shadow
[root@deep]# chattr +i /etc/group
[root@deep]# chattr +i /etc/gshadow

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

Блокирование выполнения команды su root от других пользователей.

Если вы не хотите, чтобы кто-нибудь выполнял команду su root или хотите ограничить пользователей которые могут пользоваться этой командой, то добавьте следующие две строки в начало файла конфигурации su, расположенного в каталоге "/etc/pam.d/". Я настоятельно рекомендую ограничить пользователей, которые могут выполнять команду su.

Шаг 1.

Редактируйте файл su (vi /etc/pam.d/su) и добавьте в него две строки:

auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=wheel

После добавления этих строк ваш файл "/etc/pam.d/su" должен выглядеть так:

#%PAM-1.0
auth          sufficient       /lib/security/pam_rootok.so   debug
auth          required        /lib/security/pam_wheel.so    group=wheel
auth           required         /lib/security/pam_pwdb.so       shadow nullok
account      required        /lib/security/pam_pwdb.so
password   required        /lib/security/pam_cracklib.so
password   required        /lib/security/pam_pwdb.so        shadow  use_authtok nullok
session       required        /lib/security/pam_pwdb.so
session       optional        /lib/security/pam_xauth.so

Который говорит, что только члены группы wheel могут использовать команду su root и все действия будут регистрироваться. Заметим, что группа wheel является специальным бюджетом, который используется для этой цели. Подобное ограничение пользователей способных выполнять команду su root совместно с ограничением терминалов с которых root может входить в систему существенно увеличит безопасность сервера.

Шаг 2.

После того как вы изменили файл "/etc/pam.d/su" самое время определит пользователей, которые могут выполнять su root. Например, если вы хотите чтобы admin был членом группы wheel введите следующую команду:

[root@deep]# usermod -G10 admin

где опцией G определяется список цифровых значений групп в которые входит пользователь admin. В данном случае группе wheel соответствует 10. Используйте приведенную выше команду для всех пользователей, которым будет разрешено переходить к root.

Замечание. Если вы не можете выполнить команду su в терминале GNOME, то это потому, что вы используете неправильный терминал.

Ограничение ресурсов.

Файл limits.conf, находящийся в каталоге /etc/securitty, может быть использован для ограничения ресурсов потребляемых пользователями вашей системы. Ограничьте ресурсы всем пользователям, чтобы они не смогли осуществить DoS атаки (кол-во процессов, объем памяти и т.д.). Эти ограничения будут накладываться на пользователей как только они будут входить в систему. Для примера, ограничьте пользователей так, как это описано здесь.

Шаг 1.

Редактируйте файл limits.conf file (vi /etc/security/limits.conf) и добавьте в него следующие строки:

*       hard        core           0
*       hard        rss             5000
*       hard        nproc         20

Он говорит, что необходимо запретить создание core файлов (core 0); ограничить число процессов не более 20 (nproc 20) и объем используемой памяти не более 5М (rss 5000) для всех пользователей, кроме root. Все вышесказанное относится только к пользователям, которые могут подключаться к системе через login. Символ "*" означает всех пользователей имеющих доступ на данный сервер.

Шаг 2.

Вы должны редактировать файл "/etc/pam.d/login" и добавить в его конец следующие строки:

session required /lib/security/pam_limits.so

После этого файл должен выглядеть так:

#%PAM-1.0
auth required /lib/security/pam_securetty.so
auth required /lib/security/pam_pwdb.so shadow nullok
auth required /lib/security/pam_nologin.so
account required /lib/security/pam_pwdb.so
password required /lib/security/pam_cracklib.so
password required /lib/security/pam_pwdb.so nullok use_authtok md5 shadow
session required /lib/security/pam_pwdb.so
session required /lib/security/pam_limits.so
#session optional /lib/security/pam_console.so

Больший контроль над монтируемыми файловыми системами.

Вы можете получить больший контроль над смонтированными файловыми системами (например, "/home" и "/tmp") используя опции noexec, nodev и nosuid. Они могут быть определены в файле "/etc/fstab", который содержит описания каждой монтируемой файловой системой. Для получения большей информации об этих опциях читайте man страницу о mount (8).

Опции, связанные с безопасностью, используемы в /etc/fstab:
Defaults - позволяет все (quota, read-write и suid) на этом разделе;
Noquota - не использовать квот пользователей на этом разделе;
nosuid - не использовать SUID/SGID доступ на этом разделе
nodev - нет символьный и специальных устройств на этом разделе
noexec - нет исполняемых программ на этом разделе.
quota - пользовательские квоты действуют на этом разделе.
ro - позволять доступ только для чтения к этому разделу.
rw - позволять доступ на чтение/запись к этому разделу.
suid - позволять SUID/SGID доступ на этом разделе.

Редактируйте файл fstab (vi /etc/fstab) и измените то, что вам нужно:

/dev/sda11 /tmp ext2 defaults 1 2
/dev/sda6 /home ext2 defaults 1 2

должны читаться:

/dev/sda11 /tmp ext2 defaults,nosuid,nodev,noexec 1 2
/dev/sda6 /home ext2 defaults,nosuid,nodev 1 2

<nodev> - не интерпретировать символьные и блочный специальные устройства на файловой системе, <nosuid> - не позволять работать биту смены идентификатора пользователя и идентификатора группы, <noexec> - не позволять выполнять любые двоичные файлы на файловой системе.

Замечание: для нашего примера, устройство "/dev/sda11" представляется как "/tmp" и "dev/sda6" как "/home" на нашей системе. Конечно, у вас это будет выглядеть по-другому, в зависимости от того как разбит диск и диски какого типа вы используете (IDE - hda, hdb, hdc и т.д или SCSI - sda, sdb, sdc и т.д.).

Перемещение программы RPM и изменение прав доступа к ней.

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

Переместите RPM на флоппи-диск.

[root@deep]# mount /dev/fd0 /mnt/floppy/
[root@deep]# mv /bin/rpm /mnt/floppy/
[root@deep]# umount /mnt/floppy

Замечание. Никогда не деинсталлируйте RPM полностью.

Также можно изменить права доступа к RPM c 755 до 700. В этом случае никто кроме пользователя root не сможет использовать эту программу.

Измените права доступа к файлу "/bin/rpm":

[root@deep]# chmod 700 /bin/rpm

Настройка shell.

Чтобы сделать легким повторный ввод длинных команд, bash shell может запоминать до 500 команд в файле "~/.bash_history" (где "~/" - ваш домашний каталог). Каждый пользователь, который имеет shell-доступ в систему, имеет такой .bash_history файл в своем домашнем каталоге. Уменьшая количество команд запоминаемых в этом файле, вы защищаете систему. Когда пользователь случайно ввел в командной строке свой пароль, то он еще долгое время будет хранится в файле ".bash_history".

Строки HISTFILESIZE и HISTSIZE в файле "/etc/profile" определяют количество старых команд запоминаемых в .bash_history. Для всех бюджетов пользователей я рекомендую выбрать значения этих переменных поменьше, например 20.

Редактируйте файл profile (vi /etc/profile) и измените следующие строки:

HISTFILESIZE=20
HISTSIZE=20

В данном случае определено, что будет запоминаться не более 20 старых команд. Теперь, если хакер будет искать пароль в файле ".bash_profile", то шансы там его обнаружить сократятся.

Шаг 2.

Администратор должен добавить в файл "/etc/skel/.bash_logout" строку "rm -f $HOME/.bash_history". В результате, каждый раз когда пользователь выходит из системы, его файл .bash_history будет удаляться. Поэтому хакер не сможет получить к нему доступ, когда пользователь не подключен к серверу. Редактируйте файл .bash_logout (vi /etc/skel/.bash_logout) и добавьте следующую строку:

rm -f $HOME/.bash_history

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

Файл "/etc/lilo.conf".

LILO это универсальный загрузчик для Linux. Он не зависит от файловой системы и может загружать ядро Linux как с гибкого диска, так и с жесткого диска. Кроме того, LILO может служить загрузчиком других операционных систем.

LILO очень важен для Linux и поэтому мы должны защитить его как можно лучше. Наиболее важным конфигурационным файлом является "/etc/lilo.conf". С его помощью вы можете настраивать и улучшать безопасность LILO и всей системы. Следующие три опции чрезвычайно важны для улучшения безопасности.

  1. Добавьте: timeout=00
    Эта опция контролирует как долго (в десятых долях секунды) LILO ждет ввода информации от пользователя перед тем как продолжит загрузку "по умолчанию". Одним из требований уровня безопасности C2 является возможность установки интервала равного 0. Установите эту опцию в 0, если у вас нет необходимости в различных вариантах загрузки.
  2. Добавьте: restricted
    Эта опция ослабляет парольную защиту, так как она требует введение пароля только если были определены параметры загрузки (например, linux single). Она может использоваться только совместно с опцией "password". Убедитесь, что вы используете эту опцию с каждым образом.
  3. Добавьте: password=<password>
    Это опция требует запроса пароля у пользователя если он загружает linux в однопользовательском режиме. Пароль является зависимым от регистра. Обязательно проверьте, чтобы файл "/etc/lilo.conf" мог читать только пользователь root.

Ниже приведена процедура защиты LILO

Шаг 1.

Измените файл "/etc/lilo.conf"

boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=00
Default=linux
restricted
password=<password> определите свой пароль
image=/boot/vmlinuz-2.2.12-20
label=linux
initrd=/boot/initrd-2.2.12-10.img
root=/dev/sda6
read-only

Шаг 2.

Сделайте этот файл доступным для чтения только пользователем root (в файле хранится пароль в незашифрованном виде).

[root@deep]# chmod 600 /etc/lilo.conf

Шаг 3.

Выполните следующую команду, чтобы все изменения вошли в силу:

[root@deep]# /sbin/lilo -v

Шаг 4.

Защитите файл от изменения и удаления установив на него атрибут "не изменчивости"

[root@deep]# chattr +i /etc/lilo.conf

Теперь, чтобы внести в "/etc/lilo.conf" какие-нибудь изменения, этот атрибут надо снять:

[root@deep]# chattr -i /etc/lilo.conf

Запрещение перезагрузки системы по комбинации клавиш Control-Alt- Delete.

Если вы закомментируете строку описанную ниже в файле /etc/inittab, то будет отключена возможность использования комбинации клавиш ctrl-alt-del для перезагрузки компьютера. Это чрезвычайно важно, если вы не можете обеспечить полную физическую безопасность вашего сервера.

Редактируйте файл inittab (vi /etc/inittab) и измените стоку

ca::ctrlaltdel:/sbin/shutdown -t3 -r now

на:

#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

Для того, чтобы система восприняла внесенные изменения, дайте следующую команду:

[root@deep]# /sbin/init q

Физические твердые копии всех важных файлов регистрации

Один из важнейших аспектов защиты - это целостность лог файлов, расположенных в /var/log. Если взломщик преодолел все ваши оборонительные редуты, то вся ваша надежда остается на них. Поэтому очень важно продумать методы, которые позволят вам контролировать целостность лог файлов. Если на вашем сервере установлен сервер печати или подобный сервер есть в сети, то можно создавать твердые копии всех, на ваш взгляд, важных логов. Это легко осуществить имея принтер с непрерывной подачей бумаги и пере направляя все сообщения syslog в /dev/lp0. Взломщик может изменить на сервере любые файлы, программы, но он ничего не сможет поделать с бумагой.

Пример:

Регистрация всех telnet, почтовых, ssh соединений и загрузочных сообщений с вашего сервера на принтере подключенном к нему.

Редактируйте файл syslog.conf (vi /etc/syslog.conf) и добавьте в его конец следующую строку:

authpriv.*;mail.*;local7.*;auth.*;daemon.info /dev/lp0

И перезагрузите syslogd демон, чтобы изменения вступили в силу:

[root@deep]# /etc/rc.d/init.d/syslog restart

Пример:

Регистрация всех telnet, почтовых, ssh соединений и загрузочных сообщений с вашего сервера на принтере удаленного сервера, находящегося в вашей сети.

Если вы не имеете принтера в вашей сети, то можно перенаправлять все syslogd- сообщения на удаленный сервер. Для этого, во-первых, добавьте в файл syslogd.conf вышеприведеднную строку, только замените в ней /dev/lp0 на имя или адрес удаленного сервера. Во-вторых, запустите на удаленном сервере демон syslogd с опцией -r. Используя этот метод вы легко можете собирать все логи на одной машине, что существенно облегчает администрированием. Редктируйте файл syslog.conf (vi /etc/syslog.conf) на удаленном сервере (например, mail.openarch.com) и добавьте в его конец следующую строку:

authpriv.*;mail.*;local7.*;auth.*;daemon.info /dev/lp0

По умолчанию, syslogd демон не принимает сообщения от удаленных компьютеров. Для включения этого добавьте опцию -r при запуске syslogd:

Вместо

daemon syslogd -m 0

Используйте:

daemon syslogd -r -m 0

Перезапустите syslogd демон, чтобы изменения вступили в силу:

[root@mail]# /etc/rc.d/init.d/syslog restart

Если на удаленном сервере настроен брандмауэр, то необходимо добавить в него следующее правило:

ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-s $SYSLOG_CLIENT \
-d $IPADDR 514 -j ACCEPT

где,
EXTERNAL_INTERFACE="eth0" в файле настроек firewall-а.
IPADDR="208.164.186.2" в файле настроек firewall-а.
SYSLOG_CLIENT="208.164.168.0/24" в файле настроек firewall-а.

Сейчас перезагрузите firewall на удаленном сервере, чтобы сделанные изменения вступили в силу.

Это правило разрешает удаленному серверу принимать сообщения от клиента на порт 514 (порт сервиса syslog). Для получения большей информации о firewall-е читайте главу 7 "Сетевой брандмауэр".

В заключение, редактируйте файл /etc/syslog.conf вашего локального сервера, добавив в его конец следующую строку:

authpriv.*;mail.*;local7.*;auth.*;daemon.info @mail

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

Перезагрузите syslog демон, чтобы изменения вступили в силу:

[root@deep]# /etc/rc.d/init.d/syslog restart

Так же ка и на удаленном сервере, вам надо добавить новое правило для fireall-а и на локальной машине:

ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
-s $IPADDR 514 \
-d $SYSLOG_SERVER 514 -j ACCEPT

где
EXTERNAL_INTERFACE="eth0" в файле настроек firewall-а.
Where IPADDR="208.164.186.1" в файле настроек firewall-а.
Where SYSLOG_SERVER="mail.openarch.com" в файле настроек firewall-а.

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

[root@deep]# /etc/rc.d/init.d/firewall restart

Это правило разрешает прохождение исходящих пакетов к удаленному серверу на порт 514 (порт syslog сервиса).

Для получения большей информации о firewall-е читайте главу 7 "Сетевой брандмауэр".

Замечание: никогда не используйте в качестве syslog сервера маршрутизирующие сервера. При использование sysklogd программы существует множество опций. Для получения более подробной информации читайте man-ы к sysklogd (8), syslog(2 и syslog.conf(5).

Установка прав доступа к скриптам запуска сервисов, расположенных в каталоге "/etc/rc.d/init.d".

Установите права доступа к скриптам, которые отвечают за запуск и остановку сервисов:

[root@deep]# chmod -R 700 /etc/rc.d/init.d/*

Только пользователю root позволено читать, записывать и запускать эти скрипты. Я не думаю, что обычным пользователям необходимо знать об их содержании.

Замечание. Если вы устанавливаете новую программу или обновляете существующую, которая использует инициализационные скрипты System V, расположенные в /etc/rc.d/init.d/, то не забудьте проверить и при необходимости изменить права доступа к ним.

Файл "/etc/rc.d/rc.local".

По умолчанию, когда вы подключаетесь к Linux системе, вам выдается сообщение об имени дистрибутива, его версии, версии ядра и имени сервера. Это совершенно не нужно, так как дает много информации злоумышленнику. Вы должны оставить только запрос "Login:".

Шаг 1.

Чтобы сделать это, закомментируйте следующие строки в файле "/etc/rc.d/rc.local":

# Эти строки будут заменять содержимое файла /etc/issue при каждой 
# перезагрузке.
#echo "" > /etc/issue
#echo "$R" >> /etc/issue
#echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue
#
#cp -f /etc/issue /etc/issue.net
#echo >> /etc/issue

Шаг 2.

Удалите файлы "issue.net" и "issue" в каталоге "/etc":

[root@deep]# rm -f /etc/issue
[root@deep]# rm -f /etc/issue.net

Замечание. Файл /etc/issue.net содержит информации, которая выдается всякий раз когда осуществляется сетевое подключение к серверу (например, через telnet или ssh). Он может быть найден в каталоге /etc, также как и файл issue, содержащий аналогичную информацию для локальных пользователей. Это простые текстовые файлы и вы можете их легко настраивать под свои нужды, но при этом необходимо изменить скрипт "/etc/rc.d/rc.local", так как он при каждой перезагрузке пересоздает эти файлы.


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

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

Глава 3 Общая системная безопасность (Часть 3)

Биты программ подчиненных пользователю root.

Все программы и файлы в вашем компьютере с символом "s" в поле режима доступа имеют включенным бит SUID (-rwsr-xr-x) или SGID (-r-xr-sr-x). Так как эти программы дают особые привилегии пользователям которые их выполняют, то важно удалить бит "s" с программ владельцем которых является root и которым не нужны подобные возможности. Это осуществляется выполнением команды 'chmod a-s' с именем файла(ов) в качестве аргумента.

К таким программам относятся:

  1. Программы, которые никогда не используются.
  2. Программы, которые должен запускать только root.
  3. Программы используемые редко и которые могут использоваться через механизм su root

Мы поместили знак * рядом с программами для которых , бит s должен быть снят. Помните, что для корректной работы системы необходимы некоторые suid-ные программы.

Для нахождения всех файлов имеющих бит "s" и владельцами которых является root используйте команду:

[root@deep]# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -lg {} \;
*-rwsr-xr-x 1 root root 35168 Sep 22 23:35 /usr/bin/chage
*-rwsr-xr-x 1 root root 36756 Sep 22 23:35 /usr/bin/gpasswd
*-r-xr-sr-x 1 root tty 6788 Sep 6 18:17 /usr/bin/wall
-rwsr-xr-x 1 root root 33152 Aug 16 16:35 /usr/bin/at
-rwxr-sr-x 1 root man 34656 Sep 13 20:26 /usr/bin/man
-r-s--x--x 1 root root 22312 Sep 25 11:52 /usr/bin/passwd
-rws--x--x 2 root root 518140 Aug 30 23:12 /usr/bin/suidperl
-rws--x--x 2 root root 518140 Aug 30 23:12 /usr/bin/sperl5.00503
-rwxr-sr-x 1 root slocate 24744 Sep 20 10:29 /usr/bin/slocate
*-rws--x--x 1 root root 14024 Sep 9 01:01 /usr/bin/chfn
*-rws--x--x 1 root root 13768 Sep 9 01:01 /usr/bin/chsh
*-rws--x--x 1 root root 5576 Sep 9 01:01 /usr/bin/newgrp
*-rwxr-sr-x 1 root tty 8328 Sep 9 01:01 /usr/bin/write
-rwsr-xr-x 1 root root 21816 Sep 10 16:03 /usr/bin/crontab
*-rwsr-xr-x 1 root root 5896 Nov 23 21:59 /usr/sbin/usernetctl
*-rwsr-xr-x 1 root bin 16488 Jul 2 10:21 /usr/sbin/traceroute
-rwxr-sr-x 1 root utmp 6096 Sep 13 20:11 /usr/sbin/utempter
-rwsr-xr-x 1 root root 14124 Aug 17 22:31 /bin/su
*-rwsr-xr-x 1 root root 53620 Sep 13 20:26 /bin/mount
*-rwsr-xr-x 1 root root 26700 Sep 13 20:26 /bin/umount
*-rwsr-xr-x 1 root root 18228 Sep 10 16:04 /bin/ping
*-rwxr-sr-x 1 root root 3860 Nov 23 21:59 /sbin/netreport
-r-sr-xr-x 1 root root 26309 Oct 11 20:48 /sbin/pwdb_chkpwd

Для отключения бита "s" введите следующие команды:

[root@deep]# chmod a-s /usr/bin/chage
[root@deep]# chmod a-s /usr/bin/gpasswd
[root@deep]# chmod a-s /usr/bin/wall
[root@deep]# chmod a-s /usr/bin/chfn
[root@deep]# chmod a-s /usr/bin/chsh
[root@deep]# chmod a-s /usr/bin/newgrp
[root@deep]# chmod a-s /usr/bin/write
[root@deep]# chmod a-s /usr/sbin/usernetctl
[root@deep]# chmod a-s /usr/sbin/traceroute
[root@deep]# chmod a-s /bin/mount
[root@deep]# chmod a-s /bin/umount
[root@deep]# chmod a-s /bin/ping
[root@deep]# chmod a-s /sbin/netreport

Если вы хотите узнать, что делает каждая из программ используйте руководство man. Например,

[root@deep]# man netreport

Параметры настраиваемые в ядре.

В новой версии Red Hat 6.2 все параметры ядра доступные через "/proc/sys" могут быть настроены при запуске. Вы можете использовать для этого новый файл "/etc/sysctl.conf". Он читается и загружается каждый раз при загрузке системы. Все изменения в /proc/sys должны осуществляться через "/etc/sysctl.conf", так как он загружается раньше rc.local и других пользовательских скриптов. Ниже мы опишем все опции связанные с сетевой безопасностью, которые вы должны настроить для вашего сервера Red Hat 6.1 и Red Hat 6.2.

Предохранение вашей системы от ответов на ping запросы.

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

Под Red Hat 6.1

[root@deep /]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера. Невосприимчивость к ping спасет вас от многих хакеров, потому что они даже не узнают о вашем существовании. Для восстановления способности отвечать на ping введите следующую команду:

[root@deep /]# echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

Под Red Hat 6.2

Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:

# Enable ignoring ping request
net.ipv4.icmp_echo_ignore_all = 1

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters	[ OK ]
Bringing up interface lo	[ OK ]

Предохранение вашей системы от ответов на широковещательные запросы.

Так же как и ping запросы, необходимо отключить и широковещательные сообщения. Когда IP пакет отправляется на широковещательный адрес (например, 192.168.1.255) он принимается всеми машинами в сети. Затем все машины отвечают на него ICMP эхо ответом, в результате может возникнуть перегрузка в сети или полный выход из строя (DoS атака). Для получения большей информации читайте RFC 2644.

Под Red Hat 6.1

[root@deep /]# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:

# Enable ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts = 1

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters	[ OK ]
Bringing up interface lo	[ OK ]
Bringing up interface eth0	[ OK ]
Bringing up interface eth1	[ OK ]

Протоколы маршрутизации.

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

Чтобы заблокировать IP маршрутизацию от источника введите следующую команду:

Под Red Hat 6.1

[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
> echo 0 > $f
> done
[root@deep /]#

Добавьте эти строки в файл "/etc/rc.d/rc.local". чтобы они выполнялись при каждой загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:

# Disables IP source routing
net.ipv4.conf.all.accept_source_route = 0

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters	[ OK ]
Bringing up interface lo	[ OK ]
Bringing up interface eth0	[ OK ]
Bringing up interface eth1	[ OK ]

Замечание. Введенные выше команды будет отключать маршрутизацию от источника для всех интерфейсов (lo, ethN, pppN и т.д.).

Включение защиты от TCP SYN Cookie.

"SYN Attack" относится к классу атак "Отказ в обслуживании", которая отбирает на себя все ресурсы сервера и вызывает его перезагрузку. DoS атаки (нападения, которые выводят сервер из строя из-за большого трафика к серверу, в результате чего сервер не может ответить на поступающие запросы) легко осуществляются из внутренней сети и Интернета. В ядрах 2.1 появилась опция, которая позволяет защитить компьютер от подобной атаки, но по умолчанию он не включена. Для ее включениясделайте следующее:

Под Red Hat 6.1

[root@deep]# echo 1 > /proc/sys/net/ipv4/tcp_syncookies

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:

# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters	[ OK ]
Bringing up interface lo	[ OK ]
Bringing up interface eth0	[ OK ]
Bringing up interface eth1	[ OK ]

Замечание. Если при выполнении вышеприведенной команды вы получили сообщение об ошибке, то проверьте включена ли у вас в ядре опция TCP syncookies. (IP: TCP syncookie support (not enabled per default) (CONFIG_SYN_COOKIES) [Y/n/?]).

Запрещение приема ICMP redirect пакетов

Когда хост использует неоптимальный или "умерший" маршрут к адресату, маршрутизатор отправляет ему ICMP redirect пакет, который информирует о необходимости изменить маршрут. Если атакующий сможет подделать этот пакет, то он или она сможет изменить таблицу маршрутизации на компьютере и нарушить его защиту, вызвав отправку информации по неправильному маршруту.

Под Red Hat 6.1

[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
> echo 0 > $f
> done
[root@deep /]#

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:

# Disable ICMP Redirect Acceptance
net.ipv4.conf.all.accept_redirects = 0

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters	[ OK ]
Bringing up interface lo	[ OK ]
Bringing up interface eth0	[ OK ]
Bringing up interface eth1	[ OK ]

Замечание. Введенные выше команды будет отключать прием ICMP redirect пакетов для всех интерфейсов (lo, ethN, pppN и т.д.).

Включение always-defragging защиты

Эта защиту необходимо включить если вы используете Linux сервер как шлюз с маскарадингом трафика (IP Masquerading).

Под Red Hat 6.1

[root@deep /]# echo 1 > /proc/sys/net/ipv4/ip_always_defrag

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:

# Enable always defragging Protection
net.ipv4.ip_always_defrag = 1

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters	[ OK ]
Bringing up interface lo	[ OK ]
Bringing up interface eth0	[ OK ]
Bringing up interface eth1	[ OK 
]

Включение защиты от неправильных сообщениях об ошибках.

Эта опция будет предупреждать вас обо все неправильных сообщениях об ошибке.

Под Red Hat 6.1

[root@deep /]# echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:

# Enable bad error message Protection
net.ipv4.icmp_ignore_bogus_error_responses = 1

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters	[ OK ]
Bringing up interface lo	[ OK ]
Bringing up interface eth0	[ OK ]
Bringing up interface eth1	[ OK ]

Включение защиты от IP spoofing.

Защита от IP spoofing предупреждает вашу сеть от взаимодействия с ложными источниками сообщений, которые часто используются в DoS атаках.

Под Red Hat 6.1

[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
> echo 1 > $f
> done
[root@deep /]#

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:

# Enable IP spoofing protection, turn on Source Address Verification
net.ipv4.conf.all.rp_filter = 1

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters	[ OK ]
Bringing up interface lo	[ OK ]
Bringing up interface eth0	[ OK ]
Bringing up interface eth1	[ OK ]

Фиксирование пакетов с поддельными адресами (spoof), пакетов с маршрутизацией от источника, Redirect пакетов.

Эта защита будет фиксировать все пакеты с поддельными адресами (spoof), пакеты с маршрутизацией от источника, Redirect пакеты в ваших лог файлах.

Под Red Hat 6.1

[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/log_martians; do
> echo 1 > $f
> done
[root@deep /]#

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:

# Log Spoofed Packets, Source Routed Packets, Redirect Packets
net.ipv4.conf.all.log_martians = 1

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters	[ OK ]
Bringing up interface lo	[ OK ]
Bringing up interface eth0	[ OK ]
Bringing up interface eth1	[ OK ]

Странные или скрытые файлы.

Проверьте вашу систему на наличие странных или скрытых файлов (файлы которые запускаются периодически и не показываются командой ls), поскольку они могут использоваться для скрытия утилит и информации (программы взлома паролей, парольные файлы из других систем и др.). Обычной методикой на UNIX системах является расположение скрытых каталогов с необычными именами в пользовательских бюджетах, например, ".", ".. " (точка точка пробел) или "..^G" (точка точка ctrl-G). Программа "find" может быть использована для поиска таких программ. Например,

[root@deep]# find / -name ".. " -print -xdev
[root@deep]# find / -name ".*" -print -xdev | cat -v

Также, часто используются файлы с именами подобными ".mail" или ".xx"

Поиск всех файлов с включенными битами SUID/SGID.

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

Любимым трюком взломщиков является exploit SUID "root" программ, чтобы в дальнейшем использовать их как скрытый вход в систему. Поэтому вам необходимо находить и внимательно следить за всеми SUID/SGID программами, чтобы вовремя заметить изменения внесенные кем-то в них. Используйте следующую команду для поиска всех SUID/SGID программ на сервере.

[root@deep]# find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -lg {} \;

Замечание. Читайте в этой книге главу 10 " Программное обеспечение обеспечения безопасности (Утилиты слежения)", где приведена информация о программе sXid, которая поможет автоматизировать подобные задачи и будет высылать вам отчеты по электронной почте.

Поиск программ и каталогов, в которые разрешена запись для группы и всех остальных пользователей.

Некоторые системные файлы могут предстать как дыра в безопасности, если хакер получит доступ к системе и сможет модифицировать их. Кроме того, дополнительную опасность представляют каталоги полностью открытые для записи. В них нарушитель легко может записывать и удалять файлы. В нормальном состоянии системы существует несколько файлов открытых для записи, включая несколько в каталоге /dev.

Для нахождения файлов и каталогов полностью открытых для записи используйте следующие команды:

[root@deep]# find / -type f \( -perm -2 -o -perm -20 \) -exec ls -lg {} \;
[root@deep]# find / -type d \( -perm -2 -o -perm -20 \) -exec ls -ldg {} \;

Замечание. Для облегчения регулярного поиска и проверки подобных файлов и каталогов можно использовать специализированное программное обеспечение, например, Tripwire. Большую информацию об этом программном продукте можно прочитать в главе 12 "Программы обеспечения безопасности (Целостность системы)",

Файлы не имеющие владельцев.

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

Для поиска файлов и каталогов не имеющих владельца используйте команду:

[root@deep]# find / -nouser -o -nogroup

Замечание. Файлы найденные в каталоге /dev не считаются неправильными.

Поиск ".rhosts" файлов.

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

[root@deep]# find /home -name .rhosts

Можно использовать задания cron, чтобы регулярно искать, проверять и удалять файлы $HOME/.rhosts. Не забудьте предупредить пользователей о подобной проверке.

Чтобы использовать cron для периодической проверке и отсылке отчетов через электронную почту о наличие всех .rhosts файлах сделайте следующее: Создайте от пользователя root скрипт find_rhosts_files в каталоге "/etc/cron.daily" (touch /etc/cron.daily/find_rhosts_files) и внесите в него следующие строки:

#!/bin/sh
/usr/bin/find /home -name .rhosts | (cat <<EOF
This is an automated report of possible existent ".rhosts" files on the server
deep.openarch.com, generated by the find utility command.
New detected ".rhosts" files under the "/home" directory include:
EOF
cat
) | /bin/mail -s "Content of .rhosts file audit report" root

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

[root@deep]# chmod 755 /etc/cron.daily/find_rhosts_files
[root@deep]# chown 0.0 /etc/cron.daily/find_rhosts_files

Каждый день по почте пользователю root будут поступать письма с темой: "Content of .rhosts file audit report" и содержащие список найденных файлов .rhosts.

Система была взломана.

Если вы поняли, что ваша система была взломана, то взаимодействуйте с CERT ╝ Coordination Center или с вашим представителем в FIRST (Forum of Incident Response and Security Teams).
Internet Email: cert@cert.org
CERT Hotline: (+1) 412-268-7090
Facsimile: (+1) 412-268-6989
CERT/CC отвечает на личные вопросы 8:00 a.m. - 8:00 p.m. EST (GMT -5)/EDT (GMT -4)) по рабочим дным; в критических ситуациях можно звонить и в выходные и праздничные дни.


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

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

Глава 4 Общая системная оптимизация

В этой главе
Общие вопросы оптимизации Linux

Краткий обзор

На этой стадии вы должны иметь настроенный и защищенный Linux сервер. Наш сервер содержит наиболее необходимые пакеты и программы, которые должным образом настроены, чтобы правильно работать. Прежде чем продолжить дальше и устанавливать сервисы нужные пользователям мы займемся настройкой нашего сервера. То, что мы будем делать дальше относится ко всей системе в целом. Эти настройки будут влиять и на работу сервисов, которые мы установим позже. Если в вашем компьютере не стоит x386 процессор, то Red Hat не настроен под вас оптимальным образом. Эта глава проведет вас через различные шаги настройки сервера и файловой системы под конкретный тип процессор, объем память и сеть.

Файл "/etc/profile".

Файл "/etc/profile" включает системное окружение всех исполняемых программ. Все настройки добавленные в этот файл отражаются на переменные окружения вашей системы. Так, помещение в этот файл флагов оптимизации - это хорошая идея. Чтобы выжать максимальную эффективность из ваших программ под x86, вы можете использовать при компиляции флаг -09, обозначающий полную оптимизацию. Многие программы содержат в Makefile опцию -02, но -09 обозначает высший уровень оптимизации при которой размер файла увеличивается, но увеличивается и скорость выполнения.

Замечание. Использование опции -09 не всегда приводит к наилучшим результатам. Это верно для x686 и выше процессоров, но для более старых процессоров не всегда так.

При компиляции можно использовать опцию -fomit-frame-pointer, которая говорит, что для доступа к переменным нужно использовать стек. К сожалению, с этой опцией практически невозможна отладка. Можно использовать переключатель -mcpu=cpu_type и -march=cpu_type при помощи которых создается код, оптимизированный для определенного CPU. Полученный код будет работать только на заданном процессоре или более новом. Приведенные ниже оптимизационные флаги запишите в файл /etc/profile. Они влияют только на программы, которые вы будете компилировать в дальнейшем и не оказывают на какого действия на существующую систему.

Шаг 1.

Для CPU i686 или PentiumPro, Pentium II, Pentium III
В файл "/etc/profile" добавьте следующую строку:

CFLAGS='-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions'

Для CPU i586 или Pentium
В файл "/etc/profile" добавьте следующую строку:

CFLAGS='-O3 -march=pentium -mcpu=pentium -ffast-math -funroll-loops -fomit-frame-pointer -fforce-mem -fforce-addr -malign-double -fno-exceptions'

For CPU i486
В файл "/etc/profile" добавьте следующую строку:

CFLAGS='-O3 -funroll-all-loops -malign-double -mcpu=i486 -march=i486 -fomit-frame-pointer -fno-exceptions'

Шаг 2.

После выбора типа процессора добавьте в строку export файла "/etc/profile" переменные "CFLAGS LANG LESSCHARSET"

export PATH PS1 HOSTNAME HISTSIZE HISTFILESIZE USER LOGNAME MAIL INPUTRC CFLAGS LANG LESSCHARSET

Шаг 3.

Выйдете из системы и вновь в нее войдете, чтобы опции определенные переменной CFLAGS вступили в силу и все программы и другие "configure" утилиты стали ее учитывать. Оптимизация под Pentium (Pro/II/III) будет работать только с компиляторами egcs и pgcc. Egcc уже установлен на вашем сервере, поэтому об этом думать не надо.

Ниже приведено описание опций, которые мы использовали:

-funroll-loops
Выполняется оптимизация развертыванием циклов. Это осуществляется для циклов число итераций которых может быть определено во время компиляции или во время выполнения.

-funroll-all-loops
Выполняется оптимизация развертыванием циклов. Развертывает все циклы и обычно программы скомпилированные с этой опцией медленнее запускаются.

-ffast-math
Эта опция позволяет GCC нарушать некоторые ANSI или IEEE правила и/или спецификации в интересах оптимизации кода по скорости выполнения. Например, это позволяет компилятору предполагать, что параметры к функции sqrt - не-отрицательные числа и что значения не с плавающей запятой являются NaNs.

-malign-double
Контролирует, выравнивает ли GCC double, long double и long long переменные на двусловной границе или однословной границе. Выравнивание double переменных на двусловной границе создает код, который выполняется на "Pentium" процессорах несколько быстрее, расходуя больше памяти.

-mcpu=cpu_type
Определяет значание типа процессора при планировании используемых инструкций. При определении конкретного типа CPU, GCC будет использовать инструкции специфичные для него. Когда эта опция не определена, никогда не будут использоваться команды не работающие на i386 процессоре. "I586" эквивалентен "Pentium", "i686" эквивалентен "Pentium Pro". "K6" - AMD.

-march=cpu_type
Создает инструкции для CPU cpu_type. Выбор типов процессоров такой же как и для mcpu. Кроме того, использование `-march=cpu_type' подразумевает и `- mcpu=cpu_type'.

-fforce-mem
принуждает копировать операнды хранящиеся в памяти в регистры перед выполнением арифметических операций над ними. В результате получается более лучший код в котором все ссылки на ячейки памяти потенциально общие подвыражения. Когда они не являются общими подвыражениями, то комбинации команд должны устранить отдельную загрузку регистра.

-fforce-addr
вынуждает копировать постоянные адреса памяти в регистры перед выполением арифметических операций над ними. В результате может создаваться более хороший код, так же как и при -fforce-mem.

-fomit-frame-pointer
Не сохранять указатель на кадр (frame pointer) в регистре для функций, которые не нуждаются в этом. Это позволяет избежать инструкций на сохранение, определение и восстановление указателя на кадр (frame pointer); в то же время освобождая регистры для других функций. Это делает невозможным отладку на большинстве машин.

Замечание. Все возможности оптимизации, которые описаны в этой книге относятся к семейству процессоров Pentium II/III. Так, что вы должны при необходимости изменить флаги компиляции под ваш тип процессора.

Результаты тестирования быстродействия, суммирование по архитектурам.

В зависимости от типа вашего процессора и версии компилятора (gcc/egcs) опции оптимизации могут отличаться. Графики приведенные ниже помогут вам выбрать лучшие для вас флаги компиляции.

Версия компилятора установленного в Red Hat 6.1 и 6.2 - egcs 2.91.66. Но перед выбором опций оптимизации обязательно проверьте его версию, используя команду:

egcs -version

Все результаты тестирования могут быть получены с домашней страницы GCC, находящейся по адресу http://egcs.cygnus.com/.

Сейчас приведем пример:

Для CPU Pentium II/III (i686) и компилятора egcs-2.91.66 лучшими опциями оптимизации будут:

CFLAGS='-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions'

Для CPU pentium (i586) с компилятором egcs-2.91.66 лучшими опциями оптимизации будут:

CFLAGS='-O3 -march=pentium -mcpu=pentium -ffast-math -funroll-loops -fomit-frame-pointer -fforce-mem -fforce-addr -malign-double -fno-exceptions'

Для CPU i486 с компилятором egcs-2.91.66 лучшими опциями оптимизации будут:

CFLAGS='-O3 -funroll-all-loops -malign-double -mcpu=i486 -march=i486 -fomit-frame-pointer -fno-exceptions'

Параметр "bdflush".

Файл bdflush вплотную связан с операциями в подсистеме виртуальной памяти ядра Linux и имеет небольшое влияние на использование диска. Этот файл (/proc/sys/vm/bdflush) контролирует операции демона ядра bdflush. Мы используем этот файл для улучшения производительности файловой системы.

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

По умолчанию bdflush в Red Hat Linux использует следующие значения:
"40 500 64 256 500 3000 500 1884 2"

Для изменения значений в bdflush введите следующие команды на вашем терминале:

Под Red Hat 6.1

[root@deep /]# echo "100 1200 128 512 15 5000 500 1884 2">/proc/sys/vm/bdflush

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:
# Improve file system performance
vm.bdflush = 100 1200 128 512 15 5000 500 1884 2

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters	[ OK ]
Bringing up interface lo	[ OK ]
Bringing up interface eth0	[ OK ]
Bringing up interface eth1	[ OK ]

В вышеприведенном примере согласно файлу "/usr/src/linux/Documentation/sysctl/vm.txt" первый параметр 100% определяет максимальное число грязных буферов в кэше буферов. Грязные означают то, что содержимое буфера все еще должно быть записано на диск. Установка этому параметру высокого значения означает, что Linux в течении долгого времени может задерживать запись на диск, но в то же время это означает, что будет необходимо произвести много операций ввода-вывода одновременно, когда памяти станет мало. Низкое значение будет распределять операции I/O более равномерно.

Второй параметр (1200) (ndirty) определяет максимальное число грязных буферов которые могут быть одновременно записаны. Высокое значение означает отсроченный, пульсирующий I/O, в то время как маленькое значение может приводить к нехватке памяти, когда bdflush не просыпается достаточно часто.

Третье значение (128) (nrefill) определяет число буферов, которые bdflush будет добавлять в список свободных при вызове функции refill_freelist(). Необходимо распределять свободные буфера заранее, так как они имеют часто размер отличный от размера страницы памяти и некоторый учет системных ресурсов нужно делать заранее. Чем выше число, тем больше памяти будет потрачено впустую и тем реже будет необходимо вызывать refill_freelist(). Когда refill_freelist() (512) натолкнется на больше чем nref_dirt грязных буферов то просыпается bdflush().

age_buffer (50*HZ) и age_super parameters (5*HZ) обозначают максимальное время, которое Linux ждет перед записью грязных буферов на диск. Значение выражено в мигах (clockticks), число мигов в секунду = 100. age_buffer это возраст блоков данных, а age_super - возраст метаданных файловой системы. Пятый (15) и последние два (1884 и 2) не используются системой, так что мы оставим значения по умолчанию.

Замечание. Читайте "/usr/src/linux/Documentation/sysctl/vm.txt" о том как улучшить параметры ядра, связанные с виртуальной памятью.

Параметр "buffermem".

Файл buffermem также тесно связан с работой подсистемы виртуальной памяти Linux ядра. Значения в этом файле "/proc/sys/vm/buffermem" контролируют как много памяти используется под буферную память (в процентах). Следует отметить, что проценты берутся от общей системной памяти.

Значение по умолчанию параметра "buffermem" под Red Hat:
"20 10 60".

Для изменения параметра "buffermem" введите следующие команды:

Под Red Hat 6.1

[root@deep /]# echo "80 10 60" >/proc/sys/vm/buffermem

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:
# Improve virtual memory performance
vm.buffermem = 80 10 60

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters	[ OK ]
Bringing up interface lo	[ OK ]
Bringing up interface eth0	[ OK ]
Bringing up interface eth1	[ OK ]

В вышеприведенном примере согласно файлу "/usr/src/linux/Documentation/sysctl/vm.txt" первый параметр (80%) говорит использовать минимум 80% системной памяти под буферный кэш; минимальное число процентов памяти, которое должно быть использовано под буферную память.

Последние два параметра (10 и 60) не используются системой и мы их оставляем без изменений.

Замечание. Читайте "/usr/src/linux/Documentation/sysctl/vm.txt" о том, как улучшить параметры ядра связанные с виртуальной памятью.

Параметр "ip_local_port_range".

ip_local_port_range содержит два целых числа, которые определяют интервал портов, которые используют TCP и UDP при выборе локального порта. Первое число - это нижнее возможное значение, а второе - верхнее. В часто используемых системах измените эти значения на 32768-61000.

По умолчанию в Red Hat ip_local_port_range равен
"1024 4999"

Чтобы изменить эти значения введите следующие команды на вашем терминале:

Под Red Hat 6.1

[root@deep /]# echo "32768 61000" > /proc/sys/net/ipv4/ip_local_port_range

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:

# Allowed local port range
net.ipv4.ip_local_port_range = 32768 61000

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters	[ OK ]
Bringing up interface lo	[ OK ]
Bringing up interface eth0	[ OK ]
Bringing up interface eth1	[ OK ]

Файл "/etc/nsswitch.conf".

Файл "/etc/nsswich.conf" используется для настройки того, какой сервис использовать для получения такой информации как имя хоста, файл паролей, файл с группами и т.д. Два последних пункта (файл с паролями и файл с группами) мы не используем, так как у нас на сервере нет NIS. Таким образом мы акцентируем наше внимание на строке hosts

Редактируйте файл nsswitch.conf (vi /etc/nsswitch.conf) и измените строку "hosts", чтобы она читалась:

"hosts: dns files"

которая говорит программам желающим определить адреса, что вначале необходимо воспользоваться службой DNS, а затем, если DNS не отвечает, файлом "/etc/hosts".

Также, я настоятельно рекомендую удалить все вхождения NIS из каждой строки, если вы не используете NIS. В результате файл /etc/nsswitch.conf может выглядеть следующим образом:

passwd: files
shadow: files
group: files
hosts: dns files
bootparams: files
ethers: files
netmasks: files
networks: files
protocols: files
rpc: files
services: files
automount: files
aliases: files

Параметр "file-max".

Значение в file-max определяет максимальное число дескрипторов файлов, которые может распределить ядро. Мы настраиваем этот файл на увеличение числа открытых файлов. Увеличьте значение "/proc/sys/fs/file-max" до значения примерно равного 256 на каждые 4M RAM, например, для машины со 128 M установите значение равное 8192 (128/4=32, 32*256=8192).

По умолчанию в Red Hat file-max равен
"4096"

Чтобы изменить эти значения введите следующие команды на вашем терминале:

Под Red Hat 6.1

[root@deep /]# echo "8192" >/proc/sys/fs/file-max

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:

# Improve the number of open files
fs.file-max = 8192

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters	[ OK ]
Bringing up interface lo	[ OK ]
Bringing up interface eth0	[ OK ]
Bringing up interface eth1	[ OK ]

Замечание. Когда вы начинаете получать много ошибок о выходе за пределы файловых дескрипторов (running out of file handles) - увеличьте значение file- max. Файловому и веб серверам нужно много открытых файлов.

Параметр "inode-max".

Файл inode-max "/proc/sys/fs/inode-max" определяет максимальное число дескрипторов блоков индексов (inode). Мы настраиваем этот файл на увеличение числа открытых блоков индексов (inode), увеличивая "/proc/sys/fs/inode-max" до значения в 3-4 раза большего (8192*4=32768) числа открытых файлов (file-max). Это обусловлено тем, что на каждый открытый файл приходится как минимум 1 блок индекса, а для больших файлов намного больше.

По умолчанию в Red Hat inode-max равен
"16376"

Чтобы изменить эти значения введите следующие команды на вашем терминале:

Под Red Hat 6.1

[root@deep /]# echo "32768" >/proc/sys/fs/inode-max

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:

# Improve the number of inodes opened
fs.inode-max = 32768

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters	[ OK ]
Bringing up interface lo	[ OK ]
Bringing up interface eth0	[ OK ]
Bringing up interface eth1	[ OK ]

Замечание. Если вы регулярно получаете сообщение run out of inodes, то вам необходимо увеличить значение inode-max. Помните, что этот параметр зависит от file-max. Файловому и Веб серверам требуется много открытых индексных блоков.

Параметр "ulimit'.

Linux имеет ограничение "Max Processes" для каждого пользователя. Этот параметр показывает как много процессов может иметь пользователь. Для улучшения производительности, вы можете спокойно увеличить это значение для пользователя root, сделав его неограниченным.

Добавьте следующую строку в /root/.bashrc:

ulimit -u unlimited

Теперь вы должны выйти и вновь войти на сервер. Для проверки, что вы все сделали правильно дайте команду (как root):

ulimit -a

в строке с max user processes должен быть текст "unlimited".

[root@deep]# ulimit -a
core file size (blocks) 1000000
data seg size (kbytes) unlimited
file size (blocks) unlimited
max memory size (kbytes) unlimited
stack size (kbytes) 8192
cpu time (seconds) unlimited
max user processes unlimited (эта строка)
pipe size (512 bytes) 8
open files 1024
virtual memory (kbytes) 2105343

Замечание. Вы можете дать команду ulimit -u unlimited в командной строке, но я всегда забываю делать это, поэтому вношу ее в файл /root/.bashrc.

Увеличьте системные ограничения на открытые файлы.

Процесс в Red Hat 6.0 с ядром 2.2.5 может открыть не меньше 31000 файловых дескрипторов и процесс на ядре 2.2.12 - не меньше 90000 файловых дескрипторов (согласно установленным ограничениям). Верхняя граница зависит от доступной памяти. Увеличение этого числа до 90000 для пользователя root делается следующим образом:

Редактируйте файл /root/.bashrc:

ulimit -n 90000

Теперь вы должны выйти и вновь войти на сервер. Для проверки, что вы все сделали правильно дайте команду (как root):

ulimit -a в строке с open files должен быть текст "90000".
[root@deep]# ulimit -a
core file size (blocks) 1000000
data seg size (kbytes) unlimited
file size (blocks) unlimited
max memory size (kbytes) unlimited
stack size (kbytes) 8192
cpu time (seconds) unlimited
max user processes unlimited
pipe size (512 bytes) 8
open files 90000 (эта строка).
virtual memory (kbytes) 2105343

Замечание. В более старых 2.2 ядрах, тем не менее, число открытых файлов одним процессом все еще ограничено 1024, даже с вышеупомянутыми изменениями.

Атрибут "atime".

В дополнении к информации о дате создания и последней модификации файла, Linux создает запись о последнем обращении к файлу. Эта информация не очень полезна и при этом происходят затраты системных ресурсов на ее ведение. Файловая система ext2 позволяет суперпользователю маркировать отдельные файлы, чтобы запись о времени последнего доступа к ним не велась. Это может существенно улучшить эффективность системы, особенно, если установить этот атрибут для часто используемых файлов, например, "/var/spool/news".

Для установки атрибута:

[root@deep]# chattr +A filename

Для всех файлов в каталоге:

[root@deep /root]# chattr -R +A /var/spool/
[root@deep /root]# chattr -R +A /cache/
[root@deep /root]# chattr -R +A /home/httpd/ona/

Атрибут "noatime".

Linux имеет опцию монтирования файловой системы, называемую "noatime". Она может быть добавлена в поле опций файла "/etc/fstab". Если файловая система смонтирована с этой опцией, то при доступе к ней по чтению, информация "atime" изменяться не будет. Важность установки опции "noatime" в том, что она устраняет необходимость операции записи в файловую систему для файлов, которые просто читаются. Так как запись "дорогая" операция, то ее отсутствие может существенно улучшить эффективность системы. Обратите внимание, что информация wtime продолжает изменяться при записи в файл.

В нашем примере мы устанавливаем опцию noatime для файловой системы /chroot.

Редактируйте файл /etc/fstab и добавьте, например, такую строку:

E.I: /dev/sda7 /chroot ext2 defaults,noatime 1 2

Перезагрузите вашу систему и проверьте, что у вас получилось:

[root@deep]# reboot
[root@deep]# cat /proc/mounts
/dev/root / ext2 rw 0 0
/proc /proc proc rw 0 0
/dev/sda1 /boot ext2 rw 0 0
/dev/sda8 /cache ext2 rw 0 0
/dev/sda7 /chroot ext2 rw,noatime 0 0
/dev/sda6 /home ext2 rw 0 0
/dev/sda11 /tmp ext2 rw 0 0
/dev/sda5 /usr ext2 rw 0 0
/dev/sda9 /var ext2 rw 0 0
none /dev/pts devpts rw 0 0

Мы видим, что /chroot имеет атрибут noatime.

Swap раздел.

Поместите ваш swap раздел вблизи начала вашего диска, которое физически располагается на внешней стороне цилиндра. В результате за один оборот головка охватывает большую поверхность. При помощи команды hdparm -t, я вижу, что с разделом помещенным в конце диска скорость работы на 3 MB/s медленнее.

Настройка производительности IDE дисков.

Быстродействие IDE дисков увеличивается при использовании UDMA, 32- битного режима обмена данными и многосекторного режима. Ядро использует консервативный режим работы с дисками, пока ему не скажешь изменить это. "Волшебная" команда для изменения установок - hdparm.

Включение 32-bit I/O через шину PCI:

[root@deep]# /sbin/hdparm -c 1 /dev/hda (или hdb, hdc и т.д.).

Man для "hdparm" (8) говорит, что для некоторых чипсетов нужно использовать -c 3. Все (E)IDE диски до сих пор имеют 16-разрядное подключение через ленточный кабель к интерфейсной карте.

Включение DMA:

[root@deep]# /sbin/hdparm -d 1 /dev/hda (или hdb, hdc и т.д.).

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

Для включения multiword DMA mode 2:

[root@deep]# /sbin/hdparm -d 1 -X34 /dev/hda (или hdb, hdc и т.д.).

Эта установка используется для (E)IDE/ATA2 дисков (посмотрите документацию к вашему диску).

Для включения UltraDMA mode2:

[root@deep]# /sbin/hdparm -d 1 -X66 /dev/hda (или hdb, hdc и т.д.)

Вам нужно будет заранее подготовить ваш чипсет к использованию UltraDMA, также прочитайте man-ы к hdparm. Используйте этот режим очень осторожно!

Для включения multiple sector mode I/O:

[root@deep]# /sbin/hdparm -m XX /dev/hda (или hdb, hdc и т.д.)

Где "XX" максимальные установки поддерживаемые вашим диском. Флаг -i может использоваться для поиска максимальных значений для инсталлированных жестких дисков. Смотрите значение MaxMultSect.

[root@deep]# /sbin/hdparm -i /dev/hda (or hdb, hdc etc)
/dev/hda:
Model=Maxtor 7540 AV, FwRev=GA7X4647, SerialNo=L1007YZS
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>5Mbs FmtGapReq }
RawCHS=1046/16/63, TrkSize=0, SectSize=0, ECCbytes=11
BuffType=3(DualPortCache), BuffSize=32kB, MaxMultSect=8, MultSect=8
DblWordIO=yes, maxPIO=2(fast), DMA=yes, maxDMA=1(medium)
CurCHS=523/32/63, CurSects=379584528, LBA=yes, LBA=yes, LBAsects=1054368
tDMA={min:150,rec:150}, DMA modes: sword0 sword1 *sword2 *mword0
IORDY=on/off, tPIO={min:240,w/IORDY:180}, PIO modes: mode3

Многосекторный режим (IDE Block Mode) поддерживается большинством современных IDE жестких дисков, передача нескольких секторов за одно I/O прерывание быстрее, чем обычное односекторное. Когда эта возможность включена, обычно, понижаются накладные расходы на операциях ввода/вывода на 30-50%. На многих системах в результате также увеличивается пропускная способность от 5% до 50%.

Вы можете проверить, чего добились, запустив hdparm в режиме проверки производительности:

[root@deep]# /sbin/hdparm -t /dev/hda (или hdb, hdc и т.д.).

Как только вы определили все параметры "hdparm", не забудьте добавить соответствующие команды в файл "/etc/rc.d/rc.local".

Обработка большего числа TCP/IP соединений за определенное время.

Эти настройки уменьшают время TCP/IP подключения, чтобы можно было обработать больше соединений за тотже интервал. Также будет уменьшено время, которое Linux ждет до закрытия соединения и время через которое Linux разрывает устаревшее соединение. Эти настройки отключат некоторые расширения протокола TCP/IP, которые нам не нужны.

Значения параметров TCP/IP стека принятые в Red Hat по умолчанию:
tcp_fin_timeout "180"
tcp_keepalive_time "7200"
tcp_window_scaling "1"
tcp_sack "1"
tcp_timestamps "1"

Чтобы изменить параметры TCP/IP введите следующие команды на вашем терминале:

Под Red Hat 6.1

[root@deep /]# echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
[root@deep /]# echo 1800 >/proc/sys/net/ipv4/tcp_keepalive_time
[root@deep /]# echo 0 > /proc/sys/net/ipv4/tcp_window_scaling
[root@deep /]# echo 0 > /proc/sys/net/ipv4/tcp_sack
[root@deep /]# echo 0 > /proc/sys/net/ipv4/tcp_timestamps

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.

Под Red Hat 6.2

Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:

# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 30
# Decrease the time default value for tcp_keepalive_time connection
net.ipv4.tcp_keepalive_time = 1800
# Turn off the tcp_window_scaling
net.ipv4.tcp_window_scaling = 0
# Turn off the tcp_sack
net.ipv4.tcp_sack = 0
# Turn off the tcp_timestamps
net.ipv4.tcp_timestamps = 0

Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters	[ OK ]
Bringing up interface lo	[ OK ]
Bringing up interface eth0	[ OK ]
Bringing up interface eth1	[ OK ]

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

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

Глава 5 Конфигурирование и создание оптимизированных, безопасных ядер (Часть 1)

В это главе
Ядро Linux
Создание аварийных загрузочных дискет
Безопасность ядра
Компиляция ядра
Инсталляция нового ядра
Удаление программ, файлов и строк связанных с модулями
Создание новой аварийной дискеты
Создание аварийного загрузочного флоппи-диска
Обновление "/dev" входов

Общий обзор.

Ну хорошо, вы видите, что ваш сервер приобрел общую форму. Но подождите, что является основной частью вашего сервера? Да, это ядро. Оно является основой операционной системы. Без него Linux не Linux. Так что мы должны очень внимательно отнестись к ядру и настроить его так, чтобы оно соответствовало нашим потребностям. Первое о чем вы думаете, создавая новое ядро, это его более отличная настроенность под вашу систему. Это сделать очень просто, но в любом случае прочитайте вначале файл README в каталоге "/usr/src/linux". При конфигурировании ядра вы должны компилировать коды, которые вам нужны. Это даст следующие преимущества: ядро будет быстрее (меньше размер кода, входящего в него), у вас освободиться место в RAM (меньше кода, меньше размер ядра, а части ядра никогда не помещаются в виртуальную память), ядро будет более стабильным (не надо искать не существующих устройств), неиспользуемые части могут использоваться нападающим для получения доступа к вашей или другим системам. Модули работают медленнее, чем тот же код в компилированный в ядро. При конфигурировании и компиляции мы будем создавать монолитное ядро. Такое ядро получатся при ответе на вопросы Yes или No (никогда не создавайте модули) и пропуске следующих шагов: make modules и make modules_install. Также мы будем патчить наше новое ядро кодом защиты от переполнения буфера. Подобный патч для ядра существует и работает он подобно Solar Designer's, отвергая выполнение кода находящегося в стеке, делая осуществление атак типа "переполнение буфера" более сложным, и полностью защищая систему от всех текущих эксплойтов взятых из "script kiddies" всемирной сети.

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

Созданное ядро будет сильно привязано к определенному аппаратному обеспечению, при конфигурировании я использовал следующее оборудование:

Все шаги описанные ниже подразумевают

UNIX-совместимые команды
Исходные коды находятся в /usr/src
Тестирование проводилось под Rad Hat 6.1 и 6.2
Все шаги инсталляции выполнялись от пользователя root
Последняя версия ядра 2.2.14
Последняя версия Secure Linux Kernel Patches 2_2_14-ow2

Пакеты.

Домашняя страница ядер Linux: http://www.kernelnotes.org/
Вы должны скачать: linux-2_2_14_tar.gz
Домашняя страница Secure Linux Kernel Patches: http://www.openwall.com/linux/
Вы должны скачать: linux-2_2_14-ow2_tar.gz
FTP сервер, где лежит Secure Linux Kernel Patches: 195.42.162.180

Создание аварийной загрузочной дискеты.

Первый прединсталляционный шаг - создание "аварийной загрузочной дискеты" (если ее у вас еще нет). Самый простой путь - это воспользоваться командой mkbootdisk.

Первое, надо выяснить какое ядро вы сейчас используете. Для этого просмотрите файл "/etc/lilo.conf" и посмотрите какой образ загружается. У меня этот файл выглядит так:

[root@deep]# cat /etc/lilo.conf
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz-2.2.12-20
  label=linux
  root=/dev/sda6
  initrd=/boot/initrd-2.2.12-20.img
  read-only

Найдите в нем образ ядра, который вы используете. Обычно, он имеет метку linux. В нашем примере это "/boot/vmlinuz-2.2.12-20". Теперь просто вставьте дискетку 1,44'' и подключитесь к системе как пользователь root.

[root@deep]# mkbootdisk --device /dev/fd0 2.2.12-20
Insert a disk in /dev/fd0. Any information on the disk will be lost.
Press <Enter> to continue or ^C to abort:

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

Деинсталляция и оптимизация.

Шаг 1.

Скопируйте архив ядра в /usr/src и перейдите туда:

[root@deep]# cp linux-version_tar.gz /usr/src/
[root@deep]# cd /usr/src/
Если вы уже инсталлировали ядро из tar архива.

Эти шаги нужно выполнять, если у вас уже были установлены ранее исходные кодя ядра из tar.gz. Если это первое обновление ядра, то надо деинсталлировать два rpm пакета: kernel-headers-version.i386.rpm и kernel-version.i386.rpm.

Удаление символической ссылки.

[root@deep]# rm -rf linux

Удаление текущий каталог с заголовочными файлами ядра

[root@deep]# rm -rf linux-2.2.xx

Удаление каталога с модулями ядра:

[root@deep src]# rm -rf /lib/modules/2.2.xx

Замечание. Удаление старых модулей ядра необходимо, если вы до этого устанавливали модульное ядро. Если в "/lib" вы не находите каталога с модулями, значит ядро у вас было монолитных.

Если у вас были установлены стандартные RPM пакеты с ядром.

Если у вас были установлены стандартные RPM пакеты с ядром вместо .tar.gz архива, потому что вы только, что завершили установку нового сервера или использовали RPM пакеты для обновления вашей системы, тогда используйте следующие команды для деинсталляции ядра.

Для проверки, что они у вас установлены дайте команду.

[root@deep]# rpm -qa | grep kernel
kernel-headers-2.2.12-20.i386.rpm
kernel-2.2.12-20.i386.rpm

Для деинсталляции RPM пакетов:

[root@deep src]# rpm -e --nodeps kernel-headers kernel
cannot remove /usr/src/linux-2.2.xx - directory not empty
cannot remove /lib/modules/2.2.xx - directory not empty
[root@deep src]# rm -rf /usr/src/linux-2.2.xx/
[root@deep src]# rm -rf /lib/modules/2.2.xx/

Мы вручную удалили каталоги "/usr/src/linux-2.2.12" и "/lib/modules/2.2.12", которые останутся после деинсталляции rpm пакетов.

Шаг 2.
Разворачивание архива с ядром Linux

Сейчас мы будем разворачивать исходные коды нового ядра из tar.gz затем удалим Linux tar-архив.

[root@deep]# tar xzpf linux-version_tar.gz
[root@deep]# rm -f linux-version_tar.gz

Шаг 3.
Увеличение числа задач (оптимизация).

Для увеличения числа разрешенных задач (максимальное число процессов для пользователя) вам нужно редактировать файл "/usr/src/linux/include/linux/tasks.h" и изменить следующий параметр:

Редактируйте tasks.h file (vi +14 /usr/src/linux/include/linux/tasks.h) и измените:

NR_TASKS из 512 в 3072
MIN_TASKS_LEFT_FOR_ROOT из 4 в 24

Замечание. 1. Значение NR_TASKS определяет максимальное число идентификаторов задач (процессов), которое ядро будет назначать каждому пользователю. Увеличение этого числа приведет к увеличению количества соединений от клиента к серверу (например, веб-сервер сможет обслуживать большее количество запросов).
2. Linux защищен от того, чтобы распределить все свободные области памяти процессов обычным пользователям. С помощью опции MIN_TASKS_LEFT_FOR_ROOT резервируются подобные области для root. (24 хорошее значение).

Шаг 4.
Оптимизация ядра.

Для оптимизации ядра Linux под вашу конкретную архитектуру CPU и включения оптимизационных флагов вам надо редактировать файл "/usr/src/linux/Makefile" и изменить следующие параметры:

Редактируйте Makefile (vi +18 /usr/src/linux/Makefile) и измените следующую строку:

HOSTCC =gcc

Должна быть:

HOSTCC =egcs

Редактируйте Makefile (vi +25 /usr/src/linux/Makefile) и измените следующую строку:

CC =$(CROSS_COMPILE)gcc -D__KERNEL__ -I$(HPATH)

Должна быть:

CC =$(CROSS_COMPILE)egcs -D__KERNEL__ -I$(HPATH)

Редактируйте Makefile (vi +90 /usr/src/linux/Makefile) и измените следующую строку:

CFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer

Должна быть:

CFLAGS = -Wall -Wstrict-prototypes -O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions

Редактируйте файл Makefile (vi +19 /usr/src/linux/Makefile) и измените следующую строку:

HOSTCFLAGS =-Wall -Wstrict-prototypes -O2 -fomit-frame-pointer

Должна быть:

HOSTCFLAGS =-Wall -Wstrict-prototypes -O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions

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

Безопасность ядра.

Secure Linux kernel patches от Openwall Project прекрасный путь предупредить атаки Stack Buffer Overflows и подобные ей. Этот патч включает набор дополнительных возможностей связанных с обеспечением безопасности ядра Linux, которые настраиваются через новую конфигурационную секцию '"Security options".

Новые возможности патча linux-2_2_14-ow2_tar.gz:

Замечание. Когда вы наложите патч linux-2_2_14-ow2 в конце конфигурации ядра будет добавлена секция "Security options". Для получения большей информации о новых возможностях читайте в файле README, поставляемого вместе с исходными кодами патча.

Применение патча.

[root@deep]# cp linux-2_2_14-ow2_tar.gz /usr/src/
[root@deep]# cd /usr/src/
[root@deep]# tar xzpf linux.2_2_14-ow2_tar.gz
[root@deep]# cd linux-2.2.14-ow2/
[root@deep]# mv linux-2.2.14-ow2.diff /usr/src/
[root@deep]# cd ..
[root@deep]# patch -p0 < linux-2.2.14-ow2.diff
[root@deep]# rm -rf linux-2.2.14-ow2
[root@deep]# rm -f linux-2.2.14-ow2.diff
[root@deep]# rm -f linux-2_2_14-ow2_tar.gz

Первое, мы копируем программный архив в каталог /usr/src, затем мы перемещаемся в этот каталог и раскрываем там архив linux-2_2_14ow2_tar.gz, переходим в раскрытый патч и перемещаем оттуда файл linux-2.2.14-ow2.diff в /usr/src, возвращаемся в /usr/src и патчим ядро файлом linux-2.2.14-ow2.diff. После этого мы удаляем все файлы, связанные с этим патчем. Замечание. Все сообщения обеспечения безопасности связанные с патчем linux- 2.2.14-ow2 должны фиксироваться в файле /var/log/massage. Стадия наложения патча на ваше ядро завершена. Теперь пора вернуться к созданию ядра и перезагрузке.

ЗАМЕЧАНИЕ ОТ ПЕРЕВОДЧИКА. При определение опции "Destroy shared memory segments not in use" в секции "Security options" у меня начала "ругаться" программа, предназначенная для работы с UPS, apcupsd. Пришлось эту опцию отключить.

Компиляция.

Очень важно, чтобы ваши "/usr/include/asm", "/usr/include/linux" и "/usr/include/scsi" представляли из себя символические ссылки к исходным кодам ядра.

Шаг 1.

Каталоги "asm", "linux" и "scsi" являются символическими ссылками к реальным include директориям необходимым для конкретной архитектуры, например, "/usr/src/linux/include/asm-i386" для "asm".

[root@deep]# cd /usr/include/
[root@deep]# rm -rf asm linux scsi
[root@deep]# ln -s /usr/src/linux/include/asm-i386 asm
[root@deep]# ln -s /usr/src/linux/include/linux linux
[root@deep]# ln -s /usr/src/linux/include/scsi scsi

Это очень важная часть конфигурирования, мы удаляем каталоги "asm", "linux", и "scsi" под "/usr/include", затем создаем ссылки на каталоги с такими же именами в дереве исходных кодов нового ядра. Каталог "include" содержит важнейшие заголовочные файлы необходимые для вашего ядра и для программ, которые вы будете компилировать.

Шаг 2.

Сделайте так, чтобы у вас не было старых .o файлов и неправильных зависимостей:

[root@deep]# cd /usr/src/linux/
[root@deep]# make mrproper

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

Сейчас мы имеет корректно установленные исходные коды ядра. Существует три пути для конфигурирования ядра.

  1. Команда make config. Она предоставляет вам текстовый интерфейс для ответов на вопросы относительно всех параметров настройки ядра. Вы будете запрошены обо всех нужных вам опциях.
  2. Команда make menuconfig. Она предоставляет все опции настройки в легком в использовании меню.
  3. Команда make xconfig. Она предоставляет полный графический интерфейс ко всем опциям ядра.
Шаг 3.

В этой главе, для конфигурирования ядра мы используем команду make config, потому что у нас на сервере не установлен Xfree86.

[root@deep /]# cd /usr/src/linux/ (если вы еще не в этом каталоге).
[root@deep linux]# make config
rm -f include/asm
( cd include ; ln -sf asm-i386 asm)
/bin/sh scripts/Configure arch/i386/config.in
#
# Using defaults found in arch/i386/defconfig
#

Конфигурация ядра.

Code maturity level options
Prompt for development and/or incomplete code/drivers
(CONFIG_EXPERIMENTAL) [N/y/?]
Processor type and features
Processor family (386, 486/Cx486, 586/K5/5x86/6x86, Pentium/K6/TSC,
PPro/6x86MX) [PPro/6x86MX]
Maximum Physical Memory (1GB, 2GB) [1GB]
Math emulation (CONFIG_MATH_EMULATION) [N/y/?]
MTRR (Memory Type Range Register) support (CONFIG_MTRR) [N/y/?]
Symmetric multi-processing support (CONFIG_SMP) [Y/n/?] N
Loadable module support
Enable loadable module support (CONFIG_MODULES) [Y/n/?] N
General setup
Networking support (CONFIG_NET) [Y/n/?]
PCI support (CONFIG_PCI) [Y/n/?]
PCI access mode (BIOS, Direct, Any) [Any]
PCI quirks (CONFIG_PCI_QUIRKS) [Y/n/?] N
Backward-compatible /proc/pci (CONFIG_PCI_OLD_PROC) [Y/n/?] N
MCA support (CONFIG_MCA) [N/y/?]
SGI Visual Workstation support (CONFIG_VISWS) [N/y/?]
System V IPC (CONFIG_SYSVIPC) [Y/n/?]
BSD Process Accounting (CONFIG_BSD_PROCESS_ACCT) [N/y/?]
Sysctl support (CONFIG_SYSCTL) [Y/n/?]
Kernel support for a.out binaries (CONFIG_BINFMT_AOUT) [Y/n/?]
Kernel support for ELF binaries (CONFIG_BINFMT_ELF) [Y/n/?]
Kernel support for MISC binaries (CONFIG_BINFMT_MISC) [Y/n/?]
Parallel port support (CONFIG_PARPORT) [N/y/?]
Advanced Power Management BIOS support (CONFIG_APM) [N/y/?]
Plug and Play support
Plug and Play support (CONFIG_PNP) [N/y/?]
Block devices
Normal PC floppy disk support (CONFIG_BLK_DEV_FD) [Y/n/?]
Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
(CONFIG_BLK_DEV_IDE) [Y/n/?]
Use old disk-only driver on primary interface (CONFIG_BLK_DEV_HD_IDE)
[N/y/?]
Include IDE/ATA-2 DISK support (CONFIG_BLK_DEV_IDEDISK) [Y/n/?]
Include IDE/ATAPI CDROM support (CONFIG_BLK_DEV_IDECD) [Y/n/?]
Include IDE/ATAPI TAPE support (CONFIG_BLK_DEV_IDETAPE) [N/y/?]
Include IDE/ATAPI FLOPPY support (CONFIG_BLK_DEV_IDEFLOPPY) [N/y/?]
SCSI emulation support (CONFIG_BLK_DEV_IDESCSI) [N/y/?]
CMD640 chipset bugfix/support (CONFIG_BLK_DEV_CMD640) [Y/n/?] N
RZ1000 chipset bugfix/support (CONFIG_BLK_DEV_RZ1000) [Y/n/?] N
Generic PCI IDE chipset support (CONFIG_BLK_DEV_IDEPCI) [Y/n/?]
Generic PCI bus-master DMA support (CONFIG_BLK_DEV_IDEDMA) [Y/n/?]
Boot off-board chipsets first support (CONFIG_BLK_DEV_OFFBOARD) [N/y/?]
Use DMA by default when available (CONFIG_IDEDMA_AUTO) [Y/n/?]
Other IDE chipset support (CONFIG_IDE_CHIPSETS) [N/y/?]
Loopback device support (CONFIG_BLK_DEV_LOOP) [N/y/?]
Network block device support (CONFIG_BLK_DEV_NBD) [N/y/?]
Multiple devices driver support (CONFIG_BLK_DEV_MD) [N/y/?]
RAM disk support (CONFIG_BLK_DEV_RAM) [N/y/?]
XT hard disk support (CONFIG_BLK_DEV_XD) [N/y/?]
Mylex DAC960/DAC1100 PCI RAID Controller support
(CONFIG_BLK_DEV_DAC960) [N/y/?] (NEW)
Parallel port IDE device support (CONFIG_PARIDE) [N/y/?]
Compaq SMART2 support (CONFIG_BLK_CPQ_DA) [N/y/?] (NEW)
Networking options
Packet socket (CONFIG_PACKET) [Y/n/?]
Kernel/User netlink socket (CONFIG_NETLINK) [N/y/?]
Network firewalls (CONFIG_FIREWALL) [N/y/?] Y
Socket Filtering (CONFIG_FILTER) [N/y/?]
Unix domain sockets (CONFIG_UNIX) [Y/n/?]
TCP/IP networking (CONFIG_INET) [Y/n/?]
IP: multicasting (CONFIG_IP_MULTICAST) [N/y/?]
IP: advanced router (CONFIG_IP_ADVANCED_ROUTER) [N/y/?]
IP: kernel level autoconfiguration (CONFIG_IP_PNP) [N/y/?]
IP: firewalling (CONFIG_IP_FIREWALL) [N/y/?] (NEW) Y
IP: transparent proxy support (CONFIG_IP_TRANSPARENT_PROXY) [N/y/?]
(NEW)
IP: masquerading (CONFIG_IP_MASQUERADE) [N/y/?] (NEW)
IP: optimize as router not host (CONFIG_IP_ROUTER) [N/y/?]
IP: tunneling (CONFIG_NET_IPIP) [N/y/?]
IP: GRE tunnels over IP (CONFIG_NET_IPGRE) [N/y/?]
IP: aliasing support (CONFIG_IP_ALIAS) [N/y/?]
IP: TCP syncookie support (not enabled per default) (CONFIG_SYN_COOKIES)
[N/y/?] Y
IP: Reverse ARP (CONFIG_INET_RARP) [N/y/?]
IP: Allow large windows (not recommended if <16Mb of memory)
(CONFIG_SKB_LARGE) [Y/n/?]
The IPX protocol (CONFIG_IPX) [N/y/?]
Appletalk DDP (CONFIG_ATALK) [N/y/?]
Telephony support
Linux telephony support (CONFIG_PHONE) [N/y/?] (NEW)
SCSI support
SCSI support (CONFIG_SCSI) [Y/n/?]
SCSI disk support (CONFIG_BLK_DEV_SD) [Y/n/?]
SCSI tape support (CONFIG_CHR_DEV_ST) [N/y/?]
SCSI CD-ROM support (CONFIG_BLK_DEV_SR) [N/y/?]
SCSI generic support (CONFIG_CHR_DEV_SG) [N/y/?]
Probe all LUNs on each SCSI device (CONFIG_SCSI_MULTI_LUN) [Y/n/?] N
Verbose SCSI error reporting (kernel size +=12K) (CONFIG_SCSI_CONSTANTS)
[Y/n/?] N
SCSI logging facility (CONFIG_SCSI_LOGGING) [N/y/?]
SCSI low-level drivers
7000FASST SCSI support (CONFIG_SCSI_7000FASST) [N/y/?]
ACARD SCSI support (CONFIG_SCSI_ACARD) [N/y/?]
Adaptec AHA152X/2825 support (CONFIG_SCSI_AHA152X) [N/y/?]
Adaptec AHA1542 support (CONFIG_SCSI_AHA1542) [N/y/?]
Adaptec AHA1740 support (CONFIG_SCSI_AHA1740) [N/y/?]
Adaptec AIC7xxx support (CONFIG_SCSI_AIC7XXX) [N/y/?] Y
Enable Tagged Command Queueing (TCQ) by default [N/y/?] (NEW) Y
Maximum number of TCQ commands per device
(CONFIG_AIC7XXX_CMDS_PER_DEVICE) [8] (NEW)
Collect statistics to report in /proc (CONFIG_AIC7XXX_PROC_STATS) [N/y/?]
(NEW)
Delay in seconds after SCSI bus reset (CONFIG_AIC7XXX_RESET_DELAY) [5]
(NEW)
IBM ServeRAID support (CONFIG_SCSI_IPS) [N/y/?] (NEW)
AdvanSys SCSI support (CONFIG_SCSI_ADVANSYS) [N/y/?]
Always IN2000 SCSI support (CONFIG_SCSI_IN2000) [N/y/?]
AM53/79C974 PCI SCSI support (CONFIG_SCSI_AM53C974) [N/y/?]
AMI MegaRAID support (CONFIG_SCSI_MEGARAID) [N/y/?]
BusLogic SCSI support (CONFIG_SCSI_BUSLOGIC) [N/y/?]
DTC3180/3280 SCSI support (CONFIG_SCSI_DTC3280) [N/y/?]
EATA ISA/EISA/PCI (DPT and generic EATA/DMA) support
(CONFIG_SCSI_EATA) [N/y/?]
EATA-DMA [Obsolete] (DPT, NEC, AT&T, SNI, AST, Olivetti, Alphatronix)
support
(CONFIG_SCSI_EATA_DMA) [N/y/?]
EATA-PIO (old DPT PM2001, PM2012A) support (CONFIG_SCSI_EATA_PIO)
[N/y/?]
Future Domain 16xx SCSI/AHA-2920A support
(CONFIG_SCSI_FUTURE_DOMAIN) [N/y/?]
GDT SCSI Disk Array Controller support (CONFIG_SCSI_GDTH) [N/y/?]
Generic NCR5380/53c400 SCSI support (CONFIG_SCSI_GENERIC_NCR5380)
[N/y/?]
Initio 9100U(W) support (CONFIG_SCSI_INITIO) [N/y/?]
Initio INI-A100U2W support (CONFIG_SCSI_INIA100) [N/y/?]
NCR53c406a SCSI support (CONFIG_SCSI_NCR53C406A) [N/y/?]
symbios 53c416 SCSI support (CONFIG_SCSI_SYM53C416) [N/y/?]
Simple 53c710 SCSI support (Compaq, NCR machines) (CONFIG_SCSI_SIM710)
[N/y/?] (NEW)
NCR53c7,8xx SCSI support (CONFIG_SCSI_NCR53C7xx) [N/y/?]
NCR53C8XX SCSI support (CONFIG_SCSI_NCR53C8XX) [N/y/?]
SYM53C8XX SCSI support (CONFIG_SCSI_SYM53C8XX) [Y/n/?] N
PAS16 SCSI support (CONFIG_SCSI_PAS16) [N/y/?]
PCI2000 support (CONFIG_SCSI_PCI2000) [N/y/?]
PCI2220i support (CONFIG_SCSI_PCI2220I) [N/y/?]
PSI240i support (CONFIG_SCSI_PSI240I) [N/y/?]
Qlogic FAS SCSI support (CONFIG_SCSI_QLOGIC_FAS) [N/y/?]
Qlogic ISP SCSI support (CONFIG_SCSI_QLOGIC_ISP) [N/y/?]
Qlogic ISP FC SCSI support (CONFIG_SCSI_QLOGIC_FC) [N/y/?]
Seagate ST-02 and Future Domain TMC-8xx SCSI support
(CONFIG_SCSI_SEAGATE) [N/y/?]
Tekram DC390(T) and Am53/79C974 SCSI support (CONFIG_SCSI_DC390T)
[N/y/?]
Trantor T128/T128F/T228 SCSI support (CONFIG_SCSI_T128) [N/y/?]
UltraStor 14F/34F support (CONFIG_SCSI_U14_34F) [N/y/?]
UltraStor SCSI support (CONFIG_SCSI_ULTRASTOR) [N/y/?]
Network device support
Network device support (CONFIG_NETDEVICES) [Y/n/?]
ARCnet devices
ARCnet support (CONFIG_ARCNET) [N/y/?]
Dummy net driver support (CONFIG_DUMMY) [Y/n/?]
EQL (serial line load balancing) support (CONFIG_EQUALIZER) [N/y/?]
General Instruments Surfboard 1000 (CONFIG_NET_SB1000) [N/y/?] (NEW)
Ethernet (10 or 100Mbit)
Ethernet (10 or 100Mbit) (CONFIG_NET_ETHERNET) [Y/n/?]
3COM cards (CONFIG_NET_VENDOR_3COM) [N/y/?]
AMD LANCE and PCnet (AT1500 and NE2100) support (CONFIG_LANCE)
[N/y/?]
Western Digital/SMC cards (CONFIG_NET_VENDOR_SMC) [N/y/?]
Racal-Interlan (Micom) NI cards (CONFIG_NET_VENDOR_RACAL) [N/y/?]
Other ISA cards (CONFIG_NET_ISA) [N/y/?]
EISA, VLB, PCI and on board controllers (CONFIG_NET_EISA) [Y/n/?]
AMD PCnet32 (VLB and PCI) support (CONFIG_PCNET32) [N/y/?]
Apricot Xen-II on board Ethernet (CONFIG_APRICOT) [N/y/?]
CS89x0 support (CONFIG_CS89x0) [N/y/?]
DM9102 PCI Fast Ethernet Adapter support (EXPERIMENTAL)
(CONFIG_DM9102) [N/y/?] (NEW)
Generic DECchip & DIGITAL EtherWORKS PCI/EISA (CONFIG_DE4X5) [N/y/?]
DECchip Tulip (dc21x4x) PCI support (CONFIG_DEC_ELCP) [N/y/?]
Old DECchip Tulip (dc21x4x) PCI support (CONFIG_DEC_ELCP_OLD) [N/y/?]
(NEW)
Digi Intl. RightSwitch SE-X support (CONFIG_DGRS) [N/y/?]
EtherExpressPro/100 support (CONFIG_EEXPRESS_PRO100) [Y/n/?]
PCI NE2000 support (CONFIG_NE2K_PCI) [N/y/?]
TI ThunderLAN support (CONFIG_TLAN) [N/y/?]
VIA Rhine support (CONFIG_VIA_RHINE) [N/y/?]
SiS 900/7016 PCI Fast Ethernet Adapter support (CONFIG_SIS900) [N/y/?] (NEW)
Pocket and portable adaptors (CONFIG_NET_POCKET) [N/y/?]
Ethernet (1000 Mbit)
SysKonnect SK-98xx support (CONFIG_SK98LIN) [N/y/?] (NEW)
FDDI driver support (CONFIG_FDDI) [N/y/?]
PPP (point-to-point) support (CONFIG_PPP) [N/y/?]
SLIP (serial line) support (CONFIG_SLIP) [N/y/?]
Wireless LAN (non-hamradio) (CONFIG_NET_RADIO) [N/y/?]
Token ring devices
Token Ring driver support (CONFIG_TR) [N/y/?]
Fibre Channel driver support (CONFIG_NET_FC) [N/y/?] (NEW)
Wan interfaces
MultiGate (COMX) synchronous serial boards support (CONFIG_COMX) [N/y/?]
(NEW)
Frame relay DLCI support (CONFIG_DLCI) [N/y/?]
WAN drivers (CONFIG_WAN_DRIVERS) [N/y/?]
SBNI12-xx support (CONFIG_SBNI) [N/y/?] (NEW)
Amateur Radio support
Amateur Radio support (CONFIG_HAMRADIO) [N/y/?]
IrDA subsystem support
IrDA subsystem support (CONFIG_IRDA) [N/y/?]
ISDN subsystem
ISDN support (CONFIG_ISDN) [N/y/?]
Old CD-ROM drivers (not SCSI, not IDE)
Support non-SCSI/IDE/ATAPI CDROM drives (CONFIG_CD_NO_IDESCSI)
[N/y/?]
Character devices
Virtual terminal (CONFIG_VT) [Y/n/?]
Support for console on virtual terminal (CONFIG_VT_CONSOLE) [Y/n/?]
Standard/generic (dumb) serial support (CONFIG_SERIAL) [Y/n/?]
Support for console on serial port (CONFIG_SERIAL_CONSOLE) [N/y/?]
Extended dumb serial driver options (CONFIG_SERIAL_EXTENDED) [N/y/?]
Non-standard serial port support (CONFIG_SERIAL_NONSTANDARD) [N/y/?]
Unix98 PTY support (CONFIG_UNIX98_PTYS) [Y/n/?]
Maximum number of Unix98 PTYs in use (0-2048)
(CONFIG_UNIX98_PTY_COUNT) [256] 128
Mouse Support (not serial mice) (CONFIG_MOUSE) [Y/n/?]
Mice
ATIXL busmouse support (CONFIG_ATIXL_BUSMOUSE) [N/y/?]
Logitech busmouse support (CONFIG_BUSMOUSE) [N/y/?]
Microsoft busmouse support (CONFIG_MS_BUSMOUSE) [N/y/?]
PS/2 mouse (aka "auxiliary device") support (CONFIG_PSMOUSE) [Y/n/?]
C&T 82C710 mouse port support (as on TI Travelmate)
(CONFIG_82C710_MOUSE) [Y/n/?] N
PC110 digitizer pad support (CONFIG_PC110_PAD) [N/y/?]
Joystick support
Joystick support (CONFIG_JOYSTICK) [N/y/?]
QIC-02 tape support (CONFIG_QIC02_TAPE) [N/y/?]
Watchdog Timer Support (CONFIG_WATCHDOG) [N/y/?]
/dev/nvram support (CONFIG_NVRAM) [N/y/?]
Enhanced Real Time Clock Support (CONFIG_RTC) [N/y/?]
Video for Linux
Video For Linux (CONFIG_VIDEO_DEV) [N/y/?]
Double Talk PC internal speech card support (CONFIG_DTLK) [N/y/?]
Ftape, the floppy tape device driver
Ftape (QIC-80/Travan) support (CONFIG_FTAPE) [N/y/?]
Filesystems
Quota support (CONFIG_QUOTA) [N/y/?] Y
Kernel automounter support (CONFIG_AUTOFS_FS) [Y/n/?] N
Amiga FFS filesystem support (CONFIG_AFFS_FS) [N/y/?]
Apple Macintosh filesystem support (experimental) (CONFIG_HFS_FS) [N/y/?]
DOS FAT fs support (CONFIG_FAT_FS) [N/y/?]
ISO 9660 CDROM filesystem support (CONFIG_ISO9660_FS) [Y/n/?]
Microsoft Joliet CDROM extensions (CONFIG_JOLIET) [N/y/?]
Minix fs support (CONFIG_MINIX_FS) [N/y/?]
NTFS filesystem support (read only) (CONFIG_NTFS_FS) [N/y/?]
OS/2 HPFS filesystem support (read only) (CONFIG_HPFS_FS) [N/y/?]
/proc filesystem support (CONFIG_PROC_FS) [Y/n/?]
/dev/pts filesystem for Unix98 PTYs (CONFIG_DEVPTS_FS) [Y/n/?]
ROM filesystem support (CONFIG_ROMFS_FS) [N/y/?]
Second extended fs support (CONFIG_EXT2_FS) [Y/n/?]
System V and Coherent filesystem support (CONFIG_SYSV_FS) [N/y/?]
UFS filesystem support (CONFIG_UFS_FS) [N/y/?]
Network File Systems
Coda filesystem support (advanced network fs) (CONFIG_CODA_FS) [N/y/?]
NFS filesystem support (CONFIG_NFS_FS) [Y/n/?] N
SMB filesystem support (to mount WfW shares etc.) (CONFIG_SMB_FS) [N/y/?]
NCP filesystem support (to mount NetWare volumes) (CONFIG_NCP_FS) [N/y/?]
Partition Types
BSD disklabel (BSD partition tables) support (CONFIG_BSD_DISKLABEL) [N/y/?]
Macintosh partition map support (CONFIG_MAC_PARTITION) [N/y/?]
SMD disklabel (Sun partition tables) support (CONFIG_SMD_DISKLABEL) [N/y/?]
Solaris (x86) partition table support (CONFIG_SOLARIS_X86_PARTITION)
[N/y/?]
Console drivers
VGA text console (CONFIG_VGA_CONSOLE) [Y/n/?]
Video mode selection support (CONFIG_VIDEO_SELECT) [N/y/?]
Sound
Sound card support (CONFIG_SOUND) [N/y/?]
(Security options will appear only if you are patched your kernel with the Openwall
Project patch).
Security options
Non-executable user stack area (CONFIG_SECURE_STACK) [Y]
Autodetect and emulate GCC trampolines (CONFIG_SECURE_STACK_SMART)
[Y]
Restricted links in /tmp (CONFIG_SECURE_LINK) [Y]
Restricted FIFOs in /tmp (CONFIG_SECURE_FIFO) [Y]
Restricted /proc (CONFIG_SECURE_PROC) [N] Y
Special handling of fd 0, 1, and 2 (CONFIG_SECURE_FD_0_1_2) [Y]
Enforce RLIMIT_NPROC on execve(2) (CONFIG_SECURE_RLIMIT_NPROC) [Y]
Destroy shared memory segments not in use (CONFIG_SECURE_SHM) [N] Y
Kernel hacking
Magic SysRq key (CONFIG_MAGIC_SYSRQ) [N/y/?]

Сейчас вернитесь в каталог "/usr/src/linux" (если вы там не находитесь). Вам нужно компилировать новое ядро. Для этого используйте следующие команды:

[root@deep]# make dep; make clean; make bzImage

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

make clean - стирает все следы предыдущих компиляций, чтобы ошибки предыдущей версии не попали в новое ядро.

make bzImage - осуществляет полную компиляцию ядра.

После того как процесс компиляции завершается, ядро сжимается и готово к инсталляции. Перед тем как инсталлировать ядро вы должны скомпилировать необходимые модули. Это необходимо, если вы ответите Yes на вопрос "Enable loadable module support (CONFIG_MODULES)" и отметили некоторые опции в ядре как модули. В этом случае введите следующие команды:

[root@deep linux]# make modules
[root@deep linux]# make modules_install

Замечание. Команды make modules и make modules_install нужны, если вы ответили Yes на вопрос "Enable loadable module support (CONFIG_MODULES)".


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

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

Глава 5 Конфигурирование и создание оптимизированных, безопасных ядер (Часть 2)

В это главе
Ядро Linux
Создание аварийных загрузочных дискет
Безопасность ядра
Компиляция ядра
Инсталляция нового ядра
Удаление программ, файлов и строк связанных с модулями
Создание новой аварийной дискеты
Создание аварийного загрузочного флоппи-диска
Обновление "/dev" входов

Инсталляция нового ядра.

1. Копируйте "/usr/src/linux/arch/i386/boot/bzImage" из дерева исходных кодов ядра в каталог "/boot" и дайте ему новое имя.

[root@deep linux]# cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-kernel.version.number

Замечание. Я рекомендую название подобное vmlinuz-2.2.14, потому что если вы хотите создать новый спасательный или загрузочные диски при помощи mkbootdisk, то она требует некоторой точности, например vmlinuz-2.2.14 вместо vmlinuz-2.2.14.a

2. Копируйте "/usr/src/linux/System.map" из дерева исходных кодов ядра в каталог "/boot" и дайте ему новое имя.

[root@deep linux]# cp /usr/src/linux/System.map /boot/System.map-kernel.version.number

3. Переместитесь в каталог /boot и создайте символические ссылки vmlinuz и System.map.

[root@deep linux]# cd /boot
[root@deep /boot]# ln -fs vmlinuz-kernel.version.number vmlinuz
[root@deep /boot]# ln -fs System.map-kernel.version.number System.map

Мы должны пересоздать ссылки "vmlinuz" и "System.map" на новую версию ядра. Иначе lilo будет использовать старое ядро.

4. Удалите устаревшие и ненужные файлы из каталога "/boot", чтобы освободить место на диске:

[root@deep /boot]# rm -f module-info
[root@deep /boot]# rm -f initrd-2.2.xx.img

"module-info" это ссылка на каталог с модулями к старому ядру. Так как мы инсталлируем новое ядро, мы не нуждаемся в потерянных ссылках. Файл "initrd-2.2.xx" содержит инициализационный образ RAM диска, который выступает как система пока не будут доступны диски. Этот файл будет существовать и будет инсталлирован в ходе установки сервера, если вы имеете SCSI диск. Все необходимые драйвера сейчас встроены в ваше монолитное ядро, поэтому спокойно удаляйте этот файл.

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

Помните, что мы должны создать три символические ссылки в "/usr/include", которые являются точками входа в заголовочные файлы ядра Linux. Каталог "/usr/include" содержит все заголовочные файлы вашей системы, которые нужны для компиляции новых программ. Ссылки asm, linux и scsi используются когда программам нужно знать некоторые функции времени компиляции ядра инсталлированного на вашей системе. Программы вызывают другие заголовочные файлы из каталога "include" когда им нужна специальная информация, зависимости и т.д.

[root@deep /]# mkdir -p /usr/src/linux-2.2.14/include
[root@deep /]# cp -r /usr/src/linux/include/asm-generic /usr/src/linux-2.2.14/include
[root@deep /]# cp -r /usr/src/linux/include/asm-i386 /usr/src/linux-2.2.14/include
[root@deep /]# cp -r /usr/src/linux/include/linux /usr/src/linux-2.2.14/include
[root@deep /]# cp -r /usr/src/linux/include/net /usr/src/linux-2.2.14/include
[root@deep /]# cp -r /usr/src/linux/include/video /usr/src/linux-2.2.14/include
[root@deep /]# cp -r /usr/src/linux/include/scsi /usr/src/linux-2.2.14/include
[root@deep /]# rm -rf /usr/src/linux
[root@deep /]# cd /usr/src
[root@deep src]# ln -s /usr/src/linux-2.2.14 linux

Первое, мы создаем новый каталог "linux-2.2.14", базирующийся на версии ядра, которое мы инсталлируем для более легкой интерпретации, затем мы копируем туда каталоги asm-generic, asm-i386, linux, net, video, и scsi из "/usr/linux/include". После этого мы удаляем каталог в котором компилировали новое ядро и создаем в "/usr/src" ссылку "linux", указывающую на "linux-2.2.14". Последний шаг позволяет сэкономить место на диске. Ядро в разархивированном виде занимает около 75M, а каталоги "include" - 3M.

6. В заключении нам необходимо редактировать файл "/etc/lilo.conf", чтобы сделать новое ядро, загружаемым по уолчанию.

Шаг 1.

Редактируем файл lilo.conf (vi /etc/lilo.conf) и делаем соответствующие изменения в линии "image=/boot/":

[root@deep /]# vi /etc/lilo.conf
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=00
restricted
password=somepasswd
image=/boot/vmlinuz-kernel.version.number #(добавьте здесь имя вашего нового ядра).
label=linux
root=/dev/sda6
read-only

Замечание. Не забудьте удалить строку "initrd=/boot/initrd-2.2.12-20.img", так как она нам больше ну нужна.

Шаг 2.

Когда имя нового ядра было внесено в файл "/etc/lilo.conf", как это было описано выше, мы должны дать следующие команды, чтобы изменения вступили в силу:

[root@deep /]# /sbin/lilo -v
LILO version 21, [Copyright 1992-1998 Werner Almesberger
Reading boot sector from /dev/sda
Merging with /boot/boot.b
Boot image: /boot/vmlinuz-2.2.14
Added linux *
/boot/boot.0800 exits - no backup copy made.
Writing boot sector.

ВАЖНОЕ ЗАМЕЧАНИЕ: Если вы сказали No на вопрос "Unix98 PTY support (CONFIG_UNIX98_PTYS)" во время конфигурирования ядра, то отредактируйте файл "/etc/fstab" и удалите следующую строку:

none 	/dev/pts 	devpts 	gid=5,mode=620	 0 0

Удаление программ, файлов и строк связанных с модулями.

Когда вы инсталлируете Linux в первый раз (как это делали мы) у вас устанавливается модульное ядро. Это означает, что каждый элемент или функция, которые нам нужны, существует в виде модуля и контролируется демоном ядра, который называется kmod. Он автоматически загружает модули и функции в память, когда это нужно, и выгружает их, когда необходимости в них отпадает.

Шаг 1.

kmod и другие программы, управляющие модулями, включенные в RPM пакет "modutils" используют файл "conf.modules", который находится в каталоге "/etc". В этом файле определяется, например, какие Ethernet карты вы имеете и какие параметры настройки она использует. Так как мы не используем модулей в нашем новом ядре, мы удаляем файл "conf.modules" и полностью деинсталлируем пакет "modutils".

[root@deep /]# rm -f /etc/conf.modules
[root@deep /]# rpm -e --nodeps modutils

Шаг 2.

Теперь необходимо редактировать файл "rc.sysinit" и закомментировать все строки, в которых упоминается "depmod -a", вставив в их начало символ "#". Это нужно потому, что при загрузке система читает скрипт "rc.sysinit" для поиска модульных зависимостей.

Под Red Hat Linux 6.1

Комментируем строку 260 в rc.sysinit file (vi +260 /etc/rc.d/rc.sysinit):

if [ -x /sbin/depmod -a -n "$USEMODULES" ]; then

должна читаться:

#if [ -x /sbin/depmod -a -n "$USEMODULES" ]; then

Комментируем строки с 272 по 277 в rc.sysinit file (vi +272 /etc/rc.d/rc.sysinit):

if [ -L /lib/modules/default ]; then
INITLOG_ARGS= action "Finding module dependencies" depmod -a default
else
INITLOG_ARGS= action "Finding module dependencies" depmod -a
fi
fi

должны читаться:

# if [ -L /lib/modules/default ]; then
# INITLOG_ARGS= action "Finding module dependencies" depmod -a default
# else
# INITLOG_ARGS= action "Finding module dependencies" depmod -a
# fi
#fi

ЗАМЕЧАНИЕ: Процедура описанная выше связана с пакетом initscripts-4_70-1 package дистрибутива Red Hat Linux 6.1.

Под Red Hat Linux 6.2

Комментируем строку 243 в rc.sysinit file (vi +243 /etc/rc.d/rc.sysinit):

if [ -x /sbin/depmod -a -n "$USEMODULES" ]; then

должна читаться:

#if [ -x /sbin/depmod -a -n "$USEMODULES" ]; then

Комментируем строки с 255 по 260 в rc.sysinit file (vi +255 /etc/rc.d/rc.sysinit):

if [ -L /lib/modules/default ]; then
INITLOG_ARGS= action "Finding module dependencies" depmod -a default
else
INITLOG_ARGS= action "Finding module dependencies" depmod -a
fi
fi

должны читаться:

# if [ -L /lib/modules/default ]; then
# INITLOG_ARGS= action "Finding module dependencies" depmod -a default
# else
# INITLOG_ARGS= action "Finding module dependencies" depmod -a
# fi
#fi

Замечание. Еще раз повторим, вся эта часть ("Удаление программ, файлов и строк связанных с модулями.") требуется только если вы ответили No на вопрос "Enable loadable module support (CONFIG_MODULES)" при конфигурировании ядра.

Шаг 3.

Когда система перезагрузится и вы подключитесь к серверу, проверьте версию используемого ядра:

[root@deep /]# uname -a
Linux deep.openna.com 2.2.14 #1 Mon Jan 10 10:40:35 EDT 2000 i686 unknown
[root@deep]#

Поздравляем.

Создание новой аварийной дискеты

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

Подключитесь к системе, вставьте новую дискету и выполните следующую команду:

[root@deep /]# mkbootdisk --device /dev/fd0 2.2.14
Insert a disk in /dev/fd0. Any information on the disk will be lost.
Press <Enter> to continue or ^C to abort:

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

Создание аварийного загрузочного флоппи-диска.

Так как создать спасательную дискету можно только с модульными ядрами, мы должны найти другой путь загрузки системы с дискеты если ядро на жестком диске испорчено. Это возможно с помощью аварийной загрузочной дискеты. Вы должны создать ее немедленно после первой удачной загрузки системы и подключения к ней как root.

Для создания аварийной загрузочной дискеты сделайте следующее:

Шаг 1.

Вставьте дискету и форматируйте ее, используя команду:

[root@deep /]# fdformat /dev/fd0H1440
Double-sided, 80 tracks, 18 sec/track. Total capacity 1440 kB.
Formatting ... done
Verifying ... done

Шаг 2.

Копируйте файл vmlinuz из каталога "/boot" на дискету:

[root@deep /]# cp /boot/vmlinuz /dev/fd0
cp: overwrite `/dev/fd0'? y

vmlinuz - это символическая ссылка на реальной ядро.

Шаг 3.

Определяем корневой раздел ядра:

[root@deep /]# rdev
/dev/sda12 /

Корневой раздел ядра - это раздел, где находится корневая файловая система. В этом примере, корневой раздел - "dev/sda12"; на вашей системе это имя может быть другим.

Шаг 4.

Устанавливаем корневой раздел ядра:

[root@deep /]# rdev /dev/fd0 /dev/sda12

В качестве корневого раздела ядра используется значение полученной на предыдущем шаге.

Шаг 5.

Маркируем корневой раздел как только для чтения:

[root@deep /]# rdev -R /dev/fd0 1

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

Шаг 6.

Вставьте загрузочную дискету в дисковод A: и перезагрузите систему:

[root@deep /]# reboot

Обновление "/dev" входов

Если вы добавили новое устройство в вашу систему или провели крупное обновление ядра (например, из версии 2.2.9 к 2.2.15), то необходимо обновить ваши входы в "/proc" для предотвращения проблем с потерянными устройствами. Мы можем решить эту задачу при помощи скрипта MAKEDEV. Он сканирует каталог "/proc", где все устройства связываются с драйверами ядра. Специальная опция "update" позволяет утилите MAKEDEV создать новые

устройства, которые вы сконфигурировали в вашем ядре и удалить ненужные.

Для обновления входов в "/proc" выполните следующие команды:

[root@deep /]# cd /dev [root@deep /dev]# ./MAKEDEV update


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

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

Часть III Рекомендации связанные с сетью

Управление TCP/IP сетями
Сетевой брандмауэр
Сетевой брандмауэр с поддержкой маскарадинга и маршрутизации

Глава 6 Управление TCP/IP сетями

В этой главе
Инсталляция более одной Ethernet карты на одной машине
Файлы связанные с функционированием сети
Настройка TCP/IP сети вручную из командной строки

Краткий обзор

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

Инсталляция более одной Ethernet карты на одной машине

Вы можете использовать Linux как шлюз между двумя сетями. Для этого вы должны иметь на сервере две сетевые карты. Ядро Linux не определяет несколько сетевых карт автоматически при загрузке. Если вы хотите иметь больше одной сетевой карты, то надо определить параметры карт в "lilo.conf" для монолитного ядра и в "conf.modules" для модульного ядра. При работе с вашими сетевыми картами вы можете столкнуться со следующими проблемами.

Проблема 1.

Если драйвер(а) карты были созданы как загружаемые модули (модульное ядро), в случае PCI карт, модули определяют карты автоматически. Для ISA карт вам надо определить I/O адрес карты, чтобы модуль знал где ее смотреть. Эта информация хранится в "/etc/conf.modules".

Например, мы рассмотрим две ISA карты 3c509, у первой I/O=0x300, а у второй I/O=320. Для ISA карт редактируем файл conf.modules (vi /etc/conf.modules) и добавляем в него:

alias eth0 3c509
alias eth1 3c509
options 3c509 io=0x300,0x320

Это говорит, что драйвер 3c509 должен быть загружен для eth0 и eth1 и что при этом I/O=0x300 и 0x320 соответственно. Обратите внимание на запись. Прерывания записываются как 0x, а не как в DOS 300h.

Для PCI карт обычно достаточно alias строк, определяющих связь между устройством (ethN) и драйвером (3c509), потому что, обычно, I/O спокойно определяется автоматически.

Для PCI карт, редактируйте файл conf.modules (vi /etc/conf.modules) и добавьте в него:

alias eth0 3c509
alias eth1 3c509

Проблема 2.

Если драйвера вкомпилированы в ядро (монолитное ядро), проверка PCI будет находить все карты автоматически. ISA карты также будут определяться автоматически, но в некоторых случаях нужно сделать следующее. Эта информация сохраняется в файле "/etc/lilo.conf". Метод заключается в передачи аргументов времени загрузки ядру, которое обычно делает LILO.

Для ISA карт, редактируйте файл lilo.conf (vi /etc/lilo.conf) и добавьте в него:

append="ether=0,0,eth1"

Замечание. В первый раз попробуйте загрузиться без аргументов времени загрузки, и только если ничего не получится воспользуйтесь вышеприведенной строкой. В этом случае eth0 и eth1 будут назначаться в порядке котором карты будут определены. Так как мы перекомпилировали ядро, мы должны использовать второй метод (если драйвера встроены в ядро) для инсталляции второй Ethernet карты в нашей системе. Помните, что он нужен только в ряде случаев для ISA карт, PCI карты будут определяться автоматически.

Файлы связанные с функционированием сети.

В Linux, TCP/IP сеть настраивается через несколько текстовых файлов, которые вы можете редактировать, чтобы заставить вашу сеть работать. Очень важно знать все конфигурационные файлы, связанные с TCP/IP, так чтобы вы могли редактировать их в случае необходимости. Помните, что ваш сервер не имеет Xwindow интерфейса для настройки этих файлов. Даже если вы используете графический пользовательский интерфейс в своей повседневной работе, важно знать как конфигурировать сеть в текстовом режиме. Следующие секции описывают базовые конфигурационные файлы TCP/IP.

Файл "/etc/HOSTNAME".

В этом файле хранится полное доменное имя вашего компьютера, например, deep.openna.com. Ниже приведен пример содержимого этого файла:

deep.openna.com

Файл "/etc/sysconfig/network-scripts/ifcfg-ethN".

Конфигурационный файл для каждого сетевого устройства, которое существует или вы планируете добавить (в Red Hat 6.1 и 6.2) находится в каталоге "/etc/sysconfig/network- scripts/" и называется ifcfg-eth0 для первого интерфейса, ifcfg-eth1 для второго и т.д. Ниже приведен пример конфигурационного файла "/etc/sysconfig/network-scripts/ifcfg- eth0":

DEVICE=eth0
IPADDR=208.164.186.1
NETMASK=255.255.255.0
NETWORK=208.164.186.0
BROADCAST=208.164.186.255
ONBOOT=yes
BOOTPROTO=none
USERCTL=no

Если вы хотите модифицировать ваши сетевые адреса вручную или добавить новое устройство на новом интерфейсе, редактируйте этот файл (ifcfg-ethN), или создайте новый, и внесите в него соответствующие изменения.

DEVICE=devicename, где devicename имя физического сетевого устройства. IPADDR=ipaddr, где ipaddr IP адрес.
NETMASK=netmask, где netmask сетевая IP маска.
NETWORK=network, где network IP адрес сети.
BROADCAST=broadcast, где broadcast широковещательный IP адрес.
ONBOOT=answer, где answer это yes или no (Будет ли интерфейс активным во время загрузки или нет).
BOOTPROTO=proto, где proto одно из:

USERCTL=answer, где answer одно из:

Файл "/etc/resolv.conf".

Этот еще одни текстовый файл, используемый определителем (resolver) - библиотекой, которая определяет IP адрес по имени.

Пример этого файла:

search openna.com
nameserver 208.164.186.1
nameserver 208.164.186.2

Замечание. Запросы посылаются на сервера имен в порядке перечисления в файле "/etc/resolv.conf" (primary, secondary и т.д).

Файл "/etc/host.conf".

Этот файл устанавливает как определяются имена. Linux использует библиотеку определителей для получения IP адреса по имени.

Пример этого файла:

# Поиск имени сперва через DNS а затем, в случае ошибки, в файле /etc/hosts.
order bind,hosts
# У нас есть машины с несколькими адресами.
multi on
# Проверять подмену IP адресов (IP spoofing).
nospoof on

Опция order используется для определения порядка использования сервисов. В примере установлено, что вначале библиотека определителя обращается к DNS серверу, а затем к файлу "/etc/hosts".
Опция multi говорит, что компьютеры, описанные в файле /etc/hosts, могут иметь несколько IP адресов (несколько интерфейсов ethN). Например, шлюз всегда имеет несколько адресов и у них эта опция должна быть всегда определена в ON.
Опция nospoof не разрешать подмену адресов. IP-Spoofing - это способ атаки при котором удаленный компьютер представляется кем-то, кем он не является на самом деле.

Файл "/etc/sysconfig/network".

Файл "/etc/sysconfig/network" описывает желательную сетевую конфигурацию сервера.

Пример этого файла:

NETWORKING=yes
FORWARD_IPV4=yes
HOSTNAME=deep. openna.com
GATEWAY=0.0.0.0
GATEWAYDEV=

NETWORKING=answer, где answer это yes или no (Настраивать сеть или нет).
FORWARD_IPV4=answer, где answer это yes или no (Выполнять IP маршрутизацию или нет).
HOSTNAME=hostname, где hostname это имя вашего сервера.
GATEWAY=gwip, где gwip это IP адрес удаленного маршрутизатора (если доступен).
GATEWAYDEV=gwdev, где gwdev имя устройства (eth#) через которое вы имеете доступ к удаленному маршрутизатору.

Замечание. Для совместимости со старым программным файл /etc/HOSTNAME должен содержать тоже имя, что и HOSTNAME= hostname. В новой версии Red Hat Linux 6.2 параметр "FORWARD_IPV4=" определяется в файле "/etc/sysctl.conf" вместо "/etc/sysconfig/network".

Файл "/etc/sysctl.conf".

В Red Hat Linux 6.2 многие опции ядра связанные с сетевой безопасностью такие как сбрасывать ли пакеты, которые приходят для другого интерфейса, или игнорировать ping/широковещательные запросы и т.д., могут быть определены в новом файле "/etc/sysctl.conf" вместо"/etc/rc.d/rc.local". Одним из самых важных параметров, задаваемых в этом файле это IPv4 forwarding, который сейчас включается программой sysctl. sysctl настройки хранятся в файле "/etc/sysctl.conf", который обрабатывается при каждой загрузке системы перед скриптом "/etc/rc.d/rc.local". Мы уже говорили обо всех сетевых настройках связанных с безопасностью в главе 3 "Общая системная безопасность", поэтому сейчас сконцентрируемся только на опции ядра IPv4 forwarding. Для включения маршрутизации в Red Hat 6.2 используйте следующую команду.

Редактируйте файл "/etc/sysctl.conf" и добавьте следующие строки:

# Enable packet forwarding
net.ipv4.ip_forward = 1

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

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters		[ OK ]
Bringing up interface lo		[ OK ]
Bringing up interface eth0		[ OK ]
Bringing up interface eth1		[ OK ]

ЗАМЕЧАНИЕ. Включение маршрутизации через файл "sysctl.conf" работает только для Red Hat 6.2. Пользователям Red Hat 6.1 нужно устанавливать этот параметр через "/etc/sysconfig/network", как это было описано выше.

Файл "/etc/hosts".

Когда вы включаете компьютер, необходимо знать карту соответствия IP адресов и имен некоторых машин, пока DNS сервер не отвечает. Эта карта хранится в файле "/etc/hosts". При отсутствии сервера имен все программы будут узнавать у этого файла какой IP адрес отвечает на определенное имя.

Ниже приводится пример файла "/etc/hosts":

IP Address		Hostname			Alias
127.0.0.1		localhost			deep.openna.com
208.164.186.1		deep.openna.com			deep
208.164.186.2		mail.openna.com			mail
208.164.186.3		web.openna.com			web

В левой колонке записываются IP адреса, в средней соответствующий им имена машин, а в последней псевдонимы этих компьютеров. Например, адресу 208.164.186.1 соответствует машина deep.openna.com, называемая также deep.

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

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters	[ OK ]
Bringing up interface lo	[ OK ]
Bringing up interface eth0	[ OK ]
Bringing up interface eth1	[ OK ]

ВАЖНОЕ ЗАМЕЧАНИЕ. Проблемы таймаута, возникающие при telnet и ftp соединениях, часто связаны с тем, что сервер не может определить IP адрес по DNS имени. Это бывает в двух случаях или не правильно сконфигурирован DNS сервер, или клиентская машина не знает о DNS. Если вы планируете запускать telnet или ftp сервисы на машине, не имеющей DNS сервера, не забудьте добавить имя клиентской машины и ее IP адрес в ваш файл "/etc/hosts", иначе, вы можете ждать несколько минут, пока lookup запрос не завершится по таймауту, до появления запроса "login:"

Настройка TCP/IP сети вручную из командной строки.

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

Для назначения интерфейсу eth0 IP адреса 208.164.186.2 используйте команду:

[root@deep /]# ifconfig eth0 208.164.186.2 netmask 255.255.255.0

ЗАМЕЧАНИЕ. Обычно, люди настраивают сеть вручную, чтобы проверить как скажутся новые параметры на работе сервера. Если вы хотите сохранить новые настройки, то используйте для этого конфигурационные файлы, связанные с работой сети.

Для отображения всех интерфейсов существующих на сервере введите команду:

[root@deep /]# ifconfig

В ответ вы получите следующую информацию.

eth0	Link encap:Ethernet HWaddr 00:E0:18:90:1B:56
	inet addr:208.164.186.2 Bcast:208.164.186.255 Mask:255.255.255.0
	UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
	RX packets:1295 errors:0 dropped:0 overruns:0 frame:0
	TX packets:1163 errors:0 dropped:0 overruns:0 carrier:0
	collisions:0 txqueuelen:100
	Interrupt:11 Base address:0xa800
lo	Link encap:Local Loopback
	inet addr:127.0.0.1 Mask:255.0.0.0
	UP LOOPBACK RUNNING MTU:3924 Metric:1
	RX packets:139 errors:0 dropped:0 overruns:0 frame:0
	TX packets:139 errors:0 dropped:0 overruns:0 carrier:0
	collisions:0 txqueuelen:0

ЗАМЕЧАНИЕ. Если вы вызвали ifconfig без параметров, то она выдаст вам информацию обо всех интерфейсах. Опция "-a" покажет также неактивные интерфейсы.

[root@deep /]# ifconfig -a

В ответ вы получите следующую информацию.

eth0	Link encap:Ethernet HWaddr 00:E0:18:90:1B:56
	inet addr:208.164.186.2 Bcast:208.164.186.255 Mask:255.255.255.0
	UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
	RX packets:1295 errors:0 dropped:0 overruns:0 frame:0
	TX packets:1163 errors:0 dropped:0 overruns:0 carrier:0
	collisions:0 txqueuelen:100
	Interrupt:11 Base address:0xa800
eth1	Link encap:Ethernet HWaddr 00:E0:18:90:1B:56
	inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
	UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
	RX packets:1295 errors:0 dropped:0 overruns:0 frame:0
	TX packets:1163 errors:0 dropped:0 overruns:0 carrier:0
	collisions:0 txqueuelen:100
	Interrupt:5 Base address:0xa320
lo	Link encap:Local Loopback
	inet addr:127.0.0.1 Mask:255.0.0.0
	UP LOOPBACK RUNNING MTU:3924 Metric:1
	RX packets:139 errors:0 dropped:0 overruns:0 frame:0
	TX packets:139 errors:0 dropped:0 overruns:0 carrier:0
	collisions:0 txqueuelen:0

Для назначения маршрутизатора по умолчанию используйте команду:

[root@deep /]# route add default gw 208.164.186.1

ЗАМЕЧАНИЕ. В этом примере маршрутизатор по умолчанию имеет адрес 208.164.186.1. Если вы хотите зафиксировать этот адрес, то внесите его в файл /etc/sysconfig/network.

Чтобы проверить, что компьютер присутствует в сети введите следующую команду (проверяется адрес 208.164.186.1).

[root@deep /]# ping 208.164.186.1

В ответ вы получите следующую информацию.

[root@deep networking]# ping 208.164.186.1
PING 208.164.186.1 (208.164.186.1) from 208.164.186.2 : 56 data bytes
64 bytes from 208.164.186.2: icmp_seq=0 ttl=128 time=1.0 ms
64 bytes from 208.164.186.2: icmp_seq=1 ttl=128 time=1.0 ms
64 bytes from 208.164.186.2: icmp_seq=2 ttl=128 time=1.0 ms
64 bytes from 208.164.186.2: icmp_seq=3 ttl=128 time=1.0 ms
--- 208.164.186.1 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 1.0/1.0/1.0 ms

Вы должны просмотреть таблицу маршрутизации командой route, чтобы убедиться, что оба хоста имеют корректные вхождения в нее.

[root@deep /]# route -n

В ответ вы получите следующую информацию.

Kernel IP routing table
Destination    Gateway        Genmask          Flags  Metric  Ref  Use  Iface
208.164.186.2  0.0.0.0        255.255.255.255  UH     0       0	   0    eth0
208.164.186.0  208.164.186.2  255.255.255.0    UG     0       0    0    eth0
208.164.186.0  0.0.0.0        255.255.255.0    U      0       0    0    eth0
127.0.0.0      0.0.0.0        255.0.0.0        U      0       0    0    lo

Для быстрой проверки статуса интерфейсов используйте команду netstat -i:

[root@deep /]# netstat -i

В ответ вы получите следующую информацию.

Kernel Interface table
Iface  MTU   Met  RX-OK  RX-ERR RX-DRP  RX-OVR  TX-OK  TX-ERR TX-DRP  TX-OVR Flg
eth0   1500  0    4236   0      0       0       3700   0      0       0      BRU
lo     3924  0    13300  0      0       0       13300  0      0       0      LRU
ppp0   1500  0    14     1      0       0       16     0      0       0      PRU

Другая чрезвычайно полезная опция программы netstat "-t", которая показывает все активные TCP соединения.

[root@deep /]# netstat -t

В ответ вы получите следующую информацию.

Active Internet connections (w/o servers)
Proto  Recv-Q  Send-Q Local Address            Foreign Address       State
Tcp    0       0      deep.openar:netbios-ssn  gate.openna.com:1045  ESTABLISHED
Tcp    0       0      localhost:1032           localhost:1033        ESTABLISHED
Tcp    0       0      localhost:1033           localhost:1032        ESTABLISHED
Tcp    0       0      localhost:1030           localhost:1034        ESTABLISHED
Tcp    0       0      localhost:1031           localhost:1030        ESTABLISHED
Tcp    0       0      localhost:1028           localhost:1029        ESTABLISHED
Tcp    0       0      localhost:1029           localhost:1028        ESTABLISHED
Tcp    0       0      localhost:1026           localhost:1027        ESTABLISHED
Tcp    0       0      localhost:1027           localhost:1026        ESTABLISHED
Tcp    0       0      localhost:1024           localhost:1025        ESTABLISHED
Tcp    0       0      localhost:1025           localhost:1024        ESTABLISHED
	

Для просмотра всех активных и прослушиваемых TCP соединений используйте опции "-vat"

[root@deep /]# netstat -vat

В ответ вы получите следующую информацию.

Active Internet connections (servers and established)
Proto  Recv-Q  Send-Q Local Address           Foreign Address      State
tcp     0        0    deep.openna.co:domain   *:*                  LISTEN
tcp     0        0    localhost:domain        *:*                  LISTEN
tcp     0        0    deep.openna.com:ssh     gate.openna.com:1682 ESTABLISHED
tcp     0        0    *:webcache              *:*                  LISTEN
tcp     0        0    deep.openar:netbios-ssn *:*                  LISTEN
tcp     0        0    localhost:netbios-ssn   *:*                  LISTEN
Tcp     0        0    localhost:1032          localhost:1033       ESTABLISHED
Tcp     0        0    localhost:1033          localhost:1032       ESTABLISHED
Tcp     0        0    localhost:1030          localhost:1034       ESTABLISHED
Tcp     0        0    localhost:1031          localhost:1030       ESTABLISHED
Tcp     0        0    localhost:1028          localhost:1029       ESTABLISHED
Tcp     0        0    localhost:1029          localhost:1028       ESTABLISHED
Tcp     0        0    localhost:1026          localhost:1027       ESTABLISHED
Tcp     0        0    localhost:1027          localhost:1026       ESTABLISHED
Tcp     0        0    localhost:1024          localhost:1025       ESTABLISHED
Tcp     0        0    localhost:1025          localhost:1024       ESTABLISHED
tcp     0        0    deep.openna.com:www     *:*                  LISTEN
tcp     0        0    deep.openna.com:https   *:*                  LISTEN
tcp     0        0    *:389                   *:*                  LISTEN
tcp     0        0    *:ssh                   *:*                  LISTEN

Для остановки всех сетевых устройств вручную используйте команду:

[root@deep /]# /etc/rc.d/init.d/network stop
Shutting down interface eth0 			[ OK ]
Disabling IPv4 packet forwarding 		[ OK ]

Для запуска всех сетевых устройств вручную используйте команду:

[root@deep /]# /etc/rc.d/init.d/network start
Enabling IPv4 packet forwarding 	[ OK ]
Bringing up interface lo 		[ OK ]
Bringing up interface eth0 		[ OK ]

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

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

Глава 7 Сетевой брандмауэр (Часть 1)

В этой главе
Linux IPCHAINS
Создание ядра с поддержкой IPCHAINS
Разъяснения некоторых правил используемых в скриптах настройки брандмауэра
Скрипт для настройки брандмауэра
Конфигурация скрипта "/etc/rc.d/init.d/firewall" для Веб сервера
Конфигурация скрипта "/etc/rc.d/init.d/firewall" для Почтового сервера

Linux IPCHAINS

Краткое описание

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

Что такое политика безопасности сетевого брандмауэра.

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

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

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

Что такое пакетный фильтр?

Пакетный фильтр - это тип брандмауэра созданного на основе ядра Linux. Он работает на сетевом уровне. Данным позволяется остаться в системе, если это разрешено правилами. Проходящие пакеты фильтруются по типу, адресу источника, адресу получателя и по порту. В большинстве случаев фильтрация пакетов осуществляется на маршрутизаторе, который перенаправляет пакеты согласны правилам фильтрации. Когда пакет приходит на фильтрующий маршрутизатор, тот извлекает информацию из заголовка пакета и принимает решение согласно правилам фильтрации об пересылке или уничтожении пакета. Из заголовка пакета может извлекаться следующая информация:

  1. IP адрес источника
  2. IP адрес получателя
  3. TCP/UDP порт источника
  4. TCP/UDP порт получателя
  5. Тип ICMP сообщения
  6. Информация об инкапсулированном протоколе (TCP, UDP, ICMP или IP tunnel).

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

Топология.

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

В нашей конфигурации мы дадим вам три различных примера, которые помогут вам настроить ваши правила брандмауэра в зависимости от типа сервера и его размещения в вашей сети. Первый пример будет для Веб сервера, второй для почтового сервера и третий для Шлюза, который действует как сервер- посредник (proxy server) для внутренних Wins машин, рабочих станций и серверов.



www.openna.com
Кэширующий DNS
208.164.186.3
deep.openna.com
Мастер DNS сервер
208.164.186.1
mail.openna.com
Slave DNS сервер
208.164.186.2
  1. Разрешен неограниченный трафик на интерфейсе loopback
  2. Разрешен ICMP трафик
  3. Разрешен DNS сервер и клиент на порту 53
  4. Разрешен SSH сервер на порту 22
  5. Разрешен HTTP сервер на 80 порту
  6. Разрешен HTTPS сервер на порту 443
  7. Разрешен SMTP клиент на порт 25
  8. Разрешен FTP сервер на 20, 21 портах
  9. Разрешены исходящие traceroute запросы
  1. Разрешен неограниченный трафик на интерфейсе loopback
  2. Разрешен ICMP трафик
  3. Разрешен DNS сервер и клиент на порт 53
  4. Разрешен SSH сервер и клиент на порт 22
  5. Разрешен HTTP сервер и клиент на порт 80
  6. Разрешен HTTPS сервер и клиент на порт 443
  7. Разрешен WWW-CACHE клиент на порт 8080
  8. Разрешен внешний POP клиент на порт 110
  9. Разрешен внешний NNTP NEWS клиент на порт 119
  10. Разрешен SMTP сервер и клиент на порт 25
  11. Разрешен IMAP сервер на порт 143
  12. Разрешен IRC клиент на порт 6667
  13. Разрешен ICQ клиент на порт 4000
  14. Разрешен FTP клиент на порты 20, 21
  15. Разрешен RealAudio/QuickTime клиент
  16. Разрешены исходящие traceroute запросы
  1. Разрешен неограниченный трафик на интерфейсе loopback
  2. Разрешен ICMP трафик
  3. Разрешен DNS сервер и клиент на порт 53
  4. Разрешен SSH сервер на порт 22
  5. Разрешен SMTP сервер и клиент на порт 25
  6. Разрешен IMAP сервер на порт 143
  7. Разрешены исходящие traceroute запросы

Эта таблица показывает, какие порты я должен открыть на различных серверах. В зависимости от того, какой сервис должен быть доступен на сервере, вы должны настроить скрипт брандмауэра на разрешение трафика к определенному порту. www.openna.com - наш Веб сервер, mail.openna.com - это наш почтовый сервер для всех внутренних сетей и deep.openna.com - это шлюз в всех примеров объясненных в этой главе.

Создание ядра с поддержкой брандмауэра Ipchains.

Первое о чем вы должны подумать, это чтобы ваше ядро было создано с поддержкой сетевого Firewall и Firewalling. Помните, что все сервера должны быть настроены на блокирование неиспользуемых портов, даже если они не выступают в роли брандмауэра. В ядре 2.2.14 вам нужно ответить Yes на следующие вопросы: Networking options:
Network firewalls (CONFIG_FIREFALL) [N] Y
IP:Firewalling (CONFIG_IP_FIREWALL) [N] Y
IP:TCP syncookie support (CONFIG_SYN_COOKIES) [N] Y

ЗАМЕЧАНИЕ. Если при создание ядра вы использовали материалы из главы 3 книги, то все необходимые опции ("Network firewalls, IP:Firewalling, and IP:TCP syncookie support") были отмечены.

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

Ниже приводятся пояснения к некоторым правилам, которые мы используем в примере firewall. Они приводятся только как рекомендации, потому что скрипты хорошо комментированы и легко модифицируются.

Константы, используемые в примере скрипта firewall-а.

EXTERNAL_INTERFACE
Это имя внешнего сетевого интерфейса, обращенного в Интернет. В нашем примере это eth0.
LOCAL_INTERFACE_1
Это имя интерфейса подключенного к внутренней сети LAN. В нашем примере это eth1.
LOOPBACK_INTERFACE
Это имя loopback интерфейса. В нашем примере это lo.
IPADDR
Это IP адрес вашего внешнего интерфейса. Это или статический адрес зарегистрированный в InterNIC, или динамический адрес присвоенный вашим ISP (обычно, через DHCP).
LOCALNET_1
Это адрес вашей локальной сети (LAN), если любой - полный диапазон IP адресов, используемых машинами в вашей сети. Они могут быть статически присвоенными, или могут назначаться локальным DHCP сервером. В нашем примере, диапазон адресов представляет собой часть сети класса C - 192.168.1.0/24.
ANYWHERE
Это обозначение адреса, который ipchains воспринимает как любая машина (не широковещательный адрес). Обе программы предоставляют метку any/0 для подобного адреса, который равен 0.0.0.0/0.
NAMESERVER_1
Это IP адрес Primary DNS сервера из вашей сети или вашего ISP.
NAMESERVER_2
Это IP адрес Secondary DNS сервера из вашей сети или вашего ISP.
MY_ISP
Это диапазон адресов вашего ISP & NOC. Это значение используется firewall-ом для разрешения запросов ICMP ping и traceroute. Если вы не определите это диапазон, то будет запрещено посылать ping в Интернет из вашей локальной сети.
LOOPBACK
Диапазон адресов loopback равен 127.0.0.0/8. Интерфейс непосредственно адресован как 127.0.0.1 (в файле /etc/hosts).
PRIVPORTS
Привилегированные порты, обычно, с 0 по 1023.
UNPRIVPORTS
Непривилегированные порты, обычно, с 1024 по 65535. Они определяются на динамически на стороне клиента соединения.
Default Policy
Брандмауэр имеет предопределенную линию поведения и собирает действия, которые нужно предпринять в ответ на определенные типы сообщений. Это означает, что если пакет не попал ни под одно из правил, то к нему применяется правило по умолчанию.

ЗАМЕЧАНИЕ. Люди, которые динамически получают адреса от ISP могут включить следующие две строки в описания firewall-а. Эти строки определяют IP адрес интерфейса ppp0 и адрес сети удаленного ppp сервера.

IPADDR=`/sbin/ifconfig | grep -A 4 ppp0 | awk '/inet/ { print $2 } ' | sed -e s/addr://`
MY_ISP=`/sbin/ifconfig | grep -A 4 ppp0 | awk '/P-t-P/ { print $3 } ' | sed -e s/P-t-P:// | cut -d '.' -f 1-3`.0/24

Разрешение локального трафика.

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

# Неограниченный трафик через loopback интерфейс.
ipchains -A input -i $LOOPBACK_INTERFACE -j ACCEPT
ipchains -A output -i $LOOPBACK_INTERFACE -j ACCEPT

Фильтрация адреса источника.

Все IP пакеты содержат в своих заголовках IP адреса источника и получателя и тип IP протокола помещенного в пакет (TCP, UDP, ICMP). Единственным средством идентификации согласно протоколу IP является адрес источника сообщений. Это приводит к возможности подмены адреса (spoofing), когда злоумышленник заменят адрес источника на несуществующий адрес или на адрес другого сервера.

# Отбрасывание spoof-пакетов, с адресом источника совпадающим с вашим внешним адресом.
ipchains -A input -i $EXTERNAL_INTERFACE -s $IPADDR -l -j DENY

Существует по крайней мере семь адресов на внешнем интерфейсе от которых необходимо отказаться. К ним относятся:

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

Замечание. Не забудьте исключить ваш собственный IP адрес из списка исходящих блокируемых пакетов. По умолчанию, я исключаю приватные адреса класса C, так как они наиболее часто используются большинством людей сегодня. Если вы использовали другой класс вместо C, то вы должны раскомментировать соответствующие строки в секции "SPOOFING & BAD ADDRESSES" файла конфигурации файрвола.

Остальная часть правил.

Другие правила используемые в скрипте брандмауэра описывают:

Скрипт для настройки брандмауэра.

Утилита ipchains позволяет вам установить брандмауэр, IP маскарадинг и т.д. Ipchains общается с ядром и говорит какие пакеты необходимо отфильтровать. Теоретически, все установки вашего брандмауэра запоминаются в ядре и теряются при перезагрузке сервера. Для борьбы с этим, чтобы сделать правила постоянными, мы рекомендуем использовать инициализационные скрипты System V. Для этого создайте файл, содержащий скрипт файрвола подобный описанному ниже, в каталоге "/etc/rc.d/init.d/" на каждом сервере. Конечно, каждый сервер имеет различные сервисы и будет иметь разные скрипты. По этим причинам, мы предоставляем три различных набора правил, с которыми вы можете поиграть и подогнать под ваши нужды. Также, я подразумеваю, что вы имеете хотя бы минимальные знания о том, как фильтрует firewall, и как работают его правила.


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

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

Глава 7 Сетевой брандмауэр (Часть 2)

В этой главе
Linux IPCHAINS
Создание ядра с поддержкой IPCHAINS
Разъяснения некоторых правил используемых в скриптах настройки брандмауэра
Скрипт для настройки брандмауэра
Конфигурация скрипта "/etc/rc.d/init.d/firewall" для Веб сервера
Конфигурация скрипта "/etc/rc.d/init.d/firewall" для Почтового сервера

Конфигурация скрипта "/etc/rc.d/init.d/firewall" для Веб сервера.

Здесь предсьавлен конфигурационный скрипт для вашего Веб сервера. Эта конфигурация позволяет неограниченный трафик на loopback интерфейсе, ICMP, DNS кэш и клиент сервер (53), SSH сервер (22), HTTP сервер (80), HTTPS сервер (443), SMTP клиент (25), FTP сервер (20, 21) и исходящие TRACEROUTE запросы.

Если вы не хотите использовать какие-нибудь сервисы открытые в этом файле по умолчанию, закомментируйте их, добавив в начало строки символ "#". Если же вы хотите использовать сервисы, которые я запретил - удалите символ комментария "#".


#!/bin/sh
#
# ----------------------------------------------------------------------------
# Last modified by Gerhard Mourani: 04-25-2000
# ----------------------------------------------------------------------------
# Copyright (C) 1997, 1998, 1999 Robert L. Ziegler
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for educational, research, private and non-profit purposes,
# without fee, and without a written agreement is hereby granted.
# This software is provided as an example and basis for individual firewall
# development. This software is provided without warranty.
#
# Any material furnished by Robert L. Ziegler is furnished on an
# "as is" basis. He makes no warranties of any kind, either expressed
# or implied as to any matter including, but not limited to, warranty
# of fitness for a particular purpose, exclusivity or results obtained
# from use of the material.
# ----------------------------------------------------------------------------
#
# Invoked from /etc/rc.d/init.d/firewall.
# chkconfig: - 60 95
# description: Starts and stops the IPCHAINS Firewall \
# used to provide Firewall network services.
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
if [ ${NETWORKING} = "no" ]
then
 exit 0
fi
if [ ! -x /sbin/ipchains ]; then
 exit 0
fi
# See how we were called.
case "$1" in
start)
echo -n "Starting Firewalling Services: "
# Некоторые определения для облегчения управления.
# ----------------------------------------------------------------------------
# Редактируйте это, для соответствия настроек вашей системы ISP.
EXTERNAL_INTERFACE="eth0" # Интерфейс подключенный к Интернет
LOOPBACK_INTERFACE="lo" # loopback интерфейс
IPADDR="my.ip.address" # Ваш IP адрес
ANYWHERE="any/0" # любой IP адрес
NAMESERVER_1="my.name.server.1" # 1-й DNS сервер
NAMESERVER_2="my.name.server.2" # 2-й DNS сервер
MY_ISP="my.isp.address.range/24" # диапазон адресов ISP & NOC
SMTP_SERVER="my.smtp.server" # Ваш почтовый концентратор 
SYSLOG_SERVER="syslog.internal.server" # Ваш внутренний syslog сервер 
SYSLOG_CLIENT="sys.int.client.range/24" # Диапазон клиентов вашего syslog
LOOPBACK="127.0.0.0/8" # Диапазон зарезервированных loopback адресов
CLASS_A="10.0.0.0/8" # Приватная сеть класса A
CLASS_B="172.16.0.0/12" # Приватная сеть класса B
CLASS_C="192.168.0.0/16" # Приватная сеть класса C
CLASS_D_MULTICAST="224.0.0.0/4" # Широковещательные адреса класса D
CLASS_E_RESERVED_NET="240.0.0.0/5" # Зарезервированные адреса класса E
BROADCAST_SRC="0.0.0.0" # Широковещательный адрес
BROADCAST_DEST="255.255.255.255" # Широковещательный адрес назначения
PRIVPORTS="0:1023" # Диапазон привилегированных портов
UNPRIVPORTS="1024:65535" # Диапазон непривилегированных портов
# ----------------------------------------------------------------------------
# SSH стартует с 1023 и работает вниз до 513 для
# каждого дополнительного одновременного входящего соединения.
SSH_PORTS="1022:1023" # диапазон привилегированных портов для SSH
# traceroute обычно использует -S 32769:65535 -D 33434:33523
TRACEROUTE_SRC_PORTS="32769:65535"
TRACEROUTE_DEST_PORTS="33434:33523"
# ----------------------------------------------------------------------------
# Политика по умолчанию DENY
# Явно принимать желательные входящие и исходящие соединения
# Удалить все существующие правила принадлежащие этому фильтру
ipchains -F
# Очистка всех правил и пользовательских цепочек
ipchains -X
# Установка политики по умолчанию deny.
# Don't even bother sending an error message back.
ipchains -P input DENY
ipchains -P output DENY
ipchains -P forward DENY
# ----------------------------------------------------------------------------
# LOOPBACK
# Неограниченный трафик на loopback интерфейсе.
ipchains -A input -i $LOOPBACK_INTERFACE -j ACCEPT
ipchains -A output -i $LOOPBACK_INTERFACE -j ACCEPT
# ----------------------------------------------------------------------------
# Сетевые вампиры
# Запрещение доступа jerks
# /etc/rc.d/rc.firewall.blocked содержит список
# ipchains -A input -i $EXTERNAL_INTERFACE -s address -j DENY
# правил для блокирования любого доступа.
# Запрещение любых соединений из проблемных сайтов
#if [ -f /etc/rc.d/rc.firewall.blocked ]; then
# . /etc/rc.d/rc.firewall.blocked
#fi
# ----------------------------------------------------------------------------
# SPOOFING & BAD ADDRESSES
# Отбрасывание spoofed пакетов.
# Блокирование пакетов от явно неправильных адресов.
# Защита себя от посылки плохих адресов.
# Блокирование  обманных пакетов посланных как бы от вашего внешнего адреса.
ipchains -A input -i $EXTERNAL_INTERFACE -s $IPADDR -j DENY -l
# Блокирование пакетов как бы от или к приватной сети класса A
ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_A -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_A -j DENY -l
ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_A -j REJECT -l
ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_A -j REJECT -l
# Блокирование пакетов как бы от или к приватной сети класса B
ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_B -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_B -j DENY -l
ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_B -j REJECT -l
ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_B -j REJECT -l
# Блокирование пакетов как бы от или к приватной сети класса C
# ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_C -j DENY -l
# ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_C -j DENY -l
# ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_C -j REJECT -l
# ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_C -j REJECT -l
# Блокирование пакетов как бы от loopback интерфейса
ipchains -A input -i $EXTERNAL_INTERFACE -s $LOOPBACK -j DENY -l
ipchains -A output -i $EXTERNAL_INTERFACE -s $LOOPBACK -j REJECT -l
# Блокирование пакетов от широковещательных адресов
ipchains -A input -i $EXTERNAL_INTERFACE -s $BROADCAST_DEST -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -d $BROADCAST_SRC -j DENY -l
# Блокирование широковещательных адресов класса D (NET-3-HOWTO)
# Широковещательный (Multicast) адрес - это неправильный адрес источника.
# Multicast использует UDP.
ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_D_MULTICAST -j DENY -l
# Блокирование резервированных IP адресов класса E
ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_E_RESERVED_NET -j DENY -l
# блокирование адресов определенных IANA как резервных
# 0.*.*.*, 1.*.*.*, 2.*.*.*, 5.*.*.*, 7.*.*.*, 23.*.*.*, 27.*.*.*
# 31.*.*.*, 37.*.*.*, 39.*.*.*, 41.*.*.*, 42.*.*.*, 58-60.*.*.*
# 65-95.*.*.*, 96-126.*.*.*, 197.*.*.*, 201.*.*.* (?), 217-223.*.*.*
ipchains -A input -i $EXTERNAL_INTERFACE -s 1.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 2.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 5.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 7.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 23.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 27.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 31.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 37.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 39.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 41.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 42.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 58.0.0.0/7 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 60.0.0.0/8 -j DENY -l
#65: 01000001 - /3 includes 64 - need 65-79 spelled out
ipchains -A input -i $EXTERNAL_INTERFACE -s 65.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 66.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 67.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 68.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 69.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 70.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 71.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 72.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 73.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 74.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 75.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 76.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 77.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 78.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 79.0.0.0/8 -j DENY -l
#80: 01010000 - /4 masks 80-95
ipchains -A input -i $EXTERNAL_INTERFACE -s 80.0.0.0/4 -j DENY -l
# 96: 01100000 - /4 masks 96-111
ipchains -A input -i $EXTERNAL_INTERFACE -s 96.0.0.0/4 -j DENY -l
#126: 01111110 - /3 includes 127 - need 112-126 spelled out
ipchains -A input -i $EXTERNAL_INTERFACE -s 112.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 113.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 114.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 115.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 116.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 117.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 118.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 119.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 120.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 121.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 122.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 123.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 124.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 125.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 126.0.0.0/8 -j DENY -l
#217: 11011001 - /5 includes 216 - need 217-219 spelled out
ipchains -A input -i $EXTERNAL_INTERFACE -s 217.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 218.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 219.0.0.0/8 -j DENY -l
#223: 11011111 - /6 masks 220-223
ipchains -A input -i $EXTERNAL_INTERFACE -s 220.0.0.0/6 -j DENY -l
# ----------------------------------------------------------------------------
# ICMP
# Предотвращение denial of service атак базирующихся на ICMP бомбах, фильтрация
# входящего Redirect (5) и исходящего Destination Unreachable (3).
# Обычно блокировка Destination Unreachable (3) не желательна
# так как этот тип пакета используется при обсуждении размера фрагмента пакета.
# Для реверсивного (bi-directional) ping.
# Типы сообщений: Echo_Reply (0), Echo_Request (8)
# Для предотвращения атак, ограничьте адрес источника диапазоном адресов вашего ISP.
#
# Для исходящих traceroute.
# Тип сообщений: INCOMING Dest_Unreachable (3), Time_Exceeded (11)
# default UDP base: 33434 to base+nhops-1
#
# Для входящих traceroute.
# Тип сообщений: OUTGOING Dest_Unreachable (3), Time_Exceeded (11)
# Для блокирования этого, запрещение OUTGOING 3 и 11
# 0: echo-reply (pong)
# 3: destination-unreachable, port-unreachable, fragmentation-needed, etc.
# 4: source-quench
# 5: redirect
# 8: echo-request (ping)
# 11: time-exceeded
# 12: parameter-problem
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 0 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 3 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 4 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 11 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 12 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $MY_ISP 8 -d $IPADDR -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
-s $IPADDR 0 -d $MY_ISP -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
-s $IPADDR 3 -d $MY_ISP -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
-s $IPADDR 4 -d $ANYWHERE -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
-s $IPADDR 8 -d $ANYWHERE -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
-s $IPADDR 12 -d $ANYWHERE -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
-s $IPADDR 11 -d $MY_ISP -j ACCEPT
# ----------------------------------------------------------------------------
# UDP INCOMING TRACEROUTE
# traceroute обычно использует -S 32769:65535 -D 33434:33523
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-s $MY_ISP $TRACEROUTE_SRC_PORTS \
-d $IPADDR $TRACEROUTE_DEST_PORTS -j ACCEPT -l
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-s $ANYWHERE $TRACEROUTE_SRC_PORTS \
-d $IPADDR $TRACEROUTE_DEST_PORTS -j DENY -l
# ----------------------------------------------------------------------------
# DNS forwarding, caching only nameserver (53)
# --------------------------------------------
# от сервера к серверу только запросы и ответы
# Кэширующий сервер имен требует только UDP, не TCP
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-s $NAMESERVER_1 53 \
-d $IPADDR 53 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
-s $IPADDR 53 \
-d $NAMESERVER_1 53 -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-s $NAMESERVER_2 53 \
-d $IPADDR 53 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
-s $IPADDR 53 \
-d $NAMESERVER_2 53 -j ACCEPT
# DNS клиент (53)
# ---------------
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-s $NAMESERVER_1 53 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
-s $IPADDR $UNPRIVPORTS \
-d $NAMESERVER_1 53 -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-s $NAMESERVER_2 53 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
-s $IPADDR $UNPRIVPORTS \
-d $NAMESERVER_2 53 -j ACCEPT
# Запросы от клиента к серверу по протоколу TCP разрешены если
# не прошли UDP запросы. Это встречается редко. Обычно клиенты
# используют TCP для передачи зон вторичному серверу от
# первичного и если они хакеры.
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $NAMESERVER_1 53 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR $UNPRIVPORTS \
-d $NAMESERVER_1 53 -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $NAMESERVER_2 53 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR $UNPRIVPORTS \
-d $NAMESERVER_2 53 -j ACCEPT
# ----------------------------------------------------------------------------
# Принимать TCP только для определенных портов
# ---------------------------------
# ------------------------------------------------------------------
# SSH сервер (22)
# ---------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \
-s $ANYWHERE $UNPRIVPORTS \
-d $IPADDR 22 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $IPADDR 22 \
-d $ANYWHERE $UNPRIVPORTS -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \
-s $ANYWHERE $SSH_PORTS \
-d $IPADDR 22 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $IPADDR 22 \
-d $ANYWHERE $SSH_PORTS -j ACCEPT
# ------------------------------------------------------------------
# HTTP сервер (80)
# ----------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \
-s $ANYWHERE $UNPRIVPORTS \
-d $IPADDR 80 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $IPADDR 80 \
-d $ANYWHERE $UNPRIVPORTS -j ACCEPT
# ------------------------------------------------------------------
# HTTPS сервер (443)
# ------------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \
-s $ANYWHERE $UNPRIVPORTS \
-d $IPADDR 443 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $IPADDR 443 \
-d $ANYWHERE $UNPRIVPORTS -j ACCEPT
# ------------------------------------------------------------------
# SYSLOG сервер (514)
# -----------------
# Предоставляет полную удаленную регистрацию. Используйте эту возможность если хотите
# контролировать все syslog сообщения на одном компьютере.
# ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
# -s $SYSLOG_CLIENT \
# -d $IPADDR 514 -j ACCEPT
# SYSLOG клиент (514)
# -----------------
# ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
# -s $IPADDR 514 \
# -d $SYSLOG_SERVER 514 -j ACCEPT
# ------------------------------------------------------------------
# AUTH сервер (113)
# -----------------
# Reject предпочтительней чем deny для входящих сообщений на auth порт. (NET-3-HOWTO)
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \
-s $ANYWHERE \
-d $IPADDR 113 -j REJECT
# ------------------------------------------------------------------
# SMTP клиент (25)
# ----------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $SMTP_SERVER 25 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR $UNPRIVPORTS \
-d $SMTP_SERVER 25 -j ACCEPT
# ------------------------------------------------------------------
# FTP сервер (20, 21)
# -------------------
# входящие запросы
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \
-s $ANYWHERE $UNPRIVPORTS \
-d $IPADDR 21 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $IPADDR 21 \
-d $ANYWHERE $UNPRIVPORTS -j ACCEPT
# PORT MODE ответ по каналу данных
#
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $ANYWHERE $UNPRIVPORTS \
-d $IPADDR 20 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR 20 \
-d $ANYWHERE $UNPRIVPORTS -j ACCEPT
# PASSIVE MODE ответ по каналу данных
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \
-s $ANYWHERE $UNPRIVPORTS \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $IPADDR $UNPRIVPORTS \
-d $ANYWHERE $UNPRIVPORTS -j ACCEPT
# ------------------------------------------------------------------
# Исходящие TRACEROUTE
# -------------------
ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
-s $IPADDR $TRACEROUTE_SRC_PORTS \
-d $ANYWHERE $TRACEROUTE_DEST_PORTS -j ACCEPT
# ----------------------------------------------------------------------------
# Включение регистрации для избранных заблокированных пакетов
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \
-d $IPADDR -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-d $IPADDR $PRIVPORTS -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-d $IPADDR $UNPRIVPORTS -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 5 -d $IPADDR -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 13:255 -d $IPADDR -j DENY -l
# ----------------------------------------------------------------------------
;;
stop)
echo -n "Shutting Firewalling Services: "
# Remove all existing rules belonging to this filter
ipchains -F
# Delete all user-defined chain to this filter
ipchains -X
# Reset the default policy of the filter to accept.
ipchains -P input ACCEPT
ipchains -P output ACCEPT
ipchains -P forward ACCEPT
;;
status)
status firewall
;;
restart|reload)
$0 stop
$0 start
;;
*)
echo "Usage: firewall {start|stop|status|restart|reload}"
exit 1
esac
exit 0

Сделайте этот скрипт исполняемым и измените права доступа

[root@deep /]# chmod 700 /etc/rc.d/init.d/firewall
[root@deep /]# chown 0.0 /etc/rc.d/init.d/firewall

Создайте символическую rc.d ссылку для вашего Firewall следующей командой:

[root@deep /]# chkconfig --add firewall
[root@deep /]# chkconfig --level 345 firewall on

Сейчас ваши правила для firewall готовы к использованию с System V init (System V init запускает все нормальные процессы, которые надо стартовать во время загрузки системы) и будут автоматически стартовать при каждой загрузке сервера.

Ручная остановка firewall:

[root@deep /]# /etc/rc.d/init.d/firewall stop
Shutting Firewalling Services: 	[ OK ]

Запуск firewall вручную:

[root@deep /]# /etc/rc.d/init.d/firewall start
Starting Firewalling Services: 	[ OK ]

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

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

Глава 7 Сетевой брандмауэр (Часть 3)

В этой главе
Linux IPCHAINS
Создание ядра с поддержкой IPCHAINS
Разъяснения некоторых правил используемых в скриптах настройки брандмауэра
Скрипт для настройки брандмауэра
Конфигурация скрипта "/etc/rc.d/init.d/firewall" для Веб сервера
Конфигурация скрипта "/etc/rc.d/init.d/firewall" для Почтового сервера

Конфигурация "/etc/rc.d/init.d/firewall" скрипта для почтового сервера.

Это конфигурация скрипта для почтового сервера. Он разрешает неограниченный трафик на Loopback интерфейсе, ICMP, DNS сервер и клиент (53), SSH сервер (22), SMTP сервер и клиент (25), IMAP сервер (143) и исходящие TRACEROUTE запросы.

Если вы не хотите использовать какие-нибудь сервисы открытые в этом файле по умолчанию, закомментируйте их, добавив в начало строки символ "#". Если же вы хотите использовать сервисы, которые я запретил - удалите символ комментария "#".

Создайте скрипт файл firewall (touch /etc/rc.d/init.d/firewall) на вашем почтовом сервере:


#!/bin/sh
#
# ----------------------------------------------------------------------------
# Last modified by Gerhard Mourani: 04-25-2000
# ----------------------------------------------------------------------------
# Copyright (C) 1997, 1998, 1999 Robert L. Ziegler
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for educational, research, private and non-profit purposes,
# without fee, and without a written agreement is hereby granted.
# This software is provided as an example and basis for individual firewall
# development. This software is provided without warranty.
#
# Any material furnished by Robert L. Ziegler is furnished on an
# "as is" basis. He makes no warranties of any kind, either expressed
# or implied as to any matter including, but not limited to, warranty
# of fitness for a particular purpose, exclusivity or results obtained
# from use of the material.
# ----------------------------------------------------------------------------
#
# Invoked from /etc/rc.d/init.d/firewall.
# chkconfig: - 60 95
# description: Starts and stops the IPCHAINS Firewall \
# used to provide Firewall network services.
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
if [ ${NETWORKING} = "no" ]
then
exit 0
fi
if [ ! -x /sbin/ipchains ]; then
exit 0
fi
# See how we were called.
case "$1" in
start)
echo -n "Starting Firewalling Services: "
# Некоторые определения для облегчения управления..
# ----------------------------------------------------------------------------
# EDIT THESE TO SUIT YOUR SYSTEM AND ISP.
EXTERNAL_INTERFACE="eth0" # Интерфейс подключенный к Интернет
LOOPBACK_INTERFACE="lo" # loopback интерфейс
IPADDR="my.ip.address" # Ваш IP адрес
ANYWHERE="any/0" # любой IP адрес
NAMESERVER_1="my.name.server.1" # 1-й DNS сервер
NAMESERVER_2="my.name.server.2" # 2-й DNS сервер
MY_ISP="my.isp.address.range/24" # диапазон адресов ISP & NOC
SMTP_SERVER="my.smtp.server" # Ваш концентратор почты 
SYSLOG_SERVER="syslog.internal.server" # Ваш внутренний syslog сервер 
SYSLOG_CLIENT="sys.int.client.range/24" # Диапазон клиентов вашего syslog
LOOPBACK="127.0.0.0/8" # Диапазон зарезервированных loopback адресов
CLASS_A="10.0.0.0/8" # Приватная сеть класса A
CLASS_B="172.16.0.0/12" # Приватная сеть класса B
CLASS_C="192.168.0.0/16" # Приватная сеть класса C
CLASS_D_MULTICAST="224.0.0.0/4" # Широковещательные адреса класса D
CLASS_E_RESERVED_NET="240.0.0.0/5" # Зарезервированные адреса класса E
BROADCAST_SRC="0.0.0.0" # Широковещательный адрес
BROADCAST_DEST="255.255.255.255" # Широковещательный адрес назначения
PRIVPORTS="0:1023" # Диапазон привилегированных портов
UNPRIVPORTS="1024:65535" # Диапазон непривилегированных портов
# ----------------------------------------------------------------------------
# SSH стартует с 1023 и работает вниз до 513 для
# каждого дополнительного одновременного входящего соединения.
SSH_PORTS="1022:1023" # диапазон привилегированных портов для SSH
# traceroute обычно использует -S 32769:65535 -D 33434:33523
TRACEROUTE_SRC_PORTS="32769:65535"
TRACEROUTE_DEST_PORTS="33434:33523"
# ----------------------------------------------------------------------------
# Политика по умолчанию DENY
# Явно принимать желательные входящие и исходящие соединения
# Удалить все существующие правила принадлежащие этому фильтру
ipchains -F
# Очистка всех правил и пользовательских цепочек
ipchains -X
# Установка политики по умолчанию deny.
# Don't even bother sending an error message back.
ipchains -P input DENY
ipchains -P output DENY
ipchains -P forward DENY
# ----------------------------------------------------------------------------
# LOOPBACK
# Неограниченный трафик на loopback интерфейсе.
ipchains -A input -i $LOOPBACK_INTERFACE -j ACCEPT
ipchains -A output -i $LOOPBACK_INTERFACE -j ACCEPT
# ----------------------------------------------------------------------------
# Сетевые вампиры
# Запрещение доступа jerks
# /etc/rc.d/rc.firewall.blocked содержит список
# ipchains -A input -i $EXTERNAL_INTERFACE -s address -j DENY
# правил для блокирования любого доступа.
# Запрещение любых соединений из проблемных сайтов
#if [ -f /etc/rc.d/rc.firewall.blocked ]; then
# . /etc/rc.d/rc.firewall.blocked
#fi
# ----------------------------------------------------------------------------
# SPOOFING & BAD ADDRESSES
# Отбрасывание spoofed пакетов.
# Блокирование пакетов от явно неправильных адресов.
# Защита себя от посылки плохих адресов.
# Блокирование  обманных пакетов посланных как бы от вашего внешнего адреса.
ipchains -A input -i $EXTERNAL_INTERFACE -s $IPADDR -j DENY -l
# Блокирование пакетов как бы от или к приватной сети класса A
ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_A -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_A -j DENY -l
ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_A -j REJECT -l
ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_A -j REJECT -l
# Блокирование пакетов как бы от или к приватной сети класса B
ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_B -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_B -j DENY -l
ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_B -j REJECT -l
ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_B -j REJECT -l
# Блокирование пакетов как бы от или к приватной сети класса C
# ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_C -j DENY -l
# ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_C -j DENY -l
# ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_C -j REJECT -l
# ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_C -j REJECT -l
# Блокирование пакетов как бы от loopback интерфейса
ipchains -A input -i $EXTERNAL_INTERFACE -s $LOOPBACK -j DENY -l
ipchains -A output -i $EXTERNAL_INTERFACE -s $LOOPBACK -j REJECT -l
# Блокирование пакетов от широковещательных адресов
ipchains -A input -i $EXTERNAL_INTERFACE -s $BROADCAST_DEST -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -d $BROADCAST_SRC -j DENY -l
# Блокирование широковещательных адресов класса D (NET-3-HOWTO)
# Широковещательный (Multicast) адрес - это неправильный адрес источника.
# Multicast использует UDP.
ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_D_MULTICAST -j DENY -l
# Блокирование резервированных IP адресов класса E
ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_E_RESERVED_NET -j DENY -l
# блокирование адресов определенных IANA как резервных
# 0.*.*.*, 1.*.*.*, 2.*.*.*, 5.*.*.*, 7.*.*.*, 23.*.*.*, 27.*.*.*
# 31.*.*.*, 37.*.*.*, 39.*.*.*, 41.*.*.*, 42.*.*.*, 58-60.*.*.*
# 65-95.*.*.*, 96-126.*.*.*, 197.*.*.*, 201.*.*.* (?), 217-223.*.*.*
ipchains -A input -i $EXTERNAL_INTERFACE -s 1.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 2.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 5.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 7.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 23.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 27.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 31.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 37.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 39.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 41.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 42.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 58.0.0.0/7 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 60.0.0.0/8 -j DENY -l
#65: 01000001 - /3 includes 64 - need 65-79 spelled out
ipchains -A input -i $EXTERNAL_INTERFACE -s 65.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 66.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 67.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 68.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 69.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 70.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 71.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 72.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 73.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 74.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 75.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 76.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 77.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 78.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 79.0.0.0/8 -j DENY -l
#80: 01010000 - /4 masks 80-95
ipchains -A input -i $EXTERNAL_INTERFACE -s 80.0.0.0/4 -j DENY -l
# 96: 01100000 - /4 makses 96-111
ipchains -A input -i $EXTERNAL_INTERFACE -s 96.0.0.0/4 -j DENY -l
#126: 01111110 - /3 includes 127 - need 112-126 spelled out
ipchains -A input -i $EXTERNAL_INTERFACE -s 112.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 113.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 114.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 115.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 116.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 117.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 118.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 119.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 120.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 121.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 122.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 123.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 124.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 125.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 126.0.0.0/8 -j DENY -l
#217: 11011001 - /5 includes 216 - need 217-219 spelled out
ipchains -A input -i $EXTERNAL_INTERFACE -s 217.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 218.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 219.0.0.0/8 -j DENY -l
#223: 11011111 - /6 masks 220-223
ipchains -A input -i $EXTERNAL_INTERFACE -s 220.0.0.0/6 -j DENY -l
# ----------------------------------------------------------------------------
# ICMP
# Предотвращение denial of service атак базирующихся на ICMP бомбах, фильтрация
# входящего Redirect (5) и исходящего Destination Unreachable (3).
# Обычно блокировка Destination Unreachable (3) не желательна
# так как этот тип пакета используется при обсуждении размера фрагмента пакета.
# Для реверсивного (bi-directional) ping.
# Типы сообщений: Echo_Reply (0), Echo_Request (8)
# Для предотвращения атак, ограничьте адрес источника диапазоном адресов вашего ISP.
#
# Для исходящих traceroute.
# Тип сообщений: INCOMING Dest_Unreachable (3), Time_Exceeded (11)
# default UDP base: 33434 to base+nhops-1
#
# Для входящих traceroute.
# Тип сообщений: OUTGOING Dest_Unreachable (3), Time_Exceeded (11)
# Для блокирования этого, запрещение OUTGOING 3 и 11
# 0: echo-reply (pong)
# 3: destination-unreachable, port-unreachable, fragmentation-needed, etc.
# 4: source-quench
# 5: redirect
# 8: echo-request (ping)
# 11: time-exceeded
# 12: parameter-problem
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 0 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 3 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 4 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 11 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 12 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $MY_ISP 8 -d $IPADDR -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
-s $IPADDR 0 -d $MY_ISP -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
-s $IPADDR 3 -d $MY_ISP -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
-s $IPADDR 4 -d $ANYWHERE -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
-s $IPADDR 8 -d $ANYWHERE -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
-s $IPADDR 12 -d $ANYWHERE -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
-s $IPADDR 11 -d $MY_ISP -j ACCEPT
# ----------------------------------------------------------------------------
# UDP INCOMING TRACEROUTE
# traceroute обычно использует -S 32769:65535 -D 33434:33523
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-s $MY_ISP $TRACEROUTE_SRC_PORTS \
-d $IPADDR $TRACEROUTE_DEST_PORTS -j ACCEPT -l
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-s $ANYWHERE $TRACEROUTE_SRC_PORTS \
-d $IPADDR $TRACEROUTE_DEST_PORTS -j DENY -l
# ----------------------------------------------------------------------------
# DNS сервер
# ----------
# DNS: полный сервер
# сервер/клиент к серверу запросы или ответы
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-s $ANYWHERE $UNPRIVPORTS \
-d $IPADDR 53 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
-s $IPADDR 53 \
-d $ANYWHERE $UNPRIVPORTS -j ACCEPT
# DNS клиент & пересылка зон (53)
# ---------------
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-s $NAMESERVER_1 53 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
-s $IPADDR $UNPRIVPORTS \
-d $NAMESERVER_1 53 -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $NAMESERVER_1 53 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR $UNPRIVPORTS \
-d $NAMESERVER_1 53 -j ACCEPT
# ----------------------------------------------------------------------------
# TCP принимается только для выбранных портов
# ---------------------------------
# ------------------------------------------------------------------
# SSH сервер (22)
# ---------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \
-s $ANYWHERE $UNPRIVPORTS \
-d $IPADDR 22 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $IPADDR 22 \
-d $ANYWHERE $UNPRIVPORTS -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \
-s $ANYWHERE $SSH_PORTS \
-d $IPADDR 22 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $IPADDR 22 \
-d $ANYWHERE $SSH_PORTS -j ACCEPT
# ------------------------------------------------------------------
# AUTH сервер (113)
# -----------------
# Reject предпочтительней чем deny для входящих сообщений на auth порт. (NET-3-HOWTO)
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \
-s $ANYWHERE \
-d $IPADDR 113 -j REJECT
# ------------------------------------------------------------------
# SYSLOG сервер (514)
# -----------------
# Предоставляет полную удаленную регистрацию. Используйте эту возможность если хотите
# контролировать все syslog сообщения на одном компьютере.
# ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
# -s $SYSLOG_CLIENT \
# -d $IPADDR 514 -j ACCEPT
# SYSLOG клиент (514)
# -----------------
# ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
# -s $IPADDR 514 \
# -d $SYSLOG_SERVER 514 -j ACCEPT
# ------------------------------------------------------------------
# SMTP сервер (25)
# ----------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \
-s $ANYWHERE $UNPRIVPORTS \
-d $IPADDR 25 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $IPADDR 25 \
-d $ANYWHERE $UNPRIVPORTS -j ACCEPT
# SMTP клиент (25)
# ----------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $ANYWHERE 25 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR $UNPRIVPORTS \
-d $ANYWHERE 25 -j ACCEPT
# ------------------------------------------------------------------
# IMAP сервер (143)
# -----------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \
-s $ANYWHERE $UNPRIVPORTS \
-d $IPADDR 143 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $IPADDR 143 \
-d $ANYWHERE $UNPRIVPORTS -j ACCEPT
# POP сервер (110)
# -----------------
# ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \
# -s $ANYWHERE $UNPRIVPORTS \
# -d $IPADDR 110 -j ACCEPT
# ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y \
# -s $IPADDR 110 \
# -d $ANYWHERE $UNPRIVPORTS -j ACCEPT
# ------------------------------------------------------------------
# Исходящие TRACEROUTE
# -------------------
ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
-s $IPADDR $TRACEROUTE_SRC_PORTS \
-d $ANYWHERE $TRACEROUTE_DEST_PORTS -j ACCEPT
# ----------------------------------------------------------------------------
# Включение регистрации для избранных заблокированных пакетов 
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \
-d $IPADDR -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-d $IPADDR $PRIVPORTS -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-d $IPADDR $UNPRIVPORTS -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 5 -d $IPADDR -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 13:255 -d $IPADDR -j DENY -l
# ----------------------------------------------------------------------------
;;
stop)
echo -n "Shutting Firewalling Services: "
# Remove all existing rules belonging to this filter
ipchains -F
# Delete all user-defined chain to this filter
ipchains -X
# Reset the default policy of the filter to accept.
ipchains -P input ACCEPT
ipchains -P output ACCEPT
ipchains -P forward ACCEPT
;;
status)
status firewall
;;
restart|reload)
$0 stop
$0 start
;;
*)
echo "Usage: firewall {start|stop|status|restart|reload}"
exit 1
esac
exit 0

Сделайте этот скрипт исполняемым и измените права доступа

[root@deep /]# chmod 700 /etc/rc.d/init.d/firewall
[root@deep /]# chown 0.0 /etc/rc.d/init.d/firewall

Создайте символическую rc.d ссылку для вашего Firewall следующей командой:

[root@deep /]# chkconfig --add firewall [root@deep /]# chkconfig --level 345 firewall on

Сейчас ваши правила для firewall готовы к использованию с System V init (System V init запускает все нормальные процессы, которые надо стартовать во время загрузки системы) и будут автоматически стартовать при каждой загрузке сервера.

Ручная остановка firewall:

[root@deep /]# /etc/rc.d/init.d/firewall stop
Shutting Firewalling Services: 	[ OK ]

Запуск firewall вручную:

[root@deep /]# /etc/rc.d/init.d/firewall start
Starting Firewalling Services: 	[ OK ]

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

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

Глава 8 Сетевой брандмауэр с поддержкой маскарадинга и форвардинга

В этой главе
Маскарадинг и форвардинг в Linux
Создание ядра с поддержкой маскарада и форвардинга.
Конфигурация скрипта "/etc/rc.d/init.d/firewall" шлюза.
Запрещение доступа к некоторым адресам
Административная утилита IPCHAINS

Маскарадинг и форвардинг в Linux

Краткий обзор.

Конфигурирование Linux сервера на маскарадинг и форвардинг трафика из внутренней локальной сети, имеющей приватные адреса (192.168.1.0/24), в Интернет требует специальных настроек ядра и вашего конфигурационного скрипта брандмауэра. Этот вид установок известен как Шлюз. Данная конфигурация должна быть установлена, только если у вас возникнет в этом необходимость, поэтому ей посвящена отдельная глава.

Создание ядра с поддержкой маскарада и форвардинга.

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

Networking options:
Network firewalls (CONFIG_FIREFALL) [N] Y
IP:Firewalling (CONFIG_IP_FIREWALL) [N] Y
IP:TCP syncookie support (CONFIG_SYN_COOKIES) [N] Y

ЗАМЕЧАНИЕ. Если при создание ядра вы использовали материалы из главы 3, то все необходимые опции ("Network firewalls, IP:Firewalling и IP:TCP syncookie support") были отмечены.

IP маскарадинг и IP ICMP маскарадинг требуются только для шлюза.

IP:Masquerading (CONFIG_IP_MASQUERADE) [N] Y
IP:ICMP Masquerading (CONFIG_IP_MASQUERADE_ICMP) [N] Y

Маскарадинг необходим, если один из компьютеров вашей локальной сети, для которой вашей Linux сервер (или Шлюз) является брандмауэром, пытается послать пакеты в Интернет и шлюз "притворяется" этим компьютером. Другими словами, при пересылке всех пакетов из внутренней сети во внешнюю, шлюз делает вид, что все пакеты идут от него. Это работает в обе стороны, если внешний хост отвечает, то шлюз будет пересылать все пакеты во внутреннюю сеть нужному компьютеру. В результате все внутренние компьютеры полностью не видимы для внешнего мира, но при этом имеют туда доступ и могут получать оттуда ответы.

IP маскарадинг работает только если у вас включен IP форвардинг. Эта возможность по умолчанию отключена и что бы включить ее используйте следующие команды:

Под Red Hat 6.1

[root@deep /]# echo "1" > /proc/sys/net/ipv4/ip_forward

Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера. В Red Hat 6.1 это можно также сделать внеся изменения в файл "/etc/sysconfig/network":

FORWARD_IPV4="false"

Должен читаться:

FORWARD_IPV4="yes"

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

[root@deep /]# /etc/rc.d/init.d/network restart
Bringing up interface lo	[ OK ]
Bringing up interface eth0	[ OK ]
Bringing up interface eth1	[ OK ]

Лично я предпочитаю второй способ включения форвардинга.

Под Red Hat 6.2:

Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:

# Enable packet forwarding
net.ipv4.ip_forward = 1

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

[root@deep /]# /etc/rc.d/init.d/network restart
Setting network parameters	[ OK ]
Bringing up interface lo	[ OK ]
Bringing up interface eth0	[ OK ]
Bringing up interface eth1	[ OK ]

ЗАМЕЧАНИЕ. Строка IP forwarding, введенная выше, нужна только если вы ответили "Yes" на вопрос "IP:Masquerading (CONFIG_IP_MASQUERADE)" при конфигурировании ядра и решили сделать из сервера шлюз с маскарадингом для вашей внутренней сети.

Если вы включили IP Masquerading, тогда будут автоматически скомпилированы модули ip_masq_ftp.o (для обмена файлов по протоколу ftp), ip_masq_irc.o (для irc чатов), ip_masq_quake.o (догадайтесь сами для чего он), ip_masq_vdolive.o (для VDOLive видео), ip_masq_cuseeme.o (для CU-SeeMe broadcasts) и ip_masq_raudio.o (для RealAudio). Они нужны, чтобы работал маскарадинг для этих протоколов. Вам нужно будет создать модульное ядро, ответив Yes на вопрос "Enable loadable module support (CONFIG_MODULES)", вместо монолитного, чтобы разрешить использование функции маскарадинга и модулей подобных ip_masq_ftp.o.

Основной код маскарадинга, включаемый опцией "IP: masquerading", обрабатывает только TCP или UDP пакеты (и ICMP ошибки для существующих соединений). Опция IP:ICMP Masquerading включает дополнительную поддержку для маскарадинга ICMP пакетов, таких как ping или исследований проводимых программой tracer из Windows 95.

ЗАМЕЧАНИЕ. Помните, что у других серверов, например, Веб или почтового, эти опции включать не надо, так как они имеют постоянно присвоенный им IP адрес или не выступают в роли Шлюза для внутренней сети.

Некоторые моменты для обсуждения.

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

  1. На шлюзе должны быть запущены только самые необходимые приложения;
  2. Шлюз должен строго ограничивать типы и число протоколов проходящих через него (протоколы потенциально опасные, например, telnet и ftp);
  3. К любым системам, хранящим конфиденциальную информацию, не должно быть прямого доступа из Интернет.

Конфигурация скрипта "/etc/rc.d/init.d/firewall" для Шлюза.

Это конфигурационный скрипт для шлюза. Он позволяет неограниченный трафик через Loopback интерфейс, ICMP, DNS сервер и клиент (53), SSH сервер и клиент (22), HTTP сервер и клиент (80), HTTPS сервер и клиент (443), POP клиент (110), NNTP NEWS клиент (119), SMTP сервер и клиент (25), IMAP сервер (143), IRC клиент (6667), ICQ клиент (4000), FTP клиент (20, 21), RealAudio / QuickTime клиент и исходящий TRACEROUTE.

Если вы не хотите использовать какие-нибудь сервисы открытые в этом файле по умолчанию, закомментируйте их, добавив в начало строки символ "#". Если же вы хотите использовать сервисы, которые я запретил - удалите символ комментария "#". Если вы настраиваете на сервере маскарадинг, не забудьте раскомментировать модули необходимые для маскарадинга нужных вам сервисов (ip_masq_irc.o, ip_masq_raudio.o и т.д) в секции "MODULES MASQUERADING".

Создайте скрипт firewall (touch /etc/rc.d/init.d/firewall) на шлюзе:

#!/bin/sh
#
# ----------------------------------------------------------------------------
# Last modified by Gerhard Mourani: 04-25-2000
# ----------------------------------------------------------------------------
# Copyright (C) 1997, 1998, 1999 Robert L. Ziegler
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for educational, research, private and non-profit purposes,
# without fee, and without a written agreement is hereby granted.
# This software is provided as an example and basis for individual firewall
# development. This software is provided without warranty.
#
# Any material furnished by Robert L. Ziegler is furnished on an
# "as is" basis. He makes no warranties of any kind, either expressed
# or implied as to any matter including, but not limited to, warranty
# of fitness for a particular purpose, exclusivity or results obtained
# from use of the material.
# ----------------------------------------------------------------------------
#
# Invoked from /etc/rc.d/init.d/firewall.
# chkconfig: - 60 95
# description: Starts and stops the IPCHAINS Firewall \
# used to provide Firewall network services.
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
if [ ${NETWORKING} = "no" ]
then
exit 0
fi
if [ ! -x /sbin/ipchains ]; then
exit 0
fi
# See how we were called.
case "$1" in
start)
echo -n "Starting Firewalling Services: "
# Некоторые определения для упрощения управления.
# ----------------------------------------------------------------------------
# EDIT THESE TO SUIT YOUR SYSTEM AND ISP.
EXTERNAL_INTERFACE="eth0" # Интерфейс подключенный к Интернет
LOCAL_INTERFACE_1="eth1" # Внутренний LAN интерфейс
LOOPBACK_INTERFACE="lo" # loopback интерфейс
IPADDR="my.ip.address" # Ваш  IP адрес
LOCALNET_1="192.168.1.0/24" # Диапазон внутренних адресов, которые вы используете
IPSECSG="my.ipsecsg.address" # разделяемый пробелами список удаленных VPN шлюзов
FREESWANVI="ipsec0" # разделяемый пробелам список виртуальных интерфейсов
ANYWHERE="any/0" # Совпадает с любыми  IP адресами
NAMESERVER_1="my.name.server.1" # 1-й DNS сервер
NAMESERVER_2="my.name.server.2" # 2-й DNS сервер
MY_ISP="my.isp.address.range/24" # диапазон адресов ISP & NOC
SMTP_SERVER="my.smtp.server" # Ваш сервер концентратор почты.
POP_SERVER="my.pop.server" # Внешний pop сервер, если любой
NEWS_SERVER="my.news.server" # Внешний news сервер, если любой
SYSLOG_SERVER="syslog.internal.server" # Ваш внутренний сервер syslog
LOOPBACK="127.0.0.0/8" # Зарезервированный диапазон loopback адресов
CLASS_A="10.0.0.0/8" # Приватная сеть класса A
CLASS_B="172.16.0.0/12" # Приватная сеть класса B
CLASS_C="192.168.0.0/16" # Приватная сеть класса C
CLASS_D_MULTICAST="224.0.0.0/4" # Широковещательные адреса класса D
CLASS_E_RESERVED_NET="240.0.0.0/5" # Зарезервированные адреса класса E
BROADCAST_SRC="0.0.0.0" # Широковещательный адрес источника
BROADCAST_DEST="255.255.255.255" # Широковещательный адрес получателя
PRIVPORTS="0:1023" # Диапазон привилегированных портов
UNPRIVPORTS="1024:65535" # Диапазон непривилегированных портов
# ----------------------------------------------------------------------------
# SSH стартует на 1023 и работает до 513 для
# каждого дополнительного одновременно входящего соединения.
SSH_PORTS="1022:1023" # диапазон привилегированных портов для SSH
# traceroute обычно использует -S 32769:65535 -D 33434:33523
TRACEROUTE_SRC_PORTS="32769:65535"
TRACEROUTE_DEST_PORTS="33434:33523"
# ----------------------------------------------------------------------------
# Политика по умолчанию DENY
# Явно разрешаются входящие и исходящие соединения
# Удаления всех существующих правил принадлежащих этому фильтру
ipchains -F
# Очистка всех существующих правил и пользовательских цепочек
ipchains -X
# Установка политики по умолчанию deny.
# Don't even bother sending an error message back.
ipchains -P input DENY
ipchains -P output DENY
ipchains -P forward DENY
# установка таймаута для маскарадинга в 10 часов для tcp соединений
ipchains -M -S 36000 0 0
# Не перенаправлять фрагменты. Предварительно их собирать.
ipchains -A output -f -i $LOCAL_INTERFACE_1 -j DENY
# ----------------------------------------------------------------------------
# MODULES MASQUERADING
# Раскомментируйте все необходимые вам модули перечисленные ниже
# Эти модели нужны для маскарадинга их собственных сервисов.
/sbin/modprobe ip_masq_ftp
/sbin/modprobe ip_masq_raudio ports=554,7070,7071,6970,6971
/sbin/modprobe ip_masq_irc
#/sbin/modprobe ip_masq_vdolive
#/sbin/modprobe ip_masq_cuseeme
#/sbin/modprobe ip_masq_quake
# ----------------------------------------------------------------------------
# LOOPBACK
# Неограниченный трафик на loopback интерфейсe.
ipchains -A input -i $LOOPBACK_INTERFACE -j ACCEPT
ipchains -A output -i $LOOPBACK_INTERFACE -j ACCEPT
# ----------------------------------------------------------------------------
# Сетевые вампиры
# Запрещение доступа jerks
# /etc/rc.d/rc.firewall.blocked содержит список
# ipchains -A input -i $EXTERNAL_INTERFACE -s address -j DENY
# правил для блокирования любого доступа.
# Сброс любых соединений от проблемных сайтов
#if [ -f /etc/rc.d/rc.firewall.blocked ]; then
# . /etc/rc.d/rc.firewall.blocked
#fi
# ----------------------------------------------------------------------------
# SPOOFING & BAD ADDRESSES
# Сброс поддельных пакетов.
# Игнорирование заведомо неправильных адресов отправителя.
# Защита вас от отправки пакетов с плохими адресами.
# Блокирование поддельных пакетов имеющих ваш адрес, как адрес отправителя.
ipchains -A input -i $EXTERNAL_INTERFACE -s $IPADDR -j DENY -l
# Блокирование пакетов идущих как бы в или из приватной сети класса A
ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_A -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_A -j DENY -l
ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_A -j REJECT -l
ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_A -j REJECT -l
# Блокирование пакетов идущих как бы в или из приватной сети класса B
ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_B -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_B -j DENY -l
ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_B -j REJECT -l
ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_B -j REJECT -l
# Блокирование пакетов идущих как бы в или из приватной сети класса C
# ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_C -j DENY -l
# ipchains -A input -i $EXTERNAL_INTERFACE -d $CLASS_C -j DENY -l
# ipchains -A output -i $EXTERNAL_INTERFACE -s $CLASS_C -j REJECT -l
# ipchains -A output -i $EXTERNAL_INTERFACE -d $CLASS_C -j REJECT -l
# Блокирование пакетов идущих как из loopback интерфейса
ipchains -A input -i $EXTERNAL_INTERFACE -s $LOOPBACK -j DENY -l
ipchains -A output -i $EXTERNAL_INTERFACE -s $LOOPBACK -j REJECT -l
# Блокирование пакетов с широковещательным адресом в качестве адреса отправителя
ipchains -A input -i $EXTERNAL_INTERFACE -s $BROADCAST_DEST -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -d $BROADCAST_SRC -j DENY -l
# Блокирование широковещательных адресов класса D (in.h) (NET-3-HOWTO)
# Широковещательный адрес не может быть адресом отправителя.
# Широковещание использует UDP.
ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_D_MULTICAST -j DENY -l
# Блокирование зарезервированных адресов класса E
ipchains -A input -i $EXTERNAL_INTERFACE -s $CLASS_E_RESERVED_NET -j DENY -l
# Блокирование адресов определенных как зарезервированные IANA
# 0.*.*.*, 1.*.*.*, 2.*.*.*, 5.*.*.*, 7.*.*.*, 23.*.*.*, 27.*.*.*
# 31.*.*.*, 37.*.*.*, 39.*.*.*, 41.*.*.*, 42.*.*.*, 58-60.*.*.*
# 65-95.*.*.*, 96-126.*.*.*, 197.*.*.*, 201.*.*.* (?), 217-223.*.*.*
ipchains -A input -i $EXTERNAL_INTERFACE -s 1.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 2.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 5.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 7.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 23.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 27.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 31.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 37.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 39.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 41.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 42.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 58.0.0.0/7 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 60.0.0.0/8 -j DENY -l
#65: 01000001 - /3 includes 64 - need 65-79 spelled out
ipchains -A input -i $EXTERNAL_INTERFACE -s 65.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 66.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 67.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 68.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 69.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 70.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 71.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 72.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 73.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 74.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 75.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 76.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 77.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 78.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 79.0.0.0/8 -j DENY -l
#80: 01010000 - /4 masks 80-95
ipchains -A input -i $EXTERNAL_INTERFACE -s 80.0.0.0/4 -j DENY -l
# 96: 01100000 - /4 makses 96-111
ipchains -A input -i $EXTERNAL_INTERFACE -s 96.0.0.0/4 -j DENY -l
#126: 01111110 - /3 includes 127 - need 112-126 spelled out
ipchains -A input -i $EXTERNAL_INTERFACE -s 112.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 113.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 114.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 115.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 116.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 117.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 118.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 119.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 120.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 121.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 122.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 123.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 124.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 125.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 126.0.0.0/8 -j DENY -l
#217: 11011001 - /5 includes 216 - need 217-219 spelled out
ipchains -A input -i $EXTERNAL_INTERFACE -s 217.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 218.0.0.0/8 -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -s 219.0.0.0/8 -j DENY -l
#223: 11011111 - /6 masks 220-223
ipchains -A input -i $EXTERNAL_INTERFACE -s 220.0.0.0/6 -j DENY -l
# ----------------------------------------------------------------------------
# ICMP
# Предотвращение denial of service атак, базирующихся на  ICMP bombs, filter
# incoming Redirect (5) и outgoing Destination Unreachable (3).
# Заметим, что отключение Destination Unreachable (3), обычно, не целесообразно
# так как он используется при согласовании размера фрагмента пакета.
# Для двунаправленного ping.
# Типы сообщений: Echo_Reply (0), Echo_Request (8)
# Для предотвращения атак ограничьте адрес отправителя диапазоном Ip адресов вашего ISP.
#
# Для исходящих traceroute.
# Типы сообщений: INCOMING Dest_Unreachable (3), Time_Exceeded (11)
# default UDP base: 33434 to base+nhops-1
#
# Для входящих traceroute.
# Типы сообщений: OUTGOING Dest_Unreachable (3), Time_Exceeded (11)
# Для блокирования этого, запретите  OUTGOING 3 и 11
# 0: echo-reply (pong)
# 3: destination-unreachable, port-unreachable, fragmentation-needed, etc.
# 4: source-quench
# 5: redirect
# 8: echo-request (ping)
# 11: time-exceeded
# 12: parameter-problem
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 0 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 3 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 4 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 11 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 12 -d $IPADDR -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $MY_ISP 8 -d $IPADDR -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
-s $IPADDR 0 -d $MY_ISP -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
-s $IPADDR 3 -d $MY_ISP -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
-s $IPADDR 4 -d $ANYWHERE -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
-s $IPADDR 8 -d $ANYWHERE -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
-s $IPADDR 12 -d $ANYWHERE -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p icmp \
-s $IPADDR 11 -d $MY_ISP -j ACCEPT
# ----------------------------------------------------------------------------
# UDP INCOMING TRACEROUTE
# traceroute обычно использует -S 32769:65535 -D 33434:33523
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-s $MY_ISP $TRACEROUTE_SRC_PORTS \
-d $IPADDR $TRACEROUTE_DEST_PORTS -j ACCEPT -l
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-s $ANYWHERE $TRACEROUTE_SRC_PORTS \
-d $IPADDR $TRACEROUTE_DEST_PORTS -j DENY -l
# ----------------------------------------------------------------------------
# DNS сервер
# ----------
# DNS: полный сервер
# сервер/клиент к серверу запросы и ответы
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-s $ANYWHERE $UNPRIVPORTS \
-d $IPADDR 53 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
-s $IPADDR 53 \
-d $ANYWHERE $UNPRIVPORTS -j ACCEPT
# DNS клиент (53)
# ---------------
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-s $NAMESERVER_1 53 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
-s $IPADDR $UNPRIVPORTS \
-d $NAMESERVER_1 53 -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-s $NAMESERVER_2 53 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
-s $IPADDR $UNPRIVPORTS \
-d $NAMESERVER_2 53 -j ACCEPT
# TCP запросы от клиентов разрешены если UDP закончились
# ошибкой. Это случается очень редко. Обычно, клиенты используют
# TCP для пересылки зон от первичного к вторичному серверу
# или хакером.
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $NAMESERVER_1 53 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR $UNPRIVPORTS \
-d $NAMESERVER_1 53 -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $NAMESERVER_2 53 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR $UNPRIVPORTS \
-d $NAMESERVER_2 53 -j ACCEPT
# ----------------------------------------------------------------------------
# Принимаем TCP только для избранных портов
# ---------------------------------
# ------------------------------------------------------------------
# SSH сервер (22)
# ---------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \
-s $ANYWHERE $UNPRIVPORTS \
-d $IPADDR 22 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $IPADDR 22 \
-d $ANYWHERE $UNPRIVPORTS -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \
-s $ANYWHERE $SSH_PORTS \
-d $IPADDR 22 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $IPADDR 22 \
-d $ANYWHERE $SSH_PORTS -j ACCEPT
# SSH клиент (22)
# ---------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $ANYWHERE 22 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR $UNPRIVPORTS \
-d $ANYWHERE 22 -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $ANYWHERE 22 \
-d $IPADDR $SSH_PORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR $SSH_PORTS \
-d $ANYWHERE 22 -j ACCEPT
# ------------------------------------------------------------------
# HTTP клиент (80)
# ----------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $ANYWHERE 80 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR $UNPRIVPORTS \
-d $ANYWHERE 80 -j ACCEPT
# ------------------------------------------------------------------
# HTTPS клиент (443)
# ------------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $ANYWHERE 443 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR $UNPRIVPORTS \
-d $ANYWHERE 443 -j ACCEPT
# ------------------------------------------------------------------
# POP клиент (110)
# ----------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $POP_SERVER 110 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR $UNPRIVPORTS \
-d $POP_SERVER 110 -j ACCEPT
# ------------------------------------------------------------------
# NNTP NEWS клиент (119)
# ----------------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $NEWS_SERVER 119 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR $UNPRIVPORTS \
-d $NEWS_SERVER 119 -j ACCEPT
# ------------------------------------------------------------------
# FINGER клиент (79)
# ------------------
# ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
# -s $ANYWHERE 79 \
# -d $IPADDR $UNPRIVPORTS -j ACCEPT
# ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
# -s $IPADDR $UNPRIVPORTS \
# -d $ANYWHERE 79 -j ACCEPT
# ------------------------------------------------------------------
# SYSLOG клиент (514)
# -----------------
# ipchains -A output -i $LOCAL_INTERFACE_1 -p udp \
# -s $IPADDR 514 \
# -d $SYSLOG_SERVER 514 -j ACCEPT
# ------------------------------------------------------------------
# AUTH сервер (113)
# -----------------
# Reject лучше чем deny, для пакетов входящих на порт auth. (NET-3-HOWTO)
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \
-s $ANYWHERE \
-d $IPADDR 113 -j REJECT
# AUTH клиент (113)
# -----------------
# ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
# -s $ANYWHERE 113 \
# -d $IPADDR $UNPRIVPORTS -j ACCEPT
# ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
# -s $IPADDR $UNPRIVPORTS \
# -d $ANYWHERE 113 -j ACCEPT
# ------------------------------------------------------------------
# SMTP клиент (25)
# ----------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $ANYWHERE 25 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR $UNPRIVPORTS \
-d $ANYWHERE 25 -j ACCEPT
# ------------------------------------------------------------------
# IRC клиент (6667)
# -----------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $ANYWHERE 6667 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR $UNPRIVPORTS \
-d $ANYWHERE 6667 -j ACCEPT
# ------------------------------------------------------------------
# ICQ клиент (4000)
# -----------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $ANYWHERE 2000:4000 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR $UNPRIVPORTS \
-d $ANYWHERE 2000:4000 -j ACCEPT
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-s $ANYWHERE 4000 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
-s $IPADDR $UNPRIVPORTS \
-d $ANYWHERE 4000 -j ACCEPT
# ------------------------------------------------------------------
# FTP клиент (20, 21)
# -------------------
# исходящий запрос
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $ANYWHERE 21 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR $UNPRIVPORTS \
-d $ANYWHERE 21 -j ACCEPT
# NORMAL режим, канал данных
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \
-s $ANYWHERE 20 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
# NORMAL mode, ответ канал данных
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $IPADDR $UNPRIVPORTS \
-d $ANYWHERE 20 -j ACCEPT
# PASSIVE mode, создание канала данных
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR $UNPRIVPORTS \
-d $ANYWHERE $UNPRIVPORTS -j ACCEPT
# PASSIVE mode, ответ канала данных
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $ANYWHERE $UNPRIVPORTS \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
# ------------------------------------------------------------------
# RealAudio / QuickTime клиент
# ----------------------------
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $ANYWHERE 554 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR $UNPRIVPORTS \
-d $ANYWHERE 554 -j ACCEPT
# TCP - более безопасный метод: 7070:7071
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
-s $ANYWHERE 7070:7071 \
-d $IPADDR $UNPRIVPORTS -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
-s $IPADDR $UNPRIVPORTS \
-d $ANYWHERE 7070:7071 -j ACCEPT
# UDP предпочтительный метод: 6970:6999
# Для машин из LAN, UDP требует модуля маскарадинга RealAudio и
# программу  ipmasqadm.
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-s $ANYWHERE $UNPRIVPORTS \
-d $IPADDR 6970:6999 -j ACCEPT
ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
-s $IPADDR $UNPRIVPORTS \
-d $ANYWHERE $UNPRIVPORTS -j ACCEPT
# ------------------------------------------------------------------
# WHOIS клиент (43)
# -----------------
# ipchains -A input -i $EXTERNAL_INTERFACE -p tcp ! -y \
# -s $ANYWHERE 43 \
# -d $IPADDR $UNPRIVPORTS -j ACCEPT
# ipchains -A output -i $EXTERNAL_INTERFACE -p tcp \
# -s $IPADDR $UNPRIVPORTS \
# -d $ANYWHERE 43 -j ACCEPT
# ------------------------------------------------------------------
# OUTGOING TRACEROUTE
# -------------------
ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
-s $IPADDR $TRACEROUTE_SRC_PORTS \
-d $ANYWHERE $TRACEROUTE_DEST_PORTS -j ACCEPT
# ----------------------------------------------------------------------------
# Неограниченный трафик с локальной сетью.
# Все внутренние машины имеют доступ к firewall-у.
ipchains -A input -i $LOCAL_INTERFACE_1 -s $LOCALNET_1 -j ACCEPT
ipchains -A output -i $LOCAL_INTERFACE_1 -d $LOCALNET_1 -j ACCEPT
# ----------------------------------------------------------------------------
# FreeS/WAN IPSec VPN
# -------------------
# Если вы используете FreeSWAN IPSec VPN, вам нужно заполнить адреса 
# адреса шлюзов в IPSECSG и виртуальные интерфейсы для
# FreeS/Wan IPSEC в параметрах FREESWANVI. Смотрите начало
# этого firewall скрипта для установки параметров.
# IPSECSG это список удаленных шлюзов разделенных пробелами. FREESWANVI это
# список виртуальных интерфейсов для FreeS/Wan IPSEC, разделенных пробелами
# Включите только те, которые фактически используются
# Позволяем IPSEC протокол от удаленных шлюзов на внешний интерфейс
# IPSEC использует три основных типа пакетов:
# IKE использует UDP протокол и 500 порт,
# ESP испоьзует протол номер 50, и
# AH использует протокол номер 51
# ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
# -s $IPSECSG -j ACCEPT
# ipchains -A output -i $EXTERNAL_INTERFACE -p udp \
# -d $IPSECSG -j ACCEPT
# ipchains -A input -i $EXTERNAL_INTERFACE -p 50 \
# -s $IPSECSG -j ACCEPT
# ipchains -A output -i $EXTERNAL_INTERFACE -p 50 \
# -d $IPSECSG -j ACCEPT
# ipchains -A input -i $EXTERNAL_INTERFACE -p 51 \
# -s $IPSECSG -j ACCEPT
# ipchains -A output -i $EXTERNAL_INTERFACE -p 51 \
# -d $IPSECSG -j ACCEPT
# Разрешаем весь трафик к виртуальному интерфейсу FreeS/WAN
# ipchains -A input -i $FREESWANVI \
# -s $ANYWHERE \
# -d $ANYWHERE -j ACCEPT
# ipchains -A output -i $FREESWANVI \
# -s $ANYWHERE \
# -d $ANYWHERE -j ACCEPT
# Пересылка  всего из виртуального интерфейса в IPSEC тунель
# ipchains -A forward -i $FREESWANVI \
# -s $ANYWHERE \
# -d $ANYWHERE -j ACCEPT
# Отключение защиты от IP spoofing, чтобы IPSEC работал правильно
# echo 0 > /proc/sys/net/ipv4/conf/ipsec0/rp_filter
# echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
# ----------------------------------------------------------------------------
# Маскарадинг внутреннего трафика.
# Весь внутренний трафик маскарадится.
ipchains -A forward -i $EXTERNAL_INTERFACE -s $LOCALNET_1 -j MASQ
# ----------------------------------------------------------------------------
# Включение регистрации выбранных запрещенных пакетов
ipchains -A input -i $EXTERNAL_INTERFACE -p tcp \
-d $IPADDR -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-d $IPADDR $PRIVPORTS -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -p udp \
-d $IPADDR $UNPRIVPORTS -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 5 -d $IPADDR -j DENY -l
ipchains -A input -i $EXTERNAL_INTERFACE -p icmp \
-s $ANYWHERE 13:255 -d $IPADDR -j DENY -l
# ----------------------------------------------------------------------------
;;
stop)
echo -n "Shutting Firewalling Services: "
# Remove all existing rules belonging to this filter
ipchains -F
# Delete all user-defined chain to this filter
ipchains -X
# Reset the default policy of the filter to accept.
ipchains -P input ACCEPT
ipchains -P output ACCEPT
ipchains -P forward ACCEPT
;;
status)
status firewall
;;
restart|reload)
$0 stop
$0 start
;;
*)
echo "Usage: firewall {start|stop|status|restart|reload}"
exit 1
esac
exit 0

Сделайте этот скрипт исполняемым и измените права доступа

[root@deep /]# chmod 700 /etc/rc.d/init.d/firewall
[root@deep /]# chown 0.0 /etc/rc.d/init.d/firewall

Создайте символическую rc.d ссылку для вашего Firewall следующей командой:

[root@deep /]# chkconfig --add firewall
[root@deep /]# chkconfig --level 345 firewall on

Сейчас ваши правила для firewall готовы к использованию с System V init (System V init запускает все нормальные процессы, которые надо стартовать во время загрузки системы) и будут автоматически стартовать при каждой загрузке сервера.

Ручная остановка firewall:

[root@deep /]# /etc/rc.d/init.d/firewall stop
Shutting Firewalling Services: 	[ OK ]

Запуск firewall вручную:

[root@deep /]# /etc/rc.d/init.d/firewall start
Starting Firewalling Services: 	[ OK ]

Запрещение доступа с некоторых адресов.

Иногда, вы можете встретить адреса с которых вы бы хотели закрыть весь доступ на все ваши сервера. Вы можете создать файл rc.firewall.blocked в каталоге "/etc/rc.d/" и раскомментировать следующие строки в скрипте firewall:

if [ -f /etc/rc.d/rc.firewall.blocked ]; then
. /etc/rc.d/rc.firewall.blocked
fi

Создайте файл rc.firewall.blocked (touch /etc/rc.d/rc.firewall.blocked) и добавьте в него все IP адреса, доступ с которых вы хотите заблокировать. Например,

204.254.45.9
187.231.11.5

Дополнительная документация.

Для получения большей информации, Вы можете прочитать следующие man-ы:

$ ipchains (8) - управление IP firewall-ом
$ ipchains-restore (8) - восстановление цепочек IP firewall-а из stdin
$ ipchains-save (8) - запись цепочек IP firewall-а в stdout

Административная утилита Ipchains.

Опции, описываемые ниже, лишь некоторые из существующих, которые наиболее часто используются. Для получения полной информации обо всех параметрах запуска ipchains читайте страницы руководства (man) и документацию.

ipchains

Утилита ipchains используется для администрирования firewall-а на Linux. Мы можем использовать ее для установки правил firewall-а, так как мы уже делали в этой книге. Когда правила созданы, мы можем, используя ряд команд, поддерживать и контролировать их.

∙ Для просмотра всех правил в выбранной цепочке используйте команду:

[root@deep /]# ipchains -L

Если название цепочки не определено, то выводятся все правила.

∙ Для получения всех правил в цепочке input используйте команду:

[root@deep /]# ipchains -L input

∙ Для получения всех правил в цепочке output используйте команду:

[root@deep /]# ipchains -L output

∙ Для получения всех правил в цепочке forward используйте команду:

[root@deep /]# ipchains -L forward

Это, конечно, работает только, если вы настроили маскарадинг на вашем сервере.

∙ Для получения списка всех правил маскарадинга в выбранной цепочке используйте команду:

[root@deep /]# ipchains -ML

Эта опция позволяет просматривать текущие маскарадные соединения. Чтобы эта команда работала, вам надо на сервере иметь настроенный маскарадинг.

∙ Для получения списка правил в цифровом формате (выводятся адреса, а не имена) в выбранной цепочке используйте команду:

[root@deep /]# ipchains -nL
Назад Оглавление Вперед

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

Часть IV Рекомендации связанные с программным обеспечением

В этой части
Функциональные возможности компилятора
Глава 10 Программы обеспечения безопасности (Утилиты контроля)
Программы обеспечения безопасности (Сетевые сервисы)
Программы обеспечения безопасности (Целостность системы)
Программы обеспечения безопасности (Управление и ограничения)
Серверное программное обеспечение (BIND/Сервис DNS)
Серверное программное обеспечение (Почтовый сервис)
Серверное программное обеспечение (Сетевой сервис шифрования)
Серверное программное обеспечение (Сервис баз данных)
Серверное программное обеспечение (Прокси сервис)
Серверное программное обеспечение (Веб сервис)
Опциональные компоненты устанавливаемые с веб-сервером Apache
Серверное программное обеспечение (Файловый сервис)

Глава 9 Функциональные возможности компилятора

В этой главе
Необходимые пакеты
Почему мы выбираем использование тарболов?
Компиляция программного обеспечения на вашей системе
Создание и инсталляция программ на вашей системе
Редактирование файлов с vi
Некоторые последние комментарии

Общий обзор.

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

Необходимые пакеты.

Следующие пакеты нужны, чтобы осуществлять компиляцию на вашей системе после создания нового ядра. Эти пакеты находятся на Red Hat Linux 6.1 или 6.2 Part 1 CD-ROM в каталоге RedHat/RPMS:

Red Hat 6.1 Red Hat 6.2
autoconf-2.13-5.noarch.rpm
m4-1.4-12.i386.rpm
automake-1.4-5.noarch.rpm
dev86-0.14.9-1.i386.rpm
bison-1.28-1.i386.rpm
byacc-1.9-11.i386.rpm
cdecl-2.5-9.i386.rpm
cpp-1.1.2-24.i386.rpm
cproto-4.6-2.i386.rpm
ctags-3.2-1.i386.rpm
egcs-1.1.2-24.i386.rpm
ElectricFence-2.1-1.i386.rpm
flex-2.5.4a-7.i386.rpm
gdb-4.18-4.i386.rpm
kernel-headers-2.2.12-20.i386.rpm
glibc-devel-2.1.2-11.i386.rpm
make-3.77-6.i386.rpm
patch-2.5-9.i386.rpm
autoconf-2.13-5.noarch.rpm
m4-1.4-12.i386.rpm
automake-1.4-6.noarch.rpm
dev86-0.15.0-2.i386.rpm
bison-1.28-2.i386.rpm
byacc-1.9-12.i386.rpm
cdecl-2.5-10.i386.rpm
cpp-1.1.2-30.i386.rpm
cproto-4.6-3.i386.rpm
ctags-3.4-1.i386.rpm
egcs-1.1.2-30.i386.rpm
ElectricFence-2.1-3.i386.rpm
flex-2.5.4a-9.i386.rpm
gdb-4.18-11.i386.rpm
kernel-headers-2.2.14-5.0.i386.rpm
glibc-devel-2.1.3-15.i386.rpm
make-3.78.1-4.i386.rpm
patch-2.5-10.i386.rpm

ЗАМЕЧАНИЕ. Лучше все программы описанные выше инсталлировать одновременно, чтобы избежать сообщений об ошибках зависимостей от RPM. Если вы следовали по всем шагам, описанным в главе 2 "Инсталляция вашего Linux сервера", то все эти пакеты уже проинсталлированы в вашей системе и вам нет необходимости заново их переинсталлировать.

RPM команда для инсталляции пакета:

[root@deep /]# rpm -Uvh foo-1.0-2.i386.rpm

RPM команда для проверки, инсталлирован ли пакет или нет:

[root@deep /]# rpm -q foo

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

Для перемещения rpm на дискету:

[root@deep /]# mount /dev/fd0 /mnt/floppy/
[root@deep /]# mv /bin/rpm /mnt/floppy
[root@deep /]# umount /mnt/floppy/

Для возврата rpm в оригинальный каталог:

[root@deep /]# mount /dev/fd0 /mnt/floppy/
[root@deep /]# cp /mnt/floppy/rpm /bin/
[root@deep /]# umount /mnt/floppy/

ЗАМЕЧАНИЕ. Никогда не деинсталлируйте пакет RPM полностью с вашего сервера, иначе вы не сможете проинсталлировать его по новой, потому что для инсталляции любого rpm пакета требуется наличие программы rpm.

Почему мы выбираем использование тарболов?

Все дистрибьюции Red Hat поставляются в RPM файлах, которые известны также как "пакеты". Этот способ поставки программ характеризуется упрощением процесса их инсталляции, обновления и удаления. Однако, в мире UNIX, стандартом де-факто для пакетов программ является тарбол. Тарбол это просто сжатые файлы, которые могут быть прочитаны и раскрыты при помощи утилиты tar. Инсталляция программ из тарбола более тяжелый процесс, чем из rpm. Так почему мы будем использовать тарболы?

  1. К сожалению требуется несколько недель, чтобы вышел rpm пакет новой версии программы, так как разработчики выпускают их обычно в тарболе.
  2. Когда разработчики и поставщики выпускают rpm пакет, они включают в них много разных опций, часто не нужных. Эти организации и компании не знают какие опции вам нужны, а какие нет, поэтому включают наиболее часто используемые.
  3. Часто RPM не оптимизированы под определенный процессор; компании подобные Red Hat создают пакет базирующийся на стандартном PC. Это позволяет инсталлировать программы на всех компьютерах, начиная с i386.
  4. Иногда, вы скачиваете и инсталлируете RPM, которые другие люди создали и сделали доступным для ваших целей. В зависимости от того, как создавался пакет, могут возникать множество разных проблем, таких как ошибки, проблемы с безопасностью и прочие, описанные выше.

Компиляция программного обеспечения на вашей системе

Программы - это то, что компьютер может выполнять. Изначально, кто-то написал "исходные коды" на языке программирования который он/она знает (например, C, C++ и т.д.). Исходные коды обрабатываются компилятором, который преобразует инструкции в двоичные коды, подходящие под требуемый процессор (например, 386). Современным форматом исполняемых фалов является elf. Программист передает исходные коды компилятору и получает исполняемые файлы. Часто процесс компиляции завершается ошибкой или полученная программа не работает как надо. Половину времени процесса программирования составляет отслеживание и исправление этих проблем.

Для начинающих имеется много аспектов и новых терминов, относящихся к компиляции, которые вы должны знать. Ниже описаны некоторые из них:

Multiple Files
Программы, состоящие из одного файла встречаются редко. Обычно в него входит несколько файлов (скажем, *.c, *.cpp и т.д.), каждый из которых компилируется в объектные коды, а затем они компонуются в исполняемый файл. Компилятор обычно используется для компоновки и вызывает в заключение программу ld.

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

Библиотеки (Libraries).
Программы могут компоноваться не только в объектные файлы, но в библиотеки, которые содержат наборы таких файлов. Существует две формы компоновки библиотек: статическая, когда коды встраиваются в исполняемые файлы, и динамическая, когда коды собираются в момент запуска программы.

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

Ошибки при компиляции и компоновке.
Ошибки при компиляции и компоновке часто возникают из-за недосмотра и неправильного использования языка. Проверьте, что для функций, которые вы вызываете используются правильные заголовочные файлы. Неупомянутые символы (Unreferenced symbols) являются признаком незавершенности шага компоновки. Также проверьте, все ли необходимые библиотеки (GLIBC) и утилиты (GCC, DEV86, AUTOMAKE и т.д.) установлены на вашей системе.

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

Создание и инсталляция программ на вашей системе

С 10 по 20 главы вы увидите, что мы используем много разных команд компиляции для создания и инсталляции программ на сервере. Эти команды совместимы с UNIX и используются на всех вариантах *nix систем для компиляции и инсталляции программного обеспечения.

Ниже приводятся шаги необходимые для компиляции и инсталляции программного обеспечения из тарбола.

1. Вы должны скачать тарбол с сервера, которому доверяете. Обычно, это основной сервер программы

2. После того как тарбол скачен, перейдите в каталог /vat/tmp (заметим, что другой путь также возможен, это решать вам) и раскройте архив (как root), обычно, следующей командой:

[root@deep /]# tar xzpf foo.tar.gz

Вышеприведенная команда извлечет все файлы из архива foo.tar.gz и поместит их в новый каталог с именем этой программы, который создаст автоматически в месте, где вы сейчас расположены.

Опция "x" говорит tar извлечь все файлы из архива.
Опция "z" говорит, что tar архив был сжат при помощи gzip.
Опция "p" сохраняет оригинал и права доступа к файлам в том виде, каком они существовали при создании архива.
Опция "f" говорит tar, что следующий аргумент это имя файла.

После того как тарбол был раскрыт, вы почти наверняка сможете найти в каталоге файлы README или INSTALL с инструкциями, как приготовить программное обеспечение к использованию. Скорее всего, вам надо будет ввести следующие команды:

./configure
make
make install

configure - будет конфигурировать программное обеспечение, чтобы гарантировать, что ваша система имеет функциональные возможности и библиотеки необходимые для успешной компиляции пакета. "make" будет компилировать все исходные файлы в исполняемые. "make install" - инсталлирует исполняемые и все сопутствующие файлы в определенное место.

Другие специальные команды, которые вы встретите в этой книге:

make depend
strip
chown

"make depand" будет создавать необходимые зависимости для различных файлов. "strip" будет удалять все символы из объектных файлов. В результате все исполняемые файлы будут меньшего размера. Это улучшит производительность программы, так как системе будет необходимо читать меньше строк при исполнении данного двоичного файла. "chown" будет устанавливать правильных владельцев файлов и разрешения для групп.

Редактирование файлов с vi

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

i - говорить vi вставить текст перед курсором.
a - говорить vi добавить текст после курсора.
dd - говорить vi удалить текущую строку.
x - говорить vi удалить текущий символ.
Esc - говорить vi выйти из режима вставки или добавления.
u - говорить vi отменить действие последней команды.
Ctrl+f - прокрутить текст на одну страницу вверх.
Ctrl+b - прокрутить текст на одну страницу вниз.
/string - искать строку.
:f - вывести имя файла и текущий номер строки
:q - закончить редактирование
:q! - выйти из редактора без записи изменений
:wq - записать изменения и выйти из редактора

Некоторые последние комментарии

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

В этой части книги, все программное обеспечение перечисленное в главах с 10 по 21 необязательно, и зависит от того, что необходимо вашему серверу (например, какие задачи будет решать ваш сервер и для какой части Интернет/Интранет). Хотя некоторые программы могут быть очень важны для вас. Полезно заменить telnet на ssh для более безопасного удаленного администрирования сервера. Другая интересная программа - Tripware, которая помогает следить за целостностью определенных программ.


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

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

Часть VI Приложения

В этой части
Приложение A Советы, рекомендации и задачи администрирования
Приложение B Requests for Comments (RFC), связанные с информацией приведенной в книге.

Приложение A Советы, рекомендации и задачи администрирования

Некоторые советы в этом разделе специфичны для Linux систем.. Большинство подходит для всех UNIX систем.

1.0 Утилита "du"

Вы можете использовать утилиту "du" для оценки дискового пространства, занимаемого файлами. Например, чтобы определить размер в мегабайтах каталогов "/var/log/" и "/home/" используйте команду:

[root@deep /]# du -sh /var/log /home
3.5M /var/log 350M /home

Запомните, что вышеприведенная команда покажет текущий размер ваших данных. Сейчас, например, вы узнали, что "/home" занимает 350M, теперь вы можете перейти внутрь его и определить, где расположены самые большие файлы.

[root@deep /]# cd /home/
[root@deep /home]# du -sh *
343M     admin
11k      ftp
6.8M     httpd
12k      lost+found
6.0k     named
6.0k     smbclient
6.0k     test
8.0k     www

ЗАМЕЧАНИЕ. Вы можете добавить эту команду в ваш crontab, чтобы получать отчеты об использовании дискового пространства по почте.

1.1 Поиск маршрута по которому пакеты пересылаются с вашего компьютера на удаленный.

Если вы хотите найти маршрут по которому пакет следует межде вашим и удаленным компьютером, просто используйте следующую команду:

[root@deep /]# traceroute www.redhat.com

traceroute to www.portal.redhat.com (206.132.41.202), 30 hops max, 38 byte packets
1   ppp005.108-253-207.mtl.mt.videotron.net (207.253.108.5) 98.584 ms 1519.806 ms 109.911 ms
2   fa5-1-0.rb02-piex.videotron.net (207.96.135.1) 149.888 ms 89.830 ms 109.914 ms
3   ia-tlpt-bb01-fec1.videotron.net (207.253.253.53) 149.896 ms 99.873 ms 139.930 ms
4   ia-cduc-bb02-ge2-0.videotron.net (207.253.253.61) 99.897 ms 169.863 ms 329.926 ms
5   if-4-1.core1.Montreal.Teleglobe.net (207.45.204.5) 409.895 ms 1469.882 ms 109.902 ms
6   if-1-1.core1.NewYork.Teleglobe.net (207.45.223.109) 189.920 ms 139.852 ms 109.939 ms
7   206.132.150.133 (206.132.150.133) 99.902 ms 99.724 ms 119.914 ms
8   pos1-0-2488M.wr2.CLE1.gblx.net (206.132.111.89) 189.899 ms 129.873 ms 129.934 ms
9   pos8-0-2488m.wr2.kcy1.globalcenter.net (206.132.111.82) 169.890 ms 179.884 ms 169.933 ms
10 206.132.114.77 (206.132.114.77) 199.890 ms 179.771 ms 169.928 ms
11 pos8-0-2488M.wr2.SFO1.gblx.net (206.132.110.110) 159.909 ms 199.959 ms 179.837 ms
12 pos1-0-2488M.cr1.SNV2.gblx.net (208.48.118.118) 179.885 ms 309.855 ms 299.937 ms
13 pos0-0-0-155M.hr2.SNV2.gblx.net (206.132.151.46) 329.905 ms 179.843 ms 169.936 ms
14 206.132.41.202 (206.132.41.202) 2229.906 ms 199.752 ms 309.927 ms

где <www.redhat.com> имя или ip адрес удаленного хоста.

1.2 Выводить на экран сколько раз обращались к вашему Веб серверу:

Чтобы быстро вывести число обращений к вашему веб серверу используйте следующую команду:

[root@deep /]# grep "GET / HTTP" /var/log/httpd/access_log | wc -l
467

1.3 Одновременная остановка большинства сервисов.

Как root вы можете остановить несколько сервисов одновременно следующей командой:

[root@deep /]# killall httpd smbd nmbd slapd named

Вышеприведенная команда остановит Apache сервер, Samba сервис, LDAP сервер и DNS сервер соответственно.

1.4 Хотите чтобы у всех пользователей на верху терминала выводились часы?

Редактируйте файл profile (vi /etc/profile) и добавьте следующую строку:

PROMPT_COMMAND='echo -ne "\0337\033[2;999r\033[1;1H\033[00;44m\033[K"`date`"\033[00m\0338"'

Результат будет выглядеть так:



1.5 Инсталлирована ли "lsof" на вашем сервере?

Если нет, то инсталлируйте ее и выполните команду "lsof -i". Вы должны получить список портов, которые открыты на вашей машине. Программа lsof полезная утилита, которая говорит какие процессы слушают на каком порту.

[root@deep /]# lsof -i
COMMAND     PID   USER  FD   TYPE  DEVICE SIZE NODE NAME
Inetd       344   root  4u   IPv4   327        TCP  *:ssh (LISTEN)
sendmail    389   root  4u   IPv4   387        TCP  *:smtp (LISTEN)
smbd        450   root  5u   IPv4   452        TCP  deep.openna.com:netbios-ssn (LISTEN)
nmbd        461   root  5u   IPv4   463        UDP  *:netbios-ns
nmbd        461   root  6u   IPv4   465        UDP  *:netbios-dgm
nmbd        461   root  8u   IPv4   468        UDP  deep.openna.com:netbios-ns
nmbd        461   root  9u   IPv4   470        UDP  deep.openna.com:netbios-dgm
named       2599  root  4u   IPv4   3095       UDP  *:32771
named       2599  root  20u  IPv4   3091       UDP  localhost.localdomain:domain
named       2599  root  21u  IPv4   3092       TCP  localhost.localdomain:domain (LISTEN)
named       2599  root  22u  IPv4   3093       UDP  deep.openna.com:domain
named       2599  root  23u  IPv4   3094       TCP  deep.openna.com:domain (LISTEN)


1.6 Запуск команд на удаленном сервере без подключения к нему через протокол ssh

Команда ssh также используется для выполнения команд на удаленной системе без подключения к ней. Результаты выполнения команды выводятся на дисплей и контроль возвращается на локальную систему. Здесь приведен пример, который выводит всех пользователей подключенных к системе.

[admin@deep /]$ ssh mail.openna.com who
admin@mail.openna.com's password:
root    tty1    Dec   2   14:45
admin   tty2    Dec   2   14:45
wahib   pts/0   Dec   2   11:38

1.7 Завершение имени файла

Табулирование окончания имени файла позволяет вам вводить только часть имени. Введите начало имени файла и нажмите [TAB], имя будет завершено за вас. Если больше чем один файл или программа подходят, то раздастся звуковой сигнал и затем после повторного нажатия [TAB] вы получите список подходящих имен.

1.8 Специальные символы

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

Control-d : Если вы находитесь в командном интерпретаторе и нажмете control- d, то вы отключитесь от системы (logged off).

Control-l: Если вы находитесь в командном интерпретаторе и нажмете control-l, то вы очистите экран.

? : Это групповой символ. Он выступает как единичный символ. Если вы зададите в командной строке что-то подобное "m?b", то Linux найдет mob, mib, mub и любые другие буквы/цифры между a-z, 0-9.

* : Этот символ выступает как любые другие символы. Если вы зададите "mi*", то будет использоваться "mit", mim, miiii, miya и все другие слова, начинающиеся с "mi". "m*l" соответствует mill, mull, ml и всему, что начинается с "m" и заканчивается на "l".

[] - Определяет диапазон. Если я запрашиваю m[o,u,i]m, то Linux определяет: mim, mum, mom, если я задаю: m[a-d]m, то это соответствует: mam, mbm, mcm, mdm. Символы [], ? и * обычно используются при копировании, удалении и просмотре каталогов.

ЗАМЕЧАНИЕ. В Linux все зависит от регистра символов. Из-за этого "Bill" и "bill" это не одно и тоже. Это позволяет хранить в одно месте разные файлы с именами "Bill" "bill" "bIll" "biLl" и т.д. Так, при работе с [], вы должны определить заглавные буквы если в любом файле они могут использоваться.


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

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

Приложение B. Requests for Comments (RFC), связанные с информацией приведенной в книге.

Requests for Comments (RFCs) - это набор документов выпущенных Internet Engineering Task Force (IETF) из Network Information Center (NIC), которые представляют новые протоколы и устанавливаемые стандарты для стека протоколов Интернет Каждый такой документ определяет аспект относительно протокола Интернет. Ниже мы перечислили все RFC, которые имеют отношение к этой книге и различному программному обеспечению описанному в ней. Все RFC вы можете найти по следующему адресу:
http://www.cis.ohio-state.edu/rfc/


RFC706
On the Junk Mail Problem.

RFC733
Standard for the Format of ARPA Network Text Messages.

RFC768
User Datagram Protocol (UDP).

RFC791
Internet Protocol (IP).

RFC792
Internet Control Message Protocol (ICMP).

RFC793
Transmission Control Protocol (TCP).

RFC805
Computer Mail Meting Notes.

RFC821
Simple Mail Transfert Protocol (SMTP).

RFC822
Standard for the Format of ARPA Internet Text Massages.

RFC934
Proposed Standard for Message Encapsulation.

RFC950
IP Subnet Extention.

RFC959
File Transfer Protocol (FTP).

RFC976
UUCP Mail Interchange Format Standard.

RFC1034
Domain Names: Concepts and Facilities.

RFC1036
Standard for Interchange of USENET Message.

RFC1058
Routing Information Protocol (RIP).

RFC1112
Internet Group Multicast Protocol (IGMP).

RFC1122
Requirement for Internet Host-Communication Layers.

RFC1123
Requirements for Internet Host-Application and Support.

RFC1137
Mapping Between Full RFC 822 and RFC 822 with Restricted Encoding.

RFC1153
Digest Message Format.

RFC1155
Structure of Management Information (SMI).

RFC1157
Simple Network Management Protocol (SNMP).

RFC1176
Interactive Mail Access Protocol: Version 2.

RFC1274
The COSINE and Internet X.500 Schema.

RFC1275
Replication Requirements to provide an Internet Directory using X.500.

RFC1279
X.500 and Domains.

RFC1308
Executive Introduction to Directory Services Using the X.500 Protocol.

RFC1309
Technical Overview of Directory Services Using the X.500 Protocol.

RFC1310
The Internet Standards Process.

RFC1319
MD2 Message-Digest Algorithm.

RFC1320
MD4 Message-Digest Algorithm.

RFC1321
MD5 Message-Digest Algorithm.

RFC1343
User Agent Configuration Mechanism for Multimedia Mail Format Information.

RFC1344
Implications of MIME for Internet Mail Gateways.

RFC1345
Character Mnemonics and Character Sets.

RFC1421
Privacy Enhancement for Internet Electronic Mail: Part I-Message Encipherment
And authentication Procedures.

RFC1422
Privacy Enhancement for Internet Electronic Mail: Part II-Certificate-based key
Management.

RFC1423
Privacy Enhancement for Internet Electronic Mail: Part III-Algorithms, modes, and
identifiers [Draft].

RFC1428
Transmition of Internet Mail from Just-Send-8 to 8bit-SMTP/MIME.

RFC1430
A Strategic Plan for Deploying an Internet X.500 Directory Service.

RFC1492
An Access Control Protocol, Sometimes Called TACACS.

RFC1495
Mapping Between X.400(1988)/ISO 10021 and RFC 822.

RFC1496
X.400 1988 to 1984 Downgrading.

RFC1505
Encoding Header Field for Internet Messages.

RFC1510
The Kerberos Network Authentication Service (V5).

RFC1519
Classless Inter-Domain Routing (CIDR) Assignment and Aggregation Strategy.

RFC1521
MIME (Multipurpose Internet Mail Extensions): Mechanisms for Specifying and
Describing the Format of Internet Message Bodies (MIME).

RFC1522
Representation of Non-ASCII Text in Internet Message Headers.

RFC1558
A String Representation of LDAP Search Filters.

RFC1566
Mail Monitoring MIB.

RFC1579
Firewall-Friendly FTP.

RFC1583
Open Shortest Path First Routing V2 (OSPF2).

RFC1617
Naming and Structuring Guidelines for X.500 Directory Pilots.

RFC1625
WAIS over Z39.50-1988.

RFC1631
The IP Network Address Translator (NAT).

RFC1652
SMTP Service Extentions for 8bit-MIMEtransport.

RFC1661
Point-to-Point Protocol (PPP).

RFC1711
Classifications in E-mail Routing.

RFC1725
Post Office Protocol, Version 3 (POP)3.

RFC1738
Uniform Resource Locators (URL).

RFC1739
A Primer on Internet and TCP/IP Tools.

RFC1777
Lightweight Directory Access Protocol.

RFC1778
The String Representation of Standard Attribute Syntaxes.

RFC1779
A String Representation of Distinguished Names.

RFC1781
Using the OSI Directory to Achieve User Friendly Naming.

RFC1796
Not All RFCs are Standards.

RFC1798
Connection-less Lightweight Directory Access Protocol.

RFC1823
The LDAP Application Program Interface.

RFC1830
SMTP Services Extentions for Transmission of Large and Binary MIME Messages.

RFC1844
Multimedia E-mail (MIME) User Agent checklist.

RFC1845
SMTP Service Extension for Checkpoint/Restart.

RFC1846
SMTP 521 Reply Code.

RFC1854
SMTP Service Extention for command pipelining.

RFC1855
Netiquette Guidelines.

RFC1864
The content-MD5 Header.

RFC1866
Hypertext Markup Language - 2.0.

RFC1869
SMTP Service Extensions.

RFC1870
SMTP Service Extension for Message Size Declaration.

RFC1872
The MIME Multipart/Related Content-type.

RFC1873
Message/External-Body Content-ID Access-type.

RFC1883
Internet Protocol, Version 6 (Ipv6) Specification.

RFC1884
IP Version 6 Addressing Atchitecture.

RFC1886
DNS Extentions to support IP version 6.

RFC1891
SMTP Service Extension for Delivery Status Notifications.

RFC1892
The Multipart/Report Content Type for the Reporting of Mail System Administrative
Messages.

RFC1893
Enhanced Mail System Status Codes.

RFC1894
An Extensible Message Format for Delivery Status Notifications.

RFC1918
Address Allocation for Private Internets.

RFC1928
SOCKS Protocol Version 5.

RFC1929
Username/Password Authentication for SOCKS V5.

RFC1959
An LDAP URL Format.

RFC1960
A String Representation of LDAP Search Filters.

RFC1961
GSS-API Authentication Method for SOCKS Version 5.

RFC2003
IP Encapsulation within IP.

RFC2028
The Organizations Involved in the IETF Standards Process.

RFC2044
UTF-8, a transformation format of Unicode and ISO 10646.

RFC2060
Internet Message Access Protocol - Version 4rev1 (IMAP4).

RFC2104
HMAC: Keyed-Hashing for Message Authentication.

RFC2138
Remote Authentication Dial In User Service (RADIUS).

RFC2164
Use of an X.500/LDAP directory to support MIXER address mapping.

RFC2200
Internet Official Protocol Standards.

RFC2218
A Common Schema for the Internet White Pages Service.

RFC2247
Using Domains in LDAP/X.500 Distinguished Names.

RFC2251
Lightweight Directory Access Protocol (v3).

RFC2252
Lightweight Directory Access Protocol (v3): Attribute Syntax Definitions.

RFC2253
Lightweight Directory Access Protocol (v3): UTF-8 String Representation of
Distinguished Names

RFC2254
The String Representation of LDAP Search Filters.

RFC2255
The LDAP URL Format.

RFC2256
A Summary of the X.500(96) User Schema for use with LDAPv3.

RFC2279
UTF-8, a transformation format of ISO 10646.

RFC2293
Representing Tables and Subtrees in the X.500 Directory.

RFC2294
Representing the O/R Address hierarchy in the X.500 Directory Information Tree.

RFC2305
A Simple Mode of Facsimile Using Internet Mail.

RFC2307
An Approach for Using LDAP as a Network Information Service.

RFC2313
PKCS 1: RSA Encryption Version 1-5.

RFC2314
PKCS 10: Certification Request Syntax Version 1-5.

RFC2315
PKCS 7: Cryptographic Message Syntax Version 1-5.

RFC2377
Naming Plan for Internet Directory-Enabled Applications.


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

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

Введение.

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

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

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

Кому предназначена эта книга

Эта книга предназначена для системных администраторов, которые управляют серверами, но в ней есть информация и для домашних пользователей. В ней описано как проинсталлировать Red Hat Linux сервер с учетом всех аспектов безопасности и настроенного на оптимальное быстродействие. Когда мы будем говорить об оптимизации и настройке, мы будем рассматривать пакеты содержащие исходные коды (.tar.gz) критически важных приложений таких как Apache, Bind, Samba, Squid, Openssl и пр. Исходные коды программ дают возможность для быстрого обновления, когда это необходимо, настройки и оптимизации программы под вашу конкретную машину.

На чем основываются все инструкции по инсталляции

Эти инструкции предполагают, что вы имеете устройство CDROM и официальный Red Hat Linux CDROM. Все инсталляции были оттестированы на официальном Red Hat Linux 6.1 и 6.2.

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

О программах представленных в книге

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

Получение книги и файлов конфигурации.

Книга "Безопасность и оптимизация Linux. Редакция для Red Hat" может быть скачена с наиболее популярных Linux серверов. Свободно форматированные версии этой книги могут быть найдены в Интернет через следующие адреса:

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

Если вы получили ее как часть печатной документации к вашему дистрибутиву, то посетите домашнюю страницу Linux Documentation http://www.linuxdoc.org/ или оригинальный веб-сервер http://www.openna.com/ для поиска более свежей версии. Это поможет вам уйти от ряда потенциальных неприятностей. Если вы захотите перевести мою книгу, то сообщите мне об этом, так я смогу следить на каких языках был издан.

Примеры конфигурационных файлов могут быть получены через http с:

http://www.openna.com/books/floppy.tgz

Для извлечения файлов из архива используйте следующую команду:

[root@deep tmp]# tar xzpf floppy.tgz

Если вы не можете получить этот файл напрямую из Интернет, то контактируйте с автором книги по одному из следующих адресов:
gmourani@openna.com
gmourani@netscape.net

Замечание об авторском праве

Очень важное замечание, что авторские права на эту книгу были изменены с Open Content на Open Publication License.

---
Copyright 2000 by Gerhard Mourani and OpenDocs, LLC. This material may be distributed only subject to the terms and conditions set forth in the Open Publication License, V1.0 or later (the latest version is presently available at http://www.opencontent.org/openpub/). Distribution of substantively modified versions of this document is prohibited without the explicit permission of the copyright holder.

Distribution of the work or derivative of the work in any standard (paper) book form for commercial purposes is prohibited unless prior permission is obtained from the copyright holder.

Please note even if I, Gerhard Mourani have the copyright, I don't control commercial printing of the book. Please contact OpenDocs @ http://www.opendocspublishing.com/ if you have questions concerning such matters.
---

Уведомление

Я хотел бы поблагодарить Michel Meral, который нарисовал красивые рисунки животных для моей книги, Robert L. Ziegler, который позволил включить его программное обеспечение firewall и всех польхователей Linux вокруг, которые вносят комментарии и предложения в мою работу.

GPG Public Key for Gerhard Mourani

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.0.0 (GNU/Linux)
Comment: For info see http://www.gnupg.org
mQGiBDgU8UcRBADiuIKn95nz0qsvjU1GzBxv0AOxJHVTNhFBl6lt+3DzDA0G7UTu
hOhT0aGwVGts3bzjXVbhS44CTfAvvuVYQq7Ic/BHkwIhFvSu/Xv/fGbD3IQy+Gn5
UYzhZegCGwB0KQhGkIwQPus2ONOS5oT3ChZ8L7JlCPBnlOcVBT+hZ3BXUwCg4y4L
Mz5aEe0MPCZ3xkcNE7AE71EEAL4Jf2uVhIRgOfwIpdB1rKVKrDDFxZLx+yZeOZmq
gdwa4m7wV+Rk+c4I1+qBxxkmcUBhTHigx+9kpBDE2J0aEGQezDN+RoqlmdyVFO98
T/znf4ZLIf0upu5aP4kAItJJuFB1AaJyDLesB5xGjfyWz+RhbKOmeqr2zHniOsa8
HcZ/BACKZFBjNElqFUf0niWf822W6IbNf7ASh8pwTgR9PmXcq2qtBBq8uCIpEYcD
wzk+ccl2jt8qt5RB7DXz/r/uG+3YHU+ID4iz6Qm6zl84gYQLDXST2YXZ5BPURo7H
O4nEIJfeHEuUCstE5ROKnblG2U+t5QmxSGbETnK9I/OZrzFwILRDR2VyaGFyZCBN
b3VyYW5pIChPcGVuIE5ldHdvcmsgQXJjaGl0ZWN0dXJlKSA8Z21vdXJhbmlAdmlk
ZW90cm9uLmNhPohVBBMRAgAVBQI4FPFHAwsKAwMVAwIDFgIBAheAAAoJEDPaC2+7
tLqbGcYAnjHIPAsZrRC5qU5OrqdPvvEmICUWAKCdeyWwJ785A58U8Vh1bpxzCVVb
PbkCDQQ4FPI0EAgAy7qa88bVYWIEyAWxJPZRxl8G2GcxgshSu4+5udeP+4PlVAm8
3DUynzlcax4/ikx8Q8MoVR7s6lCLJXCycLENE8xFCJJQ26IxzBjdftGdmvKteVkZ
Kld9PZMzjUsxKzmhZbGEWug6xaav68EIewTw/S0TFtPhXyUKFrYPV6aID7YGatzB
P4hQJfh4Wt3NdP9QznASBze6bPZxR07iEZaUO0AMHeeBKwL6rptEcGuxHPMYc00R
s+SdGTOAa9E/REIiiEike9mXTKKWJYG2e7leDP3SBruM/c7n+DC9ptFAapg1GD9f
Re7LLFqj6EQzZqybPB61B9rB/8ShIrApcNYF4wADBQgAvROi9N0/J5kYvBVb60no
xBUBYtZp4cJO9X1uVdVahCb9XZpbvxhKujaUoWpPCIb0pm8K+J8x0o9HFl9f/JTs
25N/eJwksr63+j8OdCHqxv4z+qQYgc/qvU42ekHlSfMc7vsiAIE1e1liuTBdN9KR
7oSBoaht+dKi16ffxXmMDvQs1YSBR114XXDSzI+xXRuaIISpi75NE6suLLlrksnL
+i/NcLRbCTEv4p1UJGYT4OVnX6quC3CC+U4Drpjf2ohawsXqS7jKUYduZRr9Hbar
/sE0pQ/P0uf+VAspQJgpvBqiDxbIRCDSx8VgDoRL7iayxPDXtFmbPOrUEPdS7qYX
pIhGBBgRAgAGBQI4FPI0AAoJEDPaC2+7tLqbdzQAniStW48nFU6CWkvQTy8fr0lu
ZXmXAKC5bgSLgg1gZAvx61Z20yzM+hwNFQ==
=95nO
-----END PGP PUBLIC KEY BLOCK-----

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