summaryrefslogtreecommitdiff
path: root/doc/kernel.html
diff options
context:
space:
mode:
Diffstat (limited to 'doc/kernel.html')
-rw-r--r--doc/kernel.html353
1 files changed, 353 insertions, 0 deletions
diff --git a/doc/kernel.html b/doc/kernel.html
new file mode 100644
index 000000000..de305683a
--- /dev/null
+++ b/doc/kernel.html
@@ -0,0 +1,353 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<HTML>
+<HEAD>
+<TITLE>Introduction to FreeS/WAN</TITLE>
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=iso-8859-1">
+<STYLE TYPE="text/css"><!--
+BODY { font-family: serif }
+H1 { font-family: sans-serif }
+H2 { font-family: sans-serif }
+H3 { font-family: sans-serif }
+H4 { font-family: sans-serif }
+H5 { font-family: sans-serif }
+H6 { font-family: sans-serif }
+SUB { font-size: smaller }
+SUP { font-size: smaller }
+PRE { font-family: monospace }
+--></STYLE>
+</HEAD>
+<BODY>
+<A HREF="toc.html">Contents</A>
+<A HREF="testing.html">Previous</A>
+<A HREF="adv_config.html">Next</A>
+<HR>
+<H1><A name="kernelconfig">Kernel configuration for FreeS/WAN</A></H1>
+<P> This section lists many of the options available when configuring a
+ Linux kernel, and explains how they should be set on a FreeS/WAN IPsec
+ gateway.</P>
+<H2><A name="notall">Not everyone needs to worry about kernel
+ configuration</A></H2>
+<P>Note that in many cases you do not need to mess with these.</P>
+<P> You may have a Linux distribution which comes with FreeS/WAN
+ installed (see this<A href="intro.html#products"> list</A>). In that
+ case, you need not do a FreeS/WAN installation or a kernel
+ configuration. Of course, you might still want to configure and rebuild
+ your kernel to improve performance or security. This can be done with
+ standard tools described in the<A href="http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html">
+ Kernel HowTo</A>.</P>
+<P>If you need to install FreeS/WAN, then you do need to configure a
+ kernel. However, you may choose to do that using the simplest
+ procedure:</P>
+<UL>
+<LI>Configure, build and test a kernel for your system before adding
+ FreeS/WAN. See the<A href="http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html">
+ Kernel HowTo</A> for details.<STRONG> This step cannot be skipped</STRONG>
+. FreeS/WAN needs the results of your configuration.</LI>
+<LI>Then use FreeS/WAN's<VAR> make oldgo</VAR> command. This sets
+ everything FreeS/WAN needs and retains your values everywhere else.</LI>
+</UL>
+<P> This document is for those who choose to configure their FreeS/WAN
+ kernel themselves.</P>
+<H2><A name="assume">Assumptions and notation</A></H2>
+<P> Help text for most kernel options is included with the kernel files,
+ and is accessible from within the configuration utilities. We assume
+ you will refer to that, and to the<A href="http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html">
+ Kernel HowTo</A>, as necessary. This document covers only the
+ FreeS/WAN-specific aspects of the problem.</P>
+<P> To avoid duplication, this document section does not cover settings
+ for the additional IPsec-related kernel options which become available
+ after you have patched your kernel with FreeS/WAN patches. There is
+ help text for those available from within the configuration utility.</P>
+<P> We assume a common configuration in which the FreeS/WAN IPsec
+ gateway is also doing ipchains(8) firewalling for a local network, and
+ possibly masquerading as well.</P>
+<P> Some suggestions below are labelled as appropriate for &quot;a true
+ paranoid&quot;. By this we mean they may cause inconvenience and it is not
+ entirely clear they are necessary, but they appear to be the safest
+ choice. Not using them might entail some risk. Of course one suggested
+ mantra for security administrators is: &quot;I know I'm paranoid. I wonder
+ if I'm paranoid enough.&quot;</P>
+<H3><A name="labels">Labels used</A></H3>
+<P> Six labels are used to indicate how options should be set. We mark
+ the labels with [square brackets]. For two of these labels, you have no
+ choice:</P>
+<DL>
+<DT>[required]</DT>
+<DD>essential for FreeS/WAN operation.</DD>
+<DT>[incompatible]</DT>
+<DD>incompatible with FreeS/WAN.</DD>
+</DL>
+<P>those must be set correctly or FreeS/WAN will not work</P>
+<P>FreeS/WAN should work with any settings of the others, though of
+ course not all combinations have been tested. We do label these in
+ various ways, but<EM> these labels are only suggestions</EM>.</P>
+<DL>
+<DT>[recommended]</DT>
+<DD>useful on most FreeS/WAN gateways</DD>
+<DT>[disable]</DT>
+<DD>an unwelcome complication on a FreeS/WAN gateway.</DD>
+<DT>[optional]</DT>
+<DD>Your choice. We outline issues you might consider.</DD>
+<DT>[anything]</DT>
+<DD>This option has no direct effect on FreeS/WAN and related tools, so
+ you should be able to set it as you please.</DD>
+</DL>
+<P> Of course complexity is an enemy in any effort to build secure
+ systems.<STRONG> For maximum security, any feature that can reasonably
+ be turned off should be</STRONG>. &quot;If in doubt, leave it out.&quot;</P>
+<H2><A name="kernelopt">Kernel options for FreeS/WAN</A></H2>
+<P> Indentation is based on the nesting shown by 'make menuconfig' with
+ a 2.2.16 kernel for the i386 architecture.</P>
+<DL>
+<DT><A name="maturity">Code maturity and level options</A></DT>
+<DD>
+<DL>
+<DT><A name="devel">Prompt for development ... code/drivers</A></DT>
+<DD>[optional] If this is<VAR> no</VAR>, experimental drivers are not
+ shown in later menus.
+<P>For most FreeS/WAN work,<VAR> no</VAR> is the preferred setting.
+ Using new or untested components is too risky for a security gateway.</P>
+<P>However, for some hardware (such as the author's network cards) the
+ only drivers available are marked<VAR> new/experimental</VAR>. In such
+ cases, you must enable this option or your cards will not appear under
+ &quot;network device support&quot;. A true paranoid would leave this option off
+ and replace the cards.</P>
+</DD>
+<DT>Processor type and features</DT>
+<DD>[anything]</DD>
+<DT>Loadable module support</DT>
+<DD>
+<DL>
+<DT>Enable loadable module support</DT>
+<DD>[optional] A true paranoid would disable this. An attacker who has
+ root access to your machine can fairly easily install a bogus module
+ that does awful things, provided modules are enabled. A common tool for
+ attackers is a &quot;rootkit&quot;, a set of tools the attacker uses once he or
+ she has become root on your system. The kit introduces assorted
+ additional compromises so that the attacker will continue to &quot;own&quot; your
+ system despite most things you might do to recovery the situation. For
+ Linux, there is a tool called<A href="http://www.sans.org/newlook/resources/IDFAQ/knark.htm">
+ knark</A> which is basically a rootkit packaged as a kernel module.
+<P>With modules disabled, an attacker cannot install a bogus module. The
+ only way he can achieve the same effects is to install a new kernel and
+ reboot. This is considerably more likely to be noticed.</P>
+<P>Many FreeS/WAN gateways run with modules enabled. This simplifies
+ some administrative tasks and some ipchains features are available only
+ as modules. Once an enemy has root on your machine your security is
+ nil, so arguably defenses which come into play only in that situation
+ are pointless.</P>
+<P></P>
+</DD>
+<DT>Set version information ....</DT>
+<DD>[optional] This provides a check to prevent loading modules compiled
+ for a different kernel.</DD>
+<DT>Kernel module loader</DT>
+<DD>[disable] It gives little benefit on a typical FreeS/WAN gate and
+ entails some risk.</DD>
+</DL>
+</DD>
+<DT>General setup</DT>
+<DD>We list here only the options that matter for FreeS/WAN.
+<DL>
+<DT>Networking support</DT>
+<DD>[required]</DD>
+<DT>Sysctl interface</DT>
+<DD>[optional] If this option is turned on and the<VAR> /proc</VAR>
+ filesystem installed, then you can control various system behaviours by
+ writing to files under<VAR> /proc/sys</VAR>. For example:
+<PRE> echo 1 &gt; /proc/sys/net/ipv4/ipforward</PRE>
+ turns IP forwarding on.
+<P>Disabling this option breaks many firewall scripts. A true paranoid
+ would disable it anyway since it might conceivably be of use to an
+ attacker.</P>
+</DD>
+</DL>
+</DD>
+<DT>Plug and Play support</DT>
+<DD>[anything]</DD>
+<DT>Block devices</DT>
+<DD>[anything]</DD>
+<DT>Networking options</DT>
+<DD>
+<DL>
+<DT>Packet socket</DT>
+<DD>[optional] This kernel feature supports tools such as tcpdump(8)
+ which communicate directly with network hardware, bypassing kernel
+ protocols. This is very much a two-edged sword:
+<UL>
+<LI>such tools can be very useful to the firewall admin, especially
+ during initial testing</LI>
+<LI>should an evildoer breach your firewall, such tools could give him
+ or her a great deal of information about the rest of your network</LI>
+</UL>
+ We recommend disabling this option on production gateways.</DD>
+<DT><A name="netlink">Kernel/User netlink socket</A></DT>
+<DD>[optional] Required if you want to use<A href="#adv"> advanced
+ router</A> features.</DD>
+<DT>Routing messages</DT>
+<DD>[optional]</DD>
+<DT>Netlink device emulation</DT>
+<DD>[optional]</DD>
+<DT>Network firewalls</DT>
+<DD>[recommended] You need this if the IPsec gateway also functions as a
+ firewall.
+<P>Even if the IPsec gateway is not your primary firewall, we suggest
+ setting this so that you can protect the gateway with at least basic
+ local packet filters.</P>
+</DD>
+<DT>Socket filtering</DT>
+<DD>[disable] This enables an older filtering interface. We suggest
+ using ipchains(8) instead. To do that, set the &quot;Network firewalls&quot;
+ option just above, and not this one.</DD>
+<DT>Unix domain sockets</DT>
+<DD>[required] These sockets are used for communication between the<A href="manpage.d/ipsec.8.html">
+ ipsec(8)</A> commands and the<A href="manpage.d/ipsec_pluto.8.html">
+ ipsec_pluto(8)</A> daemon.</DD>
+<DT>TCP/IP networking</DT>
+<DD>[required]
+<DL>
+<DT>IP: multicasting</DT>
+<DD>[anything]</DD>
+<DT><A name="adv">IP: advanced router</A></DT>
+<DD>[optional] This gives you policy routing, which some people have
+ used to good advantage in their scripts for FreeS/WAN gateway
+ management. It is not used in our distributed scripts, so not required
+ unless you want it for custom scripts. It requires the<A href="#netlink">
+ netlink</A> interface between kernel code and the iproute2(8) command.</DD>
+<DT>IP: kernel level autoconfiguration</DT>
+<DD>[disable] It gives little benefit on a typical FreeS/WAN gate and
+ entails some risk.</DD>
+<DT>IP: firewall packet netlink device</DT>
+<DD>[disable]</DD>
+<DT>IP: transparent proxy support</DT>
+<DD>[optional] This is required in some firewall configurations, but
+ should be disabled unless you have a definite need for it.</DD>
+<DT>IP: masquerading</DT>
+<DD>[optional] Required if you want to use<A href="glossary.html#non-routable">
+ non-routable</A> private IP addresses for your local network.</DD>
+<DT>IP: Optimize as router not host</DT>
+<DD>[recommended]</DD>
+<DT>IP: tunneling</DT>
+<DD>[required]</DD>
+<DT>IP: GRE tunnels over IP</DT>
+<DD>[anything]</DD>
+<DT>IP: aliasing support</DT>
+<DD>[anything]</DD>
+<DT>IP: ARP daemon support (EXPERIMENTAL)</DT>
+<DD>Not required on most systems, but might prove useful on
+ heavily-loaded gateways.</DD>
+<DT>IP: TCP syncookie support</DT>
+<DD>[recommended] It provides a defense against a<A href="glossary.html#DOS">
+ denial of service attack</A> which uses bogus TCP connection requests
+ to waste resources on the victim machine.</DD>
+<DT>IP: Reverse ARP</DT>
+<DD></DD>
+<DT>IP: large window support</DT>
+<DD>[recommended] unless you have less than 16 meg RAM</DD>
+</DL>
+</DD>
+<DT>IPv6</DT>
+<DD>[optional] FreeS/WAN does not currently support IPv6, though work on
+ integrating FreeS/WAN with the Linux IPv6 stack has begun.<A href="compat.html#ipv6">
+ Details</A>.
+<P> It should be possible to use IPv4 FreeS/WAN on a machine which also
+ does IPv6. This combination is not yet well tested. We would be quite
+ interested in hearing results from anyone expermenting with it, via the<A
+href="mail.html"> mailing list</A>.</P>
+<P> We do not recommend using IPv6 on production FreeS/WAN gateways
+ until more testing has been done.</P>
+</DD>
+<DT>Novell IPX</DT>
+<DD>[disable]</DD>
+<DT>Appletalk</DT>
+<DD>[disable] Quite a few Linux installations use IP but also have some
+ other protocol, such as Appletalk or IPX, for communication with local
+ desktop machines. In theory it should be possible to configure IPsec
+ for the IP side of things without interfering with the second protocol.
+<P>We do not recommend this. Keep the software on your gateway as simple
+ as possible. If you need a Linux-based Appletalk or IPX server, use a
+ separate machine.</P>
+</DD>
+</DL>
+</DD>
+<DT>Telephony support</DT>
+<DD>[anything]</DD>
+<DT>SCSI support</DT>
+<DD>[anything]</DD>
+<DT>I2O device support</DT>
+<DD>[anything]</DD>
+<DT>Network device support</DT>
+<DD>[anything] should work, but there are some points to note.
+<P>The development team test almost entirely on 10 or 100 megabit
+ Ethernet and modems. In principle, any device that can do IP should be
+ just fine for IPsec, but in the real world any device that has not been
+ well-tested is somewhat risky. By all means try it, but don't bet your
+ project on it until you have solid test results.</P>
+<P>If you disabled experimental drivers in the<A href="#maturity"> Code
+ maturity</A> section above, then those drivers will not be shown here.
+ Check that option before going off to hunt for missing drivers.</P>
+<P>If you want Linux to automatically find more than one ethernet
+ interface at boot time, you need to:</P>
+<UL>
+<LI>compile the appropriate driver(s) into your kernel. Modules will not
+ work for this</LI>
+<LI>add a line such as
+<PRE>
+ append=&quot;ether=0,0,eth0 ether=0,0,eth1&quot;
+</PRE>
+ to your /etc/lilo.conf file. In some cases you may need to specify
+ parameters such as IRQ or base address. The example uses &quot;0,0&quot; for
+ these, which tells the system to search. If the search does not succeed
+ on your hardware, then you should retry with explicit parameters. See
+ the lilo.conf(5) man page for details.</LI>
+<LI>run lilo(8)</LI>
+</UL>
+ Having Linux find the cards this way is not necessary, but is usually
+ more convenient than loading modules in your boot scripts.</DD>
+<DT>Amateur radio support</DT>
+<DD>[anything]</DD>
+<DT>IrDA (infrared) support</DT>
+<DD>[anything]</DD>
+<DT>ISDN subsystem</DT>
+<DD>[anything]</DD>
+<DT>Old CDROM drivers</DT>
+<DD>[anything]</DD>
+<DT>Character devices</DT>
+<DD>The only required character device is:
+<DL>
+<DT>random(4)</DT>
+<DD>[required] This is a source of<A href="glossary.html#random"> random</A>
+ numbers which are required for many cryptographic protocols, including
+ several used in IPsec.
+<P>If you are comfortable with C source code, it is likely a good idea
+ to go in and adjust the<VAR> #define</VAR> lines in<VAR>
+ /usr/src/linux/drivers/char/random.c</VAR> to ensure that all sources
+ of randomness are enabled. Relying solely on keyboard and mouse
+ randomness is dubious procedure for a gateway machine. You could also
+ increase the randomness pool size from the default 512 bytes (128
+ 32-bit words).</P>
+</DD>
+</DL>
+</DD>
+<DT>Filesystems</DT>
+<DD>[anything] should work, but we suggest limiting a gateway machine to
+ the standard Linux ext2 filesystem in most cases.</DD>
+<DT>Network filesystems</DT>
+<DD>[disable] These systems are an unnecessary risk on an IPsec gateway.</DD>
+<DT>Console drivers</DT>
+<DD>[anything]</DD>
+<DT>Sound</DT>
+<DD>[anything] should work, but we suggest enabling sound only if you
+ plan to use audible alarms for firewall problems.</DD>
+<DT>Kernel hacking</DT>
+<DD>[disable] This might be enabled on test machines, but should not be
+ on production gateways.</DD>
+</DL>
+</DD>
+</DL>
+<HR>
+<A HREF="toc.html">Contents</A>
+<A HREF="testing.html">Previous</A>
+<A HREF="adv_config.html">Next</A>
+</BODY>
+</HTML>