[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.ru2) opennet.ru