xref: /minix3/usr.sbin/syslogd/index.html (revision 3e07920fe2355e64a2f9017c962f62d77d988a44)
1*3e07920fSDavid van Moolenbroek<html>
2*3e07920fSDavid van Moolenbroek<head>
3*3e07920fSDavid van Moolenbroek<title>NetBSD &amp; Google's Summer of Code: Martin Schuette - Improve syslogd (syslogd)</title>
4*3e07920fSDavid van Moolenbroek</head>
5*3e07920fSDavid van Moolenbroek<body>
6*3e07920fSDavid van Moolenbroek
7*3e07920fSDavid van Moolenbroek<center>
8*3e07920fSDavid van Moolenbroek<table>
9*3e07920fSDavid van Moolenbroek<tr>
10*3e07920fSDavid van Moolenbroek        <td><a href="http://www.NetBSD.org/"><img border=0 valign="top" src="../../NetBSD.png" alt="[NetBSD logo]" /></a></td>
11*3e07920fSDavid van Moolenbroek        <td><font size="+5">&nbsp;&nbsp;&nbsp;&amp;&nbsp;&nbsp;&nbsp;</font></td>
12*3e07920fSDavid van Moolenbroek        <td><a href="http://www.google.com/"><img border=0 valign="bottom" src="http://www.google.com/intl/en/images/logo.gif" alt="[Google logo]" /></a></td>
13*3e07920fSDavid van Moolenbroek</tr>
14*3e07920fSDavid van Moolenbroek</table>
15*3e07920fSDavid van Moolenbroek</center>
16*3e07920fSDavid van Moolenbroek
17*3e07920fSDavid van Moolenbroek<h1>NetBSD-SoC: Improve syslogd</h1>
18*3e07920fSDavid van Moolenbroek
19*3e07920fSDavid van Moolenbroek<h2>What is it?</h2>
20*3e07920fSDavid van Moolenbroek
21*3e07920fSDavid van Moolenbroek<p>The syslog daemon handles most log messages of a unixoid system. It receives messages from shell-scripts, applications, daemons, the kernel, or by network and then writes them into logfiles, on user's consoles or forwards them to some other logserver -- all depending on its configuration and the message properties.</p>
22*3e07920fSDavid van Moolenbroek
23*3e07920fSDavid van Moolenbroek<p>implemented the upcoming <a class="ext-link" href="http://tools.ietf.org/wg/syslog/">IETF
24*3e07920fSDavid van Moolenbroekstandards</a> for <a class="ext-link" href="http://www.netbsd.org/">NetBSD</a>'s syslog(3)
25*3e07920fSDavid van Moolenbroekand syslogd(8):
26*3e07920fSDavid van Moolenbroek</p>
27*3e07920fSDavid van Moolenbroek<ul><li><a class="ext-link"
28*3e07920fSDavid van Moolenbroek		href="http://tools.ietf.org/html/draft-ietf-syslog-transport-tls"><span
29*3e07920fSDavid van Moolenbroek			class="icon">transport-tls</span></a> defines the network protocol to send
30*3e07920fSDavid van Moolenbroek	syslog data over TLS (instead of UDP), thus providing a reliable and
31*3e07920fSDavid van Moolenbroek	authenticated transport.
32*3e07920fSDavid van Moolenbroek	</li><li><a class="ext-link"
33*3e07920fSDavid van Moolenbroek	href="http://tools.ietf.org/html/draft-ietf-syslog-protocol"><span
34*3e07920fSDavid van Moolenbroek		class="icon">syslog-protocol</span></a> defines a new layout for syslog
35*3e07920fSDavid van Moolenbroeklines; the most important additions are full timestamps (with year and timezone)
36*3e07920fSDavid van Moolenbroekand structured data with name=value pairs. This enables all programs to declare
37*3e07920fSDavid van Moolenbroeksemantic content (uid, client IP, return codes, etc), making automatic
38*3e07920fSDavid van Moolenbroeklog-monitoring (or at least parsing) much easier.
39*3e07920fSDavid van Moolenbroek</li><li><a class="ext-link"
40*3e07920fSDavid van Moolenbroekhref="http://tools.ietf.org/html/draft-ietf-syslog-sign"><span
41*3e07920fSDavid van Moolenbroek	class="icon">syslog-sign</span></a> defines signature messages to assert
42*3e07920fSDavid van Moolenbroek	authentication, integrity and correct sequencing of syslog messages.
43*3e07920fSDavid van Moolenbroek</li></ul><p>
44*3e07920fSDavid van Moolenbroek	To my knowledge this is one of the first implementations of these
45*3e07920fSDavid van Moolenbroek	protocols. It will provide NetBSD (and hopefully the other BSDs as well) with
46*3e07920fSDavid van Moolenbroek	an advanced, reliable, and secure syslogd; thus saving admins the time and
47*3e07920fSDavid van Moolenbroek	effort to install custom logging solutions just to get secure transport to
48*3e07920fSDavid van Moolenbroek	their central logserver.
49*3e07920fSDavid van Moolenbroek</p>
50*3e07920fSDavid van Moolenbroek
51*3e07920fSDavid van Moolenbroek<h2>Current Status</h2>
52*3e07920fSDavid van Moolenbroek<h3>Functions</h3>
53*3e07920fSDavid van Moolenbroek<h4>TLS</h4>
54*3e07920fSDavid van Moolenbroek<p>The TLS support is now working (tested with RSA and DSA keys).
55*3e07920fSDavid van MoolenbroekIt will read its configuration from syslog.conf, accept incoming TLS connections
56*3e07920fSDavid van Moolenbroekto receive messages, establish connections to other TLS servers.</p>
57*3e07920fSDavid van Moolenbroek<p>If a TLS server is temporarily not available then its messages will be buffered
58*3e07920fSDavid van Moolenbroekand sent after reconnection.</p>
59*3e07920fSDavid van Moolenbroek
60*3e07920fSDavid van Moolenbroek<h4>syslog-protocol</h4>
61*3e07920fSDavid van Moolenbroek<p>A command line option determines whether syslogd output is in BSD Syslog or in syslog-protocol format. All received messages are converted accordingly.</p>
62*3e07920fSDavid van Moolenbroek<p>I also modified syslog(3) in libc to send syslog-protocol messages.</p>
63*3e07920fSDavid van Moolenbroek<p>While syslog(3) can only use the message field, a new syslogp(3) call is provided to add a MSGID and structured data to a message.</p>
64*3e07920fSDavid van Moolenbroek
65*3e07920fSDavid van Moolenbroek<h4>syslog-sign</h4>
66*3e07920fSDavid van Moolenbroek<p>syslogd(8) is now able to <a href="sign.html">digitally sign messages with syslog-sign.</a></p>
67*3e07920fSDavid van Moolenbroek
68*3e07920fSDavid van Moolenbroek<h3>syslog.conf</h3>
69*3e07920fSDavid van Moolenbroek<p>I extended the traditional configuration file format to support additionally fields for TLS.
70*3e07920fSDavid van MoolenbroekA syslog.conf for TLS currently looks like this:</p>
71*3e07920fSDavid van Moolenbroek<pre>
72*3e07920fSDavid van Moolenbroek# TLS options
73*3e07920fSDavid van Moolenbroektls_ca="/etc/my.cacert"
74*3e07920fSDavid van Moolenbroektls_cert="/etc/localhost.crt"
75*3e07920fSDavid van Moolenbroektls_key="/etc/localhost.key"
76*3e07920fSDavid van Moolenbroektls_verify="off"
77*3e07920fSDavid van Moolenbroektls_bindhost="127.0.0.1"
78*3e07920fSDavid van Moolenbroektls_bindport="13245"
79*3e07920fSDavid van Moolenbroektls_server=on
80*3e07920fSDavid van Moolenbroek
81*3e07920fSDavid van Moolenbroek# file destination
82*3e07920fSDavid van Moolenbroek*.*      /home/mschuett/test.log
83*3e07920fSDavid van Moolenbroek# UDP destination
84*3e07920fSDavid van Moolenbroek*.*      @192.168.178.5
85*3e07920fSDavid van Moolenbroek# TLS destination
86*3e07920fSDavid van Moolenbroek*.*      @[127.0.0.1]:5555(fingerprint="SHA1:E4:E1:A6:1C:D4:31:D7:D4:9B:B8:DC:DF:DD:CE:30:71:46:00:92:C9")
87*3e07920fSDavid van Moolenbroek</pre>
88*3e07920fSDavid van Moolenbroek
89*3e07920fSDavid van Moolenbroek<h3>Source Code</h3>
90*3e07920fSDavid van Moolenbroek<p>To try syslogd fetch the latest <a href="http://mschuette.name/files/syslogd_080818.tar.gz">.tar.gz archive (2008-08-18)</a> (older versions: <a href="http://mschuette.name/files/syslogd_080805.tar.gz">2008-08-05</a>, <a href="http://mschuette.name/files/syslogd-tls.tar.gz">2008-08-05</a>).</p>
91*3e07920fSDavid van Moolenbroek
92*3e07920fSDavid van Moolenbroek<p>The sources for <a href="http://netbsd-soc.cvs.sourceforge.net/netbsd-soc/syslogd/src/">syslogd</a>, the <a href="http://netbsd-soc.cvs.sourceforge.net/netbsd-soc/syslogd/src-libc_gen/">libc functions</a>, <a href="http://netbsd-soc.cvs.sourceforge.net/netbsd-soc/syslogd/src-newsyslog/">newsyslog</a>, and <a href="http://netbsd-soc.cvs.sourceforge.net/netbsd-soc/syslogd/src-logger/">logger</a> are also available from the <a href="http://netbsd-soc.cvs.sourceforge.net/netbsd-soc/syslogd/">CVS on sourceforge</a>.</p>
93*3e07920fSDavid van Moolenbroek
94*3e07920fSDavid van Moolenbroek<p>For development I used an own <a href="https://anonymous:anonymous@barney.cs.uni-potsdam.de/svn/syslogd/trunk/src/">SVN</a>; a detailed timeline of code changes is available in the <a href="https://barney.cs.uni-potsdam.de/trac/syslogd/timeline">on my Trac</a>.</p>
95*3e07920fSDavid van Moolenbroek
96*3e07920fSDavid van Moolenbroek<p>The syslogd code needs <a href="http://www.openssl.org/ OpenSSL"></a> and <a href="http://www.monkey.org/~provos/libevent/">libevent</a>. The only system-dependent function is wallmsg() to write messages to users's terminals.<br/>
97*3e07920fSDavid van MoolenbroekIt was developed and tested on NetBSD and FreeBSD. I heard it does not compile on OpenBSD (I do not know about DragonflyBSD), probably due to different files under /usr/include. I would be interested if someone tried to compile on Linux; this will be some more work, because one will also need additional functions from BSDs libc that are not in glibc (most notably strlcat()).</p>
98*3e07920fSDavid van Moolenbroek
99*3e07920fSDavid van Moolenbroek<h2>Deliverables</h2>
100*3e07920fSDavid van Moolenbroek<p>
101*3e07920fSDavid van MoolenbroekI got all my <b>mandatory components</b>:
102*3e07920fSDavid van Moolenbroek</p>
103*3e07920fSDavid van Moolenbroek<ul>
104*3e07920fSDavid van Moolenbroek	<li>Implement transport-tls in syslogd(8)</li>
105*3e07920fSDavid van Moolenbroek	<li>Implement syslog-protocol in syslogd(8)</li>
106*3e07920fSDavid van Moolenbroek	<li>Implement syslog-protocol in syslog(3)</li>
107*3e07920fSDavid van Moolenbroek	<li>Implement syslog-sign in syslogd(8)</li>
108*3e07920fSDavid van Moolenbroek</ul>
109*3e07920fSDavid van Moolenbroek<p>
110*3e07920fSDavid van Moolenbroek...and parts of my <b>optional components</b>:
111*3e07920fSDavid van Moolenbroek</p>
112*3e07920fSDavid van Moolenbroek<ul>
113*3e07920fSDavid van Moolenbroek	<li>interoperability with other implementations: so far I could only test TLS-transport with rsyslog</li>
114*3e07920fSDavid van Moolenbroek	<li>Extended API to use new functions: with syslogp() I wrote a new API; but it is not really the extended API I had in mind here.</li>
115*3e07920fSDavid van Moolenbroek</ul>
116*3e07920fSDavid van Moolenbroek
117*3e07920fSDavid van Moolenbroek<h2>Documentation</h2>
118*3e07920fSDavid van Moolenbroek
119*3e07920fSDavid van Moolenbroek<p>New manpages and description:</p>
120*3e07920fSDavid van Moolenbroek<ul>
121*3e07920fSDavid van Moolenbroek	<li>my <a href="./doc/syslogd.8.html">syslogd(8)</a></li>
122*3e07920fSDavid van Moolenbroek	<li>my <a href="./doc/syslog.conf.5.html">syslog.conf(5)</a></li>
123*3e07920fSDavid van Moolenbroek	<li>my <a href="./doc/syslog.3.html">syslog(3)/syslogp(3)</a></li>
124*3e07920fSDavid van Moolenbroek	<li><a href="howto.html">How-To configure a TLS transport</a></li>
125*3e07920fSDavid van Moolenbroek	<li><a href="sign.html">Overview of syslog-sign and its usage</a></li>
126*3e07920fSDavid van Moolenbroek</ul>
127*3e07920fSDavid van Moolenbroek
128*3e07920fSDavid van Moolenbroek<p>Existing specifications and man-pages:</p>
129*3e07920fSDavid van Moolenbroek<ul>
130*3e07920fSDavid van Moolenbroek	<li><a href="http://tools.ietf.org/html/rfc3164">RFC3164: The BSD syslog Protocol</a></li>
131*3e07920fSDavid van Moolenbroek	<li><a href="http://netbsd.gw.com/cgi-bin/man-cgi?syslogd++NetBSD-current">syslogd(8)</a></li>
132*3e07920fSDavid van Moolenbroek	<li><a href="http://netbsd.gw.com/cgi-bin/man-cgi?syslog.conf+5+NetBSD-current">syslog.conf(5)</a></li>
133*3e07920fSDavid van Moolenbroek	<li><a href="http://netbsd.gw.com/cgi-bin/man-cgi?syslog+3+NetBSD-current">syslog(3)</a></li>
134*3e07920fSDavid van Moolenbroek	<li><a href="http://www.opengroup.org/onlinepubs/009695399/basedefs/syslog.h.html">SUS on syslog.h</a></li>
135*3e07920fSDavid van Moolenbroek	<li><a href="http://www.opengroup.org/onlinepubs/009695399/functions/syslog.html">SUS on syslog()</a></li>
136*3e07920fSDavid van Moolenbroek</ul>
137*3e07920fSDavid van Moolenbroek
138*3e07920fSDavid van Moolenbroek<p>IETF documents:</p>
139*3e07920fSDavid van Moolenbroek<ul>
140*3e07920fSDavid van Moolenbroek	<li><a href="http://tools.ietf.org/html/draft-ietf-syslog-transport-udp">Transmission of syslog messages over UDP (draft-ietf-syslog-transport-udp)</a></li>
141*3e07920fSDavid van Moolenbroek	<li><a href="http://tools.ietf.org/html/draft-ietf-syslog-transport-tls">TLS Transport Mapping for Syslog (draft-ietf-syslog-transport-tls)</a></li>
142*3e07920fSDavid van Moolenbroek	<li><a href="http://tools.ietf.org/html/draft-ietf-syslog-protocol">The syslog Protocol (draft-ietf-syslog-protocol)</a></li>
143*3e07920fSDavid van Moolenbroek	<li><a href="http://tools.ietf.org/html/draft-ietf-syslog-sign">Signed syslog Messages (draft-ietf-syslog-sign)</a></li>
144*3e07920fSDavid van Moolenbroek</ul>
145*3e07920fSDavid van Moolenbroek
146*3e07920fSDavid van Moolenbroek<hr>
147*3e07920fSDavid van Moolenbroek
148*3e07920fSDavid van Moolenbroek<table border=0>
149*3e07920fSDavid van Moolenbroek<tr>
150*3e07920fSDavid van Moolenbroek<td>
151*3e07920fSDavid van Moolenbroek<a href="http://sourceforge.net"><img align="top" src="http://sourceforge.net/sflogo.php?group_id=141771&amp;type=2" width="125" height="37" border="0" alt="SourceForge.net Logo" /></a>
152*3e07920fSDavid van Moolenbroek<td>
153*3e07920fSDavid van Moolenbroek  <table>
154*3e07920fSDavid van Moolenbroek  <tr> <td> Martin Sch&uuml;tte &lt;<tt>info@mschuette.name</tt>&gt; </td> </tr>
155*3e07920fSDavid van Moolenbroek  <tr> <td> $Id: index.html,v 1.1 2008/10/31 16:12:19 christos Exp $ </td> </tr>
156*3e07920fSDavid van Moolenbroek  </table>
157*3e07920fSDavid van Moolenbroek</tr>
158*3e07920fSDavid van Moolenbroek</table>
159*3e07920fSDavid van Moolenbroek
160*3e07920fSDavid van Moolenbroek</body>
161*3e07920fSDavid van Moolenbroek</html>
162