Документация по ОС FreeBSD Четверг, 30.01.2025, 20:53
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Apache [58]
DNS [25]
FTP [27]
Mail [74]
Samba [24]
Squid [46]
SSH [23]
VPN [35]
РРР [20]
Net [173]

Главная » Статьи » Сеть » Net

NNTP (inn+fidogate+binkd+exim) [2008]
Итак. Задача состоит в том, чтобы поднять новостной сервер, чтобы читать и писать в фидошные группы с помощью обычного клиента новостей (к примеру Outlook-ом или Mozilla).

Перед началом настройки обновляем дерево портов (если у кого-то оно не обновляется автоматически).

Устанавливаем fidogate, с патчем DS.

[f0s@mail] /home/f0s/> cd /usr/ports/news/fidogate-ds/
[f0s@mail] /usr/ports/news/fidogate-ds/> make && make install 
 && make clean

он за собой должен потянуть inn (если он у вас еще не установлен).

В /etc/syslog.conf раскоментируйте строчки с news.*, подправьте пути:
news.crit /var/log/news/news.crit
news.err /var/log/news/news.err
news.notice /var/log/news/news.notice

и сделайте:
[f0s@mail] //> touch /var/log/news/news.crit 
[f0s@mail] //> touch /var/log/news/news.err
[f0s@mail] //> touch /var/log/news/news.notice
[f0s@mail] //> chown news:news /var/log/news/*
[f0s@mail] //> killall -1 syslogd

Переходим в /usr/local/news/etc.

Вот мой конфиг inn.conf (там в принципе все стандартно за исключением некоторых моментов):
[f0s@mail] /usr/local/news/etc/> cat inn.conf
mta: "/usr/sbin/sendmail -oi -oem %s"
organization: "f2.n550.z2.fidonet.net"
ovmethod: buffindexed
#метод хранения overview информации.
hismethod: hisv6
pathhost: mail.artpaint
pathnews: /usr/local/news
domain: artpaint
# innflags: -c0 -u
mailcmd: /usr/local/news/bin/innmail
server: mail.artpaint

# Feed Configuration

artcutoff: 10
#bindaddress:
#bindaddress6:
dontrejectfiltered: false
hiscachesize: 0
ignorenewsgroups: false
immediatecancel: false
linecountfuzz: 0
maxartsize: 1000000
maxconnections: 50
#pathalias:
pgpverify: false
port: 119
refusecybercancels: false
remembertrash: false
#sourceaddress:
#sourceaddress6:
verifycancels: false
wanttrash: true
wipcheck: 5
wipexpire: 10

# Article Storage

cnfscheckfudgesize: 0
enableoverview: true
groupbaseexpiry: true
mergetogroups: false
overcachesize: 15
#ovgrouppat:
storeonxref: true
useoverchan: false
wireformat: false
xrefslave: false
nfswriter: false

# Reading

allownewnews: true
articlemmap: false
clienttimeout: 600
initialtimeout: 10
msgidcachesize: 10000
nnrpdcheckart: true
noreader: false
readerswhenstopped: false
readertrack: false
nfsreader: false
nfsreaderdelay: 60
tradindexedmmap: true
nnrpdloadlimit: 16

# Reading -- Keyword Support


keywords: false
keyartlimit: 100000
keylimit: 512
keymaxwords: 250

# Posting

addnntppostingdate: true
addnntppostinghost: true
checkincludedtext: false
#complaints:
fromhost: mail.artpaint
localmaxartsize: 1000000
moderatormailer: mail.artpaint
nnrpdauthsender: false
nnrpdposthost: mail.artpaint
nnrpdpostport: 119
spoolfirst: false
strippostcc: false

# Posting -- Exponential Backoff

backoffauth: false
#backoffdb:
backoffk: 1
backoffpostfast: 0
backoffpostslow: 1
backofftrigger: 10000

# Monitoring

doinnwatch: true
innwatchbatchspace: 800
innwatchlibspace: 25000
innwatchloload: 1000
innwatchhiload: 2000
innwatchpauseload: 1500
innwatchsleeptime: 600
innwatchspoolnodes: 200
innwatchspoolspace: 8000

# Logging

docnfsstat: true
logartsize: true
logcancelcomm: false
logcycles: 3
logipaddr: true
logsitename: true
nnrpdoverstats: false
nntpactsync: 200
nntplinklog: false
status: 600
timer: 600

# System Tuning

badiocount: 5
blockbackoff: 120
chaninacttime: 600
chanretrytime: 300
datamovethreshold: 8192
icdsynccount: 10
keepmmappedthreshold: 1024
#maxcmdreadsize:
maxforks: 10
nicekids: 4
nicenewnews: 0
nicennrpd: 0
pauseretrytime: 300
peertimeout: 3600
rlimitnofile: -1

# Paths

patharchive: /usr/local/news/spool/archive
patharticles: /usr/local/news/spool/articles
pathbin: /usr/local/news/bin
pathcontrol: /usr/local/news/bin/control
pathdb: /usr/local/news/db
pathetc: /usr/local/news/etc
pathfilter: /usr/local/news/bin/filter
pathhttp: /var/log/news
pathincoming: /usr/local/news/spool/incoming
pathlog: /var/log/news
pathoutgoing: /usr/local/news/spool/outgoing
pathoverview: /usr/local/news/spool/overview
pathrun: /usr/local/news/run
pathspool: /usr/local/news/spool
pathtmp: /usr/local/news/tmp

Редактируем expire.ctl. Все коментарим, оставляем только:
/remember/:10
*:A:7:10:never

Редактируем readers.conf:
[f0s@mail] /usr/local/news/etc/> cat readers.conf
# Описываем с каких хостов можем подключатья на 119 порт
# и указываем обязательную авторизацию юзеров
auth "all network users" {
 auth: "ckpasswd -f /usr/local/news/db/users.passwd"
 hosts: "192.168.10.0/24, 192.168.20.0/24, 212.176.211.125"
 default: "<LOCAL-USERS>"
}

# Это правило на локалхост
auth "localhost" {
 hosts: "localhost, 127.0.0.1, stdin"
 default: "<localhost>"
}

# Это ACL на всех юзеров, которые подключились, но не прошли
# проверку имени/пароля. Они смогут читать только
# конференции control.*
access "all users" {
 users: "<LOCAL-USERS>"
 read: "control.*"
}

# Это ACL на прошедших проверку пользователей. В данном примере 
# юзер f0s имеет Доступ ко всем конференциям на полный 
# доступ (Read/Post)
access "auth users" {
 users: "f0s"
 newsgroups: "*"
 access: RPA
}

# Это ACL на прошедших проверку пользователей. В данном примере
# юзеры jacko и svhed имеют доступ ко всем конференциям fido7.*
# на полный доступ (Read/Post)
access "auth users" {
 users: "jacko,shved"
 newsgroups: "fido7.*"
 access: RPA
}

# Пользователи подключающиеся с локалхоста имеют доступ ко всем
# конференциям без пароля.
access "localhost" {
 users: "<localhost>"
 newsgroups: "*"
 access: RPA
}

Теперь необходимо создать файл с паролями с помощью утилиты htpasswd (она обычно входит в дистрибутив сервера apache):
[f0s@mail] htpasswd -c /usr/local/news/db/users.passwd f0s
[f0s@mail] htpasswd /usr/local/news/db/users.passwd jacko
[f0s@mail] htpasswd /usr/local/news/db/users.passwd shved

Не забываем сделать файл доступный пользователю news на чтение:
[f0s@mail] /usr/local/news/db/> chown news:news users.passwd
[f0s@mail] /usr/local/news/db/> chmod 640 users.passwd
[f0s@mail] /usr/local/news/db/> ll | grep users.passwd
-rw-r----- 1 news news 58 25 июл 16:34 users.passwd

Переходим к файлу newsfeeds (все комментарим, оставляем только это):
[f0s@mail] /usr/local/news/etc/> cat newsfeeds
ME:*,!junk,!control*::
dummy-feed:!*::
fidogate\
 :*,!cc,\
 !junk,\
 !control\
 :Tf,Wfb:fidogate

Редактируем файл cycbuff.conf:
[f0s@mail] /usr/local/news/etc/> cat cycbuff.conf
# Это конференции от 2:5080/1003@fidonet. Выделим под них место 200Мб
cycbuff:FILE01:/usr/local/news/spool/articles/gotlib:200000
# Это конференции от 2:292/854@fidonet. Выделим под них место 10Мб
cycbuff:FILE02:/usr/local/news/spool/articles/ward:10000

# задаем два CNFS спула: GOTLIB (200Mb) и WARD (10 Mb).
metacycbuff:GOTLIB:FILE01
metacycbuff:WARD:FILE02

Задаем метод хранения: junk, control.* - в traditional, остальные - в два CNFS спула:
[f0s@mail] /usr/local/news/etc/> cat storage.conf
method tradspool {
 newsgroups: junk,control*
 class: 0
}
method cnfs {
 newsgroups: russian.r55,rustalk.r55
 class: 1
 options: WARD
}

method cnfs {
 newsgroups: *
 class: 2
 options: GOTLIB
}

Редактируем buffindexed.conf:
Размер overview базы определяется эмпирически, но примерно 1/7 от объема news-базы. Т.е. в данном примере, при размере news-базы 210 Мб., размер overview-базы возьмем 30 Мб.

[f0s@mail] /usr/local/news/etc/> cat buffindexed.conf
0:/usr/local/news/spool/overview/OV1:30720

Переходим к созданию. файла history:
[f0s@mail] /usr/local/news/db/> touch history
[f0s@mail] /usr/local/news/db/> ../bin/makedbz -i

Устанавливаем права на файлы в /usr/local/news/db:
[f0s@mail] /usr/local/news/db/> chown news:news *
[f0s@mail] /usr/local/news/db/> chmod 0664 *

Теперь создаем CNFS спулы и overview database:
dd if=/dev/zero of=/usr/local/news/spool/articles/ward bs=1k count=10240
dd if=/dev/zero of=/usr/local/news/spool/articles/gotlib bs=1k count=200000
dd if=/dev/zero of=/usr/local/news/spool/overview/OV1 bs=1k count=30720

Теперь у этих файлов установите владельцем news:news и права 0664.

Далее, для того, чтобы в fido7-конференциях вы отвечали на сообшения не к All, а к автору, необходимо настроить X-Comment-To. Для этого необходимо заменить скрипт filter_nnrpd.pl, котрый находится в /usr/local/news/bin/filter/, на ниже приведенный:

#!/usr/bin/perl -w
#use strict;
#
my %config = (checkincludedtext => 0,
 includedcutoff => 40,
 includedratio => 0.6,
 quotere => '^[>:]',
 antiquotere => '^[<]',
 );

sub filter_post {
 my $rval = "" ; # assume we'll accept.

 if ($config{checkincludedtext}) {
 my ($lines, $quoted, $antiquoted) = analyze($body);
 if ($lines > $config{includedcutoff}
 && $quoted - $antiquoted > $lines * $config{includedratio}) {
 $rval = "Article contains too much quoted text";
 }
 }

 my $grephistory = '/usr/local/news/bin/grephistory';
 my $sm = '/usr/local/news/bin/sm';
 if( $hdr{"Newsgroups"} =~ /fido7\./ ) {
 if ( $hdr{"Newsgroups"} =~ /,/ ) {
 $rval = "More than one newsgroup requested, only one allowed"; }
 if ( !(($hdr{"Comment-To"} ne "") ||
 ($hdr{"X-Comment-To"} ne "") ||
 ($hdr{"X-FTN-To"} ne "") ||
 ($hdr{"X-Fidonet-Comment-To"} ne "") ||
 ($hdr{"X-Apparently-To"} ne ""))) {
 my $refs = $hdr{"References"};
 if( $refs ne "" ) {
 my @refs = split(/ /, $refs);
 my $msgid = pop @refs;
 $msgid =~ s/[<>|;\s'"]//g;
 my $fn=`$grephistory \'$msgid\' 2>&1`;
 if( (!($fn =~ /\/dev\/null/)) &&
 (!($fn =~ /Not found/)) ) {
 my $orig_from = `$sm $fn`;
 my @orig_from = grep(/^From:/, split(/\n/, $orig_from));
 $orig_from = shift @orig_from;
 $orig_from =~ s/^From:\s*//;
# это должно быть в одну строчку:
 $orig_from =~ s/^\s*(.+[^\s])\s*<[^\s><"\(\)\@]+\@[^\s>
<"\(\)\@]+>\s*$/$1/;
# это должно быть в одну строчку:
 $orig_from =~ s/^\s*<{0,1}[^\s><"\(\)\@]+\@[^\s><"\(\)\
@]+>{0,1}\s*\((.+)\)\s*$/$1/;
 $orig_from =~ s/^"//;
 $orig_from =~ s/"$//;
 $hdr{"X-Comment-To"} = $orig_from;
 $modify_headers = 1;
 }
 }
 }
 }

 return $rval;
}

sub analyze {
 my ($lines, $quoted, $antiquoted) = (0, 0, 0);
 local $_ = shift;

 do {
 if ( /\G$config{quotere}/mgc ) {
 $quoted++;
 } elsif ( /\G$config{antiquotere}/mgc ) {
 $antiquoted++;
 }
 } while ( /\G(.*)\n/gc && ++$lines );

 return ($lines, $quoted, $antiquoted);
}

Для проверки синтаксиса файлов конфигурации, владельцев файлов и каталогов запустим скрипт /usr/local/news/bin/inncheck, после чего исправьте найденные им ошибки.
Далее запускаем vipw и пользователю news ставим шеллом - /bin/sh. Это пригодится при отладке.
Делаем пробный запуск:

su news -c "/usr/local/news/bin/rc.news start"

Если все ок, то в rc.conf пишем:

innd_enable="YES"
innd_user="news"
innd_group="news"

Настройка inn завершена.

Переходим к настройке fidogate.

Пожалуй самый простой конфиг это fidogate.conf. Там все понятно и с комментариями. Оставляем практически дефолтный, меняем только на свое имя и адрес.

Выложу конфиги, которые могут вызвать затруднения:
[f0s@mail] /usr/local/etc/fido/gate/> cat aliases
# username FTN address Full name
# -------- ----------- ---------
f0s 2:550/999.0 "dmitry a. frolov"
f0s 2:550/999.2 "Mail Delivery Subsystem"
f0s 2:550/999.0 "SysOp"
f0s 2:550/999.0 "*"

Здесь указываем правила по которым создаются эхи

[f0s@mail] /usr/local/etc/fido/gate/> cat areas
"" fido7. -8 -H -z 2 -a 2:550/999

Здесь описываем линков, с которых берем фидо-почту и себя:

[f0s@mail] /usr/local/etc/fido/gate/> cat hosts
2:5080/1003 f1003.n5080.z2.fidonet.org. -p
2:292/854 f854.n292.z2.fidonet.org. -p
2:550/2 f2.n550.z2.fidonet.org. -p

Описывем линков с паролями (Очень важно указать "$" в св-вах аплинка, это позволит автосоздавать новые конференции):
[f0s@mail] /usr/local/etc/fido/gate/> cat passwd
af 2:5080/1003 passwd 5 ABC$&% "areafix"
ff 2:5080/1003 passwd 5 ABC$&% "filefix"
ff 2:292/854 passwd 5 ABC$&% "filefix"
af 2:292/854 passwd 5 ABC$&% "areafix"

С фидогейтом все. Приступаем к установке программы binkd, которая предназначена для передачи фидо-трафика по IP потоколу binkP (24554). Это программа будет получать обычную фидошную почту, после чего fidogate будет ее превращать в news-ы.
[f0s@mail] //> cd /usr/ports/net/binkd/
[f0s@mail] /usr/ports/net/binkd/> make install clean

не забываем добавить в rc.conf:
binkd_enable="YES"

ну и в самом /usr/local/etc/rc.d/binkd я исправил пользователя на news. То есть binkd наш должен работать от пользователя news. Также проверям путь на который ссылается pid, и создаем каталог с парвами для пользователя news.

Теперь можно присутпать к настройке конфига для binkd. Он находится тут: /usr/local/etc/binkd.cfg:
domain fidonet /var/spool/fido/bt/out 2
domain fidonet.org alias-for fidonet
domain fidonet.net alias-for fidonet
domain fidonet.rus alias-for fidonet
domain fido alias-for fidonet
domain fidorus alias-for fidonet
domain fido7 alias-for fidonet
address 2:550/999
sysname "f2.n550.z2.fidonet.net"
location "St.Petersburg, Russia"
sysop "dmitry a. frolov"
nodeinfo 115200,TCP,BINKP
try 10
hold 600
send-if-pwd
log /var/log/fido/gate/binkd.log
loglevel 4
conlog 4
percents
printq
backresolv
pid-file /var/run/binkd/binkd.pid
inbound /var/spool/fido/bt/pin
inbound-nonsecure /var/spool/fido/bt/in
minfree 2048
minfree-nonsecure 2048
kill-dup-partial-files
kill-old-partial-files 86400
prescan
aso
node 2:292/854 many-glacier.mine.nu password c
node 2:5080/1003 news.cca.usart.ru password c
defnode -nr *

Настройка binkd завершена.
Теперь почти вся настройка гейтования завершена. Почему "почти"? Нам еще нужно сдедать чтобы смогли гейтоваться личные сообщения из фидо (нетмейл). Для этого я приведу примера правки конфига EXIM:
begin routers
# добавляем в секцию routers:
fidonet:
 driver = manualroute
 domains = ! +local_domains
 route_list = *.fidonet.org f2.n550.z2.fidonet.net
 transport = fidogate

# нашу настройку оставляем неизменной
send_to_smart_host:
 driver = manualroute
 route_list = !+local_domains relay.westcall.net
 transport = remote_smtp
 ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8

begin transports
# в транспорты - тоже
fidogate:
 driver = pipe
 command = "/usr/local/libexec/fidogate/rfc2ftn -i ${pipe_addresses}"
 user = news
 group = news

# Доставка на удалённые хосты - по SMTP
remote_smtp:
 driver = smtp

dbmail_delivery:
 driver = pipe
 command = /usr/local/libexec/dovecot/deliver -d $local_part@$domain
 message_prefix =
 message_suffix =
 delivery_date_add
 envelope_to_add
 return_path_add
 log_output
 user = mailnull
 group = mail

Проверяем правильность конфиг файла. Для этого делаем:
[f0s@mail] //> exim -bV

Теперь нам надо чтобы все это совместно работало. Добавим в crontab:
# Каждый день выполняем expire (писать все в одну строчку, не поместилось)
30 21 * * * news /usr/local/news/bin/news.daily \
expireover lowmark delayrm
#
# Каждый день чистим cache inn (писать все в одну строчку, не поместилось)
40 21 * * * news /usr/local/news/bin/ctlinnd -t 300 \
-s reload incoming.conf "flush cache"
#
# Каждый час постим залежалые в incoming inn-a артикли
1 * * * * news /usr/local/news/bin/nntpsend
10 * * * * news /usr/local/news/bin/rnews -U
#
# Каждые 10 минут тоссим почту и гейтуем сообщения
*/10 * * * * news /usr/local/news/bin/pochta.sh
#
# Каждый день отписываемся от эх без даунлинков
00 22 * * * news /usr/local/bin/ftnafutil expire
#
# Каждую неделю чистим areas.bbs от отписанных эх (со статусом U)
00 23 * * 1 news /usr/local/bin/ftnafutil delete

вот скрипт pochta.sh:
[f0s@mail] //> cat /usr/local/news/bin/pochta.sh
#!/bin/sh
/usr/local/libexec/fidogate/send-fidogate
/usr/local/bin/runinc
/usr/local/bin/runinc -o
cd /var/spool/fido/bt/out
touch 2.5080.1003.0.flo

Проверяем всю работу телнетом:
[f0s@router] /home/f0s/> telnet mail.artpaint nntp
Trying 192.168.10.8...
Connected to mail.artpaint.
Escape character is '^]'.
201 mail.artpaint InterNetNews NNRP server INN 2.4.3 ready (no posting).
# Как мы видим, пока мы не авторизованы. нам доступны только control.*
list active
215 Newsgroups in form "group high low flags".
control.cancel 0000000000 0000000001 n
control.checkgroups 0000000000 0000000001 n
control.newgroup 0000000000 0000000001 n
control.rmgroup 0000000000 0000000001 n
.
# теперь представляемся пользователем shved
authinfo user shved
381 PASS required
authinfo pass MYSUPERPASSWORD
281 Ok
# имя и пароль приняты, теперь мы видим,
# что нам доступны конференции fido7.* на чтение и запись.
list active
215 Newsgroups in form "group high low flags".
fido7.spb.cars 0000000083 0000000001 y
fido7.ccalocal 0000000011 0000000001 y
fido7.ru.linux.chainik 0000000112 0000000001 y
fido7.ru.unix.bsd 0000000039 0000000001 y
.
quit
205 .
Connection closed by foreign host.

Проверка и настройка окончательно завершены. Теперь можем запускать наш любимый newsreader, например Seamonkey (если GUI), или tin (если консольно). Указываем в подключениях наш сервер, порт 119 и вперед :)

Литература:
1) howto.id.ru
2) opennet.ru



Источник: http://www.lissyara.su/?id=1721
Категория: Net | Добавил: oleg (01.08.2008) | Автор: f0s
Просмотров: 800 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2025