xinetd
nnrpd wird für den Port 119 vom innd gestartet. Bei Fedora ist nnrpd -S nicht mit einkompiliert, da wird man sich das RPM selber bauen müssen (siehe unten). Aber für den Fall, dass der inn sowieso schon --with-openssl kompiliert wurde und ein Zertifikat bei der Installation mit make cert erstellt wurde, dann genügt:
cat /etc/xinetd.d/nntps
service nntps
{
disable = no
socket_type = stream
protocol = tcp
user = news
wait = no
server = /usr/lib/news/bin/nnrpd
server_args = -S
per_source = 4
instances = 200
log_on_success += DURATION HOST USERID
}
der Eintrag im Kasten zum Starten von nttps.
inetd
Und wer statt des xinetd den openbsd-inetd benutzt, editiert '/etc/inetd.conf':
nntps stream tcp6 nowait news /usr/sbin/tcpd /usr/lib/news/bin/nnrpd-ssl -S
nntps stream tcp4 nowait news /usr/sbin/tcpd /usr/lib/news/bin/nnrpd-ssl -S
Zertifikat erstellen
cat /etc/news/makecert.ssl
SSLBIN=/usr/bin/
NEWSUSER=news
NEWSGROUP=news
PATHLIB=/usr/lib/news/lib
## Install a certificate for TLS/SSL support.
cert:
$(SSLBIN)/openssl req -new -x509 -nodes \
-out $(PATHLIB)/cert.pem -days 366 \
-keyout $(PATHLIB)/key.pem
chown $(NEWSUSER) $(PATHLIB)/cert.pem
chgrp $(NEWSGROUP) $(PATHLIB)/cert.pem
chmod 640 $(PATHLIB)/cert.pem
chown $(NEWSUSER) $(PATHLIB)/key.pem
chgrp $(NEWSGROUP) $(PATHLIB)/key.pem
chmod 600 $(PATHLIB)/key.pem
sasl.conf
cat /etc/news/sasl.conf
tls_ca_path: /usr/lib/news/lib
tls_cert_file: /usr/lib/news/lib/cert.pem
tls_key_file: /usr/lib/news/lib/key.pem
Certifikation Request
CONFIG=/etc/news/custom_openssl.cnf
cat >> /etc/news/custom_openssl.cnf << EOF
# -------------- BEGIN custom openssl.cnf -----
HOME = /etc/news
oid_section = new_oids
[ new_oids ]
[ req ]
default_days = 730 # how long to certify for
default_keyfile = /usr/lib/news/lib/key.pem
distinguished_name = req_distinguished_name
encrypt_key = no
string_mask = nombstr
req_extensions = v3_req # Extensions to add to certificate request
[ req_distinguished_name ]
commonName = Common Name (eg, YOUR name)
commonName_default = news.newsserver.example
commonName_max = 64
[ v3_req ]
subjectAltName=DNS:newsX.open-news-network.org
# -------------- END custom openssl.cnf -----
EOF
Certification Request Datei erstellen
HOST=news
HOME=/etc/news
openssl req -batch -config $CONFIG -newkey rsa:2048 -out $HOME/${HOST}_csr.pem
cat $HOME/${HOST}_csr.pem
Bei http://www.cacert.org/ oder http://www.startssl.com/ sich mit dem Inhalt von news_csr.pem ein Serverzertifkat holen und den Inhalt des Zertifikats in cert.pem einfügen:
vi /usr/lib/news/lib/cert.pem
CA.pem von der CA runterladen nach /usr/lib/news/lib/ legen und in der sasl.conf angeben z.B:
tls_ca_path: /usr/lib/news/lib
tls_ca_file: /usr/lib/news/lib/root.crt
tls_cert_file: /usr/lib/news/lib/cert.pem
tls_key_file: /usr/lib/news/lib/key.pem
Debian
Debian hat als Besonderheit nicht nnrpd sondern nnrpd-ssl als extra Binary.
cat > /etc/xinetd.d/nntps << "EOF"
# description: NNTP over SSL
service nntps
{
disable = no
socket_type = stream
protocol = tcp
user = news
wait = no
server = /usr/lib/news/bin/nnrpd-ssl
server_args = -S
per_source = 4
instances = 200
log_on_success += DURATION HOST USERID
}
EOF
Fedora
Fedora.src.rpm besorgen und inn.spec anpassen. Fedora10 mit verlageerten home auf /home/news statt /var/lib/news, da das Fedora-rpm ohne ssl-Support ausgeliefert wird und deswegen "nntp -S" nicht geht. Dieses Specfile hier beinhaltetet inn-2.4.5.filter_nnrpd.patch, der beim Sourcerpm nicht dabei ist.
cat /home/compileuser/rpm/SPECS/inn.spec
Summary: The InterNetNews (INN) system, an Usenet news server
Name: inn
Version: 2.4.5
Release: opennews4%{?dist}
#see LICENSE file for details
License: GPL+ and BSD and MIT and Public Domain
Group: System Environment/Daemons
URL: http://www.isc.org/products/INN/
Source0: ftp://ftp.isc.org/isc/inn/inn-%{version}.tar.gz
Source2: inn-default-distributions
Source4: inn-cron-expire
Source5: inn-cron-rnews
Source7: inn-cron-nntpsend
Source8: innd.init
Source10: inn-faq.tar.gz
Patch: inn-2.4.3.rh.patch
Patch2: inn-2.4.1.perl.patch
Patch3: inn-2.4.1.headusage.patch
Patch4: inn-2.4.1.pie.patch
Patch6: inn-2.4.1.posix.patch
Patch7: inn-2.4.3.warn.patch
Patch8: inn-2.4.2-makedbz.patch
Patch9: inn-2.4.3.rcreaderaddrinuse.patch
Patch10: inn-2.4.3-nologinshell.patch
Patch11: inn-2.4.5-dynlib.patch
Patch12: inn-2.4.5.filter_nnrpd.patch
BuildRequires: perl-devel python db4-devel byacc krb5-devel pam-devel e2fsprogs-devel
BuildRequires: perl(ExtUtils::Embed)
Requires(pre): shadow-utils
Prereq: chkconfig, grep, coreutils, sed
Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
Requires: bash >= 2.0, inews
# XXX white out bogus perl requirement for now
Provides: perl(::usr/lib/innshellvars.pl)
Buildroot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
%description
INN (InterNetNews) is a complete system for serving Usenet news and/or
private newsfeeds. INN includes innd, an NNTP (NetNews Transport
Protocol) server, and nnrpd, a newsreader that is spawned foreach
client. Both innd and nnrpd vary slightly from the NNTP protocol, but
not in ways that are easily noticed.
Install the inn package if you need a complete system for serving and
reading Usenet news. You may also need to install inn-devel,if you
are going to use a separate program which interfaces to INN, like
newsgate or tin.
%package devel
Summary: The INN (InterNetNews) library
Group: Development/Libraries
Requires: inn = %{version}
%description devel
The inn-devel package contains the INN (InterNetNews) library, which
several programs that interface with INN need in order to work (for
example, newsgate and tin).
If you are installing a program which must interface with theINN news
system, you should install inn-devel.
%package -n inews
Summary: Sends Usenet articles to a local news server for distribution
Group: System Environment/Daemons
%description -n inews
The inews program is used by some news programs (for example,inn and
trn) to post Usenet news articles to local news servers. Inews reads
an article from a file or standard input, adds headers, performs some
consistency checks and then sends the article to the local news server
specified in the inn.conf file.
Install inews if you need a program for posting Usenet articles to
local news servers.
%pre
getent group news >/dev/null || groupadd -r news
getent passwd news >/dev/null || \
useradd -r -g news -d /etc/news -s /bin/bash \
-c "News server user" news
exit 0
%prep
%setup -q -a 10
%patch -p1 -b .rh
%patch2 -p1 -b .perl
%patch3 -p1 -b .headusage
%patch4 -p1 -b .pie
%patch6 -p1 -b .posix
%patch7 -p1 -b .warn
%patch8 -p1 -b .makedbz
%patch9 -p1 -b .addrinuse
%patch10 -p1 -b .nologin
%patch11 -p1 -b .dynlib
%patch12 -p1 -b .filter_nnrpd
perl -pi -e 's/LOCK_READ/LLOCK_READ/' `find . -type f`
perl -pi -e 's/LOCK_WRITE/LLOCK_WRITE/' `find . -type f`
%build
export DEFINE_INN_FLAGS="-D_XOPEN_SOURCE=600 -D_BSD_SOURCE -DHAVE_ET_COM_ERR_H"
%ifarch s390 s390x sparc sparcv9 sparc64
export CFLAGS="$RPM_OPT_FLAGS $DEFINE_INN_FLAGS -fPIC -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE"
%else
export CFLAGS="$RPM_OPT_FLAGS $DEFINE_INN_FLAGS -fpic -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE"
%endif
with_tmp_path=/var/lib/news/tmp ./configure \
--prefix=/usr/lib/news \
--sysconfdir=/etc/news --mandir=%{_mandir} \
--with-log-dir=/home/news/log --with-spool-dir=/home/news\
--with-db-dir=/home/news/db --with-run-dir=/var/run/news \
--with-etc-dir=/etc/news --with-tmp-dir=/home/news/db/tmp \
--with-perl --enable-shared --enable-uucp-rnews \
--enable-pgp-verify --with-sendmail=/usr/sbin/sendmail \
--with-news-user=news --with-news-group=news --with-news-master=news \
--with-openssl\
--enable-ipv6 \
--enable-libtool \
%{_target_platform}
# XXX don't include to avoid linking with -ldb1.
perl -pi -e 's/HAVE_DB1_NDBM_H/XXX_HAVE_DB1_NDBM_H/' ./include/config.h
make
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT
# -- Install man pages needed by suck et al.
mkdir -p $RPM_BUILD_ROOT/usr/include/inn
mkdir -p $RPM_BUILD_ROOT/var/spool/news
mkdir -p $RPM_BUILD_ROOT/var/log/news
mkdir -p $RPM_BUILD_ROOT/var/lib/news
for f in clibrary.h config.h dbz.h libinn.h storage.h
do
install -c -m 0644 ./include/$f $RPM_BUILD_ROOT/usr/include/inn
done
for f in defines.h system.h
do
install -c -m 0644 ./include/inn/$f $RPM_BUILD_ROOT/usr/include/inn
done
mkdir -p $RPM_BUILD_ROOT/etc
mv $RPM_BUILD_ROOT/usr/lib/news/bin/rc.news $RPM_BUILD_ROOT/etc
touch $RPM_BUILD_ROOT/home/news/db/subscriptions
chmod 644 $RPM_BUILD_ROOT/home/news/db/subscriptions
install -m 644 %{SOURCE2} $RPM_BUILD_ROOT/home/news/db/distributions
mkdir -p $RPM_BUILD_ROOT/etc/cron.{hourly,daily}
install %{SOURCE4} $RPM_BUILD_ROOT/etc/cron.daily/inn-cron-expire
install %{SOURCE5} $RPM_BUILD_ROOT/etc/cron.hourly/inn-cron-rnews
install %{SOURCE7} $RPM_BUILD_ROOT/etc/cron.hourly/inn-cron-nntpsend
mkdir -p $RPM_BUILD_ROOT/etc/rc.d/init.d
install %{SOURCE8} $RPM_BUILD_ROOT/etc/rc.d/init.d/innd
touch $RPM_BUILD_ROOT/home/news/db/history
#LD_LIBRARY_PATH=$RPM_BUILD_ROOT/usr/lib $RPM_BUILD_ROOT/usr/bin/makedbz -i \
# -f $RPM_BUILD_ROOT/var/lib/news/history
#chmod 644 $RPM_BUILD_ROOT/var/lib/news/*
cat > $RPM_BUILD_ROOT/etc/news/.profile < $RPM_BUILD_ROOT%{_sysconfdir}/ld.so.conf.d/inn-%{_arch}.conf
#Build filelist
rm -rf $RPM_BUILD_ROOT/usr/lib/news/include
echo "%defattr(-,news,news)" > files.list
find $RPM_BUILD_ROOT -type f -or -type l | \
sed -e "s|$RPM_BUILD_ROOT||g" | \
sed 's|^/etc/cron|%config(noreplace) %attr(-,root,root) &|'| \
sed 's|^/etc/rc.d|%config(noreplace) %attr(-,root,root) &|'| \
sed 's|^/etc|%config(noreplace) &|' | \
sed 's|^/etc/news|%config(noreplace) %attr(0640,news,news) &|' | \
sed 's|^/home/news/db/|%config(noreplace) &|' | \
sed 's|.*innshellvar|%config &|' | \
sed 's|/home/news/log/news|%ghost &|' | \
sed 's|/usr/lib/news/bin/inndstart$|%attr(4550,root,news) /usr/lib/news/bin/inndstart|' | \
sed 's|/usr/lib/news/bin/startinnfeed$|%attr(4550,root,news) /usr/lib/news/bin/startinnfeed|' | \
sed 's|/usr/lib/news/bin/rnews$|%attr(4550,uucp,news) /usr/lib/news/bin/rnews|' > files.list
echo "/usr/lib/news/bin/filter/*.pyc" >> files.list
echo "/usr/lib/news/bin/filter/*.pyo" >> files.list
(echo "%defattr(-,news,news)" ; grep -v inews files.list | \
egrep -v "\.(h|so|a|la)$" | \
grep -v "news/inn.conf" | \
grep -v "/man/") > files.main
echo "%defattr(-,root,root)" > files.devel
egrep "\.(h|so)$" files.list >> files.devel
%clean
rm -rf $RPM_BUILD_ROOT
rm -f files.list files.main files.devel files.inews
%post
/sbin/ldconfig
/sbin/chkconfig --add innd
su -m news -c '/usr/lib/news/bin/makedbz -i -o'
umask 002
touch /home/news/log/news.notice
touch /home/news/log/news.crit
touch /home/news/log/news.err
chown -R news:news /home/news/log/news*
%triggerpostun -- inn < 2.3.0
service innd stop > /dev/null 2>&1
exit 0
%triggerin -- rsyslog
if [ -f /etc/rsyslog.conf ]; then
if ! grep -q INN /etc/rsyslog.conf; then
sed 's/mail.none;/mail.none;news.none;/' < /etc/rsyslog.conf > /etc/rsyslog.conf.inn
mv /etc/rsyslog.conf.inn /etc/rsyslog.conf
echo '' \
>> /etc/rsyslog.conf
echo '#' \
>> /etc/rsyslog.conf
echo '# INN' \
>> /etc/rsyslog.conf
echo '#' \
>> /etc/rsyslog.conf
echo 'news.=crit /home/news/log/news.crit' >> /etc/rsyslog.conf
echo 'news.=err /home/news/log/news.err' >> /etc/rsyslog.conf
echo 'news.notice /home/news/log/news.notice' >> /etc/rsyslog.conf
echo 'news.=debug /home/news/log/news.debug' >> /etc/rsyslog.conf
fi
if [ -f /var/run/rsyslogd.pid ]; then
kill -HUP `cat /var/run/rsyslogd.pid` 2> /dev/null ||:
fi
fi
%triggerin -- sysklogd
if [ -f /etc/syslog.conf ]; then
if ! grep -q INN /etc/syslog.conf; then
sed 's/mail.none;/mail.none;news.none;/' < /etc/syslog.conf > /etc/syslog.conf.inn
mv /etc/syslog.conf.inn /etc/syslog.conf
echo '' \
>> /etc/syslog.conf
echo '#' \
>> /etc/syslog.conf
echo '# INN' \
>> /etc/syslog.conf
echo '#' \
>> /etc/syslog.conf
echo 'news.=crit /home/news/log/news.crit' >> /etc/syslog.conf
echo 'news.=err /home/news/log/news.err' >> /etc/syslog.conf
echo 'news.notice /home/news/log/news.notice' >> /etc/syslog.conf
fi
if [ -f /var/run/syslogd.pid ]; then
kill -HUP `cat /var/run/syslogd.pid` 2> /dev/null ||:
fi
fi
%preun
if [ $1 = 0 ]; then
service innd stop > /dev/null 2>&1
/sbin/chkconfig --del innd
if [ -f /home/news/db/history.dir ]; then
rm -f /home/news/db/history.*
fi
fi
%postun
/sbin/ldconfig
if [ "$1" -ge 1 ]; then
service innd condrestart > /dev/null 2>&1
fi
exit 0
%files -f files.main
%defattr(-,news,news,-)
%dir /usr/lib/news
%dir /usr/lib/news/bin
%dir /usr/lib/news/doc
%dir /usr/lib/news/lib
%dir /usr/lib/news/bin/rnews.libexec
%dir /usr/lib/news/bin/auth
%dir /usr/lib/news/bin/auth/passwd
%dir /usr/lib/news/bin/auth/resolv
%dir /usr/lib/news/bin/filter
%dir /usr/lib/news/bin/control
%if "(_libdir}" != "/usr/lib"
%dir %{_libdir}/news
%endif
%dir /etc/news/
%dir /home/news
%dir /home/news/archive
%dir /home/news/articles
%attr(0775,news,news) %dir /home/news/incoming
%attr(0775,news,news) %dir /home/news/incoming/bad
%dir /home/news/innfeed
%dir /home/news/outgoing
%dir /home/news/overview
%dir /home/news/log
%dir /home/news/log/OLD
%dir /home/news/db
%dir /home/news/db/tmp
%dir /var/run/news
%defattr(-,root,root)
%{_mandir}/man1/c*.1.gz
%{_mandir}/man1/f*.1.gz
%{_mandir}/man1/g*.1.gz
%{_mandir}/man1/inn*.1.gz
%{_mandir}/man1/n*.1.gz
%{_mandir}/man1/p*.1.gz
%{_mandir}/man1/r*.1.gz
%{_mandir}/man1/s*.1.gz
%{_mandir}/man[58]/*
%doc NEWS README* ChangeLog CONTRIBUTORS LICENSE INSTALL
%doc %dir samples
%files devel -f files.devel
%defattr(-,root,root)
%{_mandir}/man3/*
%files -n inews
%defattr(-,root,root)
%config(noreplace) /etc/news/inn.conf
/usr/bin/inews
%attr(0755,root,root) /usr/lib/news/bin/inews
%{_mandir}/man1/inews*
%changelog
Sa 3. Jan 06:20:56 CET 2009 Arnold Schiller news@news2.open-news-network.org Opennewsversion mit patch fillter_nnrpd.pl
Nicht definiert