Безопасность и оптимизация Linux.Редакция для Red Hat

         

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


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

$ 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 imapd (8C) – сервер Internet Message Access Protocol (IMAP)

$ man ipopd (8C) – сервер Post Office Protocol (POP)



Файл “/etc/mail/local-host-names” для всех типов конфигураций


Файл “/etc/mail/local-host-names” считывается для получения альтернативных имен локального хоста. Одним из способов, как этот файл может быть использован, это объявление списка хостов для которых локальный компьютер выступает как получатель почты через MX записи. На такой машине нам просто нужно добавить имена (например, mail.openna.com), для которых он будет манипулировать почтой. Например:

Создайте файл local-host-names file (touch /etc/mail/local-host-names) и добавьте в него следют строку:

# local-host-names – включает все псевдонимы для вашего компьютера.

openna.com

deep.openna.com

www.openna.com

win.openna.com

mail.openna.com

С такой конфигурацией, вся почта отправляемая на домен “openna.com” или любая почта отправляемая на сервер “www.openna.com” или другой хост будет доставляться на ваш почтовый концентратор “mail.openna.com”.

Пожалуйста запомните, что если вы настраивает вашу систему для маскарадинга под другую машину, любая почта посланная из вашей системы на вашу систему будет отправлена на машину под которую вы маскируетесь. Например, в вышеприведенной конфигурации, системные файлы регистрации, которые периодически отправляются на адрес root@www.openna.com, будут отправлены на адрес root@mail.openna.com вашего почтового концентратора.



Файл “/etc/sendmail.mc” для центрального почтового концентратора


Вместо того, чтобы иметь индивидуальные сервера или рабочие станции обрабатывающие свою почту, намного выгоднее иметь в сети единый мощный центральный сервер, который обрабатывает всю почту. Такой сервер называется Почтовый концентратором. Преимущества Центрального Почтового Концентратора:

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

Файл “sendmail.cf” первым считывается Sendmail при запуске и является одним из самых важных файлов для него. В нем определяются месторасположения остальных файлов, права доступа к файлам и каталогам нужных Sendmail. Макро препроцессор m4 из Linux используется Sendmail V8 для создания конфигурационного файла.

Он будет создавать конфигурационный файл “/etc/mail/sendmail.cf”, обрабатывая файл имя которого заканчивается на “.mc”.

Мы создадим файл (sendmail.mc) и внесем в него необходимые макро значения, которые препроцессор m4 прочитает, соберет определения макросов и затем, заменит эти макросы их значениями, создавая в результате своей работы файл “sendmail.cf”. Пожалуйста, обратитесь к документации Sendmail и файлу README из каталога “cf” дерева исходных фалов Sendmail V8 для получения большей информации.

Шаг 1

Создайте файл sendmail.mc (touch /var/tmp/sendmail-version/cf/cf/sendmail.mc) и добавьте в него следующие строки:

define(`confDEF_USER_ID',``8:12'')dnl

OSTYPE(`linux')dnl

DOMAIN(`generic’)dnl

define(`confTRY_NULL_MX_LIST',true)dnl

define(`confDONT_PROBE_INTERFACES',true)dnl

define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl

define(`LOCAL_MAILER_FLAGS', `ShPfn')dnl

define(`LOCAL_MAILER_ARGS', `procmail -a $h -d $u')dnl

FEATURE(`smrsh',`/usr/sbin/smrsh')dnl

FEATURE(`mailertable’)dnl

FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl


FEATURE(`redirect’)dnl

FEATURE(`always_add_domain’)dnl

FEATURE(`use_cw_file’)dnl

FEATURE(`local_procmail’)dnl

FEATURE(`access_db')dnl

FEATURE(`blacklist_recipients')dnl

FEATURE(`dnsbl')dnl

MAILER(`local’)dnl

MAILER(`smtp’)dnl

MAILER(`procmail’)dnl

Где:

define(`confDEF_USER_ID',``8:12'')dnl

Эта конфигурационная опция определяет id пользователя по умолчанию. В нашем случае пользователь “mail” и группа “mail”, которые отвечают следующим идентификатор “8:12” (смотрите /etc/passwd и /etc/group file).

OSTYPE(`linux’)dnl

Эта конфигурационная опция задает операционную систему под которой будет запускаться Sendmail; в нашем случае это “linux”. Этот элемент является минимально необходимым для “mc” файла.

DOMAIN(`generic’)dnl

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

define(`confTRY_NULL_MX_LIST',true)dnl

Эта конфигурационная опция определяет, является ли принимающий сервер лучшим MX для хоста, и если это так, то соединяется с ним напрямую.

define(`confDONT_PROBE_INTERFACES',true)dnl

Эта конфигурационная опция, если она установлена в true, говорит Sendmail не вставлять имена и адреса любых локальных интерфейсов в класс $=w (список известных “эквивалентных” адресов).

define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl

Эта опция определяет путь к программе procmail, инсталлированной на вашей системе. Так как в Red Hat Linux он отличается от других Linux версий, мы должны определить новый путь в этом макросе. Важно заметить, что этот макрос также используется в FEATURE(`local_procmail’), как будет определено позже в этом файле.

define(`LOCAL_MAILER_FLAGS', `ShPfn')dnl

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

define(`LOCAL_MAILER_ARGS', `procmail -a $h -d $u')dnl

Эти конфигурационные опции определяют аргументы которые должны быть переданы локальному агенту доставки (procmail). Смотрите документацию Sendmail для получения информации о них.



FEATURE(`smrsh',`/usr/sbin/smrsh')dnl

Этот m4 макроопределение включает использование “smrsh” (ограниченная оболочка sendmail) вместо “/bin/sh”, используемого по умолчанию) для почтовых программ. При помощи этой опции вы можете контролировать какие программы могут запускаться через электронную почту через файлы “/etc/mail/aliases” и “~/.forward”. По умолчанию программа “smrsh” находится в “/usr/libexec/smrsh”; так как мы проинсталлировали “smrsh” в другое место, нам нужно добавить аргумент smrsh, указывающий новое месторасположение “/usr/sbin/smrsh”. Использование “smrsh” рекомендовано CERT, так что вы должны поддерживать использование этой возможности так часто, как возможно.

FEATURE(`mailertable’)dnl

Это макроопределение m4 включает возможность использования “mailertable” (базы данных выбора нового агента доставки). mailertable – это база данных которая связывает имена “host.domain” со специальными агентами доставки. Благодаря этой возможности, почта может доставляться специфическими агентами доставки к новым доменным именам. Обычно, эта возможность используется только на Центральном Почтовом концентраторе.

FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')dnl

Это макроопределение m4 включает использование “virtusertable” (поддержка виртуальных доменов), которая позволяет на одной машине размещать много виртуальных доменов. virtusertable – это база данных, которая связывает виртуальные домены с новыми адресами. Благодаря использованию этой возможности, почта для виртуальных почтовых доменов может быть доставлена на локальные, удаленные или единичные адреса пользователей. Обычно, эта возможность используется только на Центральном Почтовом Концентраторе.

FEATURE(`redirect’)dnl

Это макроопределение m4 включает использование “redirect” (поддержка для address.REDIRECT). С этой возможностью, почтовый адрес удаленного бюджета, например, “wahib”, будет отражаться с информацией о новом адресе. Удаленный бюджет должен быть определен в файле псевдонимов на почтовом сервере. Обычно, эта возможность используется только на Центральном Почтовом Концентраторе.



FEATURE(`always_add_domain’)dnl

Это макроопределение m4 включает использование “always_add_domain” (добавлять локальный домен в локальной почте). Благодаря этой возможности, все локально доставляемые адреса будут полностью квалифицированными.

FEATURE(`use_cw_file’)dnl

Это макроопределение m4 включает использование “use_cw_file” (использование файла /etc/mail/local-host-names для локальных имен компьютеров). Используя эту возможность вы можете объявить список хостов в файле “/etc/mail/local-host-names” для которых локальных хост выступает MX получателем. Другими словами файл “/etc/mail/local-host-names” будет содержать альтернативные имена локального компьютера.

FEATURE(`local_procmail’)dnl

Это макроопределение m4 включает использование “local_procmail” (использовать procmail, как локальный агент доставки). Благодаря этой функции вы можете использовать procmail, как агент доставки Sendmail.

FEATURE(`access_db')dnl

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

FEATURE(`blacklist_recipients')dnl

Это макроопределение m4 включает возможность блокирования входящей почты от определенных отправителей, компьютеров и адресов. Используя эту функцию, например, вы можете блокировать входящую почту от пользователя nobody, хоста foo.mydomain.com или guest@bar.mydomain.com.

FEATURE(`dnsbl')dnl

Это макроопределение m4 разрешает Sendmail отклонять почту от любых сайтов, входящих в базу данных Realtime Blackhole List "rbl.maps.vix.com". Базирующееся на DNS блокирование основывается на базе данных, содержащей DNS имена спаммеров. За подробной информацией обращайтесь на "".

MAILER(`local’), MAILER(`smtp’) и MAILER(`procmail’)dnl

Это макроопределение m4 включает использование агентов доставки “local”, “smtp” и “procmail” (по умолчанию Sendmail, агенты доставки автоматичнски не объявляются). Используя эту возможность, вы можете определить какие агенты использовать, а какие игнорировать. Опции MAILER(`local’), MAILER(`smtp’) и MAILER(`procmail’) поддерживают local, smtp, esmtp, smtp8, relay procmail агенты доставки. Важно отметить, что MAILER(`smtp’) должен всегда предшествовать MAILER(`procmail’).



ЗАМЕЧАНИЕ. Иногда, домен с которым вы хотите продолжить общаться может входить в список RBL. В этом случае, Sendmail позволит вам переписать разрешение на прием их почты. Чтобы сделать это, просто отредактируйте файл "/etc/mail/access" и добавить соответствующую доменную информацию.

Например:

blacklisted.domain OK

Шаг 2

Сейчас, когда файл с макроопределениями “sendmail.mc” создан, мы создадим конфигурационный файл sendmail (“sendmail.cf”). Для этого используйте следующие команды:

[root@deep /]# cd /var/tmp/sendmail-version/cf/cf/

[root@deep cf]# m4 ../m4/cf.m4 sendmail.mc > /etc/mail/sendmail.cf

ЗАМЕЧАНИЕ. Здесь “../m4/cf.m4” говорит программе m4, где находится конфигурационный файл с информацией по умолчанию.

Так как локальные клиентские машины никогда не получают почту напрямую из внешнего мира и пересылают (отправляют) почту через Центральный Почтовый Концентратор, мы создаем специальный фал, называемый “null.mc”, из которого позже мы получим конфигурационный файл “sendmail.cf”, отвечающий специальным установкам для граничных и локальных серверов. Этот файл с макроопределениями m4 легко создается и конфигурируется, потому, что ему не нужно столько возможностей как на Центральном Почтовом Концентраторе.

Шаг 1

Создаем фал null.mc (touch /var/tmp/sendmail-version/cf/cf/null.mc) и добавляем в него следующие строки: OSTYPE(`linux')dnl

DOMAIN(`generic’)dnl

FEATURE(`nullclient',`mail.openna.com')dnl

undefine(`ALIAS_FILE')dnl

где,

OSTYPE(`linux’)

Эта конфигурационная опция задает операционную систему под которой будет запускаться Sendmail; в нашем случае это “linux”. Этот элемент является минимально необходимым для “mc” файла.

DOMAIN(`generic’)

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

FEATURE(`nullclient',`mail.openna.com')

Это макроопределение m4 говорит вашей клиентской машине никогда не принимать почту напрямую, посылать ее через почтовый концентратор, и пересылать всю почту через этот же сервер, вместо того, чтобы отправлять напрямую. Эта возможность создает небольшой конфигурационный файл ни содержащий ничего, кроме информации о пересылки всей почты на почтовый концентратор через локальную сеть, базирующуюся на SMTP-based. Аргумент “mail.openna.com’, включенный в это определение, является каноническим именем Почтового концентратора. Вы должны, конечно, изменить это имя на ваш Почтовый концентратор, например: FEATURE(`nullclient',` my.mailhub.com').



undefine(`ALIAS_FILE')

Эта конфигурационная опция предотвращает доступ к файлам “/etc/mail/aliases” и “/etc/mail/aliases.db” со стороны nullclient-ской версии Sendmail. С этой строкой в “.mc” файле, вам не нужно создавать файл “aliases” на вашем внутреннем сервере. Эти файлы необходимы только для Центрального почтового севера.

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

Шаг 2

Сейчас, когда у нас есть конфигурационный файл с макроопределениями “null.mc”, мы будем на его основе создавать конфигурационный файл Sendmail “sendmail.cf” для граничных серверов и клиентских машин, используя следующие команды:

[root@deep /]# cd /var/tmp/sendmail-version/cf/cf/

[root@deep cf]# m4 ../m4/cf.m4 null.mc > /etc/mail/sendmail.cf

Шаг 3

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

Для остановки демона Sendmail, редактируйте или создайте файл “/etc/sysconfig/sendmail” и измените/добавьте следующие строки:

DAEMON=yes

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

DAEMON=no

И: QUEUE=1h

ЗАМЕЧАНИЕ. “QUEUE=1h” в файле “/etc/sysconfig/sendmail” говорит Sendmail, что необходимо обрабатывать очередь каждый час. Мы оставим эту строку, так как Sendmail необходимо периодически выполнять эту операцию, если Почтовый концентратор не работает.

Шаг 4

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

/usr/bin/newaliases

/usr/man/man1/newaliases.1

/usr/man/man5/aliases.5

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

[root@client /]# rm -f /usr/bin/newaliases

[root@client /]# rm -f /usr/man/man1/newaliases.1

[root@client /]# rm -f /usr/man/man5/aliases.5

Шаг 5

Удалите неиспользуемую программу Procmail с ваших локальных серверов и клиентских машин. Так как локальные машины отправляют всю внутреннюю и исходящую почту на центральный почтовый концентратор для дальнейшей доставки, нам нет необходимости использовать локальный агент доставки подобный Procmail. Вместо него мы можем использовать программу “/bin/mail”. Для удаления Procmail с вашего сервера используйте следующую команду:

[root@client]# rpm -e procmail


Файлы “/etc/mail/access” и “access.db” для центрального почтового концентратора.


Файл базы данных “access” может быть создан для приема и блокирования почты из выбранных доменов. Например, вы можете выбрать блокирование всей почты исходящей от известных спаммеров, или прием для пересылки всей почты из вашей локальной сети, так как по умолчанию пересылки любой почты в Sendmail запрещена (это антиспаммовая возможность). В файле “access” приведенном ниже, мы разрешаем пересылку почты от локального компьютера и всех локальных сетевых адресов начинающихся с IP адреса 192.168.1. Файлы “access” и “access.db” не требуются на Локальных и граничных клиентах. Они нужны только если вы решили установить центральный почтовый концентратор для управления всей вашей почты. Также заметим, что использование центрального почтового концентратора будет улучшать безопасность и управление другими серверами и клиентами с запущенным Sendmail.

Шаг 1

Создайте файл access (touch /etc/mail/access) и добавьте в него следующие строки:

# Посмотреть описание формата записей используемого в этом файле # можно в файле "cf/README" из пакета с исходными кодами Sendmail. # # В записях используются почтовые адреса, доменные имена и # сетевые адреса как ключи. Например, # # spammer@aol.com REJECT # cyberspammer.com REJECT # 192.168.212 REJECT # # будет отвергать почту от spammer@aol.com, любых пользователей из # домена cyberspammer.com (или любых хостов из домена cyberspammer.com) # и любых хостов из сети 192.168.212.*. # # Ключам могут сопостовляться следующие значения: # # OK - принимать почту, даже если другие правила запущенного набора # правил будут ее отвергать, например, если доменное имя неразрешенное # (unresolvable). # RELAY – принимать почту из указанного домена или принимать ее от них # для дальнейшей пересылки через ваш SMTP сервер. Для некоторый проверок # RELAY действует также как и OK. # REJECT - отклонение отправителя или получателя с универсальным # сообщением. # DISCARD – полное сбрасывание сообщения с использованием # программы-почтальона $#discard. Это работает только для адресов # отправителей (т.е. эта опция указывает, что вы должны сбросить любые # сообщения из указанного домена). # ### любой текст ### - возвращаемое сообщение представляет из себя # совместимый с RFC 821 код ошибки и “любой текст”. # # Например: # # cyberspammer.com 550 We don't accept mail from spammers # okay.cyberspammer.com OK # sendmail.org OK # 128.32 RELAY # # будет приниматься почта из okay.cyberspammer.com, но будут сбрасываться # почта из любых других хостов домена cyberspammer.com с указанным # сообщением. # Будет приниматься почта из любых хостов домена sendmail.org, # и разрешена пересылка почты для сети 128.32.*.*. # # Вы можете также использовать базу данных access для блокирования по # адресу отправителя, базируясь на части адреса, содержащей имя # пользователя.. Например: # # FREE.STEALTH.MAILER@ 550 Spam not accepted # # Заметим, что вы должны указать @ после имени пользователя, чтобы указать, # что этот элемент базы данных проверяет только имя пользователя в адресе # отправителя. # # Если в вашем файле “sendmail.mc” вы используете макроопределение: # # FEATURE(`blacklist_recipients') # # тогда вы можете добавить элементы связанные с локальными пользователями, # хостами в вашем домене или адресов в нем для которых вы не должны # получать почту: # # badlocaluser 550 Mailbox disabled for this username # host.mydomain.com 550 That host does not accept mail # user@otherhost.mydomain.com 550 Mailbox disabled for this recipient # # Вы хотите предотвратить получение почты для пользователя # badlocaluser@mydomain.com, любых пользователей из host.mydomain.com и # одного адреса user@otherhost.mydomain.com. # Включение этой возможности также будет блокировать всю почту для # получателей для который указан флаг сообщения об ошибки или REJECT. # # spammer@aol.com REJECT # cyberspammer.com REJECT # # Почта не может быть отправлена пользователю spammer@aol.com или # кому-либо из cyberspammer.com. # # Сейчас ваш конфигурационный файл access, # разрешает пересылку почты из localhost... localhost.localdomain RELAY localhost RELAY 127.0.0.1 RELAY 192.168.1 RELAY

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

Шаг 2

Создание файла access.dbe:

Помните, так как “/etc/mail/access” является базой данных, то после создания текстового файла описанного выше, вы должны использовать команду “makemap” для создания базы данных схем.

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

[root@deep /]# makemap hash /etc/mail/access.db < /etc/mail/access



Файлы “/etc/mail/aliases и aliases.db” для Центрального Почтового Концентратора


Использование псевдонимов это процесс конвертирования одних локальных имен получателей в другие (использование псевдонимов возможно только для локальных имен). Например используется конвертирование общих имен (таких как root) в реальные имена, или конвертирование одних имен в список из нескольких имен (для списка рассылки). Для каждого элемента где локальный пользователь упоминается как получатель, Sendmail смотрит получателя в базе данных “aliases”. Так как Sendmail может производить поиск среди нескольких тысяч имен в файле “aliases”, копия файла хранится в независимой базе данных “db” для значительного увеличения скорости просмотра. Если вы настраиваете ваш Sendmail на использование Центрального Сервера (Почтового концентратора) для управления всей почты, вам не нужно будет инсталлировать файлы “aliases” и “aliases.db” на граничных серверах и клиентских машинах.

Шаг 1

Создайте файл aliases (touch /etc/mail/aliases) и добавьте в него следующие строки:

# # @(#)aliases 8.2 (Berkeley) 3/5/94 # # Псевдонимы в этом файле не будут расширяться в заголоке FROM: почты # но будут видны через сеть и из /bin/mail. # # >>>>>>>>>> Программа "newaliases" должна быть запущена после того # >> NOTE >> как этот в этот файл будут внесены любые изменения, # >>>>>>>>>> чтобы они стали видны в sendmail. # # Общие системные псевдонимы – должны быть представлены. MAILER-DAEMON: postmaster postmaster: root # Общие перенаправления для псевдо бюджетов. bin: root daemon: root nobody: root # Лицо получающее почту пользователя root #root: admin

ЗАМЕЧАНИЕ. Ваш файл псевдонимов будет скорее всего более сложным. Этот пример показывает минимальный вид этого файла.

Шаг 2

Создание файла aliases.db:

Так как “/etc/mail/aliases” – это база данных, после создания текстового файла как описано выше, вы должны использовать команду “makemap” для создания базы данных схем.

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

[root@deep /]# makemap hash /etc/mail/aliases.db < /etc/mail/aliases



Файлы “/etc/mail/virtusertable


Все эти файлы связаны с отдельными возможностями Sendmail, которые могут быть настроены системным администратором. Еще раз отметим, что эти возможности нужны только на Центральном Почтовом Концентраторе. Ниже даны краткие описания каждой из них.

Файлы virtusertable и virtusertable.db.

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

Файлы domaintable и domaintable.db.

domaintable – это база данных, которая отображает старые домены на новые. Благодаря этой возможности, несколько доменных имен в вашей сети может быть переписаны из старых доменов в новые.

Файлы mailertable & mailertable.db.

mailertable – это база данных, которая отображает имена вида “host.domain” на специальные агенты доставки и новые пары доменных имен. Благодаря этой возможности может быть доставлена через использования специального агента доствки новым локальным или удаленным доменным именам.

Для создания файлов virtusertable, domaintable, mailertable и их соответсвующих “.db” версий в каталоге “/etc/mail” используйте следующие команды:

[root@deep /]# for map in virtusertable domaintable mailertable

> do

> touch /etc/mail/${map}

> chmod 0644 /etc/mail/${map}

> makemap hash /etc/mail/${map}.db < /etc/mail/${map}

> chmod 0644 /etc/mail/${map}.db

> done



Файлы инсталлированные для Sendmail на Центральном Почтовом Концентраторе


> /etc/rc.d/init.d/sendmail > /etc/rc.d/rc0.d/K30sendmail > /etc/rc.d/rc1.d/K30sendmail > /etc/rc.d/rc2.d/S80sendmail > /etc/rc.d/rc3.d/S80sendmail > /etc/rc.d/rc4.d/S80sendmail > /etc/rc.d/rc5.d/S80sendmail > /etc/rc.d/rc6.d/K30sendmail > /etc/sysconfig/sendmail > /etc/mail > /etc/mail/statistics > /etc/mail/sendmail.cf > /etc/mail/access > /etc/mail/access.db > /etc/mail/aliases > /etc/mail/aliases.db > /etc/mail/virtusertable > /etc/mail/virtusertable.db > /etc/mail/domaintable > /etc/mail/domaintable.db > /etc/mail/mailertable > /etc/mail/mailertable.db > /etc/mail/local-host-names > /etc/smrsh > /usr/bin/newaliases > /usr/bin/mailq > /usr/bin/hoststat > /usr/bin/purgestat > /usr/lib/sendmail > /usr/man/man1/mailq.1 > /usr/man/man1/newaliases.1 > /usr/man/man5/aliases.5 > /usr/man/man8/sendmail.8 > /usr/man/man8/mailstats.8 > /usr/man/man8/makemap.8 > /usr/man/man8/praliases.8 > /usr/man/man8/smrsh.8 > /usr/sbin/sendmail > /usr/sbin/mailstats > /usr/sbin/makemap > /usr/sbin/praliases > /usr/sbin/smrsh > /var/spool/mqueue



Файлы инсталлированные для Sendmail на локальном сервере или клиенте


> /etc/rc.d/init.d/sendmail > /etc/rc.d/rc0.d/K30sendmail > /etc/rc.d/rc1.d/K30sendmail > /etc/rc.d/rc2.d/S80sendmail > /etc/rc.d/rc3.d/S80sendmail > /etc/rc.d/rc4.d/S80sendmail > /etc/rc.d/rc5.d/S80sendmail > /etc/rc.d/rc6.d/K30sendmail > /etc/sysconfig/sendmail > /etc/mail > /etc/mail/statistics > /etc/mail/sendmail.cf > /etc/mail/local-host-names > /etc/smrsh > /usr/bin/mailq > /usr/bin/hoststat > /usr/bin/purgestat > /usr/lib/sendmail > /usr/man/man1/mailq.1 > /usr/man/man8/sendmail.8 > /usr/man/man8/mailstats.8 > /usr/man/man8/smrsh.8 > /usr/sbin/sendmail > /usr/sbin/mailstats > /usr/sbin/smrsh > /var/spool/mqueue



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


> /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



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


Перейдите в новый IMAP/POP каталог и введите следующие команды на вашем терминале:

Шаг 1

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

sh -c '(test -f /usr/include/sys/statvfs.h -a $(OS) != sc5 -a $(OS) != sco) && $(LN) flocksun.c flockbsd.c $(LN) flocksv4.c flockbsd.c'

Должна быть:

sh -c '(test -f /usr/include/sys/statvfs.h -a $(OS) != sc5 -a $(OS) != sco -a $(OS) != lnx) && $(LN) flocksun.c flockbsd.c $(LN) flocksv4.c flockbsd.c'

Эта модификация изменит файл “sys/stavfs”. Этот файл, с новой glibc 2.1 из Linux отличается от доступной на Sun.

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

BASECFLAGS="-g -fno-omit-frame-pointer -O6 -DNFSKLUDGE" \

Должна быть:

BASECFLAGS="-g -fno-omit-frame-pointer -O9 -funroll-loops -ffast-math -malign-double -mcpu= pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions -DNFSKLUDGE" \

Это наши оптимизационные флаги для компиляции программ IMAP/POP на сервере.

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

ACTIVEFILE=/usr/lib/news/active

Должна быть:

ACTIVEFILE=/var/lib/news/active

SPOOLDIR=/usr/spool

Должна быть:

SPOOLDIR=/var/spool

RSHPATH=/usr/ucb/rsh

Должна быть:

RSHPATH=/usr/bin/rsh

LOCKPGM=/etc/mlock

Должна быть:

#LOCKPGM=/etc/mlock

“ACTIVEFILE=”строка определяет путь “активного” каталога для IMAP/POP, “SPOOLDIR=”где вы разместите “spool” каталог Linux IMAP/POP, “RSHPATH=”определяет путь каталога “rsh” на вашей системе. Важно заметить, что мы не используем сервис rsh на нашем сервере, но даже в этом случае, мы должны определить правильный путь до “rsh”.

Редактируйте файл Makefile (vi +89 src/osdep/unix/Makefile) и измените строку:

CC=cc

Должна быть:

CC=egcs

Эта строка определяет имя нашего GCC компилятора, который мы будем использовать при компиляции программ IMAP/POP (в нашем случае egcs).

Шаг 2

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


[root@deep imap-4.7c]# make lnp

[root@deep imap-4.7c]# install -m 644 ./src/ipopd/ipopd.8c /usr/man/man8/ipopd.8c

[root@deep imap-4.7c]# install -m 644 ./src/imapd/imapd.8c /usr/man/man8/imapd.8c

[root@deep imap-4.7c]# install -s -m 755 ./ipopd/ipop2d /usr/sbin

[root@deep imap-4.7c]# install -s -m 755 ./ipopd/ipop3d /usr/sbin

[root@deep imap-4.7c]# install -s -m 755 ./imapd/imapd /usr/sbin

[root@deep imap-4.7c]# install -m 644 ./c-client/c-client.a /usr/lib

[root@deep imap-4.7c]# ln -fs /usr/lib/c-client.a /usr/lib/libimap.a

[root@deep imap-4.7c]# mkdir -p /usr/include/imap

[root@deep imap-4.7c]# install -m 644 ./c-client/*.h /usr/include/imap

[root@deep imap-4.7c]# install -m 644 ./src/osdep/tops-20/shortsym.h /usr/include/imap

[root@deep imap-4.7c]# chown root.mail /usr/sbin/ipop2d

[root@deep imap-4.7c]# chown root.mail /usr/sbin/ipop3d

[root@deep imap-4.7c]# chown root.mail /usr/sbin/imapd

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

Заметим, что команда “make lnp” будет настраивать программу под вашу Linux систему с поддержкой Pluggable Authentication Modules (PAM) для лучшей безопасности.

Команда “mkdir” создаст новый каталог с именем “imap” в “/usr/include”. Этот новый каталог “imap” будет содержать все заголовочные файлы связанные с программой imapd файлы “c-client/*” и “shortsym.h”.

Команда “chown” изменит владельца исполняемых программ “ipop2d”, “ipop3d” и “imapd” на пользователя “root” и группу “mail”.

Команда “ln -fs” создаст символическую ссылку “libimap.a” к файлу “c-client.a”, которая может потребоваться для некоторых других программ, которые мы будем инсталлировать в будущем.

ЗАМЕЧАНИЕ. Из соображений безопасности, если вы используете только imapd сервис, удалите двоичные файлы ipop2d и ipop3d. Тоже верно и для ipopd; если вы используете только ipopd сервис, удалите исполняемый файл imapd. Если же вы используете оба сервиса (imapd и ipopd), то оставьте оба двоичных файла.


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


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

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

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

Копируйте файл 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”.


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

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

Копируйте файл imap в каталог “/etc/pam.d/”, если вы планируете использовать imapd сервис.

Копируйте файл pop в каталог “/etc/pam.d/”, если вы планируете использовать popd сервис.

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



Конфигурация файла “/etc/pam.d/imap”


Сконфигурируем ваш файл “/etc/pam.d/imap” для использования pam аутентификации.

Создайте файл imap (touch /etc/pam.d/imap) и добавьте в него:

#%PAM-1.0 auth required /lib/security/pam_pwdb.so shadow nullok account required /lib/security/pam_pwdb.so

ЗАМЕЧАНИЕ. Этот файл нужен, если вы хотите использовать IMAP сервис.



Конфигурация файла “/etc/pam.d/pop”.


Сконфигурируем ваш файл “/etc/pam.d/pop” для использования pam аутентификации.

Создайте файл pop (touch /etc/pam.d/pop) и добавьте в него:

#%PAM-1.0 auth required /lib/security/pam_pwdb.so shadow nullok account required /lib/security/pam_pwdb.so

ЗАМЕЧАНИЕ. Этот файл нужен, если вы хотите использовать POP сервис.



Конфигурация файла “/etc/sysconfig/sendmail” для всех типов конфигураций


Файл “/etc/sysconfig/sendmail” используется для определения конфигурационной информации SENDMAIL, такой как, запускать ли sendmail как демон, нужно ли слушать порт для приема почты или нет, и как долго ждать перед отправкой предупреждающего сообщения, если сообщение из каталога очереди не может быть доставлено.

Создайте файл sendmail (touch /etc/sysconfig/sendmail) и добавьте в него следующее:

DAEMON=yes

QUEUE=1h

Опция “DAEMON=yes” говорит Sendmail запускаться как демон. Эта строка особо полезна, когда sendmail запускается на клиентских машинах, которые не должны принимать почту из внешнего мира, а должны пересылать все сообщения на центральный почтовый концентратор. Не запуская sendmail, вы также улучшается безопасность. Если вы настаиваете sendmail подобным образом, то замените строку “DAEMON=yes” на “DAEMON=no”.

Почта обычно помещается в очередь, потому что не может быть отправлена незамедлительно. “QUEUE=1h” устанавливает интервал времени до отправки предупреждающего сообщения отправителю письма, что его сообщение не может быть доставлено.



Конфигурация скрипта “/etc/rc.d/init.d/sendmail” для всех типов конфигураций.


Настройка скрипта “/etc/rc.d/init.d/sendmail” для запуска и остановки демона Sendmail.

Создайте скрипт-файл sendmail (touch /etc/rc.d/init.d/sendmail) и добавьте в него следующее:

#!/bin/sh

#

# sendmail Это shell скрипт, который заботится о запуске и остановки

# sendmail.

#

# chkconfig: 2345 80 30

# Описание: Sendmail – это почтовый транспортный агент, который \

# используется для перемещения почты с одной машины на другую.

# имя процесса: sendmail

# конфигурационный файл: /etc/sendmail.cf

# pidfile: /var/run/sendmail.pid

# Библиотека исходных функций.

. /etc/rc.d/init.d/functions

# Исходная сетевая конфигурация.

. /etc/sysconfig/network

# Исходная конфигурация sendmail.

if [ -f /etc/sysconfig/sendmail ] ; then

. /etc/sysconfig/sendmail

else

DAEMON=yes

QUEUE=1h

fi

# Проверка, что сеть включена.

[ ${NETWORKING} = "no" ] && exit 0

[ -f /usr/sbin/sendmail ] exit 0

RETVAL=0

# Смотрим как мы вызываем скрипт.

case "$1" in

start)

# Запуск демона.

echo -n "Starting sendmail: "

/usr/bin/newaliases > /dev/null 2>&1

for i in virtusertable access domaintable mailertable ; do

if [ -f /etc/mail/$i ] ; then

makemap hash /etc/mail/$i < /etc/mail/$i

fi

done

daemon /usr/sbin/sendmail $([ "$DAEMON" = yes ] && echo -bd) \

$([ -n "$QUEUE" ] && echo -q$QUEUE)

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && touch /var/lock/subsys/sendmail

;;

stop)

# Остановка демона.

echo -n "Shutting down sendmail: "

killproc sendmail

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/sendmail

;;

restart|reload)

$0 stop

$0 start

RETVAL=$?

;;

status)

status sendmail

RETVAL=$?

;;

*)

echo "Usage: sendmail {start|stop|restart|status}"

exit 1

esac

exit $RETVAL

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

[root@deep /]# chmod 700 /etc/rc.d/init.d/sendmail

Создадим символическую ссылку rc.d для Sendmail:

[root@deep /]# chkconfig --add sendmail

Запустим Sendmail сервер вручную, используя следующую команду:

[root@deep /]# /etc/rc.d/init.d/sendmail start

Starting sendmail: [ OK ]



Linux Imap и Pop сервер


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

Если вы настроили Sendmail как Центральный Почтовый Концентратор, вы должны инсталлировать IMAP/POP программное обеспечение или вы не сможете воспользоваться преимуществами вашего почтового Linux сервера, так как Sendmail занимается только пересылкой почты с одной на другую машину. Почтовый сервер – это сервер на котором запущено одно или более из следующего: IMAP сервер, POP3 сервер, POP2 сервер или SMTP сервер.

Примером SMTP сервера может служить Sendmail, который мы уже проинсталлировали на нашем Linux сервере, как Центральный Почтовый Концентратор. Далее мы попытаемся охватить инсталляцию IMAP4, POP3 и POP2, которые входят в один пакет.

С IMAP & POP программами, почтовая программа удаленного “клиента” может получить доступ к сообщению хранящемся на почтовом сервере, как будто он находится на этом сервере. Например, почта присылается и запоминается на IMAP сервере для пользователя, который может манипулировать ею из его/ее компьютера дома, в офисе и т.д., без необходимости пересылки сообщений или файлов между этими компьютерами.

POP сокращение для “Post Office Protocol” и просто позволяет вам просматривать список сообщений, принимать и удалять их. IMAP - это POP на стероидах. Он позволяет вам легко манипулировать бюджетами, разрешать доступ нескольких людей к одному бюджету, оставлять сообщения на сервере, скачивая только их заголовки, тела, без присоединенных файлов или с ними. IMAP идеален для всех кому серьезно нужна почта. По умолчанию POP и IMAP сервера, которые поставляются с большинством дистрибутивов делают больше, чем нужно.

Эти инструкции предполагают.

Unix-совместимые команды.

Путь к исходным кодам “/var/tmp” (возможны другие варианты).

Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.

Все шаги инсталляции осуществляются суперпользователем “root”.

IMAP версии 4.7c

Пакеты.

Домашняя страница IMAP/POP:

FTP сервер IMAP/POP: или

Вы должны скачать: imap.tar.Z

Предварительные условия.

Sendmail сервер должен быть уже установлен на вашей системе.

Тарболы.

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

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

find /* > Imap1

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

find /* > Imap2

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

diff Imap1 Imap2 > Imap-Installed

Раскроем тарбол (tar.Z).

[root@deep /]# cp imap.tar.Z /var/tmp

[root@deep /]# cd /var/tmp

[root@deep tmp]# tar xzpf imap.tar.Z



Linux Sendmail сервер


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

Sendmail - это один из наиболее широко используемых Почтовых Транспортных Агентов (MTA) в мире. Основное назначение MTA – это пересылка почтовых сообщений с одной машины на другую. Sendmail не клиентская программа, которую вы можете использовать для чтения вашей почты. Она перемещает вашу почту через сети или Интернет туда, куда вы хотите ее отправить. Sendmail в прошлом была легкой целью для хакеров, но с появлением Sendmail версии 8, использовать ее для взлома стало значительно труднее.

Здесь мы представим вам две различные конфигурации Sendmail; одна для центрального почтового концентратора, другая для локального или граничного клиента и сервера.

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

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




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

Эти инструкции предполагают.

Unix-совместимые команды.

Путь к исходным кодам “/var/tmp” (возможны другие варианты).

Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.

Все шаги инсталляции осуществляются суперпользователем “root”.

Sendmail версии 8.10.1

Пакеты.

Домашняя страница Sendmail:

FTP сервер:

Вы должны скачать: sendmail.8.10.1.tar.gz

Тарболы.

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

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

find /* > Sendmail1

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

find /* > Sendmail2

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

diff Sendmail1 Sendmail2 > Sendmail-Installed

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

[root@deep /]# cp sendmail.version.tar.gz /var/tmp

[root@deep /]# cd /var/tmp

[root@deep tmp]# tar xzpf sendmail.version.tar.gz

Конфигурирование

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

Редактируйте файл smrsh.c (vi +77 smrsh/smrsh.c) и измените строку:

# define CMDDIR "/usr/adm/sm.bin"

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

# define CMDDIR "/etc/smrsh"

Эта модификация задает поисковый путь по умолчанию для команд, запускающих программу “smrsh”. Это позволяет нам ограничивать место, где эти программы расположены.

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

Скрипт Build из Sendmail использует конфигурационных файл сайта в котором определяются тип операционной системы и различные флаги компиляции. Этот файл находится в каталоге “devtools/OS” и если вы запускаетесь на Linux, то он имеет имя “Linux”. Мы пересоздадим этот конфигурационный файл сайта для соответствия его вашей системе и поместим в каталог “devtools/OS” дерева исходных кодов Sendmail, так как скрипт Build будет в процессе компиляции искать конфигурационный файл по умолчанию именно в этом месте.



Переместитесь в новый каталог Sendmail и редактируйте файл Linux (vi devtools/OS/Linux), удалив в нем все предопределенные строки и добавив следующие новые:

define(`confENVDEF', `-DPICKY_QF_NAME_CHECK -DXDEBUG=0')

define(`confCC', `egcs')

define(`confOPTIMIZE', `-O9 -funroll-loops -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions')

define(`confLIBS', `-lnsl')

define(`confLDOPTS', `-s')

define(`confMANROOT', `/usr/man/man')

define(`confMANOWN', `root')

define(`confMANGRP', `root')

define(`confMANMODE', `644')

define(`confMAN1SRC', `1')

define(`confMAN5SRC', `5')

define(`confMAN8SRC', `8')

define(`confDEPEND_TYPE', `CC-M')

define(`confNO_HELPFILE_INSTALL’)

define(`confSBINGRP', `root')

define(`confSBINMODE', `6755')

define(`confUBINOWN', `root')

define(`confUBINGRP', `root')

define(`confEBINDIR', `/usr/sbin')

где опции обозначают следующее:

define(`confENVDEF', `-DPICKY_QF_NAME_CHECK -DXDEBUG=0')

Это макро опция первично использовалась для определения кода, который должен быть включен или исключен. С “-DPICKY_QF_NAME_CHECK“, Sendmail будет фиксировать ошибку, если файл “qf” сформирован некорректно и будет переименовывать файл “qf” в “Qf”. Аргумент “-DXDEBUG=0 “ отключает шаги дополнительных внутренних проверок в течении компиляции.

define(`confCC', `egcs')

Эта макро опция определяет компилятор C используемый при компиляции Sendmail. В нашем случае мы используем C компилятор “egcs” для лучшей оптимизации.

define(`confOPTIMIZE', `-O9 -funroll-loops -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions')

Эта макро опция определяет флаги используемые для оптимизации под вашу CPU архитектуру.

define(`confLIBS', `-lnsl')

Эта макро опция определяет флаг -l передаваемый ld.

define(`confLDOPTS', `-s')

Эта макро опция определяет опции компоновщика передаваемые ld.

define(`confMANROOT', `/usr/man/man')

Эта макро опция определяет место, куда надо инсталлировать страницы руководства (man) Sendmail.

define(`confMANOWN', `root')



Эта макро опция определяет владельца всех проинсталлированных страниц руководства Sendmail.

define(`confMANGRP', `root')

Эта макро опция определяет группу для всех проинсталлированных страниц руководства Sendmail.

define(`confMANMODE', `644')

Эта макро опция определяет режим доступа для всех проинсталлированных страниц руководства Sendmail.

define(`confMAN1SRC', `1')

Эта макро опция определяет источник для страниц руководств устанавливаемых в confMAN1.

define(`confMAN5SRC', `5')

Эта макро опция определяет источник для страниц руководств устанавливаемых в confMAN5.

define(`confMAN8SRC', `8')

Эта макро опция определяет источник для страниц руководств устанавливаемых в confMAN8.

define(`confDEPEND_TYPE', `CC-M')

Эта макро опция определяет как создавать зависимости с Sendmail.

define(`confNO_HELPFILE_INSTALL’)

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

define(`confSBINGRP', `root')

Эта макро опция определяет группу для всех исполняемых файлов со сменой идентификатора (setuid) Sendmail.

define(`confSBINMODE', `6755')

Эта макро опция определяет режим доступа для всех исполняемых файлов со сменой идентификатора (setuid) Sendmail.

define(`confUBINOWN', `root')

Эта макро опция определяет владельца всех исполняемых файлов Sendmail.

define(`confUBINGRP', `root')

Эта макро опция определяет группу всех исполняемых файлов Sendmail.

define(`confEBINDIR', `/usr/sbin')

Эта макро опция определяет куда должны быть установлены двоичные исполняемые файлы исполняемые из других двоичных файлов. В Red Hat Linux этот путь должен быть определен как “/usr/sbin”.

Шаг 2

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

[root@deep sendmail-8.10.1]# cd sendmail

[root@deep sendmail]# sh Build

[root@deep sendmail]# sh Build install

[root@deep sendmail]# cd ..

[root@deep sendmail-8.10.1]# cd mailstats

[root@deep mailstats]# sh Build install



[root@deep mailstats]# cd ..

[root@deep sendmail-8.10.1]# cd smrsh

[root@deep smrsh]# sh Build install

[root@deep smrsh]# cd ..

[root@deep sendmail-8.10.1]# cd makemap ( Требуется только для конфигурации Почтового концентратора)

[root@deep makemap]# sh Build install (Требуется только для конфигурации Почтового концентратора)

[root@deep makemap]# cd ..

[root@deep sendmail-8.10.1]# cd praliases (Требуется только для конфигурации Почтового концентратора)

[root@deep makemap]# sh Build install (Требуется только для конфигурации Почтового концентратора)

[root@deep makemap]# cd ..

[root@deep sendmail-8.10.1]# ln -fs /usr/sbin/sendmail /usr/lib/sendmail

[root@deep sendmail-8.10.1]# chmod 511 /usr/sbin/smrsh

[root@deep sendmail-8.10.1]# install -d -m 755 /var/spool/mqueue

[root@deep sendmail-8.10.1]# chown root.mail /var/spool/mqueue

[root@deep sendmail-8.10.1]# mkdir /etc/smrsh

Команда “sh Build” собирает и создает необходимые зависимости для различных двоичных файлов требуемых Sendmail до инсталляции на вашу систему.

Команда “sh Build install” инсталлирует исполняемые двоичные файлы sendmail, mailstats, makemap, praliases, smrsh и страницы руководства, ечли это было задано перед компиляцией.

Команда “ln -fs” создает символическую ссылку исполняемого файла sendmail в каталоге “/usr/lib”. Это требуется, так как некоторые программы пытаются искать sendmail в этом каталоге (/usr/lib).

Команда “install” создаст каталог “mqueue” с правами 755 в каталоге “/var/spool”. Почтовые сообщения по разным причинам могут быть сразу не доставлены. Чтобы гарантировать их доставку, Sendmail запоминает их в каталоге “mqueue” пока они не будут отправлены.

Команда “chown” устанавливает UID “root” и GID “mail” для каталога “mqueue”.

Команда “mkdir” будет создавать каталог “/etc/smrsh”. Здесь будут лежать все программы-почтальоны, которые мы разрешим запускать Sendmail.

ЗАМЕЧАНИЕ. Программы “makemap” и “praliases” должны быть установлены только на центральном почтовом концентраторе. “makemap” позволяет вам создавать базы данных соответствий наподобии файлам “/etc/mail/aliases.db” или “/etc/mail/access.db”. “praliases” выводит системные почтовые псевдонимы (содержимое файла /etc/mail/aliases). Так как лучше иметь только одно место (подобное центральному почтовому концентратору) для обработки и управления всеми db файлами в вашей сети, то нет необходимости использовать программы “makemap” и “praliases” и создавать db файлы на других компьютерах сети.


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


Tcp-wrappers берет на себя заботу о запуске и остановке IMAP или POP серверов. При запуске, inetd читает конфигурационную информацию из файла “/etc/inetd.conf”. Этот файл содержит поля разделяемые символами табуляции или пробелами.

Шаг 1

Редактируйте файл inetd.conf (vi /etc/inetd.conf) и добавьте или раскомментируйте строки, связанные с сервисами, которые вы хотите включить. Если вы хотите использовать IMAP тогда раскомментируйте строку, связанную с ним, если же вы хотите использовать POP, тогда раскомментируйте его вместо IMAP. В нашем примере мы используем IMAP сервис.

#pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d #pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d imap stream tcp nowait root /usr/sbin/tcpd imapd

Не забудьте после обновления вашего файла “inetd.conf” послать процессу inetd сигнал SIGHUP (killall -HUP inetd).

Чтобы изменения вступили в силу перезапустите процесс inetd, используя следующую команду:

[root@deep /root]# killall -HUP inetd

Шаг 2

Если вы хотите инсталлировать IMAP/POP сервер обслуживания ограниченного числа известных реальных IP адресов клиентов, то можно использовать возможности tcp-wrapper-а. Если вы планируете обслуживать dial-up клиентов или сервис Webmail, тогда вы не сможете использовать эти возможности.

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

ALL: ALL@ALL, PARANOID

Которая говорит, что все сервисы, все месторасположения клиентов будут заблокированы, пока не будет непосредственного разрешения в файле “hosts.allow”.

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

imapd: 216.209.228.34 my.domain.com

Которая говорит, что только клиентам с IP адресом “216.209.228.34” и именем хоста “my.domain.com” будет разрешен доступ к IMAP сервису на сервере.



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


[root@deep /]# cd /var/tmp

[root@deep tmp]# rm -rf sendmail-version/ sendmail.version.tar.gz

Команды “rm” будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции Sendmail. Также будет удален сжатый архив Sendmail из каталога “/var/tmp”.


[root@deep /]# cd /var/tmp

[root@deep tmp]# rm -rf imap-version/ imap.tar.Z

Команды “rm” будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции IMAP/POP. Также будет удален сжатый архив IMAP/POP из каталога “/var/tmp”.



Организация защиты IMAP/POP


Действительно ли вам нужен IMAP/POP сервисы?

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



Использование SSL с IMAP/POP

К сожалению из-за экспортных ограничений правительства США, IMAP с поддержкой SSL сейчас не доступен. Существуют пакеты предоставляемые третьими производителями, которые позволяют использовать сессии IMAP и POP3 через SSL. Одним из них является WebMail IMP, Веб интерфейс которого позволяет читать почту через Интернет, используя Веб броузер. WebMail IMP использует протокол SSL для шифрования трафика с IMAP/POP сервером. Смотрите главу 20 “” для получения большей информации по этой теме.





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


Ограниченная оболочка “smrsh” Sendmail.

Программа smrsh предназначается для замены “/bin/sh” в программах почтальонах, определенных в Sendmail. Это ограниченная оболочка, которая предоставляет возможность строго определить через каталог “/etc/smrsh”, явный список исполняемых программ доступных Sendmail. Чтобы быть более точным, даже если “плохой парень” использует Sendmail для запуска программ без файлов псевдонимов и forward, smrsh ограничит набор программ, которые он или она сможет выполнить. В связке с Sendmail smrsh эффективно ограничивает область выполняемых программ только теми программами, что перечислены в каталоге /etc/smrsh. Если вы следовали по инструкциям описанным выше, то smrsh уже откомпилирована и инсталлирована в каталог “/usr/sbin/smrsh”.

Шаг 1

Первое, что надо сделать, это определить список команд, которые “smrsh” позволит Sendmail выполнять.

По умолчанию в него входят:

“/bin/mail” (если инсталлирована на вашей системе)

“/usr/bin/procmail” (если инсталлирована на вашей системе)

ЗАМЕЧАНИЕ. Вы не должны включать интерпретирующие программы, такие как sh(1), csh(1), perl(1), uudecode(1) или потоковый редактор sed(1) в список разрешенных программ.

Шаг 2

Следующее, что надо сделать, это заполнить каталог “/etc/smrsh” программами, которые разрешено запускать Sendmail. Для предотвращения дублирования программ мы будем создавать символические ссылки.

Для разрешения использования программы “/bin/mail” используйте следующие команды:

[root@deep /]# cd /etc/smrsh

[root@deep smrsh]# ln -s /bin/mail mail

Для разрешения использования программы “/usr/bin/procmail” используйте следующие команды:

[root@deep /]# cd /etc/smrsh

[root@deep smrsh]# ln -s /usr/bin/procmail procmail

Вышеприведенные команды позволят запускать программы mail и procmail из пользовательских файлов “.forward” или файла “aliases”, которые используют "program" синтаксис.

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

Шаг 3


Сейчас мы можем настроить Sendmail на использование защищенного shell. Программа почтальон определяется в одиночной строке конфигурационного файла “/etc/mail/sendmail.cf”. Вы должны модифицировать линию “Mprog”, заменив в ней “/bin/sh” на “/usr/sbin/smrsh”.

Редактируйте файл sendmail.cf (vi /etc/mail/sendmail.cf) и измениет строку: Например:

Mprog, P=/bin/sh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/, T=X-Unix, A=sh -c $u

Дожна быть изменена на:

Mprog, P=/usr/sbin/smrsh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/, T=X-Unix, A=sh -c $u

Сейчас перезапустите вручную процесс sendmail следующей командой:

[root@deep /]# /etc/rc.d/init.d/sendmail restart

ЗАМЕЧАНИЕ. В нашем конфигурационном файле “sendmail.mc”, написанном выше, мы уже настроили строку “Mprog” на использование защищенного shell “/usr/sbin/smrsh” при помощи макроопределения “FEATURE(`smrsh',`/usr/sbin/smrsh')”, так что не удивляйтесь, если “/usr/sbin/smrsh” уже установлен в “/etc/mail/sendmail.cf” для Почтового концентратора. Используйте технику непосредственного редактирования файла “/etc/mail/sendmail.cf” для тех машин, где вы использовали файл с макроопределениями “null.mc” (граничные сервера и клиентские машины).

Файл“/etc/mail/aliases”

Несовершенное или небрежное администрирование файла “aliases” может привести к легкому получению привилегированному статусу. Например, многие разработчики поставляют системы с псевдонимом “decode” в файле “/etc/mail/aliases”. Его основное назначение – облегчение для пользователей пересылки двоичных файлов по почте. Отправляющий пользователь конвертирует двоичный файл в ASCII, используя “uuencode”, затем отправляет полученное сообщение псевдониму “decode” на принимающий сервер. Затем псевдоним через канал (pipe) отправляет сообщение программе “/usr/bin/uuencode”, которая конвертирует ASCII назад в двоичный файл. Удалите псевдоним “decode” из файла “/etc/mail/aliases”. Аналогично, каждый псевдоним, который запускает программу и который вы сам не создавали должен быть проверен и скорее всего удален.



Редактируйте файл aliases (vi /etc/mail/aliases) и удалите следующие строки:

# Базовые псевдонимы системы – ДОЛЖНЫ быть представлены.

MAILER-DAEMON: postmaster

postmaster: root

# Обычная переадресация для псевдобюджетов.

bin: root

daemon: root

games: root - удалите эту строку.

ingres: root - удалите эту строку.

nobody: root

system: root - удалите эту строку.

toor: root - удалите эту строку.

uucp: root - удалите эту строку.

# Хорошо известные псевдонимы.

manager: root - удалите эту строку.

dumper: root - удалите эту строку.

operator: root - удалите эту строку.

# ловушка decode для захвата атаки

decode: root - удалите эту строку.

# Человек получающий почту для пользователя root

#root: marc

Чтобы изменения вступили в силу выполните команду:

[root@deep /]# /usr/bin/newaliases

Предотвращение неправильного обращения к вашему Sendmail неавторизированными пользователями

Sendmail сейчас включает значительные антиспаммовские возможности, которые могут помочь предотвратить неправильное использование вашего почтового сервера неавторизированными пользователями. Для этого, редактируйте ваш файл “/etc/mail/sendmail.cf” и внесите в него изменения блокирующие спаммеров.

Редактируйте файл sendmail.cf (vi /etc/mail/sendmail.cf) и измените строку:

O PrivacyOptions=authwarnings

Должна быть:

O PrivacyOptions=authwarnings,goaway

Установка “goaway” говорит Sendmail отвергать все SMTP “EXPN” команды, отбрасывать все SMTP “VERB” команды и игнорировать все SMTP “VRFY” команды. Эти изменения не дадут спаммеру использовать команды “EXPN” и “VRFY”.

Ограничение числа людей, которые могут просматреть содержимое очереди

Обычно, кто угодно может просмотреть почтовую очередь при помощи команды “mailq”. Для ограничения тех, кто имеет возможность ее просмотреть используйте опцию “restrictmailq” в файле “/etc/mail/sendmail.cf”. С ней, Sendmail позволяет просматривать очередь только тем пользователям, кто входит в группу владеющую ею (root). Это позволяет полностью защитить каталог очереди, используя режим доступа 0700.



Редактируйте файл sendmail.cf (vi /etc/mail/sendmail.cf) и внесите в него следующее изменение:

O PrivacyOptions=authwarnings,goaway

Измените на:

O*-PrivacyOptions=authwarnings,goaway,restrictmailq

Сейчас измените режим доступа к вашему каталогу очереди:

[root@deep /]# chmod 0700 /var/spool/mqueue

И перезапустите процесс sendmail, чтобы изменения вступили в силу: [root@deep /]# /etc/rc.d/init.d/sendmail restart Shutting down sendmail: [ OK ] Starting sendmail: [ OK ]

ЗАМЕЧАНИЕ. Мы уже добавили опцию “goaway” в строке “PrivacyOptions=”, а сейчас добавили туда же опцию “restrictmailq”. Любой непривелигированный пользователь, который попытается изучить почтовую очередь получит следующее собщение:

[user@deep /]$ /usr/bin/mailq

You are not permitted to see the queue

Ограничение пользователей имеющих возможность вызвать обработку очереди пользователем “root”

Обычно, кто угодно может вызвать обработку очереди при помощи ключа “-q”. Чтобы только пользователь “root” и владелец каталога очереди могли сделать это используйте опцию “restrictqrun” в файле “/etc/mail/sendmail.cf”.

Редактируйте файл sendmail.cf (vi /etc/mail/sendmail.cf) и внесите в него следующее изменение:

O PrivacyOptions=authwarnings,goaway,restrictmailq

Изменить на:

O PrivacyOptions=authwarnings,goaway,restrictmailq,restrictqrun

Перезапустите процесс sendmail, чтобы изменения вступили в силу:

[root@deep /]# /etc/rc.d/init.d/sendmail restart Shutting down sendmail: [ OK ] Starting sendmail: [ OK ]

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

[user@deep /]$ /usr/sbin/sendmail -q

You do not have permission to process the queue

Приветственное сообщение SMTP

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

Редактируйте файл sendmail.cf (vi /etc/mail/sendmail.cf) и измените строку:

O SmtpGreetingMessage=$j Sendmail $v/$Z; $b



Должна быть:

O SmtpGreetingMessage=$j

Перезапустите процесс sendmail, чтобы изменения вступили в силу:

[root@deep /]# /etc/rc.d/init.d/sendmail restart Shutting down sendmail: [ OK ] Starting sendmail: [ OK ]

Это изменение фактически ничего не меняет, но рекомендуется в группе новостей news.admin.net-abuse.email как законная предосторожность. Оно изменяет заголовок, которое Sendmail выводит при приеме соединений.

Установка бита “постоянства” на важнейшие файлы Sendmail

На важные файлы Sendmail может быть установлен бит “постоянства для лучшей безопасности при помощи команды “chattr”. Файл с установленным атрибутом “+i” не может быть модифицирован, удален или переименован, на него нельзя создавать ссылки и никакие данные не могут быть дописаны в такие файлы. Только суперпользователь может снять этот атрибут.

Установите бит “постоянства” на файл “sendmail.cf”:

[root@deep /]# chattr +i /etc/mail/sendmail.cf

Установите бит “постоянства” на файл “local-host-names”:

[root@deep /]# chattr +i /etc/mail/local-host-names

Установите бит “постоянства” на файл “aliases”:

[root@deep /]# chattr +i /etc/mail/aliases

Установите бит “постоянства” на файл “access”:

[root@deep /]# chattr +i /etc/mail/access


Утилиты администратора Sendmail


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

newaliases

Назначение утилиты “newaliases” – это пересоздание и обновление базы данных произвольного доступа для файла почтовых псевдонимов “/etc/mail/aliases”. Она должна запускаться каждый раз, когда вы изменяете содержимое этого файла, чтобы изменения вступили в силу.

Обновите файл базы данных псевдонимов с помощью утилиты “newaliases”, используя следующую команду:

[root@deep /]# /usr/bin/newaliases

makemap

Назначение утилиты “makemap” это создание базы данных соответствий для Sendmail. Она должна использоваться только когда вам надо создать новую базу данных для файлов подобных aliases, access, domaintable, mailertable и virtusertable.

Запустите команду makemap, чтобы создать новую базу данных access:

[root@deep /]# makemap hash /etc/mail/access.db < /etc/mail/access

где <hash> - это формат базы данных, makemap может манипулировать тремя различными форматами баз данных: “hash”, “btree” или “dbm”. </etc/mail/access.db> - месторасположения и имя новой базы данных, которую мы создаем. </etc/mail/access> - месторасположение файла из которого мы получаем базу. В нашем примере, мы создаем новый файл “access.db”, используя команду makemap. Для создания баз данных из других файлов (aliases, domaintable, mailertable и virtusertable) вы должны определить месторасположение и имена соответствующих файлов в команде “makemap”.

mailq

Назначение утилиты “mailq” – это печать краткой информации о почтовых сообщениях, хранящихся в очереди для дальнейшей доставки Для вывода краткой информации о почтовой очереди используйте команду:

[root@deep /]# mailq

Mail queue is empty



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


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

mailstats

Назначение утилиты “mailstats” – это вывод текущей статистики работы почтового сервера.

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

[root@deep /]# mailstats Statistics from Tue Dec 14 20:31:48 1999 M msgsfr bytes_from msgsto bytes_to msgsrej msgsdis Mailer 5 0 0K 1 3K 0 0 esmtp 8 1259 19618K 1259 19278K 0 0 local ========================================================================= T 1259 19618K 1260 19281K 0 0

praliases

Назначение утилиты “praliases” – вывод текущих почтовых псевдонимов.

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

[root@deep /]# praliases

postmaster:root

daemon:root

root:admin

@:@

mailer-daemon:postmaster

bin:root

nobody:root

webadmin:admin

www:root



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


> /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



Команды.


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

Для примера, мы покажем вам как создавать сертификат для вашего Веб сервера Apache и/или ваш личный CA (Certifying Authority (подтверждение полномочий)) для подписания ваших “Certificate Signing Request”.

ЗАМЕЧАНИЕ. Все команды перечисленные ниже выполняются в каталоге “/etc/ssl/”.

1.1 Создание приватного ключа RSA защищенного парольной фразой для вашего сервера Apache.

[root@deep ssl]# openssl genrsa -des3 -out server.key 1024

Generating RSA private key, 1024 bit long modulus

......................+++++

.....+++++

e is 65537 (0x10001)

Enter PEM pass phrase:

Verifying password - Enter PEM pass phrase:

Пожалуйста, создайте резервную копию файла server.key и запомните парольную фразу.

1.2 Создание Certificate Signing Request (CSR) с серверным приватным ключом RSA.

[root@deep ssl]# openssl req -new -key server.key -out server.csr

Using configuration from /etc/ssl/openssl.cnf

Enter PEM pass phrase:

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [CA]:

State or Province Name (full name) [Quebec]:

Locality Name (eg, city) [Montreal]:

Organization Name (eg, company) [Open Network Architecture]:

Organizational Unit Name (eg, section) [Internet Department]:

Common Name (eg, YOUR name) [www.openna.com]:

Email Address [admin@openna.com]:

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:.

An optional company name []:.

ЗАМЕЧАНИЕ. Убедитесь, что вы ввели FQDN (Полностью определенное доменное имя (“Fully Qualified Domain Name”)) сервера, когда OpenSSL спросил вас о “CommonName” (например, когда вы создаете CSR для Веб сервера который будет позже доступен через https://www.mydomain.com/, введите www.mydomain.com).


После создания вашего Certificate Signing Request (CSR), у вас возникают два варианта:

Первый, это послать этот сертификат в коммерческие структуры Certifying Authority (CA), подобные Verisign или Thawte, для подписания. Вы обычно отправляете CSR через Веб форму, оплачиваете подписание, ждете Сертификата и запоминаете его в файле “server.crt”. Результатом всех этих операций будет настоящий сертификат, который может быть использован с Apache.

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

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

1.3 Создание вашего приватного ключа RSA (CA).

[root@deep ssl]# openssl genrsa -des3 -out ca.key 1024

Generating RSA private key, 1024 bit long modulus

...........................+++++

............................................+++++

e is 65537 (0x10001)

Enter PEM pass phrase:

Verifying password - Enter PEM pass phrase:

Сделайте резервную копию этого файла ca.key и запомните парольную фразу (pass-phrase), которую вы ввели.

1.4 Создание самоподписанного (CA) сертификата (структура x509) с ключом RSA из CA.

[root@deep ssl]# openssl req -new -x509 -days 365 -key ca.key -out ca.crt

Using configuration from /etc/ssl/openssl.cnf

Enter PEM pass phrase:

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,



If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [CA]:

State or Province Name (full name) [Quebec]:

Locality Name (eg, city) [Montreal]:

Organization Name (eg, company) [Open Network Architecture]:

Organizational Unit Name (eg, section) [Internet Department]:CA Marketing

Common Name (eg, YOUR name) [www.openna.com]:

Email Address [admin@openna.com]:

[root@deep ssl]# mv server.key private/

[root@deep ssl]# mv ca.key private/

[root@deep ssl]# mv ca.crt certs/

ЗАМЕЧАНИЕ. Команда “req” создает самоподписанный сертификат, когда используется переключатель -x509.

1.5 Подписание запросов сертификата. (Мы создаем и используем наш личный Certificate Authority (CA))

Приготовьте скрипт для подписания (он нужен, потому что команда “openssl ca'' имеет некоторые странные требования и по умолчанию конфигурация OpenSSL не позволяет ее легко использовать напрямую). Скрипт с именем sign.sh находится в нашем архиве flopy.tgz в каталоге openssl. Используйте этот скрипт для подписания.

Сейчас вы можете использовать CA для подписания CSR сервера, чтобы создать реальный сертификат для внутреннего использования в Веб сервере Apache (предполагаем, что вы уже имеете файл server.csr под рукой):

[root@deep ssl]# /usr/bin/sign.sh server.csr

CA signing: server.csr -> server.crt:

Using configuration from ca.config

Enter PEM pass phrase:

Check that the request matches the signature

Signature ok

The Subjects Distinguished Name is as follows

countryName :PRINTABLE:'CA'

stateOrProvinceName :PRINTABLE:'Quebec'

localityName :PRINTABLE:'Montreal'

organizationName :PRINTABLE:'Open Network Architecture'

organizationalUnitName :PRINTABLE:'Internet Department'

commonName :PRINTABLE:'www.openna.com'

emailAddress :IA5STRING:'admin@openna.com'

Certificate is to be certified until Dec 1 14:59:29 2000 GMT (365 days)

Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y

Write out database with 1 new entries

Data Base Updated



CA verifying: server.crt <-> CA cert

server.crt: OK

This signs the CSR and results in a server.crt file.

[root@deep ssl]# mv server.crt certs/

Сейчас мы имеем два файла: server.key и server.crt. Они могут быть использованы в конфигурационном файле httpd.conf Веб-сервера Apache следующим образом:

SSLCertificateFile /etc/ssl/certs/server.crt (публичный ключ веб сервера)

SSLCertificateKeyFile /etc/ssl/private/server.key (приватный ключ веб сервера)

Файл server.csr больше не нужен.

[root@deep ssl]# rm -f server.csr

ЗАМЕЧАНИЕ. Если вы получили сообщение об ошибке во время подписания сертификата, это потому что вы ввели неправильно FQDN (“Fully Qualified Domain Name”) для сервера, когда OpenSSL запросил у вас “CommonName”; “CommonName” должен представлять из себя что-то подобное “my.domain.com” и не “domain.com”. Также, так как вы создавали сертификат и CA сертификат, важно, чтобы хотя бы небольшая часть информации представленной в них отличалась, или вы можете столкнуться с проблемами во время подписания удостоверяющих запросов.


Компиляция и добавление FreeS/WAN в ядро


Вы должны модифицировать “Makefile” в каталоге с исходными кодами FreeS/WAN и подкаталогах “utils”, “klips/utils”, “Pluto” и “lib”, чтобы определить пути для инсталляции. Мы должны модифицировать эти файлы, чтобы расположение файлов соответствовало структуре файловой системы Red Hate и чтобы после инсталляции они попадали под нашу переменную окружения PATH.

Шаг 1

Переместитесь в верхний уровень нового каталога с исходными кодами FreeS/WAN и введите следующие команды на вашем терминале:

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

PUBDIR=/usr/local/sbin

Должен быть:

PUBDIR=/usr/sbin

PRIVDIR=/usr/local/lib/ipsec

Должен быть:

PRIVDIR=/usr/lib/ipsec

FINALPRIVDIR=/usr/local/lib/ipsec

Должен быть:

FINALPRIVDIR=/usr/lib/ipsec

MANTREE=/usr/local/man

Должен быть:

MANTREE=/usr/man

Шаг 2

Редактируйте файл Makefile в подкаталоге “utils” (vi utils/Makefile) и сделайте в нем следующие изменения:

PUBDIR=/usr/local/sbin

Должен быть:

PUBDIR=/usr/sbin

PRIVDIR=/usr/local/lib/ipsec

Должен быть:

PRIVDIR=/usr/lib/ipsec

FINALPRIVDIR=/usr/local/lib/ipsec

Должен быть:

FINALPRIVDIR=/usr/lib/ipsec

MANTREE=/usr/local/man

Должен быть:

MANTREE=/usr/man

Шаг 3

Редактируйте файл Makefile в подкаталоге “klips/utils” (vi klips/utils/Makefile) и сделайте в нем следующие изменения:

BINDIR=/usr/local/lib/ipsec

Должен быть:

BINDIR=/usr/lib/ipsec

MANTREE=/usr/local/man

Должен быть:

MANTREE=/usr/man

Шаг 4

Редактируйте файл Makefile в подкаталоге “pluto” (vi pluto/Makefile) и сделайте в нем следующие изменения:

BINDIR=/usr/local/lib/ipsec

Должен быть:

BINDIR=/usr/lib/ipsec

MANTREE=/usr/local/man

Должен быть:

MANTREE=/usr/man

Шаг 5

Редактируйте файл Makefile в подкаталоге “lib” (vi lib/Makefile) и сделайте в нем следующие изменения:

MANTREE=/usr/local/man

Должен быть:

MANTREE=/usr/man

Шаг 6

Редактируйте файл Makefile в подкаталоге “libdes” (vi libdes/Makefile и сделайте в нем следующие изменения:

LIBDIR=/usr/local/lib

Должен быть:



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


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

Шаг 1

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

DIR=/usr/local/ssl

Должен быть:

DIR=/usr

Изменение этой строки будет создавать и инсталлировать OpenSSL в “/usr”.

Шаг 2

По умолчанию, исходные файлы OpenSSL предполагают что Perl расположен в каталоге “/usr/local/bin/perl”. Мы должны модифицировать строку “#!/usr/local/bin/perl” во всех скриптах, которые зависят от perl, на месторасположение Perl в Red Hat Linux - “/usr/bin”.

[root@deep openssl-0.9.5a]# perl util/perlpath.pl /usr/bin (где находится ваша программа perl).

Шаг 3

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

[root@deep openssl-0.9.5a]# export LD_LIBRARY_PATH=`pwd`



Шаг 4

Сейчас, мы должны сконфигурировать OpenSSL под нашу систему:

CC="egcs" \

./Configure linux-elf -DSSL_FORBID_ENULL \

--prefix=/usr \

--openssldir=/etc/ssl

ЗАМЕЧАНИЕ. Опция “-DSSL_FORBID_ENULL” нужна, чтобы запретить нулевое шифрование из соображений безопасности.

Шаг 5

Редактируйте файл Makefile.ssl (vi +50 Makefile.ssl) и внесите следующие изменения:

CC= gcc

Должен быть:

CC= egcs

Редактируйте файл Makefile.ssl (vi +52 Makefile.ssl) и добавьте/измените следующие строки:

CFLAG= -DTHREADS -D_REENTRANT -DSSL_FORBID_ENULL -DL_ENDIAN -DTERMIO -O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions -Wall -DSHA1_ASM -DMD5_ASM -DRMD160_ASM

Редактируйте файл Makefile.ssl (vi +79 Makefile.ssl) и измените следующее значение для процессора Pentium Pro:

PROCESSOR= 686

ЗАМЕЧАНИЕ. Три последние модификации выполненные нами устанавливают оптимизационные флаги для компиляции OpenSSL на сервере. Последняя модификация (PROCESSOR=), если у вас Pentium, то измените на 586, Pentium Pro/II/III на 686, a 486 на 486.

Шаг 6


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

MANDIR=$(OPENSSLDIR)/man

Должна быть:

MANDIR=/usr/man

Этот шаг нужен для определения каталога, куда будут проинсталлированы страницы руководства (man pages) OpenSSL. В нашем случае это каталог “/usr/man”.

Шаг 7

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

[root@deep openssl-0.9.5a]# make -f Makefile

[root@deep openssl-0.9.5a]# make test

[root@deep openssl-0.9.5a]# make install

[root@deep openssl-0.9.5a]# mv /etc/ssl/misc/* /usr/bin/

[root@deep openssl-0.9.5a]# rm -rf /etc/ssl/misc/

[root@deep openssl-0.9.5a]# rm -rf /etc/ssl/lib/

[root@deep openssl-0.9.5a]# rm -f /usr/bin/CA.pl

[root@deep openssl-0.9.5a]# rm -f /usr/bin/CA.sh

[root@deep openssl-0.9.5a]# install -m 644 libRSAglue.a /usr/lib/

[root@deep openssl-0.9.5a]# install -m 644 rsaref/rsaref.h /usr/include/openssl/

[root@deep openssl-0.9.5a]# strip /usr/bin/openssl

[root@deep openssl-0.9.5a]# mkdir -p /etc/ssl/crl

Команда "make -f" создаст библиотеки OpenSSL (libcrypto.a и libssl.a) и двоичный файл "openssl". Библиотеки будут созданы в каталоге верхнего уровня, а двоичный файл в каталоге "apps". После успешного создания, команда "make test" будет тестировать библиотеки и в заключении "make install" создаст инсталляционный каталог и инсталлирует OpenSSL.

Команда “mv” переместит все файлы из “/etc/ssl/misc/” в каталог “/usr/bin/”. Эти файлы двоичные и должны располагаться в “/usr/bin/”, так как там находятся все исполняемые файлы вашей системы. Также размещение их в этом каталоге поместит их в поле действия переменной окружения PATH.

Команда “rm” удалит каталоги “/etc/ssl/misc/” и “/etc/ssl/lib/” из вашей системы, так как они сейчас располагаются в другом месте. Также, мы удаляем файлы “CA.pl” и “CA.sh”, представляющие из себя небольшие скрипты для создания ваших собственных CA сертификатов. Эти скрипты, связанные с “openssl ca” командами, имеют несколько странные требования, и по умолчанию конфигурация OpenSSL не позволяет вам легко напрямую использовать “openssl ca”.Так, что мы создадим скрипт “sign.sh” позже, чтобы заменить их.

ЗАМЕЧАНИЕ. Пакет bc-1.05a-4.i386.rpm или новее должен быть уже проинсталлирован на вашем Linux сервере или вы получите сообщение об ошибке во время тестирования библиотек OpenSSL.


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


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

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

Копируйте файл openssl.cnf в каталог “/etc/ssl/”.

Копируйте файл sign.sh в каталог “/usr/bin/”.

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


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

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

Копируйте файл ipsec.conf в каталог “/etc”.

Копируйте файл ipsec.secrets в каталог “/etc”.

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



Конфигурация файла “/etc/ssl/openssl.cnf”


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

Редактируйте файл openssl.cnf (vi /etc/ssl/openssl.cnf):

# Примерный конфигурационный файл OpenSSL. # Это главным образом используется для создания удостоверяющих запросов. # RANDFILE = $ENV::HOME/.rnd oid_file = $ENV::HOME/.oid oid_section = new_oids # Используйте этот конфигурационный файл с опцией "-extfile" из # утилиты "openssl x509", имя секции содержит # расширения X.509v3, чтобы использовать: # extensions = # (Альтернативно, используйте конфигурационный файл который имеет только # X.509v3 расширения в основной [= default] секции.) [ new_oids ] # Мы можем добавить новый OIDs здесь для использования в 'ca' и 'req'. # Добавьте простой OID подобно этому: # testoid1=1.2.3.4 # Или используйте подстановку конфигурационного файла наподобие этого: # testoid2=${testoid1}.5.6 #################################################################### [ ca ] default_ca = CA_default # Это ca секция по умолчанию #################################################################### [ CA_default ] dir = /etc/ssl # где все хранится certs = $dir/certs # где хранятся штатные сертификаты crl_dir = $dir/crl # где хранятся штатные crl database = $dir/ca.db.index # файл с базой данных индексов. new_certs_dir = $dir/ca.db.certs # место по умолчанию для новых сертификатов. certificate = $dir/certs/ca.crt # CA сертификат serial = $dir/ca.db.serial # текущий регистрационный номер crl = $dir/crl.pem # текущий CRL private_key = $dir/private/ca.key # приватный ключ RANDFILE = $dir/ca.db.rand # приватный файл со случайным числом x509_extensions = usr_cert # расширение добавляемое к сертификату # Расширение добавляемое к CRL. Замечание: Netscape communicator # основывается на V2 CRL так что по умолчанию это закомментировано, # чтобы оставить V1 CRL. # crl_extensions = crl_ext default_days = 365 # сколько времени удостоверяет default_crl_days = 30 # сколько времени до следующего CRL default_md = md5 # какой использовать md. Preserve = no # сохранять порядок пройденных DN # Несколько различных путей для определения, как подобные запросы должны # выглядеть для CA, список атрибутов должен быть такой же и плюс некоторые # необязательные поля policy = policy_match # Для CA политик [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional # Для 'чьих угодно' политик # В этом пункте вы должны перечислить все приемлемые типы объектов [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional #################################################################### [ req ] default_bits = 1024 default_keyfile = privkey.pem distinguished_name = req_distinguished_name attributes = req_attributes x509_extensions = v3_ca # Расширение добавляемое к самоподписанным сертификатам [ req_distinguished_name ] countryName = Country Name (2-х буквенный код) countryName_default = CA countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (полное имя) stateOrProvinceName_default = Quebec localityName = Locality Name (например, город) localityName_default = Montreal 0.organizationName = Organization Name (например, компания) 0.organizationName_default = Open Network Architecture # мы можем сделать это, но обычно это не нужно :-) #1.organizationName = Second Organization Name (например, компания) #1.organizationName_default = World Wide Web Pty Ltd organizationalUnitName = Organizational Unit Name (например, подразделение) organizationalUnitName_default = Internet Department commonName = Common Name (например, ВАШЕ имя) commonName_default = www.openna.com commonName_max = 64 emailAddress = Email Address emailAddress_default = admin@openna.com emailAddress_max = 40 # SET-ex3 = SET extension number 3 [ req_attributes ] challengePassword = A challenge password challengePassword_min = 4 challengePassword_max = 20 unstructuredName = An optional company name [ usr_cert ] # Эти расширения добавляются, когда 'ca' подписанный запрос. # Это идет против рекомендаций PKIX, но некоторые CA делают это и # некоторые программы запрашивают это, чтобы уклониться от # интерпретирования сертификатов конечных пользователей как CA. basicConstraints=CA:FALSE # Здесь приведены некоторые примеры использования nsCertType. Если это # пропущено, то сертификат может использоваться для каких-нибудь пропусков # подписаний объектов. # Это OK для сервера SSL. # nsCertType = server # Это используется для объекта, подписывающего сертификат. # nsCertType = objsign # Это обычно используется для нормальных клиентов # nsCertType = client, email # и для всего, включая объекты подписания: # nsCertType = client, email, objsign # Это типично в keyUsage для клиентских сертификатов. # keyUsage = nonRepudiation, digitalSignature, keyEncipherment # Это будет выводится в списковом окне комментариев Netscape. nsComment = "OpenSSL Generated Certificate" # PKIX рекомендации, безопасно если включены все сертификаты. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer:always # Это для subjectAltName и issuerAltname. # Импортирование почтового адрес. # subjectAltName=email:copy # Copy subject details # issuerAltName=issuer:copy #nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem #nsBaseUrl #nsRevocationUrl #nsRenewalUrl #nsCaPolicyUrl #nsSslServerName [ v3_ca] # Расширение для типичного CA # Рекомендация PKIX. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer:always # Это то, что рекомендует PKIX, но некоторые “неправильные” программы # засоряют критическими расширениями #basicConstraints = critical,CA:true #Так мы делаем это вместо вышеприведенного. basicConstraints = CA:true # Ключевое использование: это типично для CA сертификатов. Однако, так как # это предотвратит использование для проверки самоподписанных # сертификатов, лучше по умолчанию это не учитывать. # keyUsage = cRLSign, keyCertSign # Некоторые могли бы хотеть также # nsCertType = sslCA, emailCA # Включение почтового адреса в subject alt name: другая рекомендация PKIX # subjectAltName=email:copy # Копирование деталей запрашивающей стороны # issuerAltName=issuer:copy # RAW DER hex encoding of an extension: beware experts only! # 1.2.3.5=RAW:02:03 # You can even override a supported extension: # basicConstraints= critical, RAW:30:03:01:01:FF [ crl_ext ] # CRL extensions. # Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. # issuerAltName=issuer:copy authorityKeyIdentifier=keyid:always,issuer:always

ЗАМЕЧАНИЕ. Файл “openssl.cnf” уже будет существовать на вашей системе, когда вы скомпилируете и проинсталлируете программу OpenSSL, и может быть найден в каталоге “/etc/ssl/”. Вам не нужно менять все опции установленные по умолчанию в этом файле; обычно, достаточно внести изменения в секции [CA_default] и [req_distinguished_name].



Linux FreeS/WAN VPN


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

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

IPSEC – это Internet Protocol SECurity. Он использует сильную криптографию для обоих сервисов: аутентификации и шифрации. Аутентификация гарантирует что пакеты идут от правильного отправителя и не будут изменены при пересылке. Шифрование предотвращает неавторизованное чтение содержимого пакетов. IPSEC может защищать любые протоколы работающие поверх IP и любые среды передачи используемые под IP. IPSEC может также предоставлять некоторые сервисы безопасности в фоновом режиме, с невидимым для пользователя влиянием. Более того, он может защищать смешанные протоколы, запускаемы через комплексную комбинацию сред передачи (например, IMAP/POP и т.д.) без внесения в них изменений, так как шифрование идет на уровне IP.

Сервис IPSEC позволяет вам создавать безопасные туннели через небезопасные сети. Каждая передача через небезопасную сеть шифруется шлюзом IPSEC и расшифровывается шлюзом на другом конце. В результате возникает Виртуальная Приватная Сеть (Virtual Private Network) или VPN. Эта сеть является частной даже при том, что включает несколько машин объединенных небезопасным Интернет.



Эти инструкции предполагают.

Unix-совместимые команды.

Путь к исходным кодам “/var/tmp” (возможны другие варианты).

Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.

Все шаги инсталляции осуществляются суперпользователем “root”.

Ядро версии 2.2.14.

FreeS/WAN VPN версии 1.3

Пакеты.

Домашняя страница ядра Linux:

Вы должны скачать: linux-2_2_14_tar.gz

Домашняя страница FreeS/WAN VPN:

FTP сервер FreeS/WAN VPN:

Вы должны скачать: freeswan-1.3.tar.gz

Тарболы.

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

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

find /* > Freeswan1

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

find /* > Freeswan2

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

diff Freeswan1 Freeswan2 > Freeswan-Installed

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

[root@deep /]# cp freeswan-version.tar.gz /usr/src/

[root@deep /]# cd /usr/src

[root@deep src]# tar xzpf freeswan-version.tar.gz

[root@deep src]# chown -R 0.0 /usr/src/freeswan-version



Linux OPENSSL сервер


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

Большинство серверов подобных IMAP & POP, Samba, OpenLDAP, FTP, Apache и других, которым необходима аутентификация пользователей перед разрешением использования сервиса, по умолчанию, передают имя пользователя и пароль в простом текстовом виде. Альтернативные механизмы шифрования подобные SSL гарантируют надежность и безопасность транзакций. С этой технологией, данные передаются через сеть в зашифрованном виде. Однажды установив OpenSSL на своем сервере, вы можете использовать его как стороннюю утилиту в других приложениях, для включения в них возможностей SSL.

Из описания OpenSSL:

Проект OpenSSL – это совместная попытка разработать надежную, коммерчески независимую, полнофункциональную и распространяемую с открытыми кодами реализацию протоколов Secure Sockets Layer (SSL v2/v3) и Transport Layer Security (TLS v1) с полной криптографией. Проект управляется добровольцами всемирного сообщества, которые используют Интернет для общения, планирования и разработки инструментария OpenSSL и связанной с ним документацией.



Преимущества криптографии

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

Конфиденциальность данных

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

Целостность данных

Криптографическая контрольная сумма, называемая message authentication code (MAC), может рассчитываться на произвольном определенном пользователем тексте для защиты целостности данных. Результат (текст и MAC) отправляется принимающей стороне, который может проверить контрольный MAC присоединенный к сообщению пересчитывая MAC для сообщения, используя соответствующий секретный ключ и проверяя, что полученный MAC эквивалентен контрольному.


Аутентификация

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

Электронные подписи

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

Патенты

Несколько юридических проблем существует при использовании SSL технологии. Если вы планируете использовать OpenSSL для коммерческих целей, то необходимо получить у RSA лицензию на использование RSA библиотек.

Здесь приведено извлечение из файла README OpenSSL:

Разные компании владеют патентами на разные алгоритмы в разных местах мира. Вы сами отвечаете за то, что бы использование любых алгоритмов для вас было юридически законно, проверяя имеются ли какие-либо патенты у вас в стране. Этот файл включает некоторые патенты о которых мы точно или “по слухам” знаем. Это не точный список.

RSA Data Security держит программный патент на алгоритмы RSA и RC5. Если принадлежащий им код используется в США (и Японии?), вы должны контактировать с RSA Data Security об условиях лицензии. Их веб-сервер: .

RC4 – это торговая марка RSA Data Security, так что его использование возможно только с разрешения RSA Data Security.

Алгоритм IDEA патентован Ascom в Австрии, Франции, Германии, Италии, Японии, Нидерландах, Испании, Швеции, Швейцарии, Соединенном Королевстве и США. С ними нужно войти в контакт если вы используете этот алгоритм; их веб-сервер: .

Эти инструкции предполагают.

Unix-совместимые команды.

Путь к исходным кодам “/var/tmp” (возможны другие варианты).

Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.

Все шаги инсталляции осуществляются суперпользователем “root”.

OpenSSL версии 0.9.5a

Пакеты.

Домашняя страница OpenSSL:

Вы должны скачать: openssl-0.9.5a.tar.gz

Тарболы.

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

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

find /* > OpenSSL1

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

find /* > OpenSSL2

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

diff OpenSSL1 OpenSSL2 > OpenSSL-Installed

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

[root@deep /]# cp openssl-version.tar.gz /var/tmp

[root@deep /]# cd /var/tmp

[root@deep tmp]# tar xzpf openssl-version.tar.gz


Настройка файла “/etc/ipsec.conf”


Конфигурационный файл FreeS/WAN “/etc/ipsec.conf” позволяет вам настраивать вашу конфигурацию IPSEC, контролируя информацию и типы соединений. IPSEC сейчас поддерживает два типа соединений: снабжаемые ключами вручную и автоматически снабжаемые ключами. Соединения снабжаемые ключами вручную используют ключи, хранящиеся в файле “/etc/ipsec.conf”. Этот тип соединений менее безопасен чем соединения автоматически снабжаемые ключами, которые используют ключи автоматически создаваемые демоном согласования ключей Pluto. Протокол согласования ключей, используемый по умолчанию и называемый IKE, устанавливает подлинность других систем используя совместный секрет, хранящийся в файле “/etc/ipsec.secrets”. Мы будем использовать соединения автоматически снабжаемые ключами, так как они более безопасные чем их ручной аналог.

В нашем примерном конфигурационном файле приведенном ниже, мы настраиваем проходящий через брандмауэр туннель, и принимаем, что сетевой брандмауэр корректно работает на обоих концах туннеля. Мы выбрали эту конфигурацию, так как она представляется нам наиболее универсальной, пригодной для большинства пользователей. Также, она позволяет нам поиграться с большим числом опций конфигурационного файла “ipsec.conf”.

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

SubnetDeep==Deep--Deepgate.................Mailgate--Mail==SubnetMail Untrusted net

leftsubnet = SubnetDeep (192.168.1.0/24)

left = Deep (deep.openna.com)

leftnexthop = Deepgate (первый маршрутизатор в направлении или маршрутизатор провайдера для deep.openna.com)

Internet = Untrusted net

rightnexthop = Mailgate (первый маршрутизатор в направлении или маршрутизатор провайдера для mail.openna.com)

right = Mail (mail.openna.com)

rightsubnet = SubnetMail (192.168.1.0/24)

SubnetDeep \ 192.168.1.0/24 / +--------------------+ | Deep \ 208.164.186.1 / +--------------------+ | Deepgate \ 205.151.222.250 / +--------------------+ | I N T E R N E T | Mailgate / 205.151.222.251 \ +-------------------+ | Mail / 208.164.186.2 \ +------------------+ | SubnetMail / 192.168.1.0/24 \ +-------------------+


SubnetDeep – это IP адрес вашей внутренней приватной сети за первым шлюзом. eth1 подсоединен в внутренней сети.

Deep – это IP адрес первого шлюза. eth0 подсоединен к Интернет.

Deepgate – это IP адрес первого маршрутизатора в направлении вашего второго шлюза (mail.openna.com) или маршрутизатора вашего провайдера.

INTERNET – небезопасная сеть.

Mailgate - это IP адрес второго маршрутизатора в направлении вашего первого шлюза (deep.openna.com) или маршрутизатора вашего провайдера.

Mail – это IP адрес второго шлюза. eth0 подсоединен к Интернет.

SubnetMail – это IP адрес вашей внутренней приватной сети за вторым шлюзом. eth1 подсоединен в внутренней сети.

Мы должны редактировать файл ipsec.conf (vi /etc/ipsec.conf) и изменить значения принятые по умолчанию на то, что нам нужно. Существует два типа секций в этом файле (/etc/ipsec.conf): секция “config”, которая определяет общую информацию для IPSEC, и секция “conn”, которая определяет параметры IPSEC соединений. Он не содержит информации связанной с безопасностью если не используется ручное снабжение ключами (напоминаем, ручное снабжение ключами не рекомендуется из соображений безопасности).

Секции первого типа, называемые config setup, является единственным разделом содержащим полные параметры установки для IPSEC, которые применяются ко всем соединениям, и информацию используемую при запуске программного обеспечения.

Второй тип, называемый conn, содержит технические требования сетевых соединений осуществляемых при помощи IPSEC. Имя данное этому разделу произвольно, и просто используется для идентификации соединений с ipsec_auto(8) и ipsec_manual(8).

# /etc/ipsec.conf – конфигурационный файл FreeS/WAN IPSEC # Более детальные и более разнообразные примеры конфигураций могут # быть найдены в doc/examples. # Общая конфигурация config setup interfaces="ipsec0=eth0" klipsdebug=none plutodebug=none plutoload=%search plutostart=%search # образцы соединений conn deep-mail left=208.164.186.1 leftsubnet=192.168.1.0/24 leftnexthop=205.151.222.250 right=208.164.186.2 rightsubnet=192.168.1.0/24 rightnexthop=205.151.222.251 keyingtries=0 auth=ah auto=start



где:

interfaces="ipsec0=eth0"

Эта опция определяет какие соответствующие виртуальные и физические интерфейсы используются для IPSEC. Установка по умолчанию, “interfaces=%defaultroute”, будет определять ваше соединение с Интернет или с вашей корпоративной сетью. Также, вы можете именовать один или больше интерфейсов для использования с FreeS/WAN. Например:

interfaces="ipsec0=eth0"

interfaces="ipsec0=eth0 ipsec1=ppp0"

Обе строки определяют интерфейс eth0 как ipsec0. Кроме того, вторая также устанавливает поддержку IPSEC через интерфейс PPP. Если установка по умолчанию “interfaces=%defaultroute” не используется, тогда заданный интерфейс будет только один – это шлюзовая машина, которая используется для обмена информации с другим IPSEC шлюзом.

klipsdebug=none

Эта опция определяет отладочный вывод для KLIPS (ядро кода IPSEC). Значение по умолчанию - none, означающее отсутствие вывода отладочной информации, all обозначает вывод всей отладочной информации.

plutodebug=none

Это опция определяет вывод отладочной информации для демона согласования ключей Pluto. Значения принимаемые этой опцией аналогичны klipsdebug.

plutoload=%search

Эта опция определяет какие соединения (по именам) загружаются автоматически в память, когда запускается Pluto. По умолчанию – none, значение %search загружает все соединения с auto=add или auto=start.

plutostart=%search

Эта опция определяет какие соединения (по именам) устанавливаются автоматически, когда запускается Pluto. По умолчанию – none, значение %search устанавливает все соединения с auto=start.

conn deep-mail

Эта опция задает имя, выступающее идентификатором соединения, которое может быть использовано IPSEC. Хорошим решением будет именовать соединения по их конечным точкам для предотвращения ошибок. Например, связь между deep.openna.com и mail.openna.com может быть названа "deep-mail", или связь между вашими офисам в Монреале и Париже - "montreal-paris". Заметим, что имя “deep-mail” или то, что вы выбрали в качестве имени должно совпадать на обоих шлюзах. Другими словами, единственным изменением, которое вы должны сделать в файле “/etc/ipsec.conf” на втором шлюзе должно быть изменение строки “interfaces=” на соответствующий интерфейс второго шлюза, использующего IPSEC соединение, если, конечно, это отличается от первого шлюза. Например, если интерфейс eth0 используется на обоих шлюзах для IPSEC, вам не нужно изменять строку “interfaces=” на втором шлюзе. С другой стороны, если первый шлюз использует eth0, а второй eth1, то вы должны изменить строку “interfaces=” на втором шлюзе на eth1.



left=208.164.186.1

Эта опция задает IP адрес внешнего интерфейса шлюза, используемого для общения с другим шлюзом.

leftsubnet=192.168.1.0/24

Эта опция определяет IP адрес приватной подсети находящейся за шлюзом.

leftnexthop=205.151.222.250

Эта опция определяет IP адрес первого маршрутизатора в требуемом направлении или маршрутизатора провайдера.

right=208.164.186.2

Это тоже, что и “left=”, но для правого пункта назначения.

rightsubnet=192.168.1.0/24

Это тоже, что и “leftsubnet=”, но для правого пункта назначения.

rightnexthop=205.151.222.251

Это тоже, что и “leftnexthop=”, но для правого пункта назначения.

keyingtries=0

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

auth=ah

Эта опция определяет должна ли аутентификация осуществляться независимо, используя AH (Authentication Header), или включается как часть ESP (Encapsulated Security Payload) сервиса. Это предпочтительно, когда IP заголовки незащищены для предотвращения атак типа man-in-the-middle.

auto=start

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

ЗАМЕЧАНИЕ. Несоответствие данных в этом конфигурационном файле “ipsec.conf” будет заставлять FreeS/WAN фиксировать различные сообщения об ошибках.


Настройка файла “/etc/ipsec.secrets”


В файле “ipsec.secrets” хранятся секреты используемые демоном pluto для установления подлинности передачи между шлюзами. Может быть настроено два типа секретов preshared секреты и приватные ключи RSA. Вы должны проверить, чтобы владельцем файла был “root” и только он должен иметь право доступа к файлу.

Шаг 1

Пример секрета поставляется в файле “ipsec.secrets” по умолчанию. Вы должны изменить его на свой собственный. С автоматической поддержкой ключей вы можете разделять секрет до 256 бит, которые затем используются во время обмена ключами, чтобы не происходили атаки man-in-the-middle.

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

[root@deep /]# ipsec ranbits 256 > temp

Сейчас будут созданы случайные ключи при помощи утилиты ranbits(8) в файл с именем “temp”. Утилита ranbits может приостанавливаться на несколько секунд если не было доступно немедленно достаточно энтропии.

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

Шаг 2

Сейчас, наш общий секретный ключ созданный в файле “temp”, мы должны положить в файл “/etc/ipsec.secrets”. Когда вы редактируете файл “ipsec.secrets” вы должны видеть нечто подобное в вашем текстовом редакторе. Каждая строка содержит IP адреса двух шлюзов и секрет:

# Этот файл хранит общий секрет, который сейчас используется только для # внутреннего механизма аутентификации Pluto. Смотрите страницу # руководства ipsec_pluto(8). Каждый секрет (немного упрощенный) для одной # пары договаривающихся хостов. Общий секрет это длинная и сложная для # угадывания произвольная символьная строка # Заметим, что все секреты должны быть заключены в кавычки, даже если они # не имеют в своем составе пробелов. 10.0.0.1 11.0.0.1 “jxVS1kVUTTulkVRRTnTujSm444jRuU1mlkklku2nkW3nnVuV2 WjjRRnulmlkmU1Run5VSnnRT"

Редактируйте файл ipsec.secrets (vi /etc/ipsec.secrets) и измените секретный ключ принятый по умолчанию:

10.0.0.1 11.0.0.1 "jxVS1kVUTTulkVRRTnTujSm444jRuU1mlkklku2nkW3nnVuV2WjjRRnulmlkmU1Run5VSnnRT"


Должен быть:

208.164.186.1 208.164.186.2 "0x9748cc31_2e99194f_d230589b_cd846b57_dc070b01_74b66f34_19c40a1a_804906ed"

где “208.164.186.1" и “208.164.186.2" IP адреса двух шлюзов и "0x9748cc31_2e99194f_d230589b_cd846b57_dc070b01_74b66f34_19c40a1a_8049 06ed" (кавычки обязательно нужны) – общий ключ, который мы создали командой “ipsec ranbits 256 > temp” в файле “temp”.

Шаг 3

Файлы “ipsec.conf” и “ipsec.secrets” должны быть скопированы на второй шлюз, так, чтобы они были идентичны на обоих концах. Только одно исключение может быть в секции с меткой config setup, где должен быть указан правильный интерфейс. Файл “ipsec.secrets” должен иметь абсолютно одинаковые секреты на обоих шлюзах.

ЗАМЕЧАНИЕ. Файл “/etc/ipsec.secrets” должен иметь права доступа rw------- (600) и его владельцем должен быть пользователь “root”. Файл “/etc/ipsec.conf” инсталлируется с правами rw-r--r— (644) и его владельцем также является суперпользователь “root”.


Настройка тайного секретного ключа RSA


Напомним, что сейчас FreeSWAN имеет два типа секретов: предварительно разделенные секреты и приватные ключи RSA. Предварительно разделенные секреты, которые настраиваются в наших файлах “ipsec.conf” и “ipsec.secrets”, мы рассмотрели выше. Некоторые люди предпочитают использовать приватные ключи RSA для аутентификации других хостов через Pluto демон. Если вы находитесь в этой ситуации, то надо будет сделать некоторые изменения в файлах “ipsec.conf” и “ipsec.secrets”, как описано ниже:

Вам нужно создать независимый RSA ключ для каждого шлюза. Каждый из них хранит этот ключ в своем файле “ipsec.secrets”, а публичный ключ перемещается в параметры “leftrsasigkey” и “rightrsasigkey” секции conn файла “ipsec.conf”, который одинаков для обоих шлюзах.

Шаг 1

Создайте независимый ключ RSA для каждого из шлюзов.

На первом шлюзе (например, deep) используйте команду:

[root@deep /]# cd /

[root@deep /]# ipsec rsasigkey --verbose 1024 > deep-keys

computing primes and modulus...

getting 64 random bytes from /dev/random

looking for a prime starting there

found it after 30 tries

getting 64 random bytes from /dev/random

looking for a prime starting there

found it after 230 tries

swapping primes so p is the larger

computing (p-1)*(q-1)...

computing d...

computing exp1, exp1, coeff...

output...

На втором шлюзе (например, mail) используйте команду:

[root@mail /]# cd /

[root@mail /]# ipsec rsasigkey --verbose 1024 > mail-keys

computing primes and modulus...

getting 64 random bytes from /dev/random

looking for a prime starting there

found it after 30 tries

getting 64 random bytes from /dev/random

looking for a prime starting there

found it after 230 tries

swapping primes so p is the larger

computing (p-1)*(q-1)...

computing d...

computing exp1, exp1, coeff...

output...

Утилита rsasigkey создает пару RSA ключей (публичный и приватный) из 1024- bit сигнатуры, и помещает их в файл deep-keys (mail-keys для второй команды на втором шлюзе). Приватный ключ может быть дословно вставлен в файл “ipsec.secrets”, а публичный ключ в файл “ipsec.conf”.


ЗАМЕЧАНИЕ. Утилита rsasigkey во время своей работы может остановиться на несколько секунд если ей не хватает энтропии. Вы можете добавить ее перемещая случайным образом мышь.

Временные файлы RSA “deep-keys” и “mail-keys” должны быть удалены, как только вы закончите работать с ними.

Шаг 2

Изменим ваш файл “/etc/ipsec.conf” для использования публичного ключа RSA на каждом шлюзе.

Редактируйте оригинальный файл ipsec.conf (vi /etc/ipsec.conf) и добавьте в него следующие параметры связанные с RSA в секцию conn на обоих шлюзах:

# образец соединения conn deep-mail left=208.164.186.1 leftsubnet=192.168.1.0/24 leftnexthop=205.151.222.250 right=208.164.186.2 rightsubnet=192.168.1.0/24 rightnexthop=205.151.222.251 keyingtries=0 auth=ah authby=rsasig leftrsasigkey=<Public key of deep>

rightrsasigkey=<Public key of mail>

auto=start

authby=rsasig

Этот параметр определяет как два шлюза безопасности должны устанавливать подлинность друг друга. Значение по умолчанию этого параметра - shared secrets. Мы должны определить rsasig для RSA, так как мы решили использовать цифровые подписи RSA.

leftrsasigkey=<Public key of deep>

Этот параметр определяет публичный ключ для RSA сигнатуры левого участника. В нашем примере, левый - 208.164.186.1, и представляет deep.openna.com, так что мы должны поместить публичный ключ RSA для deep в этой строке.

rightrsasigkey=<Public key of mail>

Этот параметр определяет публичный ключ для RSA сигнатуры правого участника. В нашем примере, правый - 208.164.186.2, и представляет mail.openna.com, , так что мы должны поместить публичный ключ RSA для mail в этой строке.

Мы можем найти публичный ключ для deep в файле “deep-keys”, а для mail в “mail-keys”. Эти файлы мы получили на первом шаге. Их содержимое выглядит следующим образов:

Ключи RSA для шлюза deep (deep-keys):

[root@deep /]# cd / [root@deep /]# vi deep-keys # 1024 bits, Fri Feb 4 05:05:19 2000 # for signatures only, UNSAFE FOR ENCRYPTION #pubkey=0x010395daee1be05f3038ae529ef2668afd79f5ff1b16203c9ceaef801cea9cb74bcfb51a6e cc08890d3eb4b5470c0fc35465c8ba2ce9d1145ff07b5427e04cf4a38ef98a7f29edcb4d7689f2da7a69199e 4318b4c8d0ea25d33e4f084186a2a54f4b4cec12cca1a5deac3b19d561c16a76bab772888f1fd71aa08f085 02a141b611f Modulus: 0x95daee1be05f3038ae529ef2668afd79f5ff1b16203c9ceaef801cea9cb74bcfb51a6ecc08890d3eb4b5470c0 fc35465c8ba2ce9d1145ff07b5427e04cf4a38ef98a7f29edcb4d7689f2da7a69199e4318b4c8d0ea25d33e4f0 84186a2a54f4b4cec12cca1a5deac3b19d561c16a76bab772888f1fd71aa08f08502a141b611f PublicExponent: 0x03 # everything after this point is secret PrivateExponent: 0x63e74967eaea2025c98c69f6ef0753a6a3ff6764157dbdf1f50013471324dd352366f48805b0b37f232384b2 b52ce2ee85d173468b62eaa052381a9588a317b3a1324d01a531a41fa7add6c5efbdd88f4718feed2bc0246b e924e81bb90f03e49ceedf7af0dd48f06f265b519600bd082c6e6bd27eaa71cc0288df1ecc3b062b Prime1: 0xc5b471a88b025dd09d4bd7b61840f20d182d9b75bb7c11eb4bd78312209e3aee7ebfe632304db6df5e211d 21af7fee79c5d45546bea3ccc7b744254f6f0b847f Prime2: 0xc20a99feeafe79767122409b693be75f15e1aef76d098ab12579624aec708e85e2c5dd62080c3a64363f2f4 5b0e96cb4aef8918ca333a326d3f6dc2c72b75361 Exponent1: 0x83cda11b0756e935be328fcebad5f6b36573bcf927a80bf2328facb6c0697c9eff2a9976cade79ea3ec0be16 74fff4512e8d8e2f29c2888524d818df9f5d02ff Exponent2: 0x815c66a9f1fefba44b6c2b124627ef94b9411f4f9e065c7618fb96dc9da05f03ec83e8ec055d7c42ced4ca2e7 5f0f3231f5061086ccd176f37f9e81da1cf8ceb Coefficient: 0x10d954c9e2b8d11f4db1b233ef37ff0a3cecfffad89ba5d515449b007803f577e3bd7f0183ceddfd805466d62f 767f3f5a5731a73875d30186520f1753a7e325



Ключи RSA для шлюза mail (mail-keys):

[root@mail /]# cd / [root@mail /]# vi mail-keys # 1024 bits, Fri Feb 4 04:46:59 2000 # for signatures only, UNSAFE FOR ENCRYPTION #pubkey=0x01037631b81f00d5e6f888c542d44dbb784cd3646f084ed96f942d341c7c4686cbd405b8 05dc728f8697475f11e8b1dd797550153a3f0d4ff0f2b274b70a2ebc88f073748d1c1c8821dc6be6a2f0064f 3be7f8e4549f8ab9af64944f829b014788dd202cf7d2e320cab666f5e7a197e64efe0bfee94e92ce4dad82d5 230c57b89edf Modulus: 0x7631b81f00d5e6f888c542d44dbb784cd3646f084ed96f942d341c7c4686cbd405b805dc728f8697475f11e8 b1dd797550153a3f0d4ff0f2b274b70a2ebc88f073748d1c1c8821dc6be6a2f0064f3be7f8e4549f8ab9af64944f 829b014788dd202cf7d2e320cab666f5e7a197e64efe0bfee94e92ce4dad82d5230c57b89edf PublicExponent: 0x03 # everything after this point is secret PrivateExponent: 0x4ecbd014ab3944a5b08381e2de7cfadde242f4b03490f50d737812fd8459dd3803d003e84c5faf0f84ea0bf0 7693a64e35637c2a08dff5f721a324b1747db09f62c871d5e11711251b845ae76753d4ef967c494b0def4f5d07 62f65da603bc04c41b4c6cab4c413a72c633b608267ae2889c162a3d5bc07ee083b1c6e038400b Prime1: 0xc7f7cc8feaaac65039c39333b878bffd8f95b0dc22995c553402a5b287f341012253e9f25b83983c936f6ca51 2926bebee3d5403bf9f4557206c6bbfd9aac899 Prime2: 0x975015cb603ac1d488dc876132d8bc83079435d2d3395c03d5386b5c004eadd4d7b01b3d86aad0a2275d2 d6b791a2abe50d7740b7725679811a32ca22db97637 Exponent1: 0x854fddb5471c84357bd7b777d0507ffe5fb92092c1bb92e37801c3cc5aa22b5616e29bf6e7ad1028624a486 e0c619d47f428e2ad2a6a2e3a159d9d2a911c85bb Exponent2: 0x64e00e87957c81385b3daf9621e5d302050d7937377b92ad38d04792aadf1e8de52012290471e06c1a3e1 e47a61171d435e4f807a4c39a6561177316c9264ecf Coefficient: 0x6f087591becddc210c2ee0480e30beeb25615a3615203cd3cef65e5a1d476fd9602ca0ef10d9b858edb22db 42c975fb71883a470b43433a7be57df7ace4a0a3f

Извлеките и скопируйте публичный RSA ключ для deep и mail в ваши файлы “ipsec.conf”, как это показано ниже. Вы можете определит строки связанные с публичным ключом как начинающиеся с закомментированной строки: “#pubkey=”.

# образец соединения conn deep-mail left=208.164.186.1 leftsubnet=192.168.1.0/24 leftnexthop=205.151.222.250 right=208.164.186.2 rightsubnet=192.168.1.0/24 rightnexthop=205.151.222.251 keyingtries=0 auth=ah authby=rsasig leftrsasigkey=0x010395daee1be05f3038ae529ef2668afd79f5ff1b16203c9ceaef801cea9cb74bcfb5 1a6ecc08890d3eb4b5470c0fc35465c8ba2ce9d1145ff07b5427e04cf4a38ef98a7f29edcb4d7689f2d a7a69199e4318b4c8d0ea25d33e4f084186a2a54f4b4cec12cca1a5deac3b19d561c16a76bab77288 8f1fd71aa08f08502a141b611f rightrsasigkey=0x01037631b81f00d5e6f888c542d44dbb784cd3646f084ed96f942d341c7c4686cbd 405b805dc728f8697475f11e8b1dd797550153a3f0d4ff0f2b274b70a2ebc88f073748d1c1c8821dc6b e6a2f0064f3be7f8e4549f8ab9af64944f829b014788dd202cf7d2e320cab666f5e7a197e64efe0bfee94 e92ce4dad82d5230c57b89edf auto=start



Не забудьте, что в нашем примере, параметр “leftrsasigkey=” содержит публичный ключ для и параметр “rightrsasigkey=” содержит публичный ключ для mail.

Шаг 3

Модифицируйте ваш файл “/etc/ipsec.secrets” для использования приватного ключа RSA на каждом шлюзе.

Редактируйте оригинальный файл ipsec.secrets (vi /etc/ipsec.secrets) и добавьте в него приватный ключ RSA для подтверждения подлинности обоих шлюзов:

Файл “ipsec.secrets” для шлюза deep:

[root@deep /]# vi /etc/ipsec.secrets 208.164.186.1 208.164.186.2 "0x9748cc31_2e99194f_d230589b_cd846b57_dc070b01_74b66f34_19c40a1a_804906ed"

Вы должны изменить ваш оригинальный файл “ipsec.secrets” как это показано ниже на обоих шлюзах. Важно заметить, что приватные ключи не совпадают на deep и mail. Приватный ключ для deep берем из файла “deep-keys”, а приватный ключ для mail из “mail-keys”:

208.164.186.1 208.164.186.2: RSA { Modulus: 0x95daee1be05f3038ae529ef2668afd79f5ff1b16203c9ceaef801cea9cb74bcfb51a6ecc08890d3eb4b5470c0 fc35465c8ba2ce9d1145ff07b5427e04cf4a38ef98a7f29edcb4d7689f2da7a69199e4318b4c8d0ea25d33e4f0 84186a2a54f4b4cec12cca1a5deac3b19d561c16a76bab772888f1fd71aa08f08502a141b611f PublicExponent: 0x03 # everything after this point is secret PrivateExponent: 0x63e74967eaea2025c98c69f6ef0753a6a3ff6764157dbdf1f50013471324dd352366f48805b0b37f232384b2 b52ce2ee85d173468b62eaa052381a9588a317b3a1324d01a531a41fa7add6c5efbdd88f4718feed2bc0246b e924e81bb90f03e49ceedf7af0dd48f06f265b519600bd082c6e6bd27eaa71cc0288df1ecc3b062b Prime1: 0xc5b471a88b025dd09d4bd7b61840f20d182d9b75bb7c11eb4bd78312209e3aee7ebfe632304db6df5e211d 21af7fee79c5d45546bea3ccc7b744254f6f0b847f Prime2: 0xc20a99feeafe79767122409b693be75f15e1aef76d098ab12579624aec708e85e2c5dd62080c3a64363f2f4 5b0e96cb4aef8918ca333a326d3f6dc2c72b75361 Exponent1: 0x83cda11b0756e935be328fcebad5f6b36573bcf927a80bf2328facb6c0697c9eff2a9976cade79ea3ec0be16 74fff4512e8d8e2f29c2888524d818df9f5d02ff Exponent2: 0x815c66a9f1fefba44b6c2b124627ef94b9411f4f9e065c7618fb96dc9da05f03ec83e8ec055d7c42ced4ca2e7 5f0f3231f5061086ccd176f37f9e81da1cf8ceb Coefficient: 0x10d954c9e2b8d11f4db1b233ef37ff0a3cecfffad89ba5d515449b007803f577e3bd7f0183ceddfd805466d62f 767f3f5a5731a73875d30186520f1753a7e325 }



Файл “ipsec.secrets” для шлюза mail:

[root@mail /]# vi /etc/ipsec.secrets 208.164.186.1 208.164.186.2: RSA { Modulus: 0x95daee1be05f3038ae529ef2668afd79f5ff1b16203c9ceaef801cea9cb74bcfb51a6ecc08890d3eb4b5470c0 fc35465c8ba2ce9d1145ff07b5427e04cf4a38ef98a7f29edcb4d7689f2da7a69199e4318b4c8d0ea25d33e4f0 84186a2a54f4b4cec12cca1a5deac3b19d561c16a76bab772888f1fd71aa08f08502a141b611f PublicExponent: 0x03 # everything after this point is secret PrivateExponent: 0x63e74967eaea2025c98c69f6ef0753a6a3ff6764157dbdf1f50013471324dd352366f48805b0b37f232384b2 b52ce2ee85d173468b62eaa052381a9588a317b3a1324d01a531a41fa7add6c5efbdd88f4718feed2bc0246b e924e81bb90f03e49ceedf7af0dd48f06f265b519600bd082c6e6bd27eaa71cc0288df1ecc3b062b Prime1: 0xc5b471a88b025dd09d4bd7b61840f20d182d9b75bb7c11eb4bd78312209e3aee7ebfe632304db6df5e211d 21af7fee79c5d45546bea3ccc7b744254f6f0b847f Prime2: 0xc20a99feeafe79767122409b693be75f15e1aef76d098ab12579624aec708e85e2c5dd62080c3a64363f2f4 5b0e96cb4aef8918ca333a326d3f6dc2c72b75361 Exponent1: 0x83cda11b0756e935be328fcebad5f6b36573bcf927a80bf2328facb6c0697c9eff2a9976cade79ea3ec0be16 74fff4512e8d8e2f29c2888524d818df9f5d02ff Exponent2: 0x815c66a9f1fefba44b6c2b124627ef94b9411f4f9e065c7618fb96dc9da05f03ec83e8ec055d7c42ced4ca2e7 5f0f3231f5061086ccd176f37f9e81da1cf8ceb Coefficient: 0x10d954c9e2b8d11f4db1b233ef37ff0a3cecfffad89ba5d515449b007803f577e3bd7f0183ceddfd805466d62f 767f3f5a5731a73875d30186520f1753a7e325 }

Аутентификация с использованием RSA сигнатур требует, чтобы каждый хост имел собственный приватный ключ. Начальная часть ключа может содержать признак, характеризующий тип ключа. “RSA” обозначает приватный ключ RSA и “PSK” (который принят по умолчанию) обозначает PreShared ключ. Так как “PSK” принимается по умолчанию, мы должны задать “RSA”, определяя использования приватного ключа RSA в этом файле (ipsec.secrets). Только суперпользователь “root” должен владеть файлом “ipsec.secrets”, и для всех остальных любой доступ к нему должен быть заблокирован.


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


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

Создания вашего сертификационного сервера.

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

Безопасность электронных коммерческих транзакций.



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


[root@deep /]# cd /var/tmp

[root@deep tmp]# rm -rf openssl-version/ openssl-version.tar.gz

Команды “rm” будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции OpenSSL. Также будет удален сжатый архив OpenSSL из каталога “/var/tmp”.



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


Сделайте ваши ключи “Для чтения и записи” только для пользователя root. Это важно, потому что никому не нужно работать к ним. Для этого выполните следующие команды.

[root@deep /]# chmod 600 /etc/ssl/certs/ca.crt

[root@deep /]# chmod 600 /etc/ssl/certs/server.crt

[root@deep /]# chmod 600 /etc/ssl/private/ca.key

[root@deep /]# chmod 600 /etc/ssl/private/server.key



Переконфигурирование и инсталляция ядра с поддержкой FreeS/WAN VPN


Сейчас, мы должны вернуться в каталог “/usr/src/linux” и выполнить следующие команды для реконфигурирования ядра с поддержкой FreeS/WAN:

[root@deep freeswan-1.3]# cd /usr/src/linux

[root@deep linux]# make config

Первое, что надо сделать – это включить поддержку FreeS/WAN в ядре. В версии 2.2.14 ядра, новая секция, связанная с frees/WAN VPN, называется “IPSec options (FreeS/WAN)”. Вам нужно ответить Y на следующие вопросы.

IPSec options (FreeS/WAN)

IP Security Protocol (FreeS/WAN IPSEC) (CONFIG_IPSEC) [Y/n/?]

IPSEC: IP-in-IP encapsulation (CONFIG_IPSEC_IPIP) [Y/n/?]

IPSEC: PF_KEYv2 kernel/user interface (CONFIG_IPSEC_PFKEYv2) [Y/n/?]

IPSEC: Enable ICMP PMTU messages (CONFIG_IPSEC_ICMP) [Y/n/?]

IPSEC: Authentication Header (CONFIG_IPSEC_AH) [Y/n/?]

HMAC-MD5 authentication algorithm (CONFIG_IPSEC_AUTH_HMAC_MD5) [Y/n/?]

HMAC-SHA1 authentication algorithm (CONFIG_IPSEC_AUTH_HMAC_SHA1) [Y/n/?]

IPSEC: Encapsulating Security Payload (CONFIG_IPSEC_ESP) [Y/n/?]

3DES encryption algorithm (CONFIG_IPSEC_ENC_3DES) [Y/n/?]

IPSEC Debugging Option (DEBUG_IPSEC) [Y/n/?]

ЗАМЕЧАНИЕ. Все настройки, которые вы сделали в различных секциях ядра до первого запуска команд “make config”, “make dep” и “make clean” будут сохранены. Поэтому необходимо настроить только раздел “IPSec options (FreeS/WAN)” так, как это описано выше.

Некоторые параметры настройки сети включаются автоматически, даже если вы выключили их. Это связано с тем, что IPSEC нуждается в них. Какой бы ни была программа конфигурирования ядра, вы должны обратить внимание на некоторые проблемы. В частности, проверьте чтобы не были отключены следующие опции из секции “Сетевые опции”:

Kernel/User netlink socket (CONFIG_NETLINK) [Y/n/?]

Netlink device emulation (CONFIG_NETLINK_DEV) [Y/n/?]

Компиляция и инсталляция нового ядра с поддержкой FreeS/WAN

Сейчас мы включили поддержку FreeS/WAN VPN в ядре и мы можем его компилировать и инсталлировать.

Возвращаемся в каталог “/usr/src/linux” и запускаем следующие команды:

[root@deep linux]# make dep; make clean; make bzImage

После окончания их работы, следуйте за инструкциями, приведенными в главе 5 “Конфигурирование и создание безопасного и оптимизированного ядра” для нормальной инсталляции нового ядра. После того, как вы проинсталлируете новый образ ядра, system.map, модули (если нужно) и определите в файл lilo.conf загрузку нового ядра, нужно редактировать и настроить конфигурационные файлы связанные с FreeS/WAN “ipsec.conf” и “ipsec.secrets” перед перезагрузкой системы.



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


Инсталляция 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.



Создание программы “/usr/bin/sign.sh”


Команда “openssl ca” имеет некоторые странные требования и конфигурация OpenSSL по умолчанию не позволяет легко использовать ее напрямую. Поэтому мы будем создавать программу “sign.sh”, заменяющую собой “openssl ca”.

Создайте программный файл sign.sh (touch /usr/bin/sign.sh) и добавьте в него следующие строки:

#!/bin/sh ## ## sign.sh -- Sign a SSL Certificate Request (CSR) ## Copyright (c) 1998-1999 Ralf S. Engelschall, All Rights Reserved. ## # argument line handling CSR=$1 if [ $# -ne 1 ]; then echo "Usage: sign.sign <whatever>.csr"; exit 1 fi if [ ! -f $CSR ]; then echo "CSR not found: $CSR"; exit 1 fi case $CSR in *.csr ) CERT="`echo $CSR | sed -e 's/\.csr/.crt/'`" ;; * ) CERT="$CSR.crt" ;; esac # make sure environment exists if [ ! -d ca.db.certs ]; then mkdir ca.db.certs fi if [ ! -f ca.db.serial ]; then echo '01' >ca.db.serial fi if [ ! -f ca.db.index ]; then cp /dev/null ca.db.index fi # create an own SSLeay config cat >ca.config <<EOT [ ca ] default_ca = CA_own [ CA_own ] dir = /etc/ssl certs = /etc/ssl/certs new_certs_dir = /etc/ssl/ca.db.certs database = /etc/ssl/ca.db.index serial = /etc/ssl/ca.db.serial RANDFILE = /etc/ssl/ca.db.rand certificate = /etc/ssl/certs/ca.crt private_key = /etc/ssl/private/ca.key default_days = 365 default_crl_days = 30 default_md = md5 preserve = no policy = policy_anything [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional EOT # sign the certificate echo "CA signing: $CSR -> $CERT:" openssl ca -config ca.config -out $CERT -infiles $CSR echo "CA verifying: $CERT <-> CA cert" openssl verify -CAfile /etc/ssl/certs/ca.crt $CERT # cleanup after SSLeay rm -f ca.config rm -f ca.db.serial.old rm -f ca.db.index.old # die gracefully exit 0

Сейчас, сделаем эту программу исполняемой и изменим права доступа принятые по умолчанию:

[root@deep /]# chmod 755 /usr/bin/sign.sh

ЗАМЕЧАНИЕ. Вы можете найти прогамму “sign.sh” в дистрибутиве mod_ssl в каталоге “mod_ssl-version/pkg.contrib/” или в нашем архиве floppy.tgz. Также заметим, что секция [CA_own] должна быть изменена в соответствии с вашим окружением и не забудьте изменит строку ”openssl verify –Cafile /etc/ssl/certs/ca.crt $CERT”.



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


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

$ man 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



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


> /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



Клиент Netscape Address Book для LDAP


Если вы имеете Netscape проинсталлированный на вашей Linux системе или любой другой операционной системе, то вы можете использовать его возможности Address Book для доступа к серверу каталогов LDAP, только что установленной на вашем Linux и запросить ваш сервер каталогов об информации подобной той, что вы получали используя команду “ldapsearch”. Если вы интересуетесь как сделать это, то следуйте по шагам описанным ниже:

Открыть Netscape Communicator

Перейти в меню Communicator

Открыть Address Book

Перейти в меню File

Кликнуть на New Directory …

Заполнить поля вашей информацией о сервере

Например:

Описание: Open Network Architecture

LDAP сервер: 208.164.186.3

Корень сервера: o=openna, c=com

Сейчас вы сделаи все, что нужно, чтобы иметь возможность создавать запросы к вашему серверу каталогов LDAP на Linux, используя блок с именем “Show names Containing:” для запуска поиска и кликните на кнопке “Search For:” для получения результатов.




Команды


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

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

[root@deep /]# su postgres

[postgres@deep /]$ createuser

Enter name of user to add ---> admin

Enter user's postgres ID or RETURN to use unix user ID: 500 ->

Is user "admin" allowed to create databases (y/n) y

Is user "admin" a superuser? (y/n) y

createuser: admin was successfully added

Для удаления пользователя из базы данных используйте утилиту destroyuser:

[root@deep /]# su postgres

[postgres@deep /]$ destroyuser

Enter name of user to delete ---> admin

destroyuser: delete of user admin was successful.

Для создания новой базы данных запустите утилиту createdb:

[root@deep /]# su postgres [postgres@deep /]$ createdb dbname (dbname - это имя создаваемой базы данных).

Или из терминальной программы Postgres (psql)

[root@deep /]# su admin

[admin@deep /]$ psql template1

Welcome to the POSTGRESQL interactive sql monitor:

Please read the file COPYRIGHT for copyright terms of POSTGRESQL

[PostgreSQL 6.5.3 on i686-pc-linux-gnu, compiled by egcs ]

type \? for help on slash commands

type \q to quit

type \g or terminate with semicolon to execute query

You are currently connected to the database: template1

template1 _ > create database foo;

CREATEDB

ЗАМЕЧАНИЕ. Клиентское соединение должно быть разрешено с этого IP адреса и/или имени пользователя в файле “pg_hba.conf”, расположенного в PG_DATA.

Другие полезные команды, выполняемые в терминальной программе Postgres (psql):

Соединение с новой базой данных:

template1 _ > \c foo

connecting to new database: foo

foo _ >

Создание таблицы:

foo _ > create table bar (i int4, c char(16)); CREATE foo _ >

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

foo _ > \d bar Table = bar +----------------------------------+----------------------------------+------------+ | Field | Type | Length | +----------------------------------+----------------------------------+------------+ | I | int4 | 4 | | c | char() | 16 | +----------------------------------+----------------------------------+------------+ foo _ >

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

foo _ > drop table table_name;

foo _ > drop index index_name;

foo _ > drop view view_name;

Для вставки данных в: (таблица уже должна быть создана) foo _ > insert into table_name (name_of_attr1, name_of_attr2, name_of_attr3)

foo _ > values (value1, value2, value3);



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


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

Шаг 1

Важно заметить, что вы можете настроить три различных вида баз данных на использование с LDAP. Высокопроизводительная, с памятью на диске база данных “LDBM”; интерфейс базы данных к произвольным UNIX командам или shell скриптам, называемый “SHELL”; и простейшая база данных используемая в файле паролей “PASSWD”.

По умолчанию OpenLDAP подразумевает использование базы данных LDBM,так что если вы хотите настроиться на другой тип базы данных, вы должны при инсталляции определить ее. Для SHELL вы должны добавить опцию “--enable-shell”, а для PASSWD (используется как замена сервису NIS) - “--enable-passwd”.

CC="egcs" \

CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-pointer -fno-exceptions -D_REENTRANT" \

./configure \

--prefix=/usr \

--libexecdir=/usr/sbin \

--localstatedir=/var/run \

--sysconfdir=/etc \

--enable-dns \

--enable-shared \

--with-gnu-ld \

--disable-debug

Эти опции настраивают OpenLDAP на следующее:

включить поддержку dns.

создавать совместно используемые библиотеки.

предполагаем, что компилятор C использует GNU ld.

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

Шаг 2

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

[root@deep openldap-1.2.10]# make depend

[root@deep openldap-1.2.10]# make

[root@deep openldap-1.2.10]# cd tests/

[root@deep tests]# make

[root@deep tests]# cd ..

[root@deep openldap-1.2.10]# make install

Команда "make depend" будет создавать необходимые зависимости для различных файлов, “make” компилирует все файлы с исходными кодами в исполняемые двоичные файлы и затем “make install” инсталлирует исполняемые файлы и файлы поддержки в необходимые каталоги. Команда “make” в подкаталоге “/test” будет делать некоторые важные тесты для проверки функциональности вашего LDAP сервера перед инсталляцией. Если некоторые тесты закончатся ошибкой, вам необходимо исправить их перед продолжением инсталляции.


[root@deep openldap-1.2.10]# install -d -m 700 /var/ldap

[root@deep openldap-1.2.10]# echo localhost > /etc/openldap/ldapserver

[root@deep openldap-1.2.10]# strip /usr/lib/liblber.so.1.0.0

[root@deep openldap-1.2.10]# strip /usr/lib/libldap.so.1.0.0

[root@deep openldap-1.2.10]# strip /usr/lib/libldap.a

[root@deep openldap-1.2.10]# strip /usr/lib/liblber.a

[root@deep openldap-1.2.10]# strip /usr/sbin/in.xfingerd

[root@deep openldap-1.2.10]# strip /usr/sbin/go500

[root@deep openldap-1.2.10]# strip /usr/sbin/go500gw

[root@deep openldap-1.2.10]# strip /usr/sbin/mail500

[root@deep openldap-1.2.10]# strip /usr/sbin/rp500

[root@deep openldap-1.2.10]# strip /usr/sbin/rcpt500

[root@deep openldap-1.2.10]# strip /usr/sbin/fax500

[root@deep openldap-1.2.10]# strip /usr/sbin/slapd

[root@deep openldap-1.2.10]# strip /usr/sbin/slurpd

[root@deep openldap-1.2.10]# strip /usr/sbin/ldif

[root@deep openldap-1.2.10]# strip /usr/sbin/ldif2ldbm

[root@deep openldap-1.2.10]# strip /usr/sbin/ldif2index

[root@deep openldap-1.2.10]# strip /usr/sbin/ldif2id2entry

[root@deep openldap-1.2.10]# strip /usr/sbin/ldif2id2children

[root@deep openldap-1.2.10]# strip /usr/sbin/ldbmcat

[root@deep openldap-1.2.10]# strip /usr/sbin/ldbmtest

[root@deep openldap-1.2.10]# strip /usr/sbin/centipede

[root@deep openldap-1.2.10]# strip /usr/bin/ud

[root@deep openldap-1.2.10]# strip /usr/bin/ldapadd

[root@deep openldap-1.2.10]# strip /usr/bin/ldapsearch

[root@deep openldap-1.2.10]# strip /usr/bin/ldapmodify

[root@deep openldap-1.2.10]# strip /usr/bin/ldapmodrdn

[root@deep openldap-1.2.10]# strip /usr/bin/ldappasswd

[root@deep openldap-1.2.10]# strip /usr/bin/ldapdelete

Команда “install” будет создавать новый каталог с именем “ldap” в каталоге “/var” и установит режим доступа к нему чтение, запись и исполнение только для суперпользователя “root” (700) из соображений безопасности. Команда “strip” будет удалять все символы из объектных файлов. Это необходимо, чтобы сделать исполняемые файлы меньшего размера.

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

[root@deep /]# cd /var/tmp

[root@deep tmp]# rm -rf openldap-version/ openldap-version.tgz

Команды “rm” будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции OpenLDAP. Также будет удален сжатый архив OpenLDAP из каталога “/var/tmp”.



[root@deep postgresql-6.5.3]# mv /usr/include/os.h /usr/include/pgsql/

[root@deep postgresql-6.5.3]# mv /usr/include/config.h /usr/include/pgsql/

[root@deep postgresql-6.5.3]# mv /usr/include/c.h /usr/include/pgsql/

[root@deep postgresql-6.5.3]# mv /usr/include/postgres.h /usr/include/pgsql/

[root@deep postgresql-6.5.3]# mv /usr/include/postgres_ext.h /usr/include/pgsql/

[root@deep postgresql-6.5.3]# mv /usr/include/libpq-fe.h /usr/include/pgsql/

[root@deep postgresql-6.5.3]# mv /usr/include/libpq-int.h /usr/include/pgsql/

[root@deep postgresql-6.5.3]# mv /usr/include/ecpgerrno.h /usr/include/pgsql/

[root@deep postgresql-6.5.3]# mv /usr/include/ecpglib.h /usr/include/pgsql/

[root@deep postgresql-6.5.3]# mv /usr/include/ecpgtype.h /usr/include/pgsql/

[root@deep postgresql-6.5.3]# mv /usr/include/sqlca.h /usr/include/pgsql/

[root@deep postgresql-6.5.3]# mv /usr/include/libpq++.H /usr/include/pgsql/

[root@deep postgresql-6.5.3]# mkdir -p /usr/lib/pgsql

[root@deep postgresql-6.5.3]# mv /usr/lib/*source /usr/lib/pgsql/

[root@deep postgresql-6.5.3]# mv /usr/lib/*sample /usr/lib/pgsql/

[root@deep postgresql-6.5.3]# mkdir -p /var/lib/pgsql

[root@deep postgresql-6.5.3]# chown -R postgres.postgres /var/lib/pgsql/

[root@deep postgresql-6.5.3]# chmod 755 /usr/lib/libpq.so.2.0

[root@deep postgresql-6.5.3]# chmod 755 /usr/lib/libecpg.so.3.0.0

[root@deep postgresql-6.5.3]# chmod 755 /usr/lib/libpq++.so.3.0

[root@deep postgresql-6.5.3]# strip /usr/bin/postgres

[root@deep postgresql-6.5.3]# strip /usr/bin/postmaster

[root@deep postgresql-6.5.3]# strip /usr/bin/ecpg

[root@deep postgresql-6.5.3]# strip /usr/bin/pg_id

[root@deep postgresql-6.5.3]# strip /usr/bin/pg_version

[root@deep postgresql-6.5.3]# strip /usr/bin/pg_dump

[root@deep postgresql-6.5.3]# strip /usr/bin/pg_passwd

[root@deep postgresql-6.5.3]# strip /usr/bin/psql

[root@deep postgresql-6.5.3]# rm -f /usr/lib/global1.description

[root@deep postgresql-6.5.3]# rm -f /usr/lib/local1_template1.description

Команда “make” компилирует все исходные файлы в исполняемые двоичные файлы и команды “make install” инсталлирует исполняемые и все сопутствующие файлы в необходимое место. “mkdir” создаст новый каталог “pgsql” в каталогах “/usr/include” и “/usr/lib”, и затем мы переместим все подкаталоги и файлы, связанные с PostgreSQL из каталогов “/usr/include” и “/usr/lib” в “/usr/include/pgsql” и “/usr/lib/pgsql” соответственно. Команда "chown" установит правильного владельца и группу для каталога “/var/lib/pgsql”. Команда “strip” удалит все символы из объектных файлов. Это приведет к уменьшению размеров соответствующих файлов, что улучшит производительность программ. Команда “rm” удалит файлы “global1.description” и ”local1_template1.description”, которые не нужны программе PosgreSQL.


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


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

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

Копируйте файл slapd.conf в каталог “/etc/openldap/”.

Копируйте файл ldap в каталог “/etc/rc.d/init.d/”.

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



Конфигурация файла “/etc/ldap/slapd.conf”


Файл “/etc/openldap/slapd.conf” это основной конфигурационный файл для автономного LDAP демона. Все опции: права доступа, пароль, тип базы данных, месторасположение базы данных и прочие могут быть настроены в нем и применены к демону “slapd”. Нижеприведенный пример настраивает файл “slapd.conf” на использование базы данных LDBM.

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

# # Смотрите slapd.conf(5) для деталей о конфигурационных опциях. # Этот файл не должен быть доступен для чтения всем пользователям. # include /etc/openldap/slapd.at.conf include /etc/openldap/slapd.oc.conf schemacheck off #referral ldap://ldap.itd.umich.edu pidfile /var/run/slapd.pid argsfile /var/run/slapd.args ##################################################################### ## # определения базы данных ldbm ##################################################################### ## database ldbm suffix "o=openna, c=com" directory /var/ldap rootdn "cn=admin, o=openna, c=com" rootpw secret # избегайте использование пароля записанного открытым текстом, особенно # для пользователя rootdn. Смотрите slapd.conf(5) для деталей. # определение индексируемых атрибутов ldbm index cn,sn,uid index objectclass pres,eq index default none # определение прав доступа к ldbm defaultaccess read access to attr=userpassword by self write by dn="cn=admin, o=openna, c=com" write by * compare

Вы должны убедиться, что установили следующие опции в вашем файле “slapd.conf” перед запуском демона slapd:

suffix “o=openna, c=com”

Эта опция определяет DN (отличительное имя) корня поддерева, которое вы пытаетесь создать. Другими словами, это показывает какие элементы должны храниться в этой базе данных.

directory /var/ldap

Эта опция определяет каталог, где должны размещаться база данных и соответствующие индексные файлы LDAP. Мы должны установить этот параметр в “/var/ldap”, потому что мы создали этот каталог на более ранней стадии инсталляции специально для этих целей.


rootdn "cn=admin, o=openna, c=com"

Эта опция определяет DN ( отличительное имя) элемента, которому разрешено делать все, что угодно в каталоге LDAP. Имя введенное здесь может фактически не существовать в файле “/etc/passwd”.

rootpw secret

Эта опция определяет пароль, который может использоваться для аутентификации элемента "super-user" базы данных. Это пароль для опции rootdn определенной выше. Важно не использовать пароли, записанные открытым текстом, а использовать вместо них шифрованные пароли.

index cn,sn,uid | index objectclass pres,eq | index default none

Эти опции определяет индексные определения, которые вы хотите создать и управлять в определении базы данных. Параметры, которые мы определили в нашем “slapd.conf” файле, указывают поддерживать индексы для атрибутов cn, sn и uid (index cn,sn,uid), индексы наличия и эквивалентности для атрибута objectclass (index objectclass pres,eq), и не создавать индексы для всех остальных атрибутов (index default none). Смотрите руководство пользователя для большей информации.

Последние опции в файле “slapd.conf” связаны с контролем доступа к каталогу LDAP.

defaultaccess read access to attr=userpassword by self write by dn="cn=admin, o=openna, c=com" write by * compare

Этот пример применяется для элементов в поддереве "o=openna, c=com". Доступ на чтение разрешается всем, и сам элемент может записывать все свои атрибуты, исключая userpassword. Атрибут userpassword может быть записан только определенным элементом (admin), и сопоставим всеми. Смотрите ваше руководство пользователя для получения большей информации.


Конфигурация скрипта “/etc/rc.d/init.d/ldap”


Настроим ваш скрипт “/etc/rc.d/init.d/ldap” для старта и остановки LDAP сервера. Создайте скрипт ldap (touch /etc/rc.d/init.d/ldap) и добавьте в него:

#!/bin/sh # # ldap Это shell скрипт script заботящийся о запуске и остановке # сервера ldap (slapd и slurpd). # # chkconfig: - 70 40 # описание: LDAP (Lightweight Directory Access Protocol) используется # для реализации индустриального стандарта службы каталогов. # имя процесса: slapd # конфигурационный файл: /etc/openldap/slapd.conf # pid файл: /var/run/slapd.pid # библиотека исходных функций. . /etc/rc.d/init.d/functions # Исходная сетевая конфигурация. . /etc/sysconfig/network # Проверка, что сеть работает. [ ${NETWORKING} = "no" ] && exit 0 [ -f /usr/sbin/slapd ] exit 0 [ -f /usr/sbin/slurpd ] exit 0 RETVAL=0 # See how we were called. case "$1" in start) # Запуск демонов. echo -n "Starting ldap: " daemon slapd RETVAL=$? if [ $RETVAL -eq 0 ]; then if grep -q "^replogfile" /etc/openldap/slapd.conf; then daemon slurpd RETVAL=$? [ $RETVAL -eq 0 ] && pidof slurpd | cut -f 1 -d " " > /var/run/slurpd fi fi echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/ldap ;; stop) # Остановка демонов. echo -n "Shutting down ldap: " killproc slapd RETVAL=$? if [ $RETVAL -eq 0 ]; then if grep -q "^replogfile" /etc/openldap/slapd.conf; then killproc slurpd RETVAL=$? fi fi echo if [ $RETVAL -eq 0 ]; then rm -f /var/lock/subsys/ldap rm -f /var/run/slapd.args fi ;; status) status slapd RETVAL=$? if [ $RETVAL -eq 0 ]; then if grep -q "^replogfile" /etc/openldap/slapd.conf; then status slurpd RETVAL=$? fi fi ;; restart) $0 stop $0 start RETVAL=$? ;; reload) killproc -HUP slapd RETVAL=$? if [ $RETVAL -eq 0 ]; then if grep -q "^replogfile" /etc/openldap/slapd.conf; then killproc -HUP slurpd RETVAL=$? fi fi ;; *) echo "Usage: $0 start|stop|restart|status}" exit 1 esac exit $RETVAL

Сейчас, сделаем этот скрипт исполняемым и изменим права доступа:

[root@deep /]# chmod 700 /etc/rc.d/init.d/ldap

Создадим символическую rc.d ссылку для OpenLDAP командой:

[root@deep /]# chkconfig --add ldap

Скрипт OpenLDAP не будет автоматически стартовать демон slapd, когда вы перезагружаете сервер. Вы можете изменить это выполнив команду:

[root@deep /]# chkconfig --level 345 ldap on

Запустите сервер OpenLDAP вручную следующей командой:

[root@deep /]# /etc/rc.d/init.d/ldap start Starting ldap: [ OK ]



Конфигурация скрипта “/etc/rc.d/init.d/postgresql”


Настроим скрипт “/etc/rc.d/init.d/postgresql”, который будет отвечать за запуск и остановку PostgreSQL сервера.

Создадим скрипт postgresql (touch /etc/rc.d/init.d/postgresql) и добавьте в него следующие строки:

#! /bin/sh # postgresql Это инициализационный скрипт для запуска PostgreSQL сервера # # chkconfig: 345 85 15 # описание: запуск и остановка демона PostgreSQL, отвечающего за обработку # всех запросов к базе данных. # имя процесса: postmaster # pid файл: /var/run/postmaster.pid # # библиотека исходных функций. . /etc/rc.d/init.d/functions # Get config. . /etc/sysconfig/network # Поверка работает ли сеть. # это нужно для postmaster. [ ${NETWORKING} = "no" ] && exit 0 [ -f /usr/bin/postmaster ] exit 0 # Этот скрипт немного необычен тем, что имя демона (postmaster) # не совпадает с именем подсистемы (postgresql) # Смотрите, как мы осуществляем вызов. case "$1" in start) echo -n "Checking postgresql installation: " # Проверка структуры PGDATA if [ -f /var/lib/pgsql/PG_VERSION ] && [ -d /var/lib/pgsql/base/template1 ] then # Проверка версии существующие PGDATA if [ `cat /var/lib/pgsql/PG_VERSION` != '6.5' ] then echo "old version. Need to Upgrade." echo "See /usr/doc/postgresql-6.5.2/README.rpm for more information." exit 1 else echo "looks good!" fi # PGDATAне существуе! Нужно выполнить Initdb. else echo "no database files found." if [ ! -d /var/lib/pgsql ] then mkdir -p /var/lib/pgsql chown postgres.postgres /var/lib/pgsql fi su -l postgres -c '/usr/bin/initdb --pglib=/usr/lib/pgsql --pgdata=/var/lib/pgsql' fi # Проверка, запущен ли уже postmaster... pid=`pidof postmaster` if [ $pid ] then echo "Postmaster already running." else # все системы запущены – удаление старых блокирующих файлов rm -f /tmp/.s.PGSQL.* > /dev/null echo -n "Starting postgresql service: " su -l postgres -c '/usr/bin/postmaster -i -S -D/var/lib/pgsql' sleep 1 pid=`pidof postmaster` if [ $pid ] then echo -n "postmaster [$pid]" touch /var/lock/subsys/postgresql echo $pid > /var/run/postmaster.pid echo else echo "failed." fi fi ;; stop) echo -n "Stopping postgresql service: " killproc postmaster sleep 2 rm -f /var/run/postmaster.pid rm -f /var/lock/subsys/postgresql echo ;; status) status postmaster ;; restart) $0 stop $0 start ;; *) echo "Usage: postgresql {start|stop|status|restart}" exit 1 esac exit 0

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

[root@deep /]# chmod 700 /etc/rc.d/init.d/postgresql

Создайте символическую rc.d ссылку для PostgreSQL следующей командой:

[root@deep /]# chkconfig --add postgresql

Запустите ваш новый PostgreSQL сервер вручную следующей командой:

[root@deep /]# /etc/rc.d/init.d/postgresql start Checking postgresql installation: looks good! Starting postgresql service: postmaster [22401]



Linux OpenLDAP сервер


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

Если мы говорим в этой книге о безопасности и оптимизации, то почему вдруг возникает глава посвященная OpenLDAP? Сервер каталогов OpenLDAP расширит ваши горизонты за счет использования его возможностей. Мы можем использовать ее возможности дублирования для централизации и объединения различной информации на одном сервере для всех других серверов нашей сети. Представьте себе возможности добавления и отключения учетных записей Unix или NT, установка доступа к Веб серверу для служебного использования, добавление почтовых адресов и псевдонимов, все с единственной операцией доступной как NIS сервис, с добавлением возможности SSL шифрования и скоростью объектно-ориентированных иерархий. Другое интересное использование – это создание надежного списка разработчиков на одном или более LDAP серверов, доступ к которому может быть открыт из приватной сети или из Интернет.

Как сказано на веб сервере OpenLDAP:

LDAP (Lightweight Directory Access Protocol) – это открытый протокол для доступа к информационным сервисам. Он работает через транспортные протоколы Интернет, такие как TCP, и может быть использован для доступа к автономным серверам каталогов или каталогам X.500.



Эти инструкции предполагают.

Unix-совместимые команды.

Путь к исходным кодам “/var/tmp” (возможны другие варианты).

Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.

Все шаги инсталляции осуществляются суперпользователем “root”.

OpenLDAP версии 1.2.10

Пакеты.

Домашняя страница OpenLDAP:

FTP сервер OpenLDAP:

Вы должны скачать: openldap-1.2.10.tgz

Тарболы.

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

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

find /* > OpenLDAP1

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

find /* > OpenLDAP2

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

diff OpenLDAP1 OpenLDAP2 > OpenLDAP-Installed

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

[root@deep /]# cp openldap-version.tgz /var/tmp

[root@deep /]# cd /var/tmp/

[root@deep tmp]# tar xzpf openldap-version.tgz



Linux сервер баз данных PostgreSQL.


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

Однажды занявшись обслуживанием и поддержкой сервисов для пользователей, вы неизбежно столкнетесь с тем, что вам нужно хранить информацию о них в архиве так, чтобы она была доступна и легко модифицировалась в любое время. Эти задачи могут быть решение использованием баз данных. Много разных баз данных доступно под Linux; выбрать какую-нибудь одну очень трудно, так как она должна поддерживать несколько языков программирования, стандарты и широкий спектр возможностей. PostgreSQL, оригинально разработанная в UC Berkeley Computer Science Department, является пионером многих объектно- реляционных концепций сейчас доступных в коммерческих базах данных. Она предоставляет поддержку языков SQL92/SQL3, целостность транзакций и расширяемость типов.

Как написано на веб сервере PostgreSQL:

PostgreSQL – это изощренная объектно-реляционная система управления базами данных DBMS, поддерживающая практически все SQL конструкции, включая вложенный select, транзакции, и определяемые пользователем типы и функции. Это наиболее продвинутая база данных, доступная в исходных кодах в настоящее время.


Эти инструкции предполагают.

Unix-совместимые команды.

Путь к исходным кодам “/var/tmp” (возможны другие варианты).

Инсталляция была проверена на Red Hat Linux 6.1 и 6.2.

Все шаги инсталляции осуществляются суперпользователем “root”.

PostgreSQL версии 6.5.3

Пакеты.

Домашняя страница PostgreSQL:

FTP сервер PostgreSQL:

Вы должны скачать: postgresql-6.5.3.tar.gz



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


OpenLDAP может использоваться как:

Сервер веб каталога.

Сервер белых страниц.

Сертификационный сервер.

Сервер контроля доступа.

Сетевой сервер имен.



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


[root@deep /]# cd /var/tmp

[root@deep tmp]# rm -rf postgresql-version/ postgresql-version.tar.gz

Удаление пакета egcs-c++-version.i386.rpm для экономии дискового пространства.

[root@deep /]# rpm -e egcs-c++

Команды “rm” будет удалять все файлы с исходными кодами, которые мы использовали при компиляции и инсталляции PostgreSQL. Также будет удален сжатый архив PostgreSQL из каталога “/var/tmp”.

Команда “rpm -e” удалит пакет egcs-c++ при помощи которого мы компилировали сервер PosgreSQL. Заметим, что пакет egcs-c++ требуется только для компиляции программ подобных PostgreSQL и может быть спокойно удален после окончания этой процедуры.



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


Иммунизация важнейших конфигурационных файлов

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

[root@deep /]# chattr +i /etc/openldap/slapd.conf



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


Перед компиляцией PostgreSQL вам необходимо убедиться, что на вашей системе установлен пакет egcs-c++-version.i386.rpm. Этот пакет располагается на вашем Red Hat Linux CD-ROM в каталоге “RedHat/RPMS”. После компиляции и инсталляции PostgreSQL вы можете удалить его из вашей системы.

Проверьте, что egcs-c++-version.i386.rpm уже инсталлирован, используя команду:

[root@deep /]# rpm -q egcs-c++

Для инсталляции egcs-c++-version.i386.rpm выполните следующие команды:

[root@deep /]# mount /dev/cdrom /mnt/cdrom [root@deep /]# cd /mnt/cdrom/RedHat/RPMS [root@deep RPMS]# rpm -Uvh egcs-c++-version.i386.rpm egcs-c++ ##################################################

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

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

find /* > PostgreSQL1

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

find /* > PostgreSQL2

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

diff PostgreSQL1 PostgreSQL2 > PostgreSQL-Installed

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

[root@deep /]# cp postgresql-version.tar.gz /var/tmp

[root@deep /]# cd /var/tmp

[root@deep tmp]# tar xzpf postgresql-version.tar.gz



Создание базы данных инсталлированной из под бюджета суперпользователя Postgres


После того, как вы проинсталлировали PostgreSQL на сервере, необходимо создать базу данных до запуска PostgreSQL сервера.

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

[root@deep /]# su postgres [postgres@deep /]$ initdb --pglib=/usr/lib/pgsql --pgdata=/var/lib/pgsql

We are initializing the database system with username postgres (uid=40). This user will own all the files and must also own the server process.

Creating Postgres database system directory /var/lib/pgsql/base

Creating template database in /var/lib/pgsql/base/template1

Creating global classes in /var/lib/pgsql/base

Adding template1 database to pg_database...

Vacuuming template1 Creating public pg_user view Creating view pg_rules Creating view pg_views Creating view pg_tables Creating view pg_indexes Loading pg_description

[postgres@deep /]$ chmod 640 /var/lib/pgsql/pg_pwd [postgres@deep /]$ exit exit [root@deep /]#

Опция “--pglib” будет задавать месторасположение библиотек PostgreSQL, а “-- pgdata” определит место, где будут располагаться ваши базы данных.

ЗАМЕЧАНИЕ. Не создавайте базы данных из под пользователя “root”! Это создаст большую дыру в безопасности.



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


Поиск элемента на сервере каталогов LDAP

Утилита ldapsearch ищет в базе данных каталога LDAP информацию, которую вы запрашиваете.

Искать в каталоге LDAP элемент, используя команду:

[root@deep /]# ldapsearch -b ‘dn’ ‘attrs’

[root@deep /]# ldapsearch -b ‘o=openna, c=com’ ‘cn=europe*’

cn=Europe Mourani, o=openna, c=com

cn=Europe Mourani

sn=Mourani

mail=emourani@old.com

description=Marketing relation

objectClass=person

Эта команда будет возвращать все элементы и значения с именем europe и будет выводить результаты в стандартный вывод вашего терминала.



Утилиты создания и поддержки OpenLDAP


Создание базы данных LDMB

Есть два метода создания базы данных для LDAP, первый оффлайновый с помощью утилиты “ldif2ldbm” и второй онлайновый при помощи утилиты “ldapadd”. Обычно, вы будете использовать оффлайновый метод, когда вы хотите добавить несколько тысяч элементов в вашу базу данных и онлайновый, когда надо добавить небольшое число элементов. Также важно заметить, что оффлайновый метод требует, чтобы ваш “slapd” демон не был запущен, а онлайновый требует работы “slapd” демона.

Создание базы данных LDMB оффлайновым методом при помощи утилиты “ldif2ldbm”

Первое, что вы должны сделать это создать входной файл LDIF содержащий текстовое представление ваших элементов. Текстовый файл, именуемый “my- data-file”, может быть использован как пример (конечно, ваш реальный входной LDIF файл будет содержать много больше информации). Когда вы инсталлируете OpenLDAP первый раз и имеете много элементов, которые нужно положить в базу данных, всегда будет хорошей идеей положить всю эту информацию в текстовый файл и добавить ее в вашу базу данных при помощи утилиты “ldif2ldbm”.

Шаг 1

Создайте файл my-data-file (touch /tmp/my-data-file) и добавьте в него, например, следующие строки:

dn: o=openna, c=com o: openna objectclass: organization

dn: cn=Gerhard Mourani, o=openna, c=com cn: Gerhard Mourani sn: Mourani mail: gmourani@videotron.ca title: Author objectclass: person

dn: cn=Anthony Bay, o=openna, c=com cn: Anthony Bay sn: Bay homephone: (444) 111-2233 mobile: (444) 555-6677 mail: abay@openna.com objectclass: person

dn: cn=George Parker, o=openna, c=com cn: George Parker sn: Parker telephonenumber: (555) 234-5678 fax: (543) 987-6543 mobile: (543) 321-4354 description: E-Commerce objectclass: person

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

Шаг 2

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


[root@deep tmp]# ldif2ldbm -i <inputfile> -f <slapdconfigfile>

[root@deep tmp]# ldif2ldbm -i my-data-file -f /etc/openldap/slapd.conf

Опция “-i” с опцией <inputfile> оперделяет месторасположения LDIF файла. Опция <slapdconfigfile> задает месторасположение конфигурационного файла slapd, который определяет где создавать индексы, какие индексы создавать и т.д.

ЗАМЕЧАНИЕ. Важно заметить, что при этом режиме создания демон “slapd”не должен быть запущен.

Создание базы данных LDMB онлайновым методом при помощи утилиты “ldapadd”

Если элементы в вашем сервере каталогов уже созданы или вы хотите добавить небольшое количество информации в вашу базу данных, то вы можете предпочесть использовать утилиту “ldapadd”, чтобы выполнить вашу работу онлайн. Например, чтобы добавить элемент “Europe Mourani” используя утилиту “ldapadd”, вы должны создать файл, называемый “newentry” в каталоге “/tmp”.

Шаг 1

Создайте файл newentry (touch /tmp/newentry) и добавьте в него следующие строки:

cn=Europe Mourani, o=openna, c=com

cn=Europe Mourani

sn=Mourani

mail=emourani@old.com

description=Marketing relation

objectClass=person

Шаг 2

После того, как файл “newentry” создан, мы должны добавить элемены в сервер каталогов LDAP. Для этого используйте следующую команду:

[root@deep /]# ldapadd -f /tmp/newentry -D "cn=admin, o=openna, c=com" -W

Enter LDAP Password :

Вышеприведенная команда подразумевает что вы установили rootdn в "cn=admin, o=openna, c=com" и rootpw в "secret". Вам будет предложено ввести пароль.

ЗАМЕЧАНИЕ. Важно заметить, что во время использования этой утилиты демон “slapd” должен быть запущен.

ldapmodify

В отличие от реляционных баз данных, где данные постоянно изменяются, сервер каталогов содержит информацию, которая единожды введенная изменяется редко. Но иногда, вам все же приходится модифицировать данные, и в этом вам может помочь утилита “ldapmodify”. Она позволяет вам добавлять и модифицировать элементы хранящиеся на сервере каталогов. Допустим что мы хотим заменить содержимое элемента “Europe Mourani” атрибут почты на новое значение “emourani@new.com”, для этого нам понадобятся следующие шаги:

Шаг 1

Создаем файл modifyentry (touch /tmp/modifyentry) и добавляем в него следующее содержимое:

cn=Europe Mourani, o=openna, c=com

- mail=emourani@old.com # будет удален старый почтовый адрес для Europe Mourani из базы данных.

+mail=emourani@new.com # будет добавлен новый почтовый адрес для Europe Mourani в базу данных.

Шаг 2

После создания файла “modifyentry”, мы должны заменить элемнты каталога LDAP сервера в соответствии с содержимым этого файла. Это делается следующей командой:

[root@deep /]# ladpmodify -D ‘cn=Admin, o=openna, c=com’ -W -f <inputfile>

[root@deep /]# ladpmodify -D ‘cn=Admin, o=openna, c=com’ -W -f modifyentry

где <inputfile> - имя файла “modifyentry”, который был создан на шаге 1.