Глава 21 Сервер новостей INN

Глава 21 Сервер новостей INN

Одним из популярных сервисов, доступных в Интернете, является Usenet (News, новости, телеконференции, эхо-конференции). Это похоже на электронную доску объявлений или Web-форумы. В Usenet минимальной единицей информации является статья. Статья помещается в конференцию. Каждая конференция имеет свою тему. Конференций может быть множество – несколько десятков тысяч. Конференции имеют иерархическую структуру. Имя образуется из имени родительской иерархии, к которому через точку добавляется имя конференции. К примеру – fido7.ru.linux, где fido7 – корень иерархии, показывающий, что группа новостей импортирована из эхо-конференций FIDO, ru – русскоязычная (российская, ранее было su – Советский Союз), linux – конференция посвящена Linux. Для приема и передачи статей используются News-серверы (Usenet-серверы). Эти серверы производят синхронизацию (обмен статьями) между собой. Для передачи и приема статей используется протокол NNTP (Network News Transfer Protocol, сетевой протокол передачи новостей).

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

• идентификационный номер статьи;

• автор статьи;

• длина статьи;

• тема статьи.

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

Наиболее популярным программным обеспечением для создания сервера телеконференций является пакет InterNetNews, INN.

Сервер новостей InterNetNews (INN)

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

Работа пакета INN

Основной процесс – innd. Постоянно запущен в системе, ожидая и принимая поток статей по протоколу NNTP от серверов новостей. Прослушивает порт 119 на наличие входящих соединений. Ведет список активных групп, список статей, статьи, базу заголовков статей, пакеты статей для рассылки по серверам новостей, журналы.

При соединении клиентов для чтения новостей программа innd передает управление демону nnrpd. Этот демон просматривает файл nnrp.access для определения прав доступа к локальной базе статей.

Для управления работой innd – добавления, удаления групп, статей, серверов новостей, изменения параметров работы используется программа ctlinnd.

Удалением старых статей с истекшим сроком хранения занимаются программы expire и expireover, которые удаляют устаревшие файлы, не останавливая innd.

Для автоматического обновления списка новостей используются управляющие сообщения.

Управляющие сообщения

Представляют собой обычные статьи в обычной группе новостей, имеющие заголовок "Control: ". Встретив такую статью, innd обрабатывает записанную в ней команду и сохраняет статью. Управляющие сообщения могут содержать следующие команды:

• cancel Message-ID (обрабатывается самим innd);

• иначе первое слово рассматривается как имя программы (ищется в каталоге ${BIN}/control). Если программа не существует, то вызывается программа default.

Сообщения запоминаются в псевдогруппе control. Если создать подгруппу control.имя_команды, то все соответствующие статьи будут помещаться в эту подгруппу (очень рекомендуется создать control.cancel, control.newgroup, control.rmgroup, control.checkgroups).

Настройка системы INN

Сервер новостей INN по возможностям n сложности настройки весьма напоминает пакет sendmail. Исходя из этого не приходится удивляться огромному количеству конфигурационных файлов и параметров конфигурации. Находятся конфигурационные файлы в каталоге /etc/news. Рассмотрим наиболее значимые из них:

• /etc/news/actsync.cfg – этот файл, как и следующий, используется для конфигурации автоматического изменения списка групп новостей. Обычно, чтобы в последствии не разгребать завалы неведомо откуда взявшихся групп новостей с огромным трафиком, добавление новых групп новостей возлагается на администратора системы;

• /etc/news/actsync.ign – этот файл, как и предыдущий, используется для конфигурации автоматического изменения списка групп новостей;

• /etc/news/control.ctl – в этом файле описывается, как обрабатывать управляющие сообщения. Каждая его строка задает действие. Строки состоят из четырех полей, разделенных двоеточием. Первое поле задает команду, к которой применяется действие (можно указать ключевое слово all), последнее поле – действие. Строки просматриваются по порядку. Используется последняя подошедшая. Возможные действия:

– doit

– doifarg

– doit=отдельный_журнал

– doit=mail

– doit= (без журнализации)

– drop

– log (запись в журнал – errlog)

– log=отдельный_журнал

– mail

Описание действий смотрите в документации на сервер INN. Для увеличения безопасности и устойчивости системы рекомендуется не использовать управляющие сообщения, а в файл control.ctl записать единственную строку all:*:*:drop – не делать никакой обработки вообще;

• /etc/news/cycbuff.conf – файл содержит конфигурацию метода хранения CNFS, обычно не используется (подробности смотрите в документации на пакет INN);

• /etc/news/distrib.pats – файл используется программами посылки статей, в частности, inews – для определения области распространения статьи.

Область распространения определяется по шаблону группы новостей и приоритету. Обычно файл не используется;

• /etc/news/expire.cti – файл определяет, через какое время статьи в базе устаревают. Использование файла зависит от метода хранения статей. В частности, метод хранения CNFS самостоятельно удаляет старые статьи. В этом же файле определяется, сколько времени хранить в «истории» информацию об удаленных или отвергнутых статьях.

В начале файла обязательно должна находиться строка, определяющая срок хранения записи об идентификаторах статей в файле history после удаления тела статьи. Это позволяет отклонить статью, если поставщик новостей вновь предложит ее в определенный промежуток времени. Эта строка имеет следующий формат: /remember/:время, где время – срок хранения в днях, по истечении которого из системы удаляются идентификаторы старых статей.

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

Шаблоны_имени_группы_через_запятую:флаг:min:default:max

– первое поле в строке задает группу или иерархию, удовлетворяющую шаблону;

– второе поле содержит флаг, который определяет, к какому типу групп применять данное условие:

· A – все группы;

· M – только модерируемые;

· U – только немодерируемые;

· X – все группы. Если статья была послана в несколько групп и удовлетворяет данному шаблону, то она удалится не только из данной группы, но и из всех остальных групп, в которые была отослана;

– третье поле задает минимальное число дней хранения. Так же можно использовать ключевое слово never;

– четвертое поле определяет число дней хранения по умолчанию. Так же можно использовать ключевое слово never;

– пятое поле определяет максимальное число дней хранения статьи в базе. Так же можно использовать ключевое слово never;

• /etc/news/incoming.conf – в файле определяется, кто может служить для нашего сервера поставщиком новостей. Определяющая строка имеет вид: имя, двоеточие, пробел, значение. В качестве имени используются следующие слова:

– Hostname. В качестве значения – список полных доменных имен хостов или десятичных IP-адресов через запятую;

– streaming. В качестве значения – true или false; параметр определяет, разрешен ли потоковый режим;

– max-connections – параметр определяет максимальное число параллельных соединений;

– password – если сервер новостей требует авторизации, здесь прописывается пароль, обычно не используется;

– patterns. В качестве значения – шаблон групп, принимаемых с указанного хоста;

– noresendid. В качестве значения – true или false; определяет, должен ли сервер новостей посылать ответ 4 31 resendid в потоковом режиме и 4 36 Retry later в непотоковом в ответ на попытку послать статью, которая уже была принята;

• /etc/news/inn.conf – файл содержит глобальные параметры сервера новостей и параметры, используемые при формировании заголовков статей, создаваемых на этом сервере. Все изменения, сделанные в этом файле, считываются демоном innd только после перезагрузки сервера новостей. Строки в конфигурационном файле имеют следующий формат:

Имя: пробел значение

Ниже описываются имена параметров и их значения:

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

– moderatormaiier – имя хоста, содержащего псевдонимы для всех модерируемых групп. Рекомендуется использовать файл moderators;

– organization – определяет содержимое заголовка Organization:, если таковой отсутствует. Если определена переменная окружения organization, то она переопределяет это значение;

– pathhost – определяет, какое имя локального узла помещается в заголовок Path:. По умолчанию это полное доменное имя локальной машины;

– server – определяет имя NNTP-сервера, на котором должны публиковаться созданные статьи. В том случае, если определена переменная окружения nntpserver, то она изменяет это значение;

– domain – определяет имя домена, к которому принадлежит локальная машина;

– overviewmmap – определяет, будут ли программы expire, nnrpd и makehistory использовать mmap для доступа к файлу overview;

– storageapi – определяет способ хранения статей: false для традиционного метода хранения статей; true – для хешированных имен, cnfs – для кольцевых буферов:

· традиционный метод – каждая статья в отдельном файле; каждая группа – в каталоге с соответствующим именем;

· хешированные имена – каждая статья хранится в отдельном файле, но имена выбираются исходя из ускорения доступа к файлам;

· CNFS – все статьи хранятся в кольцевых буферах; есть возможность группировки статей по определенным критериям;

• maxforks – определяет максимально возможное количество одновременно запущенных демонов innd;

• maxartsize – определяет максимально возможный размер статьи;

• nicekids – определяет приоритет процессам, порождаемым программой nnrpd;

• nicenewnews – определяет еще более низкий приоритет программе nnrpd, обрабатывающей команду newnews;

• mta – определяет программу, используемую для посылки почтой модерируемых статей;

• maiicmd – определяет программу для посылки отчетов;

• logcanceicomm – определяет, сбрасывать ли в стандартную систему журнализации событий (syslog) сообщения о выполнении команды cancel;

• wanttrash – определяет, сохранять ли статьи для несуществующей группы в группе junk;

• remembertrash – определяет, запоминать ли отвергнутые статьи в файле history;

• linecountfuzz – определяет, исправлять ли заголовок Lines;

• logartsize – указывает серверу запоминать в журнале размер статьи;

• logipaddr – определяет, записывать ли в журнал событий IP-адрес вместо значения из заголовка Path;

• logsitename – определяет, сохранять ли имя хоста в журнале полученных статей;

• overviewname – задает имя файла для хранения истории сообщений; для каждой группы – свой; по умолчанию имя файла —.overview;

• extendeddbz – ускоряет работу с overview за счет увеличения DBZ-файла; требует определенного параметра storageapi;

• nnrpdoverstats – позволяет сохранять в стандартную систему журнализации событий syslog статистку истории сообщений для nnrpd;

• storeonxref – при применении нестандартного метода хранения использовать Xref: вместо Newsgroup:;

• nnrpdcheckart – благодаря этому значению nmpd будет не только читать overview, но и проверять реальное наличие статьи;

• storemsgid – разрешает хранить идентификатор сообщения (Message-ID);

• usecontroichan – позволяет использовать канал для обработки управляющих статей;

• refusecybercancel – указывает серверу отвергать статьи, идентификатор сообщения (Message-ID) которых начинается с cancel;

• activedenable, activedupdate, activedport – указывают использовать вспомогательный процесс для буферизации доступа nnrpd к файлу active;

• pathnews, pathbin, pathfilter, pathcontrol, pathdb, pathetc, pathrun, pathlog, pathhttp, pathtmp, pathspool, patharticles, pathoverview, pathoutgoing, pathincoming, patharchive, pathuniover – вышеперечисленные параметры указывают серверу пути к различным составляющим сервера новостей – исполняемым файлам, базам сообщений, журналам событий и т. п.;

• backoff – задает ограничение на количество статей, посылаемых локальными клиентами с помощью nnrpd;

• strippostcc – указывает nmpd удалять поля то:, Сс: и всс:;

• nnrpperiauth – указывает серверу аутентифицировать читателя nmpd с помощью внешней программы на Perl;

• pathaiias – указывает, какую строку добавлять перед pathhost;

• nnrpdposthost, nnrpdpostport – программы nmpd и mews будут отправлять статьи на заданный сервер;

• wireformat – указывает серверу хранить статьи в том же формате, что и при передаче cr lf в конце каждой строки и удвоении точки в начале строки;

• status – позволяет производить регулярную выдачу статистики на стандартную систему журнализации событий syslog;

• timer – позволяет производить регулярный вывод информации о загруженности сервера на стандартную систему журнализации событий syslog;

• peertimeout – определяет, сколько секунд входной канал может оставаться неактивным, прежде чем innd его закроет;

• chaninacttime, chanretrytime – параметры определяют, сколько секунд канал может быть неактивным, прежде чем innd его закроет;

• maxconnections – задает число одновременных NNTP-соединений;

• artcutoff – задает количество дней для хранения статей: статьи, старше указанного числа дней удаляются;

• nntpllnkiog – разрешает записывать в журнал сообщения nntplink;

• nntpactsync – задает, сколько статей обрабатывать между записями в журнал;

• badiocount – определяет, сколько ошибок ввода/вывода допускать, не закрывая канал;

• pause ret rytime – задает паузу между проверками канала на неактивность;

• sourceaddress – определяет, какой адрес будут иметь исходящие пакеты; если указано any – будет выбран операционной системой;

• port – задает порт, который будет прослушиваться;

• locaimaxartsize – определяет максимальный размер посылаемых через nnrpd статей;

• mimeversion – разрешает nnrpd добавлять MIME-заголовки;

• mimecontenttype – если добавляются МIМF.-заголовки. то здесь определяется значение заголовка content-туре;

• mimeencoding – если добавляются MIME-заголовки, то здесь определяется значение заголовка Content-Transfer-Encoding;

• spooifirst – если задано true, то nnrpd помещает статью от клиента в спул, даже не пытаясь обратиться к innd; если false – помещает ее в спул только при получении сообщения об ошибке при посылке;

• articiemmap – разрешает использовать mmap при доступе к статье в спуле;

• clienttimeout – определяет, сколько секунд клиент nnrpd может не проявлять активность до разрыва соединения;

• innf lags – задает флаги, передаваемые innd при запуске;

• doinnwatch – определяет, запускать ли программу innwatch;

• innwatchs leept ime – задает промежуток между проверками innwatch в секундах;

• controifaiinotice – определяет, посылать ли администратору письма об ошибках обработки управляющих сообщений;

• logcycies – задает, сколько копий старых журналов сохранять;

• innwatchpauseioad – содержит среднюю загрузку, умноженную на 100, при которой innwatch будет переводить innd в режим ожидания;

• innwatchhiioad – определяет среднюю загрузку, умноженную на 100, при которой innwatch будет переводить innd в режим throttle;

• innwatchioioad – средняя загрузка, умноженная на 100, при которой innwatch будет возвращать innd в нормальный режим;

• innwatchspooispace – размер свободного места на устройстве, хранящем articles и overview, в единицах inndf, при достижении которого innwatch переводит innd в режим throttle;

• innwatchbatchspace – размер свободного места на устройстве, хранящем исходящие сообщения, в единицах inndf, при достижении которого innwatch переводит innd в режим throttle;

• innwatchiibspace – размер свободного места на устройстве, хранящем файлы db-history, active в единицах inndf, при достижении которого innwatch переводит innd в режим throttle;

• docnfsstat – определяет, запускать ли cnfsstat; нужен только при использовании метода хранения статей CNFS;

• /etc/news/innfeed.conf – конфигурационный файл для программы innfeed. Более подробную информацию следует искать в документации к серверу новостей;

• /etc/news/innreport.conf – конфигурационный файл для программы innreport. Более подробную информацию следует искать в документации к серверу новостей;

• /etc/news/innwatch.ctl – конфигурационный файл для программы innwatch. Каждая строка определяет одну проверку, состоит из семи полей, разделенных одним символом, и начинается с того же символа. Разделитель полей един для всей строки и выбирается из списка: восклицательный знак, запятая, двоеточие, @, точка с запятой или вопросительный знак; в зависимости от того, какой знак из вышеперечисленных не встречается внутри полей в этой строке. Более подробную информацию следует искать в документации к серверу новостей;

• /etc/news/moderators – файл, который хранит имя модерируемой группы и электронный адрес модератора. Когда nmpd или inews получает статью от клиента и выясняется, что она послана в модерируемую группу, то вместо того, чтобы послать ее innd, он посылает ее по электронной почте модератору этой группы. В данном файле задаются шаблоны для определения адреса модератора по имени группы. Каждая строка состоит из двух полей, разделенных двоеточием. В первом поле указывается шаблон имени группы. Во втором поле указывается электронный адрес модератора конференции;

• /etc/news/news2mail.cf – конфигурационный файл для программы news2mail;

• /etc/news/newsfeeds – файл содержит информацию о том, какие статьи и каким образом необходимо пересылать на соседние NNTP-узлы. Для каждого узла, с которым вы обмениваетесь новостями, должно быть соответствующее описание в этом файле.

Каждая строка представляет собой отдельное правило, состоящее из 4-х полей, разделенных двоеточиями:

– имя_сайта/список_исключений_через_запятую – первым сайтом В файле должен быть сайт с именем ME. Если он имеет список шаблонов групп, то этот список добавляется в начало списков остальных сайтов:

· имя_сайта получателя записывается в журнал; если имя сайта уже встречается в Path:, то статья на него не посылается; для локальных имен (программ обработки типа overchan, archive и т. д.) рекомендуется добавлять восклицательный знак в конце, чтобы не пересечься с реальным именем сайта; в качестве имени сайта получателя обычно выбирается то имя, которое этот сайт вставляет в Path: при обработке статьи;

· список_исключений – список имен сайтов через запятую; для каждого имени делается аналогичная проверка – не встречается ли он в Path:. Часто используются имена генераторов управляющих сообщений: cyberspam, spewcancel, bincancel;

– список_шаблонов_имен_групп_через_запятую/список_областей_распределения_через_запятую:

· список_шаблонов определяет, какие группы будут посылаться на сайт получателя. Восклицательный знак в начале шаблона означает отрицание. Наибольший приоритет имеет последнее соответствие. Если вместо! использовать @, то статья из соответствующей группы не будет посылаться на данный сайт, даже если она отсылается в группу, подлежащую посылке;

· область распространения дополнительно ограничивает список рассылаемых статей – если статья имеет заголовок Distribution: и определен список областей распространения для данного сайта получателя, то они должны соответствовать друг другу. Правила записи аналогичны правилам записи шаблонов. Если статья имеет несколько областей распространения, то используется логическое "или";

– список_флагов:

· <size – статья посылается, если ее размер меньше указанного числа байтов;

· >size – статья посылается, если ее размер больше указанного числа байтов;

· Ас – не посылать управляющие сообщения;

· AC – посылать только управляющие сообщения;

· Ad – только статьи с заголовком Distribution:;

· Ае – только если заголовок статьи Newsgroups: содержит только те группы, которые имеются в списке активных групп;

· Ар – не проверять наличие имени сайта получателя в Path: до отсылки сообщения;

· Fимя_файла – задает имя файла для спула;

· Gчисло – посылать статью, если она послана не более чем в указанное число групп;

· Hчисло – посылать статью только если в Path: накопилось не более указанного числа хостов;

· Iразмер – величина внутреннего буфера, после которого данные начинают сбрасываться в файл;

· Nm – только модерируемые группы;

· Nu – только немодерируемые группы;

· Pприоритет – число от 0 до 20, которое будет назначено программе или каналу;

· Oшаблон – требуется наличие заголовка х-Trace, и первое поле в нем должно соответствовать шаблону;

· Sразмер – если в очереди к данному сайту находится больше указанного размера байтов, то innd переходит в режим спулинга – сбрасывает статью во временный файл;

· Tтип – способ передачи статей на сайт:

? с – канал;

? f – файл;

? l – только запись в журнал (очень удобно собирать статистику);

? р – программа;

· Wполе – если передача происходит через файл или канал, то здесь указывается, какую информацию туда записывать. Можно использовать несколько флагов. Поля будут записаны в указанном порядке и разделяться пробелами. Программы понимают только поле *:

? b – размер статьи в байтах;

? f – полное имя файла статьи;

? g – имя первой группы;

? h – hash-ключ Message-ID;

? m – Message-ID;

? n – имя файла статьи относительно спула;

? р – время посылки статьи;

? s – откуда пришла статья;

? t – время получения статьи;

? * – имена всех сайтов, получающих данную статью;

? D – значение заголовка Distribution: ("?", если не было);

? H – все заголовки;

? N – заголовок Newsgroups:;

? P – заголовок Path:;

? R – данные для репликации.

– параметры – формат зависит от способа посылки статей на сайт. Способы посылки статей:

· журнал – делается только запись в журнале /var/log/news/news;

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

· программа – для каждой статьи запускается новый экземпляр программы;

· канал – в поле параметры задается полное имя программы, которая запускается при старте innd. На каждую статью запущенный процесс получает одну строку на стандартный ввод. Стандартный вывод, ошибки, uid и gid – как для случая программы. Если процесс уже запущен, он перезапускается. Если процесс не удается запустить, то образуется спул в outgoing/и мя_сайта;

· exploder – особый подтип канала, кроме обычных статей на него могут быть посланы команды. Команда предваряется восклицательным знаком. Автоматически генерируются команды:

? newgroup имя группы

? rmgroup имя_группы

? flush

? flush имя_сайта

· funnel – слияние нескольких потоков в один. Поле параметр определяет реального получателя;

• /etc/news/nnrp.access – файл определяет права доступа к данному NNTP-узлу. Все строки состоят из пяти полей, разделенных двоеточием и имеют следующий формат:

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

– шаблон_хостов – задает шаблон для сравнения с хостом клиента и может использовать как имена, так и адреса с сетевой маской;

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

· R – клиент имеет право на чтение;

· P – клиент имеет право на посылку;

· N – клиент может использовать команду newnews, несмотря на глобальный запрет;

· L – клиент может посылать статьи в группы с запретом на локальную посылку;

· полное_имя_файла – формат файла такой же, как и основного, права доступа уточняются, исходя из него;

– имя_пользователя – пустое, если аутентификация клиента не нужна;

– пароль – пустой, если аутентификация клиента не нужна;

– шаблон_имен_групп – список шаблонов имен групп через запятую, к которым клиент должен иметь доступ;

• /etc/news/nnrpd.track – файл позволяет nmpd записывать в журнал доступа определенную строку текста вместо имени или адреса хоста клиента. Состоит из строк вида:

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

• /etc/news/nntpsend.ctl – файл определяет список хостов, на которые nntpsend будет рассылать статьи, если имя хоста не указано явно при запуске. Каждая строка определяет отдельный хост и имеет вид:

сайт:fqdn:size:параметры

– сайт – имя, указанное в newsfeeds;

– fqdn – полное доменное имя хоста, на который должны быть посланы статьи;

– size – размер для обрезания пакета заданий, если он станет слишком большим;

– параметры – параметры для innxmit;

• /etc/news/overview.ctl – файл используется для создания файла истории сообщений overview при использовании новых способов хранения статей;

• /etc/news/overview.fmt – файл определяет, какие заголовки будут храниться в файле истории сообщений overview;

• /etc/news/passwd.nntp – в этом файле хранятся пароли для доступа к NNTP-серверам;

• /etc/news/storage.conf – файл определяет параметры для нестандартных методов хранения статей. Для каждого класса определяется своя структура хранения.

Данный текст является ознакомительным фрагментом.