summaryrefslogtreecommitdiff
path: root/doc/src/quickstart-firewall.html
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/quickstart-firewall.html')
-rw-r--r--doc/src/quickstart-firewall.html187
1 files changed, 187 insertions, 0 deletions
diff --git a/doc/src/quickstart-firewall.html b/doc/src/quickstart-firewall.html
new file mode 100644
index 000000000..53c27b5af
--- /dev/null
+++ b/doc/src/quickstart-firewall.html
@@ -0,0 +1,187 @@
+<html>
+<head>
+ <meta http-equiv="Content-Type" content="text/html">
+ <title>Quick FreeS/WAN installation and configuration</title>
+ <meta name="keywords"
+ content="Linux, IPsec, VPN, security, FreeSWAN, installation, quickstart">
+ <!--
+
+ Written by Sandy Harris for the Linux FreeS/WAN project
+ Revised by Claudia Schmeing for same
+ Freely distributable under the GNU General Public License
+
+ More information at www.freeswan.org
+ Feedback to users@lists.freeswan.org
+
+ RCS ID: $Id: quickstart-firewall.html,v 1.1 2004/03/15 20:35:24 as Exp $
+ Last changed: $Date: 2004/03/15 20:35:24 $
+ Revision number: $Revision: 1.1 $
+
+ CVS revision numbers do not correspond to FreeS/WAN release numbers.
+ -->
+</head>
+<BODY>
+<H1><A name="quick_firewall">FreeS/WAN quick start on firewalling</A></H1>
+<P>This firewalling information supplements our
+<A HREF="quickstart.html#quick_guide">quickstart guide.</A></P>
+<P>It includes tips for firewalling:</P>
+<UL>
+<LI><A HREF="#firewall.standalone">a standalone system with initiator-only
+opportunism</A></LI>
+<LI><A HREF="#incoming.opp.firewall">incoming opportunistic connections</A></LI>
+<LI><A HREF="#opp.gate.firewall">an opportunistic gateway</A></LI>
+</UL>
+<P>and a list of helpful <A HREF="#resources">resources</A>.</P>
+<H2><A name="firewall.standalone">Firewalling a standalone system</A></H2>
+<P>Firewall rules on a standalone system doing IPsec can be very simple.</P>
+<P>The first step is to allow IPsec packets (IKE on UDP port 500 plus
+ ESP, protocol 50) in and out of your gateway. A script to set up
+ iptables(8) rules for this is:</P>
+<PRE># edit this line to match the interface you use as default route
+# ppp0 is correct for many modem, DSL or cable connections
+# but perhaps not for you
+world=ppp0
+#
+# allow IPsec
+#
+# IKE negotiations
+iptables -A INPUT -p udp -i $world --sport 500 --dport 500 -j ACCEPT
+iptables -A OUTPUT -p udp -o $world --sport 500 --dport 500 -j ACCEPT
+# ESP encryption and authentication
+iptables -A INPUT -p 50 -i $world -j ACCEPT
+iptables -A OUTPUT -p 50 -o $world -j ACCEPT</PRE>
+<P>Optionally, you could restrict this, allowing these packets only to
+ and from a list of known gateways.</P>
+<P>A second firewalling step -- access controls built into the IPsec
+ protocols -- is automatically applied:</P>
+<DL>
+<DT><A href="glossary.html#Pluto">Pluto</A> -- the FreeS/WAN keying
+ daemon -- deals with the IKE packets.</DT>
+<DD>Pluto authenticates its partners during the IKE negotiation, and
+ drops negotiation if authentication fails.</DD>
+<DT><A href="glossary.html#KLIPS">KLIPS</A> -- the FreeS/WAN kernel
+ component -- handles the ESP packets.</DT>
+<DD>
+<DL>
+<DT>KLIPS drops outgoing packets</DT>
+<DD>if they are routed to IPsec, but no tunnel has been negotiated for
+ them</DD>
+<DT>KLIPS drops incoming unencrypted packets</DT>
+<DD>if source and destination addresses match a tunnel; the packets
+ should have been encrypted</DD>
+<DT>KLIPS drops incoming encrypted packets</DT>
+<DD>if source and destination address do not match the negotiated
+ parameters of the tunnel that delivers them</DD>
+<DD>if packet-level authentication fails</DD>
+</DL>
+</DD>
+</DL>
+<P>These errors are logged. See our <A href="trouble.html">
+ troubleshooting</A> document for details.</P>
+<P>As an optional third step, you may wish to filter packets emerging from
+ your opportunistic tunnels.
+ These packets arrive on an interface such as <VAR>ipsec0</VAR>, rather than
+ <VAR>eth0</VAR>, <VAR>ppp0</VAR> or whatever. For example, in an iptables(8)
+ rule set, you would use:</P>
+<DL>
+<DT><VAR>-i ipsec+</VAR></DT>
+<DD>to specify packets arriving on any ipsec device</DD>
+<DT><VAR>-o ipsec+</VAR></DT>
+<DD>to specify packets leaving via any ipsec device</DD>
+</DL>
+<P>In this way, you can apply whatever additional filtering you like to these
+packets.</P>
+<P>The packets emerging on <VAR>ipsec0</VAR> are likely
+ to be things that a client application on your machine requested: web
+ pages, e-mail, file transfers and so on. However, any time you initiate
+ an opportunistic connection, you open a two-way connection to
+ another machine (or network). It is conceivable that a Bad Guy there
+ could take advantage of your link.</P>
+<P>For more information, read the next section.</P>
+</P>
+<H2><A name="incoming.opp.firewall">Firewalling incoming opportunistic
+ connections</A></H2>
+<P>The basic firewalling for IPsec does not change when you support
+ incoming connections as well as connections you initiate. You must
+ still allow IKE (UDP port 500) and ESP (protocol 50) packets to and
+ from your machine, as in the rules given <A href="#firewall.standalone">
+ above</A>.</P>
+<P>However, there is an additional security concern when you allow
+ incoming opportunistic connections. Incoming opportunistic packets
+ enter your machine via an IPSec tunnel. That is, they all appear as
+ ESP (protocol 50) packets, concealing whatever port and protocol
+ characteristics the packet within the tunnel has. Contained
+ in the tunnel as they pass through <VAR>ppp0</VAR> or <VAR>eth0</VAR>,
+ these packets can bypass your usual firewall rules on these interfaces.
+<P>Consequently, you will want to firewall your <VAR>ipsec</VAR> interfaces
+ the way you would any publicly accessible interface.</P>
+<P>A simple way to do this is to create one iptables(8) table with
+ all your filtering rules for incoming packets, and apply the entire table to
+ all public interfaces, including <VAR>ipsec</VAR> interfaces.</P>
+
+<H2><A name="opp.gate.firewall">Firewalling for opportunistic gateways</A></H2>
+<P>On a gateway, the IPsec-related firewall rules applied for input and
+ output on the Internet side are exactly as shown
+<A HREF="#firewall.standalone">above</A>. A gateway
+ exchanges exactly the same things -- UDP 500 packets and IPsec packets
+ -- with other gateways that a standalone system does, so it can use
+ exactly the same firewall rules as a standalone system would.</P>
+<P>However, on a gateway there are additional things to do:</P>
+<UL>
+<LI>you have other interfaces and need rules for them</LI>
+<LI>packets emerging from ipsec processing must be correctly forwarded</LI>
+</UL>
+<P>You need additional rules to handle these things. For example, adding
+ some rules to the set shown above we get:</P>
+<PRE># edit this line to match the interface you use as default route
+# ppp0 is correct for many modem, DSL or cable connections
+# but perhaps not for you
+world=ppp0
+#
+# edit these lines to describe your internal subnet and interface
+localnet=42.42.42.0/24
+internal=eth1
+#
+# allow IPsec
+#
+# IKE negotiations
+iptables -A INPUT -p udp -i $world --sport 500 --dport 500 -j ACCEPT
+iptables -A OUTPUT -p udp -o $world --sport 500 --dport 500 -j ACCEPT
+# ESP encryption and authentication
+iptables -A INPUT -p 50 -i $world -j ACCEPT
+iptables -A OUTPUT -p 50 -o $world -j ACCEPT
+#
+# packet forwarding for an IPsec gateway
+# simplest possible rules
+$ forward everything, with no attempt to filter
+#
+# handle packets emerging from IPsec
+# ipsec+ means any of ipsec0, ipsec1, ...
+iptables -A FORWARD -d $localnet -i ipsec+ -j ACCEPT
+# simple rule for outbound packets
+# let local net send anything
+# IPsec will encrypt some of it
+iptables -A FORWARD -s $localnet -i $internal -j ACCEPT </PRE>
+<P>On a production gateway, you would no doubt need tighter rules than
+ the above.</P>
+<H2><A NAME="resources">Firewall resources</A></H2>
+<P>For more information, see these handy resources:</P>
+<UL>
+<LI><A href="http://www.netfilter.org/documentation/">netfilter
+ documentation</A></LI>
+<LI>books such as:
+<UL>
+<LI>Cheswick and Bellovin, <A href="biblio.html#firewall.book">Firewalls
+ and Internet Security</A></LI>
+<LI>Zeigler, <A href="biblio.html#Zeigler">Linux Firewalls</A>,</LI>
+</UL>
+</LI>
+<LI><A href="firewall.html#firewall">our firewalls document</A></LI>
+<LI><A href="web.html#firewall.web">our firewall links</A></LI>
+</UL>
+<A HREF="quickstart.html#quick.firewall">Back to our quickstart guide.</A>
+</BODY>
+</HTML>
+
+
+