summaryrefslogtreecommitdiff
path: root/static/freebsd/man7/firewall.7 3.html
diff options
context:
space:
mode:
Diffstat (limited to 'static/freebsd/man7/firewall.7 3.html')
-rw-r--r--static/freebsd/man7/firewall.7 3.html377
1 files changed, 0 insertions, 377 deletions
diff --git a/static/freebsd/man7/firewall.7 3.html b/static/freebsd/man7/firewall.7 3.html
deleted file mode 100644
index da348df4..00000000
--- a/static/freebsd/man7/firewall.7 3.html
+++ /dev/null
@@ -1,377 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">FIREWALL(7)</td>
- <td class="head-vol">Miscellaneous Information Manual</td>
- <td class="head-rtitle">FIREWALL(7)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">firewall</code> &#x2014; <span class="Nd">simple
- firewalls under FreeBSD</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FIREWALL_BASICS"><a class="permalink" href="#FIREWALL_BASICS">FIREWALL
- BASICS</a></h1>
-<p class="Pp">A Firewall is most commonly used to protect an internal network
- from an outside network by preventing the outside network from making
- arbitrary connections into the internal network. Firewalls are also used to
- prevent outside entities from spoofing internal IP addresses and to isolate
- services such as NFS or SMBFS (Windows file sharing) within LAN
- segments.</p>
-<p class="Pp">The <span class="Ux">FreeBSD</span> firewalling system also has
- the capability to limit bandwidth using <a class="Xr">dummynet(4)</a>. This
- feature can be useful when you need to guarantee a certain amount of
- bandwidth for a critical purpose. For example, if you are doing video
- conferencing over the Internet via your office T1 (1.5 MBits/s), you may
- wish to bandwidth-limit all other T1 traffic to 1 MBit/s in order to reserve
- at least 0.5 MBits for your video conferencing connections. Similarly if you
- are running a popular web or ftp site from a colocation facility you might
- want to limit bandwidth to prevent excessive bandwidth charges from your
- provider.</p>
-<p class="Pp">Finally, <span class="Ux">FreeBSD</span> firewalls may be used to
- divert packets or change the next-hop address for packets to help route them
- to the correct destination. Packet diversion is most often used to support
- NAT (network address translation), which allows an internal network using a
- private IP space to make connections to the outside for browsing or other
- purposes.</p>
-<p class="Pp" id="auth">Constructing a firewall may appear to be trivial, but
- most people get them wrong. The most common mistake is to create an
- exclusive firewall rather than an inclusive firewall. An exclusive firewall
- allows all packets through except for those matching a set of rules. An
- inclusive firewall allows only packets matching the ruleset through.
- Inclusive firewalls are much, much safer than exclusive firewalls but a tad
- more difficult to build properly. The second most common mistake is to
- blackhole everything except the particular port you want to let through.
- TCP/IP needs to be able to get certain types of ICMP errors to function
- properly - for example, to implement MTU discovery. Also, a number of common
- system daemons make reverse connections to the
- <a class="permalink" href="#auth"><b class="Sy">auth</b></a> service in an
- attempt to authenticate the user making a connection. Auth is rather
- dangerous but the proper implementation is to return a TCP reset for the
- connection attempt rather than simply blackholing the packet. We cover these
- and other quirks involved with constructing a firewall in the sample
- firewall section below.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IPFW_KERNEL_CONFIGURATION"><a class="permalink" href="#IPFW_KERNEL_CONFIGURATION">IPFW
- KERNEL CONFIGURATION</a></h1>
-<p class="Pp">You do not need to create a custom kernel to use the IP
- firewalling features. If you enable firewalling in your
- <span class="Pa">/etc/rc.conf</span> (see below), the ipfw kernel module
- will be loaded automatically when necessary. However, if you are paranoid
- you can compile IPFW directly into the <span class="Ux">FreeBSD</span>
- kernel by using the
- <a class="permalink" href="#IPFIREWALL"><b class="Sy" id="IPFIREWALL">IPFIREWALL</b></a>
- option set. If compiled in the kernel, ipfw denies all packets by default,
- which means that, if you do not load in a permissive ruleset via
- <span class="Pa">/etc/rc.conf</span>, rebooting into your new kernel will
- take the network offline. This can prevent you from being able to access
- your system if you are not sitting at the console. It is also quite common
- to update a kernel to a new release and reboot before updating the binaries.
- This can result in an incompatibility between the <a class="Xr">ipfw(8)</a>
- program and the kernel which prevents it from running in the boot sequence,
- also resulting in an inaccessible machine. Because of these problems the
- <a class="permalink" href="#IPFIREWALL_DEFAULT_TO_ACCEPT"><b class="Sy" id="IPFIREWALL_DEFAULT_TO_ACCEPT">IPFIREWALL_DEFAULT_TO_ACCEPT</b></a>
- kernel option is also available which changes the default firewall to pass
- through all packets. Note, however, that using this option may open a small
- window of opportunity during booting where your firewall passes all packets.
- Still, it is a good option to use while getting up to speed with
- <span class="Ux">FreeBSD</span> firewalling. Get rid of it once you
- understand how it all works to close the loophole, though. There is a third
- option called
- <a class="permalink" href="#IPDIVERT"><b class="Sy" id="IPDIVERT">IPDIVERT</b></a>
- which allows you to use the firewall to divert packets to a user program and
- is necessary if you wish to use <a class="Xr">natd(8)</a> to give private
- internal networks access to the outside world. If you want to be able to
- limit the bandwidth used by certain types of traffic, the
- <a class="permalink" href="#DUMMYNET"><b class="Sy" id="DUMMYNET">DUMMYNET</b></a>
- option must be used to enable
- <a class="permalink" href="#ipfw"><i class="Em" id="ipfw">ipfw pipe</i></a>
- rules.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SAMPLE_IPFW-BASED_FIREWALL"><a class="permalink" href="#SAMPLE_IPFW-BASED_FIREWALL">SAMPLE
- IPFW-BASED FIREWALL</a></h1>
-<p class="Pp">Here is an example ipfw-based firewall taken from a machine with
- three interface cards. fxp0 is connected to the 'exposed' LAN. Machines on
- this LAN are dual-homed with both internal 10. IP addresses and
- Internet-routed IP addresses. In our example, 192.100.5.x represents the
- Internet-routed IP block while 10.x.x.x represents the internal networks.
- While it is not relevant to the example, 10.0.1.x is assigned as the
- internal address block for the LAN on fxp0, 10.0.2.x for the LAN on fxp1,
- and 10.0.3.x for the LAN on fxp2.</p>
-<p class="Pp">In this example we want to isolate all three LANs from the
- Internet as well as isolate them from each other, and we want to give all
- internal addresses access to the Internet through a NAT gateway running on
- this machine. To make the NAT gateway work, the firewall machine is given
- two Internet-exposed addresses on fxp0 in addition to an internal 10.
- address on fxp0: one exposed address (not shown) represents the machine's
- official address, and the second exposed address (192.100.5.5 in our
- example) represents the NAT gateway rendezvous IP. We make the example more
- complex by giving the machines on the exposed LAN internal 10.0.0.x
- addresses as well as exposed addresses. The idea here is that you can bind
- internal services to internal addresses even on exposed machines and still
- protect those services from the Internet. The only services you run on
- exposed IP addresses would be the ones you wish to expose to the
- Internet.</p>
-<p class="Pp">It is important to note that the 10.0.0.x network in our example
- is not protected by our firewall. You must make sure that your Internet
- router protects this network from outside spoofing. Also, in our example, we
- pretty much give the exposed hosts free reign on our internal network when
- operating services through internal IP addresses (10.0.0.x). This is
- somewhat of security risk: what if an exposed host is compromised? To remove
- the risk and force everything coming in via LAN0 to go through the firewall,
- remove rules 01010 and 01011.</p>
-<p class="Pp">Finally, note that the use of internal addresses represents a big
- piece of our firewall protection mechanism. With proper spoofing safeguards
- in place, nothing outside can directly access an internal (LAN1 or LAN2)
- host.</p>
-<div class="Bd Pp Li">
-<pre># /etc/rc.conf
-#
-firewall_enable=&quot;YES&quot;
-firewall_type=&quot;/etc/ipfw.conf&quot;
-
-# temporary port binding range let
-# through the firewall.
-#
-# NOTE: heavily loaded services running through the firewall may require
-# a larger port range for local-size binding. 4000-10000 or 4000-30000
-# might be a better choice.
-ip_portrange_first=4000
-ip_portrange_last=5000
-...</pre>
-</div>
-<div class="Bd Pp Li">
-<pre># /etc/ipfw.conf
-#
-# FIREWALL: the firewall machine / nat gateway
-# LAN0 10.0.0.X and 192.100.5.X (dual homed)
-# LAN1 10.0.1.X
-# LAN2 10.0.2.X
-# sw: ethernet switch (unmanaged)
-#
-# 192.100.5.x represents IP addresses exposed to the Internet
-# (i.e. Internet routeable). 10.x.x.x represent internal IPs
-# (not exposed)
-#
-# [LAN1]
-# ^
-# |
-# FIREWALL --&gt;[LAN2]
-# |
-# [LAN0]
-# |
-# +--&gt; exposed host A
-# +--&gt; exposed host B
-# +--&gt; exposed host C
-# |
-# INTERNET (secondary firewall)
-# ROUTER
-# |
-# [Internet]
-#
-# NOT SHOWN: The INTERNET ROUTER must contain rules to disallow
-# all packets with source IP addresses in the 10. block in order
-# to protect the dual-homed 10.0.0.x block. Exposed hosts are
-# not otherwise protected in this example - they should only bind
-# exposed services to exposed IPs but can safely bind internal
-# services to internal IPs.
-#
-# The NAT gateway works by taking packets sent from internal
-# IP addresses to external IP addresses and routing them to natd, which
-# is listening on port 8668. This is handled by rule 00300. Data coming
-# back to natd from the outside world must also be routed to natd using
-# rule 00301. To make the example interesting, we note that we do
-# NOT have to run internal requests to exposed hosts through natd
-# (rule 00290) because those exposed hosts know about our
-# 10. network. This can reduce the load on natd. Also note that we
-# of course do not have to route internal&lt;-&gt;internal traffic through
-# natd since those hosts know how to route our 10. internal network.
-# The natd command we run from /etc/rc.local is shown below. See
-# also the in-kernel version of natd, ipnat.
-#
-# natd -s -u -a 208.161.114.67
-#
-#
-add 00290 skipto 1000 ip from 10.0.0.0/8 to 192.100.5.0/24
-add 00300 divert 8668 ip from 10.0.0.0/8 to not 10.0.0.0/8
-add 00301 divert 8668 ip from not 10.0.0.0/8 to 192.100.5.5
-
-# Short cut the rules to avoid running high bandwidths through
-# the entire rule set. Allow established tcp connections through,
-# and shortcut all outgoing packets under the assumption that
-# we need only firewall incoming packets.
-#
-# Allowing established tcp connections through creates a small
-# hole but may be necessary to avoid overloading your firewall.
-# If you are worried, you can move the rule to after the spoof
-# checks.
-#
-add 01000 allow tcp from any to any established
-add 01001 allow all from any to any out via fxp0
-add 01001 allow all from any to any out via fxp1
-add 01001 allow all from any to any out via fxp2
-
-# Spoof protection. This depends on how well you trust your
-# internal networks. Packets received via fxp1 MUST come from
-# 10.0.1.x. Packets received via fxp2 MUST come from 10.0.2.x.
-# Packets received via fxp0 cannot come from the LAN1 or LAN2
-# blocks. We cannot protect 10.0.0.x here, the Internet router
-# must do that for us.
-#
-add 01500 deny all from not 10.0.1.0/24 in via fxp1
-add 01500 deny all from not 10.0.2.0/24 in via fxp2
-add 01501 deny all from 10.0.1.0/24 in via fxp0
-add 01501 deny all from 10.0.2.0/24 in via fxp0
-
-# In this example rule set there are no restrictions between
-# internal hosts, even those on the exposed LAN (as long as
-# they use an internal IP address). This represents a
-# potential security hole (what if an exposed host is
-# compromised?). If you want full restrictions to apply
-# between the three LANs, firewalling them off from each
-# other for added security, remove these two rules.
-#
-# If you want to isolate LAN1 and LAN2, but still want
-# to give exposed hosts free reign with each other, get
-# rid of rule 01010 and keep rule 01011.
-#
-# (commented out, uncomment for less restrictive firewall)
-#add 01010 allow all from 10.0.0.0/8 to 10.0.0.0/8
-#add 01011 allow all from 192.100.5.0/24 to 192.100.5.0/24
-#
-
-# SPECIFIC SERVICES ALLOWED FROM SPECIFIC LANS
-#
-# If using a more restrictive firewall, allow specific LANs
-# access to specific services running on the firewall itself.
-# In this case we assume LAN1 needs access to filesharing running
-# on the firewall. If using a less restrictive firewall
-# (allowing rule 01010), you do not need these rules.
-#
-add 01012 allow tcp from 10.0.1.0/8 to 10.0.1.1 139
-add 01012 allow udp from 10.0.1.0/8 to 10.0.1.1 137,138
-
-# GENERAL SERVICES ALLOWED TO CROSS INTERNAL AND EXPOSED LANS
-#
-# We allow specific UDP services through: DNS lookups, ntalk, and ntp.
-# Note that internal services are protected by virtue of having
-# spoof-proof internal IP addresses (10. net), so these rules
-# really only apply to services bound to exposed IPs. We have
-# to allow UDP fragments or larger fragmented UDP packets will
-# not survive the firewall.
-#
-# If we want to expose high-numbered temporary service ports
-# for things like DNS lookup responses we can use a port range,
-# in this example 4000-65535, and we set to /etc/rc.conf variables
-# on all exposed machines to make sure they bind temporary ports
-# to the exposed port range (see rc.conf example above)
-#
-add 02000 allow udp from any to any 4000-65535,domain,ntalk,ntp
-add 02500 allow udp from any to any frag
-
-# Allow similar services for TCP. Again, these only apply to
-# services bound to exposed addresses. NOTE: we allow 'auth'
-# through but do not actually run an identd server on any exposed
-# port. This allows the machine being authed to respond with a
-# TCP RESET. Throwing the packet away would result in delays
-# when connecting to remote services that do reverse ident lookups.
-#
-# Note that we do not allow tcp fragments through, and that we do
-# not allow fragments in general (except for UDP fragments). We
-# expect the TCP mtu discovery protocol to work properly so there
-# should be no TCP fragments.
-#
-add 03000 allow tcp from any to any http,https
-add 03000 allow tcp from any to any 4000-65535,ssh,smtp,domain,ntalk
-add 03000 allow tcp from any to any auth,pop3,ftp,ftp-data
-
-# It is important to allow certain ICMP types through, here is a list
-# of general ICMP types. Note that it is important to let ICMP type 3
-# through.
-#
-# 0 Echo Reply
-# 3 Destination Unreachable (used by TCP MTU discovery, aka
-# packet-too-big)
-# 4 Source Quench (typically not allowed)
-# 5 Redirect (typically not allowed - can be dangerous!)
-# 8 Echo
-# 11 Time Exceeded
-# 12 Parameter Problem
-# 13 Timestamp
-# 14 Timestamp Reply
-#
-# Sometimes people need to allow ICMP REDIRECT packets, which is
-# type 5, but if you allow it make sure that your Internet router
-# disallows it.
-
-add 04000 allow icmp from any to any icmptypes 0,3,8,11,12,13,14
-
-# log any remaining fragments that get through. Might be useful,
-# otherwise do not bother. Have a final deny rule as a safety to
-# guarantee that your firewall is inclusive no matter how the kernel
-# is configured.
-#
-add 05000 deny log ip from any to any frag
-add 06000 deny all from any to any</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="PORT_BINDING_INTERNAL_AND_EXTERNAL_SERVICES"><a class="permalink" href="#PORT_BINDING_INTERNAL_AND_EXTERNAL_SERVICES">PORT
- BINDING INTERNAL AND EXTERNAL SERVICES</a></h1>
-<p class="Pp">We have mentioned multi-homing hosts and binding services to
- internal or external addresses but we have not really explained it. When you
- have a host with multiple IP addresses assigned to it, you can bind services
- run on that host to specific IPs or interfaces rather than all IPs. Take the
- firewall machine for example: with three interfaces and two exposed IP
- addresses on one of those interfaces, the firewall machine is known by 5
- different IP addresses (10.0.0.1, 10.0.1.1, 10.0.2.1, 192.100.5.5, and say
- 192.100.5.1). If the firewall is providing file sharing services to the
- windows LAN segment (say it is LAN1), you can use samba's 'bind interfaces'
- directive to specifically bind it to just the LAN1 IP address. That way the
- file sharing services will not be made available to other LAN segments. The
- same goes for NFS. If LAN2 has your UNIX engineering workstations, you can
- tell nfsd to bind specifically to 10.0.2.1. You can specify how to bind
- virtually every service on the machine and you can use a light
- <a class="Xr">jail(8)</a> to indirectly bind services that do not otherwise
- give you the option.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">dummynet(4)</a>, <a class="Xr">ipnat(5)</a>,
- <a class="Xr">rc.conf(5)</a>, <a class="Xr">smb.conf(5)</a>
- (<span class="Pa">ports/net/samba</span>), <a class="Xr">samba(7)</a>
- (<span class="Pa">ports/net/samba</span>), <a class="Xr">config(8)</a>,
- <a class="Xr">ipfw(8)</a>, <a class="Xr">ipnat(8)</a>,
- <a class="Xr">jail(8)</a>, <a class="Xr">natd(8)</a>,
- <a class="Xr">nfsd(8)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="ADDITIONAL_READING"><a class="permalink" href="#ADDITIONAL_READING">ADDITIONAL
- READING</a></h1>
-<dl class="Bl-tag">
- <dt><code class="Nm">Ipfilter</code></dt>
- <dd><a class="Xr">ipf(5)</a>, <a class="Xr">ipf(8)</a>,
- <a class="Xr">ipfstat(8)</a></dd>
- <dt><code class="Nm">Packet Filter</code></dt>
- <dd><a class="Xr">pf.conf(5)</a>, <a class="Xr">pfctl(8)</a>,
- <a class="Xr">pflogd(8)</a></dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The <code class="Nm">firewall</code> manual page was originally
- written by <span class="An">Matthew Dillon</span> and first appeared in
- <span class="Ux">FreeBSD 4.3</span>, May 2001.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">May 26, 2001</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>