Linux
Шрифт:
#!/bin/sh
sed < active.provider > active \
–e \'s/^\([^ ]*\) [0–9]* [0–9]* \([^ ]*\)$/\1 0000000000 0000000000 \2/\'Нужный файл active готов (он содержит строки для всех групп, которые поддерживает наш сервер), но надо сообщить и провайдеру о нашем выборе (чтобы он знал, какие группы новостей ему нужно пересылать на наш хост). Даже если провайдер пропишет нас в своей конфигурации сервера новостей, он не сможет пересылать нам новости по NNTP. Мы должны дать ему разрешение на это. Для этого добавим строчку в файл hosts.nntp:
newsserver.our.provider:
Здесь надо заметить, что мы полагаемся на провайдера – знаем, что он будет снабжать нас только теми конференциями, о которых мы его попросили. Если же вы не доверяете своим NNTP-соседям, то можно указать конкретно шаблон конференций, которые вы принимаете на локальный диск от конкретного NNTP-соседа. Например, мы хотим принимать от провайдера newsserver.our.badprovider только relcom-группы новостей:
newsserver.our.badprovider::relcom.*
Отредактируем файл newsfeeds, указав всех NNTP-соседей, которых мы хотим снабжать
ME:*, !junk, !control*, !local*/!local:: newsserver.our.provider:*, !junk, !control*, !local*:Tf, Wnm: newsserver.our.provider
• Во втором случае мы хотим снабжать этот же хост по UUCP (имя этой UUCP-системы provider), используя программу sendbatch:
ME:*, !junk, !control*, !local*/!local:: provider/newsserver.our.provider:*, !junk, !control*, !local*:Tf, Wnb:
Затем назначим различные глобальные параметры сервера новостей (имя сервера, имя домена) и параметры, используемые при формировании заголовков статей, публикуемых у нас. Эта информация хранится в файле inn.conf. Определимся теперь с клиентами нашего сервера новостей (хосты, которые через программу чтения новостей общаются с нашим сервером). Например, мы хотим ограничить пространство пользования ресурсами нашего сервера новостей своей интранет-сетью (192.168.111.0/255.255.255.0) и нашей внешней сетью (домен our.domain), причем пользователям этих сетей мы разрешаем и читать новости, и публиковать их на нашем сервере. При этом надо помнить о партнерах из домена partner.domain (правда, им нечего делать в наших локальных конференциях). Ну, а для остальных поместим первым правило, запрещающее любой доступ. Для этого добавим в файл nnrp.access строки:
*:: -no– : -no– :!*
192.168.111.*:Read Post:::*
*.our.domain:Read Post:::*
*.partner.domain:Read Post:::*, !local*Как только мы начнем получать статьи на локальный диск, надо будет следить за сроком их хранения на диске и удалять старые (диск же не резиновый). К счастью, за нас это будет делать программа expire, а от нас требуется только дать ей соответствующие указания в файле expire.ctl (ну и конечно, запускать механизм очистки). В этом файле следует указать:
• срок хранения идентификаторов статей в файле history (это делается для того, чтобы не принимать заново удаленные статьи);
• срок хранения самих тел статей.
Пример ниже показывает, что запись об идентификаторе статей хранится в файле history 14 дней после удаления тела этих статей, тела статей из локальных телеконференций хранятся на системе от 5 до 7 дней (по умолчанию 6), а для всех остальных телеконференций тела хранятся от 3 до 5 дней (по умолчанию – 4 дня):/remember/:14
*: А:3:4:5
local*:А:5:6:7Заметим, что значение по умолчанию (образец *) должно фигурировать раньше, чем строки для отдельных групп, поскольку применяется последнее соответствие образцу в первом поле.
Важным шагом после редактирования конфигурационных файлов является проверка корректности сделанных нами изменений. Система INN имеет ряд средств, помогающих нам в решении этой задачи. Вот некоторые из них.
• Для поиска ошибок в файле newsfeeds можно дать следующую команду:innd -s
Например, если вы получили в ответ следующее:
Found 1 errors –see syslog
то это значит, что командой обнаружена одна ошибка, о которой сообщается через syslog в файлах news.err и news.notice. • Для проверки файла active на наличие неверных строк можно дать следующую команду:
expire -n -х -t
Например, если в ответ получено следующее:
/var/news/etc/active: line 5 wrong number of fields
то это значит, что вы ошиблись с количеством полей в 5-й строке этого файла (их должно быть 4). Однако это не лучший способ проверки файла active. В частности, expire не замечает отсутствие флага для группы новостей (в отличие от inncheck). Итак, обратим внимание на inncheck – Рег1-сценарий, предназначенный для проверки всех рассматриваемых нами конфигурационных файлов. Помимо проверки файлов на наличие синтаксических ошибок, он может осуществлять проверку прав доступа к файлам их владельцев. Возвращаясь к примеру выше (отсутствие флага в конце строки файла active), inncheck сообщит вам об этой ошибке:
/var/news/etc/active:5: ends with whitespace
Запущенный без параметров, inncheck проверит синтаксис всех файлов (которые может проверить), с выводом на экран сообщений об ошибках. Если мы укажем опцию v (режим verbose), то inncheck расскажет нам о том, что он просматривает. Мы можем ограничить работу inncheck проверкой синтаксиса конкретного файла, дав команду inncheck имя_файла. Для того чтобы проверить корректность прав доступа к файлам и корректность владельцев и групп файлов, можно дать команду inncheck -perm. Ту же информацию, да еще и с указанием того, какие команды надо выполнить, чтобы устранить ошибки, дает команда inncheck -f -perm. Последний шаг настройки – периодически запускать программу отправки статей с нашей машины, программу чистки каталога статей и обобщения log-файлов. Для этого отредактируем таблицу заданий пользователя news для демона сгоп:
crontab -u news -е
Ваш редактор (определенный переменной окружения editor) откроет файл /var/cron/tabs/news. Ежедневно в 4 часа утра мы будем запускать сценарий news.daily, в функции которого входит обобщение и ротация файлов регистрации, прогон программы expire и др. Далее, в 1-ю минуту и 28-ю минуту каждого часа мы будем запускать программу nntpsend для отправки потоков статей по NNTP нашим соседям.
0 4 * * * /usr/news/bin/news.daily > /dev/null 2>&1 & 1, 28 * * * * /usr/news/bin/nntpsend > /dev/null 2>&1 &
Наконец,
37 * * * * /usr/news/bin/sendbatch -с provider > /dev/null 2>&1 &
Ну что ж, теперь можно запустить демон innd (rc.news поможет нам в этом) и насладиться его работой!
Журналирование пакета INN
Пакет INN использует стандартный способ – стандартную систему журнализации событий syslog. Помимо этого, можно использовать дополнительные журналы сообщений, в частности:
• news.crit – содержит сообщения о критических ошибках, требующих внимания от администратора сервера новостей;
• news.err – содержит сообщения о фатальных ошибках сервера;
• news.notice – используется для записи информации о соединении удаленных NNTP-хостов, активности клиентов, в этом же файле информируют о своей работе программы ctlinnd, innxmit, rnews.
Система INN имеет помимо log-файлов, поддерживаемых системой syslog, встроенные log-файлы – errlog и news (по умолчанию они расположены в каталоге /var/log/news):
• файл errlog содержит стандартный вывод и стандартные ошибки любых программ, порождаемых демоном innd;
• файл news регистрирует все статьи, поступающие к innd для обработки.
Помимо перечисленных выше файлов регистрации, ряд программ системы INN ведет собственные файлы регистрации (expire.log, send-uucp.log, nntpsend.log и др.).
Программы пакета INN
Поскольку пакет INN очень велик, то в этом разделе приведены некоторые программы, имеющие отношение к пакету с небольшими комментариями:
• /usr/bin/actived – вспомогательный демон для nmpd, хранит в памяти проиндексированный файл active;
• /usr/bin/actmerge – утилита, позволяющая произвести слияние двух файлов active;
• /usr/bin/actsync – утилита для синхронизации, сравнения или слияния файлов active;
• /usr/bin/archive – утилита для создания архивной копии части статей;
• /usr/bin/batcher – программа разбивает на пакеты указанного размера список статей, подготовленных для посылки на хост;
• /usr/bin/controlchan – программа позволяет передать обработку управляющих сообщений из innd внешней программе;
• /usr/bin/convdate – утилита для преобразования формата времени;
• /usr/bin/ctlinnd – интерфейс для управления работающим innd;
• /usr/bin/cvtbatch – преобразует Usenet-пакеты в формат INN;
• /usr/bin/expire – утилита для удаления старых статей без прерывания работы innd;
• /usr/bin/expireindex – удаление старых статей из списка заголовков статей группы;
• /usr/bin/expireover – удаление старых статей из списка статей группы;
• /usr/bin/fastrm – быстрое удаление группы файлов;
• /usr/bin/getlist – получение списков от NNTP-сервера;
• /usr/bin/grephistory – быстрое извлечение статьи по ее индексу;
• /usr/bin/inncheck – проверка конфигурационных файлов;
• /usr/bin/innd – основной сервер, принимающий данные и изменяющий базу данных;
• /usr/bin/inndstart – пусковая программа для innd;
• /usr/bin/innreport – обработка журналов;
• /usr/bin/innstat – выдать состояние сервера;
• /usr/bin/innwatch – мониторинг сервера inn;
• /usr/bin/innxbatch – послать статьи в формате Usenet другому NNTP-серверу;
• /usr/bin/innxmit – пересылка пакета статей другому NNTP-серверу;
• /usr/bin/mailpost – поместить письмо в news-группу;
• /usr/bin/makeactive – восстановление файла active по спулу;
• /usr/bin/news.daily – подготовка ежедневного отчета;
• /usr/bin/news2mail – превращение статей в письма;
• /usr/bin/nnrpd – отдельный процесс, предоставляющий клиентам доступ к статьям;
• /usr/bin/nntpsend – оболочка для innxmit;
• /usr/bin/overchan – заполнение данных списка заголовков статей группы;
• /usr/bin/parsecontrol – анализ управляющих сообщений;
• /usr/bin/pgpverify – проверка управляющих сообщений;
• /usr/bin/scanlogs – обработка журналов;
• /usr/bin/send-nntp – подготовка и рассылка пакетов с помощью innxmit;
• /usr/bin/sendxbatches – подготовка и рассылка пакетов с помощью innxbatch;
• /usr/bin/writelog – запись в журнал inn.
Утилиты
newsprune
Утилита просматривает все каталоги, соответствующие файлу active, и генерирует список файлов, для которых нет соответствующей строки в индексном файле.
findmissing.pl
Создает список файлов, найденных в спуле, но отсутствующих в индексном файле.
Ссылки
• malik.bishkek.su/doc/UNIX/innd/inn.htm – Юрий Савин. Сервер новостей InterNetNews (INN).
• www.bog.pp.ru/work/inn.html – конфигурирование сервера INN.
• www.isc.org/products/INN – официальный сайт INN.
• www.switch.ch/switch/netnews/wg/newstools.html – утилиты для пакета INN.
• www.mibsoftware.com/userkt/inn/0346.htm – утилиты для пакета INN.Глава 22 Proxy-сервер
При подключении к любому провайдеру вам выдаются параметры настройки – адрес сервера DNS, адрес почтового сервера и сервера новостей, а так же – адрес proxy-сервера.
Что собой представляет proxy-сервер? Если вы настроите свой браузер для работы через proxy-сервер, то при запросе некоторого документа из Интернета, если некоторое время назад кто-то уже обращался с подобным запросом, вы получите документ незамедлительно, с максимальной скоростью, на которую способно ваше сетевое подключение, потому что вы получите копию документа, взятую из кэша proxy-сервера. Если же proxy-сервер не имеет в своем кэше данного документа, то proxy-сервер запросит удаленный WWW-сервер, хранящий оригинал, и выдаст документ вам, одновременно положив копию документа в свой кэш.