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 или здесь.
Linux это операционная система, которая изначально была создана как хобби молодого студента Линуса Торвальдса из Хельсинского университета в Финляндии. Линус интересовался Minix, небольшим вариантом UNIX, и решил разработать систему превосходящую Minix стандарт. Он начал свои работы в 1991 году, выпустив версию 0.02, и постоянно работал над ней до 1994 года, когда вышла версия 1.0 ядра Linux. Текущей версией ядра является 2.2 (выпущено 25 января 1999 года).
Linux распространяется под GNU General Public License и его исходные коды свободно доступны для всех желающих. Linux может использоваться как сетевая платформа, платформа для разработчиков и платформа для конечных пользователей. Linux часто считается как прекрасная и недорогая альтернатива других более дорогих операционных систем.
За него не надо выплачивать лицензионных или авторских отчислений. Даже если бы Линус Торвальдс и владел правом на торговую марку Linux, то ядро и сопутствующее ему программное обеспечение все равно бы распространялось под GNU General Public License. Это значит, что вы можете модифицировать исходные коды и продавать свои программы, но вы все равно должны предоставлять их исходные коды.
Хотя Linux наиболее популярен на платформе Intel, но он может запускаться на большем числе процессоров и различных платформах, чем другие ОС. Тенденции развития программного и аппаратного обеспечения в последнее время заставляют пользователей покупать компьютеры со все большим объемом памяти и размерами жесткого диска. Linux не следует этой тенденции и прекрасно работает на 486 машинах с ограниченным объемом RAM. Linux - это истинная многозадачная система, подобная своему брату UNIX. Она использует сложный, современный метод управления памятью для контроля за всеми системными процессами. Это означает, что если в какой-нибудь программе произойдет сбой, то вы ее просто "убьете" и продолжите работать дальше, как ни в чем не бывало.
Дополнительное преимуществом является то, что Linux свободен от огромного количества вирусов присущих другим ОС. Благодаря GNU GPL и Open Source, практически все программное обеспечение поставляется с исходными кодами.
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 | ![]() |
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 файлах и каталогах
Эта программа предназначена для запуска с помощью cron. Она должна запускаться один раз в день, но можно и два раза.
Для запуска sxid вручную введите команду:
[root@deep /]# sxid -kОна проверяет изменения в текущем рабочем каталоге. Ротации файлов регистрации и отправки сообщений по почте не происходит. Все результаты выводятся в 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 | ![]() |
Одной из важнейших задач в мире обеспечения безопасности является анализ файлов регистраций. Часто, повседневные работы администратора не оставляют ему время на это, что может привести к ряду проблем.
В кратком обзоре 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
Поместите соответствующий элемент в crontab файл пользователя root, чтобы Logcheck выполнялся автоматически каждый час (рекомендуется, можете запускать его чаще или реже).
Для редактирования crontab введите следующую команду:
[root@deep /]# crontab -eЗАМЕЧАНИЕ. Запомните, что 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 | ![]() |
Брандмауэры помогают нам защитить сеть от вторжений. С их помощью мы выбираем какие порты открыть, а какие нет. Никто снаружи нашей сети не владеет информацией об этом, но может попытаться организовать атаку при помощи программ сканирования портов. Они покажут какие порты у нас открыты.
Как сказано во введение к 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/Вы должны редактировать файл "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"
Инсталируем Portsentry на вашей системе.
[root@deep portsentry-1.0]# make linuxВышеприведенныя команды будут настраивать программу на операционную систему Linux, компилировать, создавать и в заключение инсталлировать файлы в заданное место.
Команда "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
Программа PortSentry может быть сконфигурирована для работы в шести различных режимах, но запущена только для проверки одного протокольного режима за раз. Чтобы было более правильно, вы можете запустить одни TCP режим и один UDP режим, так как два TCP и один UDP, для примера, не работает. Доступные режимы:
?portsentry -tcp (основной port-bound TCP режим)В моем случае я предпочитаю запускать TCP в протокольном режиме "продвинутое определение TCP stealth сканирования " и UDP в протокольном режиме "определение Stealth UDP сканирования ". Для получения большей информации о других протокольных режимах пожалуйста читайте "README.install" и "README.stealth" файлы в каталоге с исходными кодами PortSentry. Для TCP режима я выбираю:
- atcp - продвинутое определение TCP stealth сканирования
В режиме продвинутого определения TCP stealth сканирования, PortSentry будет
вначале смотреть какие порты вы запустили на сервере, а затем выведет их из
под наблюдения и начнет следить за остальными портами. Это очень полезно и
очень быстро реагирует на сканирование портов. Этот режим, также,
потребляет мало времени CPU.
-sudp - режим определения "Stealth" UDP сканирования
В режиме определения "Stealth" UDP сканирования UDP порты сперва будут
формироваться в список, а затем контролироваться.
Для запуска PortSentry в двух вышеприведенных режимах используйте команды:
[root@deep /]# /usr/psionic/portsentry/portsentry -atcpЗАМЕЧАНИЕ: Вы можете добавить вышеприведенные строки в файл "/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 |
Как было написано во 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Для инсталляции 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Компиляция и оптимизация.
Шаг 1.Переместитесь в новый каталог OpenSSH и выполните следующие команды:
CC="egcs" \Вышеприведенные опции говорят OpenSSH следующее:
Вкомпилировать libwrap и включить поддержку TCP Wrappers (/etc/hosts.allow|deny)
Заблокировать длительные задержки при разрешении имен под Linux/glibc-2.1.2
для улучшения времени соединения
Определить месторасположение OpenSSL
Сейчас мы должны компилировать и инсталлировать OpenSSH на сервере:
[root@deep openssh-1.2.3]# makemake - компилирует исходные коды в двоичные файлы;
make install - инсталлирует исполняемы и вспомогательные файлы
make host-key - создает ключ сервера
install - инсталлирует PAM поддержку на Red Hat Linux, которая сейчас имеет
больше возможностей, чем популярный пакет из коммерческого ssh-1.2.x.
Команда "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 сервис. Для разделения нескольких имен используйте
пробелы.
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 демон
Создайте, локально, ваш общедоступный и персональный ключи:
[root@deep /]# su adminРезультат должен выглядеть примерно так:
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
ЗАМЕЧАНИЕ. Если вы имеете несколько бюджетов, то вы можете хотеть создать независимые ключи для них.
Вы хотите создать ключи для:
Это позволит вам ограничить доступ между серверами, например не позволит почтовому бюджету получить доступ на Веб сервер или Шлюз. Это расширяет полную защиту, если одни из ваших аутентификационных ключей скомпрометирован по какой-нибудь причине.
Шаг 2.Копируйте ваш общедоступный ключ (identity.pub) на удаленный компьютер в каталог "/home/admin/.ssh" под именем "authorized_keys".
ЗАМЧЕАНИЕ. Одним из способов копирования файла является использование ftp команд или вам нужно послать по электронной почте ваш общедоступный ключ администратору системы. Только включите содержимое файла ~/.ssh/identity.pub в сообщение.
Команды описанные ниже мы будем часто использовать, но на самом деле их много больше, и вы должны изучить 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 /]$ scp1 -p admin@mail:/etc/test1 /tmpДля копирования файла с локальной на удаленную систему используйте следующую команду:
[root@deep /]# su adminНапример:
[admin@deep /]$ scp1 -p /usr/bin/test2 admin@mail:/var/tmpЗАМЕЧАНИЕ. Опция "-p" говорит, что время модификации и доступа, также как и режимы исходных файлов, должны быть сохранены и на копии. Это обычно желательно.
OpenSSH может использоваться для:
> /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
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, должны использовать 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Переместитесь в новый каталог SSH2 и выполните следующие команды:
CC="egcs" \Вышеприведенные опции говорят SSH2 следующее:
Команда "make clean" удаляет все предыдущие следы компиляции, чтобы избежать любых ошибок. Команда "make" компилирует все исходные файлы в исполняемые и в заключении команда "make install" инсталлирует двоичные и сопутствующие им файлы в определенное место.
Очистка после работы.
[root@deep /]# cd /var/tmpКоманда "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" это конфигурационный файл для 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" это конфигурационный файл для 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".
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Редактируйте файл 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, сделайте так, чтобы вы инсталлировали и использовали его на всех ваших серверах. Наличие десяти защищенных серверов и одного незащищенного бесполезно.
Для лучшей безопасности вашего ssh2 сервера, вы можете настроить его на аутентификацию через PAM. Чтобы сделать это, надо создать файл "/etc/pam.d/ssh" file.
Создайте файл ssh (touch /etc/pam.d/ssh) и добавьте или измените, если нужно:
#%PAM-1.0Для получения большей информации, вот несколько man-страниц, которые можно прочитать:
$ man ssh-add2 (1) - добавляет identities агенту аутентификации
$ man ssh-agent2 (1) - агент аутентификации
$ man ssh-keygen2 (1) - генератор пары аутентификационных ключей
$ man ssh2 (1) - secure shell клиент (программа удаленного подключения)
$ man sshd2 (8) - secure shell демон
Создайте, локально, ваш личный и публичный ключи:
[root@deep /]# su adminСоздайте файл "identification" в вашем каталоге "~/.ssh2" на локальной машине:
[admin@deep]$ cd ~/.ssh2ЗАМЕЧАНИЕ. Опционально можно создать идентификационный файл и на удаленной машине. Он содержит имя приватного ключа, который используется при аутентификации.
Шаг 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Команды описанные ниже мы будем часто использовать, но на самом деле их много больше, и вы должны изучить 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Где <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Где <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 Команды | ![]() |
Инсталляция типичного 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ЗАМЕЧАНИЕ. После раскрытия архива Tripwire в каталоге "/var/tmp" вы увидите файлы, связанные с Tripwire: License.txt, README, Release_Notes, install.cfg, install.sh, созданный каталог и Tripwire_version_for_Linux_x86_tar.gz.
Помните, что 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.
Во время инсталляции вы будете:
Когда Tripwire установится на вашу систему, она скопирует файлы "License.txt", "README" и "Release_Notes" в каталог "/usr". Конечно, после прочтения, вы можете спокойно удалить их следующей командой:
[root@deep /usr]# rm -f /usr/License.txt README Release_NotesКоманда "rm", использованная выше, будет удалять все исходные коды, которые мы использовали при компиляции и инсталляции Tripwire. Она также удалит .tgz архив.
Все программное обеспечение, описанное в книге, имеет определенный каталог
и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы
для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную
воспроизводить файлы из книги, чтобы создать свои файлы конфигурации.
Скопируйте файл из архива и измените его под свои требования. Затем
поместите его в соответствующее место на сервере, так как это показано ниже.
Файл с конфигурациями вы можете скачать с адреса:
http://www.openna.com/books/floppy.tgz
Для запуска Tripwire под Linux следующий файл должен быть создан или скопирован в требуемый каталог:
Копируйте файл twpol.txt в каталог "/usr/TSS/policy".
"/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Важно удостовериться, что целостность системы уже не была нарушена. Для максимальной безопасности вашей основной базы данных, вы должны инсталлировать систему с оригинальных носителей. Также рекомендуется удалить текстовую копию конфигурационного файла 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ЗАМЕЧАНИЕ. Когда команда выполнена, база данных готова и вы можете выполнить проверку целостности файловой системы и просматривать отчеты.
Запуск режима проверки целостности и интерактивного режима проверки.Tripwire имеет возможность называемую "Режим проверки целостности". Сейчас, когда наша база данных инициализована, мы можем использовать этот режим для сравнения текущих объектов файловой системы с их свойствами, записанными в базу данных Tripwire. Все файлы с нарушениями будут выводится в stdout; файл генератор отчетов будет создан и может быть использован в дальнейшем с помощью утилиты twprint.
Синтаксис для режима проверки целостности:
[root@deep /]# tripwire { --check }Для запуска проверки целостности используйте команду:
[root@deep /]# tripwire --checkTripwire может быть также запущен в режиме "Интерактивный режим проверки". В этом режиме вы можете автоматически обновлять ваши изменения с терминала.
Для запуска интерактивного режима проверки используйте команду:
[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 Команды | ![]() |
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Редактируйте файл 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
Команды "make" и "make install" настаивают программное обеспечение, чтобы удостовериться, что ваша система имеет необходимые возможности и библиотеки для успешной компиляции пакета, компилируют все исходные файлы в исполняемые, и затем инсталлирует их и сопутствующие им файлы в определенное место.
Команда "chmod" изменяет права доступа по умолчанию к каталогу "tripwire" на 700 (drwx------), чтение, запись и исполнение только для пользователя "root". И изменяет права доступа на чтение и исполнение только пользователем root (- r-x------) для программ "/usr/sbin/tripwire" и "/usr/sbin/siggen". Команда "rm" используется для удаления файла "tw.config" расположенного в "/usr/sbin". Нам этот файл не нужен, так как мы создадим подобный новый файл позже в каталоге "/etc".
Очистка после работы.Команда "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" это конфигурационный файл для 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" это небольшой скрипт, запускаемый 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 (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/Мы переходим в каталог, который определили для хранения баз данных, и затем создаем информационную базу данных, которая используется для всех последующих проверок целостности.
Шаг 2Так как файл с информационной базой данных Tripwire был создан, мы можем сейчас запустить Tripwire в "Интерактивном режиме проверки". Этот режим будет запрашивать пользователя относительно того, действительно ли каждый измененный элемент системы должен быть обновлен в базе данных.
Для запуска Интерактивного режима проверки используйте команду:
[root@deep /]# cd /var/spool/tripwire/database/ЗАМЕЧАНИЕ. В интерактивном режиме 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 может быть использован для:
> /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
Назад | Оглавление | Вперед |
Глава 13 Программы обеспечения безопасности (Управление и ограничения) - GnuPGВ этой главеLinux GnuPG Команды Установка поддержки квот на вашей Linux системе. Создание ядра с поддержкой квот Модификация файла "/etc/fstab" Создание файлов "quota.user" и "quota.group" Назначение квот для Пользователей и групп Команды | ![]() |
Шифрование данных это бесценная возможность, которая сильно увеличивает конфиденциальность вашей работы. Утилиты подобные 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Переместитесь в новый каталог GnuPG и выполните следующие команды:
CC="egcs" \команда make компилирует исходные коды в исполняемые двоичные файлы;
команда make check запускает все тесты, входящие в пакет;
команда make install инсталлирует исполняемые и сопутствующие им файлы в
определенный каталог;
strip будет уменьшать размер, увеличивая производительность программы.
Команда "rm", использованная выше, будет удалять все исходные коды, которые мы использовали при компиляции и инсталляции GnuPG. Она также удалит .tar.gz архив.
Ниже приведены команды из тех, что мы часто используем в регулярной работе, но из существует много больше. Читайте страницы руководства (man) для получения большей информации.
Создание ключа.Прежде всего, если мы используем GnuPG в первый раз, для включения возможностей шифрования необходимо создать новую пару ключей (публичный и персональный).
Шаг 1.Для создания новой пары ключей используйте следующую команду:
[root@deep /]# gpg --gen-keyМы вновь запускаем GnuPG следующей командой:
[root@deep /]# gpg --gen-keyНовая пара ключей (общедоступный и личный) успешно созданы в домашнем каталоге пользователя root (~/root).
Импортирование ключей.Как только мы создали нашу пару ключей, мы можем начать добавлять в нашу публичную базу ключей все ключи, которые мы получили от третьих лиц, чтобы в будущем использовать их для шифрования и опознания связи.
Для импортирования публичных ключей в базу данных ключей используйте команду:
[root@deep /]# gpg --import <file>Например:
[root@deep /]# gpg --import redhat2.ascВышеприведенная команда будет добавлять все новые ключи в базу данных и будет обновлять все уже существующие ключи. Важно заметить, что GnuPG не импортирует не самоподписанные (self-signed) ключи. В вышеприведенном примере мы импортируем файл "redhat.asc", содержащий публичный ключ компании Red Hat Linux, взятый с Интернет сайта Red Hat.
Подписание ключей.Когда вы импортировали ключи в свою базу данных публичных ключей и вы точно уверенны, что третье лицо, чей ключ вы положили, действительно тот за кого себя выдает, вы можете подписать его/ее ключ. Подписание ключа удостоверяет, что вы знаете его владельца.
Для подписания ключа компании Red Hat, который мы добавили выше, используйте команду:
[root@deep /]# gpg --sign-key <UID>Например:
[root@deep /]# gpg --sign-key RedHatЗАМЕЧАНИЕ. Вы должны подписывать ключ только когда абсолютно уверенны, что ключ действительно настоящий! Вы никогда не должны подписывать ключ, базирующийся на любых предположении.
Шифрование и дешифрованиеПосле инсталляции, импортирования, подписания и конфигурирования мы можем начать шифровать и расшифровывать нашу работу.
Для шифрования и подписания данных для пользователя RedHat, ключ которого мы добавили выше, используйте следующую команду:
[root@deep /]# gpg -sear RedHat <file>Например:
[root@deep /]# gpg -sear RedHat message-to-RedHat.txtАргументы, которые использовались обозначают следующее, "s" - подписание (уменьшение риска что кто-то попытается представиться вами, очень полезно подписывать все, что вы шифруете), "e" - шифрование, "a" - создание ASCII защищенного вывода (".asc" готовые для отправки по почте), "r" - шифрование имени идентификатора пользователя и <file> это сообщение, которое вы хотите зашифровать.
Для расшифровки данных используйте следующую команду:
[root@deep /]# gpg -d <file>Например:
[root@deep /]# gpg -d message-to-Gerhard.ascГде "-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 может быть использован:
> /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" Назначение квот для Пользователей и групп Команды | ![]() |
Квота - это административная утилита для мониторинга и ограничения использования дискового пространства пользователями и группами на каждой файловой системе. Существует две возможных способа ограничений использования дисков. Первый, это число inode-ов (число файлов), которым может владеть пользователь или группа. Второй, число дисковых блоков (суммарное пространство в килобайтах), которое может выделяться в использование пользователю или группе. При помощи квот, системный администратор принуждает пользователя не расходовать неограниченный объем дискового пространства. Эта программа оперирует отдельно каждым пользователем и каждой файловой системой, поэтому для каждой файловой системы нужно определять квоты отдельно.
Первое, что вам необходимо сделать, это создать ядро с поддержкой квот. В ядре 2.2.14 надо удостовериться, что вы ответили "Y" на вопрос:
FilesystemsЗАМЕЧАНИЕ. Если при компиляции ядра вы руководствовались соответствующей главой из этой книги, то поддержка квот у вас включена.
Файл "/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 defaults,usrquota 1 2Возможность 2.
Для включения квот для групп на определенной файловой системы, отредактируйте ваш "/etc/fstab" файл (vi /etc/fstab) и добавьте опцию "grpquota" в четвертое поле после слова "defaults" или любой другой опции.
Например:
/dev/sda6 /home ext2 defaults 1 2 (как пример: слово "defaults")Должен читаться:
/dev/sda6 /home ext2 defaults,grpquota 1 2Для включения квот для пользователей и групп на определенной файловой системы, отредактируйте ваш "/etc/fstab" файл (vi /etc/fstab) и добавьте опции "usrquota, grpquota" в четвертое поле после слова "defaults" или любой другой опции.
Например:
/dev/sda6 /home ext2 defaults 1 2 (как пример: слово "defaults")Должен читаться:
/dev/sda6 /home ext2 defaults,usrquota,grpquota 1 2После модификации файла "/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Команда "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Вышеприведенные команды необходимы только для инициализации файлов "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После выполнения этой команды, вы увидите на экране строки связанные с пользователем "wahib". "blocks in use:" отображает общее число блоков (в килобайтах) расходуемых пользователем на разделе. "inodes in use:" отображает общее число файлов, которое имеет пользователь на разделе. Эти параметры ("blocks in use, and inodes in use") контролируются и устанавливаются автоматически системой и вы не можете установить или изменить их.
Шаг 2Назначим 5MB квоту для пользователя "wahib", изменив следующие параметры в редакторе vi:
Quotas for user wahib:Должна читаться:
Quotas for user wahib:"soft limit" (soft =) определяет максимальное количество дискового
пространства, которое пользователь может иметь.
"hard limit" (hard =) определяет абсолютное ограничение использования
пользоватлем дискового пространства. Пользователь не может превзойти его.
Следует заметить, что "hard limit" работает только когда установлен параметр
"grace period".
Параметр "grace period" позволяет вам установить время, прежде чем значение soft limit будет приведено в жизнь на файловой системе с включенными квотами. Например этот параметр может быть использован для предупреждения ваших пользователей о новой политике, которая установит дисковую квоту в 5MB на их домашний каталог через 7 дней. Вы можете установить это значение в 0 дней (по умолчанию) для любого отрезка времени. Чтобы изменить это требуется два следующих шага (в моем примере я принимаю 7 дней).
Шаг 1Редактируем значение по умолчанию параметра период любезности (grace period), используя следующую команду:
[root@deep /]# edquota -tМодифицируем период любезности (grace period) до 7 дней. Измените или установите следующие параметры в редакторе vi:
Time units may be: days, hours, minutes, or secondsДолжно читаться:
Time units may be: days, hours, minutes, or secondsЗамечание. Команда "edquota -t" редактирует параметр soft time limits для каждой файловой системы с включенными квотами.
Назначение квот для отдельных группПредположим, например, что у вас есть группа с именем "webusers". Следующая команда вызовет редактор vi для редактирования квот для группы "webusers" на каждой файловой системе, где квоты разрешены.:
[root@deep /]# edquota -g webusersПроцедура такая же как и при назначении квот для пользователей; как описано выше, вы должны модифицировать параметр "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) для получения большей информации.
QuotaQuota выводит информацию об использовании диска и ограничениях на файловой системе.
Для получения информации об использовании диска и ограничениях пользователя 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:
[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 | ![]() |
Сейчас, когда мы установили все программное обеспечение предназначенное для зашиты сервера, самое время улучшить и настроить его сетевую часть. 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Мы создаем каталог с именем "bind" и манипулируем tar архивами, копируя их в новый каталог.
Переходим в новый каталог bind (cd /var/tmp/bind) и разархивируем tar файлы:
[root@deep bind]# tar xzpf bind-contrib.tar.gzISC BIND не должен запускаться с правами root, поэтому мы должны завести пользователя не имеющего shell доступа.
[root@deep /]# useradd -c "DNS Server" -u 53 -s /bin/false -r -d /chroot/named named 2>/dev/null || :Редактируем файл Makefile.set (vi src/port/linux/Makefile.set) и добавляем или модифицируем его:
'CC=egcs -D_GNU_SOURCE'Первая строки представляет имя вашего GCC компилятора (egcs), а вторая ваши флаги оптимизации. Срока "DESTLIB=" определяет путь, где будут располагаться файлы сервера BIND
Введите следующие команды на вашем терминале
[root@deep bind]# make -C srcКоманда "make" компилирует все исходные кода в двоичные исполняемые файлы, и затем команды "make install" инсталлируют исполняемые и сопутствующие им файлы в заданный каталог.
[root@deep bind]# strip /usr/bin/addrКоманда "strip" удаляет все символы из объектных файлов Это уменьшает размер исполняемых файла. Вследствие чего, улучшается производительность. "mkdir" создает новый каталог "/var/named".
Очистка после работы.Эти команды будут удалять все исходные коды, которые мы использовали при компиляции и инсталляции ISC BIND/DNS.
Конфигурационные файлы различный сетевых сервисов сильно зависят от ваших нужд и архитектуры. Люди могут устанавливать DNS сервер дома как кэширующий сервер, а в компании как основной, подчиненный или кэширующий DNS сервера.
Все программное обеспечение, описанное в книге, имеет определенный каталог
и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы
для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную
воспроизводить файлы из книги, чтобы создать свои файлы конфигурации.
Скопируйте файл из архива и измените его под свои требования. Затем
поместите его в соответствующее место на сервере, так как это показано ниже.
Файл с конфигурациями вы можете скачать с адреса:
http://www.openna.com/books/floppy.tgz
Для запуска кэширующего сервера имен необходимы следующие файлы, вы должны их либо создать либо скопировать в нужные каталоги сервера
Копируйте файл named.conf в каталог "/etc/".Для запуска основного (master) сервера имен необходимы следующие файлы, вы должны их либо создать либо скопировать в нужные каталоги сервера
Копируйте файл named.conf в каталог "/etc/".Для запуска подчиненного сервера имен необходимы следующие файлы, вы должны их либо создать либо скопировать в нужные каталоги сервера.
Копируйте файл named.conf в каталог "/etc/".Вы можете взять эти файлы из нашего архива floppy.tgz.
Кэширующий сервер имен не авторитетен для любых доменов, кроме 0.0.127.in- addr.arpa (localhost). Он ищет имена как внутри, так и за пределами ваших зон, как на первичных, так и на подчиненных серверах. В отличии от них, кэширующий сервер инициирует поиск имен в пределах вашей зоны, спрашивая один из первичных или подчиненных серверов.
Файлы необходимые для установки простого кэширующего сервера имен:
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", сервер имен не будет контактировать с другими серверами для поиска информации, если сервера на которые перенаправляются запросы не отвечают.
Используйте эту конфигурацию для всех серверов в вашей сети, которые не выступают как основной или подчиненный сервера имен. Файл "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 INPTR localhost.
Перед запуском вашего 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
Используйте эту конфигурацию для серверов, которые выступают как мастер сервер имен. После компиляции 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" используются для обеспечения большей безопасности сервера имен.
Этот файл может быть использован как на основном, так и на вспомогательном серверах. Файл "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.
Используйте эту конфигурацию для сервера, который выступает в вашей сети, как основной сервер имен. Файл "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.
Используйте этот файл для сервера выступающего в роли основного сервера имен. Файл "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
Используйте эту конфигурацию для сервера вполняющего роль вторичного сервера имен. Вы должны модифицировать файл "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.cache" с основного сервера на подчиненный.
Сконфигурируйте ваш скрипт "/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Назад | Оглавление | Вперед |
Глава 14 Серверное программное обеспечение (BIND/Сервис DNS) (Часть2)В этой главеLinux DNS и BIND сервер Конфигурации Кэширующий DNS-сервер Основной сервер имен Вторичный сервер имен Организация защиты ISC BIND/DNS Административные средства DNS Утилиты пользователя DNS | ![]() |
Эта часть фокусируется на предотвращении использования 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Сделайте себе соответствующую отметку, чтобы можно было использовать ее позже на следующих шагах.
Шаг 2
Сейчас мы должны определить chroot окружение и создавать корневой каталог для него. Мы выбрали каталог "/chroot/named", потому что хотим разместить ее на независимом разделе, чтобы предотвратить атаки на файловую систему. Раньше, во время инсталляции Linux мы создали раздел "/chroot" специально предназначенный для этого.
[root@deep /]# /etc/rc.d/init.d/named stop (требуется ввести только если сещуствующий named демон запущен)Сейчас копируем основные конфигурационные файлы, файлы с описаниями зон, программы named named-xfer в необходимые места:
[root@deep /]# cp /etc/named.conf /chroot/named/etc/ВАЖНОЕ ЗАМЕЧАНИЕ. Для подчиненного сервера имен владельцем каталога "/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/Шаг 4
Копируйте файлы "localtime" и "nsswitch.conf" в chroot каталог etc, чтобы элементы файлов регистрации были правильно установлены для вашей временной зоны:
[root@deep /]# cp /etc/localtime /chroot/named/etc/Шаг 5
Для большей безопасности на некоторые файлы из каталога "/chroot/named/etc" мы должны установить бит постоянства:
[root@deep /]# cd /chroot/named/etc/Файл с атрибутом "+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Редактируем файл Makefile.set (vi port/linux/Makefile.set) и делаем в нем следующие изменения:
'CC=egcs -D_GNU_SOURCE'Различие между Makefile, который мы использовали прежде и новым, заключается в изменении строк "DESTSBIN=", "DESTEXEC=" и "DESTRUN=". В них мы задаем новое месторасположение файлов и теперь программа "ndc" будет знать, где находится "named".
[root@deep src]# make cleanМы создали двоичный файл, а затем копируем полученную программу "ndc" в "/usr/sbin", переписывая старую. Мы не должны забыть выполнить команду strip для улучшения производительности.
Шаг 10
Также хорошей идеей будет создание новых двоичных файлов "named" и "named-xfer", чтобы грантировано использовать одну и туже версию "named" и "ndc".
Для named:
[root@deep /]# cd /var/tmp/srcРедактируйте файл Makefile.set (vi port/linux/Makefile.set) и внесите в него следующие изменения:
'CC=egcs -D_GNU_SOURCE'Мы удалили файл ".settings", так как система кэширует в нем переменные и выполнили команду "make clean", чтобы убедиться, что у нас не возникнут старые наложения. После того, как создан файл "named", мы копируем его вместе с "named-xfer" в chroot каталог и используем команду "strip" для улучшения производительности новых исполняемых файлов.
Step 11
Удаление ненужных файлов и каталогов.
[root@deep /]# rm -f /usr/sbin/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Первая колонка говорит, что программа запущена с 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) - программа контролирующая работу сервера имен
Команды описанные ниже мы будем часто использовать, но на самом деле их много больше, и вы должны изучить 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Команды описанные ниже мы будем часто использовать, но на самом деле их много больше, и вы должны изучить man-страницы и документацию для получения деталей.
nslookupПрограмма nslookup позволяет пользователям интерактивно или не интерактивно запрашивать сервера имен Интернет. В интерактивном режиме пользователи могут запрашивать у серверов имен информацию о различных хостах и доменах, печатать список хостов в домене. В не интерактивном режиме пользователь может получить имена и запросить информацию о хостах и доменах.
Интерактивный режим имеет много опций и команд; рекомендуется прочитать страницу руководства для nslookup или дать команду help в интерактивном режиме.
Для запуска nslookup в интерактивном режиме используйте команду:
[root@deep /]# nslookupКоманды: (идентификаторы представлены в верхнем регистре, что делать не обязательно)
NAME - печатает информацию о хосте/домене NAME, используя сервер по умолчаниюДля запуска в не интерактивном режиме используйте команду:
[root@deep /]# nslookup www.redhat.comГде <www.redhat.com> это имя или Интернет адрес о котором вы хотите получить информацию.
dnsqueryПрограмма dnsquery запрашивает сервера имен через библиотеку определителей.Для организации запроса на сервер имен, используя библиоткеку определителей, введите следующую команду:
[root@deep /]# dnsquery <host>Например:
[root@deep /]# dnsquery www.redhat.comгде <host> - имя хоста информацию о котором вы хотите получить.
hostПрограмма host определяет имя хоста, используя DNS. Для определения имен хоста используя сервер имен, введите следующую команду:
[root@deep /]# host <FQDN, domain names, host names, or host numbers>Например:
[root@deep /]# host redhat.comгде <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 <-l domain names >Эта опция вызовет получение всех данных о зоне для доменного имени "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 | ![]() |
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Конфигурирование
Переместитесь в новый каталог 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(`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 на нашем
сервере:
Команда "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".
Вместо того, чтобы иметь индивидуальные сервера или рабочие станции обрабатывающие свою почту, намного выгоднее иметь в сети единый мощный центральный сервер, который обрабатывает всю почту. Такой сервер называется Почтовый концентратором. Преимущества Центрального Почтового Концентратора:
Файл "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'')dnldefine(`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
Сейчас, когда файл с макроопределениями "sendmail.mc" создан, мы создадим конфигурационный файл sendmail ("sendmail.cf"). Для этого используйте следующие команды:
[root@deep /]# cd /var/tmp/sendmail-version/cf/cf/ЗАМЕЧАНИЕ. Здесь "../m4/cf.m4" говорит программе m4, где находится конфигурационный файл с информацией по умолчанию.
Так как локальные клиентские машины никогда не получают почту напрямую из внешнего мира и пересылают (отправляют) почту через Центральный Почтовый Концентратор, мы создаем специальный фал, называемый "null.mc", из которого позже мы получим конфигурационный файл "sendmail.cf", отвечающий специальным установкам для граничных и локальных серверов. Этот файл с макроопределениями m4 легко создается и конфигурируется, потому, что ему не нужно столько возможностей как на Центральном Почтовом Концентраторе.
Шаг 1 Создаем фал null.mc (touch /var/tmp/sendmail-version/cf/cf/null.mc) и добавляем в него следующие строки: OSTYPE(`linux')dnlOSTYPE(`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/Так как у нас не должно быть входящих почтовых соединений, то нам не нужен больше запущенный демон Sendmail на наших граничных или локальных серверах и клиентских машинах.
Для остановки демона Sendmail, редактируйте или создайте файл "/etc/sysconfig/sendmail" и измените/добавьте следующие строки:
DAEMON=yes
Должна читаться:
DAEMON=no
ЗАМЕЧАНИЕ. "QUEUE=1h" в файле "/etc/sysconfig/sendmail" говорит Sendmail, что необходимо обрабатывать очередь каждый час. Мы оставим эту строку, так как Sendmail необходимо периодически выполнять эту операцию, если Почтовый концентратор не работает.
Шаг 4Локальные машины никогда не используют псевдонимы, файлы доступа и другие базы данных соответствий. Так как все эти файлы располагаются на Центральном почтовом концентраторе, мы можем спокойно удалить следующие файлы на всех локальных машинах.
/usr/bin/newaliasesДля удаления перечисленных файлов используйте следующую команду:
[root@client /]# rm -f /usr/bin/newaliasesШаг 5
Удалите неиспользуемую программу Procmail с ваших локальных серверов и клиентских машин. Так как локальные машины отправляют всю внутреннюю и исходящую почту на центральный почтовый концентратор для дальнейшей доставки, нам нет необходимости использовать локальный агент доставки подобный Procmail. Вместо него мы можем использовать программу "/bin/mail". Для удаления Procmail с вашего сервера используйте следующую команду:
[root@client]# rpm -e procmailФайл базы данных "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" для создания базы данных схем.
Для создания базы данных схем используйте следующую команду:
Назад | Оглавление | Вперед |
Глава 15 Серверное программное обеспечение (Почтовый сервис) - Sendmail (часть 1)В этой главеLinux Sendmail сервер Конфигурации Организация защиты Sendmail Утилиты администратора Sendmail Утилиты пользователя Sendmail Linux Imap и Pop сервер Конфигурации Настройка Imap и POP для использования с TCP-Wrappers inetd супер сервером Организация защиты IMAP/POP | ![]() |
Использование псевдонимов это процесс конвертирования одних локальных имен получателей в другие (использование псевдонимов возможно только для локальных имен). Например используется конвертирование общих имен (таких как 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" для создания
базы данных схем.
Для создания "базы данных схем псевдонимов", используйте следующую
команду:
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Файл "/etc/mail/local-host-names" считывается для получения альтернативных имен локального хоста. Одним из способов, как этот файл может быть использован, это объявление списка хостов для которых локальный компьютер выступает как получатель почты через MX записи. На такой машине нам просто нужно добавить имена (например, mail.openna.com), для которых он будет манипулировать почтой. Например:
Создайте файл local-host-names file (touch /etc/mail/local-host-names) и добавьте в него следют строку:
# local-host-names - включает все псевдонимы для вашего компьютера.С такой конфигурацией, вся почта отправляемая на домен "openna.com" или любая почта отправляемая на сервер "www.openna.com" или другой хост будет доставляться на ваш почтовый концентратор "mail.openna.com".
Пожалуйста запомните, что если вы настраивает вашу систему для маскарадинга под другую машину, любая почта посланная из вашей системы на вашу систему будет отправлена на машину под которую вы маскируетесь. Например, в вышеприведенной конфигурации, системные файлы регистрации, которые периодически отправляются на адрес root@www.openna.com, будут отправлены на адрес root@mail.openna.com вашего почтового концентратора.
Файл "/etc/sysconfig/sendmail" используется для определения конфигурационной информации SENDMAIL, такой как, запускать ли sendmail как демон, нужно ли слушать порт для приема почты или нет, и как долго ждать перед отправкой предупреждающего сообщения, если сообщение из каталога очереди не может быть доставлено.
Создайте файл sendmail (touch /etc/sysconfig/sendmail) и добавьте в него следующее:
DAEMON=yesОпция "DAEMON=yes" говорит Sendmail запускаться как демон. Эта строка особо полезна, когда sendmail запускается на клиентских машинах, которые не должны принимать почту из внешнего мира, а должны пересылать все сообщения на центральный почтовый концентратор. Не запуская sendmail, вы также улучшается безопасность. Если вы настаиваете sendmail подобным образом, то замените строку "DAEMON=yes" на "DAEMON=no".
Почта обычно помещается в очередь, потому что не может быть отправлена незамедлительно. "QUEUE=1h" устанавливает интервал времени до отправки предупреждающего сообщения отправителю письма, что его сообщение не может быть доставлено.
Настройка скрипта "/etc/rc.d/init.d/sendmail" для запуска и остановки демона
Sendmail.
Создайте скрипт-файл sendmail (touch /etc/rc.d/init.d/sendmail) и добавьте в него
следующее:
Сейчас, сделаем скрипт исполняемым и изменим права доступа по умолчанию:
[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 ]
Команды "rm" будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции Sendmail. Также будет удален сжатый архив Sendmail из каталога "/var/tmp".
Программа 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" используйте следующие
команды:
Для разрешения использования программы "/usr/bin/procmail" используйте следующие команды:
[root@deep /]# cd /etc/smrshВышеприведенные команды позволят запускать программы 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Сейчас перезапустите вручную процесс 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) и удалите следующие строки:
# Базовые псевдонимы системы - ДОЛЖНЫ быть представлены.Чтобы изменения вступили в силу выполните команду:
[root@deep /]# /usr/bin/newaliasesSendmail сейчас включает значительные антиспаммовские возможности, которые могут помочь предотвратить неправильное использование вашего почтового сервера неавторизированными пользователями. Для этого, редактируйте ваш файл "/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Обычно, кто угодно может вызвать обработку очереди при помощи ключа "-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Когда 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) - вывод системных почтовых псевдонимов
Команды описанные ниже мы будем часто использовать, но на самом деле их много больше, и вы должны изучить страницы руководства (man) и документацию, чтобы получить более подробную информацию.
newaliasesНазначение утилиты "newaliases" - это пересоздание и обновление базы
данных произвольного доступа для файла почтовых псевдонимов
"/etc/mail/aliases". Она должна запускаться каждый раз, когда вы изменяете
содержимое этого файла, чтобы изменения вступили в силу.
Обновите файл базы данных псевдонимов с помощью утилиты "newaliases",
используя следующую команду:
Назначение утилиты "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Команды описанные ниже мы будем часто использовать, но на самом деле их много больше, и вы должны изучить страницы руководства (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" - вывод текущего почтовых.
Для вывода почтовых псевдонимов используйте команду:
> /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
> /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 | ![]() |
Если вы настроили 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Перейдите в новый 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'
Эта модификация изменит файл "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Вышеприведенные команды будут конфигурировать программу, проверяя, что ваша система имеет необходимые библиотеки и способна выполнять необходимые функции, компилирует все исходные файлы в исполняемые двоичные, и затем, инсталлирует все двоичные и вспомогательные файлы в определенное место.
Заметим, что команда "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), то оставьте оба двоичных файла.
Команды "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" для использования 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" для использования 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 сервис.
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, используя
следующую команду:
Если вы хотите инсталлировать 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 с поддержкой 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 Тестирование инсталляции | ![]() |
Большинство серверов подобных 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Перейдите в новый 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).OpenSSL должен знать где находится необходимые OpenSSL исходные библиотеки. Командой приведенной ниже, мы устанавливаем переменную окружения PATH в каталог по умолчанию, где мы разместили исходные файлы OpenSSL.
[root@deep openssl-0.9.5a]# export LD_LIBRARY_PATH=`pwd`Сейчас, мы должны сконфигурировать OpenSSL под нашу систему:
CC="egcs" \ЗАМЕЧАНИЕ. Опция "-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Команда "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.
Команды "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.
Это общий конфигурационный файл для программы 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].
Команда "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Пожалуйста, создайте резервную копию файла server.key и запомните парольную фразу.
1.2 Создание Certificate Signing Request (CSR) с серверным приватным ключом RSA.
[root@deep ssl]# openssl req -new -key server.key -out server.csrЗАМЕЧАНИЕ. Убедитесь, что вы ввели 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Сделайте резервную копию этого файла 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ЗАМЕЧАНИЕ. Команда "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Сейчас мы имеем два файла: server.key и server.crt. Они могут быть использованы в конфигурационном файле httpd.conf Веб-сервера Apache следующим образом:
SSLCertificateFile /etc/ssl/certs/server.crt (публичный ключ веб сервера)Файл server.csr больше не нужен.
[root@deep ssl]# rm -f server.csrЗАМЕЧАНИЕ. Если вы получили сообщение об ошибке во время подписания сертификата, это потому что вы ввели неправильно FQDN ("Fully Qualified Domain Name") для сервера, когда OpenSSL запросил у вас "CommonName"; "CommonName" должен представлять из себя что-то подобное "my.domain.com" и не "domain.com". Также, так как вы создавали сертификат и CA сертификат, важно, чтобы хотя бы небольшая часть информации представленной в них отличалась, или вы можете столкнуться с проблемами во время подписания удостоверяющих запросов.
Сделайте ваши ключи "Для чтения и записи" только для пользователя root. Это важно, потому что никому не нужно работать к ним. Для этого выполните следующие команды.
[root@deep /]# chmod 600 /etc/ssl/certs/ca.crtOpenSSL может использоваться для:
> /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 Тестирование инсталляции | ![]() |
Защита клиент-серверных соединений при помощи 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/Инсталляция 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.
Вы должны модифицировать "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
Редактируйте файл 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
Редактируйте файл Makefile в подкаталоге "klips/utils" (vi klips/utils/Makefile) и сделайте в нем следующие изменения:
BINDIR=/usr/local/lib/ipsec
Должен быть:
BINDIR=/usr/lib/ipsec
MANTREE=/usr/local/man
Должен быть:
MANTREE=/usr/man
Редактируйте файл Makefile в подкаталоге "pluto" (vi pluto/Makefile) и сделайте в нем следующие изменения:
BINDIR=/usr/local/lib/ipsec
Должен быть:
BINDIR=/usr/lib/ipsec
MANTREE=/usr/local/man
Должен быть:
MANTREE=/usr/man
Редактируйте файл Makefile в подкаталоге "lib" (vi lib/Makefile) и сделайте в нем следующие изменения:
MANTREE=/usr/local/man
Должен быть:
MANTREE=/usr/man
Редактируйте файл 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
Сейчас мы должны скомпилировать и проинсталлировать FreeSWAN на сервере:
[root@deep freeswan-1.3]# make insertКоманды "make insert" создает символическую ссылку "/usr/src/linux/net/ipsec" на подкаталог с исходными кодами KLIPS, патчит некоторых файлов ядра, добавляет конфигурацию по умолчанию в конфигурационный файл ядра и в заключении создает коммуникационный файл KLIPS - "/dev/ipsec", если его еще нет. Команда "make programs" создает библиотеки, Pluto и различные пользовательские утилиты. "make install" будет инсталлировать демон Pluto и утилиты и делать их запускаемыми при загрузке системы.
Сейчас, мы должны вернуться в каталог "/usr/src/linux" и выполнить следующие команды для реконфигурирования ядра с поддержкой FreeS/WAN:
[root@deep freeswan-1.3]# cd /usr/src/linuxПервое, что надо сделать - это включить поддержку FreeS/WAN в ядре. В версии 2.2.14 ядра, новая секция, связанная с frees/WAN VPN, называется "IPSec options (FreeS/WAN)". Вам нужно ответить Y на следующие вопросы.
IPSec options (FreeS/WAN)ЗАМЕЧАНИЕ. Все настройки, которые вы сделали в различных секциях ядра до первого запуска команд "make config", "make dep" и "make clean" будут сохранены. Поэтому необходимо настроить только раздел "IPSec options (FreeS/WAN)" так, как это описано выше.
Некоторые параметры настройки сети включаются автоматически, даже если вы выключили их. Это связано с тем, что IPSEC нуждается в них. Какой бы ни была программа конфигурирования ядра, вы должны обратить внимание на некоторые проблемы. В частности, проверьте чтобы не были отключены следующие опции из секции "Сетевые опции":
Kernel/User netlink socket (CONFIG_NETLINK) [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" перед перезагрузкой системы.
Команды "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.
Конфигурационный файл 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 фиксировать различные сообщения об ошибках.
В файле "ipsec.secrets" хранятся секреты используемые демоном pluto для установления подлинности передачи между шлюзами. Может быть настроено два типа секретов preshared секреты и приватные ключи RSA. Вы должны проверить, чтобы владельцем файла был "root" и только он должен иметь право доступа к файлу.
Шаг 1Пример секрета поставляется в файле "ipsec.secrets" по умолчанию. Вы должны
изменить его на свой собственный. С автоматической поддержкой ключей вы
можете разделять секрет до 256 бит, которые затем используются во время
обмена ключами, чтобы не происходили атаки man-in-the-middle.
Для создания общего секрета используйте команду:
Сейчас будут созданы случайные ключи при помощи утилиты 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".
Напомним, что сейчас FreeSWAN имеет два типа секретов: предварительно разделенные секреты и приватные ключи RSA. Предварительно разделенные секреты, которые настраиваются в наших файлах "ipsec.conf" и "ipsec.secrets", мы рассмотрели выше. Некоторые люди предпочитают использовать приватные ключи RSA для аутентификации других хостов через Pluto демон. Если вы находитесь в этой ситуации, то надо будет сделать некоторые изменения в файлах "ipsec.conf" и "ipsec.secrets", как описано ниже:
Вам нужно создать независимый RSA ключ для каждого шлюза. Каждый из них хранит этот ключ в своем файле "ipsec.secrets", а публичный ключ перемещается в параметры "leftrsasigkey" и "rightrsasigkey" секции conn файла "ipsec.conf", который одинаков для обоих шлюзах.
Шаг 1Создайте независимый ключ RSA для каждого из шлюзов.
На первом шлюзе (например, deep) используйте команду:
На втором шлюзе (например, mail) используйте команду:
[root@mail /]# cd /Утилита 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 Тестирование инсталляции | ![]() |
Здесь приводятся некоторые вещи, которые вы должны проверить для корректной работы 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Вы должны перезапустить настройки сети, чтобы изменения вступили в силу:
[root@deep /]# /etc/rc.d/init.d/network restart Bringing up interface lo [ OK ] Bringing up interface eth0 [ OK ] Bringing up interface eth1 [ OK ]
Помниту, что соединения с автоматическим снабжением ключами использует ключи автоматически созданные демоном согласования ключей 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:
ЗАМЕЧАНИЕ. Подкаталог "ipsec0" в нашем примере будет создан только после перезагрузки системы. Так, что проверить значение файла "rp_filter" в каталоге "ipsec0" можно будет только когда система перезагрузится.
Для установки значения 0 (off) в оба файла вручную используйте команды:
[root@deep /]# echo 0 > /proc/sys/net/ipv4/conf/ipsec0/rp_filterТакже можно добавить эти строки в скрипт файл firewall (/etc/rc.d/init.d/firewall) на обоих шлюзах, чтобы значение 0 (off) устанавливалось автоматически при каждой загрузке системы:
# Disable IP spoofing protection to allow IPSEC to work properlyЗАМЕЧАНИЕ. В нашем примере мы предполагаем что для установления соединений используется интерфейс eth0. Конечно, если вы используете eth1 вам надо просто заменить eth0 на eth1.
Если вы забудете сделать этот шаг, то получите на вашем терминале следующие сообщения об ошибках при запуске FreeSWAN IPSEC:
ipsec_setup: WARNING: ipsec0 has route filtering turned on, KLIPS may not workВажно заметить, что любые правила маскарадинга для внутренней сети, которая использует IPSEC, должны находится после правил разрешающих трафик связанный с IPSEC (шаги 2 и 3 выше), или машина будет маскарадить трафик вместо пропускания его через IPSEC.
Редактируйте скрипт firewall (vi /etc/rc.d/init.d/firewall) на обоих шлюзовых машинах и добавьте следующие строки позволяющие маскарадить пакеты направляемые на удаленный шлюз и обратно:
# Маскарадинг внутреннего трафика.где EXTERNAL_INTERFACE="eth0" # Ваш внешний интерфейс в Интернет.
где LOCALNET_1=" 192.168.1.0/24" # диапазон внутренних адресов который вы
используете.
ЗАМЕЧАНИЕ. Смотрите главу 8 "Сетевой брандмауэр с поддержкой маскарадинга и форвардингом" для большей информации.
Сейчас, вы можете перезагрузить вашу систему, и машины за шлюзом A должны без проблем обмениваться информацией с машинами за шлюзом B.
Изучите файл "/var/log/secure" для выявления возникших трудностей. Если все хорошо, то вы должны увидеть нечто подобное:
Feb 21 14:45:42 deep Pluto[432]: Starting Pluto (FreeS/WAN Version 1.3)Интерфейсы IPSEC должны быть подключены поверх определенных
физических интерфейсов.
Проверьте что:
Сейчас выполните следующую команду для получения минимальной отладочной информации и проверьте, что полученный результат выглядит примерно так:
[root@deep /]# ipsec lookВыполните команду 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 Конфигурации Команды | ![]() |
Если мы говорим в этой книге о безопасности и оптимизации, то почему вдруг возникает глава посвященная 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Перейдите в новый OpenLDAP каталог и введите следующие команды на вашем терминале:
Шаг 1Важно заметить, что вы можете настроить три различных вида баз данных на использование с LDAP. Высокопроизводительная, с памятью на диске база данных "LDBM"; интерфейс базы данных к произвольным UNIX командам или shell скриптам, называемый "SHELL"; и простейшая база данных используемая в файле паролей "PASSWD".
По умолчанию OpenLDAP подразумевает использование базы данных LDBM,так что если вы хотите настроиться на другой тип базы данных, вы должны при инсталляции определить ее. Для SHELL вы должны добавить опцию "--enable-shell", а для PASSWD (используется как замена сервису NIS) - "--enable-passwd".
CC="egcs" \Эти опции настраивают OpenLDAP на следующее:
ЗАМЕЧАНИЕ. Опции компиляции предложенные выше предполагают использование базы данных LDBM. Для других типов баз данных используйте соответствующие опции, описанные выше.
Шаг 2Сейчас мы должны скомпилировать и инсталлировать OpenLDAP на сервере:
[root@deep openldap-1.2.10]# make dependКоманда "make depend" будет создавать необходимые зависимости для различных файлов, "make" компилирует все файлы с исходными кодами в исполняемые двоичные файлы и затем "make install" инсталлирует исполняемые файлы и файлы поддержки в необходимые каталоги. Команда "make" в подкаталоге "/test" будет делать некоторые важные тесты для проверки функциональности вашего LDAP сервера перед инсталляцией. Если некоторые тесты закончатся ошибкой, вам необходимо исправить их перед продолжением инсталляции.
[root@deep openldap-1.2.10]# install -d -m 700 /var/ldapКоманда "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/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" для старта и остановки 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 ]
Бит постоянства может быть использован для предотвращения случайного удаления или переписывания защищаемых файлов. Он также предотвращает возможность создания символических ссылок к этим файлам. После того как ваш файл "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
Есть два метода создания базы данных для 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>Опция "-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После того, как файл "newentry" создан, мы должны добавить элемены в сервер каталогов LDAP. Для этого используйте следующую команду:
[root@deep /]# ldapadd -f /tmp/newentry -D "cn=admin, o=openna, c=com" -WВышеприведенная команда подразумевает что вы установили 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После создания файла "modifyentry", мы должны заменить элемнты каталога LDAP сервера в соответствии с содержимым этого файла. Это делается следующей командой:
[root@deep /]# ladpmodify -D 'cn=Admin, o=openna, c=com' -W -f <inputfile>где <inputfile> - имя файла "modifyentry", который был создан на шаге 1.
Утилита ldapsearch ищет в базе данных каталога LDAP информацию, которую
вы запрашиваете.
Искать в каталоге LDAP элемент, используя команду:
Эта команда будет возвращать все элементы и значения с именем europe и будет выводить результаты в стандартный вывод вашего терминала.
OpenLDAP может использоваться как:
Если вы имеете Netscape проинсталлированный на вашей Linux системе или любой другой операционной системе, то вы можете использовать его возможности Address Book для доступа к серверу каталогов LDAP, только что установленной на вашем Linux и запросить ваш сервер каталогов об информации подобной той, что вы получали используя команду "ldapsearch". Если вы интересуетесь как сделать это, то следуйте по шагам описанным ниже:
Например:
Сейчас вы сделаи все, что нужно, чтобы иметь возможность создавать запросы к вашему серверу каталогов 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, оригинально разработанная в 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 уже инсталлирован, используя
команду:
Для инсталляции 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Первое, для уменьшения риска безопасности, мы создадим непривилегированный бюджет пользователя "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 || :Перейдите в новый PosgreSQL каталог, а затем в подкаталог "src". Введите следующие команды на вашем терминале:
[root@deep /]# cd /var/tmp/postgresql-6.5.3Редактируйте файл 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Команда "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.
После того, как вы проинсталлировали 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"! Это создаст большую дыру в безопасности.
Удаление пакета 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", который будет отвечать за запуск и
остановку 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Для удаления пользователя из базы данных используйте утилиту destroyuser:
[root@deep /]# su postgresДля создания новой базы данных запустите утилиту createdb:
[root@deep /]# su postgres [postgres@deep /]$ createdb dbname (dbname - это имя создаваемой базы данных).Или из терминальной программы Postgres (psql)
[root@deep /]# su adminЗАМЕЧАНИЕ. Клиентское соединение должно быть разрешено с этого IP адреса и/или имени пользователя в файле "pg_hba.conf", расположенного в PG_DATA.
Другие полезные команды, выполняемые в терминальной программе Postgres (psql):
Соединение с новой базой данных:
template1 _ > \c 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;> /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 | ![]() |
Прокси сервера, с их способностью к экономии полосы пропускания, улучшения безопасности, улучшения скорости веб-серфинга, становятся все более и более популярными. В настоящее время на рынке есть только несколько программных прокси-серверов. Они имеют два основных недостатка: они коммерческие и не поддерживают 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
Прокси-сервер Squid не должен запускаться из под пользователя root, и по этой причине мы создаем специального пользователя, не имеющего оболочки, для запуска Squid.
[root@deep /]# useradd -d /cache/ -r -s /dev/null squid >/dev/null 2>&1Первое, мы добавляем пользователя "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".
Если вы страдаете от ограничения памяти на вашей системе, то производительность кэша Squid будет пониженной. Для решения этой проблемы, вы можете связать Squid с внешней библиотекой malloc, такой как GNU malloc. Чтобы Squid использовал GNU malloc как внешнюю библиотеку выполните следующие шаги:
Пакеты
Домашняя страница GNU malloc: http://www.gnu.org/order/ftp.html
Вы должны скачать: malloc.tar.gz
Компилируйте и инсталлируйте GNU malloc на вашей системе выполнив следующие команды:
[root@deep tmp]# cd mallocКопируйте файл "libmalloc.a" в каталог с вашими системными библиотеками под именем "libgnumalloc.a".
[root@deep malloc]# cp libmalloc.a /usr/lib/libgnumalloc.aКопируйте файл "malloc.h" в каталог с системными заголовочными файлами под именем gnumalloc.h".
[root@deep malloc]# cp malloc.h /usr/include/gnumalloc.hSquid автоматически определит файлы "libgnumalloc.a" и "gnumalloc.h" и будет использовать их для улучшения производительности кэша.
Перейдите в каталог с исходными кодами Squid и введите следующие команды на вашем терминале:
CC="egcs" \Эти опции говорят Squid:
Сейчас, мы должны скомпилировать и инсталлировать Squid на сервере:
[root@deep squid-2.3.STABLE2]# make -f makefileКоманда "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" уменьшит размер двоичных файлов для оптимизации их производительности.
Очистка после работыКоманды "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.
Файл "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", может немного увеличить
скорость записи некоторых файлов регистрации. Это оптимизационная
возможность.
Внеся небольшие изменения в файл "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 будут разрешать доступ всем внутренним клиентам из диапазона приватных адресов класса 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" для запуска и остановки кэширующего прокси сервера 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Настроим ваш файл "/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 в независимом разделе вашей 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Атрибуты atime и noatime могут быть использованы, чтобы немного улучшить производительность кэша Squid. Смотрите главу 4 в этой книге, "Общая системная оптимизация", для большей информации по этой теме.
Физическая памятьНаиболее важный ресурс для Squid это физическая память. Вам не нужен очень быстрый процессор. Ваша дисковая система будет основным узким местом, так что быстрые диски важны для кэша. Не используйте IDE дисков, есди это возможно.
Утилита 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.
Если вы решили использовать Squid как кэширующий прокси сервер и позволять всем пользователям использовать его для доступа в Интернет, вы должны настроить соответствующим образом броузеры пользователей, чтобы они брали информацию со Squid, вместо прямого обращения в Интернет.
Для Netscape Communicator, выполните следующие шаги:
> /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 | ![]() |
Если вы планируете инсталлировать и использовать модули для веб сервера 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Переместитесь в новый каталог mm и введите следующие команды на терминале
./configure \Опции говорят MM:
- Отключить совместно используемые библиотеки.
Сейчас, мы должны скомпилировать и инсталлировать библиотеку совместно используемой памяти:
[root@deep mm-1.1.2]# makeЗАМЕЧАНИЕ. Команда "make test" создаст несколько важных тестов, для проверки работоспособности программы.
Очистка после работыКоманды "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 - это, в настоящее время, наиболее широко используемый 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Веб сервер Apache, подобно многим приложениям, которые мы инсталлировали, не должен запускаться из-под суперпользователя root. Из этих соображений мы должны создать специального пользователя, который имеет минимальный доступ в систему и предназначен только для запуска демона веб сервера.
[root@deep /]# useradd -c "Apache Server" -u 80 -s /bin/false -r -d /home/httpd www 2>/dev/null || :Если вы хотите использовать и включить поддержку SSL шифрования данных в ваш веб сервер Apache, то переместитесь в новый каталог с исходными кодами mod_ssl (cd mod_ssl-version-version/) и введите следующие команды на вашем терминале:
CC="egcs" \Опция "--with-apache" определяет месторасположения каталога с исходными кодами Apache (мы допустили, что в нашем примере используем Apache версии 1.3.12), опция "--with-crt" определяет месторасположения вашего существующего публичного ключа для SSL шифрования, и опция "--with-key" определяет месторасположение вашего существующего приватного ключа для SSL шифрования.
ЗАМЕЧАНИЕ. Программное обеспечение OpenSSL должен быть уже проинсталлировано на вашем сервере, публичный и приватные ключи тоже должны уже существовать или быть созданы, или вы получите сообщение об ошибке во время конфигурирования модуля mod_ssl. Смотрите главу 16 этой книги "Серверное программное обеспечение (Сетевой сервис шифрования)", для большей информации.
Шаг 3По умолчанию в конфигурационном файле 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ЗАМЕЧАНИЕ. Если вы настраиваете Apache без поддержки mod_ssl, то нужно будет редактировать строку 316, а не 333.
Шаг 4Если вы хотите использовать и включить поддержку PHP4 в ваш веб сервер Apache, то перейдите в каталог с исходными кодами Apache (cd apache_1.3.12/) и выполните следующие команды:
CC="egcs" \ЗАМЕЧАНИЕ. Этот шаг необходим только если вы хотите включить поддержку 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>Эти модификации в файле "php_pgsql.h" необходимы, чтобы указать месторасположения заголовочных файлов "libpq-fe.h" и "libpq-fs.h" для базы данных PostgreSQL во время конфигурирования PHP4. В Red Hat Linux библиотеки PostgreSQL находятся в (/usr/include/pgsql).
2) Сейчас, мы должны сконфигурировать и инсталлировать PHP4 на нашем Linux сервере:
CC="egcs" \Эти опции говорят PHP4:
Если вы хотите использовать и включить поддержку языка программирования Perl в ваш веб-сервер Apache, то перейдите к каталог с исходными кодами mod_perl (cd ../mod_perl-1.24/) и введите следующие команды на вашем терминале:
perl Makefile.PL \Создание/Инсталляция Apache с/без mod_ssl +- PHP4 и/или mod_perl Сейчас, когда вы добавили в исходные коды Apache все модули, которые хотели, наступило время скомпилировать и проинсталлировать его. Переместитесь в каталог с исходными кодами Apache (cd ../apache_1.3.12/) и введите следующие команды на вашем терминале:
SSL_BASE=SYSTEM \ (требуется если вы хотите включить поддержку mod_ssl в Apache).Эти опции говорят Apache выполнить следующие установки:
ЗАМЕЧАНИЕ. Важно заметить, что удаление всех необязательных модулей во время конфигурирования улучшит производительность вашего веб сервера Apache. В нашей конфигурации приведенной выше, мы удалили большинство неиспользуемых модулей для уменьшения времени загрузки и ограничения риска безопасности вашего веб сервера. Смотрите документацию Apache, чтобы получить информацию о каждом удаленном модуле.
Шаг 7Сейчас, мы должны инсталлировать Apache на вашем Linux сервере:
[root@deep apache_1.3.12]# makeКоманда "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".
Очистка после работы.Команды "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.
Файл "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" для автоматической ротации
файлов регистрации 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", который предназначен для запуска
и остановки веб сервера 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 с вашим веб сервером 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Вы должны перезапустить веб сервер Apache, чтобы изменения вступили в силу:
[root@deep /]# /etc/rc.d/init.d/httpd restart Shutting down http: [ OK ] Starting httpd: [ OK ]
После того, как вышеприведенные строки были включены в файл "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 работает.
Если вы планируете использовать модуль 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
Перейдите в новый каталог Devel-Symdump и введите следующие команды для компиляции и инсталляции модуля на ваш Linux сервер:
[root@deep Devel-Symdump-2.00]# perl Makefile.PLКак только модуль проинсталлирован на вашей системе, вы должны включить в ваш файл "/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>
Перезапустите веб сервер Apache, чтобы изменения вступили в силу:
[root@deep /]# /etc/rc.d/init.d/httpd restart
Shutting down http: [ OK ] Starting httpd: [ OK ]
В заключении, мы должны тестировать новый модуль 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
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
Первое, в должны проверить версию CGI.pm инсталлированной на вашей системе. Для этого используйте следющую команду:
[root@deep]# perl -e 'use CGI; print $CGI::VERSION."\n";'Перейдите в каталог CGI.pm и введите следующие команды на вашем терминале для компиляции и инсталляции обновленной библиотеки на вашем Linux сервере:
[root@deep CGI.pm-2.56]# perl Makefile.PLОчистка после работы
[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 на вашем сервере, некоторые файлы и каталоги имеют слишком много прав установленных по умолчанию. Двоичная программа "httpd" может быть установлена в режим только для чтения пользователю "root", и исполнения для владельца, группы и других пользователей. Каталоги "/etc/httpd/conf" и "/var/log/httpd" не должны быть открыты для чтения, записи и исполнения для других людей.
[root@deep /]# chmod 511 /usr/sbin/httpdЕсли вы включили автоматическую индексацию каталогов в вашем конфигурационном файле, (IndexOptions в httpd.conf), тогда вы имеете проблему в безопасности, так как любой запрос к каталогу, не имеющему индексного файла, вызовет создания индекса всего того, что находится в каталоге. Во многих случаях, вы можете хотеть, чтобы пользователи смотрели файлы, которые вы специально создали для этого. Для отключения этой возможности, вам нужно удалить право на чтение из каталога DocumentRoot (но не файлов внутри него).
[root@deep /]# cd /home/httpd/Сейчас, после этой модификации, любой запрос к защищенному каталогу должен получить сообщение об ошибке:
ForbiddenЗАМЕЧАНИЕ. "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где </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 ]
В заключение, мы должны тестировать новый защищаемый каталог (private). Для проверки введите в окне броузера следующий адрес: http://my-web- server/private/. <my-web-server> - адрес вашего веб сервера, </private/> - это каталог, который вы защищаете.
Как мы уже знаем, бит "постоянства" может быть использован для предотвращения удаления, переписывания или создания символической ссылки к файлу. Так как ваш файл "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 как точку взлома системы. Apache по умолчанию запускается как не root пользователь, ограничивая тем самым любые разрушения, действиями, котрые может выполнить обычный пользователь с локальным shell. Конечно, в большинстве случаев такой защиты достаточно, но можно сделать еще один дополнительный шаг - запуск Apache в chroot окружении.
Основная выгода от использования chroot - это ограничение части файловой системы, которую демон может видеть как корневой каталог. Дополнительно, так как эта часть файловой системы нужна только для поддержки Apache, то количество программ доступное на ней чрезвычайно ограничено. Наиболее важно то, что здесь не нужно иметь setuid-root программ, которые можно использовать для получения root доступа и взлома chroot ограничений.
Chrooting apache - это не простая задача. Перед ее решением мы рассмотрим некоторые "за" и "против", чтобы вы решили нужно ли вам это.
За:
Против:
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 выполните
следующую команду:
Сделайте заметки об этих файлах; они потребуются нам позже.
Шаг 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Копируйте основной конфигурационный каталог, конфигурационные файлы, каталог cgi-bin, root каталог и программу httpd в chroot окружение:
[root@deep /]# cp -r /etc/httpd /chroot/httpd/etc/Нам нужны каталоги "/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).Так как мы компилировали apache с использованием разделяемых библиотек, нам нужно инсталлировать их в структуру chroot каталога. Используйте ldd /chroot/httpd/usr/sbin/httpd для поиска требуемых библиотек. Вывод этой команды будет выглядеть примерно так:
libpam.so.0 => /lib/libpam.so.0 (0x40016000)Копируйте разделяемые библиотеки определенные выше:
[root@deep /]# cp /lib/libpam.so.0 /chroot/httpd/lib/Вам также нужны следующие дополнительные библиотеки для некоторых сетевых функций, подобных резолвингу:
[root@deep /]# cp /lib/libnss_compat* /chroot/httpd/lib/Мы должны скопировать passwd и group файлы в "/chroot/httpd/etc". Концепция их использования такая же как и в ftpd. Затем, мы удаляем все элементы из этих файлов, за исключением пользователя и группы под которыми запускается apache.
[root@deep /]# cp /etc/passwd /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:Вам потребуются файлы "/etc/resolv.conf", "/etc/nsswitch.conf" и "/etc/hosts" в вашем chroot окружении.
[root@deep /]# cp /etc/resolv.conf /chroot/httpd/etc/Сейчас на некоторые файлы в chroot окружении мы установим бит
"постоянства" для лучшей безопасности.
Установите бит "постоянства" на файл "passwd":
Установите бит "постоянства" на файл "group":
[root@deep /]# cd /chroot/httpd/etc/Установите бит "постоянства" на файл "httpd.conf":
[root@deep /]# cd /chroot/httpd/etc/httpd/conf/Установите бит "постоянства" на файл "resolv.conf":
[root@deep /]# cd /chroot/httpd/etc/Установите бит "постоянства" на файл "hosts":
[root@deep /]# cd /chroot/httpd/etc/Установите бит "постоянства" на файл "nsswitch.conf":
[root@deep /]# cd /chroot/httpd/etc/Копируйте файл "localtime" в chroot так, чтобы регистрационные входы были правильно откорректированы для вашей локальной timezone:
[root@deep /]# cp /etc/localtime /chroot/httpd/etc/Удалите не нужные Apache файлы и каталоги:
[root@deep /]# rm -rf /var/log/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
По умолчанию скрипт 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
В заключении, вы должны проверить новую 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Если это так, то проверьте действительно процесс сменил корень (chroot):
[root@deep /]# ls -la /proc/14373/root/где 14373 PID одного из процессов httpd.
Поздравляем!
Так же как описано выше, если вы используете Perl, вам нужно скопировать или создать жесткие ссылки любых системных библиотек, perl библиотек "/usr/lib/perl5" и двоичных файлов в chroot структуре. Также надо действовать для SSL, PHP, LDAP, PostgreSQL и других программ.
Сейчас, файлы регистраций 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", который может быть использован для улучшения производительности вашего веб сервера. Этот модуль работает, отображая статически настроенный список часто запрашиваемых, но редко модифицируемых файлов из 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>ЗАМЕЧАНИЕ. Смотрите документацию на 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 в этой книге, "Общая системная оптимизация " для большей информации по этом вопросу.
> /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
> /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
Назад | Оглавление | Вперед |
Мы подготовили эту главу следуя за процедурой инсталляции. Каждый раздел ниже будет проводить вас через различные экраны, которые будут возникать в процессе установки сервера.
Время от времени 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. Поэтому сейчас вы должны прекратить чтение и прояснить для себя этот вопрос. Будьте готовы ответить на следующие вопросы:
(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:Программа rawrite.exe запрашивает имя образа. Введите boot.img и вставьте дискету в дисковод. Затем программа спрашивает на какой диск записать образ. Ответьте a:. После завершения процедуры подпишите дискету, например "Red Hat boot disk".
Шаг 2.Если мы запускаем инсталляцию не напрямую с CD-ROM, то загружайтесь с дискеты. Вставьте дискету, которую вы создали, в дисковод A:, на компьютере, где вы собираетесь установить Linux и перезагрузите его. После появления приглашения к загрузке нажмите Enter для продолжения и выполните три следующих действия:
Red Hat Linux 6.1 и 6.2 включает четыре предопределенных типа инсталляции:
Идея состоит в том, чтобы проинсталлировать минимальное количество пакетов. Меньшее количество программного обеспечение, уменьшает количество потенциальных проблем с безопасностью. Выберите "Custom" и нажмите Next.
Разбиение диска (Disk Druid)(All) Мы принимаем, что вы устанавливаете Linux на новый диск, на котором нет никаких файловых или операционных систем. Хорошая стратегия разбития диска, это разделение его на отдельные разделы для каждой важной файловой системы.
Разбиение дика на несколько разделов дает следующие преимущества:
Внимание. Если на вашем компьютере есть файловые системы, мы настоятельно рекомендуем сделать резервную копию вашей системы перед разбиением диска.
Шаг 1.Исходя из соображений стабильности и безопасности мы рекомендуем разбить диск согласно принципам описанным ниже. Мы исходили из того, что у вас есть SCSI диск объемом 3.2 GB. Конечно, вы можете изменить размеры разделов, исходя из размеров вашего диска и личных нужд.
Разделы которые необходимо создать на вашем диске.
/boot | 5MB | Образы ядер находятся здесь. |
/usr | 512MB | Должен быть большим. Все двоичные файлы Linux хранятся здесь. |
/home | 1146MB | Пропорционально числу пользователей (например, 10MB на пользователя * число пользователей 114 = 1140MB). |
/chroot | 256MB | Если вы будете использовать программы с CHROOT (например DNS). |
/cache | 256MB | Кэш раздел для прокси сервера (например, Squid). |
/var | 256MB | Содержит файлы которые изменяются при нормальной работе системы (например, логфайлы). |
<Swap> | 128MB | swap раздел. Виртуальная память Linux. |
/tmp | 256MB | Раздел для временных файлов. |
/ | 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 - это утилита, которая облегчает процедуру разбиения диска на разделы. Выберите "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
диск).
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
По окончании процедуры разбиения диска у вас должна получиться следующее:
Точка монтирования | Устройство | Объем требуемый | Объем выделенный | Тип файловой системы |
/boot | Sda1 | 5M | 5M | Linux Native |
/usr | Sda5 | 512M | 512M | Linux Native |
/home | Sda6 | 1146M | 1146M | Linux Native |
/chroot | Sda7 | 256M | 256M | Linux Native |
/cache | Sda8 | 256M | 256M | Linux Native |
/var | Sda9 | 256M | 256M | Linux Native |
<Swap> | Sda10 | 128M | 128M | Linux Swap |
/tmp | Sda11 | 256M | 256M | Linux Native |
/ | Sda12 | 256M | 256M | Linux 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, где вы сможете выбрать куда вы ее хотите проинсталлировать.
Обычно, если Linux будет единственной ОС на вашей машине, то LILO устанавливают в MBR. После этого вам будет предложено настроить сеть и часы. Когда часы будут установлены, нужно выбрать пароль пользователя root и определить конфигурацию идентификации. Для нее не забудьте выбрать:
Включать NIS не надо, так как мы не будем настраивать NIS сервис на нашем сервере.
Компоненты инсталляции (Выбор пакетов для инсталляции)(All) После того, как вы разбили диск и отформатировали разделы наступает пора выбирать пакеты для инсталляции. По умолчанию, Linux является полнофункциональной системой с большим количеством запущенных сервисов. Большинство из них не нужны и могут нанести вред безопасности сервера. Идеально, когда каждый из сервисов работает на отдельной машине. Многие дистрибутивы Linux сконфигурированы по умолчанию на обслуживание широкого спектра сервисов, так что вам надо сконфигурировать сервер так, чтобы отключить ненужные службы. Предложение использовать важнейшие сервисы на отдельных компьютерах улучшает сетевую безопасность по следующим причинам:
Правильная инсталляция 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 разделены на серверные и клиентские пакеты, мы все равно рекомендуем деинсталлировать их из соображений повышения безопасности.
Назад | Оглавление | Вперед |
Ниже приводится список программ и краткие описания их использования. Для улучшения безопасности мы должны деинсталлировать их. Для получения большей информации и пояснений об их особенностях и использовании читайте руководство пользователя 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) |
pump | pump |
mt-st | mt-st |
eject | eject |
mailcap | mailcap |
apmd | apmd |
kernel-pcmcia-cs | kernel-pcmcia-cs |
linuxconf | linuxconf |
getty_ps | getty_ps |
setconsole | |
isapnptools | isapnptools |
setserial | setserial |
kudzu | kudzu |
raidtools | raidtools |
gnupg | gnupg |
redhat-logos | redhat-logos |
redhat-release | redhat-release |
gd | gd |
pciutils | pciutils |
rmt | rmt |
Используйте следующие команды 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).
Назад | Оглавление | Вперед |
Чтобы иметь возможность компилировать программы нужные вашему серверу вы должны проинсталлировать ряд 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.rpm | autoconf-2.13-5.noarch.rpm |
m4-1.4-12.i386.rpm | m4-1.4-12.i386.rpm |
automake-1.4-5.noarch.rpm | automake-1.4-6.noarch.rpm |
dev86-0.14.9-1.i386.rpm | dev86-0.15.0-2.i386.rpm |
bison-1.28-1.i386.rpm | bison-1.28-2.i386.rpm |
byacc-1.9-11.i386.rpm | byacc-1.9-12.i386.rpm |
cdecl-2.5-9.i386.rpm | cdecl-2.5-10.i386.rpm |
cpp-1.1.2-24.i386.rpm | cpp-1.1.2-30.i386.rpm |
cproto-4.6-2.i386.rpm | cproto-4.6-3.i386.rpm |
ctags-3.2-1.i386.rpm | ctags-3.4-1.i386.rpm |
egcs-1.1.2-24.i386.rpm | egcs-1.1.2-30.i386.rpm |
ElectricFence-2.1-1.i386.rpm | ElectricFence-2.1-3.i386.rpm |
flex-2.5.4a-7.i386.rpm | flex-2.5.4a-9.i386.rpm |
gdb-4.18-4.i386.rpm | gdb-4.18-11.i386.rpm |
kernel-headers-2.2.12-20.i386.rpm | kernel-headers-2.2.14-5.0.i386.rpm |
glibc-devel-2.1.2-11.i386.rpm | glibc-devel-2.1.3-15.i386.rpm |
make-3.77-6.i386.rpm | make-3.78.1-4.i386.rpm |
patch-2.5-9.i386.rpm | patch-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 | ################################################## |
Выходим из системы и снова входим в нее, чтобы все изменения
сработали.
[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. | |
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-1 | filesystem-1.3.5-1 | basesystem-6.0-4 |
ldconfig-1.9.5-15 | glibc-2.1.2-11 | shadow-utils-19990827-2 |
mktemp-1.5-1 | termcap-9.12.6-15 | libtermcap-2.0.8-18 |
bash-1.14.7-16 | MAKEDEV-2.5-2 | SysVinit-2.77-2 |
chkconfig-1.0.7-2 | ncurses-4.2-25 | info-3.12h-2 |
fileutils-4.0-8 | grep-2.3-2 | ash-0.2-18 |
at-3.1.7-11 | m4-1.4-12 | bdflush-1.5-10 |
binutils-2.9.1.0.23-6 | bzip2-0.9.5c-1 | sed-3.02-4 |
console-tools-19990302-17 | e2fsprogs-1.15-3 | byacc-1.9-11 |
cpio-2.4.2-13 | cracklib-2.7-5 | cracklib-dicts-2.7-5 |
crontabs-1.7-7 | textutils-2.0-2 | dev-2.7.10-2 |
diffutils-2.7-16 | dump-0.4b4-11 | ed-0.2-12 |
bison-1.28-1 | etcskel-2.0-1 | file-3.27-3 |
findutils-4.1-32 | gawk-3.0.4-1 | cdecl-2.5-9 |
gdbm-1.8.0-2 | autoconf-2.13-5 | glib-1.2.5-1 |
gmp-2.0.2-10 | cpp-1.1.2-24 | gpm-1.17.9-3 |
groff-1.11a-9 | gzip-1.2.4-14 | initscripts-4.48-1 |
ipchains-1.3.9-3 | cproto-4.6-2 | ElectricFence-2.1-1 |
kernel-2.2.12-20 | patch-2.5-9 | ld.so-1.9.5-11 |
less-340-1 | libc-5.3.12-31 | libstdc++-2.9.0-24 |
lilo-0.21-10 | pwdb-0.60-1 | pam-0.68-7 |
sh-utils-2.0-1 | automake-1.4-5 | logrotate-3.3-1 |
losetup-2.9u-4 | lsof-4.45-1 | mailx-8.1.1-9 |
man-1.5g-6 | mingetty-0.9.4-10 | mkbootdisk-1.2.2-1 |
mkinitrd-2.3-1 | modutils-2.1.121-14 | mount-2.9u-4 |
ctags-3.2-1 | ncompress-4.2.4-14 | net-tools-1.53-1 |
netkit-base-0.10-37 | newt-0.50-13 | passwd-0.63-1 |
perl-5.00503-6 | flex-2.5.4a-7 | procps-2.0.4-2 |
psmisc-18-3 | python-1.5.2-7 | quota-1.66-8 |
gdb-4.18-4 | readline-2.2.1-5 | glibc-devel-2.1.2-11 |
rootfiles-5.2-5 | rpm-3.0.3-2 | sash-3.3-1 |
make-3.77-6 | shapecfg-2.2.12-2 | slang-1.2.2-4 |
slocate-2.0-3 | stat-1.5-11 | sysklogd-1.3.31-12 |
tar-1.13.11-1 | tcp_wrappers-7.6-9 | tcpdump-3.4-16 |
tcsh-6.08.00-6 | time-1.7-9 | timed-0.10-23 |
tmpwatch-2.0-1 | traceroute-1.4a5-16 | utempter-0.5.1-2 |
util-linux-2.9w-24 | vim-common-5.4-2 | vim-minimal-5.4-2 |
vixie-cron-3.0.1-39 | which-2.8-1 | zlib-1.1.3-5 |
dev86-0.14.9-1 | egcs-1.1.2-24 | kernel-headers-2.2.12-20 |
(6.2) Содержимое файла installed_rpm должно выглядеть так:
setup-2.1.8-1 | filesystem-1.3.5-1 | basesystem-6.0-4 |
ldconfig-1.9.5-16 | glibc-2.1.3-15 | shadow-utils-19990827-10 |
mktemp-1.5-2 | termcap-10.2.7-9 | libtermcap-2.0.8-20 |
bash-1.14.7-22 | MAKEDEV-2.5.2-1 | SysVinit-2.78-5 |
anacron-2.1-6 | chkconfig-1.1.2-1 | m4-1.4-12 |
ncurses-5.0-11 | info-4.0-5 | fileutils-4.0-21 |
grep-2.4-3 | ash-0.2-20 | at-3.1.7-14 |
byacc-1.9-12 | bc-1.05a-5 | bdflush-1.5-11 |
binutils-2.9.5.0.22-6 | bzip2-0.9.5d-2 | sed-3.02-6 |
console-tools-19990829-10 | e2fsprogs-1.18-5 | cpio-2.4.2-16 |
cracklib-2.7-5 | cracklib-dicts-2.7-5 | crontabs-1.7-7 |
textutils-2.0a-2 | dev-2.7.18-3 | diffutils-2.7-17 |
dump-0.4b15-1 | ed-0.2-13 | cdecl-2.5-10 |
etcskel-2.3-1 | file-3.28-2 | findutils-4.1-34 |
gawk-3.0.4-2 | patch-2.5-10 | gdbm-1.8.0-3 |
bison-1.28-2 | glib-1.2.6-3 | gmp-2.0.2-13 |
autoconf-2.13-5 | gpm-1.18.1-7 | groff-1.15-8 |
gzip-1.2.4a-2 | inetd-0.16-4 | initscripts-5.00-1 |
ipchains-1.3.9-5 | iputils-20000121-2 | cpp-1.1.2-30 |
cproto-4.6-3 | kernel-2.2.14-5.0 | ctags-3.4-1 |
kernel-utils-2.2.14-5.0 | ElectricFence-2.1-3 | ld.so-1.9.5-13 |
less-346-2 | libc-5.3.12-31 | libstdc++-2.9.0-30 |
lilo-0.21-15 | pwdb-0.61-0 | pam-0.72-6 |
sh-utils-2.0-5 | automake-1.4-6 | logrotate-3.3.2-1 |
losetup-2.10f-1 | lsof-4.47-2 | mailx-8.1.1-10 |
man-1.5h1-1 | mingetty-0.9.4-11 | mkbootdisk-1.2.5-3 |
mkinitrd-2.4.1-2 | modutils-2.3.9-6 | mount-2.10f-1 |
flex-2.5.4a-9 | ncompress-4.2.4-15 | net-tools-1.54-4 |
newt-0.50.8-2 | passwd-0.64.1-1 | perl-5.00503-10 |
popt-1.5-0.48 | procmail-3.14-2 | procps-2.0.6-5 |
psmisc-19-2 | quota-2.00pre3-2 | gdb-4.18-11 |
readline-2.2.1-6 | make-3.78.1-4 | rootfiles-5.2-5 |
rpm-3.0.4-0.48 | sash-3.4-2 | shapecfg-2.2.12-2 |
slang-1.2.2-5 | slocate-2.1-2 | stat-1.5-12 |
sysklogd-1.3.31-16 | tar-1.13.17-3 | tcp_wrappers-7.6-10 |
tcpdump-3.4-19 | tcsh-6.09-4 | time-1.7-9 |
tmpwatch-2.2-1 | traceroute-1.4a5-18 | utempter-0.5.2-2 |
util-linux-2.10f-7 | vim-common-5.6-11 | vim-minimal-5.6-11 |
vixie-cron-3.0.1-40 | which-2.9-2 | zlib-1.1.3-6 |
dev86-0.15.0-2 | egcs-1.1.2-30 | |
kernel-headers-2.2.14-5.0 | glibc-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Отредактируйте файл 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 и т.д.
Назад | Оглавление | Вперед |
В этой главе, я буду говорить о трех полезных внешних программах, которые можно инсталлировать на ваш Linux сервер. Эти программы созданы для использования с веб сервером Apache и полезны если вы планируете использовать Apache в вашей организации. Если это не так, то вы можете пропустить эту главу и затем продолжить чтение этой книги. Вначале мы будем говорить о Webalizer, который предназначен для анализа файлов регистраций веб сервера. Затем мы обсудим FAQ-O-Matic, который может быть использован для создания списков FAQ, базы данных отслеживания ошибок, документации и много другого на вашем сервере. В Заключении, мы будем говорить об очень тонкой интересной программе, называемой Webmail, которая позволит вам предлагать вашим клиентам почтовые бюджеты, или доступ и чтение почты в безопасным способом.
Веб сервер 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/Предварительные требования
Webalizer требует наличия графической библиотеки GD, которая требуется для
генерации встроенных графиков Webalizer. Если это не так, то вы должны
инсталлировать ее из вашего Red Hat Linux CD-ROM.
Для проверки наличия установленной библиотеки GD используйте следующую
команду:
Для инсталляции пакета 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" \Команда "make" будет компилировать все файлы с исходными кодами в двоичные исполняемые файлы, команда "make install" проинсталлирует все двоичные и сопутствующие им файлы в требуемые места. Команда "mkdir" создаст новый каталог "usage" в каталоге "/home/httpd/", где мы будем размещать все связанные с Webalizer файлы.
Очистка после работыКоманды "rm" будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции Webalizer. Также будет удален сжатый архив Webalizer.
Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве "floppy.tgz", включающей все конфигурационные файлы для всех программ. Если вы скачаете этот файл, то вам не нужно будет вручную воспроизводить файлы из книги, чтобы создать свои файлы конфигурации. Скопируйте файлы связанные с Webalizer из архива, измените их под свои требования и поместите в нужное место так, как это описано ниже. Файл с конфигурациями вы можете скачать с адреса: http://www.openna.com/books/floppy.tgz
Для запуска Webalizer должен быть создан, либо скопирован следующий файл:
Копируйте webalizer.conf в каталог "/etc/".
Вы можете взять эти файлы из нашего архива floppy.tgz.
"/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" или программа не найдет его.
Сейчас, когда 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>
Не забудьте перезагрузить ваш веб сервер, чтобы изменения внесенные в файл "httpd.conf" вступили в силу:
[root@deep /]# /etc/rc.d/init.d/httpd restart Shutting down http: [ OK ] Starting httpd: [ OK ]
Сейчас наступило время запустить программу генерирующую отчеты (html) и графики в выходном каталоге Webalizer так, чтобы мы могли увидеть их в окне броузера. Этот шаг требуется только при первом запуске после инсталляции, так как в будущем это будет делать cron.
Для запуска Webalizer вручную, используйте команду
[root@deep /]# /usr/bin/webalizerНа этой стадии, мы должны проверить, что Webalizer работает корректно. Чтобы сделать это наберите в окне броузера следующий адрес: http://my-web- server/usage/. Где <my-web-server> - это адрес вашего веб сервера, а </usage> - это каталог в котором располагаются отчеты Webalizer.
Последнее, что вы должны сделать, это автоматизировать задачу генерации отчетов программой Webalizer. Поместите соответствующий элемент в crontab пользователя root, чтобы сделать запуск Webalizer работой cron. Для этого вы должны редактировать ваш файл crontab и добавить в него строку, запускающую Webalizer каждые, например, 28 минут:
[root@deep /]# crontab -e> /etc/webalizer.conf.sample > /usr/bin/webalizer > /usr/man/man1/webalizer.1
Назад | Оглавление | Вперед |
Как написано на веб сервере 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
Предварительные требования
Чтобы проверить, установлен ли пакет RCS на вашей системе используйте команду:
[root@deep /]# rpm -qi rcsДля инсталляции 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/Для инсталляции программы Faq-O-Matic на вашем компьютере переместитесь в каталог FAQ-O-Matic и введите следующие команды:
[root@deep FAQ-OMatic-2.709]# perl Makefile.PLКоманда "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 через веб интерфейс.
После инсталляции 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>
Не забудьте перезапустить веб сервер Apache, чтобы внесенные изменения вступили в силу:
[root@deep /]# /etc/rc.d/init.d/httpd restart Shutting down http: [ OK ] Starting httpd: [ OK ]
Окончание инсталляции будет осуществляться через ваш веб броузер. Выполните следующие шаги в вашем Netscape Communicator:
Шаг 1На первом шаге загрузите веб броузер и используйте его для конфигурирования.
Например в секции Mandatory введите следующую команду:
$adminAuth= admin@openna.comНастройте "Define configuration parameters" как вам нужно. После окончания установки всех параметров нажмите на кнопку "Define" для подтверждения выбора.
ЗАМЕЧАНИЕ. <my-web-server> - это адрес вашего веб сервера Apache, а временный пароль должен был вам прислан по электронной почте во время компиляции.
Шаг 2После окончания конфигурирования "Define configuration parameters", вы должны закончить настройку остальной части FAQ-O-Matic, чтобы иметь возможность использовать его так, как описано в главном меню.
Очистка после работы
[root@deep /]# cd /var/tmpКоманды "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
Назад | Оглавление | Вперед |
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
Предварительные требования
Для того, чтобы запустить 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
Перейдите в DocumentRoot вашего веб сервера и создайте каталог "/home/httpd/php":
[root@deep /]# cd /home/httpd/Копируйте содержимое каталога "php" дистрибутива PHPLib в каталог "php", который вы создали в вашем DocumentRoot:
[root@deep /]# cd /home/httpd/phplib-7.2b/php/ЗАМЕЧАНИЕ. Мы удалили 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/ЗАМЕЧАНИЕ. Мы удалили 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/ЗАМЕЧАНИЕ. Важно, чтобы каталог "imp" находился в каталоге "horde", иначе Webmail не будет работать. После переименования каталога "imp-version" в "imp" мы удалили архив содержащий IMP Webmail.
Шаг 3Измените владельца каталога "horde" и всех его подкаталогов и файлов на "root" из соображений безопасности.
[root@deep /]# chown -R 0.0 /home/httpd/horde/Копируйте файлы "/home/httpd/horde/phplib/*.ihtml" в новый каталог "php" (/home/httpd/php/), выполнив следующую команду:
[root@deep /]# cp /home/httpd/horde/phplib/*.ihtml /home/httpd/php/Мы сейчас должны сконфигурировать нашу базу данных на работу с 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;
Сейчас, мы должны определить пользователя для Apache ("www") в вашей базе
данных PostgreSQL, чтобы можно было создавать базы данных Webmail IMP
этим пользователем.
Для определения пользователя "www" в вашей базе данных, запустите утилиту
createuser из PostgreSQL:
После того, как пользователь "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
Мы должны перезагрузить сервер PostgreSQL, чтобы изменения вступили в силу:
[root@deep /]# /etc/rc.d/init.d/postgresql restartКопируйте и переименуйте файл "/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Редактируйте файл 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");
Еще вам надо настроить конфигурационный файл 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Вы должны указать "php", где ему искать включаемые файлы, когда они не
имеют абсолютных путей, автоматическое прибавление содержимого файла
"prepend.php3" к каждому файлу, и отключение magic quotes.
Редактируйте файл php.ini (vi /etc/httpd/php.ini) и добавьте следующие
параметры:
После инсталляции 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>
Вы должны перезагрузить Apache, чтобы изменения вступили в силу:
[root@deep /]# /etc/rc.d/init.d/httpd restart Shutting down http: [ OK ] Starting httpd: [ OK ]
Существует несколько путей для настройки Webmail IMP, и один из них, который мы выбрали, новый механизм настройки называемый "setup.php3", который дает людям возможность настраивать IMP через веб броузер.
Шаг 1Из соображений безопасности, эта возможность отключена по умолчанию, но мы можем ее включить следующими командами:
[root@deep /]# cd /home/httpd/horde/После того как новый механизм настройки 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/Это переведет все файлы и библиотеки в режим 0555 (чтение/исполнение для всех), а setup.php в режим 0000, который запретит любой доступ.
Шаг 4На этой стадии, мы должны проверить работоспособность Webmail IMP. Чтобы сделать это, наберите в окне броузера следующий адрес: http://my-web- server/horde/. <my-web-server> - это адрес, где находится вашего веб сервера, а </horde> - это каталог в котором располагается программа Webmail IMP.
Назад | Оглавление | Вперед |
Крупные организации часто используют много разных операционных систем, и им нужно объединять их в сеть для совместного использования файлов и принтеров. Работники могут работать на рабочих станциях 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Перейдите в каталог 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.
Введите следующие команды на вашем терминале:
CC="egcs" \ЗАМЕЧАНИЕ Опция "--with-mmap" может улучшить производительность на некоторых машинах, на других ничего не изменится, ну а на третьих она может упасть.
Эти опции говорят Samba:
Сейчас мы должны инсталлировать Samba на нашем Linux сервере:
[root@deep source]# make allКоманда "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", чтобы только владелец файла мог удалить его из каталога.
Очистка после работы.Команды "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" - это основной конфигурационный файл сервера 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 следующее:
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 кэш на файл.
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". Он содержит соответствия между 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" для использования pam аутентификации. Создайте файл samba (touch /etc/pam.d/samba) и добавьте в него следующие строки:
Auth required /lib/security/pam_pwdb.so nullok shadowСконфигурируем файл "/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 }
В файле "/etc/smbpasswd" хранятся шифрованные пароли Samba. Он хранит имя пользователя; Unix UID, хешированный пароль SMB, информационный флаг учетной записи и время последнего изменения пароля. Важно создать этот файл с паролями и включить в него всех пользователей до того, как они будут подключаться к вашему серверу Samba. Без этого никто не сможет подключиться к нему.
Шаг 1Для создания учетной записи Samba, вы должны, для начала, завести пользователя Linux. Поэтому, вначале, создайте в файле "/etc/passwd" всех пользователей, которые должны подключаться к серверу Samba. Добавьте нового пользователя в файл "/etc/passwd" используя следующую команду:
[root@deep /]# useradd smbclientОпределите пароль для него используя команду:
[root@deep /]# passwd smbclientПосле того, как вы внесли всех пользователей в файл "/etc/passwd", вы можете создать файл "smbpasswd", используя "/etc/passwd". Для этого введите следующую команду:
[root@deep /]# cat /etc/passwd | mksmbpasswd.sh > /etc/smbpasswdВ заключении, на последнем шаге, мы должны создать бюджет пользователя в
нашем файле "/etc/smbpasswd".
Для создания учетной записи пользователя Samba используйте команду:
Не забудьте изменить права доступа к вашему новому файлу "smbpasswd" на чтение-запись только для пользователя "root' (0600/-rw-------). Это делается из соображения безопасности.
[root@deep /]# chmod 600 /etc/smbpasswdЗАМЕЧАНИЕ. Смотрите файл ENCRYPTION.txt, находящийся в дистрибутиве Samba в каталоге /doc/texts/ для большей информации.
Настроим скрипт "/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 ]
Бит "постоянства" используется для предотвращения случайного удаления или переписывания файлов, которые защищаются. Он также не дает создавать символические ссылки к этим файлам. Так как файлы "smb.conf" и "lmhosts" уже настроены, хорошей идеей будет иммунизировать их:
[root@deep /]# chattr +i /etc/smb.confБольшой ошибкой будет установить параметр "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
Вы должны добавить вышеприведенную команду в скрипт "/etc/rc.d/rc.local", чтобы она выполнялась при каждой загрузке компьютера автоматически.
Под Red Hat Linux 6.2
Редактируйте файл "/etc/sysctl.conf" и добавьте следующие строки:
Вы должны перезагрузить сетевые настройки, чтобы изменения вступили в силу:
[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
Вы должны добавить вышеприведенную команду в скрипт "/etc/rc.d/rc.local", чтобы она выполнялась при каждой загрузке компьютера автоматически. Полное описание всех параметров вы можете найти в документации, поставляемой вместе с ядром 2.2, в файле "linux/Documentation/sysctl/vm.txt", и также, вы можете прочитать главу 4, "Общая системная оптимизация" этой книги.
Под Red Hat Linux 6.2
Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:
Вы должны перезагрузить сетевые настройки, чтобы изменения вступили в силу:
[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
Команды описанные ниже, мы будем часто использовать, но на самом деле их много больше, и вы должны изучить страницы руководства (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
Команды описанные ниже, мы будем часто использовать, но на самом деле их много больше, и вы должны изучить страницы руководства (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
Назад | Оглавление | Вперед |
Несмотря на прошедшие годы, использование 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Перейдите в новый каталог Wu-ftpd и введите следующие команды на вашем терминале:
Шаг 1Редактируйте файл ftpcount.c (vi +241 src/ftpcount.c) и измените строку:
#if defined (LINUX)
на:
#if defined (LINUX_BUT_NOT_REDHAT_6_0)
Редактируйте файл 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" \Эти опции означают следующее:
Сейчас, мы должны инсталлировать Wu-ftpd на Linux сервер:
[root@deep wu-ftpd-2.6.0]# makeКоманды "make" и "make install" настроят программное обеспечение под вашу систему и проверят ее функциональность на наличие необходимых библиотек, скомпилируют все файлы с исходными кодами в исполняемые двоичные программы и проинсталлируют их вместе с сопутствующими файлами в необходимые места.
Команда "install -m" будет инсталлировать программу "xferstats", используемую для просмотра информации о переданных файлах. Команда "touch" создаст файл регистрации для "xferstats" в каталоге "/var/log". "chmod" изменит права доступа к файлу "xferlog" на чтение-запись только пользователю "root". Затем, мы создаем символическую ссылку для исполняемого файла "in.ftpd", и, в заключении, удаляем отладочную информацию из всех исполняемых файлов, относящихся к Wu-ftpd.
Очистка после работы.Команды "rm" будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции Wu-ftpd. Также будет удален сжатый архив Wu-ftpd из каталога "/var/tmp".
Чрезвычайно важно, чтобы ваши пользователи FTP не имели реального командного процессора. В этом случае, если они по каким-либо причинам смогут покинуть chroot окружение FTP, то не смогут выполнить никаких задач, так как не имеют командного процессора.
Первое, создайте нового пользователя, которому вы планируете разрешить подключаться к вашему FTP серверу. Это должна быть учетная запись независимая от регулярно используемых, в связи с особенностями работы "chroot" окружения. Chroot создаст пользователю ощущение, будто каталог в который его поместили находится на самом верху файловой системы.
Шаг 1Используйте следующие команды для создания пользователя в файле "/etc/passwd". Этот шаг должен выполняться для каждого пользователя, кому нужен доступ к FTP серверу.
[root@deep /]# mkdir /home/ftpКоманда "mkdir" создаст каталог "ftp" в "/home" для хранения всех домашних каталогов FTP пользователей. Команда "useradd" добавит нового пользователя с именем "ftpadmin" в вашей системе. В заключении, команда "passwd" установит пароль для него. После того, как каталог "/home/ftp/" создан, вам не нужно будет создавать его для каждого нового пользователя.
Шаг 2Редактируйте файл "/etc/shells" (vi /etc/shells) и добавьте в него несуществующий командный процессор, например "null". Этот ложный shell ограничит доступ FTP пользователям к системе.
[root@deep /]# vi /etc/shellsЗАМЕЧАНИЕ. В 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/nullftpadmin:x:502:502::/home/ftp/./ftpadmin/:/dev/null ^^
Обратите внимание, что путь к домашнему каталогу пользователя "ftpadmin" немного нечеткий. Первая часть "/home/ftp/" показывает файловую систему, которая должна стать новый корневым каталогом. Разделяющая точка "." говорит, что из текущего каталога необходимо автоматически переходить в "/ftpadmin/". Еще раз отметим, что часть "/dev/null" отключает вход в систему, как регулярного пользователя. С этим изменением, пользователь "ftpadmin" имеет ложный командный процессор вместо реального, тем самым имея ограничения в доступе к системе.
Далее вы должны создать основу корневой файловой системы с достаточным количеством необходимых компонентов (исполняемые файлы, файлы парлей и т.д.), чтобы позволить 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Измените права доступа к новым каталогам на 0511 из соображений безопасности:
[root@deep /]# chmod 0511 /home/ftp/dev/Команда "chmod" изменит права доступа к chroot каталогам "dev", "etc", "bin" и "lib" на чтение и исполнения для "root" и исполнение для группы и всех остальных пользователей.
Шаг 3Копируйте исполняемый файл "/bin/ls" в каталог "/home/ftp/bin" и изменим права доступа к нему на 0111. (Вы не хотите позволять пользователям модифицировать этот файл):
[root@deep /]# cp /bin/ls /home/ftp/bin (требуется, если вы не использовали опцию "--enable-ls")ЗАМЕЧАНИЕ. Этот шаг необходим только если вы не использовали при конфигурировании опцию "--enable-ls". Смотрите секцию "Компиляция и оптимизация" в этой главе.
Шаг 4Найдите разделяемые библиотеки от которых зависит программа "ls":
[root@deep /]# ldd /bin/ls (требуется, если вы не использовали опцию "--enable- ls")Копируйте их в новый каталог "lib", расположенный в "/home/ftp":
[root@deep /]# cp /lib/libc.so.6 /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Копируйте файлы "group" и "passwd" в каталог "/home/ftp/etc". Они не должны быть такими же, как оригиналы. Мы удалим из них всех не FTP пользователей, исключая "root".
[root@deep /]# cp /etc/passwd /home/ftp/etc/Редактируйте файл passwd (vi /home/ftp/etc/passwd) и удалите из него все элементы, кроме "root" и ваших FTP пользователей. Файл должен иметь следующий вид:
root:x:0:0:root:/:/dev/nullЗАМЕЧАНИЕ. Мы отметим здесь две вещи: первое, домашний каталог всех пользователей был изменен (например, /home/ftp/./ftpadmin/ на /ftpadmin/), и второе, командный процессор для пользователя "root" был изменен на "/dev/null".
Редактируйте файл group (vi /home/ftp/etc/group) и удалите все элементы, исключая "root" и всех FTP пользователей. Файл "group" должен соответствовать вашему нормальному файлу групп:
root:x:0:rootСейчас, мы должны иммунизировать файлы "passwd" и "group", находящиеся в chroot окружении.
Установим бит "постоянства" на файл "passwd":
[root@deep /]# cd /home/ftp/etc/Установим бит "постоянства" на файл "group":
[root@deep /]# cd /home/ftp/etc/Все программное обеспечение, описанное в книге, имеет определенный каталог и подкаталог в архиве "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" - это основной конфигурационный файл, используемый для конфигурирования сервера 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
Сейчас мы должны изменить права доступа на 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" используется для определения следующего: может ли пользователь входить в систему с определенной машины или ему будет запрещен доступ.
Шаг 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" определяет пользователей, которым не разрешен доступ на FTP сервер.
Шаг 1Создайте файл ftpusers (touch /etc/ftpusers) и добавьте в него следующих пользователей:
rootИзменим права доступа к этому файлу на 600:
[root@deep /]# chmod 600 /etc/ftpusersФайл "/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
Измените права доступа на 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" на автоматическую ротацию файлов регистраций каждую неделю.
Создайте файл ftpd (touch /etc/logrotate.d/ftpd) и добавьте в него следующие строки:
/var/log/xferlog { # ftpd должным образом не обрабатывает SIGHUP nocompress }
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Редактируйте файл hosts.allow (vi /etc/hosts.allow) и добавьте, например, следующую строку:
in.ftpd: 192.168.1.4 win.openna.comКоторая говорит, что клиенту с IP адресом "192.168.1.4" и именем хоста "win.openna.com" разрешен FTP доступ на сервер.
Программа 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Важно удостовериться, что вы настроили файл "/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По умолчанию, 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Файл нулевой длины ".notar" может привести в замешательство некоторые веб клиенты и FTP прокси, чтобы решить эту проблему, надо запретить пересылку этого файла.
Редактируйте файл ftpaccess (vi /etc/ftpaccess) и добавьте следующую строку, чтобы маркировать файл ".notar" как непересылаемый.
noretrieve .notarПараметр 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
Назад | Оглавление | Вперед |
Безопасность и надежность сервера вплотную связана с процедурой регулярного резервного копирования. Иногда могут возникать различные повреждения. Они могут быть следствием атак, ошибок аппаратного обеспечения, людских ошибок, перепадов напряжения и пр. Самый надежный метод резервного копирования это записать данные в место независимое от вашего Linux сервера, например, через сеть, на стример, сменный носитель, записываемый CD-ROM и пр.
В Linux существует много методов выполнить резервное копирование, среди них такие, как "dump", "tar", "cpio" и "dd". Также доступны утилиты базирующиеся на текстовых файлах, например "Amanda", которая разработана, чтобы добавить дружественный пользовательский интерфейс к процедуре резервного копирования и восстановления данных. И наконец, коммерческие пакеты резервного копирования, например "BRU".
Процедуры выполнения резервного копирования и восстановления данных будет отличаться в зависимости от выбранного вами решения. Из этих соображений, мы будем обсуждать здесь процедуру резервного копирования при помощи традиционных для UNIX утилит: "tar" и "dump".
Что такое резервное копированиеОсновная идея резервного копирования - это создание копий всего что установлено на вашей системе, но с некоторыми исключениями, о которых мы напишем ниже. Будет не логичным включать их в ваши резервные копии, так как это будет напрасная трата времени и пространства на носители. Основными исключениями, не включаемыми в ваши резервные копии, являются:
Программа резервного копирования 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ПРЕДОСТЕРЕЖЕНИЕ. Для уменьшения пространства занимаемого tar архивом, резервная копия может быть сжата при помощи опции "z" программы tar. К сожалению, использование этой опции может создать ряд проблем. Из природы работы сжатия следует, что если хотя бы один бит будет испорчен, то и все данные нужные для восстановления будут потеряны. Поэтому рекомендуется не использовать сжатие (опция "z") для создания резервной копии при помощи команды tar.
Если ваша резервная копия не помещается на ленте, то вам надо использовать опцию --multi-volume (-M) для создания многотомных архивов:
[root@deep /]# cd /После того, как вы создали резервную копию, вы должны убедиться, что все OK, используя опцию --compare (-d):
[root@deep /]# cd /Для резервного копирования всей системы используйте следующую команду:
[root@deep /]# cd /Опция "--directory" говорит tar, что до начала резервного копирования надо перейти в следующий каталог (в нашем примере "/"). Опция "--exclude" говорит tar не создавать резервные копии заданных каталогов и файлов. Символ ".", находящийся в конце командной строки говорит tar, что он должен копировать все в текущем каталоге.
ПРЕДУПРЕЖДЕНИЕ. Когда вы создаете резервную копию вашей системы, не включайте в нее псевдофайловую систему "/proc"! Файлы "/proc" не настояшие файлы, это просто файлоподобные ссылки к структуре ядра. Также не включайте каталоги "/mnt", "/archive" и все "lost+found".
Всегда интересно автоматизировать задачу резервного копирования. Автоматизация предлагает огромные возможности использования вашего 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/ЗАМЕЧАНИЕ. Каталог в котором вы планируете хранить резервные копии (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".
Следующая команда будет восстанавливать все файлы из архива "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 /Вышеприведенная команда извлекает файлы "/home/wahib/Personal/Contents.doc" и "/home/quota.user" из архива. Если вы хотите посмотреть, какие файлы находятся в архиве, то используйте опцию --list (-t):
[root@deep /]# tar tf /dev/st0ПРЕДУПРЕЖДЕНИЕ. Если вы имеете в своей системе файлы с установленным битом "постоянства", то используйте команду "chattr +i", так как этот бит не сохраняется при резервном копировании при помощи команды tar.
Для многих системных администраторов, восстановление файлов из резервной копии редкое действие. Периодическое выполнение проверки возможности восстановления файлов из резервных копий поможет вам выявить проблемы с процедурами резервного копирования, чтобы вы могли скорректировать их до того, как потеряете данные. Некоторое программное обеспечение восстановления файлов некорректно восстанавливает права доступа и владельца файлов. Проверьте атрибуты восстановленных файлов, чтобы они были установлены правильно. Периодически тестируйте возможность полного восстановления системы из ваших резервных копий.
Для получения больших деталей вы можете прочитать следующую страницу
руководства (man):
tar (1) - GNU версия утилиты архивирования данных tarНазад | Оглавление | Вперед |
Dump полностью отличается от tar; эта программа предназначена для резервного копирования и восстановления файловой системы. Она создает резервные копии элементов файловой системы - не файлов. Dump проверяет файлы на файловой системе ext2, определяет резервные копии каких из них необходимо выполнить и копирует эти файлы на заданный диск, ленту, файл или другой носитель. Это позволяет получить дамп одной файловой системы быстро и эффективно. К сожалению, его нельзя применить к отдельным каталогам, поэтому архивы потребляют больше места на устройстве хранения. Dump был написан специально для резервного копирования. Команда restore выполняет функцию обратную dump; она восстанавливает полную резервную копию файловой системы. Последующие добавочные резервные копии могут быть наложены слоями на вершину полной копии. Отдельные файлы и каталоги могут быть также восстановлены из полной или частичной резервной копии. Вы можете использовать dump если нуждаетесь в процедуре резервного копирования и восстановления файловых систем.
Уровни DumpDump имеет несколько уровней резервного копирования. Уровни входят в диапазон от 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. Ниже, я приведу процедуру, имеющую длинную историю резервного копирования, и поддерживающую время резервного копирования и восстановления данных на минимуме. В следующем примере, мы подразумеваем, что записываем резервную копию каталога (/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 лент) в новом году.
Команда restore выполняет функцию противоположную функции dump(8). Она восстанавливает файлы и каталоги из резервных копий полученный программой dump. Может быть восстановлена полная резервная копия файловой системы, а затем и уровни добавочных резервных копий поверх ее. Также может из полной резервной копии или частичной могут быть восстановлены отдельные файлы и каталоги. Вы имеете ряд возможных команд и опций для восстановления данных из резервных копий, полученных программой dump. Ниже мы покажем вам процедуру, которая использует все возможности программы restore с большинством возможных опций. Все это также сделано в диалоговом режиме. При диалоговом восстановлении файлов из дампа, программа restore предоставляет shell подобный интерфейс, который позволяет пользователю перемещаться по дереву каталогов, выбирая файлы для извлечения, после чтения информации о каталогах из дампа. Далее , мы покажем, что вы увидите, при восстановлении каталога "/home":
Первое, мы должны перейти в раздел файловой системы, где мы хотим восстанавливать нашу резервную копию. Это требуется, так как в диалоговом режиме программа restore восстанавливает все файлы с раздела файловой ситемы, из которой она была запущена.
Перейдите в раздел, который вы хотите восстановить (каталог "/home" в нашем случае) используя следующую команду:
[root@deep /]# cd /homeДля восстановления файлов из дампа в диалоговом режиме используйте команду:
[root@deep /home]# restore -i -f /dev/st0На вашем терминале вы увидите командную строку, для получения списка файлов текущего или заданного каталога используйте команду "ls":
restore > lsДля изменения текущего рабочего каталога в заданный используйте команду "cd" (в нашем примере, мы переходим в каталог wahib):
restore > cd wahibДля внесения текущего каталога или файла в список файлов для извлечения используйте команду "add" (если задан каталог, то в список вносится он и все его потомки):
restore > add Personal/ restore >Файлы, которые входят в список для извлечения обозначаются символом "*", когда они выводятся командой "ls":
restore > lsДля удаления текущего каталога или заданного файла из списка файлов для извлечения используйте команду "delete" (если задан каталог, тогда вместе с ним будут удалены и все его элементы):
ЗАМЕЧАНИЕ Наиболее подходящий путь для извлечения большинства файлов из каталога это добавить каталог в список для извлечения, а затем удалить ненужные файлы.
restore > cd Personal/Для восстановления всех файлов из списка для извлечения используйте команду "extract" (Restore спросит какой том пользователь хочет монтировать. Наиболее быстрый путь извлечь несколько файлов - это начать с последнего тома и закончить первым):
restore > extractДля выхода из интерактивного режима программы 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ЗАМЕЧАНИЕ. Опция "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 /backupsAMANDA
Домашняя страница AMANDA: http://www.cs.umd.edu/projects/amanda/
BRU
Домашняя страница BRU: http://www.bru.com/
Назад | Оглавление | Вперед |
В этой главе Общие вопросы безопасности Linux |
![]() |
UNIX системы настолько безопасны, насколько безопасными их сделает администратор. Чем больше сервисов у вас установлено, тем больше шансов, что в них будет найдена "дыра". Когда вы инсталлируете Linux, вы должны устанавливать минимум пакетов, а затем добавлять только необходимые элементы, уменьшая шансы установить приложение с ошибкой, нарушающей его безопасность. В этой главе мы обсудим общие принципы обеспечения безопасности сервера. Также здесь мы опишем ряд возможностей, которые можно использовать для предотвращения вторжения как снаружи, так и из внутри.
Отмените возможность загрузки компьютера с дискеты, установите пароль на доступа к настройкам 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" является самым привилегированным на UNIX системах. На него нельзя наложить никакие ограничения по безопасности. Это значит, что система считает, что вы знаете что делаете и никаких вопросов задавать не будет. Поэтому очень легко, ошибшись в команде, уничтожить важную системную информацию. При использовании этой учетной записи надо быть максимально осторожным. Из соображений безопасности никогда не подключайтесь к системе как пользователь root, если только вы абсолютно не уверены в том, что делаете.
Часто бывает, что администратор войдя в систему под пользователем root забывает выйти и его сессия остается открытой. Решением этой проблемы может быть переменная "TMOUT" в BASH, которая определяет время, через которое пользователь автоматически отключается от системы, если он не активен. Она содержит время в секундах до отключения.
Редактируйте файл "/etc/profile" и добавьте следующую строку сразу после строки с "HISTFILESIZE=":
TMOUT=7200Мы определяем значение для TMOUT равное 2 часам (60*60*2). Следует отметить, что если вы добавили эту строку в файл /etc/profile, то переменная определяется для любого подключаемого пользователя, а не только root. Чтобы установить ее для конкретного пользователя измените файл ".bashrc" в его домашнем каталоге.
Если вы экспортируете свои файловые системы с использованием NFS, то необходимо сконфигурировать файл "/etc/exports" с максимально возможными ограничениями. В нем не следует использовать групповые символы (?, *), нельзя позволять доступ для записи пользователю root и следует монтировать "только для чтения" все, что только возможно.
Отредактируйте файл /etc/exports, добавив в него:
/dir/to/export host1.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В результате будет запрещен консольно-эквивалентный доступ к программам halt, shutdown, reboot и poweroff. Программа xserver используется если у вас установлен X Window.
Замечание. Если вы инсталлировали систему как описано в этой книге, то X Window у вас не установлен и файлы описанные выше в каталоге /etc/security не появятся, поэтому вы этот шаг можете пропустить.
Чтобы блокировать весь консольный доступ, включая программу и файл доступа, в каталоге /etc/pam.d/, закомментируйте все строки, в которых вызывается pam_console.so. Этот шаг является продолжением предыдущего. Нижеприведенный скрипт сделает это автоматически за вас. Создайте файл disabling.sh (touch disabling.sh) и внесите в него следующие строки:
# !/bin/shИ сделайте его испольняемым:
[root@deep]# chmod 700 disabling.shОн будет комментировать все строки ссылающиеся на pam_console.so во всех файлах в каталоге /etc/pam.d. После того, как скрипт выполнит свою работу, удалите его из системы.
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Шаг 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По умолчанию, Red Hat отвечает на все запросы к имеющимся сервисам. Используя TCP_Wrappers, вы легко сможете оградить ваш сервер от внешних вторжений когда это нужно. Запретите все хосты, добавив "ALL: ALL@ALL, PARANOID" в "/etc/hosts.deny", и определите список тех кому доступ разрешен в файле "/etc/host.allow" - это самая безопасная конфигурация. TCP_Wrappers контролируется двумя файлами. Поиск завершается при первом совпадении.
/etc/hosts.allowШаг 1.
Редактируйте файл hosts.deny (vi /etc/hosts.deny) добавив следующие строки: По умолчанию доступ запрещен.
# Запрещаем доступ для всех.Это значит , что доступ ко всем службам со всех компьютеров запрещен, если нет явного разрешения в файле host.allow.
Замечание. Для параметра PARANOID. Если вы хотите запускать telnet и ftp сервисы на сервере, то не забудьте добавить адрес клиентской машины и IP адрес в файл "/etc/hosts" на сервере, иначе будьте готовы ждать несколько минут, пока DNS lookup не завершится по таймауту, до получения строки login.
Шаг 2.
Отредактируйте файл hosts.allow и добавьте в него, к примеру, следующие строки:
# Список серверов которым разрешен доступ.Машина с 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 выводился на экран, когда удаленный пользователь подключается к серверу, измените опцию telnetd в файле /etc/inetd.conf:
telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd -hФлаг "-h" говорит демону не выводить любую системную информацию, ограничиться только запросом "login:". Эту возможность необходимо использовать только, когда на сервере запускается демон telnet (вместо него я рекомендую использовать ssh).
Linux использует библиотеку resolver для преобразования IP адресов в имена машин. Файл "/etc/host.conf" определяет порядок работы этой библиотеки. Он говорит какой сервис и в каком порядке использовать для преобразования адресов.
Редактируйте файл host.conf (vi /etc/host.conf) и добавьте следующие строки:
# Вначале использовать lookup черз DNS, а затем файл/etc/hosts.Опция order определяет порядок использования сервисов. Для улучшения производительности и повышения безопасности рекомендуется настроить библиотеку определителей так, чтобы вначале использовался DNS, а затем файл "/etc/hosts". Конечно, DNS должен быть предварительно настроен.
Опция multi говорит, что компьютеры, описанные в файле /etc/hosts, могут иметь несколько IP адресов (несколько интерфейсов ethN). Например, шлюз всегда имеет несколько адресов и у них эта опция должна быть всегда определена в ON.
Опция nospoof не разрешать подмену адресов. IP-Spoofing - это способ атаки при котором удаленный компьютер представляется кем-то, кем он не является. При этом виде нападения удаленный компьютер представляется как законный сервер, а затем использует установленные соединения для взаимодействия с другими компонентами сети. Эта опция должна быть установлена в ON на всех типах серверов.
Файл "/etc/securetty" позволяет вам определить с каких TTY устройств может входить в систему пользователь root. Этот файл читается программой login ("/bin/login"). Он имеет очень простой формат. В каждой строке перечислены имена tty устройств с которых root может входить в систему, а с остальных доступ ему будет запрещен.
Отключите любые tty, которые вам не нужны, закомментировав их (знак # в начале строки).
tty1В результате root сможет входить в систему только с терминала tty1. С остальных терминалов вы сможете переключаться на root используя команду su.
Назад | Оглавление | Вперед |
Это очень важно. Выключите все ненужные специальные бюджеты пользователей, которые созданы по умолчанию в вашей системе (Это необходимо проделывать после каждого обновления). Linux использует их для выполнения различных операций, которые вам скорее всего не нужны. Если вы не нуждаетесь в каких-либо бюджетах - удалите их. Чем больше у вас заведено пользователей, тем легче проникнуть в систему.
Мы предполагаем, что вы используете механизм теневых паролей. Если это не так, то установите Shadow password suite - это улучшит безопасность сервера. Если вы следовали нашим инструкциям при инсталляции системы и отметили в разделе "Authentication Configuration" пункт "Enable Shadow Passwords", то в системе активизирован механизм теневых паролей.
Для удаления пользователей используйте команду
[root@deep]# userdel usernameДля удаления группы используйте команду
[root@deep]# groupdel usernameШаг 1.
Введите следующие команды на терминале для удаления специальных пользователей:
[root@deep]# userdel admШаг 2.
Удалите ненужные группы пользователей.
[root@deep]# groupdel admШаг 3.
Добавьте необходимых вам пользователей.
Чтобы добавить нового пользователя используйте команду:
Для добавления или изменения пароля для пользователя используйте команду:
[root@deep]# passwd usernameНапример:
[root@deep]# useradd adminНа экране должен появиться следующий текст:
Changing password for user adminШаг 4.
Бит постоянства может быть использован для предотвращения случайного удаления или переписывания файлов, которые должны быть защищены. Они также могут быть защищены от создания символических ссылок, которые могут быть использованы для атак на файлы "/etc/passwd", "/etc/shadow", "/etc/group" или "/etc/gshadow".
Для установки бита постоянства на файлы "/etc/passwd", "/etc/shadow", "/etc/group" и "/etc/gshadow" выполните следующие команды:
[root@deep]# chattr +i /etc/passwdЗамечание. Если в будущем вам надо будет добавить новых пользователей или изменить пароли, то снимите бит постоянства с этих файлов. Также снять этот атрибут может потребоваться при инсталляции новых RPM пакетов, которые автоматически добавляют новых пользователей или новые группы.
Если вы не хотите, чтобы кто-нибудь выполнял команду su root или хотите ограничить пользователей которые могут пользоваться этой командой, то добавьте следующие две строки в начало файла конфигурации su, расположенного в каталоге "/etc/pam.d/". Я настоятельно рекомендую ограничить пользователей, которые могут выполнять команду su.
Шаг 1.
Редактируйте файл su (vi /etc/pam.d/su) и добавьте в него две строки:
auth sufficient /lib/security/pam_rootok.so debugПосле добавления этих строк ваш файл "/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 на флоппи-диск.
[root@deep]# mount /dev/fd0 /mnt/floppy/Замечание. Никогда не деинсталлируйте RPM полностью.
Также можно изменить права доступа к RPM c 755 до 700. В этом случае никто кроме пользователя root не сможет использовать эту программу.
Измените права доступа к файлу "/bin/rpm":
[root@deep]# chmod 700 /bin/rpmЧтобы сделать легким повторный ввод длинных команд, bash shell может запоминать до 500 команд в файле "~/.bash_history" (где "~/" - ваш домашний каталог). Каждый пользователь, который имеет shell-доступ в систему, имеет такой .bash_history файл в своем домашнем каталоге. Уменьшая количество команд запоминаемых в этом файле, вы защищаете систему. Когда пользователь случайно ввел в командной строке свой пароль, то он еще долгое время будет хранится в файле ".bash_history".
Строки HISTFILESIZE и HISTSIZE в файле "/etc/profile" определяют количество старых команд запоминаемых в .bash_history. Для всех бюджетов пользователей я рекомендую выбрать значения этих переменных поменьше, например 20.
Редактируйте файл profile (vi /etc/profile) и измените следующие строки:
HISTFILESIZE=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.
LILO это универсальный загрузчик для Linux. Он не зависит от файловой системы и может загружать ядро Linux как с гибкого диска, так и с жесткого диска. Кроме того, LILO может служить загрузчиком других операционных систем.
LILO очень важен для Linux и поэтому мы должны защитить его как можно лучше. Наиболее важным конфигурационным файлом является "/etc/lilo.conf". С его помощью вы можете настраивать и улучшать безопасность LILO и всей системы. Следующие три опции чрезвычайно важны для улучшения безопасности.
Ниже приведена процедура защиты LILO
Шаг 1.
Измените файл "/etc/lilo.conf"
boot=/dev/sdaШаг 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Если вы закомментируете строку описанную ниже в файле /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/, то не забудьте проверить и при необходимости изменить права доступа к ним.
По умолчанию, когда вы подключаетесь к 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Замечание. Файл /etc/issue.net содержит информации, которая выдается всякий раз когда осуществляется сетевое подключение к серверу (например, через telnet или ssh). Он может быть найден в каталоге /etc, также как и файл issue, содержащий аналогичную информацию для локальных пользователей. Это простые текстовые файлы и вы можете их легко настраивать под свои нужды, но при этом необходимо изменить скрипт "/etc/rc.d/rc.local", так как он при каждой перезагрузке пересоздает эти файлы.
Назад | Оглавление | Вперед |
Все программы и файлы в вашем компьютере с символом "s" в поле режима доступа имеют включенным бит SUID (-rwsr-xr-x) или SGID (-r-xr-sr-x). Так как эти программы дают особые привилегии пользователям которые их выполняют, то важно удалить бит "s" с программ владельцем которых является root и которым не нужны подобные возможности. Это осуществляется выполнением команды 'chmod a-s' с именем файла(ов) в качестве аргумента.
К таким программам относятся:
Мы поместили знак * рядом с программами для которых , бит 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Если вы хотите узнать, что делает каждая из программ используйте руководство 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 и получить на него ответ. Протокол 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Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restartSetting 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Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restartSetting 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Добавьте эти строки в файл "/etc/rc.d/rc.local". чтобы они выполнялись при каждой загрузке компьютера.
Под Red Hat 6.2
Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:
# Disables IP source routingВы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restartSetting network parameters [ OK ] Bringing up interface lo [ OK ] Bringing up interface eth0 [ OK ] Bringing up interface eth1 [ OK ]
Замечание. Введенные выше команды будет отключать маршрутизацию от источника для всех интерфейсов (lo, ethN, pppN и т.д.).
"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Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restartSetting 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 пакет, который информирует о необходимости изменить маршрут. Если атакующий сможет подделать этот пакет, то он или она сможет изменить таблицу маршрутизации на компьютере и нарушить его защиту, вызвав отправку информации по неправильному маршруту.
Под Red Hat 6.1
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/accept_redirects; doВы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.
Под Red Hat 6.2
Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:
# Disable ICMP Redirect AcceptanceВы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restartSetting network parameters [ OK ] Bringing up interface lo [ OK ] Bringing up interface eth0 [ OK ] Bringing up interface eth1 [ OK ]
Замечание. Введенные выше команды будет отключать прием ICMP redirect пакетов для всех интерфейсов (lo, ethN, pppN и т.д.).
Эта защиту необходимо включить если вы используете 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Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restartSetting 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Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restartSetting network parameters [ OK ] Bringing up interface lo [ OK ] Bringing up interface eth0 [ OK ] Bringing up interface eth1 [ OK ]
Защита от IP spoofing предупреждает вашу сеть от взаимодействия с ложными источниками сообщений, которые часто используются в DoS атаках.
Под Red Hat 6.1
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/rp_filter; doВы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.
Под Red Hat 6.2
Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:
# Enable IP spoofing protection, turn on Source Address VerificationВы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restartSetting network parameters [ OK ] Bringing up interface lo [ OK ] Bringing up interface eth0 [ OK ] Bringing up interface eth1 [ OK ]
Эта защита будет фиксировать все пакеты с поддельными адресами (spoof), пакеты с маршрутизацией от источника, Redirect пакеты в ваших лог файлах.
Под Red Hat 6.1
[root@deep /]# for f in /proc/sys/net/ipv4/conf/*/log_martians; doВы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.
Под Red Hat 6.2
Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:
# Log Spoofed Packets, Source Routed Packets, Redirect PacketsВы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[root@deep /]# /etc/rc.d/init.d/network restartSetting 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Также, часто используются файлы с именами подобными ".mail" или ".xx"
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 {} \;Замечание. Для облегчения регулярного поиска и проверки подобных файлов и каталогов можно использовать специализированное программное обеспечение, например, Tripwire. Большую информацию об этом программном продукте можно прочитать в главе 12 "Программы обеспечения безопасности (Целостность системы)",
Наличие файлов не имеющих владельцев может указывать на вторжение в систему. Никогда не принимайте подобные файлы. Если вы нашли файлы и каталоги не имеющие владельцев на вашей системе, то внимательно проверьте их и если с ними все в порядке - определите владельца. Иногда, вы можете деинсталлировать некоторые программы и в результате останутся файлы и каталоги без владельца, в этом случае спокойно удалите их.
Для поиска файлов и каталогов не имеющих владельца используйте команду:
[root@deep]# find / -nouser -o -nogroupЗамечание. Файлы найденные в каталоге /dev не считаются неправильными.
Файлы ".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Сделайте этот скрипт исполняемым и проверьте чтобы пользователем и группой владеющими этим файлом были root.
[root@deep]# chmod 755 /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)) по рабочим дным; в критических ситуациях можно звонить и в
выходные и праздничные дни.
Назад | Оглавление | Вперед |
В этой главе Общие вопросы оптимизации Linux |
![]() |
На этой стадии вы должны иметь настроенный и защищенный Linux сервер. Наш сервер содержит наиболее необходимые пакеты и программы, которые должным образом настроены, чтобы правильно работать. Прежде чем продолжить дальше и устанавливать сервисы нужные пользователям мы займемся настройкой нашего сервера. То, что мы будем делать дальше относится ко всей системе в целом. Эти настройки будут влиять и на работу сервисов, которые мы установим позже. Если в вашем компьютере не стоит x386 процессор, то Red Hat не настроен под вас оптимальным образом. Эта глава проведет вас через различные шаги настройки сервера и файловой системы под конкретный тип процессор, объем память и сеть.
Файл "/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" добавьте следующую строку:
Для CPU i586 или Pentium
В файл "/etc/profile" добавьте следующую строку:
For CPU i486
В файл "/etc/profile" добавьте следующую строку:
Шаг 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 вплотную связан с операциями в подсистеме виртуальной памяти ядра 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 также тесно связан с работой подсистемы виртуальной памяти 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 содержит два целых числа, которые определяют интервал портов, которые используют 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Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[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/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Значение в 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Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[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 "/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Вы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[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. Файловому и Веб серверам требуется много открытых индексных блоков.
Linux имеет ограничение "Max Processes" для каждого пользователя. Этот параметр показывает как много процессов может иметь пользователь. Для улучшения производительности, вы можете спокойно увеличить это значение для пользователя root, сделав его неограниченным.
Добавьте следующую строку в /root/.bashrc:
ulimit -u unlimitedТеперь вы должны выйти и вновь войти на сервер. Для проверки, что вы все сделали правильно дайте команду (как root):
ulimit -aв строке с max user processes должен быть текст "unlimited".
[root@deep]# ulimit -aЗамечание. Вы можете дать команду 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".Замечание. В более старых 2.2 ядрах, тем не менее, число открытых файлов одним процессом все еще ограничено 1024, даже с вышеупомянутыми изменениями.
Атрибут "atime".
В дополнении к информации о дате создания и последней модификации файла, Linux создает запись о последнем обращении к файлу. Эта информация не очень полезна и при этом происходят затраты системных ресурсов на ее ведение. Файловая система ext2 позволяет суперпользователю маркировать отдельные файлы, чтобы запись о времени последнего доступа к ним не велась. Это может существенно улучшить эффективность системы, особенно, если установить этот атрибут для часто используемых файлов, например, "/var/spool/news".
Для установки атрибута:
[root@deep]# chattr +A filenameДля всех файлов в каталоге:
[root@deep /root]# chattr -R +A /var/spool/Linux имеет опцию монтирования файловой системы, называемую "noatime". Она может быть добавлена в поле опций файла "/etc/fstab". Если файловая система смонтирована с этой опцией, то при доступе к ней по чтению, информация "atime" изменяться не будет. Важность установки опции "noatime" в том, что она устраняет необходимость операции записи в файловую систему для файлов, которые просто читаются. Так как запись "дорогая" операция, то ее отсутствие может существенно улучшить эффективность системы. Обратите внимание, что информация wtime продолжает изменяться при записи в файл.
В нашем примере мы устанавливаем опцию noatime для файловой системы /chroot.
Редактируйте файл /etc/fstab и добавьте, например, такую строку:
E.I: /dev/sda7 /chroot ext2 defaults,noatime 1 2Перезагрузите вашу систему и проверьте, что у вас получилось:
[root@deep]# rebootМы видим, что /chroot имеет атрибут noatime.
Поместите ваш swap раздел вблизи начала вашего диска, которое физически располагается на внешней стороне цилиндра. В результате за один оборот головка охватывает большую поверхность. При помощи команды hdparm -t, я вижу, что с разделом помещенным в конце диска скорость работы на 3 MB/s медленнее.
Быстродействие 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)Многосекторный режим (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 подключения, чтобы можно было обработать больше соединений за тотже интервал. Также будет уменьшено время, которое 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Вы можете добавить эту команду в /etc/rc.d/rc.local, чтобы она выполнялась каждый раз при загрузке компьютера.
Под Red Hat 6.2
Редактируйте файл "/etc/sysctl.conf" и добавьте следующую строку:
# Decrease the time default value for tcp_fin_timeout connectionВы должны перезагрузить ваши сетевые устройства, чтобы изменения вступили в силу.
[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 ]
Назад | Оглавление | Вперед |
Ну хорошо, вы видите, что ваш сервер приобрел общую форму. Но подождите, что является основной частью вашего сервера? Да, это ядро. Оно является основой операционной системы. Без него 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После выполнения этих рекомендаций, вы будете иметь загрузочную дискету с известным работающим ядром, на случай, если обновление пройдет неудачно. Я рекомендую перезагрузить систему с этой дискеты, чтобы убедиться, что все в порядке.
Скопируйте архив ядра в /usr/src и перейдите туда:
[root@deep]# cp linux-version_tar.gz /usr/src/Эти шаги нужно выполнять, если у вас уже были установлены ранее исходные кодя ядра из 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Для деинсталляции RPM пакетов:
[root@deep src]# rpm -e --nodeps kernel-headers kernelМы вручную удалили каталоги "/usr/src/linux-2.2.12" и "/lib/modules/2.2.12", которые останутся после деинсталляции rpm пакетов.
Шаг 2.Сейчас мы будем разворачивать исходные коды нового ядра из tar.gz затем удалим Linux tar-архив.
[root@deep]# tar xzpf linux-version_tar.gzДля увеличения числа разрешенных задач (максимальное число процессов для пользователя) вам нужно редактировать файл "/usr/src/linux/include/linux/tasks.h" и изменить следующий параметр:
Редактируйте tasks.h file (vi +14 /usr/src/linux/include/linux/tasks.h) и измените:
NR_TASKS из 512 в 3072Замечание. 1. Значение NR_TASKS определяет максимальное число идентификаторов задач (процессов), которое ядро будет назначать каждому пользователю. Увеличение этого числа приведет к увеличению количества соединений от клиента к серверу (например, веб-сервер сможет обслуживать большее количество запросов).
2. Linux защищен от того, чтобы распределить все свободные области памяти процессов обычным пользователям. С помощью опции MIN_TASKS_LEFT_FOR_ROOT резервируются подобные области для root. (24 хорошее значение).
Для оптимизации ядра 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/Первое, мы копируем программный архив в каталог /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/Это очень важная часть конфигурирования, мы удаляем каталоги "asm", "linux", и "scsi" под "/usr/include", затем создаем ссылки на каталоги с такими же именами в дереве исходных кодов нового ядра. Каталог "include" содержит важнейшие заголовочные файлы необходимые для вашего ядра и для программ, которые вы будете компилировать.
Шаг 2.Сделайте так, чтобы у вас не было старых .o файлов и неправильных зависимостей:
[root@deep]# cd /usr/src/linux/Замечание. Эти первые два шага просто очищают любые лишние элементы, которые могли быть случайно оставлены группой разработки ядра.
Сейчас мы имеет корректно установленные исходные коды ядра. Существует три пути для конфигурирования ядра.
В этой главе, для конфигурирования ядра мы используем команду make config, потому что у нас на сервере не установлен Xfree86.
[root@deep /]# cd /usr/src/linux/ (если вы еще не в этом каталоге).Конфигурация ядра.
Code maturity level optionsСейчас вернитесь в каталог "/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Замечание. Команды make modules и make modules_install нужны, если вы ответили Yes на вопрос "Enable loadable module support (CONFIG_MODULES)".
Назад | Оглавление | Вперед |
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.number3. Переместитесь в каталог /boot и создайте символические ссылки vmlinuz и System.map.
[root@deep linux]# cd /bootМы должны пересоздать ссылки "vmlinuz" и "System.map" на новую версию ядра. Иначе lilo будет использовать старое ядро.
4. Удалите устаревшие и ненужные файлы из каталога "/boot", чтобы освободить место на диске:
[root@deep /boot]# rm -f module-info"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Первое, мы создаем новый каталог "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Замечание. Не забудьте удалить строку "initrd=/boot/initrd-2.2.12-20.img", так как она нам больше ну нужна.
Шаг 2.Когда имя нового ядра было внесено в файл "/etc/lilo.conf", как это было описано выше, мы должны дать следующие команды, чтобы изменения вступили в силу:
[root@deep /]# /sbin/lilo -vВАЖНОЕ ЗАМЕЧАНИЕ: Если вы сказали 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Теперь необходимо редактировать файл "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должны читаться:
# if [ -L /lib/modules/default ]; thenЗАМЕЧАНИЕ: Процедура описанная выше связана с пакетом 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должны читаться:
# if [ -L /lib/modules/default ]; thenЗамечание. Еще раз повторим, вся эта часть ("Удаление программ, файлов и строк связанных с модулями.") требуется только если вы ответили No на вопрос "Enable loadable module support (CONFIG_MODULES)" при конфигурировании ядра.
Шаг 3.Когда система перезагрузится и вы подключитесь к серверу, проверьте версию используемого ядра:
[root@deep /]# uname -aПоздравляем.
После перезагрузки сервера, вы должны получить систему с новым ядром. Теоретически, в этот момент, вам надо создать новую "спасательную" дискету с новым ядром. Что бы сделать это сделайте следующее:
Подключитесь к системе, вставьте новую дискету и выполните следующую команду:
[root@deep /]# mkbootdisk --device /dev/fd0 2.2.14Важное замечание. Программа mkbootdisk запускается только для модульных ядер. Так, что вы не можете использовать ее на монолитном ядре, вместо этого создайте аварийную загрузочную дискету так, как это описано ниже.
Так как создать спасательную дискету можно только с модульными ядрами, мы должны найти другой путь загрузки системы с дискеты если ядро на жестком диске испорчено. Это возможно с помощью аварийной загрузочной дискеты. Вы должны создать ее немедленно после первой удачной загрузки системы и подключения к ней как root.
Для создания аварийной загрузочной дискеты сделайте следующее:
Шаг 1.Вставьте дискету и форматируйте ее, используя команду:
[root@deep /]# fdformat /dev/fd0H1440Копируйте файл vmlinuz из каталога "/boot" на дискету:
[root@deep /]# cp /boot/vmlinuz /dev/fd0vmlinuz - это символическая ссылка на реальной ядро.
Шаг 3.Определяем корневой раздел ядра:
[root@deep /]# rdevКорневой раздел ядра - это раздел, где находится корневая файловая система. В этом примере, корневой раздел - "dev/sda12"; на вашей системе это имя может быть другим.
Шаг 4.Устанавливаем корневой раздел ядра:
[root@deep /]# rdev /dev/fd0 /dev/sda12В качестве корневого раздела ядра используется значение полученной на предыдущем шаге.
Шаг 5.Маркируем корневой раздел как только для чтения:
[root@deep /]# rdev -R /dev/fd0 1При инициализации Linux корневая файловая система монтируется только для чтения. Подобная установка избавит вас от ряда предупреждающих сообщений и сообщений об ошибках.
Шаг 6.Вставьте загрузочную дискету в дисковод A: и перезагрузите систему:
[root@deep /]# rebootЕсли вы добавили новое устройство в вашу систему или провели крупное обновление ядра (например, из версии 2.2.9 к 2.2.15), то необходимо обновить ваши входы в "/proc" для предотвращения проблем с потерянными устройствами. Мы можем решить эту задачу при помощи скрипта MAKEDEV. Он сканирует каталог "/proc", где все устройства связываются с драйверами ядра. Специальная опция "update" позволяет утилите MAKEDEV создать новые
устройства, которые вы сконфигурировали в вашем ядре и удалить ненужные.Для обновления входов в "/proc" выполните следующие команды:
[root@deep /]# cd /dev [root@deep /dev]# ./MAKEDEV updateНазад | Оглавление | Вперед |
Глава 6 Управление TCP/IP сетямиВ этой главеИнсталляция более одной Ethernet карты на одной машине Файлы связанные с функционированием сети Настройка TCP/IP сети вручную из командной строки | ![]() |
Мы пока еще не поиграли с сетевыми возможностями Linux. Linux - это одна из самых лучших операционных систем в мире по поддерживаемым сетевым функциям. Большое количество серверов знают об этом и активно используют его. Понимание вашего сетевого оборудования и всех файлов связанных с сетью очень важно для полного контроля над тем с чем сталкивается сервер. Хорошее знание всех основных сетевых команд жизненно важно. Управление сетью охватывает обширный ряд тем. В общем, они включают сбор статистических данных о состоянии частей вашей сети и принятие мер в случае необходимости при возникновении сбоев или других причин. Наиболее примитивная техника сетевого мониторинга - это периодическое пингование проблемных хостов. Более сложная система контроля за сетью требует наличия возможности сбора состояний и статистической информации о работе различных устройств сети. В этой главе мы будем давать ответы на фундаментальные вопросы относительно сетевых устройств, файлов связанных с функционированием сети и важнейших сетевых команд.
Вы можете использовать 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Это говорит, что драйвер 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Если драйвера вкомпилированы в ядро (монолитное ядро), проверка 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Если вы хотите модифицировать ваши сетевые адреса вручную или добавить новое устройство на новом интерфейсе, редактируйте этот файл (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 одно из:
Этот еще одни текстовый файл, используемый определителем (resolver) - библиотекой, которая определяет IP адрес по имени.
Пример этого файла:
search openna.comЗамечание. Запросы посылаются на сервера имен в порядке перечисления в файле "/etc/resolv.conf" (primary, secondary и т.д).
Файл "/etc/host.conf".
Этот файл устанавливает как определяются имена. Linux использует библиотеку определителей для получения IP адреса по имени.
Пример этого файла:
# Поиск имени сперва через DNS а затем, в случае ошибки, в файле /etc/hosts.Опция order используется для определения порядка использования сервисов. В примере
установлено, что вначале библиотека определителя обращается к DNS серверу, а затем к
файлу "/etc/hosts".
Опция multi говорит, что компьютеры, описанные в файле /etc/hosts, могут иметь
несколько IP адресов (несколько интерфейсов ethN). Например, шлюз всегда имеет
несколько адресов и у них эта опция должна быть всегда определена в ON.
Опция nospoof не разрешать подмену адресов. IP-Spoofing - это способ атаки при
котором удаленный компьютер представляется кем-то, кем он не является на самом деле.
Файл "/etc/sysconfig/network".
Файл "/etc/sysconfig/network" описывает желательную сетевую конфигурацию сервера.
Пример этого файла:
NETWORKING=yesNETWORKING=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Вы должны перезагрузить ваши сетевые настройки, чтобы изменения вступили в силу:
[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:"
Утилита 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 ]
Назад | Оглавление | Вперед |
Кто-нибудь может мне сказать, почему я должен использовать коммерческий брандмауэр, а не простой в использовании Ipchains? Что я теряю используя Ipchains? Ipchains хорош и становится все лучше и лучше, чем коммерческие продукты с точки зрения поддержки и функциональных возможностей. Вы, скорее всего, будете лучше понимать процессы происходящие в вашей сети, если будете использовать Ipchains, а не его коммерческий аналоги.
Что такое политика безопасности сетевого брандмауэра.Политика безопасности сетевого брандмауэра определяет те сервисы, которые будут явно разрешены или запрещены, как они будут использоваться и какие исключения будут из этих правил. Полная политика защиты организации должна быть определена согласно анализу безопасности и деловой необходимости. Брандмауэр имеет небольшое значение, если полная политика защиты не определена должным образом. Каждое правило определенное в политика безопасности сетевого брандмауэра должно быть реализовано на брандмауэре. В общем все брандмауэры используют следующие методы:
Все, что специально не разрешено - запрещено.
Этот метод блокирует весь трафик между двумя сетями, за исключением тех
сервисов и приложений которым выдано разрешение. Поэтому каждую
необходимую службу и приложение нужно разрешать. Никогда нельзя
разрешать работу тем службам и приложениям, которые могут быть
использованы для атаки на вашу систему. Это наиболее безопасный метод -
отвергать все, что явно не разрешено. С другой стороны, со стороны
пользователя, этот метод более ограничительный и менее удобный. Именно его
мы будем использовать для построения брандмауэра в этой книге.
Все, что не запрещено, то разрешено.
Этот метод позволяет весь трафик между сетями, за исключением
определенных сервисов и приложений. Поэтому каждую ненужную службу
надо явно запрещать. Это очень удобный и гибкий метод для пользователей, но
несущий в себе серьезные потенциальные проблемы в безопасности.
Пакетный фильтр - это тип брандмауэра созданного на основе ядра Linux. Он работает на сетевом уровне. Данным позволяется остаться в системе, если это разрешено правилами. Проходящие пакеты фильтруются по типу, адресу источника, адресу получателя и по порту. В большинстве случаев фильтрация пакетов осуществляется на маршрутизаторе, который перенаправляет пакеты согласны правилам фильтрации. Когда пакет приходит на фильтрующий маршрутизатор, тот извлекает информацию из заголовка пакета и принимает решение согласно правилам фильтрации об пересылке или уничтожении пакета. Из заголовка пакета может извлекаться следующая информация:
Так как для анализа и регистрации используется небольшое количество данных, фильтрующий брандмауэр создает меньшую нагрузку на 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 |
|
|
|
Эта таблица показывает, какие порты я должен открыть на различных серверах. В зависимости от того, какой сервис должен быть доступен на сервере, вы должны настроить скрипт брандмауэра на разрешение трафика к определенному порту. www.openna.com - наш Веб сервер, mail.openna.com - это наш почтовый сервер для всех внутренних сетей и deep.openna.com - это шлюз в всех примеров объясненных в этой главе.
ЗАМЕЧАНИЕ. Если при создание ядра вы использовали материалы из главы 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://`Так как политика по умолчанию в нашем примере запрещать все, что не разрешено, то некоторые установки должны быть возвращены в исходное состояние. Локальные сетевые сервисы не проходят через внешний интерфейс, они идут через специальный приватный интерфейс, называемый loopback. Ни одна из ваших локальных сетевых программ не будет работать, пока не будет разрешен полный трафик через loopback интерфейс.
# Неограниченный трафик через loopback интерфейс.Все IP пакеты содержат в своих заголовках IP адреса источника и получателя и тип IP протокола помещенного в пакет (TCP, UDP, ICMP). Единственным средством идентификации согласно протоколу IP является адрес источника сообщений. Это приводит к возможности подмены адреса (spoofing), когда злоумышленник заменят адрес источника на несуществующий адрес или на адрес другого сервера.
# Отбрасывание spoof-пакетов, с адресом источника совпадающим с вашим внешним адресом.Существует по крайней мере семь адресов на внешнем интерфейсе от которых необходимо отказаться. К ним относятся:
Блокировка исходящих пакетов, содержащих подобные исходные адреса, за исключением вашего IP адреса, защищает от ошибок конфигурации с вашей стороны.
Замечание. Не забудьте исключить ваш собственный IP адрес из списка исходящих блокируемых пакетов. По умолчанию, я исключаю приватные адреса класса C, так как они наиболее часто используются большинством людей сегодня. Если вы использовали другой класс вместо C, то вы должны раскомментировать соответствующие строки в секции "SPOOFING & BAD ADDRESSES" файла конфигурации файрвола.
Другие правила используемые в скрипте брандмауэра описывают:
Утилита ipchains позволяет вам установить брандмауэр, IP маскарадинг и т.д. Ipchains общается с ядром и говорит какие пакеты необходимо отфильтровать. Теоретически, все установки вашего брандмауэра запоминаются в ядре и теряются при перезагрузке сервера. Для борьбы с этим, чтобы сделать правила постоянными, мы рекомендуем использовать инициализационные скрипты System V. Для этого создайте файл, содержащий скрипт файрвола подобный описанному ниже, в каталоге "/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Создайте символическую rc.d ссылку для вашего Firewall следующей командой:
[root@deep /]# chkconfig --add firewallСейчас ваши правила для 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 ]
Назад | Оглавление | Вперед |
Это конфигурация скрипта для почтового сервера. Он разрешает неограниченный трафик на 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Создайте символическую 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 сервера на маскарадинг и форвардинг трафика из внутренней локальной сети, имеющей приватные адреса (192.168.1.0/24), в Интернет требует специальных настроек ядра и вашего конфигурационного скрипта брандмауэра. Этот вид установок известен как Шлюз. Данная конфигурация должна быть установлена, только если у вас возникнет в этом необходимость, поэтому ей посвящена отдельная глава.
Первое о чем вы должны подумать, это чтобы ваше ядро было создано с поддержкой файрвола и файрволинга. Помните, что все сервера должны быть настроены на блокирование неиспользуемых портов, даже если они не выступают в роли брандмауэра. В ядре 2.2.14 вам нужно ответить Yes на следующие вопросы:
Networking options:ЗАМЕЧАНИЕ. Если при создание ядра вы использовали материалы из главы 3, то все необходимые опции ("Network firewalls, IP:Firewalling и IP:TCP syncookie support") были отмечены.
IP маскарадинг и IP ICMP маскарадинг требуются только для шлюза.
IP:Masquerading (CONFIG_IP_MASQUERADE) [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Вы должны перезагрузить ваши сетевые установки, чтобы изменения вступили в силу.
[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 адрес или не выступают в роли Шлюза для внутренней сети.
Некоторые моменты для обсуждения.Вы можете спокойно предполагать, что находитесь в постоянной опасности, если подключены к Интернет. Ваш шлюз в Интернет - основной источник тревоги, так что я рекомендую следующее:
Это конфигурационный скрипт для шлюза. Он позволяет неограниченный трафик через 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Создайте символическую rc.d ссылку для вашего Firewall следующей командой:
[root@deep /]# chkconfig --add firewallСейчас ваши правила для 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Создайте файл rc.firewall.blocked (touch /etc/rc.d/rc.firewall.blocked) и добавьте в него все IP адреса, доступ с которых вы хотите заблокировать. Например,
204.254.45.9Для получения большей информации, Вы можете прочитать следующие man-ы:
$ ipchains (8) - управление IP firewall-ом
$ ipchains-restore (8) - восстановление цепочек IP firewall-а из stdin
$ ipchains-save (8) - запись цепочек IP firewall-а в stdout
Опции, описываемые ниже, лишь некоторые из существующих, которые наиболее часто используются. Для получения полной информации обо всех параметрах запуска ipchains читайте страницы руководства (man) и документацию.
ipchains∙ Для просмотра всех правил в выбранной цепочке используйте команду:
[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Назад | Оглавление | Вперед |
Глава 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.rpmRPM команда для проверки, инсталлирован ли пакет или нет:
[root@deep /]# rpm -q fooПосле завершения инсталляции и компиляции программ нужных серверу, очень важно деинсталлировать все вышеназванные пакеты. Это защитит вашу систему от неавторизованного использования компилирующих программ. Также переместите исполняемый файл rpm в безопасное место, например, на гибкий диск, тогда злоумышленник не сможет установить свои программы из rpm пакета и будет вынужден компилировать их на месте, а доступа к компилятору нет.
Для перемещения rpm на дискету:
[root@deep /]# mount /dev/fd0 /mnt/floppy/Для возврата rpm в оригинальный каталог:
[root@deep /]# mount /dev/fd0 /mnt/floppy/ЗАМЕЧАНИЕ. Никогда не деинсталлируйте пакет RPM полностью с вашего сервера, иначе вы не сможете проинсталлировать его по новой, потому что для инсталляции любого rpm пакета требуется наличие программы rpm.
Все дистрибьюции Red Hat поставляются в RPM файлах, которые известны также как "пакеты". Этот способ поставки программ характеризуется упрощением процесса их инсталляции, обновления и удаления. Однако, в мире UNIX, стандартом де-факто для пакетов программ является тарбол. Тарбол это просто сжатые файлы, которые могут быть прочитаны и раскрыты при помощи утилиты tar. Инсталляция программ из тарбола более тяжелый процесс, чем из 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 с инструкциями, как приготовить программное обеспечение к использованию. Скорее всего, вам надо будет ввести следующие команды:
./configureconfigure - будет конфигурировать программное обеспечение, чтобы гарантировать, что ваша система имеет функциональные возможности и библиотеки необходимые для успешной компиляции пакета. "make" будет компилировать все исходные файлы в исполняемые. "make install" - инсталлирует исполняемые и все сопутствующие файлы в определенное место.
Другие специальные команды, которые вы встретите в этой книге:
make depend"make depand" будет создавать необходимые зависимости для различных файлов. "strip" будет удалять все символы из объектных файлов. В результате все исполняемые файлы будут меньшего размера. Это улучшит производительность программы, так как системе будет необходимо читать меньше строк при исполнении данного двоичного файла. "chown" будет устанавливать правильных владельцев файлов и разрешения для групп.
Текстовый редактор vi может быть использован для редактирования любых текстовых файлов. В процессе инсталляции программ, пользователь должен часто редактировать текстовые файлы, подобные Makefiles, или конфигурационные файлы. Ниже представлено несколько наиболее важных ключевых строк, необходимых для работы с vi:
i - говорить vi вставить текст перед курсором.Перед переходом к чтению следующей части книги мне бы хотелось отметить, что в тексте подразумевается расположение некоторых файлов в определенных каталогах. Для соглашения, мы принимаем, что они расположены там, где это определено в дистрибутиве Red Hat. Если вы используете другой дистрибутив Linux или эти файлы расположены у вас в других местах, то будьте очень внимательны при копировании примеров из текста книги.
В этой части книги, все программное обеспечение перечисленное в главах с 10 по 21 необязательно, и зависит от того, что необходимо вашему серверу (например, какие задачи будет решать ваш сервер и для какой части Интернет/Интранет). Хотя некоторые программы могут быть очень важны для вас. Полезно заменить telnet на ssh для более безопасного удаленного администрирования сервера. Другая интересная программа - Tripware, которая помогает следить за целостностью определенных программ.
Назад | Оглавление | Вперед |
Некоторые советы в этом разделе специфичны для 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Как 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"'Результат будет выглядеть так:
Если нет, то инсталлируйте ее и выполните команду "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)
Команда 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
Табулирование окончания имени файла позволяет вам вводить только часть имени. Введите начало имени файла и нажмите [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" и т.д. Так, при работе с [], вы должны определить заглавные буквы если в любом файле они могут использоваться.
Назад | Оглавление | Вперед |
Requests for Comments (RFCs) - это набор документов выпущенных Internet
Engineering Task Force (IETF) из Network Information Center (NIC), которые
представляют новые протоколы и устанавливаемые стандарты для стека
протоколов Интернет Каждый такой документ определяет аспект относительно
протокола Интернет. Ниже мы перечислили все RFC, которые имеют
отношение к этой книге и различному программному обеспечению описанному
в ней. Все RFC вы можете найти по следующему адресу:
http://www.cis.ohio-state.edu/rfc/
Назад | Оглавление | Вперед |
Когда я начинал писать эту книгу, первый вопрос, который я себе задал был о том, как инсталлировать 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 вокруг, которые вносят комментарии и предложения в мою работу.
-----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-----
Назад | Оглавление | Вперед |